Saturday, May 19, 2012

I Read Things On The Internet

It is true, from time to time I read things on the internet. What has been bothering me lately is the feeling that all of these ideas I'm consuming and all of my responses to them are just lost into a sea churning together everything into the unidentifiable paste that comes out of my head.


So, I've decided to start logging this. After all, the word "blog" is a shortening of "weblog", a web log, a log of the things you've read on the web. I want this for my own daily readings, both to keep a record for myself (and anyone with an interest) and to note my thoughts, comments, responses, and questions about the things I come across.


Ironfroggy Reads Things On The Internet is this new thing. It is a blog on Tumblr, which I find a useful tool for smaller posts and their bookmarklet is perfect for my needs here. I'll be directing the posts to twitter to, as an experiment. Let me know if that turns out annoying.


Follow it, if you care to. Mostly its for me, but I believe in transparency by default.

Thursday, May 17, 2012

ANN: straight.command 0.1a1 - A command framework with a plugin architecture

New Project Announcement:

I'd like to announce a new project, based on straight.plugin, a command framework that provides a declarative way to define command-line options, sub-commands, and allows plugins from third-parties to expand commands.


This is all very early, I'm calling this version 0.1a1 and lots of things are missing, but here is an example (which works) of a small todo application built with this.


#!/usr/bin/env python

from __future__ import print_function
import sys
from straight.command import Command, Option, SubCommand

class List(Command):
    def run_default(self, **extra):
        for line in open(self.parent.args['filename']):
            print(line.strip('\n'))

class Add(Command):
    new_todo = Option(dest='new_todo', action='append')

    def run_default(self, new_todo, **extra):
        with open(self.parent.args['filename'], 'a') as f:
            for one_todo in new_todo:
                print(one_todo.strip('\n'), file=f)

class Todo(Command):
    filename = Option(dest='filename', action='store')

    list = SubCommand('list', List)
    add = SubCommand('add', Add)

if __name__ == '__main__':
    Todo().run(sys.argv[1:])

And a sample of the result of this little script:

$ ./todo.py todo.txt add "Write an example tool"
$ ./todo.py todo.txt add "Get the documentation cleaned up and on readthedocs"
$ ./todo.py todo.txt add "Blog about the project"
$ ./todo.py todo.txt list
Write an example tool
Get the documentation cleaned up and on readthedocs
Blog about the project

The documentation and source are both available now.
I write here about programming, how to program better, things I think are neat and are related to programming. I might write other things at my personal website.

I am happily employed by the excellent Caktus Group, located in beautiful and friendly Carrboro, NC, where I work with Python, Django, and Javascript.