I’m a big fan of dishes that are easy and fast. One night I was at the store, saw some catfish and decided to buy mysef a fillet. When I got it home I had to find some way to make it interesting with my limited spices. The result has a flavor that very much resembles the physical texture you want to shoot for: lightly seared on the outside that, once breached, reveals a nice soft middle. This will take less than 10 minutes to prepare and cook.
Near East makes a sun-dried tomato and rice box that, like everything of theirs, is trivial to make and goes well with this*. We had it with a nice red wine this time but, in retrospect, the flavor is a bit too powerful for wine. Knudsen’s spritzers worked well but I think that the perfect drink for this would be mango juice, although you might want to swap the sun-dried tomato rice with a simpler rice-pilaf if you went that way. If you live near an Indian restaurant you may want to snag some Mango Lassis because this’ll be a little hot. But, neither Miller, nor I, are fans of hot foods and we both like this dish.
Ingredients:
You’ll want 1/2 – 3/4 of a fillet per person. Your pan should be medium high: hot enough to sear the outside of the fish but but not so hot that it won’t have time to cook all the way through.
Coat the bottom of the pan in a thin layer of olive oil, and when it’s hot throw it the whole fillets. Quickly grind on a healthy amount of black pepper (imagine you’re having sunny side up eggs and you reallllly like black pepper). Grind on the red pepper. Grind on more red pepper. Hmm, no I don’t think you understand. You see how much black pepper you put on? Yeah, you want about 125-150% of that amount. Throw on the oregano and quickly flip the filet. Don’t try and do it slow and gentle. Catfish gets really flaky as it cooks and once it starts to break apart it’ll just disintegrate. So, get your spatula under there, and lift and flip in one quick motion (but don’t slap it down, and watch out for hot oil spatter).
Coat the seconds side just like you did the first. Cover and let sit for a few minutes. Once the bottom has started to sear flip it, leave the cover off for a minute to let the moisture escape that had built up before, make sure it’s still got enough olive oil left, then cover for a few more minutes. Take the cover off and after a minute or so, turn off the heat. You want to be careful at this point because the fish will flake really easily.
What to expect: This will have a strong initial hit that will clear out your sinuses followed up with the gentle flavor of the fish. I think the peppers actually make the catfish flavor a seem lot milder than i remember from my childhood. The searing is really critical to pulling this dish off. If after that first spice side is flipped back it doesn’t have a nice red-gold sear going on turn it right back over. It’s a lot harder to redo it after the other side is done because it’ll fall apart easily.
Notes: Miller suggests dill instead of the oregano. I say experiment with almost any dried green leafy bits you have laying around. I’m going to try dried parsley next time. The oregano isn’t quite flavorful enough. I recommend starting to grind after it’s already in the pan so that the spices that miss the fish fall into the oil and thus get cooked into it as you go. I don’t cook this with lemon juice, or personally think that it adds much to the flavor when added afterwards but it doesn’t taste bad at all and pouring some on after does tend to calm down the heat if it’s a bit much for you.
*I have no idea how long the rice takes to cook. I just stuck it in my kick-ass rice-cooker and told it when I wanted it to finish. I can’t tell you how how awesome this rice-cooker is. Yes, I realize it’s “just a rice cooker” but it is really well made, wonderfully designed, and does a kick-ass job of making sure different rices, and rice and veggie combinations come out right, and compensating for when I put in too much water (easy to do when you’ve got moist veggies in there too).
Pretty much everyone agrees that Gravatar rocks. A global avatar that shows up wherever you make a comment on a blog (sometimes even in your desktop apps). And I don’t think anyone other than naive VC guys wants another “social networking” site, so I’m not going there. But, imagine what would happen if everytime you made a comment on a blog that used Gravatars a ping was sent off to the “Gravanetric” servers with two bits of information the hash of your e-mail and the root url of the site you posted too.
Then you could start to graph shared interests. Imagine a simple force-directed graph with the Gravatars of people who posted to them arrayed around a central site node, or vice-versa, or a graph of the sites with lines of different thickness between them to denote how much of their community is shared. Then you could look up a site you liked and see what other sites people thought were interesting enough to comment on, which would mean it more likely that you’d want to read, and maybe comment on, what’s at that site too. Or, you could enter in your e-mail address and it could show you other people like you, or maybe graph the network of sites you’ve visited. If you added in the ability for a person to associate an URL with their Gravatar then you could go find out more about the people similar to you.
Visualizing this would be trivial with something like JsViz. The only trick would be deciding how much to visualize. There’s really not a lot to the app itself either, although you’d have to plan for some pretty huge database tables.
Throw in an API for people to query x degrees of separation of sites, or people or anything else interesting and you’ve got a giant ball of coolness. The API could allow them to overlay it with links to the people who were signed up to their TrueLoveForever.com type site and you’ve got some interesting possibilities. Maybe make use of the API free for < 100 requests a day like Google, and other sites do, but charge if anyone wants to make some significant number of queries…. Plus you can always throw banner ads on the site. Heck, you might even make some money off of this.
Obviously this would be easiest for the Guys over at Automattic since they’ve already got the Gravatar infrastructure in place and know exactly what kind of load they’d need to handle before going into it.
Preface: I killed my previous post about why I wouldn’t buy LineForms or VectorDesigner. It was poorly written and after some serious re-evaluation I ended up buying LineForms.
—-
A weekend without net, and a desire to draw left me desperately trying to find a vector based drawing package that worked they way I wanted. I re-evaluated VectorDesigner, LineForm, and InkScape, and tried out Zeus Draw and Drawit Lite.
There was one criteria for serious reconsideration. Any app that could do it would be given a real chance: draw a line, with the tablet that gets fatter when I press harder and thinner when I let up. Freehand and Illustrator have both done this for years and years but I’m not considering them because I’m not willing to shell out $600+ dollars for a drawing app or put pirated software on my computer.
InkScape wold probably do everything I need and more, but on my Ubuntu Box it won’t recognize that there’s a tablet attached so you can’t enable the pressure sensitive support which is off by default. The X11 server on OS X doesn’t seem to pass it the info that there’s a tablet attached, so again, no pressure sensitive support. It’ll get a second chance once they have a truly native version for OS X.
VectorDesigner probably lost points in this re-eval. I find it more useless every time I try it.
Drawit Lite (almost the same thing as the pay version) only got a couple seconds of my time because it didn’t meet the single criteria and really didn’t look like it could handle the type of things I wanted to do with it.
ZeusDraw was a dark horse that did meet the criteria but it feels like a one trick pony. It draws great variable width lines, but editing the points is clunky at best and there’s no way to edit the width of the line. If you don’t get it right the first time you have to undo and try again. The palettes feel like quick first drafts and the $90 price tag hardly seems worth it. I think it’s a good first iteration of an app but it’s got a long way to go.
Lineform: I came back to this app at least three times, hoping I could find a way to make it meet my criteria. Finally I figured it out. The “Artistic” strokes you can apply to drawn lines typically just look like fancy special effects; the kind you use maybe once a month. But it turns out that if you use some of the simpler “Artistic” strokes you actually get something that looks very close to a stroke whose shape is purely based on the pressure applied on the tablet. In Lineform it’s changing the width of the “Artistic” shape based on pressure. There’s a way to alter the width of the stroke at various places along the line, and if you really want precise control you can convert it to an outline and edit the handles and points directly. Like I said though, it’s only 90%. If you want a line that starts thin and ends with a fat blob you’ll like a paint brush and tapers off to a point you’ll probably need to make a custom “Artistic” stroke. There are slots for these, but you have to read the forums to figure out how to use them. I think they decided to release it with that functionality a little rough around the edges instead of not including it, which was probably the right call. “Artistic” strokes give you some very nice possibilities once you learn how to use them as something other than a random effect. The “Watercolor” stroke, for example, does a really nice job of simulating how watercolor gets darker where strokes overlap. This isn’t a big deal in a pixel based app like Photoshop or Painter (nothing beats painter’s natural media emulation) but it’s quite impressive in a vector based app.
I’m still not totally thrilled with Lineform, but it gets me most of the way there, and is over $500 cheaper than Illustrator. I’ve still got some complaints. It’s still got some minor bugs, and it ate one of my drawings (frustrating to say the least). But, it’s easy to use, the interface is intuitive it allows for some really expressive illustrations. And it’s only $79 So that’s what I went with.
I’m reading through Squeak By Example because I’ve got some ideas rumbling around in my head that might be nice to do in Smalltalk. Having an integrated visual environment where everything is an object opens a lot of data visualization possibilities. Anyway, it has been probably two years since I’ve touched Smalltalk, and even then it was pretty brief. So I needed a refresher course.
I’ve been flipping through it looking for random bits of information I was interested in and found them all. Then, I went back and started from the beginning, following all the instructions, doing all the examples…. They’ve done a great job explaining things, it’s really easy to follow, and gives you an excellent step-by-step introduction to Squeak’s IDE, and that’s a very good thing if you’re not familiar with Smalltalk.
And then I hit section 1.10 and my jaw dropped. Test Driven Development…right there, at the start of things too. Many of my friends know how annoyed I am by the fact that books don’t teach about writing unit tests as part of the language. Most language books teach you how to program in some new language and then, if you’re lucky, at the end go “oh yeah, and you should write unit tests.” Which, I feel, results in a very similar attitude amongst the developers who use the language. Code code code, “oh yeah, unit tests are ‘good’ but, whatever…” code code code.
But, here I am (in a book from the land where unit tests were invented (sUnit)) and for the first time in my life I’m seeing unit tests being treated as first class citizens in a language. And they’ve already mentioned version control in passing.
Holy, fucking, shit.
So, 22 pages in (plus however many random pages I read while skipping around over the past couple days) and I have to say I am really impressed. Well written, easy to follow, good example graphics. It’s still pretty preliminary of course but… If you’re interested in learning Smalltalk I recommend checking out Squeak By Example. I’ll be grabbing the soft-cover version shortly but you can download the PDF version for free and check it out.
And, please, don’t be turned off by the cutesey iconography Squeak uses. A lot of the development that’s gone into Squeak has been to make it approachable and easy to use by children, but that doesn’t mean it isn’t still a powerful development platform. If you’re not convinced just check out DabbleDB. It’s written in Smalltalk with the very cool Seaside web framework.
P.S. Many have heard me say there’s no joy in Java, but there’s much joy to be found in Perl, Ruby, and Python. Well, there is in Smalltalk too. In all my Smalltalk excursions so far I’d say that Smalltalk is “nice”. I don’t know if I’ll personally come to find it joyous (I certainly don’t find Python joyous but I understand how others can), but it is, at the very least, nice. :)
Sometimes you just want to distribute the source code without its history, and that’s where git-archive comes in. git-archive will create an archive of the files at any point in the history and wrap them all up for you in a tar or zip (defaults to tar). You can even make an archive from a remote repo by using the `—remote=<repo>` option in the administrator has enabled it. You’ll typically use git-archive like this:
`git archive <tree-ish> > my_new_archive.tar`
And that will create an archive of everything in your repo. If you just want an archive of some specific files you can simply pass in the path(s) to the file(s) you want in the archive after your tree-ish. If you wanted to create a zip file instead of a tar you’d simply pass it the `—format=zip` option.
Many people wonder if there is a way to check out just the tip of the repo so that they don’t have to download the entire revision history. This is called a “shallow” clone and is possible by passing the `–depth <some_number>` but it hase a number of limitations: you can’t clone, or fetch from it and you can’t push from or into it, but it’s useful if you only want to look at, or near, the tip of a large project with a long revision history and would want to send in your fixes or features as patches.
[update] Corrected the bit about making “shallow” clones thanks to Jakub’s comment.
Many of us “power users”, especially web developers, have multiple computers on our desks. I have the mac, the linux box, and the windows box. There are good reasons for each, not the least of which is testing browser compatibility. But, Synergy is what makes it not only not-annoying, but freaking cool.
You see my single sweet Kinesis keyboard and funky ergo mouse (neither of which anyone else can successfully use) controls everything. It starts out on the Linux box (on my right, and as i move it left swings over onto the Mac laptop (in the middle, on a pedestal of cool geek books), and as it continues left ends up on the Windows box. The clipboard follows the mouse too (at least it does if you’ve copied text onto it), so I can copy an URL (or whatever) on Windows, mouse right and paste it on the Mac, mouse a little farther and paste it on the Linux box.
I’d happily pay $50 for this app, but it’s totally open source and free (although, I actually did just donate $50 to them). It’s trivial to install on windows and on mac and linux it only requires editing a simple configuration file.
Caveat emptor: if you’ve got heavy network traffic on one of the boxes it may slow down it’s ability to receive mouse and keyboard input from the master computer, similar problem for heavy CPU usage. Also holding down arrow keys when the information is being piped to computers other than the master isn’t the greatest. The keyboard, in that edge case, is talking to the main comp faster than it can send the commands over the network.
Bonus: when I take my mac laptop home at night (disconnecting from work network, obviously) I don’t have to do anything, and when I reconnect to the work network the next day, I still don’t have to do anything. It just automatically detects the main synergy box again and reconnects.
[update] Just a note that synergy doesn’t encrypt your keystrokes between computers but it’s easy to do with ssh and you shouldn’t be running it over untrusted networks anyway. I mean, all the computers are going to be on the same LAN and you’d rarely want to set this up for something you’re not going to be using day after day.
[update 2] Just discovered a particular coolness. If, my mac (in the middle) isn’t connected, the mouse will travel from the linux (right) to the windows (left) without issue even though my config files only talk about the windows monitor’s positioning relative to the mac’s. A very nice little touch guys.
As previously mentioned, I have Schrodinger’s Hermit-Crabs. I haven’t seen アイタ for weeks, but she’s too bad-ass to die on me. She’s the reason that Jack’s missing half of one of his feelers (top right in the comic).
Sivaram said: “I have been using CVS on and off for a long time; so using git is a bit confusing. If all the repo clones are equivalent, how does one know one is the ‘clean’ repo? On CVS, there is a centralised repo lying somewhere.I can’t seem to wrap my head around the decentralised model.”
This question trips up a lot of people when they’re introduced to the concept of distributed version control systems. But the answer is exactly the same as in the centralized world. It is wherever the project maintainers tell you it is. Let me give you an example:
If you were joining a new company or project that used SVN (or any centralized system) you’d come in and say “Hey, I’m new. Where’s the repo? ” and they’d respond, “We use SVN. The repo’s over there. Here’s the url.”
If you were joining a new company or project that used Git (or any other distributed system) you’d come in and say “Hey, I’m new. Where’s the repo?” and they’d respond, “We use Git. The repo’s over there. Here’s the url.”
See the difference? Neither do I. But in case you’re not convinced, consider the fact that at any point in time your sysadmin could move your SVN repo to another machine with a different URL. Everyone would change the URLs they connected to and that would be the end of it. The same thing applies in the distributed world.
Where your canonical repo lives, in any version control system, is nothing more than the place people happened to have agreed to keep it.
The only real difference is that in the distributed world you also have the option of pulling from non-cannonical repositories.
For a real world example we can look to Git itself. Where’s the main git repo? It’s where the Git homepage says it is. Compare this with Apache, which uses Subversion; their main repo is where their homepage says it is too. In both cases it might change tomorrow, but everyone would be really annoyed if it did so the people in charge are going to do their best to avoid it.
Sometimes people contributing to Git will send an e-mail to the list asking others to pull some feature from their personal repo (instead of just sending a patch). Some people pull, some people don’t. It really doesn’t matter. All that really matters is what changes get pushed to the main repo, just like in the centralized world.
Deciding what gets pushed to the main repo, or who gets to push to it is a project management decision that has very little, if anything, to do with what version control software you happen to use. Some systems enforce those business rules with software. Some don’t.
The flow chart on Sharing a public Git repo over HTTP came about because a friend asked me how to do it and I hadn’t gotten to writing that part of the Git book yet. It ended up a flow chart because I happen to like making them. Anyway, I’ve reached the point that all authors reach (with probably every book) where finishing the thing has become “work”. But, I love helping out other geeks, and I need to get this finished. So, if you’ve got Git questions, that you can’t easily figure out from the docs, please send them my way. It’ll give me incentive to write the remaining stuff or improve the existing. I’ll try and get an answer to you within a day. All I ask is that you give me feedback on whatever I respond with because it’s probably going to end up in the book. ;)
Just drop me an e-mail to masukomi @ masukomi.org