On Fri, Apr 17, 2009 at 10:48 AM, Chris Webb <span dir="ltr">&lt;<a href="mailto:chris.webb@elastichosts.com">chris.webb@elastichosts.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">Sam Johnston &lt;<a href="mailto:samj@samj.net">samj@samj.net</a>&gt; writes:<br>
<br></div>You&#39;ve completely missed the point again. (Perhaps understandably, since<br>
you&#39;re not in the target audience for this format.)<br>
</blockquote><div><br>Don&#39;t be so sure - I started life as a sysadmin (like many of us here I guess) :)<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 while read K V; do FOO; done<br>
</blockquote><div><br>Granted that&#39;s trivial, but it rapidly gets more interesting when you have multiple resources. As I said before though &quot;<i>perhaps it&#39;s worth it just for the (common) case of dealing with a single object</i>&quot;. I take it you&#39;re saying that it is...<br>
<br>YAML&#39;s another interesting format, and as of 1.2 it&#39;s a <a href="http://en.wikipedia.org/wiki/JSON#YAML">perfect superset of JSON</a> (that is, every JSON file is also a YAML file), but it also fails the &quot;one-liner parseability test&quot; miserably.<br>
 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">is something you can type in a shell one-liner, which is the most<br>
interesting &#39;use case&#39; (sorry, horrible jargon!) for shell people. This<br>
complex hack is not, and I note that you had to google for it rather than<br>
writing it off the top of your head, which should have been enough to make<br>
the point clear. (Incidentally, it doesn&#39;t get INI quoting right. Doing it<br>
correctly and allowing for backslash escapes is somewhat harder.)<br>
<br>
Whitespace separated KEY VALUE is better-defined than INI[1], can be parsed by<br>
shell read, by C strtok() or strsep(), and is generally pleasant to work<br>
with in languages without sophisticated string handling or data structures.<br>
Here&#39;s your sample translated to that format:<br>
<div class="im"><br>
  id decca5a5-8952-4004-9793-cdbbf05c3c63<br>
</div><div class="im">  category server<br>
  title Debian GNU/Linux 5.0 Virtual Appliance<br>
  summary Base installation of Debian GNU/Linux 5.0<br>
</div><div class="im">  content.cpu 2<br>
  content.memory 4Gb<br>
</div><div class="im">  link.disk[0].id 4696b561-a253-42b4-bd27-7aa4950e0a60<br>
  link.disk[0].dev sda<br>
  link.network[0].id 45a73b80-c957-4ae1-97c6-b70652eba1d1<br>
  link.network[0].dev eth0<br>
</div><div class="im">  mc.state RUNNING<br>
  br.meter.rate 0.10<br>
  br.meter.currency USD<br>
  br.meter.unit hours<br>
  br.meter.total 35.27<br>
  pm.monitor.cpu 75.2<br>
  pm.monitor.mem 1059374258<br>
</div><div class="im">  mc.ops.start <a href="http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/start" target="_blank">http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/start</a><br>
  mc.ops.stop <a href="http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/stop" target="_blank">http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/stop</a><br>
  mc.ops.restart <a href="http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/restart" target="_blank">http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/restart</a><br>
  mc.ops.suspend <a href="http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/suspend" target="_blank">http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/suspend</a><br>
<br>
</div><div class="im">  id 4696b561-a253-42b4-bd27-7aa4950e0a60<br>
</div><div class="im">  category storage<br>
  content.size 148251374<br>
</div><div class="im">  link.self virtual-disk.vmdk<br>
<br>
</div><div class="im">  id 45a73b80-c957-4ae1-97c6-b70652eba1d1<br>
</div><div class="im">  category network<br>
  content.vlan 4095<br>
  content.dhcp true<br>
  content.subnet 192.168.0.0<br>
  content.netmask 255.255.0.0<br>
  content.gateway 192.168.0.1<br>
</div>  vnd.com.cisco.cdp true<br>
</blockquote><div><br>Ok I&#39;ve updated the wiki because I&#39;m mostly sold on this. Things do get rather more complicated when you have to parse multiple resources though, which is my main sticking point now... I&#39;m leaning towards the time/space tradeoff of including the ID in each row somehow (in which case parsing into a hash of hashes is trivial again).<br>
 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I&#39;ll not comment on the key space or conflation of objects into one<br>
namespace with a category key in this post.</blockquote><div><br>Ok but don&#39;t forget to give us some feedback about this...<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
[1] See.<a href="http://en.wikipedia.org/wiki/Initialization_file" target="_blank">http://en.wikipedia.org/wiki/Initialization_file</a> for details on some<br></blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

of the variation seen in the wild. There&#39;s no formal spec to disambiguate.<br>
</blockquote></div><br>Yeah I agree that INI files are not perfect, and for more advanced formatting there&#39;s JSON/YAML so there&#39;s no point complicating text/plain to the point where it&#39;s uninteresting for both audiences.<br>
<br>Sam<br><br>