Archive | November, 2016

Popcorn Time!

06 Jul

Popcorn Time!

Just a little summer sigh... I keep reading articles like this one (translated to English) about the famed Popcorn Time software that let's anyone view pretty much any movie when they want. In this article, the word "strømming" means "streaming" and the headline is that streaming of pirated movies has more than doubled the last year.

Nobody but the movie industry is surprised! We all want to stream movies like we've been able to for music for quite some time now.

In my opinion, Popcorn Time is Netflix done right, but without any legal issues holding them back. Suing Popcorn Time or it's users will not solve the problem. Just as with music - new distribution models will pop up and they'll be your competition in the future. The longer you wait, the worse you basically make it for yourself.

How NOT to attack this

The obvious way to attack this is what the movie industry is currently doing. They slam the Digital Millennium Copyright Act in the face of those pirating instead of removing stick (or even forest) in their eye. They drag kids and parents to court for illegally watching movies. I wonder why one have to work in IT / Web to understand that this will not solve a single problem? Why can't they just understand once and for all, the old distribution model is gone and they have to solve this with software & licensing?

What the movie industry SHOULD do

First of all, they should read this 7 year old review from the EFF of what happened when the RIAA sued more than 30.000 individuals. They gained nothing, but rather lost their public reputation as a watch dog for the industry. People don't pirate movies or make services like Popcorn Time to be evil. They are solving what the industry does not do itself - the obvious way to distribute movies.

There is no practical reason not to distribute movies digitally. There may be legal / monetary issues regarding the licensing of each film, but that is irrelevant to the end users. When the music service WiMP (now part of Tidal) started here in Oslo, they had 1 programmer and 8 lawyers. That's how clumsy these things are in music. I don't expect it to be easier with films, but that's no reason to hold on to an antiquated system? The first studio to clear legalities and make their ENTIRE back catalog of movies available will be the winner.

For several years, record labels report about increased purchase and use of music - thanks to the streaming services. As soon as Hollywood understands that they can activate their massive back catalog of assets, they will make the illegal streaming services will disappear - just as the P2P music pirating disappeared. The first company to make a Spotify for movies (offering movies from most or all studios) will be filthy rich.

Nobody really wants to pirate movies. It just happens to be easier than getting them legally.

Image by Tim Cowley, CC By-SA 4.0

 

Making a custom 3D printer controller

20 Aug

Making a custom 3D printer controller

While working on my new printer, I realised how ugly most reprap controllers are. All those I've seen use large SD cards & bulky oldskool LCD's with really poor contrast and viewing angles. Why not use Micro SD & an OLED screen?

You can actually build your own custom controller using any combination of screen, SD reader and encoder, but I couldn't find a good description of how to do it, so here it is. Setting it up with the Marlin firmware can however be a daunting task, so this article aims to document how I went about doing it.

I should start by saying that this is not "the right way" to do it, but I'm describing two of the many possible ways to do it. This description is for Marlin. If you are using Repetier on your printer, you may pick up some advice but the specifics will be different.

Picking the parts

My biggest annoyance with the typical LCD's used in these controllers is that if you're not standing directly in front of it, you can't really read the display. OLED displays use less energy than traditional LCD displays. They're easily viewed from any angle and have a fantastic contrast. I settled on one from wide.hk that has the required 20 (wide) x 4 (height) character displays. These are less than 4mm (1/64 inch) thick and has good mounting holes. Cost $34.

The SD card reader was something I had picked up from DX a long time ago A straight SD reader based on SPI. I got the encoder from Adafruit and I found a standard buzzer that was fairly small in a drawer. Pretty much any screen, SD reader, encoder and buzzer can be used.

Putting it together

Next is the fun part of figuring out how your controller should look! Grab your components and try to lay them out as smart as possible. Next you'll need a way to connect them together. A standard perfboard cut to 125 x 35 mm (48 x 13 holes) is what I needed. Your needs will probably be different, but using perfboard makes it easier to lay things out and solder it once you know how you want stuff.

Another alternative is to design your own professional PCB using software like Fritzing. It would be a good first project, but it takes time to get the PCB produced. You can also add indicator LED's and other custom components if you want to, but these will require you to add more custom code.

Finding your way around Marlin

I have a somewhat varied programming background, but C++ isn't exactly my native tongue. That's also my reason for doing projects like this - to learn more. I find the Marlin codebase a bit confusing. The root file is Marlin_main.cpp. The Arduino IDE will make a copy with .ino extension of this file when you start up the Arduino IDE.

At the top of this file is a load of #include statements. These are mostly files full of #define statements that are replaced by the compiler every time you hit "compile", but they also contain methods that will reside in a "global/root" namespace. Take the fairly central file "stepper.h". This is the header file for "stepper.cpp" that controls how the printer moves. None of the methods here belong to a class. They're just "there".

Coming from an object oriented programming background, I didn't expect this. I guess there's things/limitations such as dependency on interrupts that can force certain ways of doing things?

As far as I know, the first control panel for Marlin was added by fellow Ultimaker owner Bernhard Kubicek (thanks Bernhard!). After this, many others have hacked in support for their own panels. Over time, the codebase, and especially the config files, have become a little messy so it can be kind of hard to navigate.

Implementing your own screen

More or less any screen can be used, but it will require some modifications to the Marlin codebase. The first you'll need is a small library that can print characters to your screen. Most screens will have standard functionality for this, so if you're lucky you won't need to write more than a little wrapper-code. In my case I received a barely functioning code snippet, so I had to do a little more work. You can find a ZIP-file with my Marlin implementation here.

These are the main functions that your screen class will need:

clear();
setCursor(row,col);
write(uint8_t);
createChar(uint8_t, uint8_t[]); // custom characters such as temp meter
void printChar(char);

The clear() function obviously clears the screen and setCursor tells where the next character is placed on the screen. With these two and a print-command, you'll have all you need. But wait - print() isn't on the list? No, but if you look at my example OLedI2C.h class, almost at the top it says:

class OLedI2C : public Print

This means that the OLedI2C-class inherits all the functions in the print-class (Print.h) and expands on this. Without inheriting these methods, you'd have to write 18 functions to handle printing of all data types (uint8,uint16,char, bool, double and so on). The OLedI2C-class also "overwrites" the write-method. It changes the default behaviour of the Print-class to instead print to the screen we're implementing.

There's also two "special" commands in the list above. One creates custom characters (createChar) and the other prints it (printChar). These allows us the output graphical symbols for folder navigation, temperature, time and more. A standard "Character LCD" will typically have up to 8 slots for creating such symbols. If you're using a "Graphical LCD", you can create all the characters you want as long as you have the memory required. My implementation also has other methods, but you may not need these.

When you have a well working screen-class it's time to make the actual implementation that Marlin will use. You set this up as shown below.

Method 1 - modifying the existing classes

When you're building your own machine, you will need to make modifications to the Marlin firmware. There's two main methods to adding LCD support. The first involves adding it to the existing file "ultralcd_implementation_hitachi_HD44780.h" and use

pins.h - all I did here was to change the SDSS pin for my Megatronics 2.0 hardware (board type 701). Other than that I've kept all the default pins as defined. If you're using Ramps or something else, you'll need to look up what pins to use in the online documentation.

Configuration.h - Here I added a custom section for my screen:

// OLED LCD
#define OLED_SSD1311 // Oled based on the SSD131x chip series character display
#ifdef OLED_SSD1311
  #define ULTIPANEL
  #define NEWPANEL
  #define SDSUPPORT
  #define LCD_WIDTH 20
  #define LCD_HEIGHT 4
  #define LCD_I2C_ADDRESS 0x3c   // I2C Address of the display
#endif

The OLED_SSD1311 define is my main switch. If this is defined, it'll include the things below.

The ULTIPANEL enables encoder support. This is one of the more messier things in the codebase. This also enables other things but it does not cause problems for me. It would however be great if there was a generic define that just enabled just the Encoder and not other things related to SD card, menus & Ultimaker specific features.

NEWPANEL enables lots of LCD-related features, but is also used for Encoder-specific features. SDSUPPORT is really the only include that does exactly as it's name says. Width/height is used for menu scrolling and the I2C address is just there as it's "convenient to have". In my case I could just as well hardcode it in the class as all the screens of this type use the same address.

ultralcd.cpp - This is the main class controlling everything related to the screen and SD card file selection. It has static stub methods that serves as an interface for other implementations. Here I had to add an include-statement for my custom class:

#include "OLedI2C.h"

OLedI2C.h & OLedI2C.cpp - header and implementation of the custom OLED character display. You can also use a non-character display, as long as you provide the same methods mentioned above. Put these files together with your other Marlin files. I created most of this class in a small, separate project since uploading the whole of Marlin takes quite some time. For testing it's better to have a tiny project to test with or you'll be over-caffeinated well before lunch.

ultralcd_implementation_hitachi_HD44780.h - this is where you integrate an instance of your own screen. All that is needed is two edits. The first is to add the instantiation of your screen beneath the section that has the heading "Create LCD class instance and chipset-specific information". I added mine at the end of the if/elif/endif statements:

(other screens)
...
#elif defined(OLED_SSD1311) // OLED
  #include <OLedI2C.h>
  #define LCD_CLASS OLedI2C
  LCD_CLASS lcd;
#else
  // Standard directly connected LCD implementations

These blocks are compiler arguments, so the whole block will be replaced at compile time and only the parts that are #defined will be included in the compiled code. Next is that you add your init-call to the lcd_implementation_init() method:

(other screens)
...
#elif defined(OLED_SSD1311)
      lcd.begin(LCD_I2C_ADDRESS);
#else

This is the method I opted for as I generally like the way the typical Marlin LCD works. To go completely custom - read on…

Method 2 - creating your own implementation

What if you don't want the default contents on the display? What if you want to make a super-fancy, full color with lots of bitmaps-screen? Then you'll do the things above, but omit the changes to "ultralcd_implementation_hitachi_HD44780.h". Instead you'll want to replace the default instance of "ultralcd_implementation_hitachi_HD44780.h" and use your own file instead:

ultralcd.cpp - Remove the include at the top and instead add a toggle at the top of this file for the specific screen that included the right class if the OLED_SSD1311 was set:

#if defined(DOGLCD)
    #include "dogm_lcd_implementation.h"
#elif defined(OLED_SSD1311)
    #include "oled_1311.h"
#else
    #include "ultralcd_implementation_hitachi_HD44780.h"
#endif

myCustomOled.h - In this file (can have any name) you need to implement your own version of all the methods in ultralcd.cpp. The class holds an instance of the custom screen and handles all the actual hardware.

Be advised that this approach is more time consuming, but you could of course just copy the contents of "ultralcd_implementation_hitachi_HD44780.h" and modify only the things you need.

Things learned

There's always something to learn when doing a new project that you can carry over to coding in general. For instance - when you get the Arduino/C++ error "someClassName does not name a type" this basically means that the compiler can't find the definition of the class "someClassName". If you look closely at the error message it will usually tell you where you need to add an #include statement so that the compiler knows what to do. Probably obvious to seasoned C coders, important info for me grin

By doing this I've now implemented a full library for a custom piece of hardware with only a little to start from. I had to read the datasheet carefully and there were several things I could have added. This is how I hooked it up to my Megatronics 2 board:

End result

Size, readability and looks was my main reason to do this project. I'm quite happy with the results when I'm comparing it to the two most common Reprap Controllers:

Not only is my custom controller smaller - it's also thinner despite using standard components on a perfboard:

Is it worth it? I think so, but it could certainly be a good product just to sell a super-thin controller like this. I only need a single one, so it's not for me , but someone should make a standard reprap controller that looks as good as the Panucatt Viki LCD, but with an OLED grin
Next up: printing a nice enclosure for it!

Useful reading

Here's some links that I found useful when solving this project:

Partial description on how to do this http://www.justblair.co.uk/attaching-a-lcd-display-and-rotary-encoder-to-a-ramps-controlled-reprap-printer.html
#define's & pre-processing http://www.cplusplus.com/doc/tutorial/preprocessor/
Schematics for UltiPanel with rotary encoder http://www.thingiverse.com/thing:15081

This also gave me a chance to do some extra documentation around the Megatronics 2.0 electronics that I use for the printer.

Summertime

07 Jul

Summertime

I really love those squeezed-in weeks of work in between family holidays. It's a rare time to catch up on thing like blogging, reading & updating a few personal projects. I just finished reading The Martian by Andy Weir that I got recommended from @hpeikemo. It's a really thrilling book that I'm sure we'll see as a hollywood movie soon. The story is kind of a "Robinson Crusoe meets McGyver on Mars". After reading it, I gave it to my son who completed it in just two and a half day. Great summer read!

I finally got around to update my Arduino Companion app. It's ratings have suffered quite a bit since Android 4.4 is now pretty common and it took Adobe a LOT of time to fix the bugs. When the fix finally was available, I was stuck with client work and didn't manage to set aside the two days required to fix it. I can only apologise that it took this long.

It sucks to loose the 4.6+ rating on Android, especially since it's mainly due to ppl like Nicholas Castle that wrote the 1-star review to the right. I don't mind a 1-star review that says that the app does not work (when it does not), but this is kind of harsh from someone that hasn't even seen the app? It's not like he paid anything (it's a free app) or that I have a 100 person customer service department. I make the app on my spare time, I give it away and my email is listed below the app. Oh well. I guess I'll rather thank users such as John, Daniël, Luiz, Thomas, Tim, Bryce, Samantha and many others for nice and polite feedback with reminders to fix the problems. As soon as Apple approves the app, the more than 105.000 iOS users of the app can download the update to version 1.2. The more than 102.000 Android users can get it today. More than 200K happy users… Crazy isn't it? grin

The months since December is sort of a blur as I've done more client work than I usually do. The most fun commercial projects this autumn was building a series of custom wifi-enabled LED signs as well as working with UNO. After summer I'm really looking forward to teaching another half-year of Embedded Systems at NITH here in Oslo. There is something really special about seeing computer science students actually understanding the core operations that enable the computers they use every day. It's all just one's and zero's, but you don't really get it until you have to create the bits yourself by turning power on/off at the right intervals… The students were really happy with the course last year and I have plans to make it even more fun this year!

Since I've worked long days, I haven't had that much time for my hobbies but I've gotten quite far on building a X/Y robot that I have plans to complete before going to the Maker Faire in Trondheim in August. It'll be able to draw, print and probably also do some light CNC'ing when I'm finished.

Just before the summer holidays I managed to squeeze in two weeks to build a brand new 3D printer from scratch using Makeblock! This new printer will have a bigger build envelope, but it will also be able to use flexible plastics, nylon, wood and bronze materials thanks to it's construction. Read more about all the advantages here. With that you would think that this fills my appetite for 3D printers, right? Not quite. I spent my tax return on signing up for the Titan 1 SLA printer as well. It'll give me extremely high resolution models as well as solve my problem of printing parts over night without disturbing the family. That said - the Makeblock-based printer is much more silent than my Ultimaker. Looking forward to November & meeting the Titan!

2012 - what a difference a year makes

06 Jan

2012 - what a difference a year makes

The last year was full of changes for me professionally. My focus is still games and entertainment, but I'm drifting towards other languages and platforms than I've been using the last few years. I've changed office and I'm also spending lots of time on my new hobbies: electronics and 3D Printing!

Hardware

I started the year by taking two months off from client work so I could learn electronics and microcontrollers. I had heaps of fun and I've gotten far enough that I can solve pretty much any idea I get. From having just a very basic knowledge of electronics, I can now read datasheets, solder and build circuits that solve problems. Thanks to microcontrollers (such as an Arduino) I can get really far with only limited electronics experience. Throughout the year, I wrote 19 blog entries about Arduino and 9 about electronics.

3D Printing and modeling

In April I got myself an Ultimaker. I built it from scratch based on a kit and at the end of the year, I got myself a second 3D Printer - a Printrbot Jr. Throughout the year I've written 9 entries about 3D Printing and I'm sure it'll be at least twice as many in the year to come. I've always known how to model in 3D, but 2012 was the year I learned Rhino. It's very different from other 3D packages, but I absolutely love it! It's incredibly intuitive and easy to learn. Drop by Thingiverse to check out things I've designed this year.

Projects

I've done several great projects this year. My favorite was the Rock City Project where I got to work with my friends in Back on a huge museum installation. On this project I did 6 of 10 interactive installations and lots of hardware integration. If you're travelling in the Namsos area, it's well worth a visit!

Another favorite what the HTML5 game I made for NASA! The screen was 8x12 metres and anyone with a smartphone could open a URL and then play a game on the big screen using their phone as a controller. Unfortunately, the project was only live for a week. Due to that I can't really show it, but hopefully there will be more projects like this in the year to come.

My Arduino Companion app keeps going strong. It's now surpassed 70k installs on iOS and Android and it just keeps growing. I'm also working hard on another AIR-based game at the moment that I know is going to be a success. Hopefully, we'll have it out mid February.

My new office: Bitraf

I've said goodbye to my architect friends for now and moved to Oslo's biggest Hackerspace -> Bitraf. I share my office space with designers, 3D modelers, illustrators, programmers and other geeks. In the evenings, the office transforms into a lively Hackerspace with an even wider mix of people. It's a really great place with lots of nice people and it's something I've dreamt of for many years.

Bitraf works as a "DoOcracy", meaning that those that DO things there gets to decide what happens there. My biggest contribution this far has been the 3DP weekends, but I hope to contribute even more in the year to come. You'll usually find me there every Build-night (Thursdays).

If you're looking for an office in Oslo and you have an interest in code, creativity and making things - check it out. I don't think you can find a better deal on an office for freelancers in Oslo.

Adobe's lack of interest

I've put anything that has to do with Flash on hold until Adobe (or a new owner) take the platform further. I still do Flash & AIR projects, but when Adobe can't bet on it's own platform, then how can I? I'm looking beyond Adobe tools and I'm liking what I see on the Open Source side. The way Adobe has treated developers the last year clearly shows that they're all about graphics, not code. This also means that Flashmagazine.com is on hold until something new happens to the platform.

2012 is also the year when Flash User Group Norway (FUGN) went silent. The group was started 5 years ago by Paulo, Øystein and me. It's been a hotbed of creativity and inspiration over the years. I have gotten lots of good friends through it, but wouldn't you know - just as we were sitting in a meeting we got an email from Adobe saying that the group had been closed down?

Apparently the reason was that we had less then 50 active members. In other words -> if you run an Adobe User group - you better make sure it's in NYC or other big cities. "Small" cities like Oslo are apparently no longer being tolerated. After all - they do support you with free pens and a single software license per year so they can't waste that on good customers. What can I say… Words fail me…

I still do lots of projects based on AIR and I'll continue to do so as long as Adobe keeps the product up to date. It's by far the best cross-platform solution that I know of, but Adobe really isn't doing much to tell the world how great it is. It's sad…

Rock in the road

10 Sep

Ages ago since I posted some animation. I totally loved this one! The punchline is indeed very true.

Rock in the Road from SVAD Animation on Vimeo.

In other news - Arduino Companion now has passed 40.000 downloads across iOS and Android.

 

Why Javascript bores me

14 Jan

Update: I feel that I should add to this post that working with node.js and socket.io has sort of changed my mood when it comes to Javascript. I'm having lots of fun doing JS stuff these days and even combining it with Flash and AIR.

Now this is going to sound cocky (sorry) but I need to get it off my chest - the thing I hate about the Flash vs HTML(5)/JS/CSS(3) debacle is that clients now expect you to be able to do everything you could in Flash using HTML. They also expect that everything will magically work well on mobile devices such as iPads and cheap Android phones. This is after all the very promise that Steve Jobs and other cool guys have sold them. The problem is - it’s not like that at all.

It’s really hard work to solve browser incompatibilities and code around lack of capabilities in mobile browsers. I don’t mind hard work but this really bores me - a lot. I hate patching something that really should have worked, but since somebody didn’t agree on how to solve it I’ll get to poke around half a day to look for an answer…? It’s much more fun to create stuff, isn’t it?

I don’t mind that Flash’s role is changing. It was inevitable and I too love to see cutting edge work done in HTML/JS/CSS like this brilliant site by Bret Victor or enfantsterrible by WeFail. I just don’t want to go 5 years back in time to the time before Flash Player 9 and Actionscript 3. I don’t mind Javascript at all, but it feels so totally inappropriate to try and build serious apps with it (like I do with Flash and Flex). I don’t want to work on projects where I constantly have to cut back on creativity just because something just isn’t possible (yet). Flash is a platform that does not limit what I can do, so to me this boils down to either having (what I think is) a boring job or finding something more enjoyable. Work takes up too much of my life for it to be boring…

AS3 is such a mature language and if you read up on the future of Javascript, you’ll find that JS5 will be the “patched but still untyped” version of JS. Future versions after that will become what ECMA 4 tried to be before Microsoft more or less killed the project. Flash’s programming language AS3 is what Javascript will become in the future. It probably won’t be exactly like, but it’ll be close. I think that I will look for other challenges while waiting for javascript to mature where working with it no longer bores me.

Others have taken a different route and gone with the flow to do with JS what they have already done with Flash and Flex. I have no need to do that. There’s so many other things to do than have a boring job. Today, João Saleiro posted a brilliant and thorough article that more or less sums up all of my frustrations with “the future” of web development. It’s lengthy, but it’s really worth it - especially if you come from the HTML/JS side. Most HTML5 “comment trolls” don’t know anything about Flash, Flex or AS3, so they have no clue what they are missing…

Sorry. HTML5/Javascript/CSS3 The hype really bore me and I’m already used to Living in the future. I won’t spend time on learning the fancy “flavor of the month” JS-library that may be dead a couple months from now. Instead, I currently enjoy learning about electronics and microcomputers while coding in C - a language that is older than me and still just as valid. And if I ever “have to” to build something big with Javascript, I’ll certainly use something like Haxe that can remove the pain and add some fun.

Further reading?

HTML5 in way more than 5 paragraphs

The Increasing Cost of Interactive Production

The World of Pain that is HTML5 Video

The open web needs you now

PS: I do a lot of HTML, JS, CSS and have done so ever since I started in this business 15 years ago. I also do PHP and EE CMS on a almost daily basis. I just don’t see the excitement in fighting against technology to make it do what have been done already. If being on the bleeding edge requires daily pain and fighting inadequacies/inconsistencies/incompatibilities, I’ll rather look for things more fun to do?

Forgetting what’s important to the user

20 Jan

fameInflunce.jpgFound a great read today regarding Twitter and how the amount of followers does not translate into a similar influence. Implementing Social media support into apps is a requirement for most projects I do these days and it’s seen by PMs as one of the most important things to include. Several times lately, I’ve had developer friends tell me how their PMs want sharing implemented over way more important features. Yesterday I was reminded by a good example.

My wife showed me a nifty little iPhone recipe app published by the Norwegian council for fruit and vegetables. This app has the all important support for Facebook and Twitter, but isn’t it way more important to be able to tag a recipe as interesting so you can look it up while at the store? Adding support for saving favorites would be much more valuable to me than telling my friends what I might have for dinner. In the case of my wife - she uses Facebook and she has her second iPhone. However she dislikes pointless updates like “vacuuming my living room” and “having cucumbers for dinner”. Why do PMs think that boring your friends is more important than actually using the app they spent so much money developing?

Is it always worth adding Twitter and Facebook links to everything in place of other features? How about users that don’t use Twitter and Facebook?

How to shoot yourself in the foot

13 May

Twitter has become an important part of my day, but today it lost a lot of it’s value to me. By changing this ‘tiny’ setting, I no longer see the conversations that my friends have. I only see people twittering for themselves or directly mentioning me. I now get only 1/6th of the messages I used to get.

This is not how I use Twitter. I use Twitter to follow what my colleagues in the community and friends do and chat about. By removing this feature, the value of Twitter is now VERY reduced and I feel like quoting Eivind Ingebrigtsen that tweeted last week: “Assumption is the mother of all fuck ups. If you assume, you’ll make an ASS of U & ME”. By ASSuMing things like this - Twitter could easily kill itself… You’ll find some good commentary on this topic at the Ajax Blog as well.

assume.jpg

Just call me Mr TypeALot…

20 Aug

Incredible. The coating on my MacBook pro is pretty worn (where I hold my hands) but today the Command key broke in two? I sure use it a lot, but since MacBook Pro is a favorite with programmers, shouldn’t the keyboard handle our everyday usage?

IMG_2958_small.jpg

Update 1: 15 minutes to wait for Applecare support. Hmm…
Update 2: AppleCare says this is not covered. Suggests calling an authorized service partner
Update 3: Last 40 minutes I have tried both Eplehuset and Humac (the two suggested partners) and none of them answers the phone.
Update 4: Finally got through to Humac. They said I’d have to hand them my machine or they could send a service technician to my house. If that isn’t overkill I really don’t know what is…
Update 5: Eplehuset finally answered the phone and said “sure, no problem. we’ll fix that for you.” They’re officially my Apple Heroes!

Twitter is technically wrong…

20 May

“Something is technically wrong” at Twitter, today and most every other day. I once read an article where the author claimed that “it does not matter WHAT technology you use. Worry about that WHEN your product is a success”. I guess Twitter is the continuing proof that this does not hold up?

Maybe he wasn’t all wrong though. IF you have a success AND you’re able to monetize it - you can use those money to fix any remaining technical issues, right? It’s all just a matter of scaling the hardware and you’re good to go? Looks like that if you build your software using Ruby on Rails, you’re bound to be screwed for a long time if you’re successful and refuse to change platform. After all - Twitter isn’t Rocket Science, it’s a server based app with rather limited capabilities that is written in a high level language.

I’m currently reading “Hackers and Painters” where Paul Graham (amongst other things) explore the ideal programming language. Given the condition that you have infinite computing power, high level languages are great according to Graham. The problem is that every level of ease for the programmer has a price. From machine-code, moving upwards through the various programming languages from machine code to C and eventually Lisp - every level of abstraction comes at the cost of slower execution. Twitter is running on Rails and it seems they just don’t have the required hardware.

Or is it just hardware? To scale as much as Twitter needs to, is incredibly hard when it all comes to hardware. Wouldn’t it be great if Ruby had some features that could help this? The developers of Ruby are really certain about themselves. It’s like they have found the Holy grail of computing and have developed the ultimate language that never needs extending. That’s kind of like Paul Grahams basic idea and I wonder if the Ruby devs have read Paul Grahams book? It’s a fun read that’ll provoke and entertain when it comes to nerds, computers and designing programming languages.

PS: I sure hope they fix Twitter soon. I’m really missing it and three months ago I didn’t even use it. Now THAT’s strange!

twitterWrong.jpg