Amblyopia Tetris

News of an ‘Amblyopia Tetris’ game hit the media a few months ago. Since then I’ve kicked around the idea of making a version of it in JavaScript. Today I ran across a baseline implementation of Tetris, so I went ahead and made the dream a reality! Enjoy!

The preview below shows how the game appears to someone wearing red/green 3d glasses. The right eye can only see the active pieces. The left eye can see the placed pieces.

I modified the version of Tetris posted by Jake Gordon a couple of years ago. His original post can be found here: JavaScript Tetris. You can find my fork of the project on GitHub.

Posted in Development, Games, Ideas | Leave a comment

From February 5, 1998 to WD:2B5F


I wrote a letter to myself on Monday, February 5, 1998. I opened it today (Tuesday, February 5, 2013). I was delighted by what I saw, as it affirmed the continuity of my core identity. I’ve often stated that my world-view has not changed much since I was 15 years old. Now I have proof to back that up. I’ll scan a copy at some point, because the text alone isn’t sufficient to express the entry. Below I’ve copied the text for reference along with comments made by my 30-year-old self.

I’ve marked today as “WD:2B5F – Act III”, marking the beginning of my third “15-year” span of existence. Back-dating in my current date format, I started this process on WD:15F8. The next date will be WD:40C5 (Sunday, February 5, 2028).

The letter itself is organized on an 11×17 sheet of paper. It has two sides and was enclosed in an envelope for the last 15 years. The text below is copied verbatim from the hand-written original. I’ve preserved the spirit of my handwriting where applicable. The paragraphs in the actual letter are written in 8 distinct regions of the page and were numbered to preserve order for my future-self.


Return Address:
William Bickford
RR 1 Box 79
Auburn, NE 68305
USA, Earth, Milky-Way
February 05, 1998

William Bickford
February 05, 2013

Delivery Stamp:

Back of Letter [C1]

W i l l i a m    B i c k f o r d

[ In cursive ]:

Do not open
until February
05, 2013.
February 05, 1998

Content Text Border [C2]

Do not open this journal for 15 years. At that point in time, I will be 30 years old, and I should be well on my way to achieving my goals for my life. Of course, if I have not started down my road to success, I will still have time to start, even at the age of thirty. Now I will begin my writing for what I want to accomplish in my life. Of course, I cannot begin untill [C3] I have reached the end of my text border. I just noticed that I used “of course” twice (I did not plan that. [C4]

Paragraph 1

My immediate goal is to go to college at M.I.T (Massachusetts Institute of Technology). As I said, this is my immediate goal; my long-range goal is to bring my company (Xedoloh Software) into the forefront of the computing world. I have many new ideas that I feel would revolutionize the world of computers. Please follow this to paragraph number 2.

Paragraph 2

As I mentioned in paragraph 1, I have many ideas for computers. My best idea is a 3D-voice-activated computer. It will incorporate many new technologies that are only now being developed. The basic idea is to streamline all aspects for the end-user. As a result of a 3D environment, tasks will be more intuitive. Continued on section 3.

Section 3

At the same time that the 3D environment will make tasks easier for the user, it will also allow for easier manipulation of 3D objects (as no conversions to a 2D surface will be needed. [C5] More processing will be available for advanced effects. Continued on S4.


While this immediately benefits PC Games, all people will eventually gain from this conversion to 3D, as more realistic VA (virtual assistant)’s will be possible [basically eliminating most secretaries]. Well, that is a snipit [C6] of what I want to do in the computer industry.


Today is February 05, 1998. I am 15 years, 4 months, and 12 days old. [C7!] On the day I open this time-warp, I will be 30 years, 4 months, and 12 days old. The date will be February 05, 2013. Today we had a basketball game (Varsity) at 8:45. We won 71-42. It was an o.k. game.


As you have probably noticed by now, this document is arranged symmetrically, indexed, and has some artistic aspects. This probably shows something about my character (although I do not know what it shows). I am almost done with my T.V. Table in Shop [Intermediate Technology].


I hope that my writing does not appear too jagged, I tend to skip from topic to topic. Oh well, I’m trying to put the most important aspects on paper.


Right now I am listening to various types of music (Mozart, unknown, myself…). Music is another area I wish to explore. Actually, I am interested in most areas of life. I just hope I have time for it all.


Abstract Art | Left-Hand | Right-Hand

[ Art ]  This is my left-   This is my
         handed writing.    right-handed
         I was born on      I was born
         September          on September
         13, 1982.          13, 1982.


C1 – Back Page Corners

The corners have identical symbols in them, but they are not rotated logically.

C2 – Content Text Border

The border is decorated with text that has no exact beginning or end. This was intentional.

C3 – Misspelling

I obviously meant ‘until’. Nothing in the letter deals with farming. I generally have a very low false-positive spelling error rate. This was one of two misspelled words in the document. I remember not being sure about how many l’s I needed. At 30 I recognized this one immediately.

C4 – How to annoy a web developer

Good job, 15-year-old-Will! Looks like Randall Monroe unwittingly took a page out of your error-book some years later: XKCD – Tags

C5 – Errors Bubble Up

Here again we see that I’ve dropped my closing parenthesis again. Doh!

C6 – Misspelling #2

Here I meant ‘snippet’. I don’t remember being unsure about the spelling, so this counts as a full error. At 30 I recognized this error immediately.

C7 – Importance of Age Calculation

There are two things to notice here. First: I cared about how old I was down to the day. Second: Somehow I got it wrong. I was actually 5,624 days old (WD:15F8). The calculation in this letter puts me at about 5610 days, depending upon how you add it up. The worst error was in simply adding 15 years to calculate my 30-year-old age. Oh well, live and learn!


Upon opening the letter a chunk of memory became activated from the night I finished the assignment. Prior to opening the letter I could remember vaguely that I was supposed to be running my own company (Xedoloh Software). I thought I had written it during my English class at school, but the basketball score rules that out. Apparently JB played against NE City Lourdes that night. I believe that I started the entry in class, but finished it at home.

The “best” idea articulated in my letter was essentially stolen from Star Trek (i.e. the holodeck). I refined the idea to include virtualization technology a couple of years later through discussions with my dad. I wanted to build a meta operating system that allowed me to display portals into sub-systems running operating systems such as Windows, Mac, and Linux. Fast forward 15 years and I routinely use several virtual machines at work to do just that – minus the 3D or any system design effort on my part! Although the key aspect of the system I described in the letter was the use of actual 3D objects, not just 2D screens displaying 3D objects.

Spelling / Content Accuracy: 99%

I made a total of 4 Errors in the 487 words presented, for an overall word-level accuracy of 99 percent. Two words were misspelled and two parenthetical statements were not closed properly.

Prediction Accuracy: 14.3%

1. Do not open for 15 years: 1/1
2. On-course for goals: 0/1
3. Attend MIT: 0/1
4. Xedoloh Software: 0/1
5. 3D-voice-activated computer (i.e. ‘holodeck’): 0/1
6. Age calculation: 0/2

My goals have obviously changed over the years. The only thing I managed to do right was wait exactly 15 years to open the letter!

Favorite Message

“Of course, if I have not started down my road to success, I will still have time to start, even at the age of thirty.”

This sentence underscores the fact that I apparently had only one path to success at the time (oops!) and that I felt thirty was old.

Key Difference

While I’ve maintained core aspects of my personality over the last 15 years, there is one striking difference between then and now: my world-view at 15 was focused entirely on me. This expanded to me and Libby in 2004. We now have two cats and a dog to take care of as well, but no kids so far. Naturally my plans have adjusted to compensate!


The text border featured squeezing text similar to a #twoosh on twitter – I filled the space exactly by design. I’ve continued and refined the practice of counting my age in days. I now prefer hexadecimal days since birth with a “Will Date” prefix (hence WD:2B5F). I still want to develop intelligent software systems, although I’ve focused more on automation technology than 3D graphics during my career thus far.

Where To Go from Here

As I alluded to above, I’m writing a new journal to be opened on WD:40C5. It will be interesting to compare and contrast the three viewpoints in 2028.

Posted in Development, Notes | Leave a comment

Simple JavaScript Writer’s Framework

So I sat down last night to toy with the idea of writing a manuscript for a science-fiction novel. Being a proper code monkey, I first set out to give myself a simple JavaScript-based framework. I don’t need anything fancy and a quick search online didn’t point out anything I really liked.

thebook should…
1. Not get in my way.
2. Allow copy/paste into any text editor.
3. Look presentable.
4. Encourage me to focus on composition.
5. Allow me to efficiently organize chapters and headings.

The short, short version

A little more exposition…

  • thebook.js
    Include this in your html page and you’ll have access to a couple of handy helper functions:

    • addChapter: Define a new chapter index and title.
    • nextChapter: Advance the framework to your next glorious chapter.
    • addTOC: Insert a table of contents with in-page hyperlinks to chapter headings.
  • thebook.css
    Provides a fairly spartan CSS3 interface for drafting your masterpiece. Centers the content and uses a serif font.
  • index.html
    Content is King!
Posted in Development, Ideas, thebook, Writing | Leave a comment

Processor Basics

I ran across a post today that begged for a couple of answers.

The Question

What I don’t understand is why there’s such reluctance towards making the die bigger. I understand the benefits of making the process smaller, but there has to be a limit somewhere, and it would seem easier/more cost effective to just make the die bigger. Who’s idea was it to have this completely arbitrary general die size and attempt to always stuff more transistors onto it?

If you have a 5mm x 5mm die with 500 million 90nm transistors, you can either halve the process size to 45nm to get 1 billion transistors or you could just double the die size to 10mm x 10mm… Aside from heat and power consumption, why wouldn’t that work?


Let’s start with the assumptions:

  1. Die Size is “completely arbitrary”: false.
  2. It would be more cost-effective to make larger dies: false.
  3. There is a reluctance to making the die bigger: false.
  4. There has to be a limit to transistor feature size: true.
  5. It would be easier to make larger dies for a given design: false.
  6. Halving the process from 90 nm to 45 nm would double transistor count: false.
  7. “Doubling” the die size from 5 mm x 5 mm to 10 mm x 10 mm would double the transistor count: false.
  8. The poster understands the benefits of making the process smaller: false.
  9. “Someone” decided to make die size consistent: true.

Die Size is Not Arbitrary

Processors are manufactured by etching features into large wafers measuring approximately 100 nm to 300 mm in diameter. Intel Samsung, and TSMC announced a transition to 450 mm wafers in 2008. The equipment required to work with wafers dominates whether or not it is economically feasible to increase wafer size. As we will see below, decreasing die size reduces waste and improves yield. So manufacturers have significant pressure to reduce die size.

Constraints on Wafer Size

  1. Wafers are circular.
  2. Standard wafer size as of 2011 is 300 mm in diameter
  3. Wafer Area: 70,686 mm^2 (pi x (300/2 mm)^2)
  4. Equipment for etching wafers is expensive (measured in billions of dollars).
  5. Standardizing on wafer size allows manufacturers to control costs.

Constraints on Die Size

  1. Processor dies are square.
  2. Large dies waste more surface area for a given wafer.
  3. 1 Huge Die: A 300 mm wafer can fit a single large die of 45,000 mm.
  4. The wafer has 70,685 mm^2 available area, so this results in a waste of 36.3 percent.
  5. A 16×16 mm die has 256 mm^2 area.
  6. We can fit 240 256-mm^2 dies onto a single 300 mm wafter (4×4 + 4×8 + 4×12 + 12×12).
  7. 240 Dies: Requires 61,440 mm^2, which results in a waste of 13.1 percent.

Result: You can approximate a circle more effectively with smaller dies, resulting in fewer wasted materials.


  1. The analysis above assumes perfect manufacturing. This is not realistic.
  2. In the case of the single large die any imperfection will cause the entire chip to fail.
  3. Define the probability of a surface defect as 0.01% per mm^2 etched (just for illustrative purposes).

Single-Die Wafer

Continuing the example above, we etch 45,000 mm^2 to create our monolithic chip. Unfortunately, our error rate in etching dooms us to failure. On average we expect to find 4.5 errors per chip etched and any error results in a wasted chip. This means our etching process will produce chips with a 100 percent failure rate.

  1. 45,000 mm^2 x 0.0001 / mm^2 = 4.5 errors per wafer
  2. 1 bad die per wafer / 1 die per wafer = 100% failure rate

240-Die Wafer

This scenario is much more realistic. For a 256-mm^2 chip we observe an overall failure rate of 2.9% for the same manufacturing hardware. Clearly smaller dies are much more economical. The worst-cast scenario is when each error occurs in a separate die (multiple errors per die are actually better for our chip failure rate). At most 7 dies will fail.

  1. 61,440 mm^2 x 0.0001 / mm^2 = 6.1 errors per wafer
  2. 7 bad dies per wafer / 240 dies per wafer = 2.9% failure rate

Result: Smaller dies reduce the impact of etching defects, resulting in higher yields.

Larger Dies Are Not More Economical

For a given wafer size, decreasing die size improves both yield and cost. Increasing die size reduces yield. A manufacturing process with 99.99% reliability will fail to produce a working 45,000 mm^2 chip 100% of the time. The same process will produce working 256-mm^2 chips 97.1% of the time.

The industry has increased both die and wafer size

  1. Die size has been increasing over time.
  2. According to Wikipedia, the die size of the Intel 4004 chip was 12 mm^2.
  3. The first Pentium was 294 mm^2.
  4. Since then it seems Intel has tried to keep die size under 300 mm^2 as a cost-savings measure.
  5. Intel and other manufacturers are currently transitioning to 450 mm wafers, but retooling is expensive.
  6. The increase in die area between the Pentium and the 4004 was 24-fold.
  7. The increase in transistor count between the Pentium and the 4004 was 1,347-fold.
  8. Pentium transistor density: 3,100,000 transistors / 294 mm^2 = 10,544 transistors per mm^2
  9. 4004 transistor density: 2,300 transistors / 12 mm^2 = 192 transistors per mm^2
  10. Increase in transistor density: 10544/192 = 54.9-fold

Result: Overall chip size measured in transistor count, physical size, and transistor density has been increasing since the introduction of the Intel 4004.

The Limit to CMOS Feature Size is About 5 nm

  1. Individual atoms measure in picometers – about 100 to 500 – or 0.1 to 0.5 nm.
  2. Individual transistors need at least 10 atoms to function.
  3. 10 x 0.5 nm = 5 nm is the minimum feature size for transistors to function
  4. Further improvements require a new class of computation device (1+ transistors per atom instead of atoms per transistor)

Result: Without fundamental improvements in design, we will not be able to scale transistors smaller than 5 nm.

Math Background on Chip Fabrication

Doubling in 2D

Whenever we work in two dimensions we have to be careful by what we mean when we say “double”. If you double the area of a square, you only increase the length of each side by a factor of about 1.414 (since 1.414 x 1.414 = 1.99396). If instead we double the length of each side, then we are quadrupling the area!

Doubling Die Dimensions

  1. In the example above, we have a mythical CPU with 500e6 transistors packed into a 25 mm^2 area.
  2. This results in a 20e6 / mm^2 transistor density.
  3. “Doubling” the die size results in an area of 100 mm^2.
  4. (20e6 / mm^2) * 100 mm^2 = 2e9
  5. Packing transistors at the same density results in a CPU with 2 billion transistors (4x the original).

Result: Doubling die dimensions quadruples transistor count and die area.

Halving Feature Size

  1. In the case of halving the feature size from 90 nm to 45 nm we see a similar effect.
  2. Note that feature size is generally not transistor size – but it should be proportional given the same design.
  3. 90 nm x 90 nm = 8100 nm^2.
  4. 45 nm x 45 nm = 2025 mm^2.
  5. Size difference between 90 nm and 45 nm transistors = 8100 / 2025 = 4.
  6. 90 nm CPU: 25 mm^2 / (8100 nm^2) = 3e9 elements maximum
  7. 45 nm CPU: 25 mm^2 / (2025 mm^2) = 1.2e10 elements maximum
  8. The ratio of transistors to the limit imposed by feature size should match.
  9. 90 nm CPU: 500e6 / 3e9 = 0.1667 – this is our ratio
  10. 45 nm CPU @ 1 billion transistors: 1e9 / 1.2e10 = 0.0833 – this is not our ratio!
  11. 45 nm CPU @ 2 billion transistors: 2e9 / 1.2e10 = 0.1667 – matches!

Result: Halving feature size quadruples transistor count for a given die size.


  1. The Question Source:
  2. Intel Wafer:
  3. Intel Transistor Counts:
  4. Chart of Transistor Count:
  5. Wafer Size:
  6. Wikipedia Transistor Count:
  7. CMOS Scale Limit:
  8. Atom Length:
  9. 10-Atom Transistor:
  10. Intel i7 Launch Materials:
  11. Core i7 Die Image:
  12. Transistor Image:
Posted in Computing | Leave a comment


I started playing Go recently and I wanted a decent Windows program to use. A friend of mine showed me iGoWin. I noticed after I downloaded it that the installer was pretty basic. It was written in 1997-98 and uses the outdated .hlp help file format. While still quite useable in Windows 7 64-bit, it was clear that the installer and help files needed some TLC.

To that end I have recompiled the help files in .chm format and included links to them with a full-fledged installer (created using NSIS). The original author (David Fotland) would have to recompile the program to include links to the updated chm files.

iGoWin is a free version of “The Many Faces of Go”. If you like using it, please consider buying the full version. I’ve included a link to David’s retail product page below.


Provided below are links to the original download page I obtained iGoWin from as well as a direct link to the self-extracting package.


SHA-1 Hashes:

  • 57488a984d7ec2a8e4805d584933b99f93fcfea9: iGoWin_1_0_0.exe
  • f53895fc1818d2dbd12c8c838dce6b22029874a9: igowin.exe (Program)
  • 5d9a4f7de219fcf62ea7a9df1b2aabb8695ce7f7: igowin.exe (Installer)

Package Contents:

  • 43383371eda4c4d9892a5098fc86d7d845abb17e: Grain.bmp
  • edb04c8b981220cb945eb942fc14ce7ca0352444: iGoWin.chm
  • f53895fc1818d2dbd12c8c838dce6b22029874a9: igowin.exe
  • 52428e803920c08e44d455daf92359576c0cd708: Igowin.hlp
  • ac756443e5162e590be76c189b0cbcb2fad38519: iGoWin64.ico
  • cce5ad03df1aeda019eb759858c0902f578d2bd8: ReadMe.txt
  • ace4fab947324913abc3a2d0fe3f0ddb54b872e9: Tutor.chm
  • 8acdf156a1b39512001489a1baddbfe980afe738: Tutor.hlp
  • 491d74e7b31fdec3c7f4b0821a022ef042fde0f5: Uninstall.exe
Posted in Development, Games | Leave a comment

Light Bulb Emoticon


I was surprised to find today that there is no standard text-based emoticon for a light bulb moment. Let’s try using the one above!

Posted in Ideas | Tagged | Leave a comment

LUITMW: New Internet Meme

My co-worker (Jeff) and I were discussing the disparity between people who say “LOL” in IM but are, in fact, not laughing out loud. He suggested that it was really laughing internally loudly, so I suggested LiL. I then told him that when I do so, I am laughing uproariously in the machine world.

Jeff then coined this term: LUITMW. Go forth and copy Interwebs!

Posted in Development | Leave a comment

Google is the new H1N1 plan

Being health-conscious in 2009 apparently boils down to saving yourself from H1N1. Since many health efforts are rooted in fear of H1N1, I’m saying that Google is the new H1N1 plan. Substitute H1N1 for health in this Dilbert comic:

Posted in Development | 2 Comments

Near Zero K Quantum Voodoo

While discussing recent physics work that involves quasiparticles and the apparent observation of magnetic monopolism with Chris Arnold, I thought it was appropriate to reduce the description of said research to “near-zero-K quantum voodoo”. It seems quite appropriate.


Posted in Development | Leave a comment

Serving the Past Future

I added a link to the Time Traveler Convention on my notes a while back.  Figured I’d propagate it here too.

Original Link: Time Traveler Convention
The Time Traveler Convention
May 7, 2005, 10:00pm EDT (08 May 2005 02:00:00 UTC)
(event starts at 8:00pm)
East Campus Courtyard, MIT
42:21:36.025°N, 71:05:16.332°W
(42.360007,-071.087870 in decimal degrees)

Posted in News | Leave a comment