Old School DEC terminal


Old School DEC VT05 Terminal. Neat design.

Posted in General | Leave a comment

Google gets into Consumer Surveys

This new product from google that allows you to do consumer level surveys looks really interesting.



Posted in General | Leave a comment


Posted in Art, Photo | Leave a comment

Strange behavior on Cisco / Linksys E2000 Wifi AP

Hopefully this saves people some time and energy.

I have a Cisco / Linksys E2000 Wifi Access point. My son has an inexpensive PC connected directly to one of the ports on the back. We were trying to get a LAN game going. The game is called “Day of Defeat : Source, a Half-Life mod like Counter Strike. I’ll another post on that story later.

For some reason, we couldn’t get my Mac (on Wifi) to see the LAN game server he was running. The Steam app has a tab called “LAN Servers” and it kept reporting “There are no servers running on your local network.” I did a lot of searches on the internet and came up with nothing.

Finally, I had to put my tech hat on and start troubleshooting the IP layer between the machines. This took some time, but the solution was not obvious, and not too surprising given how these access points are developed.

I had to put the “Wireless > Basic Wireless Settings > Wireless Mode” into “Wireless-G Only”. This defeats the purpose of having an N router, but whatever.

As soon as I made that change, everything started working. The networks became connected. All of the IP diagnostics passed and the game server that he created showed up on my ‘LAN’ tab in steam.

There is no reason I can think of that this should have occurred other than there is some bug in the access point software.


Posted in Computers | 1 Comment

I use this ec2 instance comparison site all the time

I find myself using this all the time.

Amazon EC2 Instance Comparison

Amazon should have something like this on their site. Wikipedia too.

UPDATE: I didn’t click through on the links above. It turns out that I know Garrett from Plaxo, who cofounded HipChat with the other HipCal guys, which just got bought by Atlassian. The internet is a small place 🙂


Posted in General | Leave a comment

Catching up with the amazing processor power and RAM density these days

I was just looking around at what the typical gamer PC would look like. I think it is amazing that you can by an 8-core processor for under $250. That is just absolutely amazing!

Then I took a look at RAM density on server systems over at the ole DELL site. There are many server systems with over 32 GB of RAM capacity at very reasonable rates. In fact they had systems that could hold over 100 GB of RAM. That is a game changer when it comes to thinking about how you architect certain systems.

Posted in General | Leave a comment

On Javascript Loaders, Memory Use, and History

As application code shifts more and more to the client, the old application patterns are starting to re-emerge. One of these old patterns is the need for modularity. I did some research on module loaders for Javascript. The current favorite is the well thought-out and designed AMD standard. It will be interesting to watch how it develops as a consensus/committee based design. It does appear that some of the people involved had learned from prior experiences of trying to solve the problem, and that helps a lot.

AMD, is just a standard. So there are a few implementations. The current favorite AMD implementation is require.js. It is a clean project led by James Burke. The documentation is good and the project has a lot of visible support on the internet. Also, I’ve read some of his online interactions. It is tough to help out on an open source project and respond to criticism. However, James really handles it well. This is really important. Many online discussions drift towards negative behavior during technical debates.

Anyways, as I’m learning more about this and how these JS apps are being developed, I’m just struck at how their ‘new’ ideas are just rediscoveries. These are the same problems that early microcomputer devs had to deal with in the 1980s.

How does this tie to AMD loaders? Well, they missed a few of the lessons. They haven’t quite made the conceptual jump that they really need to manage memory. I’m not talking about malloc, I’m talking ‘module’ or code memory management. This may seem odd, because that is surely one of the intents they are addressing in the first place. I think it is because the browsers do not offer the capability to control this yet.

For example, in the early days of microcomputing, there was a popular system of the day called UCSD Pascal, or the UCSD p-system. It was a cool virtual machine implementation that emulated a 16 bit stack machine on just about any computer of the day. One thing that blew me away back then was the fact that even a few games were written in the system (Wizardry, Sundog, and a few others). The history and popularity of that system is the subject of another post. (Apple Pascal and How I learned Pascal)

One of the key attributes of the system was the concept of a ‘segment’ manager. This is the part that is relevant to this discussion. It managed what code was in memory at the given moment. Some other languages and systems had different names (overlay manager), but the concept was the same.

Here is how it worked:

Since machines in the late 70’s were just starting to have 64k total memory at that time, memory was a premium. At some point, some programs just needed more memory to solve the task for a portion of the program than a 64k system could provide. In order to run those programs, a code module manager was implemented in the p-system (segment manager). You could load or unload segments as needed for an application. For example, if you needed to switch to s apreadsheet from word processor mode, you would associate the code for the spreadsheet with a segment. If the user switched to spreadsheet mode and caused that code to run, the magic happened. The system would unload an unused segment from memory and then load the spreadsheet segment from disk and then execute it. Here is the interesting part. When you finished using that code, the system would automatically unload the code segment from memory so it could be used by another portion of the program. This system allowed people to finally write programs that were larger than the machines they used.

This was done in the early 1980s, yet, even today, this type of system is not common place. The segment manager was so important back then that it was replicated in the Mac Toolbox (which was originally in Pascal) until OS X. Almost all PC pascal implementations had it as well (Notably Turbo Pascal and Delphi). These systems did not appear in any of the ‘C’ based environments.

Eventually, the need for these was lessened as some of the functionality was replaced by dynamic loaders on unix or the DLL system on windows. Computers had lots and lots of memory for code. Still, the choice is not optimal today. For example, modern Unix or WinNT based kernels may un-associate part of a programs address space from physical RAM, but it still must maintain the book-keeping and page-tables for that code. If you look at the address space of a typical desktop program in memory, there are so many modules that this linking process can actually be responsible for the slow startup on todays ‘modern’ systems. The segment system was much cleaner and smaller.

So back to javascript. Let say you bring up a dialog that isn’t used often (lets say a file or photo importer). All of those resources get loaded into the little memory that your phone or ipad have. Unfortunately, there is really no way to unload javascript from a web page other than reloading a completely new web page. I did some google searches on the topic and their is no discussion on this topic. The closest discussion I could find was on reference re-binding variables in order to hide code. Nobody knows if that code gets unloaded if the GC runs. I think it is a safe bet that it doesn’t and this is yet another reason why browser memory footprints are so large.

It turns out that this is a hard problem if you don’t think about it from the beginning. For example, in Flash, they ran into the memory bloat issue issue (ActionScript is essentially Javascript after all). It was a huge problem for years. In flash they finally tackled this huge issue in 2008 in Flash 10 (which wasn’t in wide deployment til early 2009). If you are a javascript person, I suggest you look at the link I just embedded. Look at the long list of steps. I guaranty that HTML5 or HTML6 will be implementing this feature within a few years. I think a possible catalyst might be general usage of tools that show browser memory consumption (like the Chrome memory profiler).

Anyways, the segment concept was one of those little things that got lost in the march of progress. This happens a lot when technologies are created to solve a particular problem (javascript) and evolve into and older category (desktop style UI). Still, if I was to give javascript developers a message it would be this. “You are not the first to solve this problem. Take a moment and look to the past. A solution might have already existed.”

Posted in Computer History, General | 2 Comments

Google – sliding a little towards evil

Just recently I saw these two ad spots on Google.

I’m looking for directions to a coffee shop on Google Maps. Do I want to sign up for University of Phoenix? Really?

I saw a different ad before (non-google).. but this is an ad on a logout page.

Google generally has the highest standards in the industry for ad guidelines. Yet, both of these feel very ungoogly. I wouldn’t be surprised to see ads like this on Yahoo or AOL.

I think they are sliding. In fact, Paul Bucheit was the one who coined the “Don’t be evil” at Google and he hasn’t been there for many years. (I think he is part of Y-Combinator now.)

Posted in General | 1 Comment