Friday, October 30, 2009

Behaving as a wave, not a particle

UPDATE: Got one!  Thanks, the webs. :-)
______________________________________
Dear Generousweb,

I'd like an invitation to Google Wave so I can start porting my awesome open source dicebot, Vellumbot, to the new platform.  (I've been talking about doing this since before it was cool--indeed, since before I knew Wave came with its own, apparently non-awesome dicebot.)

Anyone out there interested in helping a brother out?

Sincerely,

Cory

Saturday, September 19, 2009

Hypy 0.8.4 released

The main focus of this release is a couple of minor bugfixes.

Release Version 0.8.4 (2009.09.19)

Bugfix release.

  • It is now possible to construct an attribute-only search with None for search phrase.

Friday, February 27, 2009

Launched a new Google Group: hypy-discuss

More people are showing interest in the library, so we need a place to go to discuss things archivably: this Google Group for Hypy is it.

Saturday, February 21, 2009

Penny Arcade D&D Podcast - this one has Wil Wheaton

Gabe's artwork for series 2 #1
The newest series of PA D&D Podcasts has started out at the maximum level for funny.  I was literally - not figuratively, not "LOL" but literally by which I mean with my literal lungs - walking around laughing out loud at this in a supermarket.

(First series starts here, but get a podcatcher and subscribe to the feed you technophobe.)

dpkg-origins: 0.9.1

Fixed a minor bug in dpkg-origins. It would crash when a partially-configured but obsoleted package was found in the index. (You might see this in dpkg -l as 'uc' or 'ic'.)  You would probably see this after a dist-upgrade, like I did.  Fixed this bug.

(See this post about dpkg-origins.)

Go get the dpkg-origins script.


Tuesday, January 20, 2009

Hypy 0.8.2 released

A minor version release of Hypy.  No material bugs reported so far.  That's good for my users, but bad for me because I can't do more releases until bugs get reported for me to fix. :-)

Some people would not have been able to easy_install release 0.8.1, so this release fixes that.

Hypy is a fulltext search interface for Python applications.

Homepage, downloads, everything: http://goonmill.org/hypy/

Release Version 0.8.2 (2009-01-20)
  • I was unconditionally importing ez_setup in my setup.py and that makes it hard to easy_install.  Don't do that.
  • No library functionality change, but now more users can install it.

Tuesday, January 06, 2009

On demonstrating the value of unit tests to beginners

A little anecdote.  I'm slowly trying to get my team to wrap their heads around the idea that any new feature must be accompanied by unit tests as we near the point where they are absolutely required to write unit tests before they write code and the tests become part of the deliverable.  One thing I know is that if you haven't written a lot of unit tests yet, you don't really understand the value of them except very much in the abstract, so I am also trying to point out the value to him as we go.

One of my developers is writing a function that uses the compiler module to inspect some Python code, it's not really important why.  He had just learned how to write some unit tests in Javascript and I was teaching him how to use the stdlib unittest module for his unit tests written in Python.   His implementation isn't written yet, he is just starting to figure out what the interfaces look like, which is a great time to start writing failing tests.

I told him, start with this:

import unittest

class MyTestCase(unittest.TestCase):
  def test_myParseFunction(self):
    assert 0


.. and run that test, which he did, and it failed, and I said "good".  I started pointing out to him ways he could make very minor modifications to his code to make it easier to test (not nearly enough has been written on the subject of making code easier to test, BTW--bloggers, get on it!).

One of the improvements I asked him to make was to move some functions into another, more relevant module than the one he was working in.  He did that, then wrote version two of the unit test:

import unittest
import mynewmodule

class MyTestCase(unittest.TestCase):
  def test_myParseFunction(self):
    self.assertEqual(mynewmodule.myParseFunction("(python.code)"), [expected, output, structure])


Now, remember that he hasn't implemented myParseFunction yet.  So I asked him to run his failing test one more time.  And, a surprise to both of us, we got this:

[ERROR]: test_mymodule.MyTestCase.test_myParseFunction

Traceback (most recent call last):
  File "/usr/lib/python2.5/unittest.py", line 260, in run
    testMethod()
  File ".../test_mymodule.py", line 7, in test_myParseFunction
    self.assertEqual(mynewmodule.myParseFunction("(python.code)"), [expected, output, structure])
  File ".../mynewmodule.py", line 19, in myParseFunction
    return compiler.parse(s)
exceptions.NameError: global name 'compiler' is not defined


What the.. oh right!  He imported compiler in the original module, but forgot to move it to the new module.  The unit test - so far, one line long and expected to fail in a relatively uninteresting way, had already found a bug.  My favorite part was that it happened this way to someone learning why we put so much value on unit tests.

Monday, December 15, 2008

Hypy 0.8.1 - Get your search on here.

Hypy is a fulltext search interface for Python applications. Use it to index and search your documents from Python code. Hypy is based on the estraiernative bindings by Yusuke Yoshida.
  • Fast, scalable
  • Perfect recall ratio by N-gram method
  • High precision by hybrid mechanism of N-gram and morphological analyzer
  • Phrase search, regular expressions, attribute search (including numeric and date comparisons), and similarity search
  • Simple and powerful API
Homepage, downloads, everything, etc.: http://goonmill.org/hypy/

This is of course on pypi and can be installed with easy_install or pip. You will need Hyper Estraier installed to use it.

Release Version 0.8.1 (2008.12.15)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Initial Public Opensourcing.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Friday, December 12, 2008

Sometimes good User Experience means ignoring sanity

Found on Launchpad's "register a project" page, this was one of four FAQ-ish bullet points:
  • Requesting Ubuntu CDs is done at shipit.ubuntu.com
    (this may sound weird to you, but a lot of people register projects asking for CDs!)
I think this is a practical solution to a real, if insane, problem.  Nice touch on the button, too.

Wednesday, November 12, 2008

"phrase from nearest book" meme

From Agile Testing

The meme:
  • Grab the nearest book.
  • Open it to page 56.
  • Find the fifth sentence.
  • Post the text of the sentence in your journal along with these instructions.
  • Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.
I am about to make a parody of myself, but this is honest to god page 56 sentence 5 of the closest book to me (apart from a pamphlet on health insurance which was not 56 pages long).

"Magical weapons and other spells (such as lightning bolt) inflict normal damage on him."

Yes, I am reading from the D&D Rules Cyclopedia, a collection of all the Red box/Blue box D&D rules, published 1991.

Sunday, November 09, 2008

Update to dpkg-origins installed package lister

Fixed a serious bug with dpkg-origins (see this post about dpkg-origins).  I forgot to have it check for status 'rc' packages.  These are packages that were installed and then removed.

It now handles them correctly.  (That's what I get for testing on a brand-spanking-new installation of Ubuntu.)

I've also put a version string into it: 0.9, because I'm actually using it myself in my backup plan now, which makes it near production ready!  Go get the dpkg-origins script.

Tuesday, November 04, 2008

U.S. Citizens: Go Make History

Also, can I just say I'm really glad my polling place still uses black felt-tip pens and an optical scanner?  I trust these things way more.  No hanging chads, very nice paper trail.

That is all.

Sunday, November 02, 2008

Ubuntu backup tip: save your package selections, including third-party, for later recovery

Today I wrote a little Python script which will pull a list of all of your installed packages, and then group them by Canonical-supplied, third-party PPA supplied, and manually installed .deb files.  This makes it a snap to automatically restore your package list if your system takes a dump, and even quickly put back your PPAs and manual debs as you go.

It requires python-twisted and python-apt installed.  Here is the script: dpkg-origins.

Recommended usage: Add this command to a script inside /etc/cron.daily:
  dpkg-origins | mail -s "Package selections for `hostname -s` as of `date`" yourname@youremail.com

When calamity strikes and you need to restore, you can pipe this file directly:

  cat selections.txt | sudo dpkg --set-selections && apt-get -u dselect-upgrade

This will begin installing all of the Canonical-supplied packages in selections.txt.  All other packages are commented out, but the file itself contains instructions for restoring your PPA's; then you uncomment some more packages and run the above again.  Finally, at the very top of the file, you will find a commented-out list of the packages (and versions) which were installed directly from a .deb file; manually download and install those.

Friday, October 31, 2008

Hiring in Portland and Fresno

Decipher is hiring web developers.  Decipher is also paying people who know web developers - up to $1000 just for knowing someone who needs a job.  Details below.

We're looking for a manual tester and test engineers in Fresno, CA.
We're looking for web designers, people experienced with design and prototyping on the web, and software engineers in Portland, OR.
If you are one of these people, send us your resume!  If you know one of these people, send us their resume!  We are paying referral bonuses of $250 if we hire your referral, and an additional $750 if they stay at Decipher for 6 months!

Wednesday, October 15, 2008

This is that part in the painting where God's finger touches Adam's

I've been making very exciting progress on Goonmill lately.  The user interface has undergone a complete overhaul, and I undertook a lot of interesting challenges in getting a precise, cross-browser layout with a maximum focus on GM usability.

I've gotten it up to the point where I can use it myself by maintaing (with Tomboy) a Dogfood list, a list of everything I've noticed which would annoy me too much to use it.  As I go through and fix things, I would add to the list, so the list continually gets longer but the things remaining to fix still get shorter over time because I fix more than I find.

As of this writing, that list is 39 items, with 33 crossed off.

I really feel like Goonmill is going to become a useful resource to other people, and I'm looking forward to doing some blog posts or maybe even some kind of lightning talk somewhere on the application of Athena, Twisted and Prototype to a real, modern-look-and-feel web application with a purpose.

Monday, October 13, 2008

Goonmill - still seeking art - samples here!

I mentioned this earlier: I am seeking samples of art for monsters in the System Reference Document for D&D 3.5. These must be openly-licensed, i.e. CC-BY, public domain or other non-restrictive license.  (It must allow derivatives and commercial uses.)  The purpose is to pile the artwork up until every monster in the books has free token art to go with it.  This will make it much easier to include with Virtual Gaming Tables, RPG management software, and the like, but I want it free enough that people can think of their own uses, and not have to worry about whether they are breaking copyright law.  Publish it with your module PDF?  Make a Flash game with it?  I don't see why not.

I am publishing thumbnails of what I have so far, with a complete table of all the monsters.  I need images of 500+ of these monsters, but I have 165 covered so far!  A lot of them would be easy because there is so much repetition; for example, if I had one decent CC-licensed dragon, I could just recolor and reposition him and cover about 95 dragons in that list (not an exaggeration).

There are 110 unique, freely-licensed images in the index below, and (because of duplication) they cover about 165 of the monster entries.

The sample page of my freely-licensed Monster Art.

At the top of the page are thumbnails of all the images I have, culled from commons.wikimedia.org.  Below that is a table with all the monsters in the SRD, next to the filename of an image if it has one.  My top priority is getting the table filled; second priority is getting higher quality images and more variety for some of them.  Third priority is getting alternate images for as many as possible, so that a creator has a choice of which token to use.

I will release the full archive (full-sized images) as soon as I get off my lazy butt and go get the attributions i need for some of those 110 images.  While they are all freely licensed, some of them do require attribution, and I owe it to the creators to at least provide that before I publish fully.

The reason I am picking this back up again is the Encounter-a-Day blog is throwing around the idea of a monster manual wiki (which I think should be named the Mob Manual), and I have offered this index to help out.

Monday, October 06, 2008

Prism on Ubuntu

I downloaded and started playing with Prism.  And it actually worked, which is cool.  There were only two setup steps:
  1. Unpack the tarball in /usr/local/prism, or /opt/prism or something.
  2. Symlink /usr/lib/firefox/plugins <- /usr/local/prism/plugins so Flash etc. works.
Unsurprisingly, there are still some problems.
  • The Refractor for Prism extension doesn't work very well.  Likely this is a problem with Refractor and not Prism, but what it does is it creates a shortcut icon on the desktop.  The shortcut runs your system Firefox, i.e. the same executable you are using Refractor for.  It doesn't ask for the location of the prism executable. It writes the webapp config to the wrong place, and it puts the wrong options into the Launcher.  That's kinda useless by itself.
  • Running /usr/local/prism/prism and then typing in a URL did create a working shortcut, but unlike Refractor, it didn't automatically grab an icon from the website.  You can try, instead, using Refractor to create the launcher, and then editing the command line so it points to /usr/local/prism/prism, get rid of every option except the "-webapp xxx@xxx" arg, and then move the webapp config dir it creates from ~/.webapps to ~/.prism/$profile/webapps.  It's about the same amount of work as downloading the icon yourself.  Either way, the setup of a webapp is a bit of a mess right now.
  • You get a blank profile, so your fonts, addons, user stylesheets etc. are all missing.  You might be able to fix this by copying a profile from ~/.mozilla/firefox to ~/.prism, and then running prism -ProfileManager, but I didn't experiment.
And one show-stoppingly dumb problem:
  • Every prism application runs in the same process.
I created one for Pandora (which worked fine, once I symlinked Flash), and one for Google Reader.  Ran them both.  Pressed Ctrl+Q to quit one of them . . . and the other one shut down at the same time.  I mean, what?  Isn't a big part of the point of prism to isolate your apps from one another?  If one of them crashes, they don't all crash, and that sort of thing?  That's lame, so sorry, I won't be using Prism yet.

Thursday, September 18, 2008

Bankers of the world: A request

If you're planning to throw yourself on a ritual funeral pyre in the next few days, do you think you could carry the record of my mortgage with you?  Consider it a just atonement.

Thanks!

Wednesday, September 17, 2008

People on the Internets: A request

Please put dates on your pages, such as release notes.  I can't tell how old your page is otherwise.  Thanks!

- Committee of Citizens Concerned About Bitrot on the Internet

Saturday, September 13, 2008

Chrome to have Extensions "Next"

About a week ago, a senior VP at Google announced that yes, they are going to be putting extension support into Chrome.  I'm relieved to hear it.