<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>violasong.com</title>
      <link>http://violasong.com/blog/</link>
      <description />
      <language>en</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Mon, 29 Oct 2007 00:35:39 -0600</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/violasong" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>Beautiful Code and Beautiful Software</title>
         <description>&lt;p&gt;Programming was fun because I could make cool stuff, but what actually got me obsessed about it was suddenly seeing something interesting in the semantics and syntactics of the very lines of code.  &lt;a href="http://andymaleh.blogspot.com/2007/09/pain-and-pleasure.html"&gt;Being sensitive&lt;/a&gt; to the difference between good and bad code was intensely motivating, and discovering ways to write efficient, self-documenting, and thoughtfully-organized code was something I knew could &lt;a href="http://devchix.com/2007/02/14/on-code-and-luck-and-the-start-of-journeys/"&gt;captivate me forever&lt;/a&gt;.  This is what I loved (and still love) about my field&amp;#8212;the &lt;a href="http://paulgraham.com/hp.html"&gt;art&lt;/a&gt; of programming, the wonderfully complex &lt;a href="http://syntatic.wordpress.com/2007/07/13/craftsmanship-as-a-bridge/"&gt;craft&lt;/a&gt; that could take a &lt;a href="http://norvig.com/21-days.html"&gt;lifetime&lt;/a&gt; to master.&lt;/p&gt;

&lt;p&gt;As I added to my Ruby knowledge Java and then Objective-C, I began appreciating software development at a lower level.  I grew up in an environment (the Rails community) where there was a lot of hate for those big verbose languages, but upon actually experiencing them for the first time myself, I discovered that I enjoyed them.  They were different, but still interesting in differing ways.  And hey, there was something satisfying and clarifying about writing dumb code after being born in high-level land&amp;#8212;my first for-loop in Java, for example, helped me better appreciate the cleaner, object-oriented practices I knew, but I also saw something appealing in the for-loop itself.  It wasn't just elegant language that intrigued me, it was also the basic logic behind the syntax, and the fact of differing syntax.  Computer language, and differences in computer languages, were fascinating in and of themselves.&lt;/p&gt;

&lt;p&gt;I had the same satisfying feeling when I first learned Assembly in college this term.  Assembly was tedious and sometimes quite painful, but the way it made me think about basic programatic functions in such new ways was completely worth the pain.  Of course, I also got a geeky pleasure just from being aware of the low-levelness of the code I was writing.&lt;/p&gt;

&lt;p&gt;It gets worse!  I had a great moment of self-discovery when I read Wolf's &lt;a href="http://rentzsch.com/notes/programmersDontLikeToCode"&gt;Programmers Don't Like to Code&lt;/a&gt; early this year.  I indeed love the problem solving, elegance-creating, coding-to-learn part of coding, but I realized that I actually like coding for coding's sake, too.  At least, that's how I describe my enjoyment of CSS and XHTML.  I have an extensive enough grasp of front-end programming that I don't often solve a new problem these days (in fact, problems that take me a while or bugs I haven't seen before can be downright thrilling). Yet, I still enjoy working with the stuff.  There's something relaxing about dumping out good-looking code that I understand very well, sort of like how I enjoy doodling the same cartoon cat over and over in my class notes, or how I enjoy playing the same three tunes when I sit at a piano.  Even just looking at good CSS&amp;#8212;well ok, &lt;em&gt;my&lt;/em&gt; CSS, with everything ordered, indented, and cascading correctly&amp;#8212;feels good in the same way that I felt bad, almost physically ill, as I waded around in the stylesheets of a certain forum software and found inconsistent indentation, extra line breaks, commented-out junk styles, and styles disabled by deliberately misspelling the property name.&lt;/p&gt;

&lt;p&gt;This is what happens when you're so easily inspired, interesting shadows on the walls motivate you to continue living.  You have to come back in once in a while and reorganize your levels of sensitivity so that your appreciation for light and sound is appropriately proportional to your appreciation for Off-Off-Broadway.&lt;/p&gt;

&lt;p&gt;That is to say, these days I've been thinking a lot about the software part of software development.  Specifically, the design of user interfaces in software.  At &lt;a href="http://violasong.com/blog/2007/07/barcamp_chicago_2007.php"&gt;BARcamp&lt;/a&gt; this year, I liked how &lt;a href="http://humanized.com/"&gt;Aza Raskin&lt;/a&gt; asked all developers to raise their hands, then all designers, later saying that the hands that went up the first time should have stayed up.  All developers should be designers.  At least, that's true for all developers lucky enough to work jobs where they have a say in the design of their software.&lt;/p&gt;

&lt;p&gt;I'm getting increasingly excited about the importance of design within development, especially as I come to terms with my different passions and reflect over some of my past gigs.  In the web app contracting world, design and development are usually separate jobs.  In some cases, the design job is minimized in comparison to the rest of the project because clients generally pay for features, not for beautifully thoughtful design.  On a project where I played both design and development roles, I recall feeling uncomfortable because I was assigned only two days to complete the visual design.  It needed a lot more than two days. It was a complicated application that deserved weeks of rigorous iteration and conversations with the client.  Unfortunately, that's not what the client was paying us for.  The client was perfectly fine with the &lt;em&gt;version-one mockup&lt;/em&gt; that took me a couple hours, and well, we had an app to launch.&lt;/p&gt;

&lt;p&gt;I had another wake up call while I was at &lt;a href="http://c4.rentzsch.com/1/"&gt;C4&lt;/a&gt; this year. It appears that many Mac developers, perhaps most of them, are solo indies producing their own products. As such, they really do have to be both designers and developers.  Actually, design is often the most significant part, and there seems to be a lot more enthusiasm over user experience and just &lt;a href="http://manton.org/2007/09/rails_and_mac_dev.html"&gt;producing a great product&lt;/a&gt; than there is over the code itself.  One night during C4, someone inadvertently helped me see this when he described to me the nature of his work: "Coding the basic functionality is the easy part.  That just take a couple weeks.  What's really hard and time consuming is figuring out the specifics of the UI."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wow&lt;/em&gt;, I thought.  &lt;em&gt;Why does that seem so right?  Why is that so cool to me?!  Oh, right, I'm a designer to begin with.&lt;/em&gt;  There are dramatic rifts between my enjoyment of development, design, and art because I appreciate each of them in very different ways.  I constantly try to integrate development and art, but I really ought to figure out how to mix all three.&lt;/p&gt;

&lt;p&gt;After all, my goodness!  Do we want beautiful code, or beautiful software?  Here's another peek into my life: A side effect of being extremely open minded and absorbent is that I find myself believing all kinds of contradictory ideas, sometimes even opposite ones. It doesn't bother me right now because I'm in exploratory mode, not know-what-I-believe mode, but to retain sanity it is, of course, a must to occasionally sort things through until they make some kind of sense.&lt;/p&gt;

&lt;p&gt;Thus, for further consideration I've listed just a fraction of the many things people like about software development, loosely ordered from the most intrinsic rewards to the most extrinsic rewards.  I've left out a lot of really wonderful stuff like community, open source values, and challenges because those are harder to fit into this order, but I think you'll get the point.  This is an extremely interesting sort order to me because of how psychologists say that intrinsic motivations are stronger and more likely to keep you going.  For example, the person who takes karate classes because she feels energized and excited by the sensation of punching and kicking will more likely end up with a black belt than the person who takes the same classes for the health benefits.&lt;/p&gt;

&lt;p&gt;Is it the same for programming?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The sensation of writing code&lt;/li&gt;&lt;li&gt;The knowledge that one is writing code&lt;/li&gt;&lt;li&gt;Enjoying computer logic&lt;/li&gt;&lt;li&gt;Enjoying computer language&lt;/li&gt;&lt;li&gt;Elegant syntax&lt;/li&gt;&lt;li&gt;Elegant semantics&lt;/li&gt;&lt;li&gt;Learning about code&lt;/li&gt;&lt;li&gt;Problem solving&lt;/li&gt;&lt;li&gt;Learning about problems&lt;/li&gt;&lt;li&gt;Achieving usability&lt;/li&gt;&lt;li&gt;Finishing a product&lt;/li&gt;&lt;li&gt;Elegant software&lt;/li&gt;&lt;li&gt;Solving human problems&lt;/li&gt;&lt;li&gt;Solving business problems&lt;/li&gt;&lt;li&gt;Satisfying market needs&lt;/li&gt;&lt;li&gt;Making money&lt;/li&gt;&lt;li&gt;Having a stable career&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Which is the most persistently motivating kind of reward?  Most importantly, which kind of motivation produces the best software?  I'd love to do some formal research on this topic sometime, but I'm already pretty sure that the answer is "a healthy balance of most of the items on this list," as we certainly want our software to be both usable and maintainable, and sellable, and everything else.  I'm also pretty sure that the balance is different for every situation and person.  At the moment, however, I envision a wide bell-shaped curve sitting upon a rectangle, and everything turned on its side&amp;#8212;the motivations that result in the best software are the ones nearer to the middle of the curve; but really, I think all of the motivations are beneficial in some way, and insofar as the programmer has her priorities straight, the more the better.&lt;/p&gt;

&lt;p&gt;The tragedy of our field is that most programmers don't ever get to appreciate the majority of these rewards, particularly the more profound ones.  Then again, it works out great because the majority of programming jobs couldn't possibly satisfy someone who cared about all these things.  Still, I wonder what the industry would be like if we were all intrinsically, thoroughly passionate about our craft, and &lt;em&gt;nobody&lt;/em&gt; was signing up for Computer Science classes just for the "stable career."  I wonder what it would do to the world.&lt;/p&gt;

&lt;p&gt;I think I should revisit this train of thought every year or so as I become a better software developer.  I get the feeling, though, that my fate is already somewhat set in the fact that the more I grow, the more I desire a working situation where I have enough freedom to create beautiful things.  It's probably worth noting that both freedom and beauty are vague, subjective ideas, so that could mean anything.  All I know is that the compromises to both beauty in code &lt;em&gt;and&lt;/em&gt; beauty in software design as necessitated in most programming jobs give me an unwavering feeling of discontent.  I wouldn't be surprised if I ended up settling down as a freewheeling solo developer using, you know, web design contracting to support my freewheeling solo lifestyle.&lt;/p&gt;

&lt;p&gt;Eventually I'll retire my computers and spend the rest of my days &lt;em&gt;plein air&lt;/em&gt; painting on some beautiful farm out in the country.  That, or a sensuous city life of alternating between street art missions and serving time.  It's fun to imagine where I'll go once I feel done with technology.  Hopefully that never happens, because I want to be the cool guru grandma who's still around when her children are giving mandatory programming lessons to &lt;em&gt;their&lt;/em&gt; children.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/uYfIuAmPip4" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/uYfIuAmPip4/beautiful_code_and_beautiful_software.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/10/beautiful_code_and_beautiful_software.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">motivation</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">philosophy</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">programming</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psychology</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">software</category>
        
         <pubDate>Mon, 29 Oct 2007 00:35:39 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/10/beautiful_code_and_beautiful_software.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 107 | Xmo'd + mogenerator: Seamless Core Data code generation</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/107"&gt;PSIG 107 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h3&gt;Show and Tell&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Practical-Ruby-Gems-David-Berube/dp/1590598113/"&gt;Practical Ruby Gems&lt;/a&gt;. Tom: "Eh it's a library book."&lt;/li&gt;&lt;li&gt;Gorman tells us of people coming to the Genius Bar because they've &lt;a href="http://www.macosxhints.com/article.php?story=20070719183238202"&gt;renamed their home folders&lt;/a&gt; and thus lost sight of their accounts.&lt;/li&gt;&lt;li&gt;We plug &lt;a href="http://siliconprairiesocial.com/"&gt;Silicon Prairie Social&lt;/a&gt; and I lament RubyCocoa syntax, mentioning named arguments in Ruby's future.&lt;/li&gt;&lt;li&gt;&lt;a href="http://kamit.com"&gt;Kevin&lt;/a&gt; tells me that Python has named arguments already, but pyObjC still uses the underscore syntax because of C conversion complications.&lt;/li&gt;&lt;li&gt;Paul: Good articles in &lt;a href="http://www.amazon.com/More-Java-Gems-Reference-Library/dp/0521774772"&gt;More Java Gems&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Worlds-20-Greatest-Unsolved-Problems/dp/0131426435/"&gt;20 Greatest Unsolved Problems&lt;/a&gt;.  Says Bradley: "I don't think the author is that talented as a writer. The chapter on protein folding wasn't nearly as interesting as I thought it would be." We ask if he wrote the author to complain.  "I didn't write him. I could kick his butt though."&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Chinese-Language-Fantasy-John-DeFrancis/dp/0824810686/"&gt;The Chinese Language: Fact and Fantasy&lt;/a&gt;, Elementarz Polish primer. Bradley pointed out something really cool about the Polish number system that I forget.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Programming-Erlang-Software-Concurrent-World/dp/193435600X/"&gt;Programming Erlang&lt;/a&gt;, &lt;a href="http://www.amazon.com/Definitive-ANTLR-Reference-Domain-Specific-Programmers/dp/0978739256/"&gt;The Definitive Antler Reference&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Wolf's going to the &lt;a href="http://www.bignerdranch.com/classes/opengl.shtml"&gt;OpenGL Bootcamp&lt;/a&gt;. "I'm not going to let you keep feeding me OpenGL lies that I've been too ignorant to counteract."&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Chasing-Rising-Sun-Journey-American/dp/0743278984/"&gt;Chasing the Rising Sun&lt;/a&gt;. "Is it about Japan beating us in technology?"  No, it's actually about the song about the house.&lt;/li&gt;&lt;li&gt;&lt;a href="http://macprince.blogspot.com"&gt;Dan&lt;/a&gt; demos the &lt;a href="http://slappingturtle.com/"&gt;iAlertU&lt;/a&gt; MacBook alarm to everyone's delight. "Impressed a guy at Panera with it."&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fullduplex.org/humor/2006/10/how-to-shoot-yourself-in-the-foot-in-any-programming-language/"&gt;How to shoot yourself in the foot in any programming language&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://violasong.com/mogenerator.jpg" alt="" title="Has something to do with the design pattern. Made sense while I was drawing it ^^;;" style="float: right; margin-left: 15px; margin-bottom: 1em;" /&gt;&lt;br /&gt;
&lt;h3&gt;Xmo'd + mogenerator: Seamless Core Data code generation&lt;/h3&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="http://redshed.svn.sourceforge.net/viewvc/redshed/trunk/cocoa/mogenerator/"&gt;Mogenerator&lt;/a&gt; refresher (from PSIG 98):&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Object relational mappers integrate object-oriented software with relational databases.  They allow you to work with objects instead of raw SQL statements. Classes map to tables, and rows map to instances.  There are a few different ways to implement this:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Class first&lt;/strong&gt; (e.g. Java Beans + XDoclet): Embed relational table and column names into the source to write SQL for you.  Wolf believes this is the worst philosophy -- you can reference the data source, but there's not enough information to derive the schema from embedded metadata.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Schema first&lt;/strong&gt; (e.g. Active Record, code gen): Link classes from the schema.  Unfortunately, DDL (Data Definition Language) is a harsh and primitive landscape incapable of supporting sane metadata and you end up needing hacks. With Active Record, "you must name things the way &lt;em&gt;god&lt;/em&gt; intended them to be named -- who is of course DHH." With code gen it means manually hacking mapping files.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Model first&lt;/strong&gt; (e.g. EOF, Core Data): Wolf likes this philosophy best -- you start with a declarative base, but you have infinite room for sane metadata and you're not tied to any specific data source.   Because it's just data, there's no need to write a parser or interpreter.  You can generate both DDL and code from a single source.  In dynamic languages, custom classes are optional.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Core Data can generate wrappers for all of your attributes as &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/Reference.html"&gt;NSManagedObject&lt;/a&gt; classes or as custom subclasses of NSManagedObject.  Custom subclasses are great for holding your business logic and helping with type safety.  The problem is that it's kind of a tedious task to get Xcode to generate your subclasses and it usually involves a lot of painful merging due to the fact that each file contains both generated and custom code.&lt;/p&gt;

&lt;p&gt;You can use the lovely &lt;a href="http://www.research.ibm.com/designpatterns/pubs/gg.html"&gt;Generation Gap&lt;/a&gt; pattern to help with the merging problem: put machine-generated and custom code in separate files and make your custom code subclass the generated code.  &lt;/p&gt;

&lt;p&gt;This is where mogenerator comes in -- it's a command-line tool that automates everything and makes use of this pattern.  mogenerator owns the machine's files which are subclassed off of NSManagedObject, and subclassed files off of that are owned by you and untouched by the machine.  When you modify your data model and invoke mogenerator, all your generated code will be updated but your custom code won't change.&lt;/p&gt;

&lt;h5&gt;&lt;a href="http://redshed.svn.sourceforge.net/viewvc/redshed/trunk/cocoa/mogenerator/Xmod/"&gt;Xmo'd&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;Xmo'd makes your life even easier by integrating mogenerator into Xcode.  Wolf achieved this with the use of undocumented, reverse-engineered plugin API.  Xmo'd overrides the data model document method to automatically run mogenerator for you.  When you save a data model document in Xcode, the Xmo'd override fires off an AppleScript which calls mogenerator.  This keeps your generated code continuously synced up with your data model.  Xmo'd also adds the menu item "Autocustomize Entity Classes." Currently it works on Xcode 2; Xcode 3 support is coming soon.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/bFFNsyk8dus" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/bFFNsyk8dus/psig_107_xmod_mogenerator_seamless_core_data_code_generation.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/10/psig_107_xmod_mogenerator_seamless_core_data_code_generation.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">core data</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">generation gap</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">mogenerator</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">xmod</category>
        
         <pubDate>Sat, 13 Oct 2007 23:55:51 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/10/psig_107_xmod_mogenerator_seamless_core_data_code_generation.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 106 | NSToolbar</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/106"&gt;PSIG 106 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h5&gt;Items of Interest&lt;/h5&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/My-Start-Up-Life-Learned-Journey/dp/0787996130/"&gt;My Startup Life: What a (Very) Young CEO Learned on His Journey Through Silicon Valley&lt;/a&gt; -- We're informed the teen author manages to make himself sound like a 40-year-old what with the dry writing and needless mention of shoehorns :)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/"&gt;Getting Things Done: The Art of Stress-Free Productivity&lt;/a&gt; -- I claim I am henceforth living David Allen's principles.  We'll see how it goes!&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Sickert-painter-circle-Marjorie-Lilly/dp/0815550146/"&gt;Sickert: the painter and his circle&lt;/a&gt; -- The story of Walter Sickert, an English Impressionist painter with some newly revealed connections to Jack the Ripper&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Nothings-Sacred-Lewis-Black/dp/B000RK66IS/"&gt;Nothing Sacred&lt;/a&gt; -- Autobiography of comedian Lewis Black&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Collapse-Societies-Choose-Fail-Succeed/dp/0143036556/"&gt;Collapse: How Societies Choose to Fail or Succeed&lt;/a&gt; -- By the same guy who wrote &lt;a href="http://www.amazon.com/Guns-Germs-Steel-Fates-Societies/dp/0393061310/"&gt;Guns, Germs, and Steel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gizmodo.com/gadgets/ifuntastic/"&gt;iFuntastic&lt;/a&gt; -- Make yer own iPhone ringtones&lt;/li&gt;&lt;li&gt;Paul on the Xserve, Mini, iMac: "But aren't we so pregnant for a bunch of upgrades?"&lt;/li&gt;&lt;li&gt;Steve entertains us with crazy stories from his awesome IT job at O'Hare.  He also gets me curious about wxPython and the way you can use XML to define GUI with &lt;a href="http://www.serpia.org/xrced"&gt;XRC&lt;/a&gt;.  Most intriguing -- he predicts that the problem of computer viruses will grow hugely in the future, saying that crackers are most certainly in info-collection mode at the moment.&lt;/li&gt;&lt;li&gt;The meeting ends with the sharing of nasty-food/bug/pyromanic stories!&lt;/li&gt;&lt;/ul&gt;

&lt;h5&gt;&lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSToolbar_Class/index.html?http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSToolbar_Class/Reference/Reference.html"&gt;NSToolbar&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;Great presentation by &lt;a href="http://dribin.org/dave/blog"&gt;Dave&lt;/a&gt; and &lt;a href="http://rentzsch.com"&gt;El Wolfo&lt;/a&gt; involving a cowboy hat, a gaucho hat, methods named "spanishize" that define anything starting with "El " as Spanish, and oh -- we got to see some live debugging ;).  Summary:&lt;/p&gt;

&lt;p&gt;Currently, Interface Builder doesn't help you create toolbars, so you either have to do it in code or use Belkadan's &lt;a href="http://belkadan.com/generictoolbar/"&gt;GenericToolbar&lt;/a&gt; palette.  &lt;/p&gt;

&lt;p&gt;Doing it in code: After allocating your toolbar, initialize it with a unique identifier (initWithIdentifier) so that Cocoa can automatically remember user customizations to the toolbar.  You'll also have to set setAutosavesConfiguration: and setAllowsUserCustomization: to YES. Once you've created and set the delegate, tell your window to setToolbar:toolbar.&lt;/p&gt;

&lt;p&gt;There are four basic methods you need to manage your toolbar:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;-toolbarDefaultItemIdentifiers: Specify default toolbar items. Remember to avoid name collision with Apple's standard items&lt;/li&gt;&lt;li&gt;-toolbarAllowedItemIdentifiers: Choose which of Apple's standard items to allow. By default none of them are allowed&lt;/li&gt;&lt;li&gt;-toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:  Returns toolbar items as specified by the identifier&lt;/li&gt;&lt;li&gt;-validateToolbarItem: Called on every toolbar item.  The target and action must be set and responsive for this to work&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://belkadan.com/generictoolbar/"&gt;GenericToolbar&lt;/a&gt; is the non-code alternative: It has a nice drag/drop interface for adding and removing items as well as hooking up items to your controllers.  It doesn't work very well with bindings, so it's better to do those in code.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;img src="http://violasong.com/daveyelwolfo.png" alt="" title="Trying to stop myself from forming a whole story line around these guys... hehehe" /&gt;&lt;br /&gt;
&lt;em&gt;Thanks to &lt;a href="http://daringfireball.net/"&gt;Gruber&lt;/a&gt; for the great wwdc &lt;a href="http://flickr.com/photos/gruber/542899899/"&gt;photo&lt;/a&gt; upon which this is based&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;h5&gt;&lt;a href="http://c4.rentzsch.com/1/"&gt;C4[1]&lt;/a&gt; this weekend!&lt;/h5&gt;&lt;/p&gt;

&lt;p&gt;Ok, I think this is the most excited I've ever been about a tech event.  I can't wait for the sessions and I'm hugely looking forward to meeting everybody.  I'm actually going to be manning the registration booth so I'll at least get to greet everyone :)&lt;/p&gt;

&lt;p&gt;Hay -- anybody out there have an idea for &lt;a href="http://rentzsch.com/c4/ironCoderLive"&gt;Iron Coder&lt;/a&gt; that could use my help?  I'm pretty psyched about the announced "API" because it would seem I could easily make use of my art/design/webcode-fu, but I'm not coming up with any ideas...&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/48MxvSEfXcY" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/48MxvSEfXcY/psig_106.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/08/psig_106.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">generictoolbar</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">ironcoder</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">nstoolbar</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
         <pubDate>Mon, 06 Aug 2007 01:39:58 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/08/psig_106.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 105 | Dissasembling on OS X</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/105"&gt;PSIG 105 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h5&gt;Items of Interest&lt;/h5&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Ajax-Design-Patterns-Michael-Mahemoff/dp/0596101805/"&gt;AJAX Design Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Mind-Performance-Hacks-Tools-Overclocking/dp/0596101538"&gt;Mind Performance Hacks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Four-Minute-Mile-Fiftieth-Anniversary-Roger-Bannister/dp/1592285813"&gt;The Four-Minute Mile&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Million-One-Nights-History-Picture/dp/0714615889/"&gt;Million and one nights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Endless-Universe-Beyond-Big-Bang/dp/0385509642"&gt;Endless universe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Pangea-Softwares-Ultimate-Programming-Guide/dp/0976150506/"&gt;Pangea Software's Ultimate Game Programming Guide for Mac OS X&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542"&gt;Mac OS X Internals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Four members showed up with iPhones.  There was a large amount of quality iPhone discussion during which I seem to have zoned out. hehe&lt;/li&gt;&lt;li&gt;We took a brief critical look at Leopard, particularly at how wrong the dock looks when it's on the side, and how the icons unfortunately bounce with their shadows attached.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/wwdc/"&gt;WWDC 2007&lt;/a&gt;: It seems that this year's was essentially a repeat of last year's.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/HOPL"&gt;HOPL III&lt;/a&gt;: "We're still so primitive."&lt;/li&gt;&lt;/ul&gt;

&lt;h5&gt;Dissasembling on OS X&lt;/h5&gt;

&lt;p&gt;Why disassemble?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;To work around bugs&lt;/li&gt;&lt;li&gt;To learn more about areas where the docs are out-of-date, incomplete, or intentionally missing&lt;/li&gt;&lt;li&gt;To find ways to interoperate with other software, such as when implementing file format compatibility/interchange or breaking into proprietary tool-chains&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Static tools: Hex editors&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;OS X ships with three utilities for hex dumping: &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/hexdump.1.html"&gt;hexdump&lt;/a&gt;, &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/od.1.html"&gt;od&lt;/a&gt;, and &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/xxd.1.html"&gt;xxd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hexedit.sourceforge.net/"&gt;HexEdit&lt;/a&gt; is one of the oldest mac open source apps, originally created for system 7&lt;/li&gt;&lt;li&gt;&lt;a href="http://ridiculousfish.com/hexfiend/"&gt;HexFiend&lt;/a&gt; is a newer open source Cocoa hex editor with more features&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Static tools: General level&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/file.1.html"&gt;file&lt;/a&gt; tells you what kind of file something is, including all the architecture versions&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/strings.1.html"&gt;strings&lt;/a&gt; looks in binaries to see if anything's human-readable. Use with standard input, or it'll only look into the version of the file with the same architecture as your system&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Static tools: Code&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/otool.1.html"&gt;Otool&lt;/a&gt; understands the Mach-O binary format and can tell you an app's dependencies.  Apps linking to private frameworks involve Apple's undocumented stuff.  Wolf: "It used to be that all the cool stuff was in the private frameworks. The last of the cool stuff pretty much went public by 10.4. So the hunt isn't there anymore."&lt;/li&gt;&lt;li&gt;&lt;a href="http://otx.osxninja.com/"&gt;otx&lt;/a&gt; does enhancements on Otool's output.  It intermixes the raw outcodes into the disassembly in case you want to inject your own instructions. You can follow along and see what strings are being referenced.  The tool also detects and works around some obfuscation techniques.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codethecode.com/Projects/class-dump/"&gt;classdump&lt;/a&gt; is another tool for dumping Mach-O code.  Trivia: AppKit appears to contain a class called NSEvilHacks.&lt;/li&gt;&lt;li&gt;&lt;a href="http://homepage.mac.com/petite_abeille/MagicHat/"&gt;MagicHat&lt;/a&gt;, a recently open-sourced tool, is like classdump except with a hyper-linked interface.  You can specify which frameworks you care about.  Wolf uses key-value coding to pull out undocumented methods.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/tools/interfacebuilder.html"&gt;Interface Builder&lt;/a&gt; can open up nibs and let you see names in the targets and actions.  Make a copy of the app first because IB may leave some stuff in even if you don't save&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
Runtime Tools&lt;br /&gt;
&lt;em&gt;"What's cool about software is you can put your hand up them like a puppet."&lt;/em&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/software/gdb/"&gt;gdb debugger&lt;/a&gt; for obj-c.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.briksoftware.com/products/bsinspectors/"&gt;BSInspectors&lt;/a&gt;, an Xcode plugin that lets you inspect objects&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fscript.org/"&gt;F-Script&lt;/a&gt; scripting for cocoa.  F-Script Anywhere allows you to dynamically inject it into any Cocoa app.  You can also dynamically look stuff up in the pop-up completer menu.  The Object Browser shows you what methods are supported for the selected object. "Select view" button will inspect anything you click on and allow you to directly call the methods.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;The rest of the evening was spent doing evil things to the iPhone. Also!  I watched in awe as Dave/Wolf worked some fabulous Quartz Composer action into a little Cocoa toy app that I'd been working on ;D&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;img src="http://violasong.com/disassemblingosx.jpg" alt="" title="Yenley strikes again!" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/FXaACDE1yf4" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/FXaACDE1yf4/psig_105.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/08/psig_105.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">disassembly</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">hacking</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">os x</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">reverse-engineering</category>
        
         <pubDate>Thu, 02 Aug 2007 01:21:28 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/08/psig_105.php</feedburner:origLink></item>
      
      <item>
         <title>BARcamp Chicago 2007</title>
         <description>&lt;p&gt;&lt;a href="http://violasong.com/barcampchicago2007.jpg"&gt;&lt;img src="http://violasong.com/barcampchicago2007_t.jpg" title="Mmmmm. BARcamp." alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had a lovely time at &lt;a href="http://barcampchicago.com/"&gt;BARCamp&lt;/a&gt;.  Like &lt;a href="http://violasong.com/blog/2006/08/getting_real_ba.php"&gt;last year&lt;/a&gt;, it was a mind-expanding experience and encouraging on several fronts.  This year we had more people, more energy, much cooler weather, a nicer venue (with clean bathroom!), and insanely large amounts of free food in addition to the obligatory free beer.  For me, the best part was actually seeing &lt;em&gt;familiar faces&lt;/em&gt; and getting to catch up with great geeks like &lt;a href="http://oaktop.com"&gt;Peter Chan&lt;/a&gt;, &lt;a href="http://www.daviddalka.com/createvalue/2007/06/25/matt-mccall-gives-venture-capital-investing-tips-at-barcamp-chicago/"&gt;David Dalka&lt;/a&gt;, &lt;a href="http://push.cx/"&gt;Peter Harkins&lt;/a&gt;, &lt;a href="http://jdavid.net/"&gt;Justin Kruger&lt;/a&gt;, and of course the amazing &lt;a href="http://jasonrexilius.com/"&gt;Jason Rexillius&lt;/a&gt;.  It especially rocked to finally meet my fellow &lt;a href="http://devchix.com"&gt;DevChix&lt;/a&gt;, &lt;a href="http://jenstander.com"&gt;Jen Stander&lt;/a&gt; and &lt;a href="http://fabled.net/"&gt;Sarah Gray&lt;/a&gt;.  I talked to a lot of interesting new people as well, like &lt;a href="http://richardlynch.blogspot.com/"&gt;Rich the sound guy&lt;/a&gt;, &lt;a href="http://www.red-bean.com/sussman/"&gt;Ben Collins-Sussman-SVN&lt;/a&gt;, &lt;a href="http://joipodgorny.wordpress.com/"&gt;Joi Podgorny&lt;/a&gt;, &lt;a href="http://gizmometer.com/blog/"&gt;Conrad Albrecht-Buehler&lt;/a&gt;, and &lt;a href="http://toolness.com/"&gt;Atul&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Aza_Raskin"&gt;Aza&lt;/a&gt;, &amp;amp; &lt;a href="http://evilbrainjono.net/cgi-bin/blog/showblog.cgi"&gt;Jono&lt;/a&gt; from &lt;a href="http://www.humanized.com/about/"&gt;Humanized&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are highlights from some of the presentations I attended:&lt;/p&gt;

&lt;h5&gt;Mass Customization: Next Generation of Software is Hardware -- Ziad Hussain&lt;/h5&gt;

&lt;p&gt;The dream is that ordinary people should be able to manufacture their own gizmos.  We ought to have a &lt;em&gt;Kinko's of fabrication&lt;/em&gt; -- a service that would allow users to design an item to be produced in full plastics and circuitry right away.  Currently, some very interesting work is being done in producing cheap rapid-prototyping machines like &lt;a href="http://reprap.org"&gt;RepRap&lt;/a&gt; and &lt;a href="http://fabathome.org/"&gt;Fab@home&lt;/a&gt;.  Geared to home users who can't afford commercial systems,  these machines aim to democratize innovation.&lt;/p&gt;

&lt;h5&gt;Why most businesses fail, most businesspeople are miserable, and why you'll be different -- &lt;a href="http://sean-johnson.com/"&gt;Sean Johnson&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;People seem to think that success requires either (1) working systematically for 50 years to get to the point where they can live the good life on a pile of money, or (2) hitting the jackpot on a business idea that rakes in the good-life piles of money right away.  But what &lt;em&gt;is&lt;/em&gt; the good life?  Your dreams probably cost a lot less than you think.  And in some cases, they are dreams you could be living right now.&lt;/p&gt;

&lt;p&gt;Sean described ways to break free from standard business models in order to start happier, smarter companies.  He discussed our tendency to put too much care on the validation of our peers as well as "VC money, a few hundred diggs, a write up on TechCrunch, etc."  He encouraged us to, instead, design useful products that will help everyday people -- products that make money at every single sale.  &lt;/p&gt;

&lt;h5&gt;Dynamic Mashups with RSS -- &lt;a href="http://kirix.com"&gt;Aaron Williams&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://kirix.com/"&gt;Kirix Strata&lt;/a&gt; is a data browser based on the Gecko engine, currently for Windows and soon to run on Ubuntu as well.  Strata's aim is to make it easy to uncouple data from its context and render it usable.  With a few clicks, Aaron demonstrated Strata's ability to import static HTML tables and RSS feeds into database form.  He then showed us some database management features that remind me of Access and Excel.  I was most intrigued by the Relationship Manager -- a GUI database editor which allows you to do wonderful things like visually join tables together.&lt;/p&gt;

&lt;h5&gt;Building Geo-Distributed Web Applications -- &lt;a href="http://jasonrexilius.com/"&gt;Jason Rexilius&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;Geo-distribution is a single app running simultaneously in multiple locations around the world.  It could involve server clusters, network routing, multiple data centers/providers, or multiple carriers.  Says Jason: Premature optimization is bad; ignoring your objectives is also bad.  He gave us some interesting technical ideas on building web apps, encouraging us to think outside the database and leverage the right tools for the job.&lt;/p&gt;

&lt;h5&gt;Lisp -- &lt;a href="http://jquigley.com"&gt;John Quigley&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;John truly loves Lisp.  I'm pretty sure his trembly, tender speech was the most passionate I've ever seen anyone get about any language.  Lisp, he says, forgoes the syntax so you can get to the heart of the matter.   It's a highly dynamic language that grows to meet your needs -- a programmable programming language for doing the impossible.  Throughout John's presentation, he tried to help us see that Lisp was not some crazy language with a hideous syntax, but rather a &lt;em&gt;gorgeous&lt;/em&gt; language with a very logical syntax.&lt;/p&gt;

&lt;p&gt;The most interesting part was his explanation of the XML format and how it relates to Lisp.  XML's tree design allows it to be both code and data, resulting in a very simple, flexible, and extensible tool -- the same is true of Lisp.  An in-depth exploration of this idea can be found &lt;a href="http://defmacro.org/ramblings/lisp.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For learning Lisp, John recommends &lt;a href="http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871/"&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;, and two other books depending on your approach: Those wishing to take the practical path should read &lt;a href="http://www.amazon.com/Practical-Common-Lisp-Peter-Seibel/dp/1590592395/"&gt;Practical Common Lisp&lt;/a&gt; (also available &lt;a href="http://gigamonkeys.com/book"&gt;for free online&lt;/a&gt;). Those taking the academic path should read Paul Graham's &lt;a href="http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/"&gt;ANSI Common Lisp&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;DIY Beer - Tristan Sloughter&lt;/h5&gt;

&lt;p&gt;With beer in hand, Tristan gave us a beautiful talk on homebrewing.&lt;/p&gt;

&lt;p&gt;Ingredients:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Malts -- Barley that's been malted, sugar. Provides body, color, and some flavors (chocolate, coffee, smokey, etc)&lt;/li&gt;&lt;li&gt;Hops -- A flower which provides bitterness (oils, measured in IBUs), hoppy flavor, and aromas like citrus and fruit&lt;/li&gt;&lt;li&gt;Yeast -- A fungus which creates ethanol by eating glucose from the malt; provides subtle flavor/texture&lt;/li&gt;&lt;li&gt;Other -- Irish Moss, insingglass, gypsum for clear color, Belgian candi, lactose, fruit, honey, coffee, spices, wormwood, pizza&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;Types:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Ale -- Top fermenting. Temp 65-75, belgian ales up to 86. Most common &amp;amp; easiest.&lt;/li&gt;&lt;li&gt;Lager -- Bottom fermenting. Temp 45-55. Harder to make and refrigeration. Mellow, crisp flavor.&lt;/li&gt;&lt;li&gt;Lambic -- Uses wild yeast. You leave your fermenter open and let any yeast (such as from a barn) fly in. Dry, vinous, cidery, sour aftertaste (the taste of bad beer).  You can actually buy "wild yeast" to make your Lambic.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;Equipment -- You need a 4 gallon pot and a kit from, say, &lt;a href="http://northernbrewer.com"&gt;Northern Brewer&lt;/a&gt;.  It's an initial $100 investment for the kit and another $25-40 for ingredients, but in the end you're only paying 50 cents a glass instead of $1.25 for beer of same quality.&lt;/p&gt;

&lt;p&gt;The process of brewing beer is essentially boiling the malt, adding hops at some point (depending on how bitter the beer should be), plugging it with an airlock and waiting for 3-7 days.  I was amused by the formula for measuring IBU:&lt;/p&gt;

&lt;p&gt;(gallons of brew * 1.34) / (oz. of hops  * Alpha Acid * (time of boil) / 2)&lt;/p&gt;

&lt;p&gt;"Happy brew hacking," Tristan concluded. "It's just like programming -- have fun with it, try different things, get drunk."&lt;/p&gt;

&lt;h5&gt;Enterprise Searching -- &lt;a href="http://www.dieselpoint.com/"&gt;Dieselpoint&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;A guy from Dieselpoint gave a nose-bleedingly intense and detailed talk on different methods of searching for data and why enterprise searching is such a complex problem.  There were some major gems in his speech, though they were a bit hard to understand -- I wished the talk had been more simplified and BARcampy rather than Fortune-500-board-meetingy so that we could have all internalized it better.  I was impressed by the huge role linguistics play in searching and the many creative ideas for improving search engine performance.&lt;/p&gt;

&lt;h5&gt;Groovy -- &lt;a href="http://jameswilliams.be/blog"&gt;James Williams&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;Groovy is an agile, dynamic language for the JVM that can fully integrate with Java.  It looks similar to scripting languages like Ruby and Python in the way they've pruned away a lot of the Java syntax.  For example, printing Hello World is as simple as: &lt;em&gt;println "Hello, World!"&lt;/em&gt;  Groovy includes some extra features such as closures, dynamic collections, and builders, which allow you to build data types with a tree-based syntax. The point of Groovy is not really to replace Java but to give you an alternative to more quickly code prototypes, UI, one-off apps, and extensions.&lt;/p&gt;

&lt;h5&gt;Getting involved in FOSS -- &lt;a href="http://admiralchicago.wordpress.com/"&gt;Freddy Martinez&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;I was completely impressed by fellow underage kid Freddy and his impassioned talk on getting into open source.  He made several points I can totally confirm, such as the importance of users groups and mentors.  His mentor actually got him started in the community by saying: "I'm doing documentation work. Wanna help edit?"&lt;/p&gt;

&lt;h5&gt;How to protect your open source project from poisonous people -- &lt;a href="http://www.red-bean.com/sussman/"&gt;Ben Collins-Sussman&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;In any community, attention and focus are your scarcest resources.  You must protect them from people who distract, emotionally drain, or cause needless infighting.  It's not just trolls who are problematic -- perfectionists can also derail forward progress.  It's important to do something about those who complain without helping, insult the status quo, are unable to pick up on the mood or common goals of the project.  Ask questions like: Is the person draining attention and focus?  Is this dispute worth it? Is the person paralyzing the project? Is the dispute likely to finish soon?&lt;/p&gt;

&lt;p&gt;Don't: feed the energy beast or get emotional. Do: initially give people the benefit of the doubt and look for the facts under the emotions. Know when to ignore or forcibly boot someone. Most importantly, address the behavior, and not the person.&lt;/p&gt;

&lt;p&gt;Build your community on politeness, respect, trust, and humility.  The community founders establish the culture, and in turn, the culture should become self-selecting.  Pick a direction and limit your scope. When you're limited, it's easier to measure your progress, easier to get people to join, and easier to screen away people who shouldn't join.  Example: SVN's scope was solely to create a compelling replacement for CVS.&lt;/p&gt;

&lt;p&gt;Have well-defined processes as far as backporting bugs, accepting and reviewing patches, and admitting new committers.    Document important design decisions, bug fixes, mistakes, and code changes.  Have healthy code collaboration policies -- send commit emails and encourage email review.  Do big changes on branches for easier review.  Increase your project's bus-factor on components by spreading the knowledge and not allowing names in files.&lt;/p&gt;

&lt;h5&gt;&lt;a href="http://humanized.com/"&gt;Humanized&lt;/a&gt;: Tales from developing Enso -- &lt;a href="http://toolness.com/"&gt;Atul Varma&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Aza_Raskin"&gt;Aza Raskin&lt;/a&gt;, &amp;amp; &lt;a href="http://evilbrainjono.net/cgi-bin/blog/showblog.cgi"&gt;Jono DiCarlo&lt;/a&gt;&lt;/h5&gt;

&lt;p&gt;The guys from Humanized really have an good grasp on interface design, and their talk was one of the most inspiring I've ever heard. There's actually a lot more to their &lt;a href="http://humanized.com/products/"&gt;Enso&lt;/a&gt; products than the unfortunate labeling of "&lt;a href="http://quicksilver.blacktree.com/"&gt;Quicksilver&lt;/a&gt; for Windows."&lt;/p&gt;

&lt;p&gt;One of their major concerns is the problem of modal interfaces.  Modes are in their essence confusing because every time a mode changes, a user's habituated actions are no longer relevant and she has to break her train of thought to add yet another set of actions to her memory.  Says Humanized, almost everything that frustrates users about interfaces is due to a mode. That's why good interfaces have as few modes as possible.&lt;/p&gt;

&lt;p&gt;In Enso, users hold down a key to get into the universal quasi-mode. It involves visual feedback, but also kinetic feedback, which is more effective -- your brain remembers you're in that mode because your finger's down on that key.&lt;/p&gt;

&lt;p&gt;Another thing Humanized believes in is building from scratch.  They say the toolkit straightjacket, while providing consistency, kills innovation.  You can't be better without being different.  You can't different without taking the time to make your own stuff.&lt;/p&gt;

&lt;p&gt;On design: People think the GUI is just picking a good shade of blue, so it's pushed back to the end.  In reality, all programmers should act as interface designers right from the start. As soon as you design a program, you're designing an interface. To the user, the interface &lt;em&gt;is&lt;/em&gt; the product.&lt;/p&gt;

&lt;p&gt;On the curse of being a geek: No matter how good you get with computers, you still have to design your programs for normal people.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/YKQvexDsyYg" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/YKQvexDsyYg/barcamp_chicago_2007.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/07/barcamp_chicago_2007.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">barcamp</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">barcamp chicago</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">enso</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">foss</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">homebrewing</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">humanized</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">lisp</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">rapid-prototyping</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">unconference</category>
        
         <pubDate>Thu, 26 Jul 2007 22:31:36 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/07/barcamp_chicago_2007.php</feedburner:origLink></item>
      
      <item>
         <title><![CDATA[PSIG 104 | JS &lt;3 ObjC]]></title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/104"&gt;PSIG 104 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h5&gt;Items of Interest&lt;/h5&gt;
&lt;ul&gt;&lt;li&gt;The meeting began with a session of &lt;em&gt;forced&lt;/em&gt; pre-WWDC iPhone speculation ^^;&lt;/li&gt;&lt;li&gt;Dave announced he'll be writing a column on beginning Mac programming for &lt;a href="http://mactech.com/"&gt;MacTech&lt;/a&gt;!&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Definitive-Guide-SQLite/dp/1590596730"&gt;Definitive guide to SQLite&lt;/a&gt;:  SQLite is great for read-heavy apps, like blogs, but it's limited when comes to writing, as you can only write when no other accesses are occurring.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mactech.com/articles/mactech/Vol.23/23.05/LearnFScript20Min/index.html"&gt;Learn F-script in 20 Minutes&lt;/a&gt;, &lt;a href="http://www.amazon.com/Wizard-Menlo-Park-Thomas-Invented/dp/1400047625/"&gt;The Wizard of Menlo Park&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Tom: &lt;a href="http://iden.tify.us"&gt;iden.tify.us&lt;/a&gt; was featured on &lt;a href="http://mashable.com/2007/05/15/identifyus/"&gt;Mashable&lt;/a&gt;!&lt;/li&gt;&lt;li&gt;Paul: Building windows machines "a royal pain in the tush" -- alas no combo updates.&lt;/li&gt;&lt;li&gt;Wolf on backups: Rsync works well except for resource forks; however, if you really care about maintaining absolute data integrity, use &lt;a href="http://shirt-pocket.com/SuperDuper/"&gt;SuperDuper&lt;/a&gt;.  (This reminds me, I totally had a dream the other night that my only-partially-backed-up MacBook fell apart into tiny irreparable pieces. Oh, and that random thunderstorm last week completely toasted one of our WinXP boxes.  Heh...)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Hacking-Mac-OS-Tiger-Customizations/dp/076458345X"&gt;Hacking MacOSX Tiger&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Paul got into true old-fashioned Show and Tell mode and presented to us some random, interestingly-designed objects: &lt;a href="http://vosswater.com/"&gt;Voss&lt;/a&gt; water bottles, weird tape dispenser, an impact stapler.&lt;/li&gt;&lt;li&gt;Gorman's been busy with wedding preparations. &lt;em&gt;"Does it involve writing software?!?"&lt;/em&gt;  "Yeah..."  He's doing an WebObjects app for his wedding registry.&lt;/li&gt;&lt;li&gt;Dan quotes his Roosevelt professor on the Unix lab which is actually comprised solely of Emacs: "Why Macs? I start the semester with 16 working machines, and I end the semester with 16 working machines."&lt;/li&gt;&lt;li&gt;Wolf: &lt;a href="http://www.amazon.com/Accidental-Mind-Evolution-Memory-Dreams/dp/0674024788"&gt;The Accidental Mind&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Wolf on the relative lack of interest in &lt;a href="http://en.wikipedia.org/wiki/HOPL"&gt;HOPL III&lt;/a&gt;: "This is why software's doomed."&lt;/li&gt;&lt;li&gt;&lt;a href="http://webkit.org/"&gt;WebKit&lt;/a&gt; open source web browser engine -- looks like a neat project.  The new &lt;a href="http://webkit.org/blog/108/yet-another-one-more-thing-a-new-web-inspector"&gt;Web Inspector&lt;/a&gt; sounds especially interesting.&lt;/li&gt;&lt;/ul&gt;

&lt;h5&gt;JS &amp;lt;3 ObjC&lt;/h5&gt;

&lt;p&gt;Introduced in OS X 10.4, the JavaScript-ObjC bridge is currently the only officially-supported bridge.  The bridge makes it easier to work with AJAX libraries, JavaScript plugins,  JSON and DOM (jquery).  It also gives you access to regexes (which aren't built into Cocoa) and helps you build WebKit UIs.  It's somewhat limited compared to other bridges as it was created specifically for the development of dashboard widgets (which, essentially, are just webpages made with HTML, CSS, and JS).  The bridge automatically morphs over numbers, strings, and arrays, but not dictionaries.&lt;/p&gt;

&lt;p&gt;Running JS from Objc is simple:&lt;br /&gt;
- [WebView stringByEvaluatingJavaScriptFromString:]&lt;/p&gt;

&lt;p&gt;With a WebView (which can be hidden), you can &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html"&gt;call any JS from ObjC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For security reasons, there is more resistance when &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/ObjCFromJavaScript.html"&gt;calling ObjC from JS&lt;/a&gt;.  By default, all ObjC selectors and keys are excluded from JavaScript access.  You override the boolean methods &lt;em&gt;isSelectorExcludedFromWebScript&lt;/em&gt; and &lt;em&gt;isKeyExcludedFromWebScript&lt;/em&gt; to allow access.&lt;/p&gt;

&lt;p&gt;Security note -- anyone can open up your package and view the JS and HTML, so it's a good idea to put the more sensitive stuff in the compiled ObjC.  (However, says Wolf, f-script would get you through that, too :).)&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/jsobjcbridge.jpg" style="margin-top: 20px;margin-bottom: 20px;" alt="" title="The youth Cocoa and JavaScript hotguy, an Apple-sanctioned relationship." /&gt;&lt;/p&gt;

&lt;p&gt;Last weekend I was at &lt;a href="http://barcampchicago.com/"&gt;BARCamp Chicago&lt;/a&gt;!  Perhaps a post on that at some point...&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/wYachRduZKg" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/wYachRduZKg/psig_104.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/06/psig_104.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">bridge</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">objc</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
         <pubDate>Tue, 26 Jun 2007 00:04:20 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/06/psig_104.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 103 | PackageMaker</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/103"&gt;PSIG 103 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h5&gt;Items of Interest&lt;/h5&gt;

&lt;ul&gt;&lt;li&gt;We note a new version of the disassembly tool &lt;a href="http://otx.osxninja.com"&gt;otx&lt;/a&gt; and check out some of its new features. I must say... I get some warm fuzzies from the way it's released in public domain and anonymously :)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Programming-Lua-Second-Roberto-Ierusalimschy/dp/8590379825/"&gt;Programming in Lua&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Dark-Carnival-David-J-Skal/dp/0385474067/"&gt;Dark Carnival&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Einstein-Life-Universe-Walter-Isaacson/dp/0743264738/"&gt;Einstein: His Life and Universe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dribin.org/dave/blog/"&gt;Dave&lt;/a&gt; mentions that he filed a bug report on the &lt;a href="http://violasong.com/blog/2007/02/psig_101.php"&gt;aforementioned&lt;/a&gt; issue revealed by &lt;a href="http://ddribin.googlecode.com/svn/trunk/DDHidLib/"&gt;DDHidLib&lt;/a&gt;'s device browser. Apple closed the report citing no problems, and lo, the latest version of OS X indeed does not have the bug.  We verified that it still is around on 10.4.8, however.  Apparently &lt;em&gt;somebody fixed it&lt;/em&gt; some time between 10.4.8 and 10.4.9!&lt;/li&gt;&lt;li&gt;&lt;a href="http://infinitecat.com/"&gt;Infinite Cat Project&lt;/a&gt;:  =^_____^=&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazon.com/Psychology-Computer-Programming-Silver-Anniversary/dp/0932633420"&gt;The Psychology of Computer Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Micro-ISV-Vision-Reality-Bob-Walsh/dp/1590596013/"&gt;Micro-ISV&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Frontiers-Justice-Disability-Nationality-Membership/dp/0674024109/r"&gt;Frontiers of Justice&lt;/a&gt;&lt;/li&gt;&lt;li&gt;It is agreed that the best way to update OS X is via the combo updater which one downloads from the Apple site, as it tends to be much more reliable than Software Update.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;img src="http://violasong.com/packageeater.jpg" style="border: 0; float: right; margin-left: 15px;" alt="" title="Does the PKG icon look tasty to anyone else?" /&gt;&lt;h5&gt;Installer packages&lt;/h5&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.pkg&lt;/strong&gt; -- The package format includes two key components: archive.pax.gz, where files are gzipped up with the pax archiving tool, and archive.bom, which contains the permissions metadata pax can't handle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.mpkg&lt;/strong&gt; -- Meta-packages are packages of packages, often used by Apple for system software.  This is what enables the screen of checkboxes that allows the user to specify which components to install.&lt;/p&gt;

&lt;p&gt;PackageMaker.app is Apple's GUI tool for making .pkg files. It's nice in that it gives you a sort of realtime preview of your installer, but it's hard to understand and crashy (it actually crashed during the demo).  One thing to note is that when PackageMaker refers to "root," it's actually talking about your source folder, where you recreate your directory structure.  Another thing interesting is that if you set your identifier (i.e. com.violasong.pkg.killerapp) in the package version, the install button will display "Upgrade" instead of "Install" if it detects an older version.&lt;/p&gt;

&lt;p&gt;Other notable tools are &lt;a href="http://s.sudre.free.fr/Software/Iceberg.html"&gt;Iceberg&lt;/a&gt;, an open source GUI packaging tool with a more direct UI, and the &lt;a href="http://www.charlessoft.com/Pacifist_Documentation/English/"&gt;Pacifist&lt;/a&gt; extraction tool,  useful for extracting your files without Installer.app for sanity-checking purposes.&lt;/p&gt;

&lt;p&gt;It is recommended that you use GUI packaging tools only to generate the required description.plist and info.plist files, which can then be modified and reused to work with an automated command line solution.  Wolf gives us a handy script that provides just that!  You will unfortunately have to decipher a code in order to acquire said script.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/packagemakerurl.jpg" alt="" title="" /&gt;&lt;/p&gt;

&lt;p&gt;Or if you are lame, you can &lt;a href="http://svn.sourceforge.net/viewvc/redshed/trunk/cocoa/mogenerator/installer"&gt;click here&lt;/a&gt; instead.  Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Art notes:&lt;/em&gt; I have explored a few different possibilities in anthropomorphizing packagemaker.app.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In my polisci notebook, a doodle of cheery young fairy girl packaging a sweet potato into a box.  There is also a bad sketch of an elf wrapping a pumpkin in a square of cloth.&lt;/li&gt;&lt;li&gt;In Photoshop, a blood-soaked, battle-scarred humanoid with glowing eyes and long green hair, packaging a small magic fruit into a golden capsule. After several evenings of high-res labor, I pretty much deemed it unfit for public viewing or further development.&lt;/li&gt;&lt;li&gt;In Photoshop, a weeping grayscale Cherokee man holding a large cracked egg.&lt;/li&gt;&lt;li&gt;In my proper sketchbook, a hasty pen drawing of an ugly version of the fairy girl holding a small version of the humanoid's magic fruit capsule.&lt;/li&gt;&lt;li&gt;Also in my sketchbook, a terrible pencil sketch of a foodservice operator &lt;em&gt;eating&lt;/em&gt; the .PKG icon; the only image I decide to show the world, naturally.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/sbqgp7dYl1Q" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/sbqgp7dYl1Q/psig_103.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/06/psig_103.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">packagemaker</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">pkg</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
         <pubDate>Mon, 25 Jun 2007 23:05:32 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/06/psig_103.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 102 | QTKit: 1990s Multimedia Wrapped in 1980s Objects</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/102"&gt;PSIG 102 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rentzsch.com/psig/102"&gt;PSIG&lt;/a&gt; last week!  I stayed for the whole thing this time, which means I was there till hotel security kicked us all out around 2 AM :).  I've decided life is way too short to worry about leaving PSIG at a sane hour.  It's just that good of a group.&lt;/p&gt;

&lt;h5&gt;Books, demos, notable tidbits&lt;/h5&gt;
&lt;a href="http://twitter.com/violasong"&gt;&lt;img src="http://violasong.com/twittermeow.jpg" style="float: right; margin-left: 15px;margin-top: 3em;margin-bottom: 1em" alt="" title="IM IN UR TWITTERZ -- CALLING U TWITZ" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://yamacdev.blogspot.com/"&gt;Blake C.&lt;/a&gt; informs me that the "interesting feature" I mentioned in my last PSIG post regarding Dave's device browser is actually a &lt;em&gt;significant exploit&lt;/em&gt;, and that by blogging about it, I am thereby responsible for &lt;em&gt;releasing it into the wild&lt;/em&gt;.  Eheh, oops?  ^^;;&lt;/li&gt;&lt;li&gt;I talk about why I &lt;s&gt;hate&lt;/s&gt; am mildly critical of &lt;a href="http://twitter.com/violasong"&gt;Twitter&lt;/a&gt;.  Half the group's never heard of this &lt;em&gt;hot new Web sensation&lt;/em&gt;, so Wolf helps out by demonstrating the app and executing &lt;a href="http://twitter.com/rentzsch/statuses/20385841"&gt;a&lt;/a&gt; &lt;a href="http://twitter.com/rentzsch/statuses/20388611"&gt;few&lt;/a&gt; &lt;a href="http://twitter.com/rentzsch/statuses/20389421"&gt;tweets&lt;/a&gt; up on the big screen.  After much drama and debate we eventually come to the agreement that Twitter can be both good and evil, depending on how you use it :)&lt;/li&gt;&lt;li&gt;Ben Gottlieb demoed his &lt;a href="http://ironcoder.org/blog/2007/04/03/ironcoder-v-winner-wikipath/"&gt;winning Ironcoder app&lt;/a&gt; -- a screensaver that tiles Wikipedia pages!&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/OpenGL-SuperBible-3rd-Richard-Wright/dp/0672326019/"&gt;OpenGL SuperBible&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Jason demoes the &lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;FizzBuzz&lt;/a&gt; program he wrote in Erlang, as well as a version of the program he created in Quartz Composer for all our rainbow-colored FizzBuzz needs.&lt;/li&gt;&lt;li&gt;Paul tells us he succeeded in booting OS 10.4.6 on his G4 off of a Lacie USB/Firewire thumb drive.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Essential-PHP-Security-Chris-Shiflett/dp/059600656X/"&gt;Essential PHP security&lt;/a&gt;, &lt;a href="http://www.amazon.com/Professional-PHP5-Programmer-Edward-Lecky-Thompson/dp/0764572822/"&gt;Professional PHP 5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;It is stated that "it's too hard to find Rails jobs."  I suggest the checking out of &lt;a href="http://jobs.rubynow.com/"&gt;jobs.rubynow.com&lt;/a&gt;, &lt;a href="http://rubyrockstars.com"&gt;rubyrockstars.com&lt;/a&gt;, and &lt;a href="http://jobs.37signals.com/"&gt;jobs.37signals.com&lt;/a&gt;.   Tom says he does not recommend Craigstlist ;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Physics-Development-Kaufmann-Interactive-Technology/dp/012369471X/"&gt;Game Physics: Engine Development&lt;/a&gt;, &lt;a href="http://www.amazon.com/Search-Ultimate-Building-Blocks/dp/0521550831/"&gt;In Search of the Ultimate Building Blocks&lt;/a&gt;, &lt;a href="http://www.amazon.com/Facts-Mysteries-Elementary-Particle-Physics/dp/9812381481/"&gt;Facts and Mysteries in Elementary Particle Physics&lt;/a&gt;.  Love the comment on that last one: "It was written for the intelligent layman, which is what I am."&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Mastering-Cmake-Martin-Bill-Hoffman/dp/1930934165/"&gt;Mastering Cmake&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dribin.org/dave/blog/"&gt;Dave&lt;/a&gt; mentions that his King's Quest game for Windows actually runs using DOSBox, so apparently it was really easy to thingagummy the whatsit and... something.  Way over my head ^^;;.&lt;/li&gt;&lt;li&gt;Later Dave demos an amusing new feature to his &lt;a href="http://mameosx.sourceforge.net/"&gt;MAME OS X emulator&lt;/a&gt; -- &lt;a href="http://www.dribin.org/dave/blog/archives/2007/04/04/mame_quartz_composer/"&gt;Quartz Composer integration&lt;/a&gt;!  For all our rainbow-colored copyright-violating video game needs!&lt;/li&gt;&lt;li&gt;&lt;em&gt;The transferring of a &lt;a href="http://www.wheresgeorge.com/"&gt;wheresgeorge.com&lt;/a&gt; dollar occurs at some point.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;"Now why did that die?" "Cuz you're plugged into the projector, doing a demo."&lt;/li&gt;&lt;li&gt;(On Parallels) "I like to see this as the right place for Windows -- in total subservience to OS X."&lt;/li&gt;&lt;/ul&gt;

&lt;h5&gt;Iden.tify.us&lt;/h5&gt;
&lt;a href=" http://thomasswift.com"&gt;Tom&lt;/a&gt; gave a great &lt;a href="http://www.thomasswift.com/blog/identifyus-presentation/"&gt;presentation&lt;/a&gt; on his Crazy New Web 2.0 Startup Site, &lt;a href="http://iden.tify.us"&gt;iden.tify.us&lt;/a&gt;.  It's a community site where users can upload music files or add video links and get their songs identified by other users.  By Web 2.0, we're talking features like an embedded player for your site, tag clouds, RSS feeds with podcast enclosures, and "no business model. &lt;em&gt;(YET!)&lt;/em&gt;"  Looks promising :).

&lt;p&gt;&lt;a href="http://violasong.com/qtkit_l.png"&gt;&lt;img src="http://violasong.com/qtkit.png" style="border: 0;float: right; margin-left: 15px;" alt="" title="I recommend not taking this picture too seriously ^^;;" /&gt;&lt;/a&gt;&lt;h5&gt;QTKit: 1990s Multimedia Wrapped in 1980s Objects&lt;/h5&gt;&lt;br /&gt;
&lt;a href="http://rentzsch.com"&gt;Wolf&lt;/a&gt; gave an very informative talk on &lt;a href="http://developer.apple.com/quicktime/qtkit.html"&gt;QTKit&lt;/a&gt;, the Cocoa framework for QuickTime.  He walked us through QuickTime's history and explained the .MOV file format.  Basically, QuickTime files are organized in hierarchically nesting data units called atoms.  There are classic atoms as well as the more powerful QuickTime atoms, which can tell you whether or not they contain other atoms.  This container format has been made a digital media standard, and is the basis for formats like MPEG-4.  You can use Apple's &lt;a href="http://developer.apple.com/quicktime/download/"&gt;Dumpster&lt;/a&gt; tool to examine and edit atoms.  &lt;/p&gt;

&lt;p&gt;You can also examine the different tracks on &lt;a href="http://en.wikipedia.org/wiki/Muxing"&gt;unmuxed&lt;/a&gt; video files using QuickTime Pro.  Besides the audio and image tracks, we find that &lt;a href="http://cocoacast.com/"&gt;Cocoacast&lt;/a&gt; episodes include a disabled text track which contains all the chapter titles, and another text track which holds the hyperlinks.&lt;/p&gt;

&lt;p&gt;Apple's first attempt to provide a QuickTime interface was in the easy to use but very basic NSMovie and NSMovieView, members of the AppKit framework.  These were deprecated in OS X 10.3 with the arrival of QTKit, which replaced them with QTMovie and QTMovieView.  QTKit also comes with support for user media editing -- the same stuff that makes up QuickTime Pro 7.  QTKit provides read-access to slight majority of the data model, but much has not been Cocoa-fied yet.&lt;/p&gt;

&lt;p&gt;In addition to QTMovie (subclass of NSObject) and QTMovieView (subclass of NSView), QTKit provides 3 other NSObject subclasses: QTTrack, QTMedia, and QTDataReference.  There are also two data structures: QTTime and QTTimeRange.&lt;/p&gt;

&lt;p&gt;A warning: Apple's website contains a lot of old QuickTime information that doesn't apply anymore, and unfortunately, a lot of the new stuff isn't documented anywhere.  The nice thing about the "language barrier" between old C and Obj-C is that you can tell it's the new stuff if it's in Obj-C.  (I've also noticed that the old pages are styled differently, with Apple's old serif font for the title and smaller body text which shows up non-anti-aliased on my box.  Of course, when you have screenshots like what you find on &lt;a href="http://developer.apple.com/quicktime/qttutorial/samples.html"&gt;this page&lt;/a&gt;, that's a good clue as well ^^.)&lt;/p&gt;

&lt;p&gt;See Apple's &lt;a href="http://developer.apple.com/samplecode/QTKitPlayer/"&gt;QTKitPlayer&lt;/a&gt; sample code for a demonstration of QTKit's capabilities.  It comes with basic control graphics, but you can totally poach the big shiny QuickTime buttons from your Mac using Spotlight.  An important point is that QTKit does not show up by default in Interface Builder.  It's an optional palette which you have to enable in IB preferences.  All of the optional palettes are located at /Developer/Extra/Palettes/.&lt;/p&gt;

&lt;p&gt;Hopefully, says Wolf, the QTKit API will be fleshed out soon.  The &lt;a href="http://developer.apple.com/technotes/tn2005/tn2138.html"&gt;FAQ&lt;/a&gt; for QTKit seems to suggest that some of this will happen in OS X 10.5.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/unoRBV357RA" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/unoRBV357RA/psig_102.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/04/psig_102.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">qtkit</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">quicktime</category>
        
         <pubDate>Mon, 09 Apr 2007 11:56:20 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/04/psig_102.php</feedburner:origLink></item>
      
      <item>
         <title>Chirb, April 2007</title>
         <description>&lt;p&gt;&lt;img src="http://violasong.com/projectplanning.jpg" width="640" height="491" alt="" title="We get a lot of work done around here ;)" /&gt;&lt;/p&gt;

&lt;p&gt;I went to the &lt;a href="http://chirb.org/event/show/14"&gt;Chicago Area Ruby Group&lt;/a&gt; on Monday for &lt;a href="http://petdance.com/"&gt;Andy Lester&lt;/a&gt;'s talk on project management.  No crazy story this time because I took the train, although I did have to jog most of my way to the Thoughtworks building, which always seems to be my lot with the Metra schedule no matter where I'm going or when I need to get there.  Note to self: If the appearance of composure is any priority, &lt;em&gt;take cab&lt;/em&gt; ^^;;.&lt;/p&gt;

&lt;p&gt;Half of Andy's presentation was about his alternative to the agile methods of project management.  The other half was on technical debt, which I found  rather interesting and fairly applicable to IBLP's IT operations.  Here's a loose summary of his presentation (slides available at &lt;a href="http://petdance.com/perl/"&gt;Andy's site&lt;/a&gt;).&lt;/p&gt;

&lt;h5&gt;Project Estimation and Tracking&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;1. Write it down.&lt;/strong&gt; The project should be started with some sort of written document.  Programmers like to begin coding right away because they think they know what the customer wants, but that's often not the case.  A written agreement will help you avoid misunderstandings and will get any immediately obvious questions answered right in the beginning.  Wikis are a good medium for these documents because of their collaborative and malleable nature.  "It's not like in the 90's where one guy was Master of the Document."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Estimate.&lt;/strong&gt; Give a rough idea of the time/money cost up front.  This helps the customer to prioritize and prune, as well as feel in control of the project.  Make sure they know that it's not a rigid commitment, because the next step will adjust your estimate.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Refine.&lt;/strong&gt; Break up your estimate, perhaps into outline form for each task.  You're doing design as you go, so keep notes.  No subtask should be longer than 4 hours, because you can't estimate accurately above half a day.  Doing it this way helps to distribute risk: Estimates are usually off by 100%, not 10%.  You may need to take a day to sit and think about what you're getting into.  You're paying up front in time to be able to know where the end point is.  Remember that typing is not programming -- thinking and breaking down tasks is programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Plan and track your tasks.&lt;/strong&gt; Write out your task plans Friday afternoon so everyone knows exactly what to do when they come in Monday morning.  Try to finish each task before going on to the next one.  Track your tasks so you always know what your status is, even in the middle of the week.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Adjust as necessary.&lt;/strong&gt; Sometimes you'll need to shuffle the order, re-estimate, or break up tasks further.  When handling new requests, say, "I can do it, but I'll need a day to tell you how long it will take."  Customers need to know that nothing is free and that even the estimation of new features will take time.  "Do you want the 30 second, half-hour, half-day, or half-week answer?  That's what it'll be worth."&lt;/p&gt;

&lt;p&gt;Always be aware of the status of your project.  If you know you're not going to make a deadline, you should tell your boss or customer as soon as possible.  Be honest with everyone, including with yourself.&lt;/p&gt;

&lt;h5&gt;Getting Out of Technical Debt&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;"Try to think of &lt;a href="http://petdance.com/perl/technical-debt/technical-debt.002.html"&gt;Peter Francis Geraci&lt;/a&gt;'s face looming over you as we talk about this."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Identify your debts:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Clutter -- disorganization and confusion&lt;/li&gt;&lt;li&gt;Failing tests, unfixed bugs, unpatched security holes&lt;/li&gt;&lt;li&gt;Fragile or ugly code -- this often means the code is not read, maintained, or understood&lt;/li&gt;&lt;li&gt;Code without comments or outdated comments (&lt;em&gt;an amiable audience member adds:&lt;/em&gt; Strive to write the kind of code that doesn't need comments, but do maintain your documentation.)&lt;/li&gt;&lt;li&gt;Truck-sensitive knowledge (the truck-factor:  How many people can get run over before your company collapses?)&lt;/li&gt;&lt;li&gt;Code ownership -- this makes the code truck-sensitive, and a bottleneck&lt;/li&gt;&lt;li&gt;No coding standards -- standards help minimize the arguments and the time wasted worrying about or fixing differing code styles&lt;/li&gt;&lt;li&gt;Missing infrastructure -- do you have version control, bug tracking, backups, cron jobs to do your dirty work?&lt;/li&gt;&lt;li&gt;Jerks on the team -- they may be a negative productivity factor&lt;/li&gt;&lt;li&gt;Jerks in management -- well, that's beyond your control&lt;/li&gt;&lt;li&gt;Not realizing you have tech debt, or ignoring it&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Determine the cost of paying the debt.  Think in terms of time, money, and risk.  Create the justification to sell your boss/customer on your changes in corporate language.  Quantify everything: What exactly is the improved turnaround, extra quality, and decreased risk worth?  All cost assessments must include opportunity costs: What could be done if this change wasn't made?&lt;/p&gt;

&lt;p&gt;"Land one plane at a time."  Watch the corners and the center will take care of itself.  Automate your corner-watching.&lt;/p&gt;

&lt;p&gt;Avoid future debt by not incurring more debt.  Take notes when you incur debt anyway. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"However,"&lt;/em&gt; Andy concludes, &lt;em&gt;"Sometimes you just have to do what the customer wants."&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/0zR2lA6wmIQ" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/0zR2lA6wmIQ/chirb_april_2007.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/04/chirb_april_2007.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">chirb</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">project management</category>
        
         <pubDate>Wed, 04 Apr 2007 12:20:03 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/04/chirb_april_2007.php</feedburner:origLink></item>
      
      <item>
         <title>ChiPy, March 2007</title>
         <description>&lt;p&gt;&lt;a href="http://python.org"&gt;&lt;img src="http://violasong.com/pythonstatue.jpg" title="pylove!" alt="" style="float:right; margin-left: 10px;" /&gt;&lt;/a&gt;I attended the &lt;a href="http://chipy.org/"&gt;Chicago Python User Group&lt;/a&gt; &lt;a href="http://push.cx/2007/one-laptop-per-chicago"&gt;last&lt;/a&gt; &lt;a href="http://weblog.lonelylion.com/2007/03/09/march-chipy/"&gt;week&lt;/a&gt;, lured there by the mention that ChiPy member &lt;a href="http://ianbicking.org/"&gt;Ian Bicking&lt;/a&gt; works for the &lt;a href="http://laptop.org/"&gt;One Laptop Per Child&lt;/a&gt; project and would be bringing his own beta test 2 &lt;a href="http://en.wikipedia.org/wiki/Children's_Machine"&gt;Children's Machine&lt;/a&gt; to the meeting.  The little alien laptop destined to save the world is a topic I've become very curious about, especially now that one of my side projects is directly related to kids in computing.  I've also been curious about Python for a while and have been looking for an excuse to go see what Pythonistas are like (turns out there's Ruby-hate, just like how Rubyists have Python-hate!).  On top of all that, the meeting was being held at the Chicago Google office, so of course the Google fangirl within demanded that I check it out.&lt;/p&gt;

&lt;p&gt;The night turned out to be quite an exciting series of misfortunes and mistakes, starting from the moment I decided that the Metra schedule seemed "inconvenient" so I'd try driving downtown for once.  I mean, going with Metra would entail the complication of catching the train, the waste of an entire hour each way (while the drive only takes 40 minutes each way, according to my Google map), AAAND it would cost like 8 bucks, so driving makes sense, right?  Oi, where do I begin...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt; Traffic was shockingly bad.  I mean, everyone warned me about this, but I didn't understand &lt;em&gt;how&lt;/em&gt; bad.  Also scary was the realization that I had no cash or I-Pass and thus no way to pay for tolls and the parking meter.  After some digging around I discovered $4.50 in quarters in my backpack, but before I could feel any amount of relief about that,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt; the ramp I needed to get onto was closed and there were no signs to tell me what to do instead of the ramp.  This got me panicky so it was a while before I realized I should stop and ask for help.  After getting the reroute info from a gas station attendant, I casually asked, "Oh by the way, how long will it take to get downtown?"  He stared at me, eyes wide.  "In &lt;em&gt;this&lt;/em&gt; traffic?  It's RUSH HOUR.  It'll take &lt;em&gt;AN HOUR&lt;/em&gt;."  I only had 30 minutes till the meeting started, so I found this rather uncool, but what made it very much uncooler was that&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(3)&lt;/strong&gt; I made some kind of wrong turn right as I pulled into the city.  Somehow when I read "Merge onto N Union Ave via the Lake St/200 N exit 51 A," it got all jumbled in my brain and I ended up on Lake St somewhere.  Soon I found myself on what looked like the edge of town were it was weird and dark and completely empty.  Did I mention the roads are really weird?  For some reason, I've never noticed the big flashing yellow lights and 5-way intersections and the fact that everything seems broken-down and twisted, like some haunted nightmare video game.  After a several minutes of trying to get back on track by pure determination alone, I stopped to dig around for a map and finally figured out what I had to do to get to the right street.  It was a great feeling to have finally made it to my destination until I&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(4)&lt;/strong&gt; realized there was no place to park anywhere near the building.  So I kept driving farther and farther away, still not seeing any place to park.  Finally when I called out to some guy walking along the street for help, he directed me to a parking garage.  Yay -- and look, they actually accept &lt;em&gt;credit cards!&lt;/em&gt;  I was so excited that I paid it "the credit card way," instead of the normal and much smarter "ticket" way, but I didn't see a problem with this till later.  Off I went, parking at the first empty spot I saw before hurrying into the elevator and ending up in some lobby.  I approached two workers in the office next to the lobby to ask them a question about how the credit card thing is supposed to work, when they simultaneously yelled at me, "AVIS IS THAT WAY" and pointed to the Avis office behind me.  I'm all "Huh?" so they yelled it again, "Avis &lt;em&gt;IS THAT WAY&lt;/em&gt;."  I found this very, very creepy, and it wasn't till several hours later that I realized the map I was holding had the Avis logo on it.  Ah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(5)&lt;/strong&gt; Even with maps in hand, I was completely disoriented when I got back on the streets and had to ask for help again.  Thankfully some friendly woman pointed me in the right direction: "Just go over the bridge!"  It was like arriving at the &lt;em&gt;Promised Land&lt;/em&gt; when I finally got into the building, 1 hour late for the meeting.  The first thing I noticed when the elevator opened onto the Google floor was that there were dozens of security cameras pointing straight at me.  Er, it was probably just 4 cameras, and pointing in different directions, but it's times like this that everything seems worse that it really is.  There were also some very snazzy spotlights shining the Google colors along the walls, but at the moment they only served to heighten the creepy effect.  After a minute or two, a security guard appears and ushers me in after I claim to be there for the Python meeting.  (I later learn he is actually the "front desk.")&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/googlebadge.jpg" alt="" title="Super awesome nametag software, yet they don't care that the printing gets cut off??" style="float:right; margin-left: 10px;" /&gt;I'm brought to this lone computer sitting in the hallway.  "Go ahead and print out a nametag for yourself," he says cheerily.  In my stressed out state, I must have appeared to be a completely idiotic computer-illiterate person, because he actually walked me through the entire process of the very simple and brilliant Google custom nametag printer.&lt;/p&gt;

&lt;p&gt;"Type in your name where it says Name."&lt;/p&gt;

&lt;p&gt;Ok.&lt;/p&gt;

&lt;p&gt;"Now just type in shy pie where it says Host."&lt;/p&gt;

&lt;p&gt;Shy pie?  What's shy p&amp;#8212;&lt;/p&gt;

&lt;p&gt;Oh, &lt;em&gt;ChiPy!!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After that, everything was smooth for a while.  Despite being so late, I only missed the first presentation, on &lt;a href="http://feihonghsu.blogspot.com/2007/03/unicode-talk.html"&gt;Unicode&lt;/a&gt; -- something I did want to see, but hey; in the happy yellow GoogleCafeteria, surrounded by a huge crowd of interesting-looking geeky people with beers, I was finally starting to calm down and feel pretty good about myself.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/childrensmachine.jpg" alt="" title="XD" style="float:left; margin-right: 10px;" /&gt;Soon &lt;a href="http://ianbicking.org/"&gt;Ian&lt;/a&gt; went up and discussed the OLPC effort and how he hoped to organize some Python sprints for Sugar UI development.  He then passed the laptop around, much to my glee.  It's a very nice, sturdy object that opens in an interesting way once you get past the cute lock system provided by the folded-over antennae parts.  I remember thinking two things as I got my hands on it.  Firstly: the feeling of balance seemed off, because the flipped-up screen half is thicker and heavier than the keyboard half.  Secondly: the plastic shell was EXTREMELY GREASY by the time it was passed to me, even though it had only been touched by maybe 7 people at that point.  Ew!&lt;/p&gt;

&lt;p&gt;It had quite a novel screen which reminded me of a TI calculator's, only with the ability to light up and display colors.  Another observation is that the keyboard is very small, making it basically unusable for adult hands.  It was, nevertheless, very fun to poke those soft, gushy green keys and the funny little touchpad made of some hard fibrous-looking material.  The UI was intriguing, but kind of too slow and underdeveloped to really experience much of.  (Looks like it's possible to get an image of the latest version of the software &lt;a href="http://www.laptop.org/laptop/software/developers.shtml"&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;For the next presentation, &lt;a href="http://pfein.blogspot.com/"&gt;Pete Fein&lt;/a&gt; demoed &lt;a href="http://code.google.com/p/grassyknoll/"&gt;Grassy Knoll&lt;/a&gt;, his full text search web service.  It's a REST interface to &lt;a href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt;, which is Java Lucene embedded in cPython -- twice as fast as Lucene and fun to write for, but finicky, hard to build, and bad with threads.  Right now Grassy Knoll outputs JSON, but eventually Pete plans to make it language agnostic and give it multi-threaded server capability.  &lt;/p&gt;

&lt;p&gt;After the meeting I had a good time chatting with Bradley from PSIG about life and love and his personal library of thousands of math books.  I also learned that he's an accomplished horn player and he got me all inspired about taking up the trumpet again.  Hopefully I will this summer!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(6)&lt;/strong&gt; Back to my adventure on the streets... it wasn't long before I realized that I had no idea what parking garage I had parked at.  Yeah, this is where the ticket would have helped.  All I remembered was that it had an Avis office and it was somewhere either near or on Lake St.  It was probably a half hour of wandering before I remembered that the first floor of the garage was painted blue and named Paris.  I decided to ask some random attendant in some random travel-related building if he knew of a parking garage with a Paris first floor.  Amazingly, he actually did know what I was talking about and was able to point me there.  It was quite relieving to get back to my car around 11PM -- time for a nice quiet drive home, I thought to myself.  It seemed this would be the case, until&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(7)&lt;/strong&gt; a huge truck got in my way right when I needed to change lanes to get onto I-290.  I hoped that there'd be another ramp if I kept driving, but when several minutes went by with no sign of such a thing, I attempted to go back downtown and drive back out again.  I had to do this &lt;em&gt;twice&lt;/em&gt;, wasting at least another hour and bothering yet another gas station attendant in the process.&lt;/p&gt;

&lt;p&gt;Well I made it home eventually :D.  My little travel experience ended up costing about 4.5 hours and $14 plus gas, which is more than twice the time and money it would have cost to take the train.&lt;/p&gt;

&lt;p&gt;It's not every day I can create a 7-part horror story out of my own ineptitude, so I intend to make the most of what I learned.  While at the ChiPy meeting, I had assured a couple different people that "from now on I'm taking the train."  But as I drove home, I decided that the worst thing I could do now was to give up like that.  I've always tended to dislike and avoid doing the things I'm naturally bad at, but I'm beginning to see this as a big flaw.  Maybe I &lt;em&gt;do&lt;/em&gt; lack a sense of direction, maybe I &lt;em&gt;am&lt;/em&gt; terrible at reading maps, and maybe I &lt;em&gt;always get massively lost&lt;/em&gt; when I rely on my instincts while traversing new streets, but that's not what I want for myself and I think I can change it.  So, I'll &lt;em&gt;definitely&lt;/em&gt; be driving there again, and I'm going to keep at it until I become good at all these things (or until I get lost forever, or get myself killed trying).  I'll use the train if we're talking rush hour though :)&lt;/p&gt;

&lt;p&gt;Sidenote: I talked to so many strangers that day (some of whom I actually didn't mention because this entry was getting so long), and nearly every one of them seemed to overflow with altruism in the ways they helped me.  Chicagoans have changed my view of humanity as a whole.  I wish I could have stopped with some of those people to exchange life stories.&lt;/p&gt;

&lt;p&gt;Someday I hope to find that I've become the sharply-dressed, smart-looking businesswoman striding down the city streets knowing exactly where she's going; the one to whom hopelessly lost, out-of-breath youngsters come with wrinkled Google and Avis maps in hand.  Till then, Chicago pwnz me.  &lt;3&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/_cLaBEFKzrE" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/_cLaBEFKzrE/chipy_march_2007.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/03/chipy_march_2007.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">chipy</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">olpc</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">python</category>
        
         <pubDate>Mon, 12 Mar 2007 01:07:10 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/03/chipy_march_2007.php</feedburner:origLink></item>
      
      <item>
         <title>PSIG 101 | DDHidLib</title>
         <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;(&lt;a href="http://rentzsch.com/psig/"&gt;What is PSIG?&lt;/a&gt; | &lt;a href="http://rentzsch.com/psig/101"&gt;PSIG 101 announcement&lt;/a&gt;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;I'm going to start taking notes at these programmer meetings I attend; mostly for my own benefit, but also because it would be a terrible shame for all of this to go unrecorded :).&lt;/p&gt;

&lt;h5&gt;Books, advice, ideas&lt;/h5&gt;
&lt;div class="float-right" style="width:250px;"&gt;
&lt;a href="http://rentzsch.com/psig/"&gt;&lt;img src="http://violasong.com/psiggirl.jpg" width="250" height="307" alt="" /&gt;
&lt;br /&gt;Programming Special Interest Group&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://amazon.com/Hacking-Video-Game-Consoles-ExtremeTech/dp/0764578065"&gt;Hacking Video Game Consoles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Oh cool, there's a &lt;a href="http://ps2dev.org/kb.x?T=1159"&gt;PSP SDK&lt;/a&gt;&lt;/li&gt;&lt;li&gt;"If you want to know how it feels to start your own record label, pile up a big bunch of money in your backyard and burn it."&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazon.com/Step-into-Xcode-Mac-Development/dp/0321334221"&gt;Step into XCode&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazon.com/Make-Yourself-Happy-Remarkably-Disturbable/dp/1886230188/"&gt;How to Make Yourself Happy and Remarkably Less Disturbable&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/"&gt;Extreme Programming Explained 2nd Ed.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;"Do not work in the same department as your spouse." -- lol&lt;/li&gt;&lt;li&gt;I demo my dinky little Cocoa app I've been writing :D.  When I lament about the documentation being too sparse, they point me to &lt;a href="http://cocoadev.com"&gt;cocoadev.com&lt;/a&gt; and suggest that I check out Apple's sample code.&lt;/li&gt;&lt;li&gt;I also share about my journey through the wonderful world of &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201485672"&gt;refactoring&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;"Tell your manager you're &lt;em&gt;refactoring&lt;/em&gt;, not rewriting."&lt;/li&gt;&lt;li&gt;&lt;a href="http://amazon.com/Beginning-Ruby-Rails-E-Commerce-Professional/dp/1590597362/"&gt;Rails E-Commerce&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I chat with some people about how I was originally going into graphic design (music education before that, and fine arts before that).  "Oh, you'll definitely make more money with comp sci," they say.  "You make a ton if you're a good programmer, but still a lot if you're a really bad one."  Someone pipes up: "Wait, are you sure you make &lt;em&gt;more&lt;/em&gt; as a good programmer?  You'd probably make &lt;em&gt;less&lt;/em&gt; money in most cases."  We share a melancholy sigh and discuss manager ignorance.&lt;/li&gt;&lt;li&gt;Tom tells me the secret to cheating in Wack-a-Mole, "handy for when you're playing for money."  Basically, hit the things sideways to make them stick.&lt;/li&gt;&lt;li&gt;Bradley tells me the secret to calculus; something about there being really only two basic concepts you need to understand.&lt;/li&gt;&lt;li&gt;He also tells me his approach to learning human languages: get a bunch of books, then get a native speaker.  Where to find native speakers?  "I just ask around.  It helps that I work for a big company."  At some point in the evening, it occurs to me that being a both a mathematician and a polyglot has got to have some kind of uber-positive effect on one's programming skills.  I'm sure his being a DDR master helps as well xD&lt;/li&gt;&lt;li&gt;At some other point in the evening, it occurs to me that this was the first time I'd ever seen Wolf without a tie on.  Lol!  He encourages me to look into Aaron Hillegass' Cocoa book.  Looks like it's actually &lt;a href="http://catalog.naperville-lib.org:8080/ipac20/ipac.jsp?uri=link=1100003~!S522788~!1100001~!1100002"&gt;available at my library&lt;/a&gt; :)&lt;/li&gt;&lt;/ul&gt;

&lt;h5&gt;Presentation: DDHidLib&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://dribin.org/dave/blog/"&gt;Dave&lt;/a&gt; began with a quick pictorial history of human interface devices.  The hilarious thing about this group is that people actually remember the punch card reader and the teletype machine; someone even knew which model of teletype it was o___O.  &lt;/p&gt;

&lt;p&gt;I was especially interested in the video on &lt;a href="http://cs.nyu.edu/~jhan/ftirtouch/"&gt;Multi-Touch Interaction&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On to the main topic at hand: USB HID specifications include the HID device class (specifies how data should be extracted) and the HID usage tables (defines constants to be interpreted by the app).  The specs can be downloaded &lt;a href="http://usb.org/developers/hidpage/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Apple's I/O kit has support for HID: &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/IOKit/IOHIDLib/"&gt;IOHIDLib&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of Apple's developer tools, IORegistryExplorer, provides a database of all devices on your system.&lt;/p&gt;

&lt;p&gt;Accessing devices:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Find the object that represents the device in the I/O registry&lt;/li&gt;&lt;li&gt;Create device interface&lt;/li&gt;&lt;li&gt;Open connection to device&lt;/li&gt;&lt;li&gt;Communicate with device using functions provided by HID manager&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;

&lt;p&gt;Components of a device (every button, etc.) are called elements.  Each element has unique number called a cookie, used to get status for the element.  Cookies are static across sessions.&lt;/p&gt;

&lt;p&gt;Queues for asynchronous notification:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create queue&lt;/li&gt;&lt;li&gt;Add element cookies to queue&lt;/li&gt;&lt;li&gt;Add queue to run loop&lt;/li&gt;&lt;li&gt;Start queue&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;

&lt;p&gt;At this point, Dave gives us a detailed demo on IOHIDLib, scaring us with loads and loads of hard-to-understand code (scared me, anyway).&lt;/p&gt;

&lt;p&gt;Then he whips out &lt;a href="http://ddribin.googlecode.com/svn/trunk/DDHidLib/"&gt;&lt;strong&gt;DDHidLib&lt;/strong&gt;&lt;/a&gt;, his brilliant Obj-C wrapper around IOHIDLib.  Why an Obj-C wrapper?  Because of easier resource management, modern error handling, KVC/KVO (cocoa binding), and it makes common tasks easier.  DDHidLib includes these classes: DDHidQueue and DDHidDevice&lt;|---DDHidMouse&lt;/p&gt;

&lt;p&gt;He also provides two very interesting utilities: HID Device Browser and HID Device Test.  The device browser has this Event Watcher feature which we discovered can log keystrokes even while you're off typing in your OS X account password.&lt;/p&gt;

&lt;p&gt;Dave hooked up various HIDs during his demo, like a Logitech Precision Gamepad and an N64 controller.  He also passed around a variety of ancient game controllers -- you can get these things from &lt;a href="http://www.happcontrols.com/"&gt;Happ Controls&lt;/a&gt;.  He concluded by playing the Atari 2600 game, &lt;a href="http://en.wikipedia.org/wiki/Adventure_(Atari_2600)"&gt;Adventure&lt;/a&gt;,  up on the big screen.  All I can say is... wow :).  We then discussed how somebody needs to make a repository for all these useful Cocoa tools, because Sourceforge doesn't accept everything. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/dxz85dyjvaM" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/dxz85dyjvaM/psig_101.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/02/psig_101.php</guid>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">DDHidLib</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">IOHIDLib</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">psig</category>
        
         <pubDate>Sat, 03 Feb 2007 13:09:35 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/02/psig_101.php</feedburner:origLink></item>
      
      <item>
         <title>Alive</title>
         <description>&lt;p&gt;Hello all!  My crushed soul and I have nothing profound to announce at the moment.  I am sorry, especially to those of you who have been waiting so long for my annual life-changes post.  Rest assured that there is actually a lot going on in my life.  The only reason why I haven't said anything is that it would take more emotional energy than I have left trying to disentangle and abridge it all into one coherent piece of text ^__^;;.  For now I will give you this: that most of my questions remain unanswered.&lt;/p&gt;

&lt;p&gt;Thoughts from the last couple months:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Finally Core2Duo MacBooks!  Mine (2Ghz white) arrived the first of December.  Bliss!&lt;/li&gt;&lt;li&gt;Java, Obj-C, Ruby, my insanely &lt;a href="http://plattedaddy.blogspot.com/"&gt;wonderful&lt;/a&gt; &lt;a href="http://rentzsch.com/"&gt;developer&lt;/a&gt; &lt;a href="http://bengribaudo.com/"&gt;friends&lt;/a&gt;... I am &lt;em&gt;so&lt;/em&gt; in debt to you.&lt;/li&gt;&lt;li&gt;At some point I turned 20.  The day began nightmarishly, but was later made exponentially better by some crazy people who shocked me by remembering/figuring out my birthday... &lt;3&lt;/li&gt;&lt;li&gt;I made it out of biology class alive and even got some nice &lt;a href="http://violasong.com/protistadoodles.jpg"&gt;character designs&lt;/a&gt; out of the taxonomy study ;D&lt;/li&gt;&lt;li&gt;Went up to Chicago several times for museums and happiness.  Unfortunately the Sears Tower security guards did not let us use the stairs, even though I begged nicely.&lt;/li&gt;&lt;li&gt;As &lt;a href="http://candidhq.com/"&gt;Candid HQ&lt;/a&gt; is no more, Candid Manga is also no more :-(.  Ohwell.&lt;/li&gt;&lt;li&gt;I have a new string quartet!  We play Final Fantasy songs and themes from Pride &amp; Prejudice!  Yayayay&lt;/li&gt;&lt;li&gt;Gasp, I joined one of my church's young adult groups; what could this mean?&lt;/li&gt;&lt;li&gt;Working out is like the only thing I've done on a consistent basis.  All of December's weather was perfect for jogging, even Christmas Eve.  I'd take this over a white Christmas any year!&lt;/li&gt;&lt;li&gt;Oh hey, I still love my job and I've been there almost three years now, craziness.&lt;/li&gt;&lt;li&gt;A whole bullet point to say -- &lt;a href="http://tsourceweb.com"&gt;Tony&lt;/a&gt; &lt;em&gt;rocks&lt;/em&gt; because he knows about all my problems, yet he still talks to me :-).  I don't know why.  It's a very relieving thing to have friends like that.&lt;/li&gt;&lt;li&gt;Another bullet point to say -- &lt;a href="http://rentzsch.com/"&gt;Wolf&lt;/a&gt; rocks because he totally exudes magic and happiness and good taste and for some reason doesn't mind hanging out with plain old unmagical me.  Cocoa rocks, PSIG rocks, red/green/gray walls? IT &lt;em&gt;ROCKS!&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Weien has demonstrated that he is &lt;a href="http://www.xanga.com/Weien/563971124/going-indie.html"&gt;completely insane&lt;/a&gt; -- so now I'm pressuring him to put out a whole CD and start a Random Weien Podcast Show ;D.  He's already produced the first clip of &lt;em&gt;Random Weien Quotes: AUDIO EDITION!&lt;/em&gt;  &lt;a href="http://violasong.com/rwq01.mp3"&gt;MP3 here.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;
A few doodles from last semester; click for larger versions.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://violasong.com/cocktail.jpg"&gt;&lt;img src="http://violasong.com/cocktail_t.jpg" alt="" title="I wish I had big, angular hands" /&gt;&lt;/a&gt;&lt;br /&gt;
Sigh...&lt;/p&gt;

&lt;p&gt;&lt;a href="http://violasong.com/cracker.jpg"&gt;&lt;img src="http://violasong.com/cracker_t.jpg" alt="" title="3V1L!!!!1" /&gt;&lt;/a&gt;&lt;br /&gt;
Originally I was going to have her playing the harpsichord, but that just seemed stale to the point of being sickening!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://violasong.com/jamee.jpg"&gt;&lt;img src="http://violasong.com/jamee_t.jpg" alt="" title="I don't know..." /&gt;&lt;/a&gt;&lt;br /&gt;
For some reason, Weien is really weirded out by this character XD&lt;/p&gt;

&lt;p&gt;&lt;a href="http://violasong.com/tease.jpg"&gt;&lt;img src="http://violasong.com/tease_t.jpg" alt="" title="Blah :P" /&gt;&lt;/a&gt;&lt;br /&gt;
I hate this pic; why did I draw it??  lol&lt;/p&gt;

&lt;p&gt;I start feeling guilty when everything I draw is young, relatively good-looking female cartoon characters.  So to atone for my sins I attempted to paint a mildly realistic lady.  I even did it in a mildly high resolution :D.  THANK YOU 1GB OF RAM IN MY MACBOOK.  Photoshop running over Rosetta is surprisingly usable.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/womanwithbluehat_s.jpg" alt="" title="" /&gt;&lt;/p&gt;

&lt;p&gt;Here's a creepy close-up!  Original res of this thing was 1500 x 1290 px.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/womanwithbluehat_face.jpg" alt="" title="" /&gt;&lt;/p&gt;

&lt;p&gt;That's it for now.  First day of school today!!  This is going to be the best semester ever, I can just feel it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/RGSglCpqkAM" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/RGSglCpqkAM/alive.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2007/01/alive.php</guid>
        
        
         <pubDate>Mon, 22 Jan 2007 12:25:50 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2007/01/alive.php</feedburner:origLink></item>
      
      <item>
         <title>EXH. 1 </title>
         <description>&lt;p&gt;&lt;a href="http://violasong.com/salmon.jpg"&gt;&lt;img src="http://violasong.com/salmon_u.jpg" width="640" height="50" alt="" title="find me under the salmon sky?? XD..." /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/EYIiP1Jn3uo" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/EYIiP1Jn3uo/exh_1.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2006/12/exh_1.php</guid>
        
        
         <pubDate>Tue, 05 Dec 2006 14:47:07 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2006/12/exh_1.php</feedburner:origLink></item>
      
      <item>
         <title>Wandering...</title>
         <description>&lt;p&gt;Quotes from my lit professor:&lt;/p&gt;

&lt;blockquote&gt;"Everyone is given something she can share with the world.  Sometimes it takes half a life to figure out what that is."

&lt;p&gt;(On why cut flowers are expensive) "Anything that dies in a day but is this beautiful is very precious.  You only have a day to realize how beautiful it is."&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;That made me think about how we should act around people we'll only see once.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/partacz.jpg" class="float-right" alt="" title="that's pretty much what he looks like ^^" /&gt;&lt;br /&gt;
Quotes from my CIS professor:&lt;/p&gt;

&lt;blockquote&gt;"But you know the teacher's credo&amp;#8212;if none of you get this, I have to kill myself at the end of the semester.  It's the way of the teacher."

&lt;p&gt;"Some teachers go crazy when you use parentheses on an expression that's going to be evaluated first anyway.  &lt;em&gt;I&lt;/em&gt; don't care.  It's like wearing a belt, and suspenders too!"&lt;/p&gt;

&lt;p&gt;(On somebody turning in homework assignments on 5 x 8" sheets of paper) "Hey, could you make these smaller?  Make em toilet paper sized and then I'd have some use for em."&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;He had some serious things to say as well, such as the "key to succeeding in IT":&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Be inch deep, mile wide (know a little bit of everything)&lt;/li&gt;&lt;li&gt;Also, be inch wide, mile deep (have a lot of expertise in a few areas)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;After the last class of the semester, I went up and asked him for some "general college advice."  The way he answered me, you'd think I had asked, "Please tell me who I am and what I should do to end up with the ideal job."  Good stuff ^___^.  Here's some of it:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Take the Meyers-Briggs test. Learn about the different types of personalities, not just to find out about yourself, but to figure out how to adapt your personality to make others feel more comfortable around you. (Something about doing this so consciously seems freakishly shrewd, almost negatively so.  Good to consider nonetheless.)&lt;/li&gt;&lt;li&gt;Get your bachelors in business and your masters in computer science. (I found this advice rather disturbing as I've never thought of going into business, but I'm already kinda checking it out by enrolling in an economics class this fall. Looking for more opinions on this ^^;;.)&lt;/li&gt;&lt;li&gt;Before you actually need a job, do 10 tech job interviews in the area and assess your strengths and weaknesses based on the feedback you get. (Wow, almost like applying &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;TDD&lt;/a&gt; to life.)&lt;/li&gt;&lt;li&gt;Don't keep wandering around.  "But lucky for you," he said, "You've been wandering in the right direction."  (Lol?)&lt;/li&gt;&lt;li&gt;All resumes are the same, listing all kinds of skills and technologies, etc.  What really matters is if they like you.  They will like you if you remind them of themselves. (Again, freakish.  But probably true.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Doodles:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/mangagirlsketches.jpg" alt="" title="do you like serene-cute, or out-of-breath chibi-cute?" /&gt;&lt;br /&gt;
More Ruby-chan&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/boysandgirlsmunro.jpg" alt="" title="by closing the gate she proved she was JUST A GIRL!!  NOOOOOOO" /&gt;&lt;br /&gt;
A short fiction we read in class&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/araby.jpg" alt="" title="the onion dress seems to be a reoccuring theme in my drawings..." /&gt;&lt;br /&gt;
Short fiction by James Joyce&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/howmayibeofassistance.jpg" alt="" title=":-P" /&gt;&lt;br /&gt;
&lt;em&gt;Hullo, good sir. How may I be of assistance?&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
This fall I'm taking classes full-time while working part-time.  So far it seems like I'll be ok, though that'll probably change as the semester progresses, heh.  Biology will be the toughest; I'm also taking Macroeconomics, Java 2, and Kickboxing 2 (:D).  I'm pretty excited about Java because we'll be focusing on web apps.  And thankfully, my professor is really nice and it doesn't seem like she'll have a problem with the fact that I kinda skipped Java 1.  As for whether or not I'll make it despite that fact, I've yet to find out x.x.  &lt;/p&gt;

&lt;p&gt;Postponage of certain projects thus ensues!  If you want me to do anything for you this fall, ask me NOW XD!!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/EC13AfmBb9I" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/EC13AfmBb9I/wandering.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2006/09/wandering.php</guid>
        
        
         <pubDate>Tue, 05 Sep 2006 14:10:12 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2006/09/wandering.php</feedburner:origLink></item>
      
      <item>
         <title>Getting Real, Barcamp, etc.</title>
         <description>&lt;p&gt;But first some stuff I've been working on -&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mattandmarykay.com"&gt;Matt &amp;amp; Mary Kay's wedding site&lt;/a&gt;: A fun project involving the lovely &lt;a href="http://radiantcms.com"&gt;Radiant CMS&lt;/a&gt; powered by Rails, some PHP, a good bit of JavaScript and just enough Flash wrapped up in an rather Web 2.0-inspired design&amp;#8212;it's monstrous :).  I'll have to say it was a great honor to be asked to do this and I had a good time with it.  I learned a lot in those last few minutes of Opera-debugging and figuring out how to get rid of the extra scroll from the reflection image.  Radiant was very smooth to work with and I look forward to using it for other things in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://violasong.com/summertheme/"&gt;MovableType theme&lt;/a&gt;: A simple blog layout.  Somehow it won in one of the categories at the &lt;a href="http://thestylecontest.com"&gt;style contest&lt;/a&gt; put on last month by Six Apart, Adobe, &amp;amp; West Civ  @___@;;. Which is cool because finally, I feel deserving of a Mac and now I have the funds to get one :D&lt;/p&gt;

&lt;p&gt;&lt;a href="http://northwoods.iblp.org"&gt;Northwoods Conference Center&lt;/a&gt;: This I did a while ago for work.  It was probably the most exciting IBLP project I've done so far, as I was the main designer/coder on it and I got to try some new things like drawing the icons for the Directions/Weather buttons and creating a &lt;a href="http://northwoods.iblp.org/facilities/lodge/floorplan/"&gt;floor plan&lt;/a&gt; image with Xara.  Lots of great photos to work with too!  Made me wish I was there again.&lt;/p&gt;

&lt;p&gt;Onward -&lt;/p&gt;

&lt;p&gt;Basically, the &lt;a href="http://workshop.37signals.com"&gt;Getting Real Workshop&lt;/a&gt; is a 1-day seminar about web development put on by a small and successful Chicago-based company closely tied in with the Rails framework.  As a student, it was a pretty awesome opportunity to be sent there by IBLP considering the credentials, experience, position, etc. of the average type of person who's able to attend these kinda things ^^;;.&lt;/p&gt;

&lt;p&gt;Actually, learning the Getting Real principles really made me appreciate my own little web team more.  We're so accustomed to few laborers each doing a variety of different tasks to fill in the holes and we're always having to deal with limited time and meager funds.  This kind of small and flexible team is preferable to 37signals; in fact, they recommended putting no more than three people on version one of any software project.  Here are a few more of their ideas:&lt;/p&gt;

&lt;blockquote&gt;Focus on now: Don't make long-term plans, staff up for an uncertain future, or worry about scaling software ahead of time.  Lower the cost of change by making many small decisions as you go, as those don't end in huge mistakes.  Figure out what you're going to do along the way instead of using spec docs, because "the future should drive the future."

&lt;p&gt;Less mass: Embrace constraints like not enough people, time, and money. Make less code, because less is easier to write and maintain.  Include less features, as most of what people ask for doesn't actually matter&amp;#8212;say no to a new feature request by default and let it marinate for a while before it turns into a maybe or a yes.  Make opinionated software&amp;#8212;provide less user preferences because the developer should be making all the tough decisions, not the users.&lt;/p&gt;

&lt;p&gt;Design first: Let the interface drive the product.  Design exactly what the customer should see, be in front of it as much as possible, and use it while you're building it.&lt;/p&gt;

&lt;p&gt;Have a flexible and happy team: Hire generalists, not specialists who can't understand/appreciate everyone else's work.  Hire happy people rather than disgruntled gurus, and maintain a happy environment&amp;#8212;you want &lt;em&gt;happiness-driven development&lt;/em&gt;.&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;The female/male ratio wasn't as bad here (15% female), probably because it was for designers and business types as much as it was for programmers.&lt;/p&gt;

&lt;p&gt;At &lt;a href="http://barcampchicago.com/"&gt;Barcamp Chicago&lt;/a&gt; I saw only about 5 women in the ~100 people attending, and I think with the exception of one or two, they were all wives/gf's tagging along.  Honestly, geeky impromptu "unconferences" are bad places to take your girlfriend XD;. &lt;/p&gt;

&lt;p&gt;But, I was fascinated by the experience.  The tech events IBLP sends me to are all held at big, clean &lt;a href="http://pragmaticstudio.com/"&gt;university&lt;/a&gt; &lt;a href="http://workshop.37signals.com/"&gt;meeting rooms&lt;/a&gt;, classy &lt;a href="http://photoshopseminars.com"&gt;convention centers&lt;/a&gt;, or fancy &lt;a href="http://railsconf.com"&gt;hotels&lt;/a&gt;.  As for this... this was definitely the first time in my life I'd been somewhere with &lt;em&gt;KEGS&lt;/em&gt; of free beer&amp;#8212;lol&amp;#8212;in a room that was kind of the attic of a quirky little downtown art gallery, fans blasting for the lack of AC (this was during that 95+ degree weekend), walls taped up with paper for the free-for-all presentation schedule and for people to &lt;a href="http://flickr.com/photos/12357930@N00/191300028/in/set-72157594201590126/"&gt;write out their ideas&lt;/a&gt;.  Something about the whole thing seemed so artsy to me that I couldn't help but love it.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://violasong.com/barcamp06jimbo_t.jpg" alt="" title="" class="float-right" /&gt;Oh, and &lt;a href="http://en.wikipedia.org/wiki/Jimmy_Wales"&gt;JIMBO WALES&lt;/a&gt; was there!  Very pleasant person in real life; pretty much like how I imagined he'd be :D.  He talked a bit about Wikipedia and went in detail about his new project, &lt;a href="http://campaigns.wikia.com/wiki/Campaigns_Wikia"&gt;Campaigns Wikia&lt;/a&gt;.  Basically "participatory politics," encouraging people to get involved in intelligently and non-biasedly discussing political sides and issues. It was inspiring to realize that he was achieving a certain level of world peace in his work, yet without compromise&amp;#8212;he'd rather be banned in China than allow censorship of the Chinese Wikipedia!&lt;/p&gt;

&lt;p&gt;Another presentation I found encouraging was &lt;a href="http://sean-johnson.com"&gt;Sean Johnson&lt;/a&gt; on "How to Not Burn Your Business to the Ground."  Here are my notes:&lt;/p&gt;

&lt;blockquote&gt;1. Stop stalling.
&lt;ul&gt;&lt;li&gt;Nine out of ten businesses fail, but that just means you gotta start ten businesses.&lt;/li&gt;&lt;li&gt;Don't fear failure&amp;#8212;it's part of the steps to success.&lt;/li&gt;&lt;li&gt;With Web 2.0, having only a small team is no longer a problem.&lt;/li&gt;&lt;li&gt;Everything is not going to be there when you start.&lt;/li&gt;&lt;li&gt;"How hard is it to learn to ride a bike if you don't have a bicycle? How hard is it to learn how to start a business… without starting a business?"&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;2. Have a mission.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;You're idea should be something important to you as a person; something that goes beyond you and the business.&lt;/li&gt;&lt;li&gt;Business is the best opportunity to practice what you believe.  It's a way to express yourself.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;3. The idea's not as important as you think.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;It's ok to have a mediocre idea as long as you execute it well. Focus on building your skills.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;4. Sell, sell, sell&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Sales are as much an art as marketing.&lt;/li&gt;&lt;li&gt;Don't be too proud to pound on doors.  Call people, get instant feedback, work on your pitch.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;5. Focus on your cash flow.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Establish credit with vendors and suppliers. Treat them well.&lt;/li&gt;&lt;li&gt;Have a good relationship with your banker and get advice from him/her.&lt;/li&gt;&lt;li&gt;Invoice immediately to keep the money coming in.&lt;/li&gt;&lt;li&gt;Put together a cash budget. Make sure you know where you stand by keeping your books.&lt;/li&gt;&lt;li&gt;Get help with taxes.&lt;/li&gt;&lt;li&gt;Make connections.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;6. Find a great team.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Be picky about who you work with.&lt;/li&gt;&lt;li&gt;Go do things you're insanely passionate about, and you'll attract the kind of people who will be able to help you.&lt;/li&gt;&lt;li&gt;Be a giver and don't worry about what you'll get back.&lt;/li&gt;&lt;li&gt;Search for passionate people to work with you, not just talented ones.&lt;/li&gt;&lt;li&gt;Spend time with people who support you and build you up&amp;#8212;you need the energy.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;My mind was so full of all the ideas and inspiration and wants and dreams from these events that for a couple days I couldn't concentrate on anything in my normal life, and even now I'm a bit restless. I have no idea how this is all going to manifest itself, but I hope I'll be able to keep everything in perspective ^^;;.  This adventure is meaningless unless it's what God has for me and I have yet to figure out if that is so.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Doodle:&lt;br /&gt;
&lt;img src="http://violasong.com/rubycorner.jpg" alt="" title="No really - what kind of computer would Ruby use :D?" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/violasong/~4/zTwT7jKosEU" height="1" width="1"/&gt;</description>
         <link>http://feedproxy.google.com/~r/violasong/~3/zTwT7jKosEU/getting_real_ba.php</link>
         <guid isPermaLink="false">http://violasong.com/blog/2006/08/getting_real_ba.php</guid>
        
        
         <pubDate>Sat, 19 Aug 2006 12:09:43 -0600</pubDate>
      <feedburner:origLink>http://violasong.com/blog/2006/08/getting_real_ba.php</feedburner:origLink></item>
      
   </channel>
</rss>
