<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>notes</title><generator>Tumblr (3.0; @landonf)</generator><link>http://notes.bikemonkey.org/</link><item><title>Milk at the Castro Theater in San Francisco.</title><description>&lt;img src="http://24.media.tumblr.com/18xGvBjpXh87sxxvXh7tqwl3o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Milk at the Castro Theater in San Francisco.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/63633888</link><guid>http://notes.bikemonkey.org/post/63633888</guid><pubDate>Mon, 08 Dec 2008 00:15:36 -0500</pubDate></item><item><title>Twitter</title><description>&lt;p&gt;I give in — I’ll try using twitter. Let’s see if I can write interesting posts about what I’m working on in 140 characters or less.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/landonfuller"&gt;http://twitter.com/landonfuller&lt;/a&gt;&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/63569417</link><guid>http://notes.bikemonkey.org/post/63569417</guid><pubDate>Sun, 07 Dec 2008 16:09:31 -0500</pubDate></item><item><title>20 days and still waiting for approval:
“Your application...</title><description>&lt;img src="http://27.media.tumblr.com/18xGvBjpXgwe1i5w4nJzq18do1_400.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;b&gt;20 days&lt;/b&gt; and still waiting for approval:&lt;/p&gt;
&lt;p&gt;“Your application Peeps is requiring unexpected additional time for review.  We apologize for the delay, and will update you with further status as soon as we are able.”&lt;/p&gt;
&lt;p&gt;I really have no idea why the app is requiring additional review — I was fastidious in following Apple’s guidelines.&lt;/p&gt;
&lt;p&gt;In the meantime, check out the &lt;a href="http://www.plausiblelabs.com/peeps/"&gt;product page&lt;/a&gt;. I’m a big fan of the owl, and our friends were kind enough to volunteer their photos for the screenshots.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/62171790</link><guid>http://notes.bikemonkey.org/post/62171790</guid><pubDate>Sat, 29 Nov 2008 17:36:00 -0500</pubDate></item><item><title>(Click the movie to start playback. Double click to play...</title><description>&lt;object width="400" height="240" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"&gt;&#13;
    &lt;param name="src" value="http://www.bikemonkey.org/code/macosx/CoverFlowTimingExample/CoverFlowTimingExample-poster.jpg" /&gt;&lt;param name="href" value="http://www.bikemonkey.org/code/macosx/CoverFlowTimingExample/CoverFlowTimingExample.mov" /&gt;&lt;param name="target" value="myself" /&gt;&lt;param name="controller" value="false" /&gt;&lt;param name="autoplay" value="false" /&gt;&lt;param name="scale" value="aspect" /&gt;&lt;embed width="400" height="240" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/" src="http://www.bikemonkey.org/code/macosx/CoverFlowTimingExample/CoverFlowTimingExample-poster.jpg" href="http://www.bikemonkey.org/code/macosx/CoverFlowTimingExample/CoverFlowTimingExample.mov" target="myself" controller="false" autoplay="false" scale="aspect"&gt;&lt;/embed&gt;&lt;/object&gt;&#13;
&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;b&gt;(Click the movie to start playback. Double click to play again.)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Our CoverFlow implementation for the iPhone. &lt;a href="mailto:landonf@plausiblelabs.com"&gt;Send an e-mail&lt;/a&gt; if you’re interested in licensing it.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/49310545</link><guid>http://notes.bikemonkey.org/post/49310545</guid><pubDate>Mon, 08 Sep 2008 17:12:00 -0400</pubDate></item><item><title>Google's NSXMLDocument Replacement for iPhone</title><description>&lt;p&gt;If you’re missing a decent Objective-C DOM-based XML library for the iPhone, Google has a NSXMLDocument replacement available under the Apache license, as part of their Objective-C GData Library:&lt;/p&gt;
&lt;p&gt;See &lt;a href="http://gdata-objectivec-client.googlecode.com/svn/trunk/Source/XMLSupport/"&gt;XMLSupport&lt;/a&gt; and &lt;a href="http://gdata-objectivec-client.googlecode.com/svn/trunk/Source/GDataDefines.h"&gt;GDataDefines.h&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ve also had some success replacing missing classes using the &lt;a href="http://www.cocotron.org/"&gt;Cocotron&lt;/a&gt; implementations — I’m using Cocotron’s NSPredicate implementation for selective receive in my message-passing actor [&lt;a href="http://en.wikipedia.org/wiki/Actor_model"&gt;wikipedia&lt;/a&gt;] library.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/47351363</link><guid>http://notes.bikemonkey.org/post/47351363</guid><pubDate>Mon, 25 Aug 2008 14:45:12 -0400</pubDate></item><item><title>Sun Approved: Merge from BSD Java to OpenJDK</title><description>&lt;p&gt;Sun has approved merging the JRL-licensed &lt;a title="f" href="http://www.freebsd.org/java/"&gt;BSD Java&lt;/a&gt; to the GPLv2+ClassPath &lt;a title="f" href="http://openjdk.java.net/"&gt;OpenJDK-6&lt;/a&gt;. That means that all of the BSD Java changes, including the &lt;a title="f" href="http://landonf.bikemonkey.org/static/soylatte/"&gt;SoyLatte &lt;/a&gt;Mac OS X port, can now be sent to the OpenJDK project, and an official BSD porters group can be proposed:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;The purpose of this letter is to confirm our understanding that you are providing to Sun under the terms of the Sun Contributor Agreement [1] the modifications that you made and are choosing to submit to code originally made available by Sun to you under the Sun Community Source License (“SCSL”) and subsequently modified by you pursuant to the Java Research License (“JRL”), where your modifications are expressed as diffs against Sun’s current OpenJDK-6 code base [2] (“Diffs”).&lt;br/&gt;&lt;br/&gt;For the avoidance of doubt, this letter does not give you rights to distribute modifications made to code provided to you under SCSL or JRL, or the code originally provided by Sun pursuant thereto, in ways inconsistent with those licenses except specifically to provide the Diffs to Sun as stated above.&lt;br/&gt;&lt;br/&gt;On behalf of Sun,&lt;br/&gt;- Mark Reinhold, Principal Engineer&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Sweet!&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/41640903</link><guid>http://notes.bikemonkey.org/post/41640903</guid><pubDate>Wed, 09 Jul 2008 14:12:00 -0400</pubDate></item><item><title>Book: Geographic Information Systems and Science</title><description>&lt;p&gt;This week I spent a couple days reading through &lt;a title="f" href="http://www.amazon.com/Geographic-Information-Systems-Science-Longley/dp/047087001X/ref=pd_sim_b_2"&gt;Geographic Information Systems and Science&lt;/a&gt; (Paul Longley, Michael Goodchild, David Maguire, David Rhind).&lt;/p&gt;
&lt;p&gt;The book is an excellent introduction to GIS — covering everything from basic principals and vocabulary to statistical analysis and project planning. In this, I’d place the book up there with &lt;a title="f" href="http://www.amazon.com/Modeling-Essentials-Third-Graeme-Simsion/dp/0126445516/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215380007&amp;sr=1-1"&gt;Data Modeling Essentials&lt;/a&gt; or &lt;a title="f" href="http://www.amazon.com/Applied-Cryptography-Protocols-Algorithms-Source/dp/0471117099/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215380030&amp;sr=1-1"&gt;Applied Cryptography&lt;/a&gt; in giving comprehensive treatment to a complex field.&lt;/p&gt;
&lt;p&gt;I found the section on uncertainity to be the most interesting — in measuring the physical world, uncertainity is inevitable. There is no possible perfect representation, and uncertainity can not be eliminated. In GIS, it is your responsibility to account for these uncertanties in data, avoiding misrepresenting your certainity, and manage uncertainity introduced through aggregation of imperfect data.&lt;/p&gt;
&lt;p&gt;The book reads like a text book, and can be incredibly tedious in explaining programming topics and business planning (in this, it’s not very different from Data Modelling Essentials). While this may detract from your reading enjoyment, the book remains an excellent introduction and reference source.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/41233596</link><guid>http://notes.bikemonkey.org/post/41233596</guid><pubDate>Sun, 06 Jul 2008 17:49:00 -0400</pubDate></item><item><title>Ruby the new Visual Basic?</title><description>&lt;p&gt;Has Ruby become the new rapid application development tool for common application developers? Ruby seems to be filling the traditional roles (and seeing the same sorts of developers) as tools like VisualBasic or REALBasic, especially in terms of rapid development of web applications (as opposed to desktop applications).&lt;/p&gt;
&lt;p&gt;Doing some Googling, I’m not the first one to ask this question:&lt;a title="f" href="http://tssblog.blogs.techtarget.com/2007/10/30/is-ruby-the-new-vb/"&gt; Is Ruby the New VB?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What sort of shifts will the surrounding programming communities see with the ongoing influx of application developers traditionally constrained to the Windows universe?&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/41229603</link><guid>http://notes.bikemonkey.org/post/41229603</guid><pubDate>Sun, 06 Jul 2008 17:06:00 -0400</pubDate></item><item><title>Free Street Map Data?</title><description>&lt;p&gt;If you’re interested in GIS, you’ve surely come across the OpenStreetMap project — they’re working to “provide free geographic data such as street maps to anyone who wants them.”&lt;/p&gt;
&lt;p&gt;Only problem is their rather unexpected choice of license for their data:  &lt;a href="http://creativecommons.org/licenses/by-sa/2.0/" class="external text" title="http://creativecommons.org/licenses/by-sa/2.0/" rel="nofollow"&gt;Creative Commons Attribution-ShareAlike 2.0 license&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See:&lt;a title="OpenStreetMap License" href="http://wiki.openstreetmap.org/index.php/OpenStreetMap_License"&gt; OpenStreetMap License&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This choice of licensing means that any data aggregated and distributed with theirs must also be licensed under the CC share-alike license — this includes any data your customers might wish to aggregate with map data. This is more or less a non-starter for any non-hobbiest project — commercial or otherwise. At what point does “aggregation” of factual data end? Does it ever?&lt;/p&gt;
&lt;p&gt;The project has attempted to &lt;a title="address this" href="http://www.opengeodata.org/?p=262"&gt;address&lt;/a&gt; this licensing quandry, but work in that direction is mired in a seemingly never-ending political morass: see this &lt;a title="f" href="http://lists.openstreetmap.org/pipermail/legal-talk/2008-July/001037.html"&gt;mailing list thread&lt;/a&gt;. There is a proposal to move to the “Open Database License”, which still applies the same “share-alike” restrictions to derivative databases (as opposed to, say, rendered maps). This improves the situation, but not by much — this licensing precludes the use in projects requiring aggregated data (ie, most of them) without share-alike licensing.&lt;/p&gt;
&lt;p&gt;What amuses me the most is OpenStreetMap’s heavy reliance on public domain data — They’re happy to repackage it under more restrictive terms than it arrived.&lt;/p&gt;
&lt;p&gt;Seems like there’s room for an ActuallyOpenStreetMaps project.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/41103532</link><guid>http://notes.bikemonkey.org/post/41103532</guid><pubDate>Sat, 05 Jul 2008 14:21:33 -0400</pubDate></item><item><title>Lighting up Municiple Internet Access</title><description>&lt;a href="http://www.onthemedia.org/transcripts/2008/04/11/04"&gt;Lighting up Municiple Internet Access&lt;/a&gt;: &lt;p&gt;This is the right way to bring about municiple networking — displace the cable and telephone duopoly through open access to municiple fiber. &lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/33727384</link><guid>http://notes.bikemonkey.org/post/33727384</guid><pubDate>Sun, 04 May 2008 18:39:40 -0400</pubDate></item><item><title>Virtual Machine, SQL Database ... or Both?</title><description>&lt;p&gt;Spending today working with &lt;a href="http://leplastrier.com/"&gt;Jonathan&lt;/a&gt; on some iPhone/Mac Objective-C libraries for SQLite (managing data/schema migrations, etc), I stumbled across this bit of documentation:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;After the parser assembles tokens into complete SQL statements, it calls the code generator to produce virtual machine code that will do the work that the SQL statements request.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Cool! SQLite’s Virtual Database Engine (VDBE) is documented in &lt;a href="http://www.sqlite.org/vdbe.html"&gt;this tutorial&lt;/a&gt;, and the &lt;a href="http://www.sqlite.org/opcode.html"&gt;vm opcode reference&lt;/a&gt;. You can peruse the code generated for your own queries using &lt;b&gt;explain &lt;/b&gt;(first using .explain to enable more readable output)&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;pre&gt;sqlite&gt; .explain&lt;br/&gt;sqlite&gt; EXPLAIN INSERT INTO "testtable" VALUES ("testing");&lt;br/&gt;addr  opcode          p1          p2          p3                               &lt;br/&gt;----  --------------  ----------  ----------  --------------------&lt;br/&gt;0     Goto            0           10                                           &lt;br/&gt;1     Integer         0           0                                            &lt;br/&gt;2     OpenWrite       0           2                                            &lt;br/&gt;3     SetNumColumns   0           1                                            &lt;br/&gt;4     NewRowid        0           0                                            &lt;br/&gt;5     String8         0           0           testing                          &lt;br/&gt;6     MakeRecord      1           0           a                                &lt;br/&gt;7     Insert          0           11          testtable                        &lt;br/&gt;8     Close           0           0                                            &lt;br/&gt;9     Halt            0           0                                            &lt;br/&gt;10    Transaction     0           1                                            &lt;br/&gt;11    VerifyCookie    0           1                                            &lt;br/&gt;12    Goto            0           1                                            &lt;br/&gt;13    Noop            0           0             &lt;/pre&gt;</description><link>http://notes.bikemonkey.org/post/33395686</link><guid>http://notes.bikemonkey.org/post/33395686</guid><pubDate>Thu, 01 May 2008 02:10:00 -0400</pubDate></item><item><title>Research in Software Development</title><description>&lt;p&gt;In programming, I find that the purpose of research isn’t to find the solution, but to find the problem. If I find the solution too, that’s a happy bonus.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/32465254</link><guid>http://notes.bikemonkey.org/post/32465254</guid><pubDate>Mon, 21 Apr 2008 20:19:03 -0400</pubDate></item><item><title>Moving past CGI: HTTP correctly abstracted as asynchronous...</title><description>&lt;img src="http://29.media.tumblr.com/18xGvBjpX81kkov9iTm6Loo7_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Moving past CGI: HTTP correctly abstracted as asynchronous message delivery. Supports scaling of long-blocking HTTP requests — see &lt;a href="http://en.wikipedia.org/wiki/Comet_(programming)"&gt;Comet&lt;/a&gt; as an example.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/32342456</link><guid>http://notes.bikemonkey.org/post/32342456</guid><pubDate>Sun, 20 Apr 2008 15:39:00 -0400</pubDate></item><item><title>Explanation of the Apache MINA architecture for implementing...</title><description>&lt;img src="http://28.media.tumblr.com/18xGvBjpX81js18duER9TtNh_r1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Explanation of the Apache MINA architecture for implementing non-blocking, actor-based network I/O. Used to scale an event processor written in Java.  &lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/32341038</link><guid>http://notes.bikemonkey.org/post/32341038</guid><pubDate>Sun, 20 Apr 2008 15:16:00 -0400</pubDate></item><item><title>A 1995 Objective-C Toolkit for Building Interactive World Wide Web Applications</title><description>&lt;a href="http://www.geom.uiuc.edu/software/w3kit/"&gt;A 1995 Objective-C Toolkit for Building Interactive World Wide Web Applications&lt;/a&gt;: &lt;p&gt;W3Kit implements a component-based architecture that bears many similarities to &lt;a href="http://seaside.st"&gt;Seaside’s&lt;/a&gt; WAComponent.&lt;/p&gt;
&lt;p&gt;User interactions with the application are implemented using a message passing abstraction, and application state is actually maintained across CGI-invocations. The state is saved &lt;i&gt;client-side&lt;/i&gt;, through the use of object serialization (no, really) and hidden form fields.&lt;/p&gt;
&lt;p&gt;The tenacity of the CGI interface is amazing, and this illustrates the requirements driving implementation of stateful, persistent application servers.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/31970440</link><guid>http://notes.bikemonkey.org/post/31970440</guid><pubDate>Wed, 16 Apr 2008 15:40:00 -0400</pubDate></item><item><title>New Java HotSpot Internals Wiki</title><description>&lt;a href="http://wikis.sun.com/display/HotSpotInternals"&gt;New Java HotSpot Internals Wiki&lt;/a&gt;: &lt;p&gt;This is pretty handy — HotSpot documentation can be scarce outside of Sun. Also see &lt;a href="http://mail.openjdk.java.net/pipermail/hotspot-dev/2008-April/000305.html"&gt;John Rose’s Announcement&lt;/a&gt; on hotspot-dev.&lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/31956557</link><guid>http://notes.bikemonkey.org/post/31956557</guid><pubDate>Wed, 16 Apr 2008 12:56:00 -0400</pubDate></item><item><title>Temporary Fixes</title><description>&lt;blockquote&gt;
&lt;p&gt;An &lt;b&gt;externality&lt;/b&gt; is an impact (positive or negative) on any party not involved in a given economic transaction. &lt;/p&gt;
&lt;p&gt; &lt;a href="http://en.wikipedia.org/wiki/Externality"&gt;http://en.wikipedia.org/wiki/Externality&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I talk about “externalities” a lot; humans excel at rationalizing short-sighted decisions if they believe that the long-term costs are external to themselves. This is usually an unconcious decision, but no less costly to a community. &lt;/p&gt;
&lt;p&gt;Given a technical problem, many engineers will naturally gravitate towards the easiest fix possible. If this fix has long term cost implications, they may even call the fix “temporary”. However, if the cost of this temporary fix is &lt;i&gt;externalized&lt;/i&gt; — not levied against the party making the decision — then the temporary fix will become &lt;i&gt;permanent&lt;/i&gt;. &lt;/p&gt;
&lt;p&gt;This approach to problem solving incurs a long-term organizational cost. Whereas an initial investment of a few hours may have provided a permanent fix, the temporary fix may result in emense aggregate cost over time.&lt;/p&gt;
&lt;p&gt;If I ever find myself creating a “temporary fix”, I always try to ensure that I will be the one paying for any long-term costs. This provides additional perspective to my decision making, and encouragement to provide a better solution.  &lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/31884746</link><guid>http://notes.bikemonkey.org/post/31884746</guid><pubDate>Tue, 15 Apr 2008 21:03:00 -0400</pubDate></item><item><title>Hardware isn't Cheap</title><description>&lt;p&gt;I’ve spent the weekend researching libraries, frameworks, and languages intended to improve the web development experience. Many of these frameworks impose classic fork() concurrency model, holding the mantra that “Hardware is cheap”. &lt;/p&gt;
&lt;p&gt;When developers say “Hardware is cheap” in response to poor architectural choices, what they’re really saying is that “Our hardware costs are externalized”. These web developers are rarely responsible for the direct increases in operational costs due to terminally inefficient use of server capacity. &lt;/p&gt;
&lt;p&gt;This position presents a false dichotomy: a choice between achieving passable performance through good design, versus optimizing for developer effeciency. Effecient use of resources and ease of development are not mutually exclusive, though they may require different approaches to familiar problems.  &lt;/p&gt;</description><link>http://notes.bikemonkey.org/post/31880075</link><guid>http://notes.bikemonkey.org/post/31880075</guid><pubDate>Tue, 15 Apr 2008 19:49:00 -0400</pubDate></item></channel></rss>
