<?xml version='1.0' encoding='UTF-8' ?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>HREF Considered Harmful</title>
	<updated>2008-05-12T21:13:41-04:00</updated>
	<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView</id>
	<rights>Copyright 2005 Avi Bryant</rights>
	<generator uri="/CincomSmalltalkWiki/Silt" version="1.0">Silt Syndication Generator</generator>
	<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView" rel="alternate" type="text/html"></link>
	<link href="/rssBlog/avi-atom02.xml" rel="self" type="application/atom+xml"></link>
	<entry>
		<title>FTPlets?</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=FTPlets&amp;entry=3303394043</id>
		<updated>2005-09-05T17:27:23-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Back in January, I <a href="http://lists.squeakfoundation.org/pipermail/seaside/2005-January/004254.html">challenged</a> the Seaside community to implement a dynamic FTP server.  The idea isn't to get Squeak to serve out the filesystem, but to have a way to use the FTP protocol as an interface to any data you want, in the same way that dynamic web servers let you use HTTP for applications far beyond serving static HTML files. Well, <a href="http://blogs.inextenso.com/seaside/blog/learning/8b631dfb-0e50-11da-baea-000d9327ea74">Ian Prince</a> wrote a couple of weeks ago that he and Lukas Renggli had started to tackle it at Camp Smalltalk in Brussels.   Since then, Lukas has been hacking away, and he just let me know that he had support for passive clients done - which means that, among others, the Mac OS X Finder now works.  So here's a shot of a Finder window browsing the class hierarchy of my Squeak image:



<img src="http://beta4.com/~avi/ftpbrowser.jpg">

<p>

Each method is represented as a separate text file, and if you edit and save one, it'll be immediately recompiled and the image updated.  Ever wanted to use emacs to edit your Squeak code?  Here's your chance.

<p>

But browsing Smalltalk method source is just the beginning.  Any number of databases and domain models could be usefully exposed as a hierarchical file system.  Lukas says he's already working on an FTP view for SmallWiki2, turning BBEdit into a dedicated wiki editor.  What other web apps could benefit from an FTP dimension? 

<p>

Very cool stuff.
</p></div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3303394043" rel="alternate" type="text/html"></link>
		<category term="smalltalk"></category>
	</entry>
	<entry>
		<title>On Language Design</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=On_Language_Design&amp;entry=3302817287</id>
		<updated>2005-08-30T01:14:47-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Can you call it arrogance if it's true?  Either way, I can't resist repeating it. <a href="http://www.paulgraham.com">Paul Graham</a> on <a href="http://groups.google.com/group/comp.lang.lisp/msg/5fcf5f6b3467aaf6">how hard it is to design a new Lisp</a>:

<blockquote>

The advantage [the inventors of Perl, Python, and Ruby] had over us in the Lisp world was that they 

started from a lower point.  Larry Wall, for example, started out 

trying to make a better awk.  That's not hard.  Awk is missing a 

lot.  Whereas we in the Lisp world are bumping up against the 

asymptote.  Among other things, we can't avail ourselves of the 

one of the richest sources of features for new languages: taking 

stuff from Lisp.  We have to invent genuinely new things.

</blockquote>



Of course, he's missing the obvious answer: just take stuff from Smalltalk...

<p>

On a more serious note, I'm not sure why "the Lisp world" (to use Paul's sweeping generalization) spends so much time on language implementations.   The great thing about languages like Lisp, Scheme and Smalltalk - which, I would agree, are all pretty asymptotic, but on local maxima not the global one - ought to be that the language problem is solved, and you can spend all that energy inventing genuinely new libraries instead.  That way, all that genuine newness gets to interoperate, rather than compete.

<p>

Well, just a thought.
</p></div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3302817287" rel="alternate" type="text/html"></link>
		<category term="lisp"></category>
	</entry>
	<entry>
		<title>London</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=London&amp;entry=3298113323</id>
		<updated>2005-07-06T14:35:23-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>I'll be <a href="http://www.xpdeveloper.com/xpdwiki/Wiki.jsp?page=Xtc20050719">speaking</a> in London on Tuesday, July 19th at the eXtreme Tuesday Club's weekly meeting.  I'll be coming in early on the 19th and leaving fairly late on the 20th, so if someone's interested in a pint or something on one of those days, drop me a line.
</p></div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3298113323" rel="alternate" type="text/html"></link>
		<category term="general"></category>
	</entry>
	<entry>
		<title>Abstracting</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=Abstracting&amp;entry=3291042623</id>
		<updated>2005-04-15T18:30:23-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>I'll be <a href="http://prog.vub.ac.be/events/2005/BADL/WebApplicationFrameworks.html">speaking</a>  on April 25th at the Vrije Universiteit in Brussels.  Here's the abstract of my talk:

<blockquote>

On the web, abstraction is a dirty word. The dominant paradigms and  philosophies of web development -- CGI, Servlets, Server Pages, REST--  provide only a thin wrapper around the low-level details of HTTP, and  encourage you to use the rough stones of the transport protocol as the  direct building blocks of your application. Web developers by and large  reject any further abstraction in the way that assembly hackers once  rejected structured programming: it's too inflexible, uses too many resources,  and above all, it doesn't let you see what's *really* going on. As a  result, web applications suffer the same problems now that assembly language  programs did years ago; they're fragile, verbose, difficult to maintain  and ill-suited to reuse.

<p>

That's not to say that better abstractions aren't available. The Lisp  and Scheme communities have been working on them for years. Paul Graham's  ViaWeb pioneered the use of closures, not query parameters, to capture  application state in each link. Christian Quiennec showed how to use  first class continuations to invert the flow of control of HTTP and put  the server back in the driver's seat. Macro packages like htmlgen bring  HTML into the language itself, opening up much more than a template system  can provide. Meanwhile, object-oriented packages like WebObjects have  demonstrated how to decompose the web page into a tree of stateful, interacting  objects, allowing a finer granularity of development.

<p>

Seaside combines these ideas and others with the rich development environment  of Smalltalk to provide a stable, complete, and innovative web application platform. This talk will introduce Seaside, and will focus in particular  on the ways in which these abstractions can be leveraged to enable reuse:  how to use closures, continuations, and intelligent HTML generation to  destroy the intra- and inter-page coupling that is holding web development  back.

</blockquote>



</p>
</div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3291042623" rel="alternate" type="text/html"></link>
		<category term="continuations"></category>
	</entry>
	<entry>
		<title>Team Development</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=Team_Development&amp;entry=3291004466</id>
		<updated>2005-04-15T07:54:26-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>One of the projects I'm working on right now involves five developers in three countries.  Lukas Renggli recently sent me a PDF with an ancestry graph of all of the versions in our <a href="http://www.wiresong.ca/Monticello">Monticello</a> repository.  Here's an excerpt:

<p>

<img src="http://beta4.com/~avi/repository.jpg">

<p>

Thanks to John Pierce for the <a href="http://www.graphviz.org/">GraphViz</a> <a href="http://squeak.saltypickle.com/GraphViz/">library</a> for Squeak.</p>
</div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3291004466" rel="alternate" type="text/html"></link>
		<category term="versioning"></category>
	</entry>
	<entry>
		<title>In Order of Importance?</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=In_Order_of_Importance&amp;entry=3290958808</id>
		<updated>2005-04-14T19:13:28-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>The inimitable <a href="http://www.loudthinking.com/arc/000439.html">David Heinemeier Hansson</a> points out that in a recent set of slides by Sam Ruby, Rails is the fourth item from the top on a list of things <a href="http://intertwingly.net/slides/2005/rs/65.html">Worth Watching</a>.  What's item number three?  Continuations.

<p>

Sam also brings us <a href="http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons">Continuations for Curmudgeons</a>, an explanation of call/cc from the point of view of a C programmer.  I've also often found that explaining continuations in terms of the possible machine (or virtual machine) implementation often gets the point across much easier than trying to explain the semantics.  How do you capture a continuation?   You save a copy of the current execution stack.  How do you invoke it?  You blow away the current stack and replace it with a fresh copy of the one you saved.  How many times can you do this?  As many as you like.

<p>

Just don't explain it that way around Scheme folk...</p>
</div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3290958808" rel="alternate" type="text/html"></link>
		<category term="continuations"></category>
	</entry>
	<entry>
		<title>Like, Totally</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=Like,_Totally&amp;entry=3290946011</id>
		<updated>2005-04-14T15:40:11-04:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><a href="http://www.darrenhobbs.com/archives/000647.html">Darren Hobbs</a> writes:

<blockquote>

Today I saw something in Seaside that gave me one of those 'Dude, that so <i>totally rocks</i>' moments.

<p>

There's an innocent toolbar option in Seaside called 'Toggle Halos' that switches on a visual representation of the components on a page, with some icons for each one. One of the icons looks like a spanner (US: wrench), and when clicked on, shows you the code for the component in your browser, and lets you edit it!

<p>

Oh yes. Welcome to really rapid application development.

</blockquote>



Dude.  That's what I like to hear.

<p>

Apart from the occasional quick fix to a live site, I don't tend to use that feature much for development, but what I use it for all the time is for getting my bearings in a complex codebase.  When you're deep inside an application that someone else (like, say, yourself two years ago) wrote, there's nothing quite like being able to point at the screen and say "ok, now show me the code that renders <i>that</i> bit of the page".

<p>

(And in case anyone's wondering what halos look like, Ian Prince has a great reflexive screenshot <a href="http://blogs.inextenso.com/seaside/blog/learning/0cf6f89c-7824-11d8-81ca-000a27b05150">here</a>).

<p>

<i>Update: Ian just posted a more detailed look at halos <a href="http://blogs.inextenso.com/seaside/blog/learning/f54adb6e-ad97-11d9-aa63-000d9327ea74">here</a></i></p>
</div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3290946011" rel="alternate" type="text/html"></link>
		<category term="continuations"></category>
	</entry>
	<entry>
		<title>But does anyone use it?</title>
		<id>http://www.cincomsmalltalk.com/userblogs/avi/blogView?showComments=true&amp;printTitle=But_does_anyone_use_it&amp;entry=3289613282</id>
		<updated>2005-03-30T05:28:02-05:00</updated>
		<author>
			<name>Avi Bryant</name>
			<uri>http://www.cincomsmalltalk.com/userblogsavi/blogView</uri>
			<email>avi@beta4.com</email>
		</author>
		<content type="html" xml:lang="en-us"><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>I occasionally <a href="http://www.tbray.org/ongoing/When/200x/2005/03/24/Continuations">get</a> the <a href="http://mail.python.org/pipermail/python-list/2005-January/258377.html">impression</a> that people view continuation-based web frameworks as more of an academic exercise than a production tool.  Certainly, I'm no academic.  I have the common hacker's failing of being much more interested in finding out what my code will do next than writing about what it does now.  But neither is Seaside an academic framework.  A few of the commercial uses I'm aware of are:
<ul><li>Driving the workflow system for a <a href="http://www.leumi.ch/">bank</a><li>Building offers and managing admissions for an <a href="http://www.prolife.ch/">insurance broker</a><li>Managing CV information for <a href="http://www.cv.ubc.ca/">researchers</a><li>Running the boxoffice of <a href="http://www.theatre.ubc.ca/">some</a> <a href="http://www.seizieme.ca">theatres</a><li>Driving the shopping cart of an <a href="http://www.bountifulbaby.com">online merchant</a><li>Managing images for a <a href="http://www.haller-jenzer.ch/">printing shop</a></ul>

Mind you, that's not to say that Seaside doesn't get used inside the academic world.  It's being taught or used in classes at, among others:

<ul><li><a href="http://www.unibe.ch/">Universit&auml;t Bern</a> (<a href="http://www.iam.unibe.ch/~bergel/download/Seaside.pdf">slides</a> from Alexandre Bergel)
<li><a href="http://www.ensm-douai.fr/">Ecole d'Ingenieurs de Mines de Douai</a> (<a href="http://csl.ensm-douai.fr/noury/15">course materials</a> from Noury Bouraqadi)
<li><a href="http://www.unisi.ch/">Universit&agrave; della Svizzera italiana</a> (<a href="http://www.info.unicaen.fr/~rrobbes/seaslides.pdf">slides</a> from Romain Robbes)
<li><a href="http://www.sdsu.edu/">San Diego State University</a> (<a href="http://www.eli.sdsu.edu/courses/fall04/cs683/notes/seasideBasics/seasideBasics.html">course materials</a> from Roger Whitney)
<li><a href="http://www.nmhu.edu">New Mexico Highlands University</a> as part of their <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2005-March/090017.html">Software Development Apprenticeship Program</a></ul></p>
</div>]]></content>
		<link href="http://www.cincomsmalltalk.com/userblogsavi/blogView?showComments=true&amp;entry=3289613282" rel="alternate" type="text/html"></link>
		<category term="general"></category>
	</entry>
</feed>
