An illustrated re-introduction to HTTP caching with a focus on gateway caches and their potential benefits within the context of modern, dynamic web applications.
Real HTTP caching for Ruby web apps.
2,484 miles later, I find myself in San Francisco working, for the first time, on something I really love.
Fast Markdown libraries for Ruby: two for the price of one.
It’s as though every other version control system I've ever used was created by people who were really into version control and Git was created by people who were really into hacking.
As seen on Google Code’s new and improved source browser.
“I hold that simplicity is the most important attribute of design,” I say. To which Tufte would reply, “No, you don’t.”
So you've decided to start a weblog and have a really clever idea for titling it based on a snippet of code you find particularly novel. Rad!
I can’t think of single piece (package?) of software I use, admire, and depend on more than GNU Coreutils. Maybe Firefox. Maybe OpenSSH. Some days rsync(1).
Fork me!
“The MIT guy did not like this solution because it was not the right thing.”
Did I ever tell you about the guy that spent the better part of a day making his site’s layout entirely em based …
A call to arms.
What I'd like to do is run Firefox/Gecko on the server. It would load up the report, render it with the print stylesheet and then output the PDF. The concept is not unlike khtml2png or webkit2png but instead of outputting a raster image, it would output a PDF: gecko2pdf, if you will.
Sanjiva Weerawarana is such a tool.
On Dreamhost freaking out because they can’t get Rails deployed reliably.
Cheap branches make for new uses.
A long overdue request for maintainers on two potentially important Python projects.
It’s not Rails’s problem.
Ian compares Pylons and TurboGears and makes a few interesting general observations along the way.
It’s that bad.
Charles Nutter on the possibility of a Rails support announcement in February 2007.
A prediction piece on the possibility of a Ruby backed coup d'état on the JVM and what that might mean to the pragmatic web developer.
A look at the new Coherence Mode feature in Parallels desktop.
What the GPL could have accomplished (and may well still).
The REST / Web Arch. crowd falls back to its secret weapon in the fight for mankind: The Dialogue.
My best attempt at saying something nice about Sun’s GPLing of Java, even if a bit grudgingly.
On the relationship between the “Black Hole Theory of Design” and “Greenspun’s tenth Rule of Programming”.
Reddit Broke (Sorry).
How to understand what those barbarians are doing over there and why your going to keep on hearing about it.
Time Travel vs. ESP
The axioms of web architecture and an invitation for big vendors to understand them.
lesscode.org goes live.
A quick test to see how hard-core you are.
That is to say, they don’t get it. This started out as a simple rant and turned into a decent sized essay on basic shared-nothing architecture and scaling down.
Praise for the anti-analyst firm analyst firm.
Embracing brokeness.
“If you cannot think of 3 good reasons why dynamically typed programming languages have a role to play in this universe, you don’t want the job.”
And why we need more three-legged stools.
How complexity killed the best bug ever created in the whole world.
IronPython vs. JPython: who cares?
What I think success means with regards to “Web Services”.
It has nothing to do with the web.
The loyal opposition is growing in weird ways.
Template Inheritence, Match Templates (kind of like XSLT’s), cElementTree support, a refined Python API, documentation…
Some thoughts on AMQ, the latest solution to all your problems.
Praise for Yahoo! as they launch an initial set of web style APIs.
Wherein we avoid a Python vs. Ruby flamewar by changing the subject to Object vs. RDMS persistence.
I humbly retract my previous negative statements about IBM.
Just keep talking.
A theory on why big vendors, big analyst houses, and the tech press want to sell you the worst possible solutions to your problems.
The web as currently imagined by the tech. industry is quite different from the web that actually exists.
On using the web to co-ordinate massive grass-roots efforts quickly.
Kid 0.5 announcement with a couple of page fulls of example usage.
What does Ruby on Rails have that we don’t and why?
Python’s attributes are not Java’s getters/setters and why that’s a good thing.
Coverage of an odd mailing list thread suggesting that IBM is gearing up to slap an F/OSS license on their Java compiler and runtime.
Why I prefer ElementTree to “standard” DOM APIs and why it’s sometimes better than libxml2.
Ross Burton builds the first real-world application using Kid Templates.
On changing from GPL to MIT, going after web-framework support, and simplifying as much as possible.
A comparison of Java’s static methods and Python’s class methods.
A report on what seems to be real forward progress in the Fedora project.
It’s not a robot thing.
Alan Turing would sooo beat Linus Torvalds in arm wrestling and technologies no different.
I miss Mark Pilgrim.
Trying to figure out a way of providing XSLT-like template matching in Kid.
Tim seems to be working miracles over at Sun.
Applying a chain of Python generators to achieve transformation of the XML infoset.
This release is all about documentation.
How I decided to build Kid – the simple, pythonic, XML-based template language.
Adam Bosworth joins the Loyal WS-Opposition – minus the loyal part, perhaps.
A Python based weblog thing or something.
Why Java won’t even be considered for most types of F/OSS applications until they ease up on the license.
Wherein we predict that whoever decides to take dynamic languages seriously will win the interpreted bytecode market.
Danger’s my middle name.
There has to be a place for this in the standard library.
Why are they there?
URLGrabber is a file fetcher in Python that works with HTTP and FTP.
Rock on.
I never would have imagined a language with so much power could be so easy to pick up.
Ian McKeller shows how easy it is to find web API “secret keys” when the user has access to the (network) client code. It’s actually a nice little crash coarse in how to write cracking software (here “crack” means warez scene type “crack”). That crazy shit like this is possible is why I got into software in the first place. Completely
“While I do consider the adjective ‘baroque’ to be a compliment, I must point out that Perl is actually more of a romantic piece, with allusions to various classical motifs. My favorite composer is Mahler, which should surprise no one.” — Larry Wall
Markus Prinz with a nice review of important Ruby 1.9 changes.
Christoffer Sawicki has started in on a partial implementation of ESI (Edge Side Includes) as a Rack middleware component. Put something like this in front of Rack::Cache and things get real interesting real fast :)
Finally, a sane looking sanitization lib that doesn’t try to do too much.
Interesting looking HTTP client library for Ruby with support for HTTP caching (with pluggable backends), basic and digest auth, intelligent redirect handling. It’s been around for a while and looks like it could eventually become similar in feature set to Python’s httplib2.
Nick Kallen has started a project to implement a HTTP cache in Scala. Seems like an excellent idea given Java’s extensive collection of stable HTTP server libraries and Scala’s strengths in concurrency and performance.
A much more sober but constructive take on the plan to merge Rails and Merb.
Mailing list for Rack::Cache users and hackers. Come on in, the water’s warm.
Jon Crosby’s RESTful JSON-based data store with OpenID and OAuth support. It does versioning and produces HTTP cache friendly responses all in a Rack middleware component. Jon’s been working on this for some time and it shows in the code and docs. Awesome.
Jean-Jacques Dubray: “How do the RESTafarians work? They take Roy’s REST, they try to use it for anything in their day to day activities, and then when they stumble upon a problem, they try to find a more or less ‘RESTful’ solution and post it on a blog.”
Precisely!
Peter Cooper: “Lots of awesome articles about Sinatra, Sinatra apps, and various links and resources have cropped up over the past few months. The remainder of this post links to the best we've found – most of which you should find useful as you start to explore Sinatra in detail.”
David Heinemeier Hansson: “Rails Edge adopted Rack a while back and we’ve been exploring ways to expose that better. The first thing we did was to make it really easy to hook up any piece of Rack middleware in front of a Rails request. In your config/environment.rb file, you can do: config.middlewares.use(Rack::Cache, :verbose => true)”
Oh hell yes.
Rails riding on Rack is going to be a big deal.
Bad-ass ActiveRecord extension that does read-through and write-through caching to memcached in a way that’s fairly transparent. This is one of the strategies the Twitter folks put in place recently to improve their response time and availability.
Rafe Colburn: “On the other hand, I find programming in Ruby enjoyable and educational, so it’s not like I’m looking to give up. It’s just that even after a couple of years of doing it, I still feel like we’re dating rather than married.”
It seems like a lot of people are down on Ruby at the moment. Odd. I'm actually more excited about Ruby than I've ever been. Things seem to be moving along nicely, especially on the web tooling front.
Nice look at caching idioms in Django and why you need to generate HTTP cache validators up-front and efficiently.
I never put it together that the teddziuba that wrote at lesscode.org in 2005 was that teddziuba. This is a great piece.
Adam Wiggins and Blake Mizerany’s presentation on Sinatra and RestClient.
An Nginx module that acts as a gateway cache. I haven’t tried it yet but it’s a really good idea.
Xavier Shay:
Ticking off an amazon wishlist never really resonated with me, so this year here is what we are all doing instead:
- Find someone’s pet open source project – I’d start at github
- Contribute! It doesn’t have to be much – a spec or two, some documentation, or even just a “hey it works on my box”. Fork, commit, pull request.
- Wish them a Merry Christmas!
Great idea. I feel like I finally have something worthwhile to give this year.
Nicely done. I have to take a serious look at iUI one of these days. It sounds like you can get really close to a native app experience.
“The syntax for many of the commands in bashdb mimics that of gdb, the GNU debugger. You can step into functions, use next to execute the next line without stepping into any functions, generate a backtrace with bt, exit bashdb with quit or Ctrl-D, and examine a variable with print $foo.”
Pratik continues his series on Rack with a deep dive into Rack::Builder.
Pratik’s first in a series of pieces on Rack: how it came to be, why you need to understand it, along with some simple examples. Future installments will cover Rack::Builder and Middleware.
I've read about five extremely solid articles on this site (20bits.com) today; all thorough, easy to read, and cover interesting topics.
Laurence Tratt: “I had implicitly bought into the idea that C programs segfault at random, eat data, and generally act like Vikings on a day trip to Lindisfarne; in contrast, programs written in "higher level” languages supposedly fail in nice, predictable patterns. Gradually it occurred to me that virtually all of the software that I use on a daily a basis – that to which I entrust my most important data – is written in C. And I can’t remember the last time there was a major problem with any of this software – it’s reliable in the sense that it doesn’t crash, and also reliable in the sense that it handles minor failures gracefully."
Includes a brief history of native support for getElementsByClassName in Mozilla and other browsers.
Interesting approach to setting cache related headers using a Rack middleware component.
An interesting RubyGems mod by Fabien Franzen that seems to fix the memory hit a process takes on require 'rubygems'. Unfortunately, you have to code for it in your app and apply it to installed ruby commands explicitly. Fabien has submitted a ticket and patch to the RubyGems project, however. You should +1 it (after reviewing the code, of course).
Adam Gomaa: “… this state of affairs doesn’t really help my general feeling of hopelessness when it comes to programming – I know that no matter how good I get, I'm still stuck at being just one person, and the code a single person can write is pitifully small.”
I've come to the same conclusion within the past couple of years. I take on much smaller projects now and try to contribute more to existing projects rather than playing mad scientist on massive works that will never see the light of day. I've also come to appreciate the idea of paying lots of attention to detail on one small thing rather than churning out large quantities of half-baked features.
Stefano Mazzocchi: “I have a much simpler and humble goal here: give programmers some tricks and some advice in how to proceed to make their web pages look cleaner, more readable and, hopefully, more professional, elegant and original than before.”
So, I got an email yesterday disagreeing with my remark about HTTP caching being wildly under-appreciated in the Ruby web community. I felt bad, a little. Then I read this article (posted the day after my remark), which talks about Scribd moving to a Squid reverse proxy setup to front their Rails deployments:
“But there was a problem – no one uses caching proxies in 2008 :–) So, we’ve got an idea – why can’t we place such a server in front of our application and make it cache content for all users in the world?”
The fact that Scribd had to “have this idea” on their own and had not previously been exposed to a ton of literature/tools on reverse proxy / gateway caching is completely fucking unacceptable. I'm back to agreeing with myself.
Pretty good introduction to building pieces of Rack middleware and using Rack::Builder.
Much nicer, IMO. I'm interested to see if someone can get Rails + Rack::Cache working together so that you can maximize the benefits of generating these validators.
Interesting Rails plugin from Viget Labs that adds ActiveRecord attribute helpers for various humane markup languages. The markdown variation supports both rdiscount and rpegmarkdown. Cool. Not sure how I missed it when it was released in August.
So I've been skeptical about Merb but I really like the world-view Ezra puts forth here: core framework code should be simple (no/little meta-programming), fast is good, Rack is awesome, etc.
Paul Downey translates Dr. Fielding’s REST APIs Must be Hypertext Driven into lay-hacker speak.
Huh? In a sane world, “Ajax” would have been called “HTTP” (or, more elaborately: “JavaScript gets a mostly-standard asynchronous HTTP client library”).
At first I thought this was going to be one of those articles that confuses animated JavaScript effects for Ajax but it goes on to talk about how Ajax is bad because it breaks “Save Page to File” … or something. Save Page to File?!
Tom Preston-Werner on how GitHub came into being and leaving Powerset after the Microsoft acquisition: “When I’m old and dying, I plan to look back on my life and say ‘wow, that was an adventure,’ not ‘wow, I sure felt safe.’”
Same here. I'm still looking for techniques that would make my Ruby libs and apps as simple to follow, debug, and maintain as equivalent Python versions are naturally. Ruby’s module system and cowboy shit (instance_eval, modifying Object, Class, Module, etc.) can go to hell. Python + blocks + class scope + large community and I'm sold.
Using conditional comments to stick an “ie” classname on <body> so that you can target IE from a single CSS file instead of bringing in a separate stylesheet. Nice hack.
Looks like a really solid improvement on 1.0. I haven’t had a chance to play with any of the betas but I'm anxious to see whether If-Modified-Since/If-None-Match validation made it in. There’s a note on “serving expired objects until we have a fresh one” but that sounds more like stale-while-revalidate.
“Of course, Strunk and White, as the book is commonly called, has nothing to do with software (it was written in 1935) and everything to do with writing: grammar, composition, and style for users of the English language. But in its 100 short pages this book has more to say about the craft of software than many books you’ll find in the ‘Computing’ section of your local bookstore. All you have to do is replace a few key words throughout the text and presto! Pearls of software development wisdom, delivered in near-perfect English.”
Apparently, Yahoo!’s indexer supports marking specific content on a page as “extraneous to the main unique content”. This lets you prevent headers, navigation, and other types of site-level crud from overwhelming the content and the search results will excerpt only content that’s relevant to the page.
From the Yahoo! Web Crawler FAQ: “… apply the robots-nocontent attribute to indicate to search engines any content that is extraneous to the main unique content of the page. Yahoo! Search observes the class='robots-nocontent' present on XHTML elements, such as div, span, and all others.”
This is really close to what “the web” looks like in my brain:

I try to stay in the general vicinity of the “principles mound.” :)
Ola Bini: “Using instance_eval changes the rules for the language in a way that is not obvious when reading a block. You need to think an extra step to figure out exactly why a method call that you can lexically see around the block can actually not be called from inside of the block.”
Having abused instance_eval in the past, I can say with absolute clarity that it’s usually The Wrong Thing. It can make DSLish code look really cool in controlled and scoped demos but it greatly increases cognitive complexity, making things hard to read and maintain.
Bill Burcham applies the technique of making form controls inherit style from their container in the Air Budd Form Builder Rails plugin. Cool.
… is a Ruby library suitable for use as a drop-in Net::HTTP replacement or with event frameworks like EventMachine and Rev.
Alex Payne’s tumble-like blog on minimalism in coding and design. I didn’t realize @al3x was such a huge conscious follower of the minimalist aesthetic, although I've definitely noticed it in his work.
I'm using this on all of my “linkings” index pages now (see here, for example). It works pretty well. I really like the idea of integrating a piece of the destination site’s visual identity instead of using a generic del.icio.us/bookmark icon. Some site’s with favicons don’t work properly, however, and I'd give anything to have another parameter that let me override the default globe icon (this one: ). It'd be nice if I could say, grab the favicon for this domain but if it doesn’t exist, give me the favicon for delicious.com (
).
A horrible and misguided idea. I've personally never even liked the RJS/JavaScript generation stuff in Rails, and it’s actually well designed, thought out, and quite simple. “Managed Ajax” takes it to a whole new level, building from the assumption that “JavaScript is the new assembler,” and moves most types of interaction logic to the server. Reality seems to be moving in the exact opposite direction. Do yourself a favor and get real comfortable with JavaScript.
Very interesting alternative to git submodule, especially in “vendor branch” type scenarios. The other project is merged into yours at a specified prefix and can be updated with a simple git pull.
“One unpublicized feature introduced by Apple’s latest iPhone software updates is the ability to save Web apps to the home screen and have them launch in full-screen mode without the Safari wrapper, essentially mimicking the experience of a native app.”
Oh, nice. Here’s a high-level design document that describes the new cross-site XmlHttpRequest (their calling it, “XXX”) functionality and ties the other documents floating around out there together. It seems that servers will be able to signal that certain resources are accessible from other domains using HTTP headers or (gasp!) XML processing instructions (PIs). Weird.
Just landed on mozilla trunk a few days ago. See the draft spec for specifics.
Bruce Perens on the recent JMRI/GPL ruling:
“For a decade there'd been questions: Are Open Source licenses enforceable at all? Are their terms, calling for a patent detente or disclosure of source code, legal? Are they contracts, which require agreement by all parties to be valid, or licenses, which are binding even if you don’t agree to then? What legal penalties can a Free Software developer employ: only token damages, or much more? The court’s ruling makes the answers to these clear. Did such weighty questions come up in cases involving IBM, Sun, HP, or Red Hat? No, this is the quirky world of Free Software: it was a court case about model trains.”
Lots of good stuff coming in Varnish 2.0. GC, regexp based purge, custom hash funcs, backend load balancing based on health or other metrics, and the thing I'm personally most interested: what looks like support for validation based caching.
Pseudocode for the SHA-1 algorithm. Pretty straight-forward for being so insanely useful.
Highly experimental HTML 5 validation service. More info and bookmarklets available on the about page.
Aristotle Pagaltzis on eating PHP’s lunch: “It will have to be more than just a programming language, because PHP itself is really more than a programming language. It includes a crude web framework (an invocation model reminiscent of CGI, with extensions) plus a crude deployment solution (just make all the libraries part of the language and let the sysadmin worry about it – who in turn often defers to his operating system vendor). This is PHP’s way of taking the worse-is-better philosophy to dazzling new depths …”
I was having this conversation at work the other day and came away with the conclusion that even if something were to reach feature / ease of use parity with PHP today, it would be many years before it actually surpassed the language in real deployments. PHP is everywhere.
Dan Kegel: “You can buy a 1000MHz machine with 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let’s see – at 20000 clients, that’s 50KHz, 100Kbytes, and 50Kbits/sec per client. It shouldn’t take any more horsepower than that to take four kilobytes from the disk and send them to the network once a second for each of twenty thousand clients. (That works out to $0.08 per client, by the way. Those $100/client licensing fees some operating systems charge are starting to look a little heavy!) So hardware is no longer the bottleneck. ”
Looks like this is from 2003 but is still pretty accurate as far as I can tell.
All frameworks should approach caching the way Django does. The core app/origin framework does no real caching but provides utility/helper methods for setting standard RFC 2616 cache related headers on the response easily and correctly. A completely separate set of caching goo (“middleware”) sits between your app and performs the actual caching based purely on the headers set by the origin. The benefit to this approach is that caching is totally independent from the app framework and can be swapped out for a true gateway (“reverse proxy”) cache at any time.
Dump the stack trace of all threads in a running ruby process by signaling with -QUIT. Requires patching the ruby interpreter, which sucks because I need it for a process running right now.
“It also becomes a good-natured game. Think of it like golf. In golf you’re trying to hit the ball into the hole in fewer strokes than your opponent. In Pedantry Golf you’re trying to be more correct than your opponent, by correcting edge-cases, mistakes or assumptions in the previous post or statement (see also: Perl Golf).”
Yep. Rubygems’s system of security is really very lax compared to any Linux distro or other system-level package management system I've come across. I think the bigger problem, though, is that there’s a cultural acceptance to running gem as root. You don’t really think before installing a gem, you just “sudo gem install FOO”. There’s an attack waiting to happen any time you’re using sudo out of convention like that.
Chris Wanstrath: “Side projects are less masturbatory than reading RSS, often more useful than MobileMe, more educational than the comments on Reddit, and usually more fun than listening to keynotes.”
I just totally love this kid. Chris explains the future and past of, uh, everything that matters, and gives good, solid, practical reasons for why contributing to free and open source software projects is something worth dedicating a large chunk of your time to.
Assaf Arkin: “There’s also some back-end processing going on, and I think that part is using DRb for now. But maybe the next update it will switch over to RMI or UNIX pipes or whatever. I don’t much care because the library does the talking, and besides, it’s only distributed in the sense that we have two pieces of code running with different PIDs. Not particularly important what’s happening on the wire, as long as it’s fast.”
Bill de hÓra knocks one out of the park: “I think sometimes that the problem people have with REST is that it’s so well-defined; it’s not witchcraft, it’s not a cargo cult. You can’t argue with it on a relativistic basis or apply clever rhetoric or continuously redefine what it means. An architectural style isn’t ‘good’ or ‘bad’ – you have to decide if it’s the right fit for your problem space and if not, you have to come up with a more appropriate one.”
Adam Wiggins on Sinatra’s blasphemous approach to controllers and routing. AKA: the thing that makes Sinatra my web layer of choice (well, that and throw :halt).
Still too much work but it’s nice to see some support for conditional GET making its way into the framework.
Jonas Arnfred: “This theme is a sleek and simple minimalist design for wordpress made to bring the content forward, and everything else out of view. The theme is designed with a focus on typography and effective whitespace …”
“You can specify CSS based on viewport orientation which you determine via javascript and update the orient attribute of the body element. Target the browser with body[orient=‘landscape’] or body[orient=‘portrait’]”
I threw this together a few weeks ago and now I'm not sure how I lived without it now. I know you people have cool bash/git hacks sitting in your ~/.bashrc — hand them over.
Very nice and functional JavaScript based timeplot library. Looks good, shows data-points on mouse over, approachable API. Good stuff.
This is why I have a really weird fetish for graphs. It’s not the colors and shapes, it’s the fact that any data has an infinite set of potential visualizations and some are vastly better than others, depending on your needs.
joshua schachter on Rabble/Kellan’s “Beyond REST?” presentation, with an interestingly simple HTTP-based callback system.
Great look at varnish and concerns around putting a front-end reverse proxy cache in place.
Sam Ruby on how DVCS + mailing list has removed the need for bug tracking systems on some projects. I'm feeling a similar pull in my own work.
A minimalist’s WordPress theme. Focus on typography and simple markup. Various configuration options and a print stylesheet.
Christian Neukirchen announces Bacon, a ground up reimplementation of test/spec + test/unit. (EDIT: this is not test/spec as I had previously reported. Sorry.)
Not sure how I've never stumbled on this before. You can remove items from the list to cause require to reload a file.
“Jim Meyer, manager of LED says that Rails scales like any other web application: ‘That is to say you need to take into account all the components from the moment the request is received at the load balancer all the way down and all the way back again.’”
Hilarious! What Mark doesn’t know is that much of my “minimalist redesign” was ripped directly from what he’s had in place for 2-3 years; “administrative debris” was just a convenient alibi.
Agreed. I've been a lurker for going on a year now. Solid mailing list.
Yossi Kreinin: “But I miss virtual functions. I really do. I sincerely think that each and every notable feature C++ adds to C makes the language worse, with the single exception of virtual functions.”
Good idea. Solve the “concurrency problem” for dynamic/scripting languages and the “language syntax problem” for Erlang, without sacrificing the benefits of either. Someone needs to keep an eye on this.
There’s way more new stuff in here than I thought. 20%-30% of ActiveSupport’s core extensions, Enumerator support everywhere, Object#instance_exec, byte vs. char stuff, documentation, and more…
If you move the slides quickly, it feels a bit like playing Desktop Tower Defense.
Sometimes! Or, fork(2) is a very fast operation on legitimate operating systems. I didn’t realize it could be as fast as spawning a thread, though.
“… the fact that [Twitter has] a nifty error page is a bonus really.”
cschneid has been helping me get the collection of hacks I've come to call a weblog into shape for some kind of release. He’s also been writing a lot of great Sinatra tips and tricks here. Check it out.
Interesting. I've been using the jquery-1.2.3.js hosted on google code for a few months now. Maybe I should have read the TOS…
This is the template used to generate the HAML RDoc. It’s a massive improvement over the default template shipped with rdoc. I can almost stomach rdoc with this — almost.
Support for HTML4/HTML5 output, more control over whitespace, option for implicit HTML encoding, and now faster than ERB.
Interesting thread wherein Linus describes the need for various types of Git workflows for leaf developers vs. maintainers. Lot’s of talk about the pros and cons of rebasing in different situations.
An implementation of Markdown in portable ANSI C that’s roughly 28.5x faster than the canonical Perl implementation on a 179K test file. Looks like a complete implementation; includes smarty and footnote extensions.
Aristotle Pagaltzis: “Not exactly as fast [as SBCS strlen], but if you write it in asm, it only takes one extra instruction to count characters in UTF-8 vs those in an 8-bit encoding, per character.”
Nice ApacheCon EU ‘08 presentation (warning: video + slides, no transcript) covering various blue sky stuff on Roy’s brain for Apache and HTTP.
And I was just starting to get used to the Minefield icon… I've been running the nightlies for about three months now and FF2 is really feeling a bit like legacy software.
Ola Bini on def vs. define_method vs. eval for defining methods in Ruby. There really ought to be a simple way of getting stuff like this from blogs and into the standard Ruby doc.
Boo! Horrible name collision imminent. Is REST really that unknown or do they just not care?
What Mark Pilgrim has been working on at Google for the past year or so: an encyclopedia of web development.
Oliver Steele details his (and others’s) Git workflow with a bunch of illustrative graphs, emphasizing one of my favorite aspects of Git: There’s More Than One Way To Do It.
“… in every one of these processes and diagrams there is a box which basically says ‘write the code’, and ought to be subtitled ‘(and here a miracle occurs)’.”
“I still haven’t found anyone who knows how you implement Scaling in a language, so I guess that LRM will never have it… Anyone who care to enlighten me, please send me a detailed email with an implementation of Scaling.”
Ethan Vizitei with a great piece on people’s misconceptions about what coders do and the difficulty with which they do it.
Ethan Vizitei on the difference in productivity found in the middle of the night vs. any other time of day. Nails it, IMO.
Now this is the kind of direction I hope to see GitHub and Gitorious go in the future.
Erik Engbrecht: “Java took cheap Unix processes and made them expensive. To compensate, it provided primitives for multithreading.”
Stephen O'Grady with the obligatory Q&A, which is excellent as always.
Ian Bicking: “Many people are excited about how far up you might be able to scale something based on App Engine, but I’m excited about how far it could be scaled down.”
A nice solution to “The Tangled Working Copy Problem” for VCS’s that don’t allow you to pluck out portions of a working copy to commit. Allows editing the diff that’s about to be committed.
I've since went to sleep and reawakened. I'm typically fairly curmudgeony when I wake up but I'm still having the same reaction.
I can’t say whether this is an accurate description of hg but he nails a lot of the things that makes git interesting, IMO.