December 4, 2007

Well, I’m taking the plunge into hosting my own installation of WordPress. None of this “one-click” stuff for me. No sir. I wget’ed a tarball to my web host, config’d it to talk to my MySQL database (um… did that… once or twice), and now there’s an almost-exact replica of this blog at http://www.protocolostomy.com

This post, of course, is not replicated :)

Also, the theme I use here is not replicated, because I can’t find the darn thing!! S’ok, though. I’m having fun browsing through all of the themes out there for WordPress.

Why am I doing this? Well, in short, WordPress.com is unable to let me (or anyone else) have per-post widgets (to my knowledge – if this isn’t true please enlighten me!). For example, I’ve been wanting to use the AddThis button, or something like it, for a long time. The button makes it a lot cleaner for me to add social bookmarking links to each post (you can see the button on the new blog) – this is much cleaner than adding 50 href tags to my post manually every time I post (yes, that’s how WordPress.com users are getting around this limitation – by hand). In addition, I registered for an addthis.com account, so I can log in and see not only what articles eyeballs are landing on, but which ones they’re actually finding interesting enough to bookmark.

DISCLAIMER: I recently took a job with AddThis. However, it’s still true that I was looking for something like this long before I knew what AddThis was. Also, my working there doesn’t really buy me much. I’m using the same WordPress plugin as anyone else who hosts their own WordPress installation. I get the same stats and stuff… unless I find another interesting database query that’ll give me more, in which case it’ll be rolled into the product and made available, so I’ll *still* be running the same code as everyone else ;-)

November 13, 2007

During my last week on the job at GFDL, the manager there asked if I’d put together a presentation about Python, geared toward people who had been using Perl, or people who hadn’t done a lot of scripting at all. I said I’d do it so long as there weren’t any really advanced coders in the room who were going to fire advanced garbage collection or memory management questions at me or something.

The short story is that there was a computer scientist in the room who uses Python quite frequently, by choice. He uses Java and Perl as well, but often chooses Python because, he says, it’s the easiest way to get things done in a lot of cases.

Anyway, *he* said I did a good job, so if anyone else wants to check out the slides, it’s easy enough to do, because I used Google Docs to put it together. There aren’t any notes – the point of the slides is just to explain to the audience some of the things that are illustrated by the interactive session output, mostly. Enjoy!

Friday was my last day working as a contractor for the GFDL. I had friends there before I ever worked there, so I’m sad to be leaving them, but I’m happy to be moving on to a really exciting opportunity. I’m now an employee of AddThis.com.

I’ll be able to focus on architecture, and how to scale out an internet-based service, which is quite different from scaling an internal IT infrastructure, if only because the growth is exponentially faster. I’ll still be working with databases and virtualization, web servers and DNS, but this opportunity also gives me the chance to do quite a bit of development work, which I’ve been wanting to do.

Best of all – none of the development work I’ll be doing involves designing interfaces, and the back end stuff I’m working on is mostly Python. I’m happiest when I’m not coding stuff that has to render aesthetically pleasing results. That tier is best left to people who specialize in that. I just munge data and code business logic. :)

So, at some point, I have to make a choice as well, regarding my blog, because I’m not going to work for AddThis.com and then *not* use the product (and truthfully, I *want* to use the product). Just having social bookmark links is ok, but being able to view statistics related not only to what eyeballs landed on the page, but to what people found interesting enough to bookmark is valuable.

WordPress.com has been good to me, but I’ve been feeling the pain of not being able to add really *any* per post goodies for some time. For a while I was manually adding social bookmark links to each post, and manually adding technorati tags to each post. Know what happens when you do that? It makes blogging more of a chore, and something I’m less likely to do. So do I host the blog myself somewhere else, or do I find another non-wordpress solution altogether? I had a nightmare of a time with Blogger – has it gotten any better? Does it support trackbacks yet? Can a blog published to a non-blogger.com url have labels?

What about other blog services? Are there any that provide the niceties of the WordPress software, but without the limitations of the WordPress.com service? I really like categories, I like (but don’t need) the GUI blogging interface, and I *really* like that I don’t have to host it myself and maintain the blog software. Ideas are hereby solicited.

November 1, 2007

I was informed today by the publisher that Python Magazine has been deemed “viable” using all of the important business metrics that they use to evaluate the magazine. This is fantastic news, and speaks volumes about the viability of the magazine in *non* business terms, as well as the model we’ve been employing at MTA since 2002.

We’ve never (yet) done anything to market the magazine. We didn’t really do a whole bunch of market analysis and research. We don’t pitch old guys in suits to convince them to fund our work. Not with php|architect, and not with Python Magazine. In each case, there was someone with a passion for the language, who was plugged into the community, who could see that a magazine would be valued as a tool by the community. In each case, we could see that there were people with great knowledge, and people with relatively little knowledge, and that those people didn’t often get around to finding each other to share that knowledge.

What we found with php|architect was that the magazine served as a bridge between those who have knowledge, and those who want it. We’re finding the same exact thing happening with Python Magazine.

There are millions of things we’ve discovered about how people consume documentation and think about languages and lots of other things along the way. It’s an immensely interesting business to be involved in. We’ve learned a whole lot about how publishing, distribution, translation, and even weird things like banking work in other countries all over the world. We’ve learned about how communities organize themselves into subcommunities in the digital realm and how different communication mechanisms affect how information is perceived and consumed and used. It’s fascinating stuff.

In the end, though, I think the success of the magazines is owed to the fact that the people producing them have a passion for the content. We’re still plugged into the respective communities – and not for the sake of the magazines. We’re plugged into the communities to help us perform at our day jobs, and we produce the magazine to help ourselves and our friends in the community get at the information they need.

October 31, 2007

Regular readers know that I’ve been working on a pet project to build a command line interface to Google Spreadsheets. Basically, I find working in a spreadsheet interface to be clunky and uncomfortable. If I need to put in a new row, I’d rather just be prompted at the CLI for the values I want to put in for each column. Later I’ll add the ability to edit and query my spreadsheet from the command line as well. The nice thing is that I can’t see any reason for this application to be specific to any *particular* spreadsheet, so anyone should be able to use this for whatever Google Spreadsheets document they want :-D

For now, though, in the event that other coders are struggling with their own project, here’s how I finally figured out how to print out the “column: value” pairs for every row in my spreadsheet:

I had initially hit a bit of a snag in getting to this point, because it’s not made clear in the Google Documentation how to reference your columns. They *do* tell you how to print “val.content.text”, but that prints all of the column:value combinations together in one big, long string. You can’t even parse that, because nothing is quoted, and column data can include anything you might use as a delimiter. I finally got around to looking at this again today, and with the help of IDLE (which I’ve now accepted as my saviour) finally poked and prodded ‘val’ until it spit out something close to what I was looking for.With that task out of the way, it should be easy enough to start performing write operations, and I believe I remember query operations being documented by Google separately – so hopefully this will go more quickly now.Wish me luck!

October 26, 2007

So, I’m on IRC a lot. I’m on a lot of channels, too. I’m on more than one Python channel. One scenario in these chans that comes up somewhat often is one in which a user converting from PHP, Perl, Ruby, or whatever walk in and want to get a better understanding of how regex works in Python.

Flaming ensues.

Flaming the flamers is a topic for another blog post, but for some reason, Python users seem to really be resistant to regex. At one point, I actually suggested in one of the larger channels that someone write an article for Python Magazine about the proper use (or non-use) of regular expressions. That was weeks ago now. I got no bites.

So here again, I’ll put this in a very public place and say that if you can get me a proposal for an article that details when to use or not use regex, and how to use them properly when you *should* use them, we will pay you to write that article.

October 25, 2007

I know I’m going to forget how to do this, because I only ever need to do it once a year or something, so I’ll put it here for safe keeping:

To recover a file from svn that you deleted from your local repository, it’s first necessary to get the proper name of the file, and the revision of the repository it last existed in. To do that (assuming you don’t know, because if you do you have bigger issues), you go to the directory it was in (or as close as you can get to the directory it was in) and run:

> svn log --verbose

You should be able to find the file you’re looking for and the revision you need in the output of that command. Assuming your file’s name is ‘file.txt’ and it was in revision 250, you run the following to recover it:

> svn up -r 250 file.txt

Done. It’s there waiting for you. Enjoy. I had been fumbling around with ‘svn co’ syntax until a digital buddy of mine corrected me. Thanks, Nivex!

I have to admit that I have not really made friends with Python as a web scripting language. I use it for network, system, and database scripting, and I’ve done some web services stuff with it, but I haven’t been able to use it for things that have, say, a browser interface. Until the other night.

I got email that this guy who maintained a site was going to shut it down. This really annoyed me. Then I remembered that a new web host I’m using actually supports Python. Sure, it’s a really old, crusty version of Python, but Python nonetheless. The site being shut down was running ‘PlanetPlanet’, which is a feed aggregator website package. You tell it the url’s for all of the feeds that interest you, and it goes and grabs all of that content from the various feeds, formats it, and spits back something that looks pretty nice.

PlanetPlanet needs no database, and no Apache modules. I unzipped it, configured it, fed it the feed url’s, went to the site, and I was live. I got it running in under 10 minutes, and had templates in place and security accounted for in another 10 minutes. Very nice!!

October 23, 2007

Google Docs is nice. Calendar is really nice. Gmail is ok, too. The notion that you can more or less use any of the tools without going too far is pretty nice, and they’ve opened things up with the API just enough to get some useful plugin capabilities, *and* there’s a Python client available for the Google Data API, which is nice (my experience with Google Spreadsheets notwithstanding). The problem now is that I would like something that goes beyond a simple plugin.

Outside of my day job doing infrastructure architecture and sysadmin work (with some development thrown in for good measure), I run Python Magazine. I have a ton of communication and deadlines to track in working for the magazine; I get several article proposals per week (sometimes per day), I’m working with contract people, other editors, technical folks on the back end of things, layout folks, the people writing the checks and managing invoices, and whoever I need to talk to for business development tasks. I send emails to a great number of people every day, just for the magazine.

I use Gmail for my Python Magazine mail (my pythonmagazine.com addy is forwarded to gmail. GMail also lets me send mail using my pythonmagazine.com email address (otherwise, this would not be a usable solution for me).

I use Google Calendar to track deadlines. Each article deadline is a full day event in Google Calendar. I’d also *like* to use Google Calendar as something of a logging tool to track out-of-band conversations I have with people on IRC or (gasp!) in person.

The reason I haven’t gone this route yet is because there’s no interface where I can, say, search for a person’s name, and get a nice list of the things related to that person, grabbed from GMail *and* Google Calendar (not that you’d need to stop integration efforts at those two services – they’re just the two most useful to *me* right now).

For my purposes, it would even be OK if Google just added an “include calendar results” in the GMail search interface. That would give me a list, ordered by date, of conversations via email, perhaps GTalk, out-of-band events logged with Calendar, and deadlines, also tracked via Google Calendar. It could essentially be a time line of my working relationship with a person, which can be very useful.

It might even be useful to get a time line of events and conversations related to a specific topic, rather than a specific person. If I could do a search for “contract request”, this hypothetical interface would actually spit out a time line showing all of the interactions between me and our contract person specifically in relation to commissioning articles, because I use the term “contract request” in the subject of all contract requests, and would naturally carry that consistency into notes I might take about contract requests in Google Calendar or other apps.

Well, that’s my latest idea. I’m not sure what form the app would take. Ideally it would be a web page I can get to from anywhere, but I have yet to do anything significant with Python as a web scripting language (though I’ve rewritten a whole lot of old Perl code in Python for sysadmin-ish stuff). A fat client application would inevitably *not* be useful to a whole lot of folks… I dunno. Thoughts hereby solicited on that.

Let me know if something already exists that does this, or if I just wrote this whole post for nothing because Google already does this somehow. I don’t think it does. It seems to treat applications as separate entities, and the same account using different apps are different entities as well. There needs to be a higher level vision of the user as a single object across all of the applications in order to get at the kinds of interesting uses of data that are possible and would add a lot of value to the individual services. My $.02.