Expand your mind. No really, I dare you.
A great introduction to reverse engineering Win32 applications, including a tutorial on hacking the built in Mine Sweeper game.
A great A List Apart article on the often misunderstood topic of Javascript member binding. Javascript is one of those powerful languages that is treated like a Basic-ish Java. It’s not. It’s more like a Perl-ish Lisp.
There are only two kinds of programming languages: those people always bitch about and those nobody uses. –Bjarne Stroustrup
What’s the best thing about your favorite operating / windowing system? What’s the best thing about your least favorite system? I was thinking about it this morning, considering the most inspirational design in each of the systems I’ve used. While not every vendor finds that balance of excellence, releasing a functional system is itself a difficult problem.
- Windows XP/Vista: I love how the login/desktop locking system works. It supports multiple users properly, making switching between them trivial.
- Gnu/Linux + xorg + Gnome: multiple desktops + Compiz. It’s a developer’s dream, like a desk the size of a large room. Enough room for a dozen editor windows, without having to navigate a mess of windows or tabs.
- Apple’s OSX: It’s a brilliant looking desktop, with the best font rendering, colour and monitor management (nailing multiple monitor support). It does other things well, but I’m always impressed with its affinity to photo/video/music productivity.
- *nix: I love how the unix philosophy wreaks of pragmatism. It’s simple, decoupled, and completely bent toward scaled production uses.
- Nintendo’s Wii/DS/etc.: In a word, casual. Simple, predictable, and fun to the bone.
So what do you love about the systems you’ve used?
A good example of storyboarding as used in movie production, using a Coen Brother’s flick as an example. Storyboarding applies to user interface design too, beating out notations like UML in terms of utility.
Subversion 1.5 was released this week. Added in this release: less suck!
PHP + Firebug == FirePHP. A simple API for logging to the Firebug console directly from PHP. Sound like fun?
In mathematics you don’t understand things. You just get used to them. – J. von Neumann
Here’s a scriptlet for displaying Google reader articles on your blog. It’s an excellent example of how to craft a small chunk of Javascript: it’s cleanly encapsulated object and unobtrusive. The only thing that could improve it would be a dash of Prototype | jQuery | Moo | Dojo.
Want to hone your mad C coding skills? Try your hand at the Underhanded C Contest. It poses two challenges: to solve a semi-interesting programming problem, while hiding something devious in the resulting code. Sound fun?
The New York Times reports that Palm plans to sell 2 million Centros in 2008. That’s 1/5th the number of projected iPhone sales (and 1/10th of the analyst’s expectations of 20+ million by 2009). I smell a spanking in the works.
A longish, interesting writeup of a Steve Yegge presentation on server-side Javascript. It’s called Rhino, and is hosted in the JVM (which I don’t think is as bad as it sounds). Yegge comments on the stigmas around the JVM and Javascript itself. He asks the crowd about Javascript:
Who here thinks JavaScript is kind of icky? Come on, come on, be honest. Yeah, there we go, a couple of people. Yeah.
And then jokes about Java:
You need to write unit tests, and unfortunately in Java it’s very painful. I’m speaking into the mic now, so that everybody can hear. Unit testing in Java is painful!
What I like most about the talk is that he’s an open thinker about languages in general, and is willing to look at their respective strengths and weaknesses. It’s a mindset I can respect, where merit is based on good sense.
The story of the passive-aggressive programmer. It’s funny because it’s true.
I agree with the 37Signal way of mocking up web stuff, using HTML/CSS straight-up. It’s fast, it pushes you to know your tools better, and produces layouts that can actually be solved in the medium. There is still a place for Photoshop/Gimp/Illustrator/Inkscape, however, as you still need to explore the look and feel, textures, colours, and shapes.
For my own sites, I use Inkscape sketch out new ideas. It covers most of what a web designer needs, and is freely available. Today’s 10 minutes of mock-up produced a very blue, boxy alternative layout for my blog. I limit myself to 10-20 minutes of sketching, then I put it away for a few days/weeks and look at it compared to other sketches made over the year. When I find something I like, I move on to slice it into a theme.
Today’s sketch:
- Inspired by Eric Wendelin’s excellent blog. I’m thinking of a 1-column version, with the sidebar in the footer, with subtler colours (I’m not sure I can pull off his excellent bright colours).
- Background is 2 layers, one as a background colour, the second as a diagonal texture (pattern-fill, rotated + sized, at 10% opacity)
- The body is another 2 layers, one as the shadow for the second (a 2% layer blur, reduced color level)
- The header is in two parts, one for the text/menu, the second will be some sort of art (hopefully classy vectors, or a high contrast photo)
- The date callouts are a simple box combined with itself rotated (with a second layer for the shadow)
- I’m not sure about the blue, and textured charcoal is a good possibility. The blue was the first colour I picked from my current Inkscape palette (Khaki).
A good summary of new CSS support in Firefox 3, including new colour-space keywords, block rendering modes, new constants for the min-width/height directives, and more.
You think it’s a conspiracy by the networks to put bad shows on TV. But the shows are bad because that’s what people want. It’s not like Windows users don’t have any power. I think they are happy with Windows, and that’s an incredibly depressing thought. – Steve Jobs on “suck”
A Python introduction for Javascript programmers. One of the clearer Python overviews I’ve seen.
Andy Wingo asks the question no one wants to ask: is Gnome development past the point of useful returns? It’s a poignant question too, as so much care and attention is poured into these huge projects. Where are desktop systems going next? Should Gnome be looking further ahead?
I’ve come up with a simple rule-of-thumb for cropping group pictures: Center heads horizontally, so that the left and rightmost people are the same distance from the edges of the shot. Don’t worry about torsos and legs, focus on the heads. Vertically, aim for the rule of thirds.
Imagine that you’ve got a disease that strikes one in a million people, and a test for the disease that’s 99% accurate. You administer the test to a million people, and it will be positive for around 10,000 of them – because for every hundred people, it will be wrong once (that’s what 99% accurate means). Yet, statistically, we know that there’s only one infected person in the entire sample. That means that your “99% accurate” test is wrong 9,999 times out of 10,000! – Cory Doctorow
From your 286 subscriptions, over the last 30 days you read 7,074 items, starred 4 items, and shared 2 items.
I ran into a well-known, but odd IE6 caching bug this week. If caching is turned off for IE6 browsers, modifying DOM elements triggers the browser to reload any resources referenced by the changed elements. So if a script changes the class name of 5 elements and the CSS classes have a background image property, then the background image will be reloaded once for each DOM update. This sucks the performance out of a web application.
There are several work arounds, but the best I’ve found is a simple IE6 Javascipt toggle that turns off the behaviour.
The best Markdown editor plugin ever. Includes live preview, smart editing, and a smack of other brilliant features.
Slides from php|tek 2008, including uber-geek Jay & Silent Bob references.
Wikipedia has a great summary of the Javascript/ECMA language. It beats the pants off of the average ad-laden Javascript site, as it’s easy to read and covers a useful subset of the language.
The city’s central computer told you? R2D2, you know better than to trust a strange computer! – C-3PO
Google launches a web reference/encyclopedia called Doctype, under an open license, with collaborative editing. The site includes, for example, compatibility charts for popular browsers for every point of reference, and a good selection of HOWTO articles.
A good overview of contextual user interfaces, including several examples.
I’ve been meaning to write out my philosophy of software development for a while now. Over the years I’ve watched developers struggle to find solid ground when stuck in design, development, and debugging. They get stuck in what they believe about problems, and the related knowledge that would help them. And when they don’t believe that something can be solved, they make make it harder to find the paths that would get them there.
So if you find yourself swearing at your compiler, computer, or sacrificing chickens to solve difficult problems, then you’re missing a fundamental part of the reality of software: problems are simple once you believe that they are, and once you learn approach them objectively.
The laws (simplified for the impatient)
You (and I) suck. Plan for it. Expect it. Get over it.
It’s a humility thing. Be open to the possibilities, including you’re own fallibility.
The laws (extended mix)
- Every problem can be solved, and most are solved already. Solid ground exists, it can be found, it has been found, and it’s usually easy to find. If you don’t believe that a difficult problem can be solved, then you’re missing something. Step back and look for possibilities, and test each theory carefully.
- There aren’t just possibilities, there are many great possibilities. If you can’t see more than one way to approach a problem, then you’re not looking hard enough. If you can’t see any possibilities, then you need to know that you are wrong. There are always possibilities.
- Software and hardware are deterministic. Have you found a problem that appears to be intermittent or flaky? Relax, you just haven’t discovered the cause or understood the underlying mechanism yet. Focus your tests, and look for a simple, plausible explanation: it’s there. If you think you’ve found something non-deterministic, then expect that you’re wrong and keep looking for answers.
- It’s your fault, until it isn’t. Have you found a compiler bug, a CPU flaw, or a library issue? You’re probably wrong. It’s not that it doesn’t happen, it just doesn’t happen very often. Be absolutely certain before you’re willing to believe that it’s not your fault. It’s much more likely to misunderstand syntax, usage, side-effects, and such, than it is for well-vetted tools to be broken. If you can’t prove it, then you don’t understand it well enough.
- Study history, as it’s almost always smarter than you are. There’s a whole universe of thinking that exists outside of your head. Until you realize this, you’re going to bang your head needlessly. Don’t be stupid: look around you, and know that many people are intelligent. If you believe that everyone is an idiot, then you really only know yourself.
- Your intuition isn’t as good as you think it is. Or as a friend says, “Always, always measure, ” and “Do the arithmetic.” Even when you’re sure that something is true, it’s doesn’t mean anything until it’s proven. Test it. Measure it. And make sure you’re looking at it in isolation of other changes. If you fix it by chance, then you’ve lost a critical piece of learning. Go back and figure out what the underlying truth was, or it will bite you again and again.
- Your code isn’t as good as you think it is. No, really, it isn’t. Neither is mine. And that’s just the way it is. Learn to accept your flaws, and the experiences of others. And if you think you’re the best developer on your team, you’re wrong. The best developer is the one who realizes that they’re not the best.
- Leave yourself a trail. When you hit a particularly sticky problem, write down the possibilities and record your progress. If you try to do it all in your head, you’ll get lost. And sometimes the act of writing it down (or talking it out) will uncover the path, or at least uncover new possibilities. But mostly, writing it down will save you from wandering around in circles.
- RTFM. No really, read it. If you can’t solve a problem, and you haven’t read THE FUCKING MANUAL, then you don’t deserve to solve the problem in the first place. Newsgroups, forums, and wikis can help too. And if you’re stuck and not thinking, testing or reading, then you’ll stay stuck. And as likely as you’re wrong about something, TFM can be wrong too, so test what you learn carefully.
- And finally, Just f@ck!ng do it. Are you stuck in development because there’s something you don’t understand? You need to attack the problem and get it over with. There’s only so much to learn about any given problem, and it doesn’t happen any faster when you avoid it. Take small steps. Measure, test, learn, ask questions. You’ll find the solution more quickly when you stop wasting time throwing chairs.
Remember, if you don’t come to understand why things work the way the do (and how things often break), then you will run into the same problems over and over again. It’s always worth the time to figure out the fundamental truths in what we do: it will save time and prevent future pain.
A much better set of rewrite rules for CodeIgniter apps than the ones suggested by their docs. Use these rules, not the ones in the official docs, as these rules specifically exclude access to the library’s naughty bits, and more sensibly enable access resource-type files.
After working with CodeIgniter for a few months (and WordPress for a few years), I’ve settled on a way to set up web projects that works well for development, deployment, and source control. The layout only works on systems like Mac and Linux that have useful symlinks, though.
First, the folder layout
some-domain.com/
app/
public/
.htaccess -> ../site-extras/.htaccess
favicon.ico -> ../site-extras/favicon.ico
js/ -> ../site-extras/js
images/ -> ../site-extras/images
system/
application/ -> ../../app/
site-extras/
js/
images/
.htaccess
The layout favours a vhost setup, and splits your code and resources out of the CodeIgniter sources. Splitting your stuff from the CodeIgniter stuff lets you link your Subversion repository to theirs, so that you can keep it in sync with their development.
How it’s done
- Set up your source tree (not including the symlinks or CodeIgniter source) and add to your Subversion repo.
- Add a
svnlink to CodeIgniter’s repo (viasvn propedit svn:externals, withpublic http://dev.ellislab.com/svn/CodeIgniter/tags/v1.6.2/) and run asvn updateto grab the framework. See the Subversion docs for details. - Copy the CI
applicationfolder to the site root (asapp), remove the.svnfolders, symlink toapplication, and add it to your svn repo. - Symlink the other site-extras to the
publicwebserver root, and configure your local machine (and public webserver) to point to this root for the domain’s virtual host setup. - Alternatively, you can modify the
$application_pathto point to../public/app/(I’m not sure which is better yet). See the CodeIgniter docs on apps for more details.
You now have a CodeIgnitor project ready for development. You can keep up-to-date with CodeIgniter updates, deploy easily, and get at your code without wading through extra levels of hierarchy.
A mildly entertaining JoelOnSoftware forum discussion on Logon versus Login. Which do you prefer?
Google releases a much better RSS reader for the iPhone. I’ve been waiting for a rich RSS client for my iPod Touch, but this may just be good enough.
Jeff Atwood on ‘XML: The Angle Bracket Tax‘ (via Yangman).
Hack of the week: compressing javascripts into PNGs and back again. Horribly excellent, isn’t it?
The Joyant blog talks about where they fall short. The funny thing is, when I first tried to read the article, it was Slashdotted. A funny/sad thing to happen to a cloud-computing company’s blog.
Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter. –Eric Raymond
A simple web based tool for designing fonts (Flash-based).
A pure Javascript HTML parser, by the author of jQuerry.
A few good tips on writing daemons in Python, including a Python example of the double-fork console detachment method.
A set of slides from a Flickr talk at Web 2.0 Expo called ‘Capacity planning for web operations‘.
WordPress’s tagging feature is good, but it lacks mass-editing. Healthy taxonomies need regular maintenance too, so I went hunting through tag plugins compatible with 2.5.1. I found Simple-tags, which is proving handy for nudging around the tags on my 2,000 or so posts.
Useful features:
- Bulk tag delete and rename, including tags listed by popularity
- Tag grouping, which allows you to add a tag that encompasses other tags
- Auto-tagging, on post-save or en-mass
While it takes some time to clean up a tag space, it’s at least possible now.
An OmniGraffle stencil for mocking up iPhone applications.
There’s an old story about the person who wished his computer were as easy to use as his telephone. That wish has come true, since I no longer know how to use my telephone. –Bjarne Stroustrup
According to Jeff Atwood, programmers don’t read anymore. And in my small slice of the universe he’s mostly right, a problem of motivation, time, and a lack of good reading materials.
So what’s a developer to do? How about you spend a few hours reading this week. Here are a few recommendations:
- A paper on Causality and probability theory (Postscript)
- A Kerneltrap post on the C semantics of constants and pointers (good comments too)
- A free Addison Wesley book on C++ Gotchas
- A manuscript on Linkers and Loaders
- A large collection of demos and essays on how to think in terms of extensible CSS
- Linus comparing the organization of the Linux Kernel to the evolution of the universe
- Dijkstra answers questions from students about software engineering
- A paper on coroutines in C
- A manuscript for an upcoming book on algorithms (PDF)
- A paper entitled ‘Software Is Hard‘
There’s no excuse for a professional who doesn’t read: understanding needs to be fostered and is always incomplete. And excellence is fueled by obsessively feeding, exercising, and applying the mind. So what are you reading this week?
There’s a Del.icio.us plugin for Firefox3 now that does synchronization, bookmarking, and other delicious stuff.
Yahoo has a web UI design patterns library, giving names (and examples) to do dozens of usable things.
A taxonomy of programmers describes what various levels of programmers are capable of. The paper was written with procedural programming in mind, but most of it is relevant to newer languages.
Praising companies for providing APIs to get your own data out is like praising auto companies for not filling your airbags with gravel. I’m not saying data export isn’t important, it’s just aiming kinda low. You mean when I give you data, you’ll give it back to me? People who think this is the pinnacle of freedom aren’t really worth listening to. –DiveIntoMark
Boost’s Filesystem library is an incredible library: it abstracts paths, directories, and stat results. It simplifies coding shell problems in C++, it’s portable, and is maintained by a large community of contributors. The one downside of Boost is that some of its newer libraries are poorly documented. Until I have time to get involved in the Boost project, I’m going to post examples here.
Traversing a directory tree
This is the coolest feature I’ve found in boost::filesystem so far. It treats directory elements like iterators, and has a convenience iterator that flattens the problem of iterating through a directory tree recursively. The only examples I found for it were in their extensive test sources, which are a bit light on comments.
#include "boost/filesystem.hpp"
#include <iostream>
for ( boost::filesystem::recursive_directory_iterator end, dir("./");
dir != end; ++dir ) {
cout << *dir << std::endl;
}
The example starts in the current working directory, and prints all of the file names (and directories) in inode order.
Notes:
- I don’t alias the namespace here (but I recommend doing so in production code, see below)
- Creating an instance of
recursive_directory_iteratorsets it to the.end()element by default. - The
pathtype supports all standard string paths, including relative paths.
Aliasing Boost namespaces
Here’s how Boost’s own source recommends aliasing their namespaces:
namespace fs = boost::filesystem;
namespace sys = boost::system;
Other cool bits
I’ll write more about these later, but for now here are a few things you’ll find in the library:
fs::exists( boost_root / "libs" ), a static function to check if a file exists (-e)fs::current_path()that returns the application’scwdfs::create_directories( "xx/yy/zz" )is equivalent tomkdir -p xx/yy/zzfs::is_directory( "xx" )is the same as Perl/*sh’s-dfs::change_extension("a.txt", ".tex")does the obviousfs::extension("a/b.txt") == "txt"is used to check file extensionsfs::remove_all( "x/" );deletes everything in"x/"ifstream file2( arg_path / "foo" / "bar" );shows the overloaded/operator!
Things that are great about boost::filesystem’s approach:
- Static functions are used for ‘helper’ stuff. Take note C++ devs: this is a great balance for types, it keeps the types noise-free while still providing a great deal of utility.
- It mirrors Perl/*sh functionality, something most developers should know well.
- It throws errors (
filesystem_error), allowing for some really clean, transactional code. - And, it abstracts paths that work on Win32, OSX, Unix, and Linux variants.
JSDocToolkit is a tool like Doxygen for Javascript.
Ten reasons SimpleDB is over-hyped. I’ve been arguing some of the same points myself: losing the expressiveness of SQL (especially for aggregates) and the ease of developing with SQL is a huge factor to consider.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. –Martin Golding
Some random Sunday fun: a live Pong game where you can enable/disable the lines of code driving it. Fun for at least a few minutes.
An introduction to the Boost filesystem library, from the IBM developerworks archive.
I’m working on a new game based on an idea I had a few years ago. It’s a wiki-ized interactive fiction game engine, letting authors focus on writing and players on playing. I’ll be writing about the game over the next year or so, as I hack away at it in my spare time.
There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. –C.A.R. Hoare
A great Michael Pollan talk at Google, where he questions nutrition in the hacker way: boiling nutrition down to simple rules based on fact. The root philosophy?
Eat food. Not too much. Mostly plants. –Unhappy Meals, NYT
His thesis is bigger than that, though, and his method of deconstructing what we believe about nutrition is interesting. Really, why do we believe what we hear about nutrition when it clearly isn’t working?
A great HOWTO on hacking your camera. The coolest thing is that there are alternative operating systems for many common SLR digital cameras.
Here’s an interesting NYT feature on burnout, which suggests that burnout is a problem with self-efficacy, a lack of social support, and an increasingly chaotic environment. One of the most interesting studies found that interruptions are as destructive as drug use to IQ:
The uninterrupted group did better by an average of ten points, which wasn’t much of a surprise. What was a surprise is that the e-mailers also did worse, by an average of six points, than a group in a similar study that had been tested while stoned.
One of the effects of lowered IQ is that we get less done. When we accomplish less, we’re frustrated because we wanted to do more. And that frustration is one of the big factors in our burnout.
When you create software, you are creating a model universe — a toy reality. If a toy reality fits, a toy language can fit. – Chris Crawford’s Nine Breakthroughs
A most-excellent calendar in CSS, based on a OL.
So I asked myself the question, “What platforms does Boost::Filesystem” support?” It took me a few minutes to find the answer, but when I did I was in awe. They test and document portability automatically!
I like an escalator because an escalator can never break, it can only become stairs. There would never be an escalator temporarily out of order sign, only an escalator temporarily stairs. Sorry for the convenience. –Mitch Hedberg
A very complete introduction to Git, tailored for Subversion users.
I’ve had several hours to play with Inkscape 0.46 since it was released, and despite the minor version increment, a lot has changed.
New features
- A “fill” tool, making it trivial to turn bitmaps into vectors quickly
- 3d drawing shapes (including perspective)
- A tweaking tool, making it easy to nudge/blur/soften shapes
- Several new effects (including path effects)
- Many performance improvements, including huge improvements in blur speeds
- Better gradient tools
- Dockable tool windows (nicely done too)
I’m especially excited about the “fill” tool, as it simplifies tracing scanned sketches and logo bitmaps. The tool creates vectors using a flood-fill algorithm, based on the zoom level and configurable limits (fill method, threshold, gap-closing, etc.). In my tests so far, I’ve been able to turn pencil sketches into vectors quickly, as well as scans of real-world-objects.
Someone asked me today what my favorite tech blog was. I had to think about it a bit, but I eventually decided that HackThePlanet is hands-down the best thing since sliced silicon. I’ve been reading it since 2000, and I still enjoy every post. It’s a hardcore tech geek blog that’s avoided whoring itself, posting hardcore nerd things semi-regularly. Kudos.
Skill without imagination is craftsmanship and gives us many useful objects such as wickerwork picnic baskets. Imagination without skill gives us modern art. – Tom Stoppard, Artist Descending A Staircase
The Multi-core STL is an implementation of the STL for multi-core purposes.
I found two new natural-language markup tools after noticing that RestructuredText hadn’t been updated for 2 years.
The first is PanDoc, a multi-format natural-format converter. It converts to and from Markdown, Wikitext, ReST, LATeX, HTML, groff, man, RTF, and more. It’s only downside is that it’s written in Haskell, which is only a problem if you need to run it on Windows.
The second is Texy, a PHP-based tool with a syntax that distills Wikitext, Markdown, and ReST concepts into one very complete format. It even supports formatting hints and citations for most XHML tags, in a format that surprisingly intuitive.
There’s a daemon available for the Apple infrared hardware built in to most newer Macs, and an example showing how to control keynote. Source code is included, for the curious.
Apparently Zenburn is one of the most popular editor colour schemes out there. It’s pretty good for a light-on-dark theme too.
Remember a long time ago, at the dinner table, when your kid brother mashed together a bunch of food that really should not have been mashed together – chicken, jello, gravy, condiments, corn, milk, peas, pudding, all that stuff – and proceeded to eat it? –Ryan Tomayko, The Thing About Git
A thorough introduction to the craft of text adventures. In good old ASCII too.
Douglas Crockford has a great set of Javascript resources on his site. Some good background reading for anyone learning Javascript.
The computer can’t tell you the emotional story. It can give you the exact mathematical design, but what’s missing is the eyebrows. – Frank Zappa
An implementation of LSA in Python. Latent Semantic Analysis does closeness comparisons in textual sources to find similarities.
Google has released Gold, a replacement linker for the gcc tool chain. Gold boasts up to 5x faster link times over ld.
A completely horribly hacky hack for namespaces in Javascript. Not that hacks (or horribly hacky hacks are bad).
A simple logic implemented entirely in HTML … no Javascript, no Flash, etc. It’s a a good example of FSM, and a great tangent hack.
If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor, and when was the last time you needed one? –Tom Cargill, C++ Journal
Random wiki page of the week: Sakichi Toyoda’s 5 Whys, a simple method of solving problems by looking for the root cause.
The popular blogging tool Textpattern was forked as xPattern earlier this year. I hosted WarpedVisions using Textpattern for about a year, but found that WordPress’s development was much more active. Here’s hoping that xPattern kicks some life back into that capable platform.
A complete guide to optimising websites for speed, rolling up dozens of tips I already knew (and a few I didn’t). The site’s footnotes are cool too (side notes?).
The most interesting tip, “don’t use document.write“, was news to me. I’ll have to test this to see if it’s doing what the author suggests. Also, combining files into libraries is something I’ve planned on doing for a while, and calling them “libraries” is probably the clearest way to think about them: a link phase in site deployment makes a lot of sense.
A good overview of Flickr’s setup. Nearly all of the techniques used by Flickr can be applied directly to Amazon’s cloud EC2/S3 services with faster scaling, at a lower initial cost.
Real World: A bizarre dimension in which the standard dress is shirt and tie and in which a person’s working hours are defined as 9 to 5. In conversation, talking of someone who has entered the Real World is not unlike speaking of a deceased person. –Jargon File
In case you’re curious, the upgrade to WordPress 2.5 is trivial:
- Upgrade source:
svn sw http://svn.automattic.com/wordpress/tags/2.5/
- Run upgrade DB script (just visit your site).
That’s it.
FWIW, the new admin panel is slick, a lot like the Tumblr dashboard. The navigation is sensibly split into regular tasks and lesser-used administration tasks, and the colours/shapes/widget placements are much easier on the eyes. Well done!
An enterprise’s most vital assets lie in its design and other creative capabilities. —Samsung chairman Kun-Hee Lee, 2006
Chryp is a GPL3′d, Tumblr-like blogging engine written in Php. It’s used by such sites as Cameron I/O, hinting that it’s at least marginally capable.
A site of training materials for icon designers (via Cameron I/O).
Are standards really that difficult? Webkit hits Acid3 in their nightly builds.
Gamasutra demystifies Mario Galaxy’s physics model. A link to working source code is included, for those interested in one approach to implementing it.
It looks like WordPress 2.5 is out today, and despite the crappy release notes, it looks like an interesting release. In this release: a new admin panel, built-in gallery, better upload tools, avatars, improved sidebars, improved security, and API cleanup. And, they’ve added “shortcode” to the base engine, a replacement for my SimpleLinks syntax.
It’s difficult to pick a development stack on Windows. Is Windows development falling into the minority?
For what it’s worth, I prefer C++/QT/Boost/STL on Windows, despite the cost and complexity. C# was disappointing, based on having to deploy the runtime with the application (and lack of portability). Python + QT sound enticing, but really I’m looking forward to Webkit/PHP/Apache.
A good analysis and overview of types of cookware. The article dispels myths around coated bottoms, including engineering-geek data.
The people you choose to work with are the most accurate predictor of job satisfaction I’ve ever found –Jeff Atwood
The ACCENT compiler compiler has fewer grammar expression restrictions than standard generators, and supports EBNF.
A simple benchmark of CodeIgnitor versus CakePhp (and Symfony). While the timings describe a trivial amount of code, they show the basic cost of loading the frameworks.
I like Joel Spolesky. He’s a great writer, and he’s got a good head for managing software. But he is blind to Microsoft’s insanity, taking the agnostic-zealot position. I can forgive him, though, as he writes passionately and is willing to question the other zealots.
What Joel and the other flamers have missed is that standards conformance is easy, if you can pull your head out of your ass long enough to realize that it’s already solved. If Microsoft could place nicely, they would be able to cooperate and join the Webkit fray. The world would be a better place.
Apple, Nintendo, and others have figured it out. Why build your own browser? Why not just pitch in to an existing effort, or license something? Standards are easier if you don’t insist on building it yourself.
Standards are easy. It’s NIH that is difficult.

RSS![No comments [Comment]](/images/comment.png)
![[>>]](/wp-content/themes/warped/images/next.png)
