<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.1.3" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Reacties op: Een Commandline Aanpak voor JavaScript Gebaseerde Interfaces</title>
	<link>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/</link>
	<description>Nederlandse blog over software ontwikkeling</description>
	<pubDate>Mon, 08 Sep 2008 01:53:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>

	<item>
		<title>By: Remco van 't Veer</title>
		<link>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13686</link>
		<author>Remco van 't Veer</author>
		<pubDate>Wed, 21 Nov 2007 09:43:12 +0000</pubDate>
		<guid>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13686</guid>
					<description>Interessant aanpak maar ik heb toch het gevoel dat die extra command processing laag meer problemen op gaat leveren dan ze op zal lossen.  Het parsen van deze commandline is namelijk niet zo simpel als je aangeeft.  Zo is het voorbeeld dat je geeft, "Add user Rikkert Koppes", al niet triviaal.  Ik de meeste gevallen worden de voor- en achternaam in aparte kolommen opgeslagen en met een naive parser haal ze niet uit elkaar.  Okee dan passen ons taaltje aan; "Add user 'Rikkert' 'Koppes'" waar het eerste argument de voor- en het laatste argument de achternaam is.  O nee, dat werkt natuurlijk ook niet omdat je altijd uitslovers hebt met een naam als Remco van 't Veer.

Als het dan gelukt is om een mooi commandline taaltje te definieren moet deze zowel aan de in de browser als op de server geparsed kunnen worden.  In de meeste gevallen betekent dit dat er twee parsers onderhouden moeten worden, hoewel een enkele parser in JavaScript (gratis in Java6) natuurlijk ook een optie is.  Zijn er eigenlijk parser generators voor JavaScript?

Waarom zou je geen interne DSL maken met JavaScript?  Dus een JavaScript API welke je met een commandline aanbiedt.  Dit geeft je het voordeel dat geen parser hoeft te maken en JavaScript is flexibel genoeg om iets gebruikersvriendelijks te produceren.  En laten we nou eerlijk zijn "User.add('Rikkert', 'Koppes')" is toch niet zoveel slechter dan "Add user Rikkert Koppes"?  Daarbij kan je dan naast de powerusers ook de technische gebruikers faciliteren; "User.each(function(u){u.firstname=='Rikkert'&#038;&#038;u.delete()})".</description>
		<content:encoded><![CDATA[<p>Interessant aanpak maar ik heb toch het gevoel dat die extra command processing laag meer problemen op gaat leveren dan ze op zal lossen.  Het parsen van deze commandline is namelijk niet zo simpel als je aangeeft.  Zo is het voorbeeld dat je geeft, &#8220;Add user Rikkert Koppes&#8221;, al niet triviaal.  Ik de meeste gevallen worden de voor- en achternaam in aparte kolommen opgeslagen en met een naive parser haal ze niet uit elkaar.  Okee dan passen ons taaltje aan; &#8220;Add user &#8216;Rikkert&#8217; &#8216;Koppes&#8217;&#8221; waar het eerste argument de voor- en het laatste argument de achternaam is.  O nee, dat werkt natuurlijk ook niet omdat je altijd uitslovers hebt met een naam als Remco van &#8216;t Veer.</p>
<p>Als het dan gelukt is om een mooi commandline taaltje te definieren moet deze zowel aan de in de browser als op de server geparsed kunnen worden.  In de meeste gevallen betekent dit dat er twee parsers onderhouden moeten worden, hoewel een enkele parser in JavaScript (gratis in Java6) natuurlijk ook een optie is.  Zijn er eigenlijk parser generators voor JavaScript?</p>
<p>Waarom zou je geen interne DSL maken met JavaScript?  Dus een JavaScript API welke je met een commandline aanbiedt.  Dit geeft je het voordeel dat geen parser hoeft te maken en JavaScript is flexibel genoeg om iets gebruikersvriendelijks te produceren.  En laten we nou eerlijk zijn &#8220;User.add(&#8217;Rikkert&#8217;, &#8216;Koppes&#8217;)&#8221; is toch niet zoveel slechter dan &#8220;Add user Rikkert Koppes&#8221;?  Daarbij kan je dan naast de powerusers ook de technische gebruikers faciliteren; &#8220;User.each(function(u){u.firstname==&#8217;Rikkert&#8217;&#038;&#038;u.delete()})&#8221;.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Rikkert Koppes</title>
		<link>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13794</link>
		<author>Rikkert Koppes</author>
		<pubDate>Fri, 23 Nov 2007 09:40:12 +0000</pubDate>
		<guid>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13794</guid>
					<description>Je denkt wat te diep na ;)
Het belangrijkste is dat de communicatie op verschillende vlakken gelijk getrokken wordt, dat het redelijk leesbaar is en een afspiegeling is van je use cases. De exacte syntax doet niet zo terzake. Wat ik als voorbeeld heb opgeschreven is een optie, maar als dat niet toereikend is voor de applicatie, gebruik dan wat anders. Wat je bijvoorbeeld zou kunnen doen is:

Add user "Remco" "van 't" "Veer"
Add user Remco van_'t Veer
Add user {"firstname":"Remco","infix":"van 't","surname":"Veer"}

Het maakt allemaal niet zoveel uit, als het maar overal hetzelfde is. Als het allemaal te ingewikkeld wordt (uitgebreide datastructuren), moet je eerder gaan nadenken over je datamodel dan over je parser. Wat ik zelf heb is een interpreter die splitst op spaties, waarbij spaties in een parameter kunnen worden meegenomen door 'm of te vervangen door een underscore, of te omvatten met dubbele quotes. De command handler kijkt vervolgens naar het aantal meegegeven parameters en trekt daar conclusies uit.</description>
		<content:encoded><![CDATA[<p>Je denkt wat te diep na <img src='http://blog.finalist.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Het belangrijkste is dat de communicatie op verschillende vlakken gelijk getrokken wordt, dat het redelijk leesbaar is en een afspiegeling is van je use cases. De exacte syntax doet niet zo terzake. Wat ik als voorbeeld heb opgeschreven is een optie, maar als dat niet toereikend is voor de applicatie, gebruik dan wat anders. Wat je bijvoorbeeld zou kunnen doen is:</p>
<p>Add user &#8220;Remco&#8221; &#8220;van &#8216;t&#8221; &#8220;Veer&#8221;<br />
Add user Remco van_&#8217;t Veer<br />
Add user {&#8221;firstname&#8221;:&#8221;Remco&#8221;,&#8221;infix&#8221;:&#8221;van &#8216;t&#8221;,&#8221;surname&#8221;:&#8221;Veer&#8221;}</p>
<p>Het maakt allemaal niet zoveel uit, als het maar overal hetzelfde is. Als het allemaal te ingewikkeld wordt (uitgebreide datastructuren), moet je eerder gaan nadenken over je datamodel dan over je parser. Wat ik zelf heb is een interpreter die splitst op spaties, waarbij spaties in een parameter kunnen worden meegenomen door &#8216;m of te vervangen door een underscore, of te omvatten met dubbele quotes. De command handler kijkt vervolgens naar het aantal meegegeven parameters en trekt daar conclusies uit.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Peter Maas</title>
		<link>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13964</link>
		<author>Peter Maas</author>
		<pubDate>Mon, 26 Nov 2007 10:13:23 +0000</pubDate>
		<guid>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13964</guid>
					<description>Rikkert, als ik je laatste voorbeeld zie:

Add user {”firstname”:”Remco”,”infix”:”van ‘t”,”surname”:”Veer”}

Vraag ik me af waarom je niet gewoon JSON gebruikt....

DWR (http://getahead.org/dwr), een van de bekendere AJAX bibliotheken vertaald op die manier een set parameters naar een Pojo. Dan krijg je dus:

userService.addUser({”firstname”:”Remco”,”infix”:”van ‘t”,”surname”:”Veer”});

Net zo leesbaar toch, en je hoeft zelf geen parser te schrijven!</description>
		<content:encoded><![CDATA[<p>Rikkert, als ik je laatste voorbeeld zie:</p>
<p>Add user {”firstname”:”Remco”,”infix”:”van ‘t”,”surname”:”Veer”}</p>
<p>Vraag ik me af waarom je niet gewoon JSON gebruikt&#8230;.</p>
<p>DWR (http://getahead.org/dwr), een van de bekendere AJAX bibliotheken vertaald op die manier een set parameters naar een Pojo. Dan krijg je dus:</p>
<p>userService.addUser({”firstname”:”Remco”,”infix”:”van ‘t”,”surname”:”Veer”});</p>
<p>Net zo leesbaar toch, en je hoeft zelf geen parser te schrijven!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Rikkert Koppes</title>
		<link>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13967</link>
		<author>Rikkert Koppes</author>
		<pubDate>Mon, 26 Nov 2007 11:45:43 +0000</pubDate>
		<guid>http://blog.finalist.com/2007/11/12/een-commandline-aanpak-voor-javascript-1-gebaseerde-interfaces/#comment-13967</guid>
					<description>Kan ook, laatste voorbeeld was ook inderdaad bedoeld richting JSON

Punt is: maakt me niet uit, ik heb de inhoud van de doCommand method in m'n artikel niet voor niets weggelaten. Implementatie doet m.i. niet zo ter zake, het gaat me meer om de gedachte: doe de communicatie op alle niveau's hetzelfde en zorg ervoor dat het leesbaar is en met de hand eenvoudig in te typen.</description>
		<content:encoded><![CDATA[<p>Kan ook, laatste voorbeeld was ook inderdaad bedoeld richting JSON</p>
<p>Punt is: maakt me niet uit, ik heb de inhoud van de doCommand method in m&#8217;n artikel niet voor niets weggelaten. Implementatie doet m.i. niet zo ter zake, het gaat me meer om de gedachte: doe de communicatie op alle niveau&#8217;s hetzelfde en zorg ervoor dat het leesbaar is en met de hand eenvoudig in te typen.</p>
]]></content:encoded>
				</item>
</channel>
</rss>
