Article Image
Article Image

Disclaimer: These were all the links in my read later for this week. It doesn’t mean that I agree or approve any of the content. The longest ones will be included in hr to keep them separated from the rest of the content.

Notice: Some of the links may be either explicit or may disturb someone. It should be obvious (99% of the times it will) from the title if that’s the case or not . Proceed at your own risk.

Deploying with Python

If you use python on your server this is an interesting read.

Dropdown Menus are evil

Really nice design tips about menus and options.

Swift Protocols

Freelance Accounting

Hufflingtonpost covering Trump campaign as Entertainment

As it should be. He is a joke.

A nice insight on who buys iPods nowadays

Cause everything is not always as you think it is.

The average tech nerd will look at the $149 price of the Nano and compare it to the $199 Touch and wonder why someone wouldn’t spend the extra $50 to get “so much more.” This question simply displays a lack of understanding as to how the market at large currently works. It’s similar to someone saying “why would you buy an iPad when you can buy a Windows laptop of the same price that does more?” You can’t always say what’s best for people to buy based on the raw tech specs.

I might be just anothet tech guy trying to prove his point, but I don’t agree. It’s just a waste of money to buy the iPod nano and the iPad in those cases, no matter what’s your use case. And I’m not talking about specs, I’m just talking about the difference in what you can do with the device. Even if the specs of the iPad/nano would be superior, buying a device that’s way more capable and has way more feature is a better deal.

This makes total sense when you consider that 10 year olds simply don’t have MP3 collections anymore. They certainly don’t have collections like we used to have when I was a kid. I used to buy CDs and rip them to my iPod. I would borrow CDs from friends to do the same thing. I would find many ways to get music and cram my iTunes full of as much music as possible. This is not what “the kids” do anymore, so an iPod that you need to load files onto is completely useless to them.

Yeah, Nostalgia were good times… To be honest it’s still like that for me. I want my library with my songs. I don’t want human curation and I don’t want algorithm curation either.

The points to focus on with your startup pitch

I find it funny, the problem in europe with this is that there is no start up scene and no one who’s gonna fund anything at all (Apart from London / Berlin /Asterdam and a few more cities).

Interesting Videos

Do your PR

Things you don’t know about 2 major players in WordPress

Analysis of an iOS jailbreak

Britain ghost trains

What’s a lawful order

Got it? If an officer walks up to you and gives you an order, you’re “presumed” to immediately know every area of state and federal law. And on top of that, you’re presumed to know all the facts known to the officer that the officer won’t tell you. Great. (Oh, and I don’t mean to pick on Oregon; it just seems to have more clear law on this issue than other jurisdictions I found.)

But this is America, and we didn’t fight a revolution to make that the only choice. And your options, if you want to assert the rights you have, can be awfully hard to figure out.

I really don’t think this is isolated to America. You are presumed to know every law in Europe as well…

Detecting Cheaters


Second, it wasn’t just that a user happened to arrive from the same IP as a single other user. It could be as high as 10 other users. There must be a lot more IP address reuse and sharing going on than I was assuming. So this really won’t work as anything except a first filter to reduce the search space a bit.

The problem is that, at least in Italy, we have an ISP who uses the same IP address for each few building so 100+ people are going to have the same IP address…

Terry Tao

Explanation of identity theft

Sorting Algorithms animations

Typography tips

Shatter Anonymity on TOR using keystoke data

.Net 4.6 Bugged

The methods you call can get different parameter values than you passed in.


The method we called did not get the parameters we passed. That’s it. The net result of this is that local cache (which we use very heavily) is either unreliable or non-existent. This would add a tremendous amount of load to our entire infrastructure, making Stack Overflow much slower and likely leading to a full outage.

That’s not why we’re telling you about this though. Let’s step back and look at the big picture. What are some other variable names we could use?

Does that help put things in perspective?

This bug is not obvious for several reasons:

It only happens with optimizations enabled. For most developers and projects, that’s not in DEBUG and won’t show locally.
That means you’ll only see this in RELEASE, which for most people is only production.
Attaching a debugger alters the behavior. This almost always hides the issue.
Adding a Debug.WriteLine() will often fix the issue because of the tail change.
It won’t reproduce in certain scenarios (e.g. we can’t repro this in a console application or VS hosting, only IIS).
Given the nature of the bug, as far as we can tell, it can equally affect any framework library as well.
It can happen in a NuGet library (most of which are RELEASE); the issue may not be in your code at all.

PS: Has been patched.

How to do email introductions

Uber breaking law after law

Meanwhile, it pays the tickets for UberPop drivers who get caught and encourages them to get back on the road.

Behind The Screen At Hewlett-Packard

Natural Language for a date baked in iOS

Reddit - Auto shadow banning

Opening windows 10 store for devs

Stats from student hackers

Programming languages

Programming languages? LOL Sure… Whatever you say.

Anyway the rest of the stats are interesting so don’t hold back only for that.

Oh Microsoft…

“We will access, disclose and preserve personal data, including your content (such as the content of your emails, other private communications or files in private folders), when we have a good faith belief that doing so is necessary to”. - Microsoft

SSL Tools

I’m Linus Sebastian of LinusTechTips, and This Is How I Work

Execution is everything. Sitting around and planning is worthless unless it turns into something tangible. You’re better off to have 100% execution of a 50% plan than 50% execution of a 100% plan. Nothing drives me crazier than sitting around pontificating about “the perfect way to do something” when we’re in a hurry, which is always if you want to get anything done.

Bay Area -> English Translator

Universal Windows Apps

Free UI

Steve Jobs Insult Response: An Analysis


Hard drive reliability q2 2015

Test guides - Did I remember to?

Falsehoods programmers believe about geography

Places have only one official name per language
Place names can be written with the usual character set of a country
Places have only one official address
Countries have capitals
Switzerland does not. The government is currently in Bern, but the city is not the capital.
Buildings do not move
In Zürich, a 6200 ton building was moved by 60 meters to make way for railway tracks
Street adresses contain street names
Language codes will match the country code of the country they are associated with

Falsehoods programmers believe about time

Ok, that’s not true. But at least the time zone in which a program has to run will never change.

The system clock will always be set to the correct local time.

The system clock will always be set to a time that is not wildly different from the correct local time.

The server clock and the client clock will always be set to the same time.

Time has no beginning and no end.

About this last one -> Wiki:

The latest time that can be represented in Unix’s signed 32-bit integer time format is 03:14:07 UTC on Tuesday, 19 January 2038 (2,147,483,647 seconds after 1 January 1970).[2] Times beyond that will “wrap around” and be stored internally as a negative number, which these systems will interpret as having occurred on 13 December 1901 rather than 19 January 2038. This is caused by integer overflow.

Possible solutions:

There is no universal solution for the Year 2038. Any change to the definition of the time_t data type would result in code compatibility problems in any application in which date and time representations are dependent on the nature of the signed 32-bit time_t integer. For example, changing time_t to an unsigned 32-bit integer, which would extend the range to the year 2106, would adversely affect programs that store, retrieve, or manipulate dates prior to 1970, as such dates are represented by negative numbers. Increasing the size of the time_t type to 64-bit in an existing system would cause incompatible changes to the layout of structures and the binary interface of functions.

There is also no universal solution for the issue with DVB and ATSC real time transmitted dates due to issues with legacy receivers. Also the issue has yet to be acknowledged or resolved by either organization. The only work around would be to discontinue all time related metadata services such as programming guides and automatic date synchronization after the affected dates. One possible option would be to create new table types for the affected part of the specifications and use ISO 8601 date strings rather than fixed integers as is used in ISO 9660 and ISO 13346 filesystems.

Most operating systems designed to run on 64-bit hardware already use signed 64-bit time_t integers. Using a signed 64-bit value introduces a new wraparound date that is over twenty times greater than the estimated age of the universe: approximately 292 billion years from now, at 15:30:08 on Sunday, 4 December 292,277,026,596. The ability to make computations on dates is limited by the fact that tm_year uses a signed 32 bit int value starting at 1900 for the year. This limits the year to a maximum of 2,147,485,547 (2,147,483,647 + 1900).[12]

Continuation of the list:

One minute on the system clock has exactly the same duration as one minute on any other clock

Fine, but the duration of one minute on the system clock would never be more than an hour.

Explanation for this last point:

There was a fascinating bug in older versions of KVM on CentOS. Specifically, a KVM virtual machine had no awareness that it was not running on physical hardware. This meant that if the host OS put the VM into a suspended state, the virtualized system clock would retain the time that it had had when it was suspended. E.g. if the VM was suspended at 13:00 and then brought back to an active state two hours later (at 15:00), the system clock on the VM would still reflect a local time of 13:00. The result was that every time a KVM VM went idle, the host OS would put it into a suspended state and the VM’s system clock would start to drift away from reality, sometimes by a large margin depending on how long the VM had remained idle.

There was a cron job that could be installed to keep the virtualized system clock in line with the host OS’s hardware clock. But it was easy to forget to do this on new VMs and failure to do so led to much hilarity. The bug has been fixed in more recent versions.

Continuation of the list:

Daylight saving time happens at the same time every year.

Daylight saving time happens at the same time in every time zone.

Daylight saving time always adjusts by an hour.

Days begin in the morning.

If you create two date objects right beside each other, they’ll represent the same time. (a fantastic Heisenbug generator)

If a process runs for n seconds and then terminates, approximately n seconds will have elapsed on the system clock at the time of termination.

Holidays span an integer number of whole days.

Thread.sleep(1000) sleeps for 1000 milliseconds.

Thread.sleep(1000) sleeps for >= 1000 milliseconds.

There are 60 seconds in every minute.

Timestamps always advance monotonically.

GMT and UTC are the same timezone.

Time always goes forwards.

24:12:34 is a invalid time

If you take a w3c published algorithm for adding durations to dates, it will work in all cases.

There are only 24 time zones

Reading the client’s clock and comparing to UTC is a good way to determine their timezone

My software is only used internally/locally, so I don’t have to worry about timezones

Each calendar date is followed by the next in sequence, without skipping.

The software will never run on a space ship that is orbiting a black hole.

Falsehoods programmers believe about addresses

No buildings are numbered zero

Well, at the very least no buildings have negative numbers

A building number will only be used once per street

The number of buildings is the difference between the highest and lowest building numbers

If the addresses on the left of the road are even, the addresses on the right must be odd

Well, at least you can omit leading zeros
“apartments 1 and 001 were on different floors.”

A street with a building A will not also have a building Alpha

Street names always end in descriptors like ‘street’, ‘avenue’, ‘drive’, ‘square’, ‘hill’ or ‘view’

OK, but at the very least you wouldn’t name a town Street

Street numbers (and building numbers) don’t contain fractions

Street names don’t recurr in the same city

Taking London as Example:

High Street, London, W3 6LJ
High Street, London, W5 5DB
High Street, London, N8 7PB
High Street, London, SE25 6EP
High Street, London, E13 0AJ
High Street, London, E17 7LD
High Street, London, NW10 4LX
Islington High Street, London, N1 9TR
Shoreditch High Street, London, E1 6PG
Camden High Street, London, NW1 0JH
Kensington High Street, London, W14 8NL
Lewisham High Street, London, SE13 6AD
High Street Wimbledon, London, SW19 5DX
High Street Wanstead, London, E11 2AJ
High Street Colliers Wood, London, SW19 2AE
High Street North, London, E6 2HJ

Addresses will have a street

An address will include a state in the US sense.

An address will have a county

You can’t have two towns cities with the same name in the same country
“Sure you can - for example the UK has three towns called Newport.”

OK, but those cities won’t have duplicate street names


10 High Street, Newport, PO30 1SS
10 High Street, Newport, NP20 1FQ
10 High Street, Newport, TF10 7AN

A single postcode will be larger than a single building

OK, but you don’t get multiple postcodes per building

Example [Different postcodes for department]:

London Borough of Enfield, Civic Centre, Silver Street, ENFIELD, EN1 3ES
Returning Officer, London Borough of Enfield, Civic Centre, Silver Street, ENFIELD, EN1 9SA
Edmonton, London Borough of Enfield, Civic Centre, Silver Street, ENFIELD, EN1 9SB
Enfield North, London Borough of Enfield, Civic Centre, Silver Street, ENFIELD, EN1 9SD
Enfield Southgate, London Borough of Enfield, Civic Centre, Silver Street, ENFIELD, EN1 3ZW
But the Enfield council website contact page lists their postcode as EN1 3XY - which the Royal Mail think is a PO Box at the sorting office.

A zip code corresponds to a single city

Zip codes don’t start with a zero

Addresses will have a reasonable number of characters - less than 100, say.


Not when organisation and department names can be included in addresses! For example: Department For Environment Food & Rural Affairs (D E F R A), State Veterinary Service, Animal Health Office, Hadrian House, Wavell Drive, Rosehill Industrial Estate, Carlisle, CA1 2TB, United Kingdom

Another example: The Gynaecology Cancer Research Unit, Department of Obstetrics & Gynaecology, St. Bartholomews & The Royal School of Medicine & Dentistry, Charterhouse Square, London, EC1M 6GR, United Kingdom

Continuing the list:

But street names will be reasonably short - certainly less than 50 characters


Susanne Schmidt provides the longest street name in Germany: Bischöflich-Geistlicher-Rat-Josef-Zinnbauer-Straße in 84130 Dingolfing, Bavaria

Graham Rhind suggests this 89-character street name in Bihac, Bosnia: Aleja Alije Izetbegovića Prvig Predsjednika Predsjedništva Republika Bosna i Hercegovina

Continuing List:

Five lines and country will cover all cases.


You’ll need 8 lines and country to deliver to: GB Technical Services, Unit W7a, Warwick House, 18 Forge Lane, Minworth Industrial Park, Minworth, Sutton Coldfield, B76 1AH, United Kingdom

But they don’t contain commas, brackets, apostrophes, hyphens, ampersands, dots or exclamation marks


1 Highview Terrace, Westward Ho!, Bideford, EX39 1AQ (exclamation mark is omitted in some databases)

More generally, addresses can contain organisation names, and organisations can have names like Yahoo! with an exclamation mark. Legislation on company sets out the allowable characters for the UK and it permits company names including ! LTD (company 08209948); @ LTD (company 08209882); $ LTD (company 08209885) and % LTD (company 04487680) as well as a variety of other names I don’t have examples for as the companies house website won’t let me search for them.

An address will exist in the country’s postal service’s database

An address in the country’s postal service’s database will exist

Every address can be expressed in a way that will pass all validators


Susannah Fleming lived on the road the Royal Mail call Top O’The Lane, Brindle, Chorley, PR6 8PA. She reports representations in different databases include:

Top o’ th’ Lane
Top o’th’ Lane
Top oth Lane
Top o’ the Lane
Top of the Lane
Workhouse Lane (a historical name of the road)
Denham Lane (name of the road continuation)

Customers will have a fixed address with a fixed location

An address can be expressed with a single country

Real place names won’t contain rude words

Each person has exactly one address

Falsehoods Programmers Believe About Gender

Okay, then there are two and only two biological genders.

Even if the gender can change, it will only change from the one value to the other value.

Only one gender can be “active” at the same time. X

Falsehoods Programmers Believe About Names

People have exactly one full name which they go by.

People have, at this point in time, one full name which they go by.

People have exactly N names, for any value of N.

People’s names fit within a certain defined amount of space.

People’s names are all mapped in Unicode code points.

People’s names are case sensitive.

People’s names are case insensitive.

People’s names do not contain numbers.

People’s names are not written in ALL CAPS.

People’s names are not written in all lower case letters.

People’s names have an order to them. Picking any ordering scheme will automatically result in consistent ordering among all systems, as long as both use the same ordering scheme for the same name.

People’s first names and last names are, by necessity, different.

People have last names, family names, or anything else which is shared by folks recognized as their relatives.

Alright alright but surely people’s names are diverse enough such that no million people share the same name.

My system will never have to deal with names from China.

Or Japan.

Or Korea.

Or Ireland, the United Kingdom, the United States, Spain, Mexico, Brazil, Peru, Russia, Sweden, Botswana, South Africa, Trinidad, Haiti, France, or the Klingon Empire, all of which have “weird” naming schemes in common use.

That Klingon Empire thing was a joke, right?

Confound your cultural relativism! People in my society, at least, agree on one commonly accepted standard for names.

There exists an algorithm which transforms names and can be reversed losslessly. (Yes, yes, you can do it if your algorithm returns the input. You get a gold star.)

I can safely assume that this dictionary of bad words contains no people’s names in it.

Two different systems containing data about the same person will use the same name for that person.

Two different data entry operators, given a person’s name, will by necessity enter bitwise equivalent strings on any single system, if the system is well-designed.

People whose names break my system are weird outliers. They should have had solid, acceptable names, like 田中太郎.

People have names.

If a person has a title such as “Doctor”, they will have at most one such title. (In Germany, the over-educated go by names such as “Prof. Dr. Dr. Hans Schmidt” – a professor with two PhD’s)

People’s names do not contain punctuation.

People’s names do not contain punctuation other than apostrophes.

A person name in country–1 is the same as his name in country–2.

Scaling ruby apps

Crashes only on Wednesdays

Caught on yet? On Wednesdays, and only on Wednesdays, if somebody manually twiddled certain bits in the monitor settings in a certain way, two events would occur during the same millisecond and cause the DB to throw an exception, and the error message that logged this would be exactly 81 bytes long including the null terminator, overflowing the 80-char buffer and causing the program to crash!

I have no words…

7 Open Source iOS Controls

Every single one of them is great.

Set Theory and Foundations of Mathematics

RE Tool

It’s also open sourced.

Job Hunting For Web Designers and Developers

using Slack to work better and differently

How Google Translate squeezes deep learning onto a phone

This 90-Day Plan Turns Engineers into Remarkable Managers

As a manager, you no longer ride the rollercoaster. But you operate it. That should exhilarate you. If it doesn’t, maybe it’s not for you.

I find this anology to be fitting, and nope, of course it doesn’t exilarate me. I’ll pass.

Past and Future of Science Fiction

Becoming a contractor programmer in the UK

Because big companies are determined to stream you all your music for a monthly fee and iTunes continues to be an astonishingly horrible program.

More dirty coding tricks from game developers


Back on the first Wing Commander we were getting an exception from our EMM386 memory manager when we exited the game. We’d clear the screen and a single line would print out, something like “EMM386 Memory manager error. Blah blah blah.”

We had to ship ASAP, so I hex edited the error in the memory manager itself to read “Thank you for playing Wing Commander.


When all seemed lost, someone figured out if you played the games in an odd, and very specific order, the flash memory would sort of work. So an extra leaflet was added to every box explaining how to use this “feature.”


In those days, before nice IDEs and smart compilers, we used to write all games in assembly language. All the .s files contained the respective assembler code for a particular part of the game; creature1.s, collision.s, controls.s, and so forth. We used makefiles too, where the programmer would create a new .s file, and place it after everything else in the makefile.

The idea is that you’d type “make” on the command-line, and the assembler would assemble each file into a new .o and then the linker would link all of them together to build the final executable. We had one programmer who notoriously wrote buggy code that would typically stomp on some random piece of memory. Usually buffer overruns.

He would spend some time trying to find the bugs, but when he couldn’t, he would … get this … reorder the makefile so the files statically linked in a different order in memory! That just meant the piece of memory being randomly written over was now somewhere else, but by pure luck, the game wouldn’t crash, either. He kept doing this until basically all permutations of the makefile resulted in a crash.

At the 11th hour when the game was about to ship, he solved the problem. He simply kept creating new .s files filled with little pieces of data, which he inserted into random places in the makefile until it somehow didn’t crash—then shipped it! There are at least two games (for the Game Boy) released during that time period that use this “technique.”


For one reason or another, there was this huge incompatibility between an existing code base, and a new (approximately) zillion lines of code that had been written to use the first set of code libraries. The first set of code was written by people who were more into the idea of “safe” programming, making it as strict and restrictive as possible, to avoid errors. So they used a C / C++ language feature called CONST.

CONST means “constant,” and makes sure that read-only variables can’t be changed inside certain functions. CONST and non-CONST code are not compatible and cause the compiler to barf. The team decided to just take a hacksaw to the code and performed this clever little trick: #define const which redefines const to be…. NOTHING. empty space. So: const int x; when pre-processed for compiling becomes: int x; This is the equivalent of buying a car, taking two of its tires off, and using it as a motorcycle.


About a year later on the next project I ran into exactly the same bug. I used exactly the same fix. The worst one was actually after ship, when we were doing a content patch. The way our DLC/patching worked, we couldn’t patch any compiled UnrealScript, but there was a bug where two RPC calls had not been marked “reliable,” meaning that the packets to invoke them are resent until ACKed. As a result, under reasonably crappy network conditions, the functions to toggle readiness and voice status in the lobby would sometimes not get called. But marking RPCs as “reliable” needs to be done in UnrealScript, and we couldn’t patch UnrealScript.

So, at startup, we looped through all loaded UFunction objects (C++ representation of script function), did a string compare on the name, and set the “reliable” flag on those two. Worked great.


This went on until, finally, one of the testers noticed that it happened more often when an air strike occurred near your vehicles. Using that info I was able to track it down. Because the camera was using velocity and acceleration and could be collided with, I had derived it from our PhysicalObject class, which had those characteristics. It also had another characteristic: PhysicalObjects could take damage. The air strikes did enough damage in a large enough radius that they were quite literally “killing” the camera.

I did fix the bug by ensuring that cameras couldn’t take damage, but just to be sure, I boosted their armor and hit points to ridiculous levels. I believe I can safely say we had the toughest camera in any game.


I was a tester for The New Tetris on the N64. There was a crash that I could reproduce every time, which would display a dump of the registers just before locking up. You had to power cycle the N64 to get it to go away: even the reset key was unresponsive.

The game also had some unrelated secret codes you could enter to unlock various things. One day I joked that the developer should replace the hex dump screen with a screen that says “Congratulations! You have discovered a secret code! Turn your console off and back on, then enter the username HALUCI.” So he did. And that’s how it shipped.


We coded the game in straight Z80 assembly. There was lots of fun stuff like copying code to a white board and stepping through it one line at a time mentally, updating the memory contents on another white board, because we didn’t have a real debugger. Good times.

Finally, around 5 am, after smashing our heads against this all night, we had an idea—not something we thought would work, but at least something worth trying. Mike coded the scoring system in Quick BASIC, and it scored just like the arcade machine. So we translated the BASIC, line by line to Z80 assembly.


A week later we noticed there was a huge memory leak – about 4KB per minute


I then remembered that when you put the window in the notification area or in the start-menu bar, Windows immediately reclaims unused/freed memory. Here was our chance! I wound up adding a timer in the application that every couple of minutes would put the window in the Start menu bar, and display it fullscreen right after. It looked like a blink on screen, but it worked! We were able to ship after that, giving us some more time to fix the bug (which we found a few days later— some window handle was not properly cleaned).


Back in the 1970s I was working on a banking system with a team using a long-gone programming language known as MPL2. This language had a restriction of 256 global variables and, since all were in use, adding new features to the system often meant searching for a variable to free up or use for two different purposes in different parts of the code.

It was a risky and a time-consuming process. Within the program each function could have its own 256 variables limited to the scope of that function. At home one night a revelation came into my mind. The next morning I proposed to my boss that we wrap the entire code in a function. We would then have 256 global variables of the program available to us, as the current 256 were now safe in the “inner” function.

The program itself would just declare some more variables then call the function, which was the entire original program, but now able to “see” not only its own embedded 256 variables but also the newly available 256 global variables. My boss was skeptical but allowed me the two hour compile window to try it, and was dumbfounded when it worked, overcoming what had been a problem for the team for a couple of years.

Introduction to Secure Coding Guide

Debugging @ Artsy

ARM disassembly

iOS builds @ square

Fave Board Games

Differences between iOS and Material design

Deference is where it differs a lot. iOS gives total priority to the content while Android uses the concept of cards to make the content seem more tactile, thus losing important real estate in the left and right portions of the screen. The overwhelming colors also take priority over the content.

Improving Facebook performance on android

Self hosting

This is just a gold mine.

Disable windows 10 tracking

How to Talk to Your Child About Elon Musk

UViewController view loading process

Not Doing

Regular Expressions Tutorial

Timing App for Mac

Free platformer assets

On Writing

Battery Maintenance

Patent posters

Random Images API

How I Write: William Dalrymple

Design in Sketch Then Animate In Keynote

An Homage To Strict Coding

iOS Unit Testing

Swift Error Type Protocol


LLVM’s intermediate representation (IR) is its great innovation. LLVM works on a representation of programs that you can actually read if you can read assembly.

LLVM is nicely written: its architecture is way more modular than other compilers. Part of the reason for this niceness comes from its original implementor, who is one of us.

LLVM is also an industrial-strength compiler backed by the largest company on Earth. This means you don’t have to compromise between a great compiler and a hackable compiler […]

Pieces of LLVM

The front end, which takes your source code and turns it into an intermediate representation or IR. This translation simplifies the job of the rest of the compiler, which doesn’t want to deal with the full complexity of C++ source code

The passes, which transform IR to IR. In ordinary circumstances, passes usually optimize the code: that is, they produce an IR program as output that does the same thing as the IR they took as input, except that it’s faster. This is where you want to hack.

The back end, which generates actual machine code. You almost certainly don’t need to touch this part.

Related -> Building LLVM on OSX

This is necessary since the version in XcodeTools in not complete enough.

API Docs:

You will need to live inside these API docs to make any progress at all while hacking on LLVM. Those pages can be hard to navigate, though, so I recommend going through Google. If you append “LLVM” to any function or class name, Google usually finds the right Doxygen page. (If you’re diligent, you can even train Google to give you LLVM results first even without typing “LLVM”!)

Language Reference

Programmer’s Manual

How to stop Windows 10’s prying eyes

What to do before launch

Programming Blogs to read

Programming Comics

The Old New Thing - MSDN

Probably the best blog on MSDN.

C# Blog

Game Programming Articles

With great illustrations.

Getting started with Unit Tests - Python - Pytest

How I “hacked” the OnePlus reservation system.

Azure Machine Learning

Xcode Server Tutorials - Part 1

Code samples that correctly check the remote server’s SSL certificate


Don’t Put View Code Into Your View Controller

If Your Flight Is Overbooked, Don’t Volunteer to Get Bumped

SSH Who Am I?

Why I’m The Best Programmer In The World*

Artsy open sourcing Energy

Chameleon in Windows 10

Pokemon Palettes

Your single AWS account is a serious risk

The technology behind preview photos


What is a good subreddit to binge read the All Time Top Posts of?

Why Your Rent Is So High and Your Pay Is So Low

The word “Pixels” is copyrighted of course

Firefox exploit found in the wild

What We Got Wrong About Self-Management

Windows 10 privacy Policy

Oracle blogger: No, you can’t look at our code.

The post has been deleted, here’s a mirror. And another article about it.

Hamburger Menu

RSS Debugging


HTC stores fingerprints as plaintext

Building a desktop application with Electron

Parenting Advices

Font Finder

Washington Post reporter charged with trespassing, interfering with a police officer

Presumption of stupidity

Five app prototyping tools compared:, Pixate, Origami, Framer

Shell vs Native Apps

Crafting Icons

What’s new for developers in Windows 10

Blog Logo

Valentino Urbano



Valentino Urbano

iOS Developer, Swift, Writer, Husband

Back to Overview