<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://hackety.org/index.atom">
    <title>hackety org</title>
    <link href="http://hackety.org" rel="alternate" type="text/html" />
    
    <updated>2009-06-06T10:23:52Z</updated>
    <subtitle>filling your pockets &amp; hat with code</subtitle>
    <id>tag:hackety.org,2009:blog</id>
    <generator uri="http://hobix.com/" version="0.5">Hobix</generator>
    <rights>None</rights>
<link rel="self" href="http://feeds.feedburner.com/HacketyOrg" type="application/atom+xml" /><feedburner:browserFriendly></feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry xml:base="/2009/04/29/aSelectionOfThoughtsFromActualWomen.html"><title xml:space="preserve">A Selection Of Thoughts From Actual Women</title><link href="/2009/04/29/aSelectionOfThoughtsFromActualWomen.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FaSelectionOfThoughtsFromActualWomen</id><published xml:space="preserve">2009-04-29T12:38:00Z</published><updated xml:space="preserve">2009-04-29T12:38:00Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/rails-activism/msg/5457f396795cab5b"&gt;Dana Jones&lt;/a&gt;: What about a presentation about writing code on deadline: &amp;#8220;Delivering Like a Birth Mom.&amp;#8221; Or how about graphic images of up-close breastfeeding in a talk titled &amp;#8220;Nursing Your Projects Along.&amp;#8221; I have four kids. I breastfed. I&amp;#8217;ve hunted. I even like porn! But two great tastes don&amp;#8217;t always taste great together, and that is the point that so many seem to have failed to make, or to get.&lt;/p&gt;
&lt;/blockquote&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;It would be totally presumptious and ridiculous for me to try to make the call on whether the dreaded &lt;a href="http://www.ultrasaurus.com/sarahblog/2009/04/gender-and-sex-at-gogaruco/"&gt;GoGaRuCo incident&lt;/a&gt; was offensive to female hackers. As it turns out: I&amp;#8217;m not a woman, I wasn&amp;#8217;t there.&lt;/p&gt;
&lt;p&gt;But I&amp;#8217;ve been around for the aftermath, to witness that first-hand. (And I&amp;#8217;m not going to make a judgement on that either, because I am &lt;em&gt;patently&lt;/em&gt; wrong at all times.) However, I am going to steal this chance to quote as many of the lady Rubyists as I can find.&lt;/p&gt;
&lt;p&gt;I know everyone wants this topic to end. Go then. Or: stay and hear the feminine perspectives concentrated; we hear the other side quite enough. (And I definitely don&amp;#8217;t deserve to talk as much as I do.)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/LindaEskin/status/1645011188"&gt;Linda Eskin&lt;/a&gt;: Watching the RoR / &lt;span class="caps"&gt;DHH&lt;/span&gt; / pr0n / GoGaRuCo fiasco, shaking my head that some just can&amp;#8217;t see why there would be problem.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/rails-activism/msg/5457f396795cab5b"&gt;Dana Jones&lt;/a&gt;: What about a presentation about writing code on deadline: &amp;#8220;Delivering Like a Birth Mom.&amp;#8221; Or how about graphic images of up-close breastfeeding in a talk titled &amp;#8220;Nursing Your Projects Along.&amp;#8221; I have four kids. I breastfed. I&amp;#8217;ve hunted. I even like porn! But two great tastes don&amp;#8217;t always taste great together, and that is the point that so many seem to have failed to make, or to get.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.ultrasaurus.com/sarahblog/2009/04/gender-and-sex-at-gogaruco/#comment-549"&gt;Amy Newell&lt;/a&gt;: I understand that the ruby community prides itself on its un- or anti-professionalism. But some professional norms exist for very good reasons: because they make it easier for people of different backgrounds and life experiences to come together and work productively and respectfully. One doesn&amp;#8217;t have to be an uptight square to suggest that aggressive displays of sexual content at programming conferences perhaps decrease, rather than increase the ability of those attending to learn and focus on the technology itself. Titillation is certainly good marketing, but frankly, if you can&amp;#8217;t find a way to make your presentation interesting that doesn&amp;#8217;t include thonged asses, your presentation isn&amp;#8217;t interesting. Not everyone responds to tits and ass, but everyone can respond to honest, creative, intelligent command of the material and eagerness to share it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.ultrasaurus.com/sarahblog/2009/04/gender-and-sex-at-gogaruco/#comment-559"&gt;Denise&lt;/a&gt;: Only six women at the conference&amp;#8230; it explains everything, off course the majority liked it! [&amp;#8230;] the issue is not about censorship and freedom of speech, the issue is about mutual respect, there are no rules or laws for this, only human judgement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.ultrasaurus.com/sarahblog/2009/04/gender-and-sex-at-gogaruco/#comment-560"&gt;Sarah Allen&lt;/a&gt;: I think the Ruby community is awesome. The weird shit is reflective of society as a whole and the tech industry in particular. Sometimes people are jerks. Sometimes nice people act like jerks. However, the cool stuff is genuine. The enthusiasm is infectious. It&amp;#8217;s not just a love the latest whiz bang techno-goodie (although there is a lot of that); many folks are interested in contributing to something bigger, something that makes the world a better place, even in the kinds of small ways that software can sometimes help.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.ultrasaurus.com/sarahblog/2009/04/gender-and-sex-at-gogaruco/#comment-543"&gt;Julia Evans&lt;/a&gt;: In any case, this is a good example of how insular the software development environment is. It is a boy&amp;#8217;s club, where locker-room behavior is overlooked, and indeed, not even acknowledged.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/deirdresm/status/1642242174"&gt;Deirdre Saoirse Moen&lt;/a&gt;: DHH&amp;#8217;s responses pretty much follow my own take on the issue despite our differences in taste. [&amp;#8230;] I didn&amp;#8217;t see it, granted, but I generally don&amp;#8217;t have an issue with pr0n, though it isn&amp;#8217;t my cuppa either.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/bifurcations/status/1641118920"&gt;Libbey White&lt;/a&gt;: (&lt;em&gt;Also, don&amp;#8217;t miss her joke about bringing rhinestone-encrusted mace cans to RailsConf.&lt;/em&gt;) i&amp;#8217;m not all freaked out or anything, but it does set a certain tone that i&amp;#8217;m leery of. (i thought amy newell kinda nailed it.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/desi/status/1642426095"&gt;Desi McAdam&lt;/a&gt;: (Who is moderating a &lt;a href="http://en.oreilly.com/rails2009/public/schedule/detail/8772"&gt;discussion on women&lt;/a&gt; at RailsConf.) [&amp;#8230;] it is an emotionally difficult discussion and I have been trying to keep my opinion to myself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://dyepot-teapot.com/2009/04/25/dear-fellow-rubyists/"&gt;Audrey Eschright&lt;/a&gt;: Ruby (and Rails in particular) loves the rock star image. You see it in job posts, how people talk about their work, and the way Rubyists rant on their blogs. It&amp;#8217;s macho, it can be offputting to both genders, and it makes it easy in this kind of situation to say, &amp;#8220;what&amp;#8217;s your problem? I&amp;#8217;m just busy being awesome&amp;#8221;. It&amp;#8217;s also a significant barrier to adoption for people who aren&amp;#8217;t already a part of this culture, and don&amp;#8217;t find it appealing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/#comment-1091"&gt;Lindsay Ucci&lt;/a&gt;: Getting women &lt;strong&gt;involved&lt;/strong&gt; in the IT world is not the main issue here. It&amp;#8217;s about those if us that are already here. I, and many like me, have felt extremely uncomfortable in work situations because of the men I worked with &amp;amp; their &amp;#8220;macho jokes.&amp;#8221; However, I don&amp;#8217;t even really think that this particular issue is a women vs. men debate. I was disappointed by the presentation simply because it was, in my opinion, inappropriate for a professional setting.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/#comment-1004"&gt;Noirin Plunkett&lt;/a&gt;: (&lt;em&gt;Regarding Mike Gunderloy&amp;#8217;s decision to leave the Rails team.&lt;/em&gt;) It seems like so often in these things, even the &amp;#8220;good guys&amp;#8221; just tsk-tsk and shake their heads, without being willing to stand up and be counted. Actions speak louder than words&amp;#8230;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/"&gt;Jessica Ann Yeo&lt;/a&gt;: (&lt;em&gt;Also to Mike.&lt;/em&gt;) I read the D16 &amp;#8211; Gender: Integrated Report of Findings and if I had to work in the environments described there, I know I&amp;#8217;d leave too. Good for you for standing up for your values. I&amp;#8217;m glad to see that at least some guys are more enlightened.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/#comment-1012"&gt;Beth C.&lt;/a&gt;: (&lt;em&gt;Ibid.&lt;/em&gt;) It&amp;#8217;s great to see that there are people out there who get it. Thank you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/#comment-1010"&gt;Charlotte Oliver&lt;/a&gt;: (&lt;em&gt;Ditto.&lt;/em&gt;) &lt;em&gt;Applause.&lt;/em&gt; Thank you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://afreshcup.com/2009/04/28/a-painful-decision/#comment-992"&gt;Karen Reid&lt;/a&gt;: [&amp;#8230;] I hope that the core developers will soon realize the talent that they are losing through their reprehensible behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.renaebair.com/2009/04/27/perform-like-a-frag-star/"&gt;Renae Bair&lt;/a&gt;: So big fucking deal if Matt Aimonetti showed you some chicks in thongs to make a somewhat amusing point. &lt;span class="caps"&gt;YES&lt;/span&gt;, Matt&amp;#8217;s slides gave me major douche chills. It was odd and I didn&amp;#8217;t quite like it. But I was not offended, nor did I care how professional/unprofessional it was.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://dyepot-teapot.com/2009/04/25/dear-fellow-rubyists/#comment-2382"&gt;Rose&lt;/a&gt;: As a young women in tech, I can tell you I would be extremely uncomfortable in a classroom of thirty young men and me if an instructor used sex as a metaphor for teaching. There are so many other things in nature and society that can be used it&amp;#8217;s best to not bring sex into it because most people are uncomfortable in public because of it. I think my discomfort comes from the fact that we need to maintain a respectable attitude towards one another to get along and a lot of men have enough trouble seeing women as intellectual equals without a respected community expert or leader bringing those attitudes to everyone&amp;#8217;s attention.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.sarahmei.com/blog/?p=46"&gt;Sarah Mei&lt;/a&gt;: (Who is moderating a &lt;a href="http://en.oreilly.com/rails2009/public/schedule/detail/8772"&gt;discussion on women&lt;/a&gt; at RailsConf.) I voted for it, actually, because CouchDB is one of those things that&amp;#8217;s the new hotness and I haven&amp;#8217;t had a chance to play with it, and besides, he wouldn&amp;#8217;t actually put porn in the slides. Right? [&amp;#8230;] I&amp;#8217;m a minority in this community. I know that, and generally I can ignore it and go along thinking it&amp;#8217;s a meritocracy of ideas and code. Then I encounter a woman&amp;#8217;s thonged rear on the screen at a conference, 20 feet tall, and I remember, oh yeah, people like me don&amp;#8217;t belong here. To most of these men around me, I am, at best, an oddity, and at worst, a sexual target. I feel a little less safe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.sarahmei.com/blog/?p=46&amp;#38;cpage=1#comment-11"&gt;Victoria Wang&lt;/a&gt;: DHH&amp;#8217;s attitude seems to say that the more we lower ourselves to the most base level of marketing scum in the name of entertainment, the better, even if at the end of the day there are no more women, or anyone worth knowing, in the room. It kind of makes me want to never touch Rails code again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://hackety.org/2009/04/29/aSelectionOfThoughtsFromActualWomen.html#comments"&gt;Jenna Fox&lt;/a&gt;: (&lt;em&gt;Below.&lt;/em&gt;) Am I supposed to leave one of my creative passions because the community is full of sexist arseholes and men who don&amp;#8217;t stand up against injustice?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://hackety.org/2009/04/29/aSelectionOfThoughtsFromActualWomen.html#comments"&gt;Amy Hoy&lt;/a&gt;: (&lt;em&gt;Below.&lt;/em&gt;) And if people don&amp;#8217;t &amp;#8220;get&amp;#8221; your &amp;#8220;jokes,&amp;#8221; the correct response is not &amp;#8220;There&amp;#8217;s something wrong with you&amp;#8221; but rather &amp;#8220;Lemme take that one back to the drawing board.&amp;#8221; Teachers don&amp;#8217;t get to blame their students, writers don&amp;#8217;t get to blame their readers, and comedians never get to blame their audience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://lizkeogh.com/2009/04/29/i-am-not-a-pr0n-star-avoiding-unavoidable-associations/"&gt;Liz Koegh&lt;/a&gt;: (&lt;em&gt;Read all of it, very analytical.&lt;/em&gt;) There&amp;#8217;s a subconscious association going on in that show, too; another proximity which is harder to spot. We&amp;#8217;ve just experienced words of technology &amp;#8211; key phrases like scalability, &lt;span class="caps"&gt;REST&lt;/span&gt;, public interfaces &amp;#8211; with images of women whom we&amp;#8217;re told are available for visual sexual gratification. There are a few men in some of the images; they appear to me to be in positions of power and influence. The images of women, on the other hand, tend to be submissive. So we&amp;#8217;re learning, subconsciously, that women associated with technology are also associated with sexual gratification and submissiveness. (The only strong women in the slideshow are associated with conflict, which we try to avoid.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.soycow.org/meep/?p=1067"&gt;Cameron&lt;/a&gt;: Censorship will not change people&amp;#8217;s minds or make them explore themselves. In fact, by letting these things out in the open, we in the tech community should use this as a point of discussion and perhaps even chastising. It is difficult for men to examine their own privilege because it manifests itself in complicated ways. Men also have to be willing to listen critically to what others are saying.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://hackety.org/2009/04/29/aSelectionOfThoughtsFromActualWomen.html#comments"&gt;Anita Kuno&lt;/a&gt;: (&lt;em&gt;Below.&lt;/em&gt;) It confirms my gut feeling as well that the gatherings that are the most appropriate for my information intake needs are small meet-ups and local events.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://hackety.org/2009/04/29/aSelectionOfThoughtsFromActualWomen.html#comments"&gt;Renai Fox&lt;/a&gt;: (&lt;em&gt;Below.&lt;/em&gt;) We don&amp;#8217;t yet live in a nudist paradise where people don&amp;#8217;t have hang-ups about sex issues. It doesn&amp;#8217;t matter if you think other people should stop being &amp;#8220;prudes&amp;#8221;, it was obvious that the images would make some people feel uncomfortable and unwelcome. If the conference wasn&amp;#8217;t intended to make everyone feel welcome, then what was it? A club.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://catherinedevlin.blogspot.com/2009/04/right-to-complaint.html"&gt;Catherine Devlin&lt;/a&gt;: (&lt;em&gt;Actually a Pythonista, but still&amp;#8230;&lt;/em&gt;) The key is the right to complain safely. When complaints are predictably met with accusations of &amp;#8220;overreacting&amp;#8221;, &amp;#8220;political correctness&amp;#8221;, and &amp;#8220;intolerance&amp;#8221;, the resulting message is: Be like us, be silent, or leave.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://sarahtaraporewalla.com/thoughts/women-in-it/how-i-perform-like-a-p0rn-star/"&gt;Sarah Taraporewalla&lt;/a&gt;: Was I offended by the presentation? I don&amp;#8217;t know; I wasn&amp;#8217;t there, so I don&amp;#8217;t feel that I can really comment. Was I offended by the reactions and the aftermath? Yeah, I was, although I was not surprised. Would I want to get in my DeLorean and stop Matt from doing the presentation? Hell-to-the-no. I think that we should embrace this storm and let it be a catalyst to changing our minds, our behavior and our industry.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://girldeveloper.com/intar-social-commentary/c-mon-you-guys-we-can-do-better-than-this/"&gt;Sara J. Chipps&lt;/a&gt;: (&lt;em&gt;Representing .&lt;span class="caps"&gt;NET&lt;/span&gt;.&lt;/em&gt;) It is difficult to encourage young girls to get in this field. I get emails all the time. It is scary being &amp;#8220;the only girl in your class,&amp;#8221; and one of three in a room of fifty people. It&amp;#8217;s scary to ask questions when you&amp;#8217;re afraid your entire gender will be judged by your grasp of a concept. Asking girls to brave these situations because writing software is fun, and interesting, and exciting is a moot point when faced with these type of stories.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/rails-activism/msg/f9eb50ae8d8e27c1"&gt;Leah Silber&lt;/a&gt;: (&lt;em&gt;An organizer of GoGaRuCo.&lt;/em&gt;) I find the generalization that this offended women to be offensive. It offended &lt;strong&gt;people&lt;/strong&gt; &amp;#8212; not women selectively or by any majority. See? It&amp;#8217;s a slippery slope and we&amp;#8217;d best err on the side of being open-minded, rather than calling for book (or slide, as it were) burnings.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;#8217;ll end there, for now. These are just excerpts of a battle that is really sprawling. I&amp;#8217;m trying to make this thorough, but reaction on Twitter is particularly hard to follow. (Naturally, if any of you who I&amp;#8217;ve quoted above feel misrepresented, I&amp;#8217;ll be glad to replace it or remove it.)&lt;/p&gt;
&lt;p&gt;Anyway, if you are a hacker mademoiselle who has a comment, please post below (a link even) or send it &lt;a href="http://twitter.com/_why"&gt;my way&lt;/a&gt; on Twitter.&lt;/p&gt;</content></entry><entry xml:base="/2009/03/18/goodbyeCruelHelloWorld.html"><title xml:space="preserve">Goodbye, Cruel Hello World</title><link href="/2009/03/18/goodbyeCruelHelloWorld.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FgoodbyeCruelHelloWorld</id><published xml:space="preserve">2009-03-18T23:35:23Z</published><updated xml:space="preserve">2009-03-18T23:35:23Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;What makes a good &lt;a href="http://www.roesler-ac.de/wolfram/hello.htm"&gt;Hello World&lt;/a&gt; program? Because Hello World itself is a terrible Hello World.&lt;/p&gt;
&lt;div style="text-align: center"&gt;&lt;object width="640" height="480"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3753964&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3753964&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/object&gt;&lt;/div&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;What makes a good &lt;a href="http://www.roesler-ac.de/wolfram/hello.htm"&gt;Hello World&lt;/a&gt; program? Because Hello World itself is a terrible Hello World.&lt;/p&gt;
&lt;p&gt;You have to find something that:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Is brief, like a single line.&lt;/li&gt;
	&lt;li&gt;Functions in a sensory fashion.&lt;/li&gt;
	&lt;li&gt;Perhaps even plays to a language&amp;#8217;s strength.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Case in point: what if your language is no good at showing text?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ajstarks/3342591714/sizes/l/"&gt;&lt;img src="http://hackety.org/images/atonal.png" class="cb" title="A crisp, clear piano, rambling on for decades." alt="A crisp, clear piano, rambling on for decades." /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Luke DuBois has a Hello World for Max/&lt;span class="caps"&gt;MSP&lt;/span&gt; that reads like the above. He starts simple, with just the checkbox, the sample, a &lt;code&gt;random 128&lt;/code&gt; and a &lt;code&gt;noteout&lt;/code&gt;. It&amp;#8217;s a nice grand piano, putting down notes willy-nilly. And he gradually gets the duration and intervals of the notes randomized with a few more words.&lt;/p&gt;
&lt;p&gt;Once it&amp;#8217;s going, he clicks off to the side and types out: &lt;code&gt;random atonal crap&lt;/code&gt;. And says aloud, &amp;#8220;Or this is how you win the Pulitzer Prize for Music, circa 1973.&amp;#8221;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s a bona fide Hello World.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Hello World in a terminal is a certain kind of deadness. Terminals are useful but musty things. It&amp;#8217;s a mute, fixed-width hello. (And, I mean, where do you take the program from there? Sure, fill up the window with Hello World, great.)&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/helloworld.png" class="c" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You may resist this by saying that Hello World is just a sanity test, nothing more.&lt;/p&gt;
&lt;p&gt;Hey now, it&amp;#8217;s the first program a beginner runs. It&amp;#8217;s the hook at the start of a novel, the first scene of a movie, the initial chords. You don&amp;#8217;t get psyched by a mic check. You at least want to see the fog machine going.&lt;/p&gt;
&lt;p&gt;They don&amp;#8217;t countdown from 5 to 1 with a color clock at the start of a movie any more. Sanity tests are outmoded. We&amp;#8217;re all sane here. Or past sanity, we&amp;#8217;re on to the next thing.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Okay, here&amp;#8217;s a rough approximation of Luke&amp;#8217;s demo, while we wait for the real videos to be released. Me, an hour into goofing with Max/&lt;span class="caps"&gt;MSP&lt;/span&gt;.&lt;/p&gt;
&lt;div style="text-align: center"&gt;&lt;object width="640" height="480"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3753964&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3753964&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480"&gt;&lt;/embed&gt;&lt;p&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/3753964"&gt;&lt;small&gt;Hello World, the Song (in Max/MSP)&lt;/a&gt;&lt;br /&gt;from &lt;a href="http://vimeo.com/user1453499"&gt;why the lucky stiff&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/small&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I took a poll in the Drawing Cats with Hackety Hack class: what&amp;#8217;s your ideal Hello World? Before I let on what their responses were, tell me your thoughts.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s your ideal first program for an utter neophyte?&lt;/p&gt;</content></entry><entry xml:base="/2009/03/13/ctrlB.html"><title xml:space="preserve">Ctrl+B For Concurrency</title><link href="/2009/03/13/ctrlB.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FctrlB</id><published xml:space="preserve">2009-03-13T18:23:31Z</published><updated xml:space="preserve">2009-03-13T18:23:31Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/golanlevin/3349985414/in/photostream/"&gt;&lt;img src="http://hackety.org/images/artandcode1.jpg" class="cb" title="Photo by Golan Levin." alt="Photo by Golan Levin." /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve walked away from &lt;a href="http://artandcode.ning.com"&gt;&lt;span class="caps"&gt;ART&lt;/span&gt; &amp;amp; &lt;span class="caps"&gt;CODE&lt;/span&gt;&lt;/a&gt; in Pittsburgh with a pile of new hackers to idolize. Krikey, the things these artists are doing while everyone else is rewording their unit tests and staring at the &lt;span class="caps"&gt;TIOBE&lt;/span&gt; index. My mind has been shredded into wispy, semi-autonomous ribbons.&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/golanlevin/3349985414/in/photostream/"&gt;&lt;img src="http://hackety.org/images/artandcode1.jpg" class="cb" title="Photo by Golan Levin." alt="Photo by Golan Levin." /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve walked away from &lt;a href="http://artandcode.ning.com"&gt;&lt;span class="caps"&gt;ART&lt;/span&gt; &amp;amp; &lt;span class="caps"&gt;CODE&lt;/span&gt;&lt;/a&gt; in Pittsburgh with a pile of new hackers to idolize. Krikey, the things these artists are doing while everyone else is rewording their unit tests and staring at the &lt;span class="caps"&gt;TIOBE&lt;/span&gt; index. My mind has been shredded into wispy, semi-autonomous ribbons.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/vvvv.gif" class="rb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;One profound change of mind for me is this: I haven&amp;#8217;t given visual languages a fair shake. These languages (such as Max/&lt;span class="caps"&gt;MSP&lt;/span&gt; and vvvv) aren&amp;#8217;t just good languages. To watch someone code fluently on a canvas just looks completely natural. And, particularly in the case of &lt;a href="http://vvvv.org"&gt;vvvv&lt;/a&gt;, you have a language which moves effortlessly between visual and textual. (I&amp;#8217;ll cover that more next week.)&lt;/p&gt;
&lt;p&gt;vvvv defies so much of the usual criterion. The thing runs only on Windows and is written in Delphi.  For scripting, it embeds a language called &lt;span class="caps"&gt;HLSL&lt;/span&gt;. (Who really cares, though. No one&amp;#8217;s going to put away Zelda if we ever found out it had some Visual Basic in it.) Sebastian wasn&amp;#8217;t apologetic of Delphi, he doesn&amp;#8217;t seem to know bout the language wars, and I was more than happy to forego the opinions.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/schmarty/3344879765/"&gt;&lt;img src="http://hackety.org/images/artandcode2.jpg" class="cb" title="Photo by Marty McGuire." alt="Photo by Marty McGuire." /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yes, that&amp;#8217;s Sebastian Oschatz in the green scarf. He is normally joined by Max Wolf, Sebastian Gregor and Joreg, who comprise the rest of the vvvv team.&lt;/p&gt;
&lt;p&gt;As you can clearly see, he&amp;#8217;s a nice, gentle fellow who believes in visual coding and kept needling me all weekend to cross over to their side.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;A vvvv program looks like this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vvvv.org/tiki-browse_image.php?galleryId=11&amp;amp;sort_mode=created_desc&amp;amp;desp=0&amp;amp;offset=0&amp;amp;imageId=6834"&gt;&lt;img src="http://hackety.org/images/vvvv1.gif" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the output can be, well, &lt;a href="http://www.flickr.com/photos/tags/vvvv"&gt;anything beautiful&lt;/a&gt; at all.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/22914155@N07/3329732666/"&gt;&lt;img src="http://hackety.org/images/vvvv2.jpg" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Oh and if you plan to install vvvv, be sure to read the &lt;a href="http://vvvv.org/tiki-index.php?page=Downloads"&gt;Installation Issues&lt;/a&gt; notice at the bottom of the download page. DirectX gave me problems until I slowed down and gave all those points my full attention.)&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;One astounding feature of vvvv is a thing they call &lt;em&gt;boygrouping&lt;/em&gt;. (An allusion to the precision that can only achieved by young pop stars thanks to the gift of the hands-free mic.)&lt;/p&gt;
&lt;p&gt;He drove the point home with this photo, taking care to point out the sublime positioning of the hands. Imagine each hand is a box running vvvv.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/boygroup1.png" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;So, let&amp;#8217;s say you have a taxing operation in vvvv that you want to farm out to an armada of machines, all of whom are listening intently. Or, more commonly, you might be spreading an animation out between displays, but keeping the timing unified.&lt;/p&gt;
&lt;p&gt;Every node in vvvv has a set of inputs (at the top of the node) and and a set of outs (at bottom.) You simply highlight the nodes you want to boygroup and hit Ctrl+B.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vvvv.org/tiki-index.php?page=Boygrouping"&gt;&lt;img src="http://hackety.org/images/boygroup2.gif" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And they turn blue. Syntax highlighting, let&amp;#8217;s call it.&lt;/p&gt;
&lt;p&gt;The input value coming into the &lt;span class="caps"&gt;LFO&lt;/span&gt; node (a single toggle button value) gets marshalled and broadcast over &lt;span class="caps"&gt;UDP&lt;/span&gt; periodically to the group. Only primitive data types are transferred (numbers, strings, colors) and the highlighted nodes are executed on all slaves. If you discover that too much data is being passed around, maybe the block you chose isn&amp;#8217;t working spread out, you can simply re-highlight and Ctrl+B to try a different set of ins and outs.&lt;/p&gt;
&lt;p&gt;Each machine in the boygroup has its own ID, so you can selectively pass data to certain machines and choreograph with finer control.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re running vvvv right now and hitting Ctrl+B and wondering why you&amp;#8217;re not suddenly controlling a fleet somewhere on Earth, bear in mind that you have &lt;a href="http://vvvv.org/tiki-index.php?page=Boygrouping"&gt;some setup&lt;/a&gt; to do in advance. (Namely, running vvvv with either &lt;code&gt;/client&lt;/code&gt; or &lt;code&gt;/server&lt;/code&gt; flags, then initiating a connection with each machine.)&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/boygroup3.gif" class="c" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Abstracting concurrency away to a hotkey. Can you believe that? Wild. There&amp;#8217;s more even. And I&amp;#8217;ll get into it next week.&lt;/p&gt;</content></entry><entry xml:base="/2009/02/26/theBugsBehindDatamoshing.html"><title xml:space="preserve">How Are Those Guys Datamoshing?</title><link href="/2009/02/26/theBugsBehindDatamoshing.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FtheBugsBehindDatamoshing</id><published xml:space="preserve">2009-02-26T06:38:23Z</published><updated xml:space="preserve">2009-02-26T06:38:23Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;I want you to tell me if this guy is a programmer. Certainly he&amp;#8217;s a hacker of some kind. This isn&amp;#8217;t a great video, but here&amp;#8217;s a cam of &lt;em&gt;Pink Dot&lt;/em&gt; by Takeshi Murata:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d87FaWdj3L0&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/d87FaWdj3L0&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;Ignore the word &lt;em&gt;datamoshing&lt;/em&gt; for a second, just like you ignore the word &lt;em&gt;blog&lt;/em&gt;. I want you to tell me if this guy is a programmer. Certainly he&amp;#8217;s a hacker of some kind. This isn&amp;#8217;t a great video, but here&amp;#8217;s a cam of part of &lt;em&gt;Pink Dot&lt;/em&gt; by Takeshi Murata:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d87FaWdj3L0&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/d87FaWdj3L0&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Dousing videos with compression artefacts is &lt;a href="http://kottke.org/09/02/another-jpeg-artifact-video"&gt;just burgeoning&lt;/a&gt; (and in a year everyone&amp;#8217;s going to be sick of it) but I&amp;#8217;m convinced Takeshi&amp;#8217;s work will stick around a lot longer. Allegedly, artists can&amp;#8217;t sit still in their seats during his shows and &lt;a href="http://streetbonersandtvcarnage.com/blog/dear-street-carnage-kanye-and-chairlift-both-ripped-it-off/"&gt;they dash home&lt;/a&gt; to dupe his style.&lt;/p&gt;
&lt;p&gt;Some stills, to get a little closer to this:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/pinkdot.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/pinkdot2.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/pinkdot3.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/pinkdot4.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/pinkdot5.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;I don&amp;#8217;t want to talk about giving the guy credit, though. He&amp;#8217;ll get credit since his work has longevity. There&amp;#8217;s a myth and legend to his style and it revolves around the question: &lt;em&gt;is he programming this stuff or what? Is he in control?&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://streetbonersandtvcarnage.com/blog/dear-street-carnage-kanye-and-chairlift-both-ripped-it-off/"&gt;Kathy Grayson&lt;/a&gt;: (&lt;em&gt;curator of a show he was in&lt;/em&gt;) Takeshi invented the technique of &lt;ins&gt;reprograming the way your computer reads video and compresses it&lt;/ins&gt; to make the swirly pixel stuff you posted on your blog. It is not called &amp;#8220;roundabout&amp;#8221; or whatever your blog said, I mean maybe that is what Kanye calls it? Sounds retarded.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=d87FaWdj3L0"&gt;tootite4liph&lt;/a&gt;: (&lt;em&gt;YouTube commenter, some friend of a friend&lt;/em&gt;) He turns the video files into to text. when the videos are in text form he &lt;ins&gt;manipulates them by deleting code&lt;/ins&gt; etc. apparently he did a lot of commercial work so he was around tech savy guys and this is how he learned.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=d87FaWdj3L0"&gt;chadvonnau&lt;/a&gt;: (&lt;em&gt;another YouTube commenter, extrapolating&lt;/em&gt;) Most modern video codecs are made up of keyframes and in between frames. The keyframes are full images, but the in between frames only record what has changed from the previous frame. When it&amp;#8217;s working correctly, it creates the illusion of continuous sequential images, but with much smaller file sizes. Takeshi is manipulating this process in a way where he is &lt;ins&gt;arbitrarily inserting and removing keyframes&lt;/ins&gt;, so that the inbetween frames (which represent motion) become the focus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The truth of these quotes is totally dubious, but that doesn&amp;#8217;t matter. Look how bewildered everyone is about his technique! He&amp;#8217;s deleting code. Then he&amp;#8217;s reprogramming the ways computers work. Then he&amp;#8217;s converting &lt;span class="caps"&gt;VIDEO&lt;/span&gt; TO &lt;span class="caps"&gt;TEXT&lt;/span&gt; &lt;span class="caps"&gt;THEN&lt;/span&gt; &lt;span class="caps"&gt;BACK&lt;/span&gt; TO &lt;span class="caps"&gt;VIDEO&lt;/span&gt;! Yeah, that&amp;#8217;s it!&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Now, I hate to do this to you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/gneumatic/statuses/1221747399"&gt;gneumatic&lt;/a&gt;: (&lt;em&gt;taking notes during a talk by Murata&lt;/em&gt;) No significant use of code in Takeshi Murata&amp;#8217;s work (other than automating simple tasks) &amp;#8211; not sure if that makes me happy or sad&amp;#8230;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It makes you sad! People want to believe he&amp;#8217;s hacking. They want to think he&amp;#8217;s away wizarding down in the assembler. The illusion is supported by the volumes of pixels and colors that seem to be acting in psuedo-random fashion. That guy must be god to go in there and ransack the machine and twist it as he pleases.&lt;/p&gt;
&lt;p&gt;They all envy the hacker. Somewhere deep down in their &lt;span class="caps"&gt;EAX&lt;/span&gt; registers.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Now, before I let you go, here&amp;#8217;s one other thing I want you to think about. Explain this one:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/B3fo9uF52Lc&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/B3fo9uF52Lc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;See, this guy is no one-trick pony.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://www.youtube.com/watch?v=tYytVzbPky8"&gt;A guy&lt;/a&gt; on YouTube explains how to use ffmpeg and avidemux to do all this. And while it&amp;#8217;s looking more and more like this is done by hand, you could get a bot to randomly stitch streams together this way.&lt;/p&gt;
&lt;p&gt;It seems obvious now why this effect is so easy! Since still parts of the shots are wiped out by the lossy, you&amp;#8217;re left with purely the motion. Bodies emerge from the effect naturally.&lt;/p&gt;</content></entry><entry xml:base="/2009/02/05/theFundamentalLittleHackersSummit.html"><title xml:space="preserve">The Fundamental Little Hackers' Summit</title><link href="/2009/02/05/theFundamentalLittleHackersSummit.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FtheFundamentalLittleHackersSummit</id><published xml:space="preserve">2009-02-05T18:06:36Z</published><updated xml:space="preserve">2009-02-05T18:06:36Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://artandcode.com"&gt;&lt;img src="http://hackety.org/images/art-and-code-lady.png" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://artandcode.com"&gt;&lt;img src="http://hackety.org/images/art-and-code-lady.png" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One month left until the little, budget, low-key conference that no one&amp;#8217;s ever heard of! Small as it is, though, this is a big deal for Hacker&amp;#8217;s Ed. The first time we&amp;#8217;ve had our own conference. The creators of Processing, bits of the Alice and Scratch teams. My sources say you&amp;#8217;re talking in the vicinity of a hundred bucks for out-of-towners. Discounts for young folks. And locals moreso.&lt;/p&gt;
&lt;p&gt;The thing will go roughly like this:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Saturday &amp;#8211; each team gets their own room to show you how to hack, both morning and afternoon. Like five hours in all. These will be workshops. Bring your laptop. You can concentrate on one tool or you can float around.&lt;/li&gt;
	&lt;li&gt;Sunday &amp;#8211; everybody&amp;#8217;s together and you&amp;#8217;ll see fourty-five minute showcases of each tool. And some general discussion about what kind of ideals we&amp;#8217;re all trying to espouse.&lt;/li&gt;
	&lt;li&gt;Monday &amp;#8211; again, workshops. Local school kids come in on these days and the classes will be very basic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This whole conference was cooked up Golan Levin. If you have no idea who that is, that&amp;#8217;s probably my fault. I should have &lt;a href="http://www.ted.com/index.php/talks/golan_levin_on_software_as_art.html"&gt;posted this&lt;/a&gt; awhile ago. Seriously, what a fantastic sort of fellow.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Lovely sentiment from the &lt;a href="http://artandcode.ning.com/page/motivation-1"&gt;motivation&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Recently, a number of projects dedicated to democratizing the education of computational thinking have coalesced. Emerging primarily from the arts sector, a set of new programming environments (and accompanying pedagogic techniques) have been developed &lt;em&gt;by artists, and for artists&lt;/em&gt;, that help regular folks and other non-computer-scientists learn to program. Using visual and musical expression as the &amp;#8220;hook&amp;#8221;, thousands of people have not only learned to code using these new environments, but found new reasons to code in the first place. These environments &amp;#0151; many of which are free, open-source initiatives &amp;#0151; have made enormous inroads towards expanding the computational abilities and interests of hundreds of thousands of creative people worldwide. You too can join this movement!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kind of like a cross-language community, yeah? Imagine that.&lt;/p&gt;</content></entry><entry xml:base="/2009/02/02/aClassyContextFreeBook.html"><title xml:space="preserve">A Classy Context Free Book</title><link href="/2009/02/02/aClassyContextFreeBook.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FaClassyContextFreeBook</id><published xml:space="preserve">2009-02-02T18:55:51Z</published><updated xml:space="preserve">2009-02-02T18:55:51Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://www.blurb.com/books/171296"&gt;&lt;img src="http://hackety.org/images/context-free-book.png" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://www.blurb.com/books/171296"&gt;&lt;img src="http://hackety.org/images/context-free-book.png" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Context Free community has assembled this remarkable coffee table book of art from their &lt;a href="http://www.contextfreeart.org/gallery/view.php?id=728"&gt;gallery&lt;/a&gt;. Each page is an image and its code, illustrating the notable and succinct cunning of their little tool. The book says 2005 &amp;#8211; 2007, but it looks like it was published &lt;del&gt;the other day&lt;/del&gt; &lt;a href="http://www.blurb.com/bookstore/detail/171296"&gt;some time ago&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I hope this sets a precedent for the Processing people, who have made a habit of putting out some &lt;a href="http://flickr.com/photos/abstractmachine/726085527/"&gt;absurdly thick&lt;/a&gt; textbooks of late. This Context Free book is slim and punchy: 150 pages of just graphics and code. It&amp;#8217;s not exhaustive and it doesn&amp;#8217;t narrate, but it looks fun and it gets right to the graphics. In the spectrum of Hack-Ed literature, this quadrant is far too sparsely populated. (Also, I understand that Dan Shiffman&amp;#8217;s Processing book is (&lt;a href="http://flickr.com/photos/abstractmachine/2909195001/"&gt;maybe?&lt;/a&gt;) more bite-sized and gentle.)&lt;/p&gt;
&lt;p&gt;For some close-ups, go &lt;a href="http://www.blurb.com/books/171296"&gt;fullscreen&lt;/a&gt; and they show a few pages.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.contextfreeart.org/mediawiki/index.php/Community_of_Variation"&gt;&lt;img src="http://hackety.org/images/context-free-cover.png" class="c" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Too expensive for you? Prefer Processing or NodeBox? Make your own. I mean there&amp;#8217;s code all over the web. And if you get back to me with a link, I&amp;#8217;ll be sure to pass it on to the readers here.&lt;/p&gt;</content></entry><entry xml:base="/2009/01/30/empathyAndOtherMiniaturePygameHacks.html"><title xml:space="preserve">Empathy And Other Miniature Pygame Hacks</title><link href="/2009/01/30/empathyAndOtherMiniaturePygameHacks.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FempathyAndOtherMiniaturePygameHacks</id><published xml:space="preserve">2009-01-30T19:01:34Z</published><updated xml:space="preserve">2009-01-30T19:01:34Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://code.google.com/p/vectorpoem/wiki/empathy"&gt;&lt;img src="http://hackety.org/images/empathy-anim.gif" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://code.google.com/p/vectorpoem/wiki/empathy"&gt;&lt;img src="http://hackety.org/images/empathy-anim.gif" class="cb" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You know, you don&amp;#8217;t have to finish a game or a project for it to be worth it. Before you throw all the time into writing your own protocols and scrabbling together a client/server and doing all the art&amp;#8230; why not do something primitive to get your act together?&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s not a stunning monologue or anything. It&amp;#8217;s just an introductory paragraph and segue into this series of experimental games done by &lt;a href="http://vectorpoem.com/"&gt;JP LeBreton&lt;/a&gt;. His experiments are short. Nice and digestable. I really like this one pictured above called &lt;a href="http://code.google.com/p/vectorpoem/wiki/empathy"&gt;Empathy&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;To bring it up on Ubuntu:&lt;/p&gt;
&lt;pre&gt;&lt;code class="sh"&gt; $ apt-get install pygame subversion
 $ svn checkout http://vectorpoem.googlecode.com/svn/trunk/ vectorpoem
 $ cd vectorpoem/empathy
 $ PYTHONPATH=../shared python empathy.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;~300 lines. Move the mouse around. Spacebar to reset. Escape to quit.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Of special interest is how concise and nicely commented the code is where he builds the polygon shape outlining the lighted area.&lt;/p&gt;
&lt;pre&gt;&lt;code class="py"&gt; def update(self):
   # clear list from last frame
   self.points = []
   x, y = 0, 0
   angle = 0
   for i in range(LIGHT_CIRCLE_VERTICES):
     # determine circle edge point
     angle += math.radians(360.0 / LIGHT_CIRCLE_VERTICES)
     x = self.loc.x + math.cos(angle) * self.radius
     y = self.loc.y + math.sin(angle) * self.radius
     end = Vector2D(x, y)
     # trace to edge point
     trace = tile.Trace(self.loc, end, world)
     if trace.hit is False:
       self.points.append(end)
     else:
       self.points.append(trace.hit_loc)
       # add a point along edge of hit tile for proper "shadow" shape
       # turn angle into a normal
       angle_vec = Vector2D(math.sin(angle), math.cos(angle))
       # next point in direction of that normal is the correct one?
       next = trace.hit_tile.nearest_point(trace.hit_loc, angle_vec, trace.hit_line)
       self.points.append(next)
   self.polygon = Polygon(self.points) 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;See think about this: the &lt;code&gt;tile.Trace&lt;/code&gt; method determines if there are any walls in the way. Knowing that, can you see how the &lt;code&gt;trace&lt;/code&gt; object is used to cut off light at the wall?&lt;/p&gt;</content></entry><entry xml:base="/2009/01/29/loveInTwoDimensions.html"><title xml:space="preserve">Löve In Two Dimensions</title><link href="/2009/01/29/loveInTwoDimensions.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FloveInTwoDimensions</id><published xml:space="preserve">2009-01-29T20:09:44Z</published><updated xml:space="preserve">2009-01-29T20:09:44Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p style="text-align:center;"&gt;&lt;img src="http://hackety.org/images/love2d-particles.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a wonder. These pockets of people you can happen upon. The graphics environment is called &lt;a href="http://love2d.org"&gt;Löve&lt;/a&gt; and it&amp;#8217;s Lua and &lt;span class="caps"&gt;SDL&lt;/span&gt; glued together. So, somewhere between Pygame and Processing.&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p style="text-align:center;"&gt;&lt;img src="http://hackety.org/images/love2d-particles.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a wonder. These pockets of people you can happen upon. The graphics environment is called &lt;a href="http://love2d.org"&gt;Löve&lt;/a&gt; and it&amp;#8217;s Lua and &lt;span class="caps"&gt;SDL&lt;/span&gt; glued together. So, somewhere between Pygame and Processing.&lt;/p&gt;
&lt;p&gt;And it&amp;#8217;s actually a rather active community with &lt;a href="http://love2d.org/forum/"&gt;forums&lt;/a&gt; that are busy and full of tiny demos. It&amp;#8217;s an attractive, fun, flippant site &amp;#8212; which is surprisingly unusual among toolkits geared toward amateurs. (If you want to attract newbs to your site, I think you need to spend as much time on the art as you do on the code.)&lt;/p&gt;
&lt;p&gt;Anyway, yeah, runs on Windows, OS X and Linux.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Let&amp;#8217;s see, what else? How bout one of the creators of Löve showing how to move a potato around?&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;object width="504" height="380"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1628621&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1628621&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="504" height="380"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1628621"&gt;LÖVE Tutorial: Moving Around&lt;/a&gt; from &lt;a href="http://vimeo.com/michaelenger"&gt;Michael Enger&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;The documentation is also &lt;a href="http://love2d.org/docs/love_graphics.html"&gt;fantastic&lt;/a&gt;. (Look at the one-line summaries of functions &amp;#8212; that&amp;#8217;s the stuff.) I mean this is a noble effort and they&amp;#8217;re pulling it off.&lt;/p&gt;
&lt;p&gt;Many great built-in libraries for common physics and graphics trick. Take, for example, the class wrapping &lt;a href="http://love2d.org/docs/Animation.html"&gt;sprites&lt;/a&gt;. Or the standard &lt;a href="http://love2d.org/docs/ParticleSystem.html"&gt;particle system&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That last one&amp;#8217;s a good way to add explosions or steam effects to your game.&lt;/p&gt;
&lt;pre&gt;&lt;code class="lua"&gt; local p = love.graphics.newParticleSystem(circle, 1000)
 p:setEmissionRate(100)
 p:setSpeed(300, 400)
 p:setGravity(0)
 p:setSize(2, 1)
 p:setColor(clr(255, 255, 255, 255), clr(58, 128, 255, 0))
 p:setPosition(400, 300)
 p:setLifetime(1)
 p:setParticleLife(1)
 p:setDirection(0)
 p:setSpread(360)
 p:setRadialAcceleration(-2000)
 p:setTangentialAcceleration(1000)
 love.graphics.draw(p, 0, 0)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In summary: A+.&lt;/p&gt;
&lt;p&gt;Exceptional.&lt;/p&gt;
&lt;p&gt;Does need to cool off on its use of &lt;span class="caps"&gt;CPU&lt;/span&gt; and memory. You&amp;#8217;ll all help them fix that, right? Maybe even show them where Github is. All in all, fine fine work.&lt;/p&gt;</content></entry><entry xml:base="/2008/12/06/insideShoooesTwooo.html"><title xml:space="preserve">Inside Shoes 2</title><link href="/2008/12/06/insideShoooesTwooo.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FinsideShoooesTwooo</id><published xml:space="preserve">2008-12-06T07:59:19Z</published><updated xml:space="preserve">2008-12-06T07:59:19Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;The second &amp;#8220;stable&amp;#8221; release of Shoes has flown. We still have a lot to do. But, hey. It&amp;#8217;s happening, right?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shoooes.net/about/raisins/"&gt;&lt;img src="http://shoooes.net/images/shoes-splash.png" class="c" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This time I have some detailed &lt;a href="http://shoooes.net/about/raisins/"&gt;release notes&lt;/a&gt;, with screenshots and code fragments to help sort it all out.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://shoooes.net/about/raisins/"&gt;Inside Shoes 2&lt;/a&gt;: The second release of Shoes (called &amp;#8220;Raisins&amp;#8221; by many) is a culmination of a year of feature-filled additions to the first, experimental release of Shoes (titled &amp;#8220;Curious&amp;#8221;.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This release adds a built-in manual, an error console, RubyGems integration, simple asynchronous downloads, an in-memory and database-backed image cache, support for external fonts, and, most prominently, its own unique library for packaging apps into little executables. OS X support is significantly better, as we switched from Carbon to Cocoa.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A lot of these features were fleshed out here on the blog, with your responses proving very so very valuable indeedy.&lt;/p&gt;
&lt;p&gt;So, thanks for following along.  Shoes 3 (&amp;quot;Policeman&amp;quot;) will come around in, oh, January, I&amp;#8217;d hazard.&lt;/p&gt;</content></entry><entry xml:base="/2008/12/04/theFrustratingMagicalAspect.html"><title xml:space="preserve">The Frustrating Magical Aspect</title><link href="/2008/12/04/theFrustratingMagicalAspect.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FtheFrustratingMagicalAspect</id><published xml:space="preserve">2008-12-04T17:29:33Z</published><updated xml:space="preserve">2008-12-04T17:29:33Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;img src="http://hackety.org/images/rxvg-2.png" class="r" alt="" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://xrvg.rubyforge.org/XRVGPhilosophy.html"&gt;Julien Léonard&lt;/a&gt;: Actually, a graphic is foremost a composition of basic shapes and color. It is not their absolute values (that is absolute spatial and color coordinates) but their relations that matters. This is even more true because our visual perceptive chain processes its inputs in a relative way, as paradoxical visual games highlight it.&lt;/p&gt;
&lt;/blockquote&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;While plundering around in the NodeBox forums, I happened upon a very stirring library for creating &lt;span class="caps"&gt;SVG&lt;/span&gt; drawings in Ruby. Goes by the name of &lt;a href="http://xrvg.rubyforge.org/"&gt;&lt;span class="caps"&gt;XRVG&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/rxvg-1.png" class="lb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Let me give you an idea of the mind at work behind this. &lt;span class="caps"&gt;XRVG&lt;/span&gt; is a response to &amp;#8220;the frustrating magical aspect of generative fractals like the Mandelbrot set&amp;#8221; and, perhaps even moreso, &amp;#8220;the hermetique aspect of the dominant graphics programming toolkits notation.&amp;#8221; You get the sense this fellow&amp;#8217;s trying to work out new ways to express shapes, particularly generative shapes like fractals.&lt;/p&gt;
&lt;p&gt;And, for further study, I highly recommend the author&amp;#8217;s &lt;a href="http://www.fractalyze.blogspot.com/"&gt;blog of fractals&lt;/a&gt;, which he has filled with nearly 200 samples throughout the year.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Toward the middle of the &lt;a href="http://xrvg.rubyforge.org/XRVGPhilosophy.html"&gt;philosophy&lt;/a&gt; page, XRVG&amp;#8217;s author Julien Léonard goes into a very compelling rationale for why &lt;span class="caps"&gt;XRVG&lt;/span&gt; strays from using coordinate systems. I&amp;#8217;m quoting liberally from this, because it&amp;#8217;s really fantastic stuff that speaks well on behalf of context-free art kits.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/rxvg-2.png" class="r" alt="" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nearly every programming toolkit that you may find, in any programming language, instanciates shapes with absolute geometrical coordinates. What that means is that if you want to do graphics programming with them, you rapidly get lost in a list of basic drawing primitives with lots of numbers, without being able to recover the abstract compositional content of the graphic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Actually, a graphic is foremost a composition of basic shapes and color. It is not their absolute values (that is absolute spatial and color coordinates) but their relations that matters. This is even more true because our visual perceptive chain processes its inputs in a relative way, as paradoxical visual games highlight it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;As a consequence, &lt;span class="caps"&gt;XRVG&lt;/span&gt; strives to get rid of these absolutes, by using shapes and functions as numerical patterns to compute shapes and composition. Thus, if you want to draw five circles in a regular way, you must be able to do it without using trigonometric formulae to figure out where these circles have to be drawn. Instead, you just need to use a first circle and &amp;#8220;sample&amp;#8221; it five times to have subcircle centers.&lt;/p&gt;
&lt;/blockquote&gt;</content></entry><entry xml:base="/2008/11/25/sevenYearsLaterProcessingLeavesBeta.html"><title xml:space="preserve">Seven Years Later, Proce55ing Leaves Beta!</title><link href="/2008/11/25/sevenYearsLaterProcessingLeavesBeta.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FsevenYearsLaterProcessingLeavesBeta</id><published xml:space="preserve">2008-11-25T07:20:11Z</published><updated xml:space="preserve">2008-11-25T07:20:11Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.shiffman.net/2008/11/25/processing-10-launch/"&gt;Daniel Shiffman&lt;/a&gt;: At New York University&amp;#8217;s graduate &lt;span class="caps"&gt;ITP&lt;/span&gt; program, Processing is taught alongside its sister project Arduino and &lt;span class="caps"&gt;PHP&lt;/span&gt; as part of the foundation course for 100 incoming students each year. At &lt;span class="caps"&gt;UCLA&lt;/span&gt;, undergraduates in the Design | Media Arts program use Processing to learn the concepts and skills needed to imagine the next generation of web sites and video games. At Lincoln Public Schools in Nebraska and the Phoenix Country Day School in Arizona, middle school teachers are experimenting with Processing to supplement traditional algebra and geometry classes.&lt;/p&gt;
&lt;/blockquote&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;That&amp;#8217;s right. &lt;a href="http://www.processing.org/about/processing-1.0.zip"&gt;1.0.&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.processing.org/"&gt;Processing.org&lt;/a&gt;: The most important aspect of this release is its stability. However, we have added many new features during the last few months. They include a new optimized 2D graphics engine, better integration for working with vector files, and the ability to write tools to enhance the development environment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/1747316"&gt;&lt;img src="http://hackety.org/images/processing1.jpg" class="rb" title="Metamorphosis by Glen Marshall" alt="Metamorphosis by Glen Marshall" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What a great year for Processing. It&amp;#8217;s really poised to supplant Flash as the center of the art hacking kingdom and has influenced an avalanche of colorful software. Particularly when you think of the really successful offshoots that have surrounded it, such as Processing.js and Arduino.&lt;/p&gt;
&lt;p&gt;As it&amp;#8217;s picked up speed, it&amp;#8217;s left in its wake a fine pile of code-made &lt;a href="http://casualdata.com/newsknitter/"&gt;clothing&lt;/a&gt;, &lt;a href="http://www.vimeo.com/1994927"&gt;music videos&lt;/a&gt;, &lt;a href="http://www.worthersoriginal.com/viki/#page=shadowmonsters"&gt;theatrics&lt;/a&gt; and &lt;a href="http://rmx.cz/monsters/"&gt;flippant things&lt;/a&gt; aplenty. For pleasure and for break time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.shiffman.net/2008/11/25/processing-10-launch/"&gt;Daniel Shiffman&lt;/a&gt;: At New York University&amp;#8217;s graduate &lt;span class="caps"&gt;ITP&lt;/span&gt; program, Processing is taught alongside its sister project Arduino and &lt;span class="caps"&gt;PHP&lt;/span&gt; as part of the foundation course for 100 incoming students each year. At &lt;span class="caps"&gt;UCLA&lt;/span&gt;, undergraduates in the Design | Media Arts program use Processing to learn the concepts and skills needed to imagine the next generation of web sites and video games. At Lincoln Public Schools in Nebraska and the Phoenix Country Day School in Arizona, middle school teachers are experimenting with Processing to supplement traditional algebra and geometry classes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As Dan&amp;#8217;s post goes into, it&amp;#8217;s not just the popularity of Processing that is so exciting. It&amp;#8217;s one thing for a language to find popularity in the cubicles and server rooms. This is a toolkit that is fighting for legitimacy in classrooms, in the editing rooms, on the dance floors and in basements.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s almost like Processing is paving a new road for creative hackers that don&amp;#8217;t go for point-and-click and Flash&amp;#8217;s deeply nested timeline. Who are, let&amp;#8217;s just say, smarter than that. And, I mean, beyond that, Processing is open source. You can extend it into new territory.&lt;/p&gt;
&lt;p&gt;Huge congratulations to Ben Fry, Casey Reas and the rest of the people who made this happen.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;By the way, I&amp;#8217;ve also heard that Dan Shiffman&amp;#8217;s new book is sensational. I&amp;#8217;m sorry to say that Ira Greenberg&amp;#8217;s book troubled me with its extreme length and textbook pace. Maybe it works okay in a class room. I&amp;#8217;ve always found the online reference to be very good.&lt;/p&gt;
&lt;p&gt;Anyone out there actually read &lt;a href="http://www.learningprocessing.com/"&gt;Learning Processing&lt;/a&gt;, yet?&lt;/p&gt;</content></entry><entry xml:base="/2008/11/22/runningHot.html"><title xml:space="preserve">Running Hot</title><link href="/2008/11/22/runningHot.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FrunningHot</id><published xml:space="preserve">2008-11-22T16:38:58Z</published><updated xml:space="preserve">2008-11-22T16:38:58Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;Yes-s-s, Zed takes me on! Here&amp;#8217;s a good part:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.zedshaw.com/blog/2008-11-21.html"&gt;Zed Shaw&lt;/a&gt;: Why actually blessed me with his presence during one of my hacking sessions and made me feel smarter by association. I showed him Ragel (which he used to write Hpricot), and showed him some vim tricks, and he talked to Obie. &lt;ins&gt;It was great just having him warming the air near me.&lt;/ins&gt;&lt;/p&gt;
&lt;/blockquote&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;Yes-s-s, Zed takes me on! Here&amp;#8217;s a good part:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.zedshaw.com/blog/2008-11-21.html"&gt;Zed Shaw&lt;/a&gt;: Why actually blessed me with his presence during one of my hacking sessions and made me feel smarter by association. I showed him Ragel (which he used to write Hpricot), and showed him some vim tricks, and he talked to Obie. &lt;ins&gt;It was great just having him warming the air near me.&lt;/ins&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My coils tend to run &lt;span class="caps"&gt;VERY&lt;/span&gt; &lt;span class="caps"&gt;HOT&lt;/span&gt;. And I fart a lot.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;He makes a very sore point about Shoes &amp;#8220;taking that wonderfully stable Ruby interpreter his friend Matz wrote to the edges of all that is possible in computing.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Ouch, that smarts. And it&amp;#8217;s totally true. I&amp;#8217;ve had a rough time getting Ruby 1.8 to work out. I don&amp;#8217;t really have any defense. I don&amp;#8217;t see Shoes as this incredible answer to everything. It&amp;#8217;s a bit hokey and it&amp;#8217;s a bit trite.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/319615"&gt;Alex Fenton&lt;/a&gt;: I admire Shoes but it&amp;#8217;s not the best choice for much desktop application programming. It&amp;#8217;s not going to &amp;#8220;open up a new world&amp;#8221;&amp;#8230; naming Shoes a &amp;#8216;toy&amp;#8217; is not a slur; play is important in life. It&amp;#8217;s an influential experiment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree with this! It&amp;#8217;s a toy, it&amp;#8217;s for fun and I trust that &lt;a href="http://hackety.org/press/nks-3.html"&gt;nobody&lt;/a&gt; takes it very seriously.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Learning Ragel and Lemon at the feet of Zed Shaw was a classic time, for sure.&lt;br /&gt;
Tell me more about this passive aggressive thing, though. Do I have to have a deep hidden agenda, a long-standing personal beef or an ulterior motive in order to simply call a guy Hannah Montana?&lt;/p&gt;</content></entry><entry xml:base="/2008/11/21/aCostlyParade.html"><title xml:space="preserve">A Costly Parade</title><link href="/2008/11/21/aCostlyParade.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FaCostlyParade</id><published xml:space="preserve">2008-11-21T07:59:50Z</published><updated xml:space="preserve">2008-11-21T07:59:50Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://adam.blog.heroku.com/past/2008/4/29/what_defines_the_ruby_community"&gt;Adam Wiggins&lt;/a&gt;: First, Rubyists love elegance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://storytotell.org/articles/2008/11/20/what-defines-the-ruby-community"&gt;Daniel Lyons&lt;/a&gt;: Every programmer worth a damn thinks they love elegance.&lt;/p&gt;
&lt;/blockquote&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://adam.blog.heroku.com/past/2008/4/29/what_defines_the_ruby_community"&gt;Adam Wiggins&lt;/a&gt;: First, Rubyists love elegance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://storytotell.org/articles/2008/11/20/what-defines-the-ruby-community"&gt;Daniel Lyons&lt;/a&gt;: Every programmer worth a damn thinks they love elegance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rubyists love life. Boy, I tell you. They love humans. They love cars!! They looooooove dishes of real, actual food. You don&amp;#8217;t even know. Airplanes in mid-air, refueling? They love that!&lt;/p&gt;
&lt;p&gt;But, more importantly, Rubyists love pups. Baby dogs, man! Ever heard of em? Little dogs rock!!&lt;/p&gt;
&lt;p&gt;Okay, wait, no. No, please hold, I can&amp;#8217;t seem to find a citation for that. I mean, speaking for myself, I definitely like dogs. And I&amp;#8217;ve heard tell of dogs in other places&amp;#8230; Okay, well, how about, yeah, yeah here, let&amp;#8217;s say a tentative &lt;em&gt;yellow light&lt;/em&gt; interest in dogs. And we&amp;#8217;ll green light that puppy if the blogosphere goes all taggy on us and there&amp;#8217;s like a thousand delicious tags on this post that say &lt;code&gt;rooby-roo&lt;/code&gt;!&lt;/p&gt;
&lt;hr /&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://richkilmer.blogs.com/ether/2008/10/striving-for-civility-in-the-ruby-and-rails-community.html"&gt;Rich Kilmer&lt;/a&gt;: I propose that we demand civility in the Ruby and Rails community.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://richkilmer.blogs.com/ether/2008/10/striving-for-civility-in-the-ruby-and-rails-community.html#comment-137201501"&gt;Matt Todd&lt;/a&gt;: When we&amp;#8217;re fucking upset, we&amp;#8217;re fucking upset!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have a neighbor who demands peace and quiet. He&amp;#8217;d kill all of us if it would bring some sanity. He&amp;#8217;s a brutal peacemaker that one.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s smart, though. Really, truly, war is the only way to achieve peace. You have to get people totally sick of violence.&lt;/p&gt;
&lt;p&gt;So, without further ceremony: I demand civility. But, boy, oh hot snacks, the lawlessness of these people is amazing! It&amp;#8217;s like when you&amp;#8217;d play army men as kids. You&amp;#8217;d go, &amp;#8220;You&amp;#8217;re dead! I got you!&amp;#8221; And the other kid&amp;#8217;d go, &amp;#8220;No, my guy can fly!&amp;#8221; And you&amp;#8217;d go, &amp;#8220;No, who says?&amp;#8221; And his guy is already fortifying a whole new pavilion way on top of the bookshelf.&lt;/p&gt;
&lt;p&gt;Please. Stay on the ground. This is a decorated army veteran who fought for his country. And, no, he will not have his medals tarnished by allowing himself to get caught in that cunning old web of deceit that &lt;em&gt;is&lt;/em&gt; the so-called Pretending To Fly.&lt;/p&gt;
&lt;hr /&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.martinfowler.com/bliki/RubyPeople.html"&gt;Martin Fowler&lt;/a&gt;: I have noticed that that ruby community is much nicer than most on-line communities I&amp;#8217;ve seen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://zedshaw.com/blog/2008-11-13.html"&gt;Zed Shaw&lt;/a&gt;: I&amp;#8217;ve pulled battered women out of abusive relationships. Helped kids who were being beaten by bullies. I got no problem stepping up and protecting the weaker ones in our world.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;#8217;s like Jesus. Except Jesus never had the forthrightness and temerity to actually kick a guy in the jugular if he had to.&lt;/p&gt;
&lt;p&gt;Zed is Gandhi. Zed is Che Guevara. And Zed is Morpheus. But, also, Zed is Daniel Larusso. Immediately following that, he&amp;#8217;s Slim Shady. Ergo, Zed is Hannah Montana.&lt;/p&gt;
&lt;p&gt;Cool, we&amp;#8217;re making progress.&lt;/p&gt;
&lt;hr /&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/d2h/status/1015351238"&gt;David Heinemeier Hansson&lt;/a&gt;: Let me take out one of my favorite words for the occasion: Who the fuck cares? Just put it on ignore, like you would any troll fest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rubyists live by this creed: DO &lt;span class="caps"&gt;NOT&lt;/span&gt; &lt;span class="caps"&gt;FEED&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;TROLLS&lt;/span&gt;. Trolls are&amp;#8230; how you say&amp;#8230; unsavory people? Rubyists are &lt;span class="caps"&gt;VERY&lt;/span&gt; nice people. Always gladhanding and passing around the Lifesavers. Here, have one. We know other nice people when we see them. Nice people talk to each other. It&amp;#8217;s way addictive. It&amp;#8217;s great! (It&amp;#8217;s completely social.)&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Let me put it this way. Suppose you&amp;#8217;ve got Zed Shaw. No, wait, say you&amp;#8217;ve got &amp;#8220;a person.&amp;#8221; (We&amp;#8217;ll call this person &amp;#8220;Hannah Montana&amp;#8221; for the sake of this exercise.) And you look outside and this young teen sensation is yelling, throwing darts at your house and peeing in your mailbox. For reals. You can see it all. Your mailbox is soaked. Defiled. The flag is up.&lt;/p&gt;
&lt;p&gt;Now, stop and think about this. This is a very tough situation. This young lady has written one of &lt;span class="caps"&gt;THE&lt;/span&gt; premiere web servers in the whole wide world. Totally, insanely &lt;span class="caps"&gt;RFC&lt;/span&gt; complaint. They give it away on the street, but everyone knows its secretly worth like a thousand dollars. And there was nothing in that web server that hinted to these postal urinations.&lt;/p&gt;
&lt;p&gt;Sacrebleu! Ah, the life and times of a Ruby guy. What is one to do? All you really can do is put one foot in front of the other. You&amp;#8217;ve got to go to work. You&amp;#8217;ve got gems to install. You&amp;#8217;ve got agility to showcase. Sure, you&amp;#8217;ve got some soiled envelopes open.&lt;/p&gt;
&lt;p&gt;But, hey, you didn&amp;#8217;t feed the trolls. Ten points to Gryffindor.&lt;/p&gt;
&lt;hr /&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/19905"&gt;matz&lt;/a&gt;: I am afraid that it&amp;#8217;s only in Japanese.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And, you know, I really regret the whole Hpricot vs. Nokogiri thing from a few weeks back. It was for fun, but I mean, come on, there&amp;#8217;s no question that LibXML is a better, faster &lt;span class="caps"&gt;HTML&lt;/span&gt; parser. I&amp;#8217;m not sure what I&amp;#8217;m doing with Hpricot. It&amp;#8217;s just a doodad. I mostly just like the name is all. Am I terrible person?&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: I once sat on the advisory board of DO &lt;span class="caps"&gt;NOT&lt;/span&gt; &lt;span class="caps"&gt;FEED&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;TROLLS&lt;/span&gt;.&lt;/em&gt; (Translation: I &lt;span class="caps"&gt;KNOW&lt;/span&gt; &lt;span class="caps"&gt;THE&lt;/span&gt; &lt;span class="caps"&gt;SILENT&lt;/span&gt; &lt;span class="caps"&gt;TREATMENT&lt;/span&gt; I &lt;span class="caps"&gt;LEARNED&lt;/span&gt; IT &lt;span class="caps"&gt;MYSELF&lt;/span&gt;. Doing business as: &lt;span class="caps"&gt;PARDON&lt;/span&gt; ME IF I &lt;span class="caps"&gt;SEEM&lt;/span&gt; &lt;span class="caps"&gt;TOTALLY&lt;/span&gt; &lt;span class="caps"&gt;ALOOF&lt;/span&gt;.) However, I resigned when Sally Struthers sent me a postcard exposing the severe malnutrition of these poor, poor virtual dwarves. It just rent my heart in twixt.&lt;/p&gt;
&lt;p&gt;Now I send two thoughtful rebuttals a week to a troll in The Sheeple&amp;#8217;s Republic of Reddit, always sure to include a few deliberate typos. Please consider contributing. Now is the time. Only you. Now?&lt;/p&gt;
&lt;p&gt;So, look, Ruby is a crazy fun language (for some) and perhaps nothing more. You can get away with things that are heresy elsewhere. Maybe it&amp;#8217;s an irresponsible language. A flimsy language. I don&amp;#8217;t know, sheriff. The business world has its ideas about perfection. Maybe Ruby doesn&amp;#8217;t take itself as seriously as the business world does.&lt;/p&gt;
&lt;p&gt;If, after all these years, Ruby isn&amp;#8217;t going to take itself seriously, then should I bother taking myself seriously either?&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: the above is a paid advertisement for my Pong clone.&lt;/em&gt;&lt;/p&gt;
&lt;script src="http://gist.github.com/26431.js"&gt;&lt;/script&gt;&lt;p&gt;Based on a &lt;a href="http://billmill.org/pong.html"&gt;true story&lt;/a&gt;.&lt;/p&gt;</content></entry><entry xml:base="/2008/11/17/SomethingLikePyargParseForRuby.html"><title xml:space="preserve">Something Like PyArg_ParseTuple For Ruby</title><link href="/2008/11/17/SomethingLikePyargParseForRuby.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FSomethingLikePyargParseForRuby</id><published xml:space="preserve">2008-11-17T23:58:36Z</published><updated xml:space="preserve">2008-11-17T23:58:36Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">
&lt;pre&gt;&lt;code class="c"&gt; rb_arg_list args;
 /* "k" means Class, "h" means Hash */
 switch (rb_parse_args(argc, argv, "kh,h,", &amp;args))
 {
   case 1: /* "kh" - style(Link, :background =&gt; white) */ break;
   case 2: /* "h"  - style(:width =&gt; "100%") */ break;
   case 3: /* ""   - style() =&gt; {...hash of styles...} */ break;
 }
&lt;/code&gt;&lt;/pre&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;Calling into Ruby from C is great, but I&amp;#8217;ve noticed that I spend a lot of time casting arguments coming into each function.&lt;/p&gt;

&lt;pre&gt;&lt;code class="c"&gt; rb_scan_args(argc, argv, "11", &amp;port, &amp;opts);
 if (rb_respond_to(port, rb_intern("to_str"))
   StringValue(port);
 else if (!rb_respond_to(port, rb_intern("read")))
   rb_raise(rb_eArgError, "a String or IO object only, please");
 if (TYPE(opts) != T_HASH &amp;&amp; !NIL_P(opts))
   rb_raise(rb_eArgError, "options must be a hash");
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ruby is dynamically typed, but object types are a bit more reified in C. The &lt;span class="caps"&gt;TYPE&lt;/span&gt; macro can check an object to see if it&amp;#8217;s a T_FIXNUM, T_HASH, T_STRING, T_ICLASS, etc. You can duck type all you want, but when you&amp;#8217;re inside an extension, you&amp;#8217;ll need to know the type before calling &lt;code&gt;rb_str_cat&lt;/code&gt; or &lt;code&gt;rb_hash_aref&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And &lt;code&gt;StringValue&lt;/code&gt; does this, it&amp;#8217;ll cast using &lt;code&gt;to_str&lt;/code&gt; and then make sure you&amp;#8217;ve actually a real T_STRING.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;I&amp;#8217;m disappointed with &lt;code&gt;rb_scan_args&lt;/code&gt;. It&amp;#8217;s wimpy. The function signatures it uses aren&amp;#8217;t very expressive. It&amp;#8217;s basically describing arity and that&amp;#8217;s it.&lt;/p&gt;
&lt;p&gt;One thing I like better in Python&amp;#8217;s &lt;span class="caps"&gt;API&lt;/span&gt;, though, is the &lt;a href="http://docs.python.org/c-api/arg.html"&gt;PyArg_ParseTuple&lt;/a&gt; function and its cousins.&lt;/p&gt;

&lt;pre&gt;&lt;code class="c"&gt; const char *file;
 const char *mode = "r";
 int bufsize = 0;
 ok = PyArg_ParseTuple(args, "s|si", &amp;file, &amp;mode, &amp;bufsize);
 /* A string, and optionally another string and an integer */
 /* Possible Python calls:
    f('spam')
    f('spam', 'w')
    f('spam', 'wb', 100000) */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The function signature is more expressive here (&lt;code&gt;"s|si"&lt;/code&gt;), indicating which types are allowed. You don&amp;#8217;t have to check the types individually, nor do you need to throw individual exceptions.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Here&amp;#8217;s &lt;a href="http://github.com/why/rb_parse_args"&gt;an equivalent&lt;/a&gt; I&amp;#8217;m working on for Ruby:&lt;/p&gt;

&lt;pre&gt;&lt;code class="c"&gt; rb_arg_list args;
 rb_parse_args(argc, argv, "s|h,-|h", &amp;args);
 /* a string and optionally a hash OR an IO and an optional hash */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;rb_parse_args&lt;/code&gt; function returns the number of the match. If the first signature (&lt;code&gt;"s|h"&lt;/code&gt;) is matched, you get 1. If the second signature is matched, you get 2.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m planting this in a switch statement when I want to overload a method.&lt;/p&gt;

&lt;pre&gt;&lt;code class="c"&gt; rb_arg_list args;
 /* "k" means Class, "h" means Hash */
 switch (rb_parse_args(argc, argv, "kh,h,", &amp;args))
 {
   case 1: /* "kh" - style(Link, :background =&gt; white) */ break;
   case 2: /* "h"  - style(:width =&gt; "100%") */ break;
   case 3: /* ""   - style() =&gt; {...hash of styles...} */ break;
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is saving me some tedium. In typical shoddy form, my error messages blow. I am undisciplined&amp;#8217;s middle name.&lt;/p&gt;
&lt;p&gt;Ah, how good it feels to be inspired by Python. A bit good, a bit slimey. I&amp;#8217;m like Joe Lieberman, guys.&lt;/p&gt;</content></entry><entry xml:base="/2008/11/03/hpricotStrikesBack.html"><title xml:space="preserve">Hpricot Strikes Back</title><link href="/2008/11/03/hpricotStrikesBack.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FhpricotStrikesBack</id><published xml:space="preserve">2008-11-03T19:13:21Z</published><updated xml:space="preserve">2008-11-03T19:13:21Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;This fruit is tiny, shiny and can be spit-polished in a single weekend.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/hpricot.png" class="c" alt="" /&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;My my. How the sensationalist press does carry on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.rubyinside.com/nokogiri-ruby-html-parser-and-xml-parser-1288.html"&gt;Peter Cooper&lt;/a&gt;: On an &lt;a href="http://gist.github.com/18533"&gt;Hpricot vs Nokogiri benchmark&lt;/a&gt;, Nokogiri clocked in at 7 times faster at initially loading an &lt;span class="caps"&gt;XML&lt;/span&gt; document, 5 times faster at searching for content based on an XPath, and 1.62 times faster at searching for content via a &lt;span class="caps"&gt;CSS&lt;/span&gt;-based search. These are impressive results, since Hpricot was previously considered to be quite speedy itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I feel just awful (just &lt;em&gt;supreeeeemely&lt;/em&gt; lousy) that these benchmarks were only good for four days.  Nokogiri is no longer seven times faster than Hpricot.&lt;/p&gt;
&lt;p&gt;And that means these guys have to go back through all their docs and promotional materials and&amp;#8230; wow, what a job it&amp;#8217;s going be.  It&amp;#8217;s just a tough situation, folks.  My heart goes out to all the fine young lads who worked so hard to bring Hpricot down, only to discover, &lt;em&gt;hey, boss, there she goes!&lt;/em&gt; Hpricot is strolling right along the boardwalk, smiling, waving, checking its watch, fit as a fiddle.&lt;/p&gt;
&lt;p&gt;This fruit is tiny, shiny and can be spit-polished in a single weekend.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/hpricot.png" class="c" alt="" /&gt;&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Before we get to the news&amp;#8230; Here&amp;#8217;s the &lt;span class="caps"&gt;XML&lt;/span&gt; those Nokogiri benchmarks are based on: &lt;a href="http://static.bezurk.com/fragments/wikitravel/sin.xml"&gt;sin.xml&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Someone help me here.  Am I reading that right?  There are six &lt;span class="caps"&gt;XML&lt;/span&gt; tags in that whole file.  Is this for reals?  Six, right?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;location&amp;gt;
&amp;lt;refUrl&amp;gt;http://wikitravel.org/en/Singapore&amp;lt;/refUrl&amp;gt;
  &amp;lt;info&amp;gt;
    &amp;amp;lt;b&amp;amp;gt;Singapore&amp;amp;lt;/b&amp;amp;gt; is an island-state in Southeast
    Asia, connected by bridges to Malaysia. Founded as a British trading colony 
    in 1819, since independence it has become one of the &amp;amp;lt;b&amp;amp;gt;world's 
    most prosperous countries&amp;amp;lt;/b&amp;amp;gt; and sports the world's busiest 
    port.   Combining the skyscrapers and subways of a &amp;amp;lt;b&amp;amp;gt;modern, 
    affluent city&amp;amp;lt;/b&amp;amp;gt; with a medley of Chinese, Indian and Malay 
    influences and a &amp;amp;lt;b&amp;amp;gt;tropical climate&amp;amp;lt;/b&amp;amp;gt;, with 
    tasty food, good shopping and a vibrant nightlife scene, this Garden City 
    makes a great stopover or springboard into the region.
  &amp;lt;/info&amp;gt;
&amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This benchmark was linked all over the place last week.  Does anyone look at this stuff?&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Okay, great.  Let&amp;#8217;s battle!&lt;/p&gt;
&lt;p&gt;Time for a new benchmark based on &lt;code&gt;timeline.xml&lt;/code&gt; from John Nunemaker&amp;#8217;s &lt;a href="http://railstips.org/2008/8/12/parsing-xml-with-ruby"&gt;libxml vs. hpricot&lt;/a&gt; stuff.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://gist.github.com/21936"&gt;gist: 21936&lt;/a&gt;:&lt;pre&gt;&lt;code&gt;    user system total real
hpricot:doc 2.630000 0.030000 2.660000 ( 2.655527)
hpricot2:doc 0.340000 0.000000 0.340000 ( 0.349340)
nokogiri:doc 0.600000 0.020000 0.620000 ( 0.611570)
    user system total real
hpricot:xpath 1.910000 0.000000 1.910000 ( 1.911496)
hpricot2:xpath 0.890000 0.010000 0.900000 ( 0.897664)
nokogiri:xpath 0.060000 0.000000 0.060000 ( 0.061546)
    user system total real
hpricot:css 1.880000 0.000000 1.880000 ( 1.889301)
hpricot2:css 0.680000 0.010000 0.690000 ( 0.677072)
nokogiri:cssbenchmark.rb:77: [BUG] Bus Error
ruby 1.8.6 (2007-09-24) [i686-darwin8.11.1]&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Try it yourself with the &lt;a href="http://hackety.org/dist/hpricot-0.6.170.gem"&gt;hpricot-0.6.170 gem&lt;/a&gt;, which includes source code, so you&amp;#8217;ll need a compiler.&lt;/p&gt;
&lt;p&gt;This is only a rewrite of the parser, not the Ragel lexer.  I&amp;#8217;m actually surprised the XPath and &lt;span class="caps"&gt;CSS&lt;/span&gt; parser numbers are cut in half, basically, just by changing my object structures.  I&amp;#8217;ve just finished a new Ragel-based &lt;span class="caps"&gt;CSS&lt;/span&gt; selector parser which should cause those searches to drop dramatically.  I am considering dropping XPath support this time.&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t got the new parser totally switched in yet.  Right now you call &lt;code&gt;Hpricot.scan&lt;/code&gt; without a block.  Once I&amp;#8217;m finished testing the two side-by-side, I&amp;#8217;ll swap in the new parser and release 0.7.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;I feel some regret posting a benchmark at all, because I don&amp;#8217;t want to detract from my main point.&lt;/p&gt;
&lt;p&gt;Someday, Nokogiri may be seven times faster than Hpricot.  Someday it may be twelve times slower.  In fact, on one single day, it may be five time faster, then fourteen times slower, then eleven-point-three times faster!&lt;/p&gt;
&lt;p&gt;But Nokogiri has no fuzzy fruited emblem.  And it does not dwell in an orchard of markup.  (Such a very yummy orchard, you&amp;#8217;d never believe!)  I can put those statements in my promos and newsreels and they&amp;#8217;ll never change.&lt;/p&gt;</content></entry><entry xml:base="/2008/10/06/mixingOurWayOutOfInstanceEval.html"><title xml:space="preserve">Mixing Our Way Out Of Instance Eval?</title><link href="/2008/10/06/mixingOurWayOutOfInstanceEval.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FmixingOurWayOutOfInstanceEval</id><published xml:space="preserve">2008-10-06T17:36:39Z</published><updated xml:space="preserve">2008-10-06T17:36:39Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">
&lt;pre&gt;&lt;code class="rb"&gt; require 'mixico'

 def Builder.capture &amp;blk
   mix_eval(self, &amp;blk)
 end
&lt;/code&gt;&lt;/pre&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;The lynchpin of Ruby&amp;#8217;s pidgins and so-called DSLs (Douchebaggery as a Second Language) is the method known as &lt;code&gt;instance_eval&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;From an article titled &lt;a href="http://blog.8thlight.com/articles/2007/05/20/ruby-dls-blocks"&gt;Ruby &lt;span class="caps"&gt;DSL&lt;/span&gt; Blocks&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; def self.order(&amp;block)
   order = Order.new
   order.&lt;strong&gt;instance_eval&lt;/strong&gt;(&amp;block)
   return order.drinks
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And another one &lt;a href="http://blog.jayfields.com/2008/02/implementing-internal-dsl-in-ruby.html"&gt;Implementing an internal &lt;span class="caps"&gt;DSL&lt;/span&gt; in Ruby&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; def Expectations(&amp;block)
   Expectations::Suite.instance.&lt;strong&gt;instance_eval&lt;/strong&gt;(&amp;block)
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From &lt;a href="http://www.artima.com/rubycs/articles/ruby_as_dsl2.html"&gt;Creating DSLs with Ruby&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; class MyDSL
   def define_parameters
     yield self
   end

   def self.load(filename)
     dsl = new
     dsl.&lt;strong&gt;instance_eval&lt;/strong&gt;(File.read(filename), filename)
     dsl
   end
 end#class MyDSL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So far, so good?  Most often &lt;code&gt;instance_eval&lt;/code&gt; is used, but you&amp;#8217;ll see &lt;code&gt;module_eval&lt;/code&gt;, too.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Now, the reason for this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://onestepback.org/index.cgi/Tech/Ruby/BuilderObjects.rdoc"&gt;Jim Weirich&lt;/a&gt;: Within the builder code blocks, any method call with an implicit object target needs to be sent to our builder. To achieve this, the code blocks are evaluated with instance_eval which changes the value of self to be the builder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He goes on to say why this could be troubling.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is OK until you want to call a method in the calling object. Since self is no longer the calling object, you have to explicitly provide the caller.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In Weirich&amp;#8217;s &lt;a href="http://builder.rubyforge.org"&gt;Builder&lt;/a&gt;, he prefers to use plain blocks and hand you the variable.&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; builder { |xm|
   xm.em("emphasized")
   xm.em { xm.b("emp &amp; bold") }
   xm.a("A Link", "href" =&gt; "http://onestepback.org")
   xm.div { xm.br }
   xm.target("name" =&gt; "compile", "option" =&gt; "fast")
   xm.instruct!
   xm.html {
     xm.head {
       xm.title("History")
     }
     xm.body {
       xm.comment! "HI"
       xm.h1("Header")
       xm.p("paragraph")
     }
   }
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With &lt;code&gt;instance_eval&lt;/code&gt;, you&amp;#8217;d end up with:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; builder {
   em("emphasized")
   em { b("emp &amp; bold") }
   a("A Link", "href" =&gt; "http://onestepback.org")
   div { br }
   target("name" =&gt; "compile", "option" =&gt; "fast")
   instruct!
   html {
     head {
       title("History")
     }
     body {
       comment! "HI"
       h1("Header")
       p("paragraph")
     }
   }
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Builder once did use &lt;code&gt;instance_eval&lt;/code&gt;, but now offers this explanation in the docs:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The instance_eval implementation which forces self to refer to the message receiver as self is now obsolete. We now use normal block calls to execute the markup block. This means that all markup methods must now be explicitly send to the xml builder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rails&amp;#8217; routing stuff also prefers to &lt;a href="http://weblog.jamisbuck.org/2006/10/2/under-the-hood-rails-routing-dsl"&gt;go without&lt;/a&gt; &lt;code&gt;instance_eval&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; ActionController::Routing::Routes.draw do |map|
   map.with_options :controller =&gt; 'blog' do |blog|
     blog.show '',  :action =&gt; 'list'
   end
   map.connect ':controller/:action/:view'
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By now, it probably seems like &lt;code&gt;instance_eval&lt;/code&gt; has been driven out of play by the mature libs and now only lingers in the dabbling blog posts.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;I don&amp;#8217;t care about the best way to do this.  The fact is: even &amp;#8220;normal blocks&amp;#8221; are prone to bugs.  I had to fix up the Builder example above because it&amp;#8217;s wrong in &lt;a href="http://builder.rubyforge.org/classes/Builder/XmlMarkup.html"&gt;the docs&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; xm.em("emphasized")             # =&gt; &lt;em&gt;emphasized&lt;/em&gt;
 xm.em { xmm.b("emp &amp; bold") }   # =&gt; &lt;em&gt;&lt;b&gt;emph &amp;amp; bold&lt;/b&gt;&lt;/em&gt;
 xm.a("A Link", "href"=&gt;"http://onestepback.org")
                                 # =&gt; &lt;a href="http://onestepback.org"&gt;A Link&lt;/a&gt;
 xm.div { br }                    # =&gt; &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are two errors in the above example.  The date on the RDoc is Sun Feb 05 23:49:01 &lt;span class="caps"&gt;EST&lt;/span&gt; 2006.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Recently I discovered another option to all of this, thanks to the work of Guy Decoux.&lt;/p&gt;
&lt;p&gt;While investigating a library Guy never released (called &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/20293"&gt;prop&lt;/a&gt;,) I realized that perhaps he was on to something while fooling with mixins and the inheritance chain.&lt;/p&gt;
&lt;p&gt;Think about it: &lt;code&gt;instance_eval&lt;/code&gt; changes self, intercepts method calls and alters instance variables.  Really, all we really want to do is dispatch method calls.  As Jim Weirich says, changing self is the troubling side effect here.&lt;/p&gt;
&lt;p&gt;This is a pertinent topic.  Even today, ruby-core discusses a &lt;code&gt;with&lt;/code&gt; operator and Paul Brannan &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/19138"&gt;chimes in&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Instance_eval for initialization has surprising behavior for instance variables (e.g. as in Ruby/Tk).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;A method that affects only method calls and not instance variables would make this idiom more viable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I don&amp;#8217;t know whether that is a good thing or a bad thing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Again with the &lt;em&gt;good&lt;/em&gt; and &lt;em&gt;bad&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What if there was a way to temporarily add methods for the duration of a block?&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; def to_html
    Builder.capture do
      html do
       head do
         title self.friendly_title
       end
       body do
         comment! "HI"
         h1("Header")
         p("paragraph")
       end
     end
   end
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The essence of Builder.capture is to mixin a bunch of Builder methods, inject them into the block&amp;#8217;s binding.  This adds the &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;comment!&lt;/code&gt; methods into the calling self.&lt;/p&gt;
&lt;p&gt;Using a very small extension called &lt;a href="http://github.com/why/mixico"&gt;mixico&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; def Builder.capture &amp;blk
   mix_eval(self, &amp;blk)
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This extension enables and disables mixins atomically.  It is a single, quick operation to add and remove a module from the inheritance chain.  (See the mixico &lt;a href="http://github.com/why/mixico/tree/master/README"&gt;&lt;span class="caps"&gt;README&lt;/span&gt;&lt;/a&gt; for more on this technique.)&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;The &lt;code&gt;mix_eval&lt;/code&gt; method code looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class="rb"&gt; class Module
   def mix_eval mod, &amp;blk
     blk.mixin mod
     blk.call
     blk.mixout mod
   end
 end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;mixin&lt;/code&gt; and &lt;code&gt;mixout&lt;/code&gt; methods enable and disable the Module in the block&amp;#8217;s binding.&lt;/p&gt;
&lt;p&gt;While you might be inclined to dismiss this on the grounds of it being mixin &lt;strong&gt;magic&lt;/strong&gt;, I&amp;#8217;m starting to believe that this is a notable omission from Ruby.  It&amp;#8217;s very quick and efficient to disable and enable mixins and could prove to be a very handy technique.&lt;/p&gt;
&lt;p&gt;Like open classes, however, I&amp;#8217;m afraid the timidity of the business community might label it as taboo, despite it offering great flexibility to you &amp;#8212; all of my fine, able-minded friends out there.&lt;/p&gt;</content></entry><entry xml:base="/2008/09/27/textareaResizeAndCurlyQuotesForConkeror.html"><title xml:space="preserve">Textarea Resize And Curly Quotes For Conkeror</title><link href="/2008/09/27/textareaResizeAndCurlyQuotesForConkeror.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FtextareaResizeAndCurlyQuotesForConkeror</id><published xml:space="preserve">2008-09-27T22:29:42Z</published><updated xml:space="preserve">2008-09-27T22:29:42Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">
&lt;pre&gt;&lt;code class="js"&gt; function resize_textarea_up(field) {
   var h = field.offsetHeight;
   if (h &gt; 120)
     field.style.height = (h - 60) + "px";
 }
 function resize_textarea_down(field) {
   field.style.height = (parseInt(field.offsetHeight) + 60) + "px";
 }
 interactive(
   "resize-textarea-up",
   "Resize a textarea to be smaller.",
   function (I) call_on_focused_field(I, resize_textarea_up)
 );
 interactive(
   "resize-textarea-down",
   "Resize a textarea to be taller.",
   function (I) call_on_focused_field(I, resize_textarea_down)
 );
 define_key(content_buffer_textarea_keymap, "C-up", "resize-textarea-up", $category = "Movement");
 define_key(content_buffer_textarea_keymap, "C-down", "resize-textarea-down", $category = "Movement");
&lt;/code&gt;&lt;/pre&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;People say Google Chrome is a step behind Firefox because Firefox has addons.  Well, excuse me, but Firefox was already a step behind Conkeror and Vimperator!  Making Google Chrome a whopping &lt;span class="caps"&gt;TWO&lt;/span&gt; steps behind.  (But I&amp;#8217;m sure we&amp;#8217;re all another full step behind some completely obscure browser which only runs on Plan 9 and is being ported to the Erlang VM.)&lt;/p&gt;
&lt;p&gt;Here are a few Conkeror hacks that can be easily dropped into your &lt;code&gt;~/.conkerorrc&lt;/code&gt;.  (If you need a introduction to Conkeror, see &lt;a href="http://hackety.org/2008/02/29/conkerorComesUnstuck.html"&gt;Conkeror Comes Unstuck&lt;/a&gt;.)&lt;/p&gt;
&lt;hr /&gt;


&lt;pre&gt;&lt;code class="js"&gt; function resize_textarea_up(field) {
   var h = field.offsetHeight;
   if (h &gt; 120)
     field.style.height = (h - 60) + "px";
 }
 function resize_textarea_down(field) {
   field.style.height = (parseInt(field.offsetHeight) + 60) + "px";
 }
 interactive(
   "resize-textarea-up",
   "Resize a textarea to be smaller.",
   function (I) call_on_focused_field(I, resize_textarea_up)
 );
 interactive(
   "resize-textarea-down",
   "Resize a textarea to be taller.",
   function (I) call_on_focused_field(I, resize_textarea_down)
 );
 define_key(content_buffer_textarea_keymap, "C-up", "resize-textarea-up", $category = "Movement");
 define_key(content_buffer_textarea_keymap, "C-down", "resize-textarea-down", $category = "Movement");
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This one enables &lt;code&gt;Ctrl-Up&lt;/code&gt; and &lt;code&gt;Ctrl-Down&lt;/code&gt; inside a textarea.  So you can stretch the box without reaching for the mouse.  How about that!&lt;/p&gt;
&lt;hr /&gt;


&lt;pre&gt;&lt;code class="js"&gt; var quotes = [["squote", "C-quote", "2018"],
 ["apostrophe", "M-quote", "2019"],
 ["lquote", "C-S-quote", "201c"],
 ["rquote", "M-S-quote", "201d"],
 ["emdash", "M--", "2014"],
 ["ellipsis", "M-.", "2026"]];
for (var i in quotes) {
  var q = quotes[i];
  eval("function curly_" + q[0] + "(field) { modify_region(field, function(str) \"\\u" + q[2] + "\" ); }");
  interactive(
    "curly-" + q[0],
    "Inserts a curly " + q[0] + " at the cursor in a textarea.",
    eval("function (I) call_on_focused_field(I, curly_" + q[0] + ")")
  );
  define_key(content_buffer_text_keymap, q[1], "curly-" + q[0], $category = "Editing");
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I find myself using more &lt;span class="caps"&gt;UTF&lt;/span&gt;-8 characters that aren&amp;#8217;t on the keyboard.  Like these are four keybindings for curly quotes.&lt;/p&gt;
&lt;p&gt;If you hit the &lt;code&gt;Ctrl&lt;/code&gt; key and the single- or double-quote key, you&amp;#8217;ll get a left-side curl.  An &lt;code&gt;Alt&lt;/code&gt; gives a right-side curl.  There are a few dashes in there, too.  This stuff could be done in the keymaps, but I wanted to see how it could be scripted. OS X already has keymaps for these I think.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;One other thing.  If you are in a textarea and you hit &lt;code&gt;Ctrl-I&lt;/code&gt;, it&amp;#8217;ll open the textarea in an external editor.  For some reason, vim wasn&amp;#8217;t doing it for me.  Well, I had the setting wrong.&lt;/p&gt;

&lt;pre&gt;&lt;code class="js"&gt; define_variable("editor_shell_command", "gvim -f");&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;p&gt;Lastly, if you&amp;#8217;re using a site that has its own keybindings (such as Try Ruby,) you can use &lt;code&gt;Ctrl-Alt-Q&lt;/code&gt; to let all keystrokes pass through.  Hit &lt;code&gt;Esc&lt;/code&gt; to give focus back to the browser.&lt;/p&gt;</content></entry><entry xml:base="/2008/09/25/legendNeverToBeSolved.html"><title xml:space="preserve">A Legend Never To Be Solved</title><link href="/2008/09/25/legendNeverToBeSolved.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FlegendNeverToBeSolved</id><published xml:space="preserve">2008-09-25T06:33:52Z</published><updated xml:space="preserve">2008-09-25T06:33:52Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><summary mode="escaped" type="html" xml:space="preserve">&lt;p&gt;&lt;img src="http://hackety.org/images/a-note-to-pigeon.png" class="c" alt="" /&gt;&lt;/p&gt;</summary><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;img src="http://hackety.org/images/a-note-to-pigeon.png" class="c" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t mean to be overly sentimental or maudlin.  Guy Decoux (pronounced &lt;em&gt;ghee de-coo&lt;/em&gt;, I believe) was a great secret among Ruby enthusiasts.  I am sad to hear that he is gone.  I dropped my glass the minute I heard.  He was fantastic.  Of his legend I will always tell.  He leaves us much to think about.&lt;/p&gt;
&lt;p&gt;He was around long before I happened upon Ruby and, man, the guy was sensationally smart.  He knew Ruby inside and out.  Really, he was fantastic with Ruby internals.  I&amp;#8217;m happy to have long employed some of his cunning code in Shoes: the &lt;code&gt;ts_each&lt;/code&gt; and &lt;code&gt;ts_funcall2&lt;/code&gt; in &lt;a href="http://github.com/why/shoes/tree/master%2Fshoes%2Fruby.c?raw=true"&gt;shoes/ruby.c&lt;/a&gt;.  He only made 19 commits to Ruby in the years 2000 to 2003, but he discovered countless bugs and you can find his ruby-core messages cited often in the ChangeLog.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;He was probably the earliest master of Ruby outside Japan.  He began study of Ruby in 1999 (&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/859"&gt;ruby-talk:859&lt;/a&gt;) and was right there at the inception of ruby-core (&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/27"&gt;ruby-core:27&lt;/a&gt;.)  Matz will be unhappy to hear of this news, since Guy had been so helpful over these last nine years.&lt;/p&gt;
&lt;p&gt;He was few on words, but not necessarily because he was poor at English.  I asked him for some pointers, long ago, when I started work on Try Ruby.  He sent back a reply that not only detailed a number of bugs he discovered, but also a postscript asking me to fix the reverse &lt;span class="caps"&gt;DNS&lt;/span&gt; for my e-mail address, attaching some lines from his mail log as proof!&lt;/p&gt;
&lt;p&gt;There I was, quite surprised to see actual words and paragraphs in his e-mail.  The real ts!  He rarely gave color commentary on his code.  He gave only transcripts of his conversations at the shell prompt with his machine called &lt;em&gt;pigeon&lt;/em&gt;.  (In previous years, sometimes it had been &lt;em&gt;svg&lt;/em&gt;.)  I thought it was funny that his transcripts always ended with a blank shell line &lt;em&gt;pigeon%&lt;/em&gt;, as if he parked it there for you, awaiting further command.  And that was part of the marvel of ts: he respected your smarts to figure out his code and he let his code entirely represent him.&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ll hear a lot of people say that we didn&amp;#8217;t know who he was.  That no one met him.  But we all read alot of his code.  And clearly that was how he wanted us to know him.  Think of how that stands in such sharp contrast to the self-advertisement and vanity journalism of the Web today.  We knew him, just not in the way we&amp;#8217;re used to.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;The RubyFrance blog has this photo of Guy:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://hackety.org/images/guy_decoux.jpg" class="cb" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Anyway, if the real pigeon is intact, I hope it will find its way into a wing of the Matz Museum, alongside the Perl &lt;span class="caps"&gt;CGI&lt;/span&gt; book that Matz inherited from his dad and the magnetic tapes in Matz&amp;#8217; closet.  (Ruby pre-1.0 is lost somewhere in there on outdated media.)&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Here is the very thoughtful eulogy given by Jean-François Trân.  You can give your thanks to &lt;a href="http://twitter.com/underflow_/"&gt;@underflow_&lt;/a&gt; for writing it.&lt;/p&gt;
&lt;p&gt;I am archiving it here, though the original is on &lt;a href="http://groups.google.com/group/ruby-talk-google/browse_thread/thread/70b8cce2be8efbd3"&gt;ruby-talk&lt;/a&gt;.  I would be very interested to hear memories from matz or David Alan Black or anyone who had correspondence with Guy.  It would be great to revisit some of his finer replies over the next few days, wouldn&amp;#8217;t it?&lt;/p&gt;
&lt;blockquote&gt;I&amp;#8217;m sad to announce you Guy Decoux&amp;#8217;s death in the beginning of the month of July 2008. He was 53 years old. He died accidentally, intoxicated by the smokes of the fire that took place during the night in his flat in Louveciennes (near Paris).&lt;br /&gt;
&lt;br /&gt;
Guy Decoux was network and system admin at the &lt;a href="http://moulon.inra.fr/"&gt;Plant Genomics Research Unit of &lt;span class="caps"&gt;INRA&lt;/span&gt;&lt;/a&gt; (Agricultural Research labs, where he worked since 1982) in Moulon&amp;#8217;s Farm (Moulon&amp;#8217;s plateau, in the south west of Paris).&lt;br /&gt;
&lt;br /&gt;
He was an Internet pioneer. For example, he worked on Oraplex, one of the first Oracle to web gateways. He deployed the first website that gave access to an &lt;a href="http://www.acedb.org/"&gt;ACeDB&lt;/a&gt; system by the end of 1993. He had worked on bioinformatic free software, like &lt;a href="http://moulon.inra.fr/%7Ebioinfo/PROTICdb"&gt;ProticDB&lt;/a&gt;, a plant proteomic database.&lt;br /&gt;
&lt;br /&gt;
He was part of the generation of developers who switched from Perl to Ruby in the 90s. While his mastering of Perl was already great, his knowledge about Ruby was so deep and impressive that a lot of Rubyists would have been very happy to have the same one. Guy contributed to Dave Thomas&amp;#8217; book, &amp;#8220;Programming Ruby&amp;#8221;. Of course he polled for the comp.lang.ruby and fr.comp.lang.ruby newsgroups creation. He was maintaining some libraries like &lt;a href="http://raa.ruby-lang.org/project/pl-ruby"&gt;PL/Ruby&lt;/a&gt; a procedural language for PostgreSQL, &lt;a href="http://raa.ruby-lang.org/project/bdb"&gt;bdb&lt;/a&gt; / &lt;a href="http://raa.ruby-lang.org/project/bdb1"&gt;bdb1&lt;/a&gt; bindings for Berkeley DB, &lt;a href="http://raa.ruby-lang.org/project/bz2"&gt;bz2&lt;/a&gt; bindings the libbzip2 compression library and &lt;a href="http://raa.ruby-lang.org/project/mmap"&gt;MMap&lt;/a&gt; class, a class for Memory-mapped files.&lt;br /&gt;
&lt;br /&gt;
To my knowledge, he was the only french person to have commits right to Ruby &lt;span class="caps"&gt;MRI&lt;/span&gt; source code. I don&amp;#8217;t know if he was officially member of the Ruby Core Team (I don&amp;#8217;t know if there is an official Ruby Core Team list).&lt;br /&gt;
&lt;br /&gt;
I&amp;#8217;m not sure &amp;#8216;ts&amp;#8217; (what does &amp;#8216;ts&amp;#8217; mean in his electronic address?) had ever been to RubyConf nor any Ruby conference. Well I don&amp;#8217;t know if there is a french Rubyist who ever meet him. Was he mysterious or secret ? Maybe he was just reserved. His colleagues described Guy as reserved, kind, available, professional and technically very competent. His messages on Ruby-Core or Ruby-Talk, sometimes with a bit of humor, show all that.&lt;br /&gt;
&lt;br /&gt;
This is a loss for Ruby Community.&lt;br /&gt;
&lt;br /&gt;
 In the name of french association RubyFrance, I present my condolences to Guy Decoux&amp;#8217;s family, his friends and his collegues.&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Matz has &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/315945"&gt;replied&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I was socked.  He was one of the smartest guy among our community. Even thought I haven&amp;#8217;t had a chance to meet him in person, he had been a great source of knowledge and insight.  I should have exchanged ideas with him more often.  I miss him.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update #2:&lt;/strong&gt; A nice &lt;a href="http://www.reddit.com/r/programming/comments/73d13/guy_decoux_ts_one_of_the_smartest_rubyists_around/c05khtu"&gt;remark&lt;/a&gt; from Mauricio Fernandez:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;#8217;s sad that the aura of mystery around ts was dissipated by this tragic news. Back in the pre-Rails era, there were often jokes about him being not one but many people &lt;del&gt;-&lt;/del&gt; such was the perception of his knowledge and skill. matz once said he hoped Guy would maintain Ruby if he got hit by a bus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He is referencing &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/10826"&gt;ruby-talk:10826&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Furthermore:&lt;/strong&gt; A few from the Decoux archive.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/20293"&gt;ruby-talk:20293&lt;/a&gt;, his lost &lt;code&gt;prop&lt;/code&gt; extension for inserting a module between a class and its metaclass. (Diagram in &lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/20296"&gt;ruby-talk:20296&lt;/a&gt;.)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/17000"&gt;ruby-talk:17000&lt;/a&gt;, where he refers to ts as his moniker.  the &lt;code&gt;iis&lt;/code&gt; extension used to spill method source code is from the 1.6 days and can be found on the moulon &lt;a href="ftp://moulon.inra.fr/pub/ruby/"&gt;ftp site&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/5795"&gt;ruby-talk:5795&lt;/a&gt;, about his style of answering in code he says, &amp;#8220;I know nothing, I just ask ruby what it do.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;</content></entry><entry xml:base="/2008/09/15/documentsRevealDjangoPonyTailOfLies.html"><title xml:space="preserve">Documents Reveal Django Pony, Caught In Tail Of Lies</title><link href="/2008/09/15/documentsRevealDjangoPonyTailOfLies.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FdocumentsRevealDjangoPonyTailOfLies</id><published xml:space="preserve">2008-09-15T06:07:53Z</published><updated xml:space="preserve">2008-09-15T06:07:53Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;p&gt;&lt;a href="http://twitter.com/djangopony/statuses/921492548"&gt;&lt;img src="http://hackety.org/images/pony-magic.png" class="c" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry xml:base="/2008/09/09/sortingOutLibskia.html"><title xml:space="preserve">Sorting Out Libskia</title><link href="/2008/09/09/sortingOutLibskia.html" rel="alternate" type="text/html" xml:space="preserve" /><id xml:space="preserve">tag:hackety.org,2009:blogentry%2Fnews%2FsortingOutLibskia</id><published xml:space="preserve">2008-09-09T18:09:56Z</published><updated xml:space="preserve">2008-09-09T18:09:56Z</updated><dc:subject xml:space="preserve">news</dc:subject><category term="news" xml:space="preserve" scheme="http://hobix.com/tags" /><author><name xml:space="preserve">why the lucky stiff</name><uri xml:space="preserve">http://whytheluckystiff.net/</uri><email xml:space="preserve">why@whytheluckystiff.net</email></author><content type="html" xml:space="preserve">&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://blog.vlad1.com/2008/09/09/better-random-thoughts-than-none-at-all/"&gt;Vladimir Vukićević&lt;/a&gt;: Another graphics library, Skia, has recently appeared as part of the Google Chrome code drop.  It&amp;#8217;s unfortunate that Google felt they needed to develop their own alternative in a closed fashion instead of joining an existing open source project.  The Cairo project, and through it the many open source projects that depend on it, could have benefitted from the work that was done on Skia behind closed doors.  Even worse, unlike most of the rest of the Chrome code, Skia is licensed under the Apache Public License v2.0.  This creates difficulties in being able to reuse the Skia code in most projects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;However, on a happy note, hopefully it will ignite a performance race between itself and Cairo.  I also wonder if Cairo will ever pick up what Skia has in the way of effects and animation.  Cairo does have filters, gradients.  But not blurs and lighting effects.&lt;/p&gt;
&lt;p&gt;The biggest obstacle to using Skia on its own, though, is that Skia is really only partially released.  It&amp;#8217;s a &lt;a href="http://code.google.com/p/skia/"&gt;403&lt;/a&gt;.  Allegedly, some folks were able to &lt;a href="http://www.satine.org/archives/2007/03/05/the-skia-source-code-dilemma/"&gt;nab the source&lt;/a&gt; during a brief window on March 4th of last year.  And the source code in the &lt;a href="http://src.chromium.org/viewvc/chrome/trunk/src/skia/"&gt;Chrome tree&lt;/a&gt; is a snapshot that seems incomplete.  For example, much of the native code (to paint directly to X11, Windows, OS X contexts) seems missing.&lt;/p&gt;
&lt;p&gt;For my part, I&amp;#8217;d like to see how Shoes would run if forked to be Skia-powered.  Can&amp;#8217;t seem to hook it all up just yet.&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;Skia can be built seperately, though.&lt;/p&gt;

&lt;pre&gt;&lt;code class="sh"&gt;$ git clone git://github.com/why/skistrap.git
$ cd skistrap
$ make fetch
$ make
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Presuming you have the includes and libs for libpng, libjpeg, libgif and libX11, you&amp;#8217;ll end up with &lt;strong&gt;libskia.so&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s also a &lt;code&gt;make test&lt;/code&gt;, but I haven&amp;#8217;t got it hooked up to X11 quite yet, as there&amp;#8217;s no &lt;code&gt;ports/SkOSWindow_Unix.cpp&lt;/code&gt; or the like.  And it looks like the GL bindings it uses are for other platforms.&lt;/p&gt;</content></entry></feed>
