JavaScript Garden
March 31, 2011 Leave a comment
Beautiful design and great content. I really love how the ToC on the right side follows your progress through the document.
The weblog of Ryan Garver. A coffee nut. An agile freak.
March 31, 2011 Leave a comment
Beautiful design and great content. I really love how the ToC on the right side follows your progress through the document.
March 4, 2011 Leave a comment
mailchimp/Email-Blueprints – GitHub.
If you need to send HTML email from your web app, check this out. You can see all of the templates by cloning the repo and opening the html files in your browser. MailChimp’s team has spent a lot of time building and testing these on different email clients so you don’t have to.
January 7, 2011 Leave a comment
5 Things You Might Not Know about jQuery – O’Reilly Answers.
I forget how cool jQuery is when I’m away from it for a while. This is a good reminder.
August 5, 2010 2 Comments
I’m really excited about this new feature of HopToad. I’ve played around with ExceptionHub but it was missing some important features like team management. Leveraging HopToad to do this kind of JavaScript/browser level error tracking really cleanly combines two useful and similar tools for debugging a running system.
I should add that I echo the concerns of some of the commenters on the linked to blog post about security concerns. It would be helpful if ThoughtBot followed this up with a post to address this concern in a bit more detail.
All in all though, this is nice
November 21, 2009 3 Comments
The MagLev alpha was released recently. Before I get too far in to this post I need to make it clear that I’m not affiliated with the MagLev development team. I’m not really even much of a Ruby interpreter hacker. I’m a curious ruby developer that has heard some interesting things about the project and wanted to get it up and running now that it’s available. I decided to make this post because the install and setup procedure is anything but standard. It’s not complicated, just not what you normally would expect.
First lets get the code:
$ git clone git://github.com/MagLev/maglev.git Initialized empty Git repository in /Users/rgarver/Sources/maglev/.git/ remote: Counting objects: 28955, done. remote: Compressing objects: 100% (12671/12671), done. remote: Total 28955 (delta 15669), reused 28427 (delta 15200) Receiving objects: 100% (28955/28955), 14.97 MiB | 539 KiB/s, done. Resolving deltas: 100% (15669/15669), done. Checking out files: 100% (2180/2180), done. Initialized empty Git repository in /Users/rgarver/Sources/maglev/.git/remote: Counting objects: 28955, done.remote: Compressing objects: 100% (12671/12671), done.remote: Total 28955 (delta 15669), reused 28427 (delta 15200)Receiving objects: 100% (28955/28955), 14.97 MiB | 539 KiB/s, done.Resolving deltas: 100% (15669/15669), done.Checking out files: 100% (2180/2180), done. $ cd maglev
Great, we have the code. Next step is to do a base install. This installs the base libraries and GemStone which is the fabled persistence layer that MagLev has integrated. GemStone is a object persistence layer originally built for Smalltalk. If you haven’t ever played with Smalltalk or some of the variants (eg: Squeak) I recommend it. It will turn your head upside down.
$ ./install.sh
[Info] Starting installation of MagLev-22578.MacOSX on sirius.local
Password:
Sat Nov 21 09:22:44 PST 2009
[Info] Setting up shared memory
Total memory available is 4096 MB
Max shared memory segment size is 4 MB
Max shared memory allowed is 4 MB
[Info] Increasing max shared memory segment size to 2048 MB
kern.sysv.shmmax: 4194304 -> 2147483648
[Info] Increasing max shared memory allowed to 2048 MB
kern.sysv.shmall: 1024 -> 524288
[Info] Adding the following section to /etc/sysctl.conf
# kern.sysv.shm* settings added by MagLev installation
kern.sysv.shmmax=2147483648
kern.sysv.shmall=524288
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
[Info] Setting up GemStone netldi service port
[Info] Adding "gs64ldi 51456/tcp" to /etc/services
[Info] Downloading GemStone archive using /opt/local/bin/wget
--2009-11-21 09:22:44-- http://glass-downloads.gemstone.com/maglev/GemStone-22578.MacOSX.zip
Resolving glass-downloads.gemstone.com... 207.171.185.197
Connecting to glass-downloads.gemstone.com|207.171.185.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 74858717 (71M) [application/zip]
Saving to: `GemStone-22578.MacOSX.zip'
100%[==========================================================================>] 74,858,717 847K/s in 1m 45s
2009-11-21 09:24:32 (694 KB/s) - `GemStone-22578.MacOSX.zip' saved [74858717/74858717]
[Info] Uncompressing GemStone archive into /Users/rgarver/Sources
[Info] Linking gemstone to /Users/rgarver/Sources/GemStone-22578.MacOSX
[Info] updating MSpec, RubySpec, and RBS submodules
Submodule 'benchmark' (git://github.com/acangiano/ruby-benchmark-suite.git) registered for path 'benchmark'
Submodule 'spec/mspec' (git://github.com/rubyspec/mspec.git) registered for path 'spec/mspec'
Submodule 'spec/rubyspec' (git://github.com/rubyspec/rubyspec.git) registered for path 'spec/rubyspec'
Initialized empty Git repository in /Users/rgarver/Sources/maglev/benchmark/.git/
remote: Counting objects: 7332, done.
remote: Compressing objects: 100% (5521/5521), done.
remote: Total 7332 (delta 1595), reused 6917 (delta 1274)
Receiving objects: 100% (7332/7332), 9.90 MiB | 578 KiB/s, done.
Resolving deltas: 100% (1595/1595), done.
Submodule path 'benchmark': checked out 'd807eea7f7b2f38240bc177a0c22e599081882ea'
Initialized empty Git repository in /Users/rgarver/Sources/maglev/spec/mspec/.git/
remote: Counting objects: 2745, done.
remote: Compressing objects: 100% (1080/1080), done.
remote: Total 2745 (delta 1848), reused 2484 (delta 1644)
Receiving objects: 100% (2745/2745), 378.57 KiB | 383 KiB/s, done.
Resolving deltas: 100% (1848/1848), done.
Submodule path 'spec/mspec': checked out 'bcec47c70e0678a29fd0c1345358c4daf7b971a3'
Initialized empty Git repository in /Users/rgarver/Sources/maglev/spec/rubyspec/.git/
remote: Counting objects: 26787, done.
remote: Compressing objects: 100% (8705/8705), done.
remote: Total 26787 (delta 18332), reused 25672 (delta 17482)
Receiving objects: 100% (26787/26787), 3.71 MiB | 520 KiB/s, done.
Resolving deltas: 100% (18332/18332), done.
Submodule path 'spec/rubyspec': checked out 'b0a18cf80dc706d39ee550831b8b941224b60fb6'
[Info] Creating new default 'maglev' repository
[Info] Generating the MagLev HTML documentation
[Info] Finished upgrade to MagLev-22578.MacOSX on sirius.local
[Info] MagLev version information:
maglev 0.6 (ruby 1.8.6) (2009-11-20 rev 22578-1067) [x86_64-linux]
GEMSTONE: 3.0.0 Build: 64bit-22578
MONTICELLO: MagLev-ao.1067.mcz
MAGLEV: commit e2a4fe2e0f7ca85cdcb141e6b56913eba802eefd
Author: Allen Otis <otisa@abaco.gemstone.com>
Date: Thu Nov 19 19:57:09 2009 -0800
[Info] GemStone version information:
GemStone/S 64 Bit
3.0.0 Build: 64bit-22578
Fri Nov 20 8:22:00 2009
[Info] Adding these to your .bashrc will make it easier to run MagLev
export MAGLEV_HOME=/Users/rgarver/Sources/maglev
export PATH=$MAGLEV_HOME/bin:$PATH
[Info] After you complete this upgrade and verify MagLev is working, run
rake stwrappers
to generate the .rb files for the GemStone/Smalltalk FFI
in MAGLEV_HOME/lib/ruby/site_ruby/1.8/smalltalk/
As you can see on OS X it will build everything for 64bit which is pretty cool. It also downloaded a bunch of support libraries and updated all of the submodules. If you ever update the code locally you are supposed to run ‘$ ./update.sh’ to rebuild everything and get it all up and running.
Once you have it installed you should add the following lines to your .profile or .bashrc
export MAGLEV_HOME=/Users/rgarver/Sources/maglev export PATH=$MAGLEV_HOME/bin:$PATH
You’ll need to make sure you run those lines on the command line also. Once the environment is setup you can run ‘$ rake maglev:start’. This command apparently boots up the core MagLev engine.
$ rake maglev:start (in /Users/rgarver/Sources/maglev) startstone[Info]: Starting Stone repository monitor "maglev". startstone[Info]: GemStone server 'maglev' has been started.
Once that is started you are good to go:
$ maglev-irb
/Users/rgarver/.irbrc
error , no such file to load -- readline,
during /Users/rgarver/Sources/maglev/lib/ruby/1.8/irb/completion.rb
error , no such file to load -- readline,
during /Users/rgarver/.irbrc
irb(main):001:0> puts 'hi'
hi
=> nil
irb(main):002:0>
November 19, 2009 Leave a comment
Google recently announced their SPDY protocol that they’ve been working on to address a number of inherent non-performant aspects of the HTTP protocol that most of the web depends on. In the last few years the web has shifted much more towards real-time applications. Web application development is starting to think about interaction experiences much closer to desktop apps. It’s not out of bounds to consider the response times of certain queries on a website in terms of keystrokes (~200ms). Moving the request/transmission protocols to catchup with this change makes sense.
One thing that I am happy about with SPDY is that is appears to be built with deployment clearly in mind. This isn’t the first attempt to improve web speeds, it’s not even the best, but it does appear to be the simplest to deploy in to the wild and see rapid adoption. If Apache and Firefox gained support for SDPY out of the box, and it was show that using the protocol would improve server throughput, it would be enough to shift most websites over. That’s only two players. That’s pretty promising.