<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://purl.org/rss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><channel rdf:about="http://www.narf-lib.org/"><title>not another ruby framework</title><link>http://www.narf-lib.org/</link><dc:language>en</dc:language><dc:creator>patsplat</dc:creator><dc:date>2008-02-23T08:04:20-08:00</dc:date><admin:generatorAgent xmlns:admin="http://webns.net/mvcb/" rdf:resource="http://www.blogger.com" /><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">15</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><items><rdf:Seq><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-115818806202782229" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-115415275136924903" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-115213713696159207" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-114489266751306154" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-114090946738325755" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113972579819126212" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113670796495409175" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113666144164090329" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113664848847396316" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113493058582307769" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113190606471557515" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113175975687620902" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-113152426315797317" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-112828641878471681" /><rdf:li rdf:resource="tag:blogger.com,1999:blog-8332692.post-112818616198554332" /></rdf:Seq></items><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Narf" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /></channel><item rdf:about="tag:blogger.com,1999:blog-8332692.post-115818806202782229"><title>Rehash of scaling limits discussion</title><link>http://www.narf-lib.org/2006/09/rehash-of-scaling-limits-discussion.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-10-04T23:00:39-07:00</dc:date><description>This is a rehash of something I've written before, but I keep returning to this issue.

I wrote this in response to the ongoing post about PHP.   This is in follow up to the pro-PHP rant closing the discussion.

Harry Fuecks is on target when he points to the execution model, but I think I can get more specific about two ways that PHP's execution model has made it successful:
Cheap Hosting (a </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-115415275136924903"><title>&lt;data&gt; support for plist.rb</title><link>http://www.narf-lib.org/2006/07/support-for-plistrb.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-07-30T09:23:05-07:00</dc:date><description>I've uploaded &lt;data&amp;gt; support to plist.rb.  Special thanks goes to Mat Schaffer, who did the hard work of finding a test case. &lt;data&amp;gt; elements are returned as Tempfiles, and can be replaced with an IO or StringIO:

# reading &lt;data&amp;gt; elements
data = Plist::parse_xml("example.plist");
data['image'].read

# changing &lt;data&amp;gt; elements
bin =  File.open("example.jpg"){ |f| f.read }
data['image'] = </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-115213713696159207"><title>When to Repeat Yourself</title><link>http://www.narf-lib.org/2006/07/when-to-repeat-yourself.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-07-25T06:44:32-07:00</dc:date><description>Flying over the Atlantic, I wondered about the reliability of the flight progress indicators. It's so hard to integrate software. How did the engineers pass the location of the plane to one critical system (autopilot) and one trivial system (cabin TVs) while ensuring that a short or other problem with the cabin TVs didn't knock out the autopilot. My memory of the East Coast blackout lingers.

My </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-114489266751306154"><title>The Limits to Scaling Ruby</title><link>http://www.narf-lib.org/2006/04/limits-to-scaling-ruby.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-07-04T23:39:55-07:00</dc:date><description>When discussing whether a web technology "scales", usually the conversation alternates between two basic questions:
   Does the implementation perform acceptably?  Does it continue to perform acceptably as load is increased in orders of magnatude?   Can the implementation be maintained and enhanced? To show that a technology "scales", one must illustrate how both questions can be answered at the </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-114090946738325755"><title>Full text indexing with Swish-e</title><link>http://www.narf-lib.org/2006/02/full-text-indexing-with-swish-e.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-02-25T15:59:13-08:00</dc:date><description>Swish-e is a command-line full text indexer similar to ht://Dig.   Swish-e sports a brilliant hack.  When indexing, one can ask Swish-e to index the output of a command:
swish-e -S prog -i ./output_documents.rbThe output_documents.rb dumps out a series of html documents:
#!/usr/bin/ruby

require 'dbi'
require 'pp'

dbh = DBI.connect("dbi:Mysql:test:localhost", "user", "pass")
# get server version</description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113972579819126212"><title>meat and gravy</title><link>http://www.narf-lib.org/2006/02/meat-and-gravy.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-02-11T22:29:58-08:00</dc:date><description>In the other half of my day, I am a painter.  For about half of a year, I've been capturing snapshots of my work on some digital prints.  I've been just showing these running down a page, but I haven't been happy with it:
http://hexane.org/slider/artwork-old.htmlLast night I pulled this work together using dHTML:
http://hexane.org/slider/artwork.htmlThe programming is nothing too exciting: </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113670796495409175"><title>iPhoto2</title><link>http://www.narf-lib.org/2006/01/iphoto2.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-01-08T22:00:13-08:00</dc:date><description>Just released a library for parsing iphoto databases:


gem install plist
gem install iphoto2

iphoto = IPhoto2.new # path to AlbumData.xml is optional
iphoto.albums.each do |album|
  album.each do |image|
    puts image.path
  end
end


There's more, but I'm tired now.

Update: oylenshpeegul pointed out a bug in the comments, I've put out another gem (iphoto2-1.0.1) to the problem with the Album</description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113666144164090329"><title>plist.xml parser for Ruby</title><link>http://www.narf-lib.org/2006/01/plistxml-parser-for-ruby.html</link><dc:creator>patsplat</dc:creator><dc:date>2008-02-23T08:04:20-08:00</dc:date><description>To help with my AlbumData.xml parsing, I've thrown together a plist parser for Mac OS X plist.xml files.  Api documentation:  Plist::parse_xml( plist_xml_filename )</description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113664848847396316"><title>iPhoto 2 database format</title><link>http://www.narf-lib.org/2006/01/iphoto-2-database-format.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-01-07T08:14:38-08:00</dc:date><description>~/Pictures/iPhoto Library/

2006/01/07/fallow_keep.png.450x450.2005-12-04.jpgoriginal image
2006/01/07/Thumbs/7.jpga thumbnail
AlbumData.xmlplist file with all the goodies
Dir.databinary
iPhoto.dbbinary
iPhoto.ipspottext, perhaps for spotlight indexing?
iPhotoLock.datablank at the moment
Library.iPhotobinary
Thumb32.databinary
Thumb64.databinary
ThumbJPG.databinary


I kept the library pretty </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113493058582307769"><title>Windows Ruby FastCGI notes</title><link>http://www.narf-lib.org/2005/12/windows-ruby-fastcgi-notes.html</link><dc:creator>patsplat</dc:creator><dc:date>2005-12-18T10:29:48-08:00</dc:date><description>Just a few notes from working on supporting FastCGI on windows:
fcgi.rb is not compatible with Windows.Simple incompatiblities include trapping undefined symbols on Windows.
    $stdin is not always a socket on fastcgi on windows, so wrapping $stdin.fileno doesn't work
    libfcgi has OS dependent code to handle various windows cases
    
compiling libfcgi for windows is difficultMakefiles have a</description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113190606471557515"><title>continuations and state</title><link>http://www.narf-lib.org/2005/11/continuations-and-state.html</link><dc:creator>patsplat</dc:creator><dc:date>2005-11-13T10:26:54-08:00</dc:date><description>Ruby continuations have been described as "going back in time" in your program, but that's not really true.  You go back into the stack, but all your state remains the same.  This ruby snippet:

state = "label 1"
continuation = callcc { |c| c }
puts "state: #{state}"
state = "label 2"
continuation.call if continuation

Will produce the following output:

state: label 1
state: label 2

Note that </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113175975687620902"><title>1. NARF  2. ruby-web 3. ???? 4. Profit!!!</title><link>http://www.narf-lib.org/2005/11/1-narf-2-ruby-web-3-4-profit.html</link><dc:creator>patsplat</dc:creator><dc:date>2005-11-12T06:51:27-08:00</dc:date><description>Chad Fowler just linked to an article describing local maximums and career optimization.  I guess Point C is the same as 3. ????.

Each time I sit down and think about Ruby vs other web environments, I see so much room for improvement.  I thought the scary stuff was behind me, and then I started thinking about database support.

The next dip will be in sorting out the nitty gritty of database </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-113152426315797317"><title>DrbDatasource</title><link>http://www.narf-lib.org/2005/11/drbdatasource.html</link><dc:creator>patsplat</dc:creator><dc:date>2005-11-09T00:22:55-08:00</dc:date><description>I've been working out a contradiction in web apps:it's nice for each page to be independent, without having to worry about changes from other enviroments
it's nice to have just a few cached database connections
I can use continuations to make repeated ruby requests independent, but the problem is that I want a few objects to persist.  Implementing something that will roll back modifications to </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-112828641878471681"><title>MVC with ruby-web</title><link>http://www.narf-lib.org/2005/10/mvc-with-ruby-web.html</link><dc:creator>patsplat</dc:creator><dc:date>2005-10-02T14:07:18-07:00</dc:date><description>You can get MVC action by combining two features of ruby-web.  Before loading a page, ruby-web looks up the directory tree for an "application.rb" file.  Then, in the application.rb file, you can define a Web::filter [1].

Let's use a basic hello.world.rb as an example:

#!/usr/bin/env ruby-web
puts "Hello World"

When you visit this cgi script, you'll get "Hello World".  If you add this </description></item><item rdf:about="tag:blogger.com,1999:blog-8332692.post-112818616198554332"><title>A New Hope</title><link>http://www.narf-lib.org/2005/10/new-hope.html</link><dc:creator>patsplat</dc:creator><dc:date>2006-12-18T11:00:44-08:00</dc:date><description>This site was dedicated to the NARF web libraries.  These have been moved to http://www.ruby-web.org.  From now on, NARF will be dedicated to an attitude towards projects.  That what Ruby needs isn't big ideas, but problem solving code.

In other words, this site will be dedicated to the attitude that generated ruby-web and raainstall.  I will celebrate the can do, pragmattic, software </description></item></rdf:RDF>
