<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4331872246463053235</id><updated>2011-11-27T19:06:13.281-05:00</updated><category term='irc'/><category term='.net'/><category term='gsoc'/><category term='greasemonkey javascript localnames'/><category term='python vim .net development'/><category term='bot'/><category term='netconf'/><category term='erlang'/><category term='tech hardware usb gmail storage'/><category term='vb'/><title type='text'>Thoughts on life, computers, and eternal happiness</title><subtitle type='html'>I'm young and I make emotionally-charged posts in a stream-of-consciousness style.  Drunk with passion, I will be wrong most of the time.  Call me on it and help me learn.  It is embarrassing to look back at my mistakes, but I will grow.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-3317555104702590510</id><published>2008-04-22T12:14:00.006-04:00</published><updated>2008-05-19T12:00:40.401-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='netconf'/><title type='text'>Summer of code!</title><content type='html'>I found out today that my proposal for Google Summer of Code 2008 has been accepted.  This means I will be spending my summer working on &lt;a href="http://netconf.alioth.debian.org/"&gt;netconf&lt;/a&gt;, a network configuration management system for Debian.  I was so excited to get started that I already had two patches accepted before my application was even accepted :)

Here's my &lt;a href="http://jroes.net/2008/netconf/netconf-gsoc-proposal.txt"&gt;full proposal (txt, 7.3k)&lt;/a&gt;.  Here's probably the most useful information from the proposal, my proposed week-by-week timeline:

&lt;ol&gt;
&lt;li&gt;Before 5/26: Study the current netconf codebase, document and clean up code, write tests, stash away old documentation and code in current repo&lt;/li&gt;
&lt;li&gt;Week 1 [5/26]: Implement inet6 /etc/network/interfaces methods&lt;/li&gt;
&lt;li&gt;Week 2 [6/1]: Implement inet6/v4tunnel method&lt;/li&gt;
&lt;li&gt;Week 3 [6/8]: Design policy system and config format, initial implementation&lt;/li&gt;
&lt;li&gt;Week 4 [6/15]: Finish implementing policy system&lt;/li&gt;
&lt;li&gt;Week 5 [6/22]: Implement netlink socket listener + events&lt;/li&gt;
&lt;li&gt;Week 6 [6/29]: Implement wireless-tools and wpa-supplicant integration&lt;/li&gt;
&lt;li&gt;Week 7 [7/6]: Continue implementing wireless-tools and wpa-supplicant integration&lt;/li&gt;
&lt;li&gt;Week 8 [7/13]: Mid-term GSoC reviews; At this point, we should be very close to 1.0. The time that follows should be used as buffer space for things that may end up taking longer than estimated. Assuming a perfect world, full moon, and star alignment, the following weeks will be used to implement optional fun features.&lt;/li&gt;
&lt;li&gt;Week 9 [7/20]: Implement LinkLocal integration&lt;/li&gt;
&lt;li&gt;Week 10 [7/27]: Implement Additional DHCP options, http_proxy options&lt;/li&gt;
&lt;li&gt;Week 11 [8/3]: Implement ppp/wvdial functionality [Martin has offered to supply the hardware if necessary]&lt;/li&gt;
&lt;li&gt;Week 12 [8/10]: Run through the TODO [3] and implement minor leftover features&lt;/li&gt;
&lt;li&gt;Week 13 [8/17]: GSoC 2008 ends; have a beer :)&lt;/li&gt;
&lt;li&gt;After week 13: Continue to work with the netconf team to get 1.0 out the door; begin work on next challenges&lt;/li&gt;
&lt;/ol&gt;

I'll keep this blog updated with my progress, covering both my successes and failures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-3317555104702590510?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/3317555104702590510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=3317555104702590510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3317555104702590510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3317555104702590510'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2008/04/summer-of-code.html' title='Summer of code!'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-7767177775437972432</id><published>2008-01-07T10:03:00.000-05:00</published><updated>2008-01-07T10:41:27.208-05:00</updated><title type='text'>Embrace the Magpie!</title><content type='html'>&lt;a href="http://www.codinghorror.com/blog/archives/000916.html"&gt;Jeff Atwood&lt;/a&gt; says we should stop trying out the shiny new things!  As the general population tends to agree, customers don't care what languages and tools we use.  Jeff makes some good points.  I would prefer a more positive and slight tweak to the approach, however: "Embrace the Magpie!"

&lt;blockquote&gt;
Who cares what technology you use, as long as it works, and both you and your users are happy with it? 
&lt;/blockquote&gt;

Where's the obsession with quality that we should have?  What if I use a six year old development environment riddled with bugs?  Sure, the code I develop &lt;em&gt;works&lt;/em&gt;, but it's a pain to write code when my development environment crashes regularly.  What if &lt;a href="http://www.mindview.net/WebLog/log-0053"&gt;static typing&lt;/a&gt; and unquantifiable things are slowing my productivity?  The &lt;a href="http://thedailywtf.com/Articles/ITAPPMONROBOT.aspx"&gt;ITAPPMONROBOT&lt;/a&gt; works, but just passing by it in the datacenter worries me to no end.

The pursuit of shiny and new things is &lt;em&gt;exactly&lt;/em&gt; my goal.  But that's just it, it's my goal.  There are two types of goals to make the distinction between:

1. Your personal goals (use shiny new things and anything else that makes me happy)
2. Your job's goals (make the customer happy through whatever means necessary)

When I'm at work, I'm going to make sure the customer is happy.  When I'm at home, however, I'm going to hack on the things I care about, and I will definitely play with the latest technology.  I refuse to feel bad about embracing new technology.  I'll dabble in each language and play with every tool, and take ideas from them all.  

The funny thing is, it'll actually have a pretty neat side effect of improving my ability to satisfy customers.  Why do you think Google lets their employees devote part of their time to personal pursuits?

When you really boil it down, the point of Jeff's post is simply: &lt;quote&gt;Don't read &lt;a href="http://programming.reddit.com"&gt;programming reddit&lt;/a&gt; at work&lt;/quote&gt; :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-7767177775437972432?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/7767177775437972432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=7767177775437972432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/7767177775437972432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/7767177775437972432'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2008/01/embrace-magpie.html' title='Embrace the Magpie!'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-1534668813245264155</id><published>2007-08-12T13:23:00.001-04:00</published><updated>2009-08-26T20:01:31.380-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='irc'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='bot'/><title type='text'>A simple Erlang IRC bot</title><content type='html'>I've been experimenting with Erlang for a while now, and it's been an experience.  I've had a little rougher time with it than most people, but most of the blogs I've been reading are written by exceptional or brilliant programmers, so I'm not too concerned :).

I went ahead and wrote myself a little Erlang IRC bot, as I had a hard time finding one that I could extend that isn't &lt;a href="http://manderlbot.cvs.sourceforge.net/manderlbot/manderlbot/"&gt;5 years old and way too big&lt;/a&gt; or &lt;a href="http://packages.ubuntu.com/edgy/net/manderlbot"&gt;doesn't even work when installed using apt-get install&lt;/a&gt; (not to mention I couldn't find its source, either).

&lt;img src="http://jroes.net/erlang-irc-bot.png" /&gt;

Here's what I came up with:

    &lt;pre&gt;
&lt;span class="function-name"&gt;-module&lt;/span&gt;(bot).
&lt;span class="function-name"&gt;-author&lt;/span&gt;(&lt;span class="string"&gt;"jonathan.roes@gmail.com"&lt;/span&gt;).
&lt;span class="function-name"&gt;-export&lt;/span&gt;([connect/2, loop/1]).
&lt;span class="function-name"&gt;-define&lt;/span&gt;(&lt;span class="constant"&gt;nickname&lt;/span&gt;, &lt;span class="string"&gt;"jroes-test"&lt;/span&gt;).
&lt;span class="function-name"&gt;-define&lt;/span&gt;(&lt;span class="constant"&gt;channel&lt;/span&gt;, &lt;span class="string"&gt;"#jroes-test"&lt;/span&gt;).

&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;Connect to an IRC server with a given Host and Port.  Set up the TCP option to
&lt;/span&gt;&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;give us messages on a line-by-line basis.
&lt;/span&gt;&lt;span class="function-name"&gt;connect&lt;/span&gt;(&lt;span class="variable-name"&gt;Host&lt;/span&gt;, &lt;span class="variable-name"&gt;Port&lt;/span&gt;) -&amp;gt;
        {ok, &lt;span class="variable-name"&gt;Sock&lt;/span&gt;} = gen_tcp:connect(&lt;span class="variable-name"&gt;Host&lt;/span&gt;, &lt;span class="variable-name"&gt;Port&lt;/span&gt;, [{packet, line}]),
        &lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;According to RFC1459, we need to tell the server our nickname and username
&lt;/span&gt;        gen_tcp:send(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="string"&gt;"NICK "&lt;/span&gt; ++ ?&lt;span class="constant"&gt;nickname&lt;/span&gt; ++ &lt;span class="string"&gt;"\r\n"&lt;/span&gt;),
        gen_tcp:send(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="string"&gt;"USER "&lt;/span&gt; ++ ?&lt;span class="constant"&gt;nickname&lt;/span&gt; ++ &lt;span class="string"&gt;" blah blah blah blah\r\n"&lt;/span&gt;),
        loop(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;).
        
&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;Now that we're connected, receive TCP messages and parse them.
&lt;/span&gt;&lt;span class="function-name"&gt;loop&lt;/span&gt;(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;) -&amp;gt;
        &lt;span class="keyword"&gt;receive&lt;/span&gt;
                {tcp, &lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="variable-name"&gt;Data&lt;/span&gt;} -&amp;gt;
                        io:format(&lt;span class="string"&gt;"[~w] Received: ~s"&lt;/span&gt;, [&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="variable-name"&gt;Data&lt;/span&gt;]),
                        parse_line(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, string:tokens(&lt;span class="variable-name"&gt;Data&lt;/span&gt;, &lt;span class="string"&gt;": "&lt;/span&gt;)),
                        loop(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;);
                quit -&amp;gt;
                        io:format(&lt;span class="string"&gt;"[~w] Received quit message, exiting...~n"&lt;/span&gt;, [&lt;span class="variable-name"&gt;Sock&lt;/span&gt;]),
                        gen_tcp:close(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;),
                        &lt;span class="keyword"&gt;exit&lt;/span&gt;(stopped)
        &lt;span class="keyword"&gt;end&lt;/span&gt;.

&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;The following is an example of the message this fun intends to parse.  Here we see
&lt;/span&gt;&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;the limitation that tokenizing the string on both :'s and spaces puts on us.
&lt;/span&gt;&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;[#Port&amp;lt;0.124&amp;gt;] Received: :jroes!jroes@mask-2EDB8BDB.net PRIVMSG #jroes-test :jroes-test: wassup?
&lt;/span&gt;&lt;span class="function-name"&gt;parse_line&lt;/span&gt;(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, [&lt;span class="variable-name"&gt;User&lt;/span&gt;,&lt;span class="string"&gt;"PRIVMSG"&lt;/span&gt;,&lt;span class="variable-name"&gt;Channel&lt;/span&gt;,?&lt;span class="constant"&gt;nickname&lt;/span&gt;|&lt;span class="variable-name"&gt;_&lt;/span&gt;]) -&amp;gt;
        &lt;span class="variable-name"&gt;Nick&lt;/span&gt; = lists:nth(1, string:tokens(&lt;span class="variable-name"&gt;User&lt;/span&gt;, &lt;span class="string"&gt;"!"&lt;/span&gt;)),
        irc_privmsg(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="variable-name"&gt;Channel&lt;/span&gt;, &lt;span class="string"&gt;"You talkin to me, "&lt;/span&gt; ++ &lt;span class="variable-name"&gt;Nick&lt;/span&gt; ++ &lt;span class="string"&gt;"?"&lt;/span&gt;);
        
&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;If the second token is "376", then join our channel.  376 indicates End of MOTD.
&lt;/span&gt;&lt;span class="function-name"&gt;parse_line&lt;/span&gt;(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, [&lt;span class="variable-name"&gt;_&lt;/span&gt;,&lt;span class="string"&gt;"376"&lt;/span&gt;|&lt;span class="variable-name"&gt;_&lt;/span&gt;]) -&amp;gt;
        gen_tcp:send(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="string"&gt;"JOIN :"&lt;/span&gt; ++ ?&lt;span class="constant"&gt;channel&lt;/span&gt; ++ &lt;span class="string"&gt;"\r\n"&lt;/span&gt;);

&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;The server will periodically send PINGs and expect you to PONG back to make sure
&lt;/span&gt;&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;you haven't lost the connection.
&lt;/span&gt;&lt;span class="function-name"&gt;parse_line&lt;/span&gt;(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, [&lt;span class="string"&gt;"PING"&lt;/span&gt;|&lt;span class="variable-name"&gt;Rest&lt;/span&gt;]) -&amp;gt;
        gen_tcp:send(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="string"&gt;"PONG "&lt;/span&gt; ++ &lt;span class="variable-name"&gt;Rest&lt;/span&gt; ++ &lt;span class="string"&gt;"\r\n"&lt;/span&gt;);

&lt;span class="function-name"&gt;parse_line&lt;/span&gt;(&lt;span class="variable-name"&gt;_&lt;/span&gt;, &lt;span class="variable-name"&gt;_&lt;/span&gt;) -&amp;gt;
        0.

&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;This just helps us write a PRIVMSG back to a client without having to type
&lt;/span&gt;&lt;span class="comment-delimiter"&gt;% &lt;/span&gt;&lt;span class="comment"&gt;the newlines and :'s ourselves so much.  It'll be more useful later.
&lt;/span&gt;&lt;span class="function-name"&gt;irc_privmsg&lt;/span&gt;(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="variable-name"&gt;To&lt;/span&gt;, &lt;span class="variable-name"&gt;Message&lt;/span&gt;) -&amp;gt;
        gen_tcp:send(&lt;span class="variable-name"&gt;Sock&lt;/span&gt;, &lt;span class="string"&gt;"PRIVMSG "&lt;/span&gt; ++ &lt;span class="variable-name"&gt;To&lt;/span&gt; ++ &lt;span class="string"&gt;" :"&lt;/span&gt; ++ &lt;span class="variable-name"&gt;Message&lt;/span&gt; ++ &lt;span class="string"&gt;"\r\n"&lt;/span&gt;).
&lt;/pre&gt;

To run and play with:

&lt;pre&gt;
jroes@halcyon:~/src$ wget http://jroes.net/bot.erl
jroes@halcyon:~/src$ erl
1&gt; c("bot.erl").
{ok,bot}
2&gt; Bot = spawn(bot, connect, ["irc.server.com", 6667]).
3&gt; Bot ! quit.
&lt;/pre&gt;

Next up: Extending it so the code can be changed/added to at runtime, retrieving data from a webservice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-1534668813245264155?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/1534668813245264155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=1534668813245264155' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/1534668813245264155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/1534668813245264155'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2007/08/simple-erlang-irc-bot.html' title='A simple Erlang IRC bot'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-3980139913093398810</id><published>2007-07-05T10:07:00.000-04:00</published><updated>2008-11-19T01:42:40.937-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vb'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>The custom parameter that should have already been in .NET 2.0</title><content type='html'>I don't know why, but there's no DataSource parameter for member variables of the page.  So, you can't choose one of your variables, like Page.Cow to be passed to a DataSourceControl.  I went ahead and implemented one.


&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_pzoQWsY1GJE/Ro0Cfhij1GI/AAAAAAAAABE/UssyTIBkDHQ/s1600-h/page-member-parameter.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_pzoQWsY1GJE/Ro0Cfhij1GI/AAAAAAAAABE/UssyTIBkDHQ/s400/page-member-parameter.JPG" alt="" id="BLOGGER_PHOTO_ID_5083722294973682786" border="0" /&gt;&lt;/a&gt;
Since there's no easy way that I've seen so far to paste code into a blog post on Blogger, I've just uploaded it to &lt;a href="http://pastebin.com/942635"&gt;pastebin&lt;/a&gt;.

This works for the situation I'm in right now, but I wouldn't be the least bit surprised if I hiccuped on a few of those Reflection types - Field, Member, Property, what's the difference? :) I should really read the Reflection documentation, but trying stuff until it works in QuickWatch is so much easier... Which reminds me, anyone know why I can't see variables declared inside an If block?
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_pzoQWsY1GJE/Ro0CWxij1FI/AAAAAAAAAA8/Snn6RKvC6UY/s1600-h/cant-watch-variable.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_pzoQWsY1GJE/Ro0CWxij1FI/AAAAAAAAAA8/Snn6RKvC6UY/s400/cant-watch-variable.jpg" alt="" id="BLOGGER_PHOTO_ID_5083722144649827410" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-3980139913093398810?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/3980139913093398810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=3980139913093398810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3980139913093398810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3980139913093398810'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2007/07/custom-parameter-that-should-have.html' title='The custom parameter that should have already been in .NET 2.0'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pzoQWsY1GJE/Ro0Cfhij1GI/AAAAAAAAABE/UssyTIBkDHQ/s72-c/page-member-parameter.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-6485620352362525157</id><published>2006-09-23T16:51:00.001-04:00</published><updated>2008-04-22T21:22:39.082-04:00</updated><title type='text'></title><content type='html'>&lt;p&gt;
I fixed the rest of the bugs that I know about for &lt;a href="http://jroes.net/2006/lnlink.user.js"&gt;lnlink&lt;/a&gt; now.  The latest changes are now merged with the stable version so there is no longer a "beta" lnlink.
&lt;/p&gt;
&lt;p&gt;
I want to make a screencast to show off the functionality, and I also want to start thinking about putting this into a Firefox extension.  The next thing that I think would be pretty neat is to have some sort of autocompletion when you're typing a localname.  Also, it would be cool if this could happen in the location bar, too.  I think this is actually pretty important in furthering the adoption of LocalNames, because most people have a hard time with memory and can't always remember exactly what they name a page.  I know that I for one have difficulty remembering them.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-6485620352362525157?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/6485620352362525157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=6485620352362525157' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/6485620352362525157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/6485620352362525157'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/09/i-fixed-rest-of-bugs-that-i-know-about.html' title=''/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-1643806818870960869</id><published>2006-09-22T01:07:00.001-04:00</published><updated>2008-04-22T21:22:05.732-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='greasemonkey javascript localnames'/><title type='text'>LocalNames Greasemonkey script update</title><content type='html'>&lt;p&gt;
I fixed the &lt;a href="http://jroes.sosdg.org/lnlink.user.js"&gt;LocalNames Greasemonkey script&lt;/a&gt; tremendously.  It had a number of bugs stemming from the fact that it would just try to keep track of the last characters you'd pressed to figure out the last word you typed and see if it matched the regex for text between double brackets.  One of them was that if you deleted anything it wouldn't update its last word buffer.  The other was that if you hit spacebar twice and then started typing a LocalName it wouldn't load up.  Now it just waits for you to hit a space, then looks up every LocalName that could be in the textarea and updates it.  I haven't gotten it to mess up on me yet!  I still need to figure out how to get it to work in GMail, Blogger, and Meebo.  Once it works there, I'll probably use it 24/7.
&lt;/p&gt;
&lt;p&gt;
Make sure you refresh any pages where you have textareas that you want to test it out in when you re-install the script.  It has to re-add its listener events to the textareas, which can only be done when you refresh the page.
&lt;/p&gt;
&lt;p&gt;
EDIT:
&lt;/p&gt;
&lt;p&gt;
Okay, I really should go to sleep, but I just got the script working in GMail, &lt;a href="http://meebo.com/"&gt;Meebo&lt;/a&gt;, and Blogger.  There are only two problems:
&lt;/p&gt;
&lt;p&gt;
&lt;strike&gt;1. It'll drop you to the bottom of the textarea sometimes when you type a localname.&lt;/strike&gt; -- 9/22 2:09pm: Fixed this bug with a bit of mathematical thinking.
&lt;strike&gt;2. If you type an invalid localname, it'll go haywire and start telling you the record can't be found over and over and over and over again every time you hit spacebar.  Watch out for that one :)&lt;/strike&gt; -- 9/23 4:47pm: Fixed this bug.  Nothing will happen if you type an invalid LocalName now, not even a "record not found".  When I convert the script into a full-blown firefox extension, I plan on giving a bunch of different options for what to do when LocalNames aren't found.
&lt;/p&gt;
&lt;p&gt;
&lt;strike&gt;Since it has so many crazy little bugs, I'm just going to sneak you a beta and leave the other one around.&lt;/strike&gt;  But, how cool is it to be chatting with your friends via IM and then slip in a localname!?  AWESOME!
&lt;/p&gt;
&lt;p&gt;
Todo: &lt;strike&gt;Fix bugs mentioned above.&lt;/strike&gt;  Make a screencast.
&lt;/p&gt;
&lt;p&gt;
Here's the latest &lt;a href="http://jroes.net/2006/lnlinkbeta.user.js"&gt;lnlink beta&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-1643806818870960869?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/1643806818870960869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=1643806818870960869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/1643806818870960869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/1643806818870960869'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/09/localnames-greasemonkey-script-update.html' title='LocalNames Greasemonkey script update'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-5980349920281627018</id><published>2006-09-21T23:59:00.001-04:00</published><updated>2008-04-22T21:21:18.117-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python vim .net development'/><title type='text'>Why I would probably use .NET instead of Python for any project I do in the near future</title><content type='html'>&lt;p&gt;
I want to start off by saying that I really, &lt;em&gt;really&lt;/em&gt;, love Python.  Python is a great language.  I like the way it feels, I like the way it works, and I like that it's always there for me when I'm in need.
&lt;/p&gt;
&lt;p&gt;
Now, having said that, if I were going to start on a web project in the next... 20 minutes, or few hours, or weeks, or months, I'd probably use .NET (VB or C#).  Why?  Because you can get a whole lot more done in a whole lot less time.
&lt;/p&gt;
&lt;h3&gt;1. I don't have to remember every class I want to use&lt;/h3&gt;
&lt;p&gt;
I jump into my new project, type a few lines at the command line to start a new project with &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, or import &lt;a href="http://webpy.org/"&gt;web.py&lt;/a&gt;, or whatever crazy cool new hip happenin' web framework I want to play with (don't get me wrong, they are all really cool and have lots of advantages, especially the way database functionality works, MVC, and pretty url handling).  I start on my first page, the index page.  I jump into the function that will display the contents of the page.  Oh, crap, what's the function to send a 200 OK HTTP response?  Oh, crap, what's that function called that parses the template I made?  Oh, crap, what's that function called that selects the data I want from the database and passes it to my template?  I'm too forgetful for that kind of stuff.  I need intellisense.  And, yes, I know Vim 7 has C-x u.  But, I've never gotten that to work.  And I tried, I tried really hard, I swear.  And, typing C-x u is a pain in the damn ass anyways.  Why can't it just pop up when I hit the period key?
&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;2. Debugging isn't really really really really really easy&lt;/h3&gt;
&lt;p&gt;
In .NET, I start my page in "Debug" mode, and set a breakpoint on something I think might break.  The code runs until my breakpoint, and then I can just move the mouse over anything that I have a question about -- did this function call work the way I expected it to?  Does this variable have what I expected it to have in it at this point?  All that stuff is right there, really cool, working perfectly.  I can even watch variables change value while stepping through the code.  It's all so visual and easy to use.  I have never seen anything that exists like this for Python code.
&lt;/p&gt;

&lt;h3&gt;3. I don't have to type 3000 pounds of HTML to get a table on the screen&lt;/h3&gt;

&lt;p&gt;
Ok, now, I really believe in semantic markup, and sometimes .NET really gets on my nerves because everything is table-based and ugly, and I know I'm &lt;a href="http://www.hotdesign.com/seybold/everything.html"&gt;not supposed to use tables for layout&lt;/a&gt;.  However, sometimes you really don't want to type html head title blah blah blah just to get some things on the screen really quick.  It should be pretty trivial (especially considering CSS has absolute positioning and all kinds of nice fancy stuff) to just drag some stuff on a screen and get rolling.  I'll admit it, this isn't really a good excuse to use .NET, the other 2 stand on their own.  I could live without this if the other 2 were present.
&lt;/p&gt;
&lt;p&gt;
Now, of course, there are things I can't stand about .NET.  One of them is that I can't use Vim.  I love Vim, I am too addicted to the hjkl layout to switch to anything.  I gave Emacs a good week or two before I couldn't take it anymore, so please don't try to convert me.  Actually, I found something cool a while back that lets you edit .NET code in Vim, but you had to pay for it, and I'm stingy.  I won't even link to it because I find it so disgusting that someone would rip the whole Vim idea and then try to sell it.  I hope they don't make a cent, honestly.
&lt;/p&gt;
&lt;p&gt;
Another thing I don't like about .NET -- no one does unit testing.  I want to unit test everything, I want it to be a nice integrated part of the GUI.  But, it's just not there.
&lt;/p&gt;
&lt;p&gt;
I don't understand why there hasn't been a lot of movement toward some really nice environments that directly compete against .NET and friends in the Linux world.  Maybe I'm just not looking in the right places.  The best I could find is &lt;a href="http://pida.berlios.de/"&gt;pida&lt;/a&gt;, which, by the way, I think is really really cool.  But, alas, there is not a large fanbase, and there is not a lot of development going on with it from what I can tell.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-5980349920281627018?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/5980349920281627018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=5980349920281627018' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/5980349920281627018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/5980349920281627018'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/09/why-i-would-probably-use-net-instead-of.html' title='Why I would probably use .NET instead of Python for any project I do in the near future'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-157158559911531234</id><published>2006-09-10T07:55:00.000-04:00</published><updated>2008-02-05T09:32:20.641-05:00</updated><title type='text'>6 hours and 45 lines later...</title><content type='html'>I wrote a script that turns your LocalNames (specified by surrounding [[ and ]]) into links in all your textareas for Firefox w/ Greasemonkey.  If Blogger wasn't using some kind of secret recipe instead of a real textarea, I'd probably be writing all kinds of LocalNames in this post just for fun.  Dammit!  Oh well, I'll just move blogging providers :)

&lt;a href="http://jroes.net/2006/lnlink.user.js"&gt;Here's the script.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-157158559911531234?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/157158559911531234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=157158559911531234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/157158559911531234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/157158559911531234'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/09/6-hours-and-45-lines-later.html' title='6 hours and 45 lines later...'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-3805045724208181699</id><published>2006-09-10T02:02:00.000-04:00</published><updated>2006-09-10T02:15:43.752-04:00</updated><title type='text'>Artificially intelligent greasemonkeys are not here coincidentally, you know</title><content type='html'>&lt;span style="font-size:100%;"&gt;So I'm not keeping up.  It's tough.  I'm not sure if it's this tough to keep up with a blog for everyone, or just tough for me because I have 2 part-time jobs and go to school full time, or what.  I bought that USB stick I was talking about a couple of days ago.

I tried to call &lt;a href="http://lion.taoriver.net/"&gt;Lion&lt;/a&gt; today, because I had a bunch of questions.  I got his voicemail, so instead I'm going to ask the Internet:

1. Why do people believe in AI?
2. Why is there no coincidence?
3. Why not use Greasemonkey to make &lt;a href="http://ln.taoriver.net/"&gt;LocalNames&lt;/a&gt; links in blog posts instead of writing a plugin for every blogging software known to man, and still not end up covering everything?

&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;1. Why do people believe in AI?&lt;/span&gt;

I don't understand why anyone with at least a simple understanding of how programming works could believe in such a thing.  It doesn't mean I don't want AI.  I think AI would be cool.  I just don't think it's possible.  I've thought about it a lot, I don't have a good solid argument or anything, but both intuitively and technically I don't see how it's possible.

&lt;span style="font-size:130%;"&gt;2. Why is there no coincidence?&lt;/span&gt;

I have heard this twice now.  The first time was in &lt;a href="http://imdb.com/title/tt0434409/"&gt;V for Vendetta&lt;/a&gt;.  V, the main character and a supposedly well-read and knowledgeable guy (judging from the countless books in his underground lair), makes the statement in the beginning of the movie.   About 15 minutes ago I watched the &lt;a href="http://youtube.com/watch?v=BjV4jTRBKAA"&gt;first part of the first episode of XXXHolic&lt;/a&gt;, and I heard it again.  I don't understand why, why there is no coincidence.  Does this just mean that these characters all believe in a higher being, or that everything is predetermined?  What would give them these beliefs?  I have none of the sort quite yet.

&lt;span style="font-size:130%;"&gt;3. Why not use Greasemonkey instead of writing a bunch of plugins?
&lt;/span&gt;
Yeah, this one is out of place, I know.  I didn't say this was an organized Q&amp;amp;A session.  I think it would make much more sense to invest time writing a Greasemonkey script that turned things that look like LocalNames into links when you are typing in a textarea in your browser.  I'm not sure what the overhead is like when using Greasemonkey, it may be more efficient to implement as a native Firefox plugin.  Either way, simply parsing every textarea on the screen and turning LocalNames into links, either on the fly, or on Submit would pretty much bring the whole LocalNames idea to everything on the web.  This means GMail, ... hey, do those &lt;a href="http://www.meebo.com/"&gt;Meebo&lt;/a&gt; guys use textareas for IM windows?  It would be awesome to see links in IM so soon!

Anyways, just some thoughts.  I'm not trying to attack anything, honestly!  I'm not trying to set my ideas on questions 1 and 2 in stone, either.  I'm looking for someone to lead me to an understanding of this stuff, I'm not solid or clear on these thoughts, I'm just trying to learn and understand.
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-3805045724208181699?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/3805045724208181699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=3805045724208181699' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3805045724208181699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/3805045724208181699'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/09/artificially-intelligent-greasemonkeys.html' title='Artificially intelligent greasemonkeys are not here coincidentally, you know'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4331872246463053235.post-6858600751043995516</id><published>2006-08-23T01:50:00.000-04:00</published><updated>2006-08-23T02:20:10.581-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech hardware usb gmail storage'/><title type='text'>Productivity</title><content type='html'>I've come to the conclusion that I need to buy a USB stick.  I know, it's a little late, everyone has a USB stick or two or three on their keychain these days, right?

Well, not us poor kids, slaving away for the man at two jobs and going to school at the same time.  We prefer e-mailing ourselves our homework and stuff to print instead of putting it on a stick.

Why am I making the switch from GMail as a storage device to a USB stick?

Well, for one because I think it's simpler.  I can just drag and drop whatever I need later onto a stick.  I don't need to go search for it in GMail.  I don't need to keep cluttering up my Inbox folder with unread messages so I remember where to find the stuff I need to download later.  I don't like stars for this kind of stuff, I star almost everything.  I don't want to click that dropdown to go to "Apply label" to apply some sort of "Download me" label to it.  I hate dropdowns, they take too long, I'd rather use my keyboard.  Sure, there's probably a cool shortcut and someone will comment on this article and tell me, and then I'll realize the error of my ways and regret buying a USB stick in the first place.

Ubiquity comes in a close second.  I'm always going to have my keys around.  I'm not always going to have a superfast internet connection where I can just get to my e-mail and download a bunch of files.  What if I'm at the office where we only have a shitty DSL connection?  What if I'm trying to patch my mom's computer and her "lite" broadband connection only downloads at 20kb/sec?  What if I'm trying to boot a computer to Linux so I can troubleshoot a problem, or just wipe Windows completely off of the box so that I can put Ubuntu on it?

Just that list of likely scenarios and the fact that it's less hassle is enough for me, really.  But, I'll add another thing - it sucks trying to store a &lt;a href="http://mptw.tiddlyspot.com/"&gt;MonkeyPirateTiddlyWiki&lt;/a&gt; in your GMail account.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4331872246463053235-6858600751043995516?l=jonathanroes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonathanroes.blogspot.com/feeds/6858600751043995516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4331872246463053235&amp;postID=6858600751043995516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/6858600751043995516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4331872246463053235/posts/default/6858600751043995516'/><link rel='alternate' type='text/html' href='http://jonathanroes.blogspot.com/2006/08/productivity.html' title='Productivity'/><author><name>Jonathan</name><uri>http://www.blogger.com/profile/04220528252613521557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
