Thursday, February 28, 2008

Introducing Mixed

As far as I know, the Cheese Shop didn't have any way to handle fractions and mixed numbers... until now. Introducing mixed.
>>> print Mixed('-1 1/2') + 2
1/2
>>> print Mixed('3/4') + Mixed('1/2')
1 1/4
>>> print Mixed('-1-1/4') * 2
-2 1/2

You'll feel like you're in second grade all over again!

easy_install mixed to get it.

I hosted the code on Assembla, which has free mercurial repository hosting, so anybody who wants to polish it up is welcome to! hg clone http://hg.assembla.com/mixed_python mixed_python gets you a copy of the repository.

And all this because I was importing into a table last night and noticed some mixed numbers. A normal human being would have just converted them to floats in her head and gone to bed...

Sunday, February 24, 2008

Speaking at PenguiCon

I really enjoyed last year's PenguiCon - science fiction geekery and FOSS geekery make a surprisingly nice combination, with the SF people adding a nice lightheartedness to the atmosphere.

I'm giving a talk again this year, but this time, it will have nothing to do with Python - really! I'm going to try some of that hybrid vigor for my own talk, hoping that a fun theme will leaven a potentially dry topic.

Into the Dayta-b'hase: A First-level Introductory Adventure
April 19th, 2:00

Relational database technology underpins modern business, finance, engineering, and a lot of other boring stuff. You know you ought to learn something about databases, but how can you stay awake long enough? Come see database software used for something that actually matters: D&D characters. We'll set up a postgreSQL database, demonstrate all the fundamentals of relational databases, and advance Gruk the Unbathed to 4th level.

Northfield B
Hilton Detroit/Troy-Auburn Hills
5500 Crooks Rd
Troy, MI 48098 USA
(248)879-2100

Friday, February 22, 2008

how to spoil an OSS conference

I'm expecting to be in Washington D.C. on April 22-23, so imagine my delight when I learned of a "Military Open Source Software Conference" at that very time... in that very place! I work on a military contract! What could be better?

Now imagine my shock when I went to register. $1.945. For two days. Two days!

This, folks, is the problem with conferences run by for-profit training companies instead of volunteer organizations. No, wait, it's just one of the problems.
26 Senior Experts from: OSD, BTA, DHS, DON/CIO, AFAE, SPAWAR, FCS-BCT PO, HPCPO NGA, NASA/JPL, PEO-STI, USACE, Hill AFB, BAE, Boeing, Northrop Grumman, Lockheed Martin, Unisys, IBM, CSC, Rockwell Collins, Sun, Booz Allen Hamilton, Autodesk, SEI, and Mercury
What's wrong with this list? Not one representative of any open-source project! With a speakers' list like that, I don't know if it's even worth pilfering a hotel catering uniform and a pitcher of ice water to go eavesdrop on the talks.

Apparently, the topic is limited to decisions regarding open-source at a managerial level, rather than the actual use of the software and participation in its communities. That shows a serious lack of understanding. Breaking the separations between decisionmakers, code-writers, and users is part of what gives open source its power.

And suppose you, as an attendee, wish to suggest a topic, present a talk, or facilitate a discussion? Well, you can't. There's no provision for participation by the attendee community. Again, they very seriously do not get it, only seeing one-way relationships from paid content creators to passive content receivers. It seems that, just as "you can write COBOL in any language", you can buy proprietary software under any license.

It all makes me extra-grateful to the volunteers who run conferences like PyCon. (Register by March 7!)

Thursday, February 21, 2008

VC cloning into an existing directory

Mercurial won't let me clone into an existing directory.

This is a problem when trying to put (only) a subset of files under version control. For example, an Oracle installation includes an enormous directory structure. A few of its files really, really ought to be under version control (init.ora, tnsnames.ora, etc.); most shouldn't. I need an hg repository in the root of the Oracle software installation. Then, when I set up Oracle on a new machine, I need to clone that repository into the new machine's Oracle root... even though the new machine's Oracle root already exists and is chock-full of files.

$ hg clone src target
abort: destination 'target' already exists


I'm surprised that there's no --overwrite flag for hg clone, or anything like it, saying "go ahead and clone into that directory even though it already exists." Perhaps it's simply because VC programmers are software developers, used to working with a clean slate rather than configuring an existing directory structure? Anyway, I made up a script workaround.

hg clone $1 $1_clone_temp
cp -r $1_clone_temp/* $2/
rm -r $1_clone_temp


Or, in Windows,

hg clone %1 %1_clone_temp
xcopy /e /s /h /g /y %1_clone_temp %2
rmdir /s /q %1_clone_temp


Thanks to the Linuxchix irc channel for helping me figure out the syntax.

Dayton Oracle SIG

At last, it's time for DAY-O to meet!

Meeting of Dayton-Oracle SIG (DAY-O)

March 10, 2008, 5:30 pm
A hands-on, cooperative, laboratory-style meeting. Bring a wireless-enabled laptop if you have one. This meeting's topic will be Flashback.
Mary-Ann's Kitchen
33 N Ludlow St
Dayton OH 45402 USA
(937) 222-3663

Wednesday, February 13, 2008

Access forbidden. Attempted work detected.

The forbidden-content blocker at my worksite is more stupid than the one at your worksite. Doubt me? "Computing/Internet" is one of its forbidden categories. Blogs, another forbidden category, are the biggest problem because, as you know if you're reading this, most of the good code samples in existence these days are on blogs. We aren't allowed to appeal categories, only individual sites.

When I whined about it to my boss, he reminded me that I've done some work with web-scraping, and that I could probably write a Python script to make an exemption request for thousands of blogs at once, including ones I've never seen but might Google up someday. It'll benefit thousands of geeks across the organization, and maybe even convince somebody that they should turn the "stupid" dial down a notch.

I love my boss.

Here's the plan:
1. whitelist and blacklist of known legit and non-legit sites, respectively
2. count words. Words that appear much more frequently on whitelisted sites than on blacklisted are positive scorers, and vice versa.
3. apply the scoring vs. unknown sites. Hand-check a lot of results. Beef up the whitelists and blacklists and repeat until the scores against new sites are reliable.

Oddly enough, the hardest part of the process is gathering a long enough blacklist. I'm not just talking porn - I need harmless but non-work-related stuff, blogs where people are writing about their Irish setter instead of their SQL queries. (I need bunches of them - dozens, at least - so don't just comment to tell me, "My blog is useless and banal!")

One of the best sources I've found so far has been googling for "typical stupid blog".

Friday, February 01, 2008

TechFest 2008

If you're near Dayton, and you have a child, or know a child, or can find a child, or feel like a child, then you really need to get to TechFest!

Hands-on science and technology family fun
Feb. 16, 10 AM - 6 PM; Feb. 17, 11 AM - 5 PM
Sinclair Community College - Ponitz Center
444 W. Third St., Dayton, OH

I'm afraid the information technology people haven't traditionally brought stuff with quite the "wow" factor that the physical scientists and engineers bring. What's something we computer geeks could do that would compete with the chemists' goo-making or the physicists' pneumatic implosions? Have to think about that one.

in school, not even a Smurfette

So far, I've taken my smashing-planets introduction to Python to two groups of college students: the Wright State chapter of ACM and an OO programming class at University of Dayton. It's been lots of fun. I appreciate the chance to show young people something I really love, something I think can make their computer work more productive and more fun. My thanks to the folks who decided to invite me and the students who gave me their attention.

But. If I don't see a woman student in computer science soon - just, for crying out loud, one woman student - I am going to... I don't know. I'm going to have to research "how to go berserk".

What's going on in this country? I think I'd see better gender balance in a classroom in Iran.

Packet from table 6

I wish I knew more about networking. I have a technical need that I can barely describe, much less name.

For our new Dayton Oracle SIG, we want to run interactive, laboratory-style meetings. We'll meet in a place with wireless, one member will bring a laptop running an Oracle server and Oracle Application Server, and other members will use their laptops to access it and muck around.

This requires the computers using the wireless network to access not just the internet, but each other. I'd call this "peer-to-peer" networking, but it's really "peer-to-router-to-peer".

If I connect to my wireless at home and issue ifconfig, it reports eth1 ... inet addr:192.168.1.45. For other machines connected to the same router, that IP address is as usable as anything on the internet. If Oracle and Apache are running on the machine, I can use 192.168.1.45:1521 and 192.168.1.45:80 to log into the database or view webpages from other machines. If I go into my router and set Port Forwarding to ship incoming traffic to 192.168.1.45, then those become visible to the wider internet... but, to access them within the wireless network, I don't even need to do that. (In fact, I don't see any way I could turn it off even if I wanted to.)

So all we need is a meeting location that allows the same thing. It's not that simple, though. As far as I can tell, the wireless at Panera Bread (my first choice) doesn't permit this kind of inter-machine connection. That locally assigned IP address doesn't produce any response from other machines in the same network; it seems the router simply doesn't route traffic between machines. For security's sake, that kind of makes sense; I wouldn't want somebody hacking my database from the next table over. (Actually, if they did, I'd invite them to the SIG, but that's me.) But it removes some really neat possibilities for interaction.

I've found one place so far - the Hope Hotel in Fairborn - where the wireless does allow connections between machines. I was all ready to declare the hotel restaurant our meeting location, until my boss reminded me that it's full of GIANT TELEVISION SCREENS BLARING SPORTS and some people don't tune that out as automatically as I do.

I suppose there's always the option of bringing a router with me... but then I'd have to bridge people's traffic up to the internet somehow. I'm sure it can be done, it's just something I've never developed the skills for, nor do I own a particularly portable router. Hmm...

Thursday, January 24, 2008

Chicago

CODE Hacker for the World,
Programming Tool Maker, Stacker of w00t,
Player with Rails and the Nation's Error Handler,
SourceForge, Cheese Shop, CPAN,
City of the Big Dynamic Language Conferences:...

I just found out that Chicago, after hosting PyCon in March, will host YAPC::NA in June, and hosted RailsConf in 2006. Crazy!

Dave Barry's Only Travel Guide You'll Ever Need makes a joke that every single state claims to be "dynamic". Looks like they all lose to Chicago, though, because that's where the real dynamic types come to play.

Sunday, January 13, 2008

brilliant PyCon publicity ideas

I was alarmed to find that many of the attendees at CodeMash didn't know that PyCon 2008 will be in Chicago - right here in our beloved Midwest.

So, as volunteer publicity coordinator, I thought I should brainstorm on more ways to get the word out. Here's what I've come up with so far.
  • National "got whitespace?" skywriting campaign
  • Spread urban legend about programmer whose kidneys are stolen by organ smugglers when he fails to attend PyCon
  • Invite presidential candidates to debate their choice of Python web framework at PyCon
  • Post hilarious "DO NOT WANT STATIC MANIFEST TYPING!!1!" pic at icanhascheezburger
  • Vote Guido into final round of American Idol
  • Bribe fortune cookie factory employee to replace fortunes with "PYCON 2008 CHICAGO IN BED"
  • Use laser to engrave giant announcement in the moon's surface
  • JEN IN TEARS AFTER ANGELINA'S LIGHTNING TALK
Please supply more ideas in the comments... (serious ideas doubly welcome!)

CodeMash slides

Thanks, everybody, for another great CodeMash - even better than last year! More babbling about it will follow when I have time,

As promised, the material from my presentation. It's almost identical to my LinuxFest presentation of last September.

Saturday, January 05, 2008

Introducing cmd2

cmd is a Python Standard Library module for constructing command-prompt applications. It's very easy to use - just subclass its Cmd type, create an instance, and call that instance's .cmdloop(). To support a command, just write a do_yourcommandname(self, arg) method within your Cmd instance.

cmd is also very bare-bones. It forms the backbone of sqlpython, and while improving that package, I've created cmd2. cmd2 is an extension for cmd that adds helpful functionality without requiring any changes to cmd-based applications.
  • Searchable command history
  • Load commands from file, save to file, edit commands in file
  • Multi-line commands
  • Case-insensitive commands
  • Special-character shortcut commands (beyond cmd's "@" and "!")
  • Settable environment parameters
  • Parsing commands with flags

I've found several alternatives to cmd in the Cheese Shop - CmdLoop, cly, CMdO, and pycopia. cly looks wonderful, but I haven't been able to get it working under Windows, and that's a show-stopper for many potential sqlpython users. In any case, none of the alternatives are based on cmd - they're written from scratch, which means that a cmd-based app would need complete rewriting to use them. I like sticking close to the Standard Library whenever possible. cmd2 lets you do that.

Switching a cmd application to cmd2 is as simple as changing from from cmd import Cmd to from cmd2 import Cmd, and the new functionality is ready to go. See a usage example of cmd2.

It's in the Cheese Shop, so you can easy_install cmd2. (Cheese Shop page for cmd2)

Thursday, January 03, 2008

Geek Event Aggregator code

I've told several people that I would post the code for the Geek Event Aggregator "as soon as I get it cleaned up".

Today, I swallowed my pride and admitted that I've really got to post something - that the much-needed code cleanup isn't going to happen for months. So, I created a page for it at Google Code: http://code.google.com/p/whatwhenwhere/

Not that you want to do that. It's ugly. Really. It will be cleaned up someday, but if you really want to make use of it now, there it is.

I decided to name the project "whatwhenwhere" because the code might well be used to aggregate events that are not at all geeky, and to host it at Google Code because, well, I'd never tried it.

Most of the stuff you might be conceivably interested in is in scan.py, ship.py, and events/model.py.

Monday, December 17, 2007

CodeMash

Oops, I've been forgetting my blog badge.


CodeMash – I'll be there!


Bruce Eckel will be in charge of Open Space this time, which means it should be something else. Come with ideas for what you want to do with Open Space.

Wednesday, December 05, 2007

I promise not to make a habit of posting about xkcd


OK, I lied. But how could I have known this was coming?

Thursday, November 29, 2007

TurboGears and Oracle on OTN

Once, using TurboGears with Oracle was the kind of kooky idea you could only read about in the blog posts of obscure crackpots.

No more! The current top story at Oracle Technology Network is Daniel Rubio's article on using TurboGears with Oracle. Read, use, and enjoy! It's also got a permanent home at the OTN Scripting Language Technology Center.

Thanks to Oracle for all the great press lately, and to Daniel and Przemek for writing it!

Friday, November 23, 2007

PyCon: 141 submissions!

We weren't very good about getting word out for the PyCon call for proposals, and as the deadline approached, there weren't a lot of submissions in the queue. We worried about whether we'd messed up.

Oh, we of little faith! The last couple days before the deadline, the floodgates opened. We got 141 talks submitted! (And about 40 tutorials!)

And they're great submissions! If I had my way, I'd attend about 3/4 of them personally. Unfortunately, for a 3-day conference, we'll be lucky if we can fit half of them into the schedule. Well, I did suggest running PyCon on a 24-hour basis, but for some reason that wasn't accepted.

So now we've got to somehow narrow down the field to what we can fit in the con, and that's a painful process. Quite a few excellent talks won't go on the schedule simply because there's no room.

The good news is that we've got lots of space set aside for multiple tracks of Open Space sessions, which don't require any approval. So, in essence, we may get two PyCons running side-by-side - a traditional one with scheduled talks, and an unconference-like bunch of Open Space activity.

Too much good stuff... I'm definitely going to have to spawn some processes to see all I want to see.

Tuesday, November 20, 2007

New Python articles at OTN

There's a new series of articles on Oracle & Python over at the OTN Scripting Language Technology Center. Przemyslaw Piotrowski presents a detailed investigation of cx_Oracle, covering very nicely some aspects I'd glossed over in all my introductory articles. Great job, Przemek!

Microformat slides

Anybody who saw my Microformats talk, whether at the Dayton Web Standards Meetup or the DMA Linux SIG, can see my slides here or get a tarball here.

If you weren't at my talk, and are looking for a microformats presentation that will stand on its own, you're better off looking through the talk archives at the Microformats wiki. My talk isn't very self-explanatory without me standing there to talk about it.