Articles by corprew

You are currently browsing corprew’s articles.

The monthly get together for the organization that I’m the secretary/treasurer of the regional chapter of. If this sort of thing interests you, c’mon by.

Once a month, we get together to have drinks, chat, network, and geek out with fellow information architects, librarians, usability experts, user experience designers, and other like-minded user-centered professionals and students. It’s open to anyone, so bring a friend — especially those in other local organizations! The format will be casual, but all are encouraged to bring something to discuss — recent work, an interesting topic, or even your resume. This event is organized by the Pacific Northwest chapter of the American Society for Information Science & Technology.

What: Seattle Monthly Information Architecture Meetup
http://ia.meetup.com/57
Where: Elysian Pub, 1221 E. Pike St., Seattle, WA
When: 7-10pm, May 13th (2nd Tuesday of every month)

This and the next several are when the students will come in a big drove most likely, so if you’re looking to hire new grads in the information professions, it’s a good bet.

Tags: , , , , , ,

The last while, I’ve been working on the North Atlantic Bloom 08 Collaboratory Website at UW(ashington) APL. I finished that today (mostly, I imagine requests will continue to come in over time), and the science team is out in the North Atlantic doing science and working with their autonomous instruments as they measure phytoplankton and thus carbon flux.

It’s awesome, check it out.

Tags: , , , , , , ,




IMG_4018

Originally uploaded by javith

Last week, we went to rainier vista and had a reception with the Seattle Housing Authority, Ignition NW board members, and a lot of residents of rainier vista and members of other Seattle Communities.

This tree, designed by Seattle’s Iron Monkeys, is the first permanent art piece installed by a grant from Ignition NW. It’s going into Rainier Vista, a mixed income housing project in Seattle that is pretty much ideal as far as neighborhoods go, and right next to public transit.

Our efforts at getting involved in our local community are paying off!

Tags: , , , , , , ,

Cory Doctorow will be reading from his recent Little Brother at the ballard branch of SPL on may 19th. I’m planning to be there, the progreff of nature depending.

Tags: , , , , , , ,

So, I’ve been doing a lot of research into logging & dispatching recently for one of the volunteer organizations that I’m a lead in. In the course of this, I came across this on http://www.history.navy.mil/faqs/faq73-1.htm

Deck logs are not “Captain’s Logs”

A deck log is not a daily diary written by the ship’s captain. The “captain’s log” was a dramatic device used by the creators of the televison series Star Trek to introduce each episode, and does not exist in the U.S. Navy.

People must have been asking. This is strangely hilarious

Tags: , , , , , , , , , ,

This will be my last town hall of this term on the INW board. I am probably going to take a year off before seeking another term. It should be an interesting time, if a bit tear-jerked. Well, actually not tear-jerked, but it will be strangely bittersweet to leave the board of an organization that I’ve worked on first creating and then serving on the board of for 5-6 years now (and 9 years in some ways.)


What: The Ignition Northwest Spring Town Hall

When: Tonight, 4/17 at 7:00

Where: The CHAC Lower Level (just down the ramp) at 12th and Pine

Come on down TONIGHT for the INW Spring Town Hall. You could learn things to your advantage. On the agenda.

  • Critical Massive Updates
  • Election Information
  • INW Outreach
  • New Festivals
  • Art Art ART!
  • New INW Programs
  • Community Announcements
  • Oh, and did I mention…T-Shirts?

Come on down. See and be seen. Meet your community. Learn what we’ve done and what we’re going to do and how YOU can be a part of it. I hope to see you all there.

Tags: , , , , , ,

Drupal 5 has a few problems in its security layer, as I’ve mentioned other places, and some of them stem from the sort of ‘it-works-for-me’ philosophy of open source. This is particularly a problem in a complex system like Drupal, which in most installations is made up of a few dozen modules in addition to the core.

The current issue I’m having is that nodes created by the aggregation module get their taxonomy stripped when they’re updated because of how another module uses the security functionality, which is just hilarious in a site that’s largely organized organically by taxonomy. So, after talking with the people I’m working for on the site, I ended up creating a simple PHP script to run through cron that fixes the issues ‘the hard way.’

If you check out this query…

function fix_object($name, $sqlcon)
{
  $query = "SELECT term_data.name name, term_data.tid termid, node.nid nodeid, node.title title FROM node LEFT JOIN term_node  ON ( term_node.nid = node.nid ) LEFT JOIN term_data ON ( term_data.tid = term_node.tid ) WHERE node.type = 'aggregation_item ' AND node.title LIKE 'Xxxxx " . $name . "%'";
 
  // Perform Query
  $result = mysql_query($query);
 // ... and so on...

You can see that this is a fairly normal sql query that looks for all the nodes of type aggregation_item and titled a particular pattern. Because of the way the joins are structured, that means that any nodes that have lost their taxonomies will have NULL for termname and termid. Those nodeids with NULL termids can then have the proper taxonomy entries stuffed back into them…

function insert_taxo_4_node($node_id, $taxo_id, $con)
{
  $query = "INSERT INTO term_node (nid, tid) VALUES (". $node_id . "," . $taxo_id . ")";
 
  $result = mysql_query($query);
  // Check result
  // This shows the actual query sent to MySQL, and the error. Useful for debugging.
  if (!$result) 
    {
      $message  = 'Invalid query: ' . mysql_error() . "\n";
      $message .= 'Whole query: ' . $query;
      die($message);
    }
}

I’m largely posting this up in case people run into the same problem — this is a hilariously simple fix for a difficult to fix problem in drupal, but it’s a generic information architecture issue of what to do when the system that you’re working on is unreliable. I should probably mention that the issues with security in drupal aren’t related to authentication, but instead are related to item ACLs denying access to things for strange reasons, and are not crucial security bugs in the OMG MUST PATCH NOW sense.

Tags: , , , , , , , , , , , ,

Although, as the trainers noted, it sounds like the set up to a joke, Burning Man takes providing management training to its senior volunteers and staff members very seriously. As part of my Quinfecta of Frenetic Activity down in SFO, I went to the 2008 version of said training.

Because of BM’s nature as a largely community-driven and volunteer-based organization, their management priorities are a little different than other organizations. It’s very simple, really, and I can sum up the difference in three words:

RESPECT EMERGENT BEHAVIOR

This shows up in a number of ways, in respecting the ideas that volunteers come up with, in coping with what emerges from chaos every year, and in generally planning from middle-up or bottom-up instead of top-down when possible. The respect emergent behavior is a spin of mine on it, but it’s something that I’ve had as a part of my core management philosophy for a while, so I was suprised and pleased to hear burning man talking about it.

Tags: , , , , , ,

yuris night 08 I was down in the bay area this weekend, so I went over to Yuri’s Night Bay Area 08, which was a party held in honor of Yuri Gagarin’s mission to earth orbit — the first time a human had left the surface of the planet in that dramatic a fashion. It’s turned into a somewhat generic celebration of humanity’s scientific achievements and hope for the future, at least locally, but it’s still held on an active NASA airfield at a NASA Base (Moffet field at NASA Ames.) I’m very much in favor of the idea of progress and not giving up on the future, so I’m pretty enthusiastic that there’s a party celebrating this sort of thing.

I’d heard about Yuri’s Night in previous years, and there was one in Seattle this year, but I very much wanted to go to the Bay Area one, so I was happy when my plans fell along with it. I was fortunate enough to be able to volunteer as security staff for the event, and got to hang out with a number of other friends of mine who were also volunteering. It was, all in all, an awesome time; although as someone who’s hilariously allergic to wheat, I need to remember to bring Lara Bars in infinite numbers to events when there isn’t easy-in, easy-out.

The exhibits were awesome, the theme was awesome, my friends were very much in evidence, and it was altogether a great time. I’m very glad that I was able to go.

Tags: , , , , , , ,

I’ve been working on a website in RoR for the last while, and it’s about to go live in the private beta sort of way that seems to be so popular these days. It’s handy that way, because that way I can set up the site at slicehost or similar and not have to worry (too much) about my server slowing from getting overloaded. This same site’s next incarnation is going to be facebook related, so that should overwhelm any sense of moderation (if I’m lucky.)

So, the key method of invitation to a private beta is that you mail someone a code allowing them access to the system, for these purposes, let’s just assume that the code is some reasonably long unique string (in my code, it’s actually a uuid.) So, set up a migration something like this to manage them:

  def self.up
    create_table :invites do |t|
# deleted stuff
      t.string :guid
      t.integer :used_yet
# deleted stuff
    end
  end

used_yet isn’t a boolean for reasons that are too laborious to go into here, but reflect some functionality in the code that I’m not going to display. Assuming that you’re using acts_as_authentication and are redirecting anyone who tries to access your app to the default welcome page according to the usual methods, set up something like this in your routes.rb:

  map.root :controller => "welcome"

This is probably the case in like half the rails apps out there. Have the index method of the welcome controller put up a form with a field like:

#let's see if the formatter can handle rails erb without exploding.
< % form_tag('welcome/checkinvite', :method=>:get) do -%>
  < %= text_field_tag 'invite' %>
  < %= submit_tag 'begin' %>
< % end -%>

This lets the user enter their invite in more or less the normal method. Now in your ‘welcome’ controller, you’ll need a ‘checkinvite’ method that looks something like the following:

 def checkinvite
    @inviteguid = params[:invite]
    @invite = Invite.find_by_guid(@inviteguid)
    if(@invite == nil)
      flash[:notice] = "Your invite was invalid"
      redirect_to root_url
      return
    end
    if(@invite.used_yet == 1)
      flash[:notice] = "Your invite had already been used"
      redirect_to root_url
      return
    end
  end

After this, you’ll need to have some code in your HTML page that links you to the account/signup functionality of acts_as_authenticated. I’m not going to include that because I’m too lazy to fish it out of my app functionality, but you can do that pretty much with a link_to using :invite=%gt;@invite_guid as an extra parameter.

You need to put the same invite detection code in account/signup, and then when you’ve created the account, set invite.used_yet = 1. This is about as simple as a method that I can think of for doing the private beta functionality that seems to be so much in vogue these days. Enjoy.

Tags: , , , , , , , , , , , , ,

The Telegraph Arts Blog is the latest media source that I look at on a regular basis to mention LOLCat Wasteland. Somehow, that counts more than friend’s blogs and more livejournals than I thought likely.

2008 April 16 by corprew | No comments

There have been a lot of people asking angry questions to Apple today because the Apple β that they gave out to iPhone developers was timed to expire today and a lot of devs now have bricked their main mobile phone until an update appears. Lots of people appear angry, but they’re missing the main issue for Apple:

Dear Apple, why are you letting people this stupid into your β programs

People frequently forget what beta for software means in these days where everything is β until people find a way to make money off of it. It means untested, believed working properly but may blow up at any time, not ready for production. So, I’m halfway between bemused and annoyed at the outrage that some folks seem to be fielding on various fora.

Also, calling a phone ‘bricked’ when you can easily recover it by downloading new software hours later is hitting the epistemological puff pastry with a hammer.

Tags: , , ,

Yesterday morning, because my life hasn’t been busy enough the last while, I woke up, got my shit together, and then went down to the 37th precinct. My district went fairly strongly for Obama (6:1 or 8:1), and I was an alternate delegate for Obama. I figured to go and see what was happening, and it was generally a good time, but long. I generally don’t talk much about my personal beliefs here, but someone asked me to put up this writeup that I originally put in a public forum.

Act I: the beginning (1 hour)

The first hour was spent registering for my precinct, and then sitting in the bleachers waiting for things to happen. I noticed something in particular, which was that a lot of the Clinton delegates who showed up were fairly hostile, which was strange, and generally about 10 years older than I was. This (the age) was a surprise, because at my precinct caucus, the people who showed up were more or less demographically indistinguishable from any other crowd of seattleites. The Obama delegates had about the same number of people of that age, but it was if the Clinton campaign only took that demographic. (This is, of course, a generalization and completely anecdotal evidence.)

I had a lot of fun talking to a delegate (for Clinton) that I knew from a company I worked at several years ago. I also made some new friends who were also Obama delegates. At the precinct level, there were a lot of people who I knew through their involvement in the Seattle tech community. The only person I saw from my precinct at the district caucus was a really bad Clinton delegate whose speech at the precinct caucus switched a bunch of people over to Obama.

Act II: the interlude (2 hours)

A lot of the second act was spent writing email on my iPhone to various people, because not a lot was happening. A record number of people wanted to be delegates for Obama at the next level (around 500, one announcement said), which was a number that was past unprecedented and into WTF? areas. I spent a bunch of time talking to the union organizer who was there (because I was in UAW for a while (graduate assistants at the UW), I got a nifty UNION DELEGATE sticker.)

We had a bunch of speakers during this time. A lot of the judges that we have the opportunity to vote for came up and spoke. We also had Ed Murray, our district’s state senator talk for a while, which is always fun. Ed Murray is my favorite Seattle politician because he always brings up his ties to minority communities by stressing that his fiancee (male) of 17 years is Asian. Most Seattle/Washington politicians at least once you get past the Seattle level are mostly Irish, and their attempts to connect to the whole crowd are frequently bizarre logic jumps. (My ancestry is mostly also Scots and Irish, I just hate bad logic.)

Also speaking was Jim McDermott, whose speech was essentially ‘My colleagues in Washington are always amazed by the fact that I keep acting like an ultraliberal freak and you people keep sending me back. But that’s why you do it, Right?’ … the crowd then goes wild, which it generally does when he says things like this. This is a true thing he is saying, they don’t call this the People’s Republic of Washington for nothing, folks.

Eventually, the mass crowds died out and they processed everyone through. I was in the last group of alternates to be called out of the ‘alternate and guest bleachers,’ the methodology for this strangely resembled The Price Is Right.

Act III: Dramatis Personae & Exeunt Omnes (1 hour)

As I was walking over to my credentials check across the high school gym, the announcer called out that Sean Astin was in the crowd and would be addressing the audience. I’d been getting ‘dodgeballs’ that ‘Sam’ was at other caucuses, but there was a lot of idiot SMS traffic that day and I was more or less ignoring it. But, Sean Astin came out to speak on behalf of Hilary Clinton. However, by the time he reached our crowd, all the delegates but me and about 30 other people were already seated in the other room.

I walked over to the auditorium where the delegates were sitting, and it was so packed that I ended up sitting outside and chatting with my friends Eric K (Clinton) and Brian W (Obama). Eric has been a perpetual nuisance on the local burningman-bcwa lists with his strident Clinton cheering, which I only object to when he’s just promulgating media spin and not giving his own opinions. So, I chatted with them for about an hour. Mostly, we just talked about the event and the day, because we both know the others well enough to know that we’re all fixed in opinion.

Act IV: Performance Art and Resolution (1.5 hours or more)

Eventually, the Obama delegates left the clinton delegates in the auditorium and went back to the gym (because it was bigger), and each delegate who wanted to go on to the state level got 30 seconds to describe their qualifications to go. Lots of people spoke, but I think the total list was only about 100 - 200 rather than the original 500. So, people spoke about why they should go, some were funny, some were insightful, some were strident. After a really long time, we got our delegate voting sheets and I voted for the people I thought should go and then left. I missed some of the speakers, but I had said I’d actually get work done today. I think I selected a good range of people, but I was also pretty damn tired by this point.

My overall thoughts on the process is that the Obama campaign seems to be so successful here that it’s actually overwhelming the machinery of the democratic party through the amount of turnout it’s causing. Things that would usually just be a short exercise by the party faithful are getting many times the normal turnout. This doesn’t seem to be a plan on the Obama campaign’s part, it’s just occasioning such high turnouts and enthusiasm that the small number of volunteers that would typically suffice for these things are getting overrun.

Tags: , , , , , , , , , , , ,

I’ve currently got about a half dozen small projects going of various sorts (but am always looking for more and/or an actual full time job given that ), but one group that’s been a real pleasure to work with for the last month or so has been the North Atlantic Bloom Project, I’m making them a website that includes various features like maps, instrument data that populates into websites for site navigation and the like, and is based on drupal.

My current interests (this week) are macintosh development, semantics (RDF), embodied philosophy and category (Lakoff), drupal, iPhone development, good coding practices, and project lifecycle management (from soup to nuts.) My interests next week will be getting a website off the ground that I unexpectedly ended up owning after a contract fell through. That was suprising and not entirely pleasant, but will see what can be done to have matters turn out positively.

2008 April 04 by corprew | No comments

I’ve been working for the scientists over at the North Atlantic Bloom 08 as part o the team making their collaboratory. This project has mostly been based on Drupal, which is a content management system (in the web sense, not the ECM sense) based largely on PHP.

One part of this is taking a lot of content over email — the scientists creating a lot of the content on the site are in the middle of the North Atlantic. Because of this, I’ve been using the drupal module mailhandler for a lot of things that would normally be done directly through the site.

Basically, changing the comparison from $data[0]=='taxonomy' to a case-insenstive comparison:

 if ((0==strcasecmp($data[0],'taxonomy')) && !is_numeric($data[1][0])) {

allows users to send in messages and have their mostly unambiguous intention followed. This is, in general, a good thing, and reflects the general net protocol practice of “be conservative in what you send, be liberal in what you accept.’ This is a general guide to good behavior and successful implementation and is generally called the Robustness Principle. I advise everyone to check out RFC 1122, because it has many entertaining things to say about the nature of the Internet at the protocol level.

Anyway, so when you can actually figure out what the person meant to be doing, you should probably accept it. This is a generic problem that pops up every now and then with computers. Surprisingly often, it pops up with case sensitivity at the protocol level. Here’s another moment for me with that same issue from about 7 years ago in Apache SOAP:

I proposed changing it to:

for (int i = 0; i < pds.length; i++) 
{ 
    if (0 == propertyName.compareToIgnoreCase(pds[i].getName())) 
      { 
        return pds[i].getWriteMethod(); 
      } 
}

from:

for (int i = 0; i < pds.length; i++) 
{ 
    if (propertyName.equals(pds[i].getName())) 
      { 
        return pds[i].getWriteMethod(); 
      } 
}

This does more or less the same thing, but is in Java. This was a case where the apache implementation wasn’t interoperating with the Microsoft implementation because the MSFT implementation had a different valid interpretation of the SOAP specification than the Apache server did. Both implementations had completely reasonable behavior, but when the MS SOAP implementation responded to Apache, it did so with its own capitalization semantics (based on COM — PropertyName) instead of the Apache SOAP capitalization semantics (based on Java — propertyName). So, this is an ongoing problem that keeps showing up again and again.

I appear to be destined to run into it and advocate for the robustness principle in every technology i use, apparently. Either that, or it’s just a slow day and I’m rambling.

Tags: , , , , , , , , , , , , , , ,

My first access to a unix machine was around 19 years ago, and I’m still amazined that sudo tcsh is a valid command on most systems.

I’m not saying that it isn’t convenient, mind you, but the fact that I can then execute emacs is also hilarious. Especially because sudo emacs is prohibited.

here is your system log, let me save you the trouble of auditing it by running a shell.

(I’m aware, incidentally, that it’s basically impossible to stop people from running a shell as long as they can run any naive-turing-complete interpreter or compiler. Maybe it’s time to only fight battles you can win.)

Tags: , , ,

note that the latest revision of this blog’s theme seems to have introduced a weird bug with the code layout plugin (wp-syntax) on some browsers. i’m looking into it.

I think the single most useful thing I’ve figured out recently in programming for MacOSX and the iPhone is this little snippet right here.

- (void) updateListForEntityNamed:(NSString*) entityName andSearchString:(NSString*) queryString
{
[...]
 
	MyDocument* current = [[NSDocumentController sharedDocumentController] currentDocument];
	if(current && current != self)
	{
		NSLog(@"CurrentDocument:%@ != self:%@", current, self);
		[current updateListForEntityNamed: entityName andSearchString: queryString];
		return;
	}
[...]
}

What this does is intercept incoming messages that are supposed to go to the current window, and redirect them to that instance. I’ve run into issues in Leopard (MacOSX 10.5) where this is an issue. To some extent, this is probably a misconfiguration in interface builder somewhere, but it also an issue when using CoreData, because the ManagedObjectContexts are particular to instances of NSManagedDocument, and there are issues that arise if you end up using the wrong context.

I am slowly becoming a great fan of CoreData, it’s a great persistence/object-graph-management layer. More on this later.

Tags: , , , , , , , , ,

i greatly prefer the spelling ‘busses’ to ‘buses’ although either spelling is correct.

2008 March 12 by corprew | 1 comment

Noted flaneur Tom Dobrowolsky of Urban Archives and Seattlest (and a friend of mine from grad school) wrote a poem about riding by me on the bus the other day, and I have saved it here for posterity.

I saw Corprew today
outside the window of my bus.
He was standing at the corner
stuffing a laptop or something like that
into his compact bag.                                       5
He looked intent.

This is my favorite non-ovary related poem written on, by, or about mass transit in Seattle.

It IS a fine morning. I was coming from a consulting gig I currently have going with folks whose offices are in the University District, and I’d just bought a plastic hardshell for my MacBook Pro.

Tags: , , , , , , , , ,

Tidbits, the apple weekly newsletter, missed the joke in their review of Apple Aperture 2.0.1.

In your review of Aperture 2.0.1, you note:

(Incidentally, the two videos on that page use Apple’s Victoria text-to-speech voice for the narration instead of a human voiceover, a practice I’ve not noticed before. It took a few seconds to pick out what was “wrong” - the occasional clipped words and odd pronunciations that indicated an artificial voice.)

This is a reference to the computer game Portal, the main antagonist in that game is a computer named GlaDOS, who has a voice somewhat similar to the victoria voice and that’s also the reason that there are some grammatical irregularities in the dialogue as well. (”Aperture [Noun]”, which is said several times alludes to how the computer in that game says “Aperture Science,” the name of the company.)

http://www.youtube.com/watch?v=TluRVBhmf8w
http://www.youtube.com/watch?v=j0PDGp1hL4w

Thanks,

–Corprew

Not relevant to anything in particular, but funny.

Tags: , , , , , , ,

This last week was the InfoCamp 2008 kick off meeting. After a successful 2007 event, we’ve decided to do it again and to expand it further. This year we have Aaron, Kristen, Andy, Rachel and myself back again, and we’re also joined by Genevieve, a librarian from PLU, and Joshua, a student at the UW Information School.

Aaron and Kristen graciously cooked food for the lot of us, and we had a great initial planning meeting in which we identified roles and people responsible for roles, and then talked for a bit about the future of the ASIS&T PNW. I’m very much looking forward to doing another InfoCamp with this team, it should be a lot of fun.

We’re looking to have a much easier time this year since we have the experience of doing the conference last year, and are also starting much earlier in the year with our planning. It will continue to be an unconference serving (primarily) the PNW Information Science community.

Tags: , , , , , , , ,

gloriously, i upgraded to the latest version of wordpress today, and the upgrade ate all my tags. that fails to be awesome in real ways, but i remain generally happy with wordpress.

2008 March 02 by corprew | No comments

Follow-up to the Total Eclipse (of the Heart) event I organized at Cal Anderson park. There’s been some media coverage, which has for the most part been quite nice.

More singers climbed the hill already singing the song, like a weird version of that old “I’d Like to Buy the World a Coke” commercial. And it was an honestly touching event: It’s hard to convey the power of dozens of people repeatedly singing “Forever’s gonna start tonight” all at once, but if you were there and you didn’t feel tingles, you must be a little dead inside.

Yesterday’s coverage from the Stranger’s Music Blog, which was really quite nice. I’m going to have to do a full media and blog roundup at some point, there has been rather a lot.

Dear All:

Please join me in Cal Anderson park on February 20th at 7:01PM to sing Total Eclipse of the Heart karaoke style for the 51 minutes that the eclipse is, in fact, total. There is a page for this event, and if you want to hold a similar event in another place, I will post it there.

total eclipse

If you want to bring along music to sing along to with your boombox, feel free. If you want to play an instrument, feel free. If you want to bring your whole band, go ahead. I will have a megaphone so that people can take their turn on the top of the hill if they want. If you bring your own megaphone, don’t be a dick.

Cal Anderson Park: http://www.seattle.gov/parks/park_detail.asp?id=3102

Event Start: 6:30P - End: ???
Totality Start: 7:01P - End: 7:52P

We go mobile if it seems like a good idea. It’s also my birthday the next day.

Feel free to pass this invitation along to whomever. Ideally, the skies will be clear enough to actually witness the Total Eclipse (of the Heart.)

Dress however you like, I suggest warm, festive, and moisture resistant.

Don’t come to take pictures, come to sing!

You may wish to bring coffee or other life-giving drink.

Inspiration:

fun will be had.

Tags:

A blog at the Boston Globe calls my LOLCat Wasteland adaption ‘The Most Astonishing Literary Parody of 2007.’ This makes me insanely happy.

All told, we had 95 people known through the door for the conference, and probably a few more (so, say, an even 100) if you included the people who didn’t bother to register. (It was free for many attendees, and we think a bunch of people, knowing it was free, ghosted the conference.) That’s pretty awesome for a first-time conference in a community which hasn’t really done the unconference thing before.

InfoCamp 2007 was a great success, and I am really happy about the way that it went. There were roughly 50 sessions over 2 days, and roughly 85 participants. It was a great relief, and everyone seemed hopeful that there’d be another one next year and there wasn’t too much negative feedback, and that’s about as high praise as you can expect.

My session was called “Thesaurus, Ontology, and Inference” and was about the benefits you get from having a minimal amount of semantic data associated with documents — mostly exposing metadata that’s already present in the system and some things you can do with it. I think my presentation confused a bunch of people because I had to cut so much information out (my session was compressed from 60 minutes to 10 for various reasons), but we’ll see how it plays in the long run. I think there’s a lot of difference in the assumptions that I make based on previous work experience and what the IAs/IxDs in the audience have from their work experience. At any rate, got some decent feedback for refining the presentation.

I made it to about half the sessions I wanted, keeping folks moving in the right direction was a time-consuming project. Low time between interrupts, but a lot of good fun. It was especially fun talking to an audience and getting people to introduce their sessions, and I also had a lot of valuable hallway conversations with people. One particular thing I found was a good venue for publishing professional work other than the one I have already, and the fact that there’s a difference in focus between the two helps, so what isn’t wanted by one may be by another.

All in all, I really enjoyed being one of five people running this conference, it was a great time with a great group of people… I look forward to this community growing.

change of pace

For a bit of a change of pace, I rewrote TS Eliot’s The Wasteland in LOLCAT: here. I’ve been off busy for a bit doing various things, should have time for blogging again now.

One of the problems I’m running into a bit with the whole cuneiverse whokno.ws project is distinguishing between discussions about ‘movies’ and discussions about particular movies.

You can currently see this in the whokno.ws test category ‘Shrek,’ which pretty much exists to help test the difference between talking about the concept of movies in general and talking about particular movies.

There’s an algorithm in the whokno.ws core that distinguishes between unrelated concepts with similar written representation, distinguishing between, say China the place and China the porcelain. So, say “China (porcelain) exports from China (country)” still gets a little rocky, but “China (porcelain) exports from, say, Ireland” gets figured out pretty handily. Ideally, though, these concepts are automatically distinguished between and only rarely will a document turn up positive for both of them.

Whokno.ws uses — in its non-trivial web dump form — a SKOS concept map linked to large numbers of data files, term lists, and other impedimenta. A lot of this impedimenta is generated automatically, but some of it isn’t. It isn’t an ontology in the most formal sense of the word, although it is going to approach that in september as a source of incredibly accurate information gets mined somewhat to fill out some of the nascent semantic web bits.

The nascent semantic web bits will enable me to accomplish the original goal of whokno.ws pretty easily.

Of course, this would be more impressive if there wasn’t a bunch of bad data in today’s test run, probably causing it to be much… less relevant than usual.

One of the recent changes that I had to make is changing whokno.ws the concept thesaurus, taking it from (roughly) pre-coordinate to (roughly) post-coordinate. The problem here was that the algorithm used to determine group membership wasn’t blending well with the way the principles of divison works. I think this is a problem with statistical techniques generally.

But here’s a simple way to explain it to you: Say I have two sets, and whether you’re in that set is defined as whether an article contains a particular concept. These sets aren’t disjoint, which is to say that there’s an overlap between the two sets. For Whokno.ws, because the modelling of set membership is statistical, doing a computation *combining* the parameters appeared to be the way to go — the ranker would give high scores to things that were about *both* topics. However, it also gives a high score to things that are only about one of the two topics, but *really* about that topic.

What this means is that, say, articles about “bird flu in vietnam” are best found by looking for articles about “bird flu,” and then looking in that set of articles for articles about “vietnam.” This is very interesting to me, because it means that by the proper way to do this is actually by using the “POM” or “BOTD” engines that I’ve already written. Strange.



Today’s whokno.ws task: improving the way that stopwords are calculated. It’s made a decent difference in the article scores, very much for the better.
Tomorrow’s whokno.ws task: adding a (blocking) queue system to the interface between the feed retriever and the parser.
Monday’s whokno.ws task: changing the way that the classifier matches concepts to phrases. (also known as word -> lexical element transition step 1/3.)

Saturday, I went to the morning session of BarCampBankSeattle — I wasn’t able to make it to the other sessions due to work and a wedding — and I attended a couple of sessions about various trends in banking and commerce. I didn’t get to have my session on vertical applications for banking, which is a bit of a shame, but there you go.

I went to three different sessions:

Loyalty Economics
The key question in measuring satisfaction for banking applications (and for many things, I suspect) isn’t “how satisfied are you?” but “how likely would you be to recommend this [whatever] to others?” This, followed up with “why?” is apparently a more useful metric for predicting growth than most others, and is called the Net Promoter Score.

The NPS is measured by asking people to answer that question on a scale of 1-10, and then subtracting the percentage of people who answered 0-6 (your “detractors”) from the percentage of people who answered 9-10 (your “promoters.”) Apparently, the highest rated companies on this score are Harley Davidson, Costco, and USAA.

Money as Primary Social Network
This speaker proposed moving beyond single alternative currencies (such as Ithaca Hours, and various forms of local currencies and hour exchanges) to a system where any group that was large enough in a community could issue their own currency.

This is a strange solution to a well-known problem — sometimes using money to mediate exchange of goods and services fails. This can happen when you have a group of people all willing to exchange with eachother, but they don’t actually have enough money around to mediate the exchange. In the system that currently exists, we’d have to work through informal networks to do that exchange, but in this guy’s proposed system, we’d be able to *issue* eachother currency (essentially formalized network IOUs) to mediate the exchange.

This is all true enough, but I’m not sure that the solution he proposed (100s of currencies in a city the size of seattle all done virtually over the network through a terminal at each vendor) fits the scope of the problem well.

FaceBook and Financial Applications
This was a session about whether facebook is a useful tool for financial applications to use. It mostly came out split between arrant tech utopiana and people talking about human factors in a technical frame, which I think was useful but not relevant.

In short, the conclusion was that “like AOL was, facebook is a tiny closed environment, and it’s hard to see what the impulse is for institutions and apps other than ‘getting stuff up there.’” One participant added “I expect open clients such as the iPhone to be a better investment of my development dollars than working heavily inside of facebook.”

So, that’s my participation wrap-up. Also many congratulations to Betsy and Jason whose wedding celebration I went to Saturday night.

cuneiverse

well, I guess the Cuneiverse project resumes on Monday. :-)

For the last while, I’ve been working on a project that involves scanning large numbers of RSS/Atom feeds, and then using Bayesian1 classifiers to break it into one of a number of categories for summarization and display (the system that I’m using to do this is available as a sample website, but really needs more data in the training sets before it’s ready to entertain all of you.) The categories are pretty straightforward, and they fit into a somewhat neat controlled vocabulary (ontology/thesaurus/whatever.)

There’s a relation, though, between the different terms in this sort of classification and the training data used to build the Bayesian Classifier. If the terms are arranged in a hierarchy (and certain assumptions are made about that hierarchy, like subterms encompassing part of the range of meaning of their parent term and nothing else)2, then the training data used for classifying terms can be shared.

For example, all positive training data that belongs to the child terms can also be used for the parent. So, for (a constructed) example, positive training data for tamiflu also belongs in the positive data for bird flu vaccines. The reverse is true of negative training data. For negative data, the negative data for the parent can also be used for the child terms.

This is highly useful information when you’re making a large scale text classifier (and having it classify texts as belonging to categories or not, as opposed to just clustering texts into the categories that actually appear. It’s easier to use things like bayesian classifiers do to this if you’re looking for somewhat fine-grained detail.

Currently, I’ve been using Classifier4J for doing the classification and text summarization3. The text summarization is sort of annoying, though, because it’s based on a simple statistical choice of sentences which occasionally picks up date-lines and partial phrases because of what’s ‘important.’ I’m resorting the urge to go completely POS-tagging nuts on the whole thing and only selecting sentences of certain types or completeness because this is, after all, a side project. (The number of times I see things like ‘this sentence no verb.’ is astounding, though, and slowly driving me nuts.)

So, another day in the life.

1 although i’m also using a vector space classifier for a related, larger project and it’s driving me less nuts training it.
2 this is called a meronymous (’part-of’) relationship, and given that half the people who regularly read this blog were in LIS530 or its equivalent at some point, you should remember this.
3 and will probably eventually switch to jNBC http://jbnc.sourceforge.net/ before i go nuts

A while ago, I went to hear Chuck Palahniuk speak at Seattle Town Hall, and while he was speaking he said a lot of really entertaining things, but he also said some really interesting things about communication in general. He said that the basis of humor is surprising people, telling them something that they’re not expecting to hear. In his context ( like say in fight club), there’s usually a stark difference between how people act and how we expect them to in everyday life. In addition to all the other sorts of reactions his work provokes, there’s usually some shockingly funny stuff there.

So, that’s humor. But what about other things. Generally, most of us go through life in a state of continuous partial attention, and people find themselves not ever really focusing on one particular thing, too distracted by one thing or another to ever actually get anything done. One reaction to this is the whole Getting Things Done system for actually doing things. It’s very oriented towards keeping tasks somewhat minutely focused, and scoping tasks in and out as needed. I’m not a big fan of GTD, because it’s designed to solve a different personal organization problem than I usually have,

Claude Shannon described a problem of identifying information in his paper A Mathematical Theory of Communication. In it, he describes information as that which you can’t predict from the previously received parts of the message. So, basically, successful time-management people are able to discriminate between the new information (where they focus) and the rest (where they pay continuous partial attention.) You see people attempting to do this (and usually failing) when they’re using their laptops in meetings. Get Things Done is a management strategy for people who are bad at this (and most are.)

When giving information (presenting, teaching, etc…) I try to give people information in a way that allows for this behavior, pushing the main themes much more than the subsidiary and supporting information. This allows the constant partial attention people to blink in and out. However, I also use a lot of humor to get my point across, and to keep people paying attention. Until I was reflecting on Palahniuk’s talk this morning, I didn’t see how this is essentially the same strategy — by confounding the expectations of what people are expecting to hear, you force them to pay closer attention.

This is my annual GPG housekeeping. Some people use the infromation contained in this message to send secure mail to me. If this doesn’t make any sense to you, feel free to ignore it. If it does make sense to you and you can’t verify this, contact me through whatever way seems appropriate. This block contains a revocation of my 5/2006 to 5/2007 key, and then a new 6/2007 to 6/2008 key.

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (Darwin)
Comment: A revocation certificate should follow

iGsEIBECACsFAkZolkIkHQFrZXkgc3VwZXJzZWRlZCBieSA1QjQ5MkY3QzA2RDQx
MTlDAAoJEJ/DSim6jwbQqFgAn261hqJ1imw2OAeSlX862XpeXbAOAJ49zySpdXH4
nTIDDC2NZ6k8Y/xmVw==
=hmH8
-----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

My new GPG key has signature 5E74 7A06 C111 400A 0DE4  39C9 5B49 2F7C 06D4 119C

Its ID is 5B492F7C06D4119C

Here's an ASCII armored version:

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (Darwin)

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
QA==
=C5MF
- -----END PGP PUBLIC KEY BLOCK-----

But I'd really suggest you get it from the keyserver and save yourself the import/export hassles.

Thanks,

Corprew Reed
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)

iD8DBQFGaJlzW0kvfAbUEZwRArZhAKD8y38eCUqPXltB7OH5vCeWtu8/SwCeLQpB
CQAY+6d4oF4zKbSwgdNnePo=
=Qz9a
-----END PGP SIGNATURE-----

Because it’s come up a lot in recent days, a list of ‘popular’ (really ‘prevalent’) cognitive biases from Wikipedia. A lot of what I’ve been doing over the last several days has been wondering why people misestimate things to the extent that they do, and how to help with that. So, it’s been relevant. A good contrast to cognitive bias is ‘field sense,’ which is some people’s ability to sense their surroundings at an apparent supernatural level. While I don’t aspire to the level that Gretzky has this, it’s a useful perception style to try to develop.

This blog is (again) getting up to steam after a couple of weeks of me working on various projects (and writing more elsewhere), and then vacationing and moving. I’ve also collapsed one of my other blog projects into this one.

Since I last wrote here, I’ve been doing a bit of program management for a company based out of Austin, TX (which is not related to the cognitive biases) and it’s been fun and entertaining although it’s a very short duration project.

More on Cruel 2 B Kind (previous post)– a blog post from the Seattle PI by Monica Guzman. The PI has someone covering the tech news who also blogs about what she’s up to when it overlaps with her professional responsibility. Here’s my overlap with her experience.

Then came the finest kill of the day.

Corprew Reed was playing on a team of one. As we came around a building — bam! He got us with a “Happy Bee Day” before we knew what was coming and became the fearless leader we all desperately needed.

I recognized Reed. He had spoken at Ignite Night not too long ago. Actually, I recognized a lot of the players, I realized.

[…]
“OK. We have two options,” Reed announced to the mass. “Either we sit and wait or we take this show down Broadway.”

Moments later we were on Capitol’s Hill main drag wishing everyone we saw a happy Handshake Day. Well, why not?

Since this is my blog, I figured to only include the parts that feature me. You should read the actual article for more information on the fun.

This is a social night for the local chapter of the American Society for Information Science and Technology. You should come by and check it out if that’s the sort of thing you find interesting. I’m chapter secretary for this year, and we’re doing all sorts of neat stuff that we’ll tell you about that the meeting or will be updated as relevant on our site.



Join us for some good company and geeky conversation next Thursday (5/10) at the Elysian Pub in Capitol Hill!

What: Seattle Monthly Meet-up, organized by the Pacific Northwest chapter of the American Society for Information Science & Technology.
http://asistpnw.org
Where: Elysian Pub, 1221 E. Pike St., Seattle, WA
When: 7-10pm, 2nd Thursday of every month

Once a month, we’ll get together to have drinks, chat, network, and geek out with fellow information architects, librarians, usability experts, user experience designers, and other like-minded people. It’s open to anyone, so bring a friend — especially those in other local organizations! The format will be casual, but all are encouraged to bring something to discuss — recent work, an interesting topic, or even your resume.

See you there!
-Aaron

So, I was talking to someone today about their application (which was Ruby on Rails-based), and we had a long conversation about locking. There’s a couple of different sorts of locks that show up in software development, but there’s one in particular that mostly only shows up in enterprise software development, the Long-lived Lock.

Locks are used to keep other processes from modifying resources in the system. These can show up at a variety of levels ranging from Critical Sections (Java / Win ) that synchronize access to particular pieces of code, to database locks, which keep people from reading from or writing to rows or tables while operations are done.

However, all of these operations are for short periods of time. You can’t keep a read or write lock on a row in a database for an extended period of time (or in cases where you can, you almost certainly shouldn’t..) About the longest time a row in a database should be locked is to perform a single transaction (which may be spread between multiple databases, rows, or what have you, but the time is just the changes for the transaction, not all the time that people spend staring at a screen and enterting data before hitting the return key.)

But how do you let a user lock information for an extended period of time? For example, say the user is locking a row in the database that represents a document that they’re updating (a frequent setup in most ECM/DM systems.) Well, since that’s part of the ECM system, that should happen inside the logic of that application. It shouldn’t be achieved through database locking, but should instead be stored as information within the database.

It’s possible to set this up a number of different ways, but lets assume you have a document table document and it has, by convention, an id column that represents the primary key on the table. I’m also going to make the assumption that writing to a document is done by a particular user. Your application’s security system may vary.

So, let’s look at a table set up for locking on the document table:

TABLE doc_lock
     document_id : INTEGER
     user_id : INTEGER
     lock_expires: DATETIME
END

And you just join this table in when you need to know if there are locks on a particular object, and you otherwise create and delete locks as needed. One particular thing about this sort of locking strategy is that you end up with expired locks accumulating on documents, so you want to clean those up, and also when you join in the lock table you want to have non-expired locks only.

Your app needs behavior about various things to surround this, like what’s the security model surrounding locks (who can know about them, are they on a user/group/role basis, etc…), and when can a lock be broken. Sooner or later, you’ll need to break locks, like for an employee on vacation who’s got documents locked or similar. But that’s all above the database structure and the immediate operations on the lock table, which I’m discussing here.

Well, that’s part one of three. The next segment will be the Ruby-on-Rails implementation I sketched out for my interlocutor, and the last will be some variations on and exceptions to this idea. I consider long-lived locks a design pattern, because it’s a recurring pattern in enterprise computing.

The first meeting (that I attended) concerning this fall’s ASIST PNW chapter meeting was held yesterday. Aaron Louie (chapter president) and I met with the UW iSchool student chapter president and vice-president. A year ago, I was just turning over the control of the student chapter to the next year’s president, and these people are one down the line from that (the officers are typically 2nd year students in one of the Masters programs at the iSchool.) Now, the students seem pretty young to me, but in some ways they did at the time as well.

So, I’m not going to go into details yet — that would be jumping the gun, but I think that we’ve got something very exciting lined up. We’d talked previously about how we can best revitalize the chapter, which had been falteri