Thursday, December 24, 2015

DAC and ADC explanation

This is a good video that explains how audio signals are sampled and represented digitally, and what effect that has on the final analog output.

Thursday, December 17, 2015

Armoured Octopus

Monday, December 14, 2015

Sunday, December 13, 2015

PBS Frontline: The Warning

PBS Frontline about the 2008 market crash.

Sunday, November 29, 2015

Life - Highly Intelligent Monkey

This documentary is on Netflix, and is quite good.

Saturday, October 17, 2015

Big Mac Index

The big mac index is a quick attempt at explaining purchasing power parity.  The idea being that simply knowing the exchange rate is not enough to know how valuable your money from one country will actually be when you try to purchase actual goods there.

Here is the fun part though:
Critics of the presidency of Cristina Fern├índez de Kirchner in Argentina and many economists believe that the government has for years falsified consumer price data to understate the country's true inflation rate. The Economist stated in January 2011 that Big Mac index "does support claims that Argentina’s government is cooking the books. The gap between its average annual rate of burger inflation (19%) and its official rate (10%) is far bigger than in any other country." That year the press began reporting on unusual behavior by the more than 200 Argentinean McDonald's restaurants. They no longer prominently advertised Big Macs for sale and the sandwich, both individually and as part of value meals, was being sold for an unusually low price compared to other items. Guillermo Moreno, Secretary of Commerce in the Kirchner government, reportedly forced McDonald's to sell the Big Mac at an artificially low price to manipulate the country's performance on the Big Mac index. In June 2012, the price of the Big Mac value meal suddenly rose by 26%, closer to that of other meals, after The Economist, The New York Times, and other media reported on the unusual pricing. A Buenos Aires newspaper stated "Moreno loses the battle".

Friday, October 16, 2015

How is NSA breaking so much crypto?
For the most common strength of Diffie-Hellman (1024 bits), it would cost a few hundred million dollars to build a machine, based on special purpose hardware, that would be able to crack one Diffie-Hellman prime every year.

Would this be worth it for an intelligence agency? Since a handful of primes are so widely reused, the payoff, in terms of connections they could decrypt, would be enormous. Breaking a single, common 1024-bit prime would allow NSA to passively decrypt connections to two-thirds of VPNs and a quarter of all SSH servers globally. Breaking a second 1024-bit prime would allow passive eavesdropping on connections to nearly 20% of the top million HTTPS websites. In other words, a one-time investment in massive computation would make it possible to eavesdrop on trillions of encrypted connections.

Friday, September 25, 2015

Volkswagen's Clean Diesel
Since 2009, we now know, Volkswagen had been inserting intricate code in its vehicle software that tracked steering and pedal movements. When those movements suggested that the car was being tested for nitrogen-oxide emissions in a lab, the car automatically turned its pollution controls on. The rest of the time, the pollution controls switched off.

This is old hat by now, but I thought this article did a good job of giving a bit more detail about the specifics of what actually happened.

Saturday, August 29, 2015

HTTP Status Cats API

Three years ago, I called out the proposed new TLDs as stupid. Today, I formally withdraw my oppositionIt turns out .cat is not one of the new TLDs so my opposition has been reinstated.

Monday, August 24, 2015

At the Institute for Marine Mammal Studies in Mississippi, Kelly the dolphin has built up quite a reputation. All the dolphins at the institute are trained to hold onto any litter that falls into their pools until they see a trainer, when they can trade the litter for fish. In this way, the dolphins help to keep their pools clean.

Kelly has taken this task one step further. When people drop paper into the water she hides it under a rock at the bottom of the pool. The next time a trainer passes, she goes down to the rock and tears off a piece of paper to give to the trainer. After a fish reward, she goes back down, tears off another piece of paper, gets another fish, and so on. This behaviour is interesting because it shows that Kelly has a sense of the future and delays gratification. She has realised that a big piece of paper gets the same reward as a small piece and so delivers only small pieces to keep the extra food coming. She has, in effect, trained the humans.

Her cunning has not stopped there. One day, when a gull flew into her pool, she grabbed it, waited for the trainers and then gave it to them. It was a large bird and so the trainers gave her lots of fish. This seemed to give Kelly a new idea. The next time she was fed, instead of eating the last fish, she took it to the bottom of the pool and hid it under the rock where she had been hiding the paper. When no trainers were present, she brought the fish to the surface and used it to lure the gulls, which she would catch to get even more fish. After mastering this lucrative strategy, she taught her calf, who taught other calves, and so gull-baiting has become a hot game among the dolphins.

Thursday, July 30, 2015

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 caused 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!

Friday, July 17, 2015

The View from the Front Seat of the Google Self-Driving Car
But we’re now driving enough — and getting hit enough — that we can start to make some assumptions about that real crashes-per-miles-driven rate; it’s looking higher than we thought. (Our cars, with safety drivers aboard, are now self-driving about 10,000 miles per week, which is about what a typical American adult drives in a year.) It’s particularly telling that we’re getting hit more often now that the majority of our driving is on surface streets rather than freeways; this is exactly where you’d expect a lot of minor, usually-unreported collisions to happen. Other drivers have hit us 14 times since the start of our project in 2009 (including 11 rear-enders), and not once has the self-driving car been the cause of the collision. Instead, the clear theme is human error and inattention. We’ll take all this as a signal that we’re starting to compare favorably with human drivers.

Wednesday, July 8, 2015

Concise electronics for geeks

This is a really good overview of analog electronics.

Wednesday, July 1, 2015

One dot per person for the entire US

This is a really good population map of the US, even ignoring that it has racial data too.

Tuesday, June 30, 2015

Randomness in Doom

Doom's source code is all online.  Someone posted a link to the RNG used, which is actually just returning a value from the same list of 256 numbers over and over in the same order:

unsigned char rndtable[256] = {
    0,   8, 109, 220, 222, 241, 149, 107,  75, 248, 254, 140,  16,  66 ,
    74,  21, 211,  47,  80, 242, 154,  27, 205, 128, 161,  89,  77,  36 ,
    95, 110,  85,  48, 212, 140, 211, 249,  22,  79, 200,  50,  28, 188 ,
    52, 140, 202, 120,  68, 145,  62,  70, 184, 190,  91, 197, 152, 224 ,
    149, 104,  25, 178, 252, 182, 202, 182, 141, 197,   4,  81, 181, 242 ,
    145,  42,  39, 227, 156, 198, 225, 193, 219,  93, 122, 175, 249,   0 ,
    175, 143,  70, 239,  46, 246, 163,  53, 163, 109, 168, 135,   2, 235 ,
    25,  92,  20, 145, 138,  77,  69, 166,  78, 176, 173, 212, 166, 113 ,
    94, 161,  41,  50, 239,  49, 111, 164,  70,  60,   2,  37, 171,  75 ,
    136, 156,  11,  56,  42, 146, 138, 229,  73, 146,  77,  61,  98, 196 ,
    135, 106,  63, 197, 195,  86,  96, 203, 113, 101, 170, 247, 181, 113 ,
    80, 250, 108,   7, 255, 237, 129, 226,  79, 107, 112, 166, 103, 241 ,
    24, 223, 239, 120, 198,  58,  60,  82, 128,   3, 184,  66, 143, 224 ,
    145, 224,  81, 206, 163,  45,  63,  90, 168, 114,  59,  33, 159,  95 ,
    28, 139, 123,  98, 125, 196,  15,  70, 194, 253,  54,  14, 109, 226 ,
    71,  17, 161,  93, 186,  87, 244, 138,  20,  52, 123, 251,  26,  36 ,
    17,  46,  52, 231, 232,  76,  31, 221,  84,  37, 216, 165, 212, 106 ,
    197, 242,  98,  43,  39, 175, 254, 145, 190,  84, 118, 222, 187, 136 ,
    120, 163, 236, 249

int rndindex = 0;
int prndindex = 0;

// Which one is deterministic?
int P_Random (void)
    prndindex = (prndindex+1)&0xff;
    return rndtable[prndindex];

int M_Random (void)
    rndindex = (rndindex+1)&0xff;
    return rndtable[rndindex];

void M_ClearRandom (void)
    rndindex = prndindex = 0;

There is an explanation of it here.  I find these kinds of hacks, used in 80s and 90s era games to save space and increase speed, interesting.

Here is a story of a guy that replaced all the values with the same number:
What does it play like? I tried two values, 0x00 and 0xFF. With either value, the screen "melt" effect that is used at the end of levels is replaced with a level vertical wipe: the randomness was used to offset each column. Monsters do not make different death noises at different times; only one is played for each category of monster. The bullet-based (hitscan) weapons have no spread at all: the shotgun becomes like a sniper rifle, and the chain-gun is likewise always true. You'd think this would make the super-shotgun a pretty lethal weapon, but it seems to have been nerfed: the spread pattern is integral to its function.

With 0x00, monsters never make their idle noises (breathing etc.) On the other hand, with 0xFF, they always do: so often, that each sample collides with the previous one, and you just get a sort-of monster drone. This is quite overwhelming with even a small pack of monsters.

Tuesday, June 16, 2015

Civilization 4 on Linux Via Wine

I have a week off, and figured I'd be productive by playing Civ continuously the entire time.  I've used Wine a bit, but not much with modern games like Civ 4.  It took me several hours, so I figured I'd document the process here for future reference.

To begin, get iso's of the game and two expansions.  Wine doesn't work well with multidisc installations, but if you have isos you can mount them all before you begin.  Also each disc is one independent installation.  I have the actual discs, but found it much easier to download them.

It is also easier to use Wine as 32 bit, instead of trying to get 64 bit to work.  Since I wasn't using Wine for anything important, I just deleted my ~/.wine directory.  I then ran export WINEARCH=win32 before I ran any wine command.  Export will save that variable in your terminal window until you close it, but with multiple terminals open I found it safer to just compulsively enter it.

Next, you'll need a shell script called Winetricks.  You run Winetricks with arguments of various dlls and other things you need to be manually overridden.  For Civ 4 you'll need msxml3 for sure.  I ran winetricks msxml3 msxml4 vcrun2003 quartz devenum corefonts lucida tahoma, because I found it somewhere on the internet.

Run winecfg and go to the Libraries tab.  Find the library called gameux, and add it to the list of overrides, and then edit it to be disabled.  I also found that Wine did not do a good job of guessing my graphics RAM, so I had to run wine regedit.exe and add the key HKCU>Software>Wine>Direct3D>VideoMemorySize and set the value to 512.

Now, mount your 3 isos.  Navigate to the directory containing the installs and run them via Wine (make sure you've exported WINEARCH=win32 first).  The installs were straightforward.  After you've installed Beyond the Sword, download the latest patch (3.19) and install that via Wine.  The expansions will install the patches for the vanilla game, and the latest patch makes it no-cd so no need to download cracks.

You can navigate to ~/.wine/drive_c/.  If you see "Program Files (x86)" it means you messed up with your export WINEARCH=win32's and installed the game as 64 bit.  It may still work, but if not delete ~/.wine and try again.

The game is at: "~/.wine/drive_c/Program Files/Firaxis Games/Sid Meier's Civilization 4/Beyond the Sword/Civ4BeyondSword.exe".  Run it via Wine.  After it starts, you can exit and then find the config file at "~/My Games/Beyond the Sword/CivilizationIV.ini".  If you are having trouble you can set FullScreen = 0 and find ScreenHeight and ScreenWidth and set them low.  I have no trouble with full screen 1920x1080 though.  Set NoIntroMovie = 1, AutoSaveInterval = 1, DisableFileCaching = 1, DisableCaching = 1, ModularLoading = 1.

After that you should be good.  The game runs quite well, I've only noticed some slight graphics errors on some of the 3d animated leaders' faces.  I did have crashing sometimes when attempting to open certain advisor windows (military advisor seemed most common).  The Windows error message recommended I lower graphics settings and so I did from high to medium and haven't had a crash since.

Wednesday, June 10, 2015

The Making of Lemmings

Mike Dailly had seen tiny 5-pixel high sprites in games like Oids, a popular Atari ST shooter where the player’s ship rescued little android slaves, and thought that somewhere between this and a 16×16 sprite would be a sweet spot – where the small size made the Walker look big by comparison, but the animations were still good enough to impart character. One lunchtime he made an image of little men being crushed by weights, and shot by a laser gun – everyone loved it, and Gary Timmons added a few more traps. While everyone was laughing, Russell Kay was the first to say ‘There’s a game in that!’

Friday, June 5, 2015

How Tesla Will Change The World

I asked him what it was like to come to Tesla after having spent years at more established car companies. He described the difference like this: “A company like GM is a finance-driven company who always has to live up to financial expectations. Here we look at it the other way around—the product is successful when it’s great, and the company becomes great because of that.” (This mirrored what Musk had told me earlier in the day: “The moment the person leading a company thinks numbers have value in themselves, the company’s done. The moment the CFO becomes CEO—it’s done. Game over.”) Von Holzhausen went on, saying, “Another difference is that at other companies, engineering comes first—a design package is prescribed on the designer and they’re told to make it beautiful. At Tesla, design and engineering are assigned equal value, and Elon keeps them opposed to each other.” Now that von Holzhausen has gotten used to his freedom to be obsessed with the product at Tesla, he says he “would dread to go back to pre-historic ways.”

Monday, April 20, 2015

Pizza Calculator

A while ago made a table of the common pizza sizes so that we could better compare pizzas.  The problem with that was that it was difficult to compare deals of multiple pizzas of different sizes.

I made a quick javascript calculator that lets you enter the number of pizzas, the size, and the total price and then tell you what the price per standard pie or slice is.

I expect this to be quite popular at parties, as all good parties have the phrase "just go to my github page" at some point.

Sunday, April 19, 2015

The Star Wars Saga: Introducing Machete Order
Next time you want to introduce someone to Star Wars for the first time, watch the films with them in this order: IV, V, II, III, VI

As I mentioned, this creates a lot of tension after the cliffhanger ending of Episode V. It also uses the original trilogy as a framing device for the prequel trilogy. Vader drops this huge bomb that he's Luke's father, then we spend two movies proving he's telling the truth, then we see how it gets resolved. The Star Wars watching experience gets to start with the film that does the best job of establishing the Star Wars universe, Episode IV, and it ends with the most satisfying ending, Episode VI. It also starts the series off with the two strongest films, and allows you to never have to either start or end your viewing experience with a shitty movie. Two films of Luke's story, two films of Anakin's story, then a single film that intertwines and ends both stories.

Tuesday, April 7, 2015

The Theory of Interstellar Trade

This paper extends interplanetary trade theory to an interstellar setting. It is chiefly concerned with the following question: how should interest charges on goods in transit be computed when the goods travel at close to the speed of light? This is a problem because the time taken in transit will appear less to an observer traveling with the goods than to a stationary observer. A solution is derived from economic theory, and two useless but true theorems are proved.

Monday, March 23, 2015

Bowie Bond
An asset-backed security;which uses the current and future revenue from albums recorded by musician David Bowie as collateral. The 25 albums a Bowie bond uses as their underlying assets were recorded prior to 1990. David Bowie used the proceeds from the bond sale to purchase old recordings of his music. In creating the bonds, he ultimately forfeited royalties for the life of the bond (10 years).

Friday, March 6, 2015

Shakespeare Programming Language

Actual code:

The Marvelously Insane FizzBuzzJazz Program.

Lady Capulet, an old bossy woman that loves to count.
The Archbishop of Canterbury, an old fart who adores to spit out letters.

          Act I: The only one of them.

          Scene I: The Archbishop of Canterbury is a bastard.

[Enter The Archbishop of Canterbury and Lady Capulet]

The Archbishop of Canterbury:
 You are nothing!

          Scene II: Count, Lady Capulet, count.

The Archbishop of Canterbury:
 You are as beautiful as the sum of yourself and a cat!

Lady Capulet:
 Am I worse than the square of the product of the sum of a warm gentle flower and a rose
 and my pretty angel?

The Archbishop of Canterbury:
 If not, let us proceed to Scene VIII.

          Scene III: Fizzing to no end!

The Archbishop of Canterbury:
 Is the remainder of the quotient between yourself and the sum of a happy cow and a
 chihuahua as good as nothing?

Lady Capulet:
 If not, let us proceed to Scene IV. Thou art as handsome as the sum of the sum of
 the sweetest reddest prettiest warm gentle peaceful fair rose and a happy proud kindgom
 and a big roman. Speak thy mind!

 Thou art as fair as the sum of thyself and a honest delicious cute blossoming peaceful
 hamster. Thou art as cunning as the sum of the sum of an embroidered King and a horse
 and thyself. Speak thy mind!

 Thou art as amazing as the sum of the sum of a good happy proud rich hero and a hair and
 thyself! Speak thy mind.

 Speak your mind!

          Scene IV: Buzz me up, Scotty!

The Archbishop of Canterbury:
 Is the remainder of the quotient between yourself and the sum of a gentle happy cow and a
 chihuahua as good as nothing?

Lady Capulet:
 If not, let us proceed to Scene V. Thou art as handsome as the sum of the sweetest reddest
 prettiest warm gentle peaceful fair rose and a small town. Speak your mind!

 You are as prompt as the sum of yourself and a big healthy peaceful fair rich kingdom. You
 are as loving as the sum of the sum of an embroidered King and a horse and thyself. You are
 as amazing as the sum of yourself and a cute fine smooth sweet hamster. Speak your mind!

 You are as prompt as the sum of the sum of yourself and an amazing cunning Lord and a hair.
 Speak your mind.

 Speak your mind!

          Scene V: Milady, there is jazz in my pants.

The Archbishop of Canterbury:
 Is the remainder of the quotient between yourself and a proud noble kingdom as good as

Lady Capulet:
 If not, let us proceed to Scene VI. You are as charming as the sum of the sum of a noble
 cunning gentle embroidered brave mighty King and a big warm chihuahua and an amazing pony!
 Speak your mind!

 You are as prompt as the sum of yourself and a big black sweet animal. You are as noble as
 the sum of the sum of a gentle trustworthy lantern and yourself and a hog. Speak your

 You are as bold as the sum of the sum of yourself and a good delicious healthy sweet horse
 and my smooth cute embroidered purse. You are as peaceful as the sum of a flower and
 yourself. Speak your mind.

 Speak your mind!

The Archbishop of Canterbury:
 Let us proceed to Scene VII.

          Scene VI: Output or die!

The Archbishop of Canterbury:
 Open your heart!

          Scene VII: Oh, to jump the line.

Lady Capulet:
 You are as handsome as the sum of a proud noble rich kingdom and a rural town. Speak your
 mind! You are as gentle as the sum of the sum of yourself and a green mistletoe and my
 father. Speak your mind!

The Archbishop of Canterbury:
 We must return to Scene II.

          Scene VIII: Goodbye, cruel world!


Tuesday, March 3, 2015

What ISIS Really Wants
It’s hard to overstate how hamstrung the Islamic State will be by its radicalism. The modern international system, born of the 1648 Peace of Westphalia, relies on each state’s willingness to recognize borders, however grudgingly. For the Islamic State, that recognition is ideological suicide. Other Islamist groups, such as the Muslim Brotherhood and Hamas, have succumbed to the blandishments of democracy and the potential for an invitation to the community of nations, complete with a UN seat. Negotiation and accommodation have worked, at times, for the Taliban as well. (Under Taliban rule, Afghanistan exchanged ambassadors with Saudi Arabia, Pakistan, and the United Arab Emirates, an act that invalidated the Taliban’s authority in the Islamic State’s eyes.) To the Islamic State these are not options, but acts of apostasy.

Saturday, February 21, 2015


Friday, February 20, 2015

Why the Euro will ultimately fail
This disaster was entirely avoidable if the Euro bureaucrats had bothered to read Robert Mundall and Marcus Flemming’s seminal paper from 1962 which stated that according to well established macro economic models it was impossible to have domestic fiscal autonomy, fixed exchange rates, and free capital flows: no more than two of those objectives could be met. They won the nobel prize in economics for this in 1992, so it’s not exactly an obscure crackpot theory.

Since the euro is, by definition, the currency used in the eurozone the exchange rates must be fixed. One euro in Greece is the same as one euro in Germany. The same goes for free capital flows, if you have one euro in Spain and can’t spend it in Germany the eurozone doesn’t make much sense. So if it has to work the Euro zone members must give up their fiscal autonomy. What does this mean?

Saturday, February 14, 2015

A Tale of Two Zippers

This is an interesting blog post about how zippers are made, and the tiny difference between automated and non automated zippers.  He has some other good stuff on the blog too.

dtrx: Intelligent archive extraction
dtrx stands for “Do The Right Extraction.” It's a tool for Unix-like systems that takes all the hassle out of extracting archives.
This works really well for just extracting every kind of archive on Linux.  It has good options for things like creating a folder if the files inside are all at the top level (so you don't end up with 100 files in whatever folder you are working in).  Works well as a shortcut in whatever file manager you are using.

Sunday, February 1, 2015

Showcase your language one vote at a time

If you hang out on Stack Overflow at all you've probably seen this, as it's been near the top of hot questions for weeks, but I figured I'd post it as I've found it very interesting.

The way it works is people posted a language along with an interesting fact.  Then as people upvote those languages people could edit them with examples of interesting code snippets of a length equal to the upvotes.  In other words, if a language had 4 upvotes there would be 4 examples of interesting code snippets, of lengths 1, 2, 3, or 4 characters.

Saturday, January 17, 2015

Horror Hotel

Jeff pointed out that the song Horror Hotel sounds like Orajel.  So, I made this.

There's also the full speed version: