Monday, September 10, 2012

CoffeeScript keeps crashing on me

I am a big fan of CoffeeScript, I think it is the syntax that Javascript should have. The problem I have is this, the compiler keeps crashing on me. I generally set it up with the "--watch" command so that it will keep track of my files and recompile as I go, which is nice. Except when it crashes and I spend 5 minutes wondering why my new code is not showing up.

I had originally thought to write an erlang app to fix this, but then I realized that I need something much simpler, a shell script will do:

(yea I suck as shell scripts) But it does the job. It runs the compiler and if it should exit well then bash will just restart it without bothering me.

When in doubt have the computer do the boring and repetitive stuff!

Sunday, September 9, 2012

Mixed in with all the other programming stuff I am doing I am going to be teaching my Step Daughter to code. So we will be working threw "How to Design Programs" which should be fun  so expect to see some scheme here intermixed with the CoffeeScript, Erlang and whatever else runs across my desk. Look for it under tag "scheme"

Thursday, September 6, 2012

A Mock Sync For Backbone.js

If you want to do unit tests on a backbone.js application it would be really nice if you could replace the default sync with one that will not make an AJAX call but will return prebuilt data so you can test the application.

This is very easy to do. What you need to do is to replace the default Backbone.Sync object with one that will pull prebuilt data. This is what I have been using so far. It just takes an existing table of mock data and when a request comes in uses the URI as a key to retrieve the data and resets the data for the collection.

Obviously this only works for reading data, for Update, Delete etc things get a little more complex but there is no reason to not be able to expand this approach.




Wednesday, September 5, 2012

Running QUnit on Save with PhantomJS


I have started doing TDD in my CoffeeScript using QUnit. This is pretty amazing really and it has been making me pretty happy. However there is still the very repetitive cycle of save, switch to a browser run the tests and switch back to emacs. What would be amazing is if I could get emacs to do everything for me. After all I should be able to program my system to do the boring repetitive stuff 

It turns out that this is not even that hard, but it does take several parts. 

First of all we need a browser to run the tests. We could use Selenium (which I rather like actually for other things) but even better would be to use PhantomJS which is a headless browser.

What PhantomJS is is a browser based on WebKit (which is also used by Chrome and Safari) that does not display anything. But you can interact with it via JavaScript. So what I want to do is launch my web page (which is on a local web server) then have QUnit run and return the results. Thankfully the PhantomJS folks have a script do just that in the form of a QUnit Driver. (They also have one for Jasmine if you like that).

So now I can call PhantomJS like this:

phantomjs run-qunit.js http://localhost:8080/test.html

I can have it load up my page and return the results of qunit:

'waitFor()' finished in 407ms.
Tests completed in 222 milliseconds.
80 tests of 95 passed, 15 failed.

It gives me a result like that. Which is nice, it tells me exactly what I want to know, if everything passed or not. So what I want is for emacs to run it when I save a file, to do this I run this bit of emacs lisp. 



What I would really like for future is to change it so that if everything passes it will give me a line
that says "203 tests pass" or the like and if all tests do not pass then it should open a buffer to tell me exactly which tests failed. (Maybe even try to figure out which file the failing code is in to bring me to the right spot to fix it )

Monday, June 11, 2012

Orthonomics: AMI Magazine Article Review: Duped

Orthonomics: AMI Magazine Article Review: Duped: anon426 My editor is Simon St Lawrence who I don't think was around then, but I have also worked with Andy Oram. I have been an O'Reilly fan for a very long time and when the chance came to write books for O'Reilly I jumped at it. Of course I spent 3-4 years making sure that chance would come.

If my career as a programmer is flying now its because I spent the last 5 years building it up!

Monday, December 27, 2010

New Tech paradigm - LN3

So if LAMP is being replaced what is it being replaced with, I think its a combination of these:
  • Linux
  • NoSQL
  • Node.JS
  • NgineX
So what to call it, How about LN3

Saturday, December 11, 2010

Node.JS and the way forward

One issue with many web development languages such as PHP or python is that all IO is blocking. So every time a program goes to the net, disk or database the thread or process blocks. It stops what it is doing and waits until the data comes back from the disk or network.  In a heavily loaded server which is being bottlenecked by disk or network this can result in a great number of processes in disk or network wait states, this is less than ideal when trying to scale.

One novel program that is trying to deal with this is Node.JS. Node is a server side javascript enviorment that uses the Javascript event loop to work around this. Similar to the way Javascript will do AJAX on the browser Node.JS will do all its IO with a callback. In theory a single Node process can support thousands of users by never blocking on IO. I hope to play with Node.JS soon.