Musings of an anonymous geek

November 13, 2007

I’ve Been Added

Filed under: Me stuff,Productivity,Python,Sysadmin,Technology — m0j0 @ 8:08 am

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.

Advertisements

November 1, 2007

Python Magazine Defies Skeptics

Filed under: Big Ideas,Productivity,Python,Scripting,Technology — m0j0 @ 8:40 am

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

Getting at your Google Spreadsheets columns

Filed under: Productivity,Python,Scripting,Technology — m0j0 @ 8:29 am

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 😀

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:

spreadsheet_id = PromptForSpreadsheet(gd_client)
worksheet_id = PromptForWorksheet(gd_client, spreadsheet_id)
columnfeed = ListGetAction(gd_client, spreadsheet_id, worksheet_id)
for attr, val in enumerate(columnfeed.entry):
   for key in val.custom.keys():
      print "%s:   %s" % (key, val.custom[key].text)
   print "\n"

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 23, 2007

I need a Google Apps Mashup

Filed under: Big Ideas,Productivity,Python,Scripting,Technology — m0j0 @ 7:31 am

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.

October 17, 2007

For my next pet project…

Filed under: Me stuff,Productivity,Python,Scripting,Technology — m0j0 @ 9:24 am

Stand back!

running install_egg_info
Writing /usr/lib/python2.5/site-packages/gdata.py-1.0.9.egg-info
brj@dawg:~/working/gdata.py-1.0.9$ python
Python 2.5.1 (r251:54863, May  2 2007, 16:27:44)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gdata
>>> print 'yay!'
yay!
>>>

No good can come of this! ;-P

Seriously, though – I really really strongly dislike spreadsheet interfaces. I hate resizing cells so I can see what’s going on, I hate cell selection, copy/pasting, and doing anything in those little cells. However, I really *need* to use one to handle some administrivia at Python Magazine, because it’s already being used by some back end processes/departments, and I don’t have time to write code and overhaul that whole process, and I don’t want to rock the boat anyway – what they have works – I just hate spreadsheets. It’s my problem, not theirs 😉

The good news is they use Google Docs, and there’s a Google Data client library for Python. So I’m creating a command line interface to the spreadsheet 🙂

July 19, 2007

Why you should write: common myths debunked

Filed under: Big Ideas,Productivity,Python,Technology — m0j0 @ 8:38 am

I give a talk that advocates writing. I do this because I owe my career to people who wrote down what they knew and made it available in one form or another; either free on a web site, or in a book that I bought.

When I started editing, one of my jobs was to encourage people to write for whatever publication I was working for at the time. I’m now Editor in Chief for Python Magazine, and I’m back in the role of encouraging people to make their knowledge available for others (including me!)

Python Magazine is going well in terms of authorship, but with all of the Python coders out there, I should be overwhelmed with article proposals! When I talk to people who clearly know what they’re doing, or are doing something cool, and ask them to write, the responses are, by now, pretty predictable – and mostly based on misunderstandings, myths, and other untruths. I thought I’d take a few minutes to address the most common ones here:

“I can’t write”

The king of reasons for not writing is this one. The problem isn’t really that the person literally cannot write. The problem is twofold: first, the person has absolutely zero confidence in their ability to write. Second, the person doesn’t understand what an editor is supposed to be doing to earn his keep.

I’ll tackle the second part of the problem first: an “editor” is not some gray haired guy with a cigar screaming about deadlines and rejecting 99% of everything that hits his desk. An editor is someone who works *with* writers. It’s not *supposed* to be an adversarial relationship – and it *is* supposed to be a relationship. It’s supposed to be a working relationship where the writer tries to relay concepts in a way that the *editor* can understand. In return, the editor asks questions, pokes, prods, and makes suggestions that help morph the article into something the *readers* will understand.

Further, the relationship may begin before a draft is ever submitted. I’ve helped lots of writers develop their *abstracts*, so that by the time they sit down to write the article, they have some clear idea where they’re headed. And the word is *helped*, not *dictated*. It’s not me passing back a marked-up copy and saying “fix this and do that”. It’s me writing back saying “I’m a little confused in this part, how does this work?” or “can you provide a use case in which someone would find this useful?”

Finally, this excuse may have foundations in a perceived language barrier. If English is not your first language, you may feel like you’ll never get published in an English publication. Not true. If you have the knowledge, and can write enough English to relay the concepts, a good editor will work with you to develop it into something suitable for publication. It may take a bit more time, but that’s usually not a problem. In technical publishing, knowledge trumps prose every day of the week.

“I don’t know what to write about”

One day while you’re coding, just stop. Stop and take stock of what you’re working on. In all likelihood, there’s an article in there. If you’re thinking “there are a thousand articles about this already, in addition to the online docs”, you need to know three words: “Fresh, relevant content”.

A thousand articles have been written about just about everything! Why do you think that is? In the tech world, it’s because technical people tend to pay close attention to the date of publication to figure out if the content is fresh and relevant to the current version of whatever they’re using. Because technology evolves, there is often a need to get updated information to the readers.

The other part of this objection is the idea that the reader can get the same information from online documentation, or that what you might write about is just too easy for anyone to find useful. This is usually based on an assumption that because the writer learned it in an hour reading online docs, that everyone can/will/wants to learn that way. I hate online documentation, especially for programming languages. So do lots of other people. That’s why people buy enough technical magazines for my publisher to let me head up another one!

Also, people read about things in magazines that they may otherwise never read about if it were online, and they get inspiration from these things on occasion. Why? Because it’s there. When I go to get my oil changed, I bring a magazine with me to read while I’m waiting, and I read stuff I wouldn’t normally seek out online because I have time to kill. When you see people at the DMV (or MVS, or wherever people go to get their licenses renewed or cars inspected), a lot of them have magazines with them. They have time to kill. Inspiration can come from the strangest places. So whatever it is you’re doing, write about it, and inspire someone to take whatever it is you’re doing and do something else cool with it. Even if it’s, say, the Python tempfile module or something mundane like that 🙂

There are three things I tell people about where to find article ideas:

  • Write about stuff you know/do – this is a gimme.
  • Write about stuff you *want* to know/do – You don’t have to be an expert on Twisted to write an article about it. If you’ve done some network programming with Python at all, and are wanting to get into Twisted, research doing what you want to do with Twisted, figure out if it’s a good choice, do a proof of concept, take some notes, and write an article based on what you’ve done!
  • Write about stuff that is not done, or often done wrong – Best practices documentation is severely lacking. There are a trillion articles that talk about different ways to do similar things, but very, very few articles that say “Here are three common ways this is done, and here’s why this fourth way might be better” or “Here are the pros and cons of doing this using 2 different methods”. Because best practices documentation is lacking, things are quite often done in a suboptimal way. Articles like “How not to do web programming with Python” might cover why you don’t want to use the split() function to parse URLs, for example 😛

More on the way

I’ll expand on these and address more common reasons for not writing in future posts. In the meantime, if you’d like to give writing a shot, and you write a decent bit of Python code, I invite you to come and write for Python Magazine. I look forward to working with you!

Technorati Tags: , , , , , , ,

Social Bookmarks:

May 9, 2007

A quick overview of common grammatical mistakes

Filed under: Productivity,Technology — m0j0 @ 1:53 pm

Part of what I do for a living is write. I’ve co-authored a book, written a rather large number of technical articles, and I’ve also done professional editing, tech review, and manuscript review for magazines, newspapers, and publishing houses. Also, my wife is an English teacher. In short, though I make my fair share of mistakes, I have some clue what I’m talking about with regards to grammar. So, here are what I think are by far the most common mistakes I see people make, both in formal (articles and such) and informal (IRC and such) writing:

  • there, their, and they’re – “there” is a place. “their” is possessive. “they’re”, as implied by the fact that it’s a contraction, is two words: “they are”.
  • its and it’s – Never use “it’s” unless you want to say “it is”. Any other time, use “its”. At no time should you be thinking that “it’s” is somehow possessive. Some people think “it’s” can also mean “it has”. You’re free to make your own call on that. I would personally avoid that usage – and I do, regularly. The goal of language *usage* is not to raise eyebrows. The goal should be to use language to communicate ideas, and the *ideas* should raise the eyebrows. 😉
  • your and you’re – again, only use “you’re” when you mean “you are”. Period, end of story.
  • kernel and kernal – kernal is just not a word. It’s kernel, not kernal. Kernal is never right.
  • too and to – “too” should only be used in a place where “as well” would also fit. I would generally chalk this up to typos, but I’ve just seen it misused too consistently. Nobody misses that last “o” *every* time!
  • ‘s – There are lots of places where this is useful, but it should never be used to make something a plural. To make something a plural, you either add an “s” or an “es” – but you never add ‘s to make something plural to my knowledge. It’s used in contractions, and possessives. Not plurals.

So really, that’s it – oh! By the way – “thats” is not a word. That’s always written “that’s”. I can’t think of an instance where “thats” is useful, but I’m not all-knowing either. It would be awkward, at best.

Anyway, there really aren’t a whole lot of them, but if everyone on the internet just paid attention to *just* those things – it would be a vast improvement.

March 24, 2007

Three tips to keep you focused

Filed under: Big Ideas,Productivity,Sysadmin,Technology — m0j0 @ 1:09 pm

If you’ve read my previous posts relating to time management, you might realize by now that I tend to approach it from the opposite direction of a lot of other information sources. My philosophy is that it is easier (for me) to identify things that represent a mismanagement of time and find creative solutions to those problems than it is to collect ‘rules of thumb’ and try to wedge them into your daily routine.

Below I’ve outlined three ways that you can get time wasting activities out of your face and into the background so that your *real* work stays in the forefront of your environment and your brain. I hope you find them useful!

Have your mail check in with you

How many times do you check your mail before lunch? 10? 20? 50 times? It’s probably too often. If you’re not using some mechanism to alert you of mail that really *requires* your attention, you might be wasting more time than necessary.

“But how much time is that really going to save me? It only takes a second to look at my mail!” Well, I guess that might be true, but the context switch of detaching your brain from the current activity, looking at your email, maybe clicking through various folders or checking mail from multiple accounts, and then getting back to your original task can be quite expensive. While the physical act of checking mail might take only a minute, getting your brain back up to speed on where you left off can take a bit longer.

I’ve employed a couple of tools to help make sure I’m not checking mail unless I need to.

  1. Filters. Just about all email clients have some way of shuffling messages into different folders or tagging them based on the subject, sender, some other header, or even the content of the message. In an ideal world, you’d use procmail to handle filters, specifically because it’s not tied to a single client, and so any client you use will have the same view of your email, which is wonderful. What has really helped me is after setting up filters to shuffle things off into the various folders, I created a folder called “Priority”. Anything that warrants dragging me away from work goes in there, and then I use an alerting system that only monitors that one folder. Which brings us to….
  2. Alerts. No matter what OS you’re on, no matter what mail client you use, there’s a way to get alerts working for you. Email alerts have evolved from simply saying ‘hey, there’s new mail’. Nowadays, you should be able to find one that will show you some portion of the incoming message and give you some options on what to do.

Make friends with virtual desktops

This is especially important on a laptop that doesn’t have as much screen real estate as most desktop systems. Popular Linux desktop environments all have virtual desktops, and on the Mac, I highly recommend installing Virtue Desktops to be able to use this functionality on that Mac platform. And I don’t recommend sticking with default settings for your virtual desktops, because it leads to wasting more time. For example, if I put my code editor on one desktop, and keep my email, music player, and IRC client on another desktop, then that means checking mail also throws all of these other time wasters up in my face!

I keep a separate desktop for just for mail and calendar applications. Another one called “chat” holds my group’s Jabber chat room session and an IRC client. I also keep separate desktops called “Coding: Work” and “Coding: Play”, and “Browser: Work” and “Browser: Play”. In the end, I hardly ever actually launch applications, or spend time minimizing or maximizing applications. If I’m in “Coding: Work” and decide to take a break, I might go to “Browser: Play” to check my news feed aggregator, or I might go to “Chat” to see what’s up with my digital buddies.

This might seem like overkill at first. I have 12 virtual desktops! But after a couple of weeks of tweaking things to how you work, you’ll find that it saves you an immense amount of time by making things easier to switch between, which makes context switching a much less expensive operation. Sysadmins are interrupt driven – we can’t control that. But we can control how it affects our work, and this is one way to do that.

Put more at your fingertips

Having separate desktops for certain things can actually cause more frequent context switching. For example, I have a separate desktop for my music player, which plays throughout the day. If I had to go to that desktop every time I decided I wanted to skip a particular song, that would waste a lot of time. Instead, I put controls for the music player in my task bar. Now if I want to skip a song, I just click a button and go back to work. It’s a non-event compared to going to the desktop and being distracted by art work, other songs in the list, etc., etc.

Maybe there are other things that waste your time that you could put at your fingertips. Some people have to know the weather at all times, or they need to have a dictionary handy, or whatever. If it’s something that you can make a non-event without making your environment distractingly cluttered, do it!

Technorati Tags: , , , , , ,

Social Bookmarks:

March 20, 2007

Google Calendar Syncing

Filed under: Linux,Me stuff,Productivity,Python,Scripting,Technology — m0j0 @ 11:24 am

So, I’m kinda tired of trying to find a solution to this. What I want is a non-commercial, freely available application (NOT service) that will sync bidirectionally between Google Calendar and Apple iCal, Evolution, and whatever Mozilla calls its calendar today (Sunbird?).

I’ve used Spanning Sync, which worked well enough, but I never liked that my data traversed their servers. Then, they decided to charge me for the privilege of sending my data through their servers, which I didn’t want to do in the first place.

Then I looked at gsync, but I decided not to bother with it because they have commercial aspirations as well, and while they say it’ll only be $20, and it’s a standalone application, I don’t really want to get all set up with it and be let down when they decide it’s worth much more or something.

So I downloaded gcaldaemon, which is an open source, freely available, standalone application, but after about a day of fiddling with it, I couldn’t get it to do much of anything that was useful. What’s more, it’s written in java, so I’m not going to go mucking about with the source code (I don’t code java).

I’ve decided to figure out a solution on my own, as a pet project to help me get used to programming in Python and using the various Google APIs. I just started last night, and I’ve gotten as far as logging in and getting a list of my calendars. I have an extremely long way to go, but between this project and another one I’m doing at work, I should become pretty adept at using Python, and it’s been great fun!

It should be noted that there’s already a Python library for the Google Calendar API. I downloaded it, and I’m using some of that code as example code to get me going, but I’m not using that library as of right now, because I’m more interested in learning than I am in getting a working product immediately. Maybe I’ll do something useful and will be able to contribute code back to that project. Maybe after some time of mucking with this I’ll see the light and decide to use the API. Either way, whatever code I produce will be available to whoever wants it in some form.

Technorati Tags: , , , , , , , , , , ,

Social Bookmarks:

March 14, 2007

More news for Spanning Sync Refugees

Filed under: Big Ideas,Linux,Productivity,Scripting,Sysadmin,Technology — m0j0 @ 12:35 pm

First, there are lots of people who are pretty outraged by the new Spanning Sync pricing of $25/year for a subscription service or $65 for a one-time license. The people who are the most outraged are those who are intimately familiar with how buggy it is because they were beta testers. I’m in that camp myself. I no longer use Spanning Sync.

Second, I found this post talking about future pricing of gSync, which is currently in beta and plans to go commercial, but there are two important distinctions:

  1. There’s no central server involved. gSync connects directly to Google Calendar with no intermediary.
  2. They only plan to charge $20 for the download.

Finally, check out this quote from Charlie Wood of the Spanning Sync team:

“For example, another poster on this group (see
http://groups.google.com/group/spanningsync/msg/429d64a0f961092f)
explained that he thinks, “Spanning Sync is a great product,” but that
he is, “unfortunately, a supporter of open source or free software,”
and therefore won’t be buying a subscription. My point is that
regardless of the price of the service (unless it was free), he
wouldn’t have ever been a customer of ours.”

This shows a complete lack of understanding about what open source and free software is about. To be clear: NEITHER THE OPEN SOURCE NOR THE FREE SOFTWARE COMMUNITIES SPECIFY THAT SOFTWARE SHOULD NOT BE A COMMERCIAL, MONEY-MAKING PRODUCT.

From the Free Software Foundation site:

You may have paid money to get copies of free software, or you may have obtained copies at no charge. But regardless of how you got your copies, you always have the freedom to copy and change the software, even to sell copies.

“Free software” does not mean “non-commercial”. A free program must be available for commercial use, commercial development, and commercial distribution. Commercial development of free software is no longer unusual; such free commercial software is very important.

And, from the Open Source Initiative website:

“How do I make money on software if I can’t sell my code?

You can sell your code. Red Hat does it all the time.”

Also, *I* am a supporter of free *and* open source software, and regularly pay for software, as do most people who have to get actual work done using tools for which there is no free/open alternative. “Free and Open” does NOT mean “no money changes hands”.

Please, if you’re a software developer, put some due dilligence into this, and if you’re a free/open source software supporter, try to work with the community on better relaying the message, because after, like, 20 years, people should’ve started to get this by now.

Technorati Tags: , , , , , , , , , , ,

Social Bookmarks:
Next Page »

Blog at WordPress.com.