<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>yaml &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/yaml/</link>
	<description>Feed of posts on WordPress.com tagged "yaml"</description>
	<pubDate>Tue, 08 Dec 2009 16:46:24 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Layout Frameworks ]]></title>
<link>http://designebula.wordpress.com/2009/11/23/layout-frameworks/</link>
<pubDate>Mon, 23 Nov 2009 21:17:30 +0000</pubDate>
<dc:creator>designebula</dc:creator>
<guid>http://designebula.wordpress.com/2009/11/23/layout-frameworks/</guid>
<description><![CDATA[Eine Überblick bzw. Zusammenfassung von mir über das Thema was euch hoffentlich weiterhelfen wird. H]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong> </strong></p>
<p>Eine Überblick bzw. Zusammenfassung von mir über das Thema was euch hoffentlich weiterhelfen wird.</p>
<p>Häwdtfan <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p>&#160;</p>
<h3><span style="text-decoration:underline;">Beschreibung </span></h3>
<p>Ein Framework ist selbst noch kein fertiges Programm, sondern stellt den <span style="text-decoration:underline;">Rahmen<br />
</span>innerhalb dessen der Designer/Developer eine Anwendung erstellt zur Verfügung.</p>
<p>Ein Framework ist eine Reihe von Werkzeugen, <!--more-->Bibliotheken und Best Practices, die uns versuchen Arbeit abzunehmen.Wie? In denn man Routinenaufgaben in generische Module wiederverwendet kann.</p>
<ul>
<li>Ein Layout-Framework ist somit ein Arbeitswerkzeug zur Layouterstellung.</li>
<li>Ein Universelles Layoutkonzept mit vielfältige Variationsmöglichkeiten.</li>
<li>Eine vorgefertigtes „Gerüst“.</li>
<li>Ein Arbeitswerkzeug zur Layouterstellung.</li>
<li>Ein Framework gibt somit in der Regel die Anwendungsarchitektur vor.</li>
<li>Ein Framework nimmt uns Arbeit ab indem Standardtasks vordefiniert sind.</li>
<li>Frameworks helfen uns effizient und schnell ans Ziel zu kommen<br />
(Daher Kostenvorteile was auch an den Kunden weitergegeben wird. )</li>
<li>Konzetration auf das Wesentliche!</li>
</ul>
<h3><span style="text-decoration:underline;">Ziel</span></h3>
<p>Das Ziel ist es, dass der Designer auf Aufgaben, die einzigartig für ein bestimmtes Projekt sich konzentrieren kann, anstatt das Rad jedes Mal neu zu erfinden in denn man Werkzeuge noch mal verwendet.</p>
<blockquote><p><span style="color:#339966;"><strong>Produktivitätssteigerung!</strong></span></p></blockquote>
<h3><span style="text-decoration:underline;">Methoden, Arten von Frameworks</span></h3>
<ul>
<li>Grid Frameworks (Anwendungsorientierte Baukästen, Grid- Basiertes Layout)
<ul>
<li>Layouterstellung mit HTML</li>
<li>Vordefinierte Gridklassen</li>
</ul>
</li>
</ul>
<ul>
<li>CSS Frameworks (Entwicklerorientierte Baukästen, Spaltenbasiertes Layout)
<ul>
<li>Vordefinierter Markup</li>
<li>Layouterstellung mit CSS</li>
</ul>
</li>
</ul>
<p><span style="text-decoration:underline;"> </span></p>
<h3><span style="text-decoration:underline;">Beispiele dafür? (Werden nicht alle benannt!)</span></h3>
<p>Grid Frameworks</p>
<ul>
<li>Blueprint CSS</li>
<li>960.gs</li>
<li>YUI</li>
</ul>
<p>CSS Frameworks</p>
<ul>
<li>Yaml</li>
<li>A CSS Framework</li>
</ul>
<h3><span style="text-decoration:underline;">Unterschiede</span></h3>
<p>An der Stelle muss ich sagen dass es wirklich besser ist wenn ihr euch die Frameworks runterladet und die selber testet z.B. <a href="http://www.builder.yaml.de">Yaml Builder</a> und <a href="http://960.gs">960.gs</a>. Ich persönlich finde diesen Weg als den besten weil so könnt ihr selber den Unterschied sehen und auch merken in denn man es ausprobiert  <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Grid Frameworks</p>
<ul>
<li>Vordefinierte Gridklassen</li>
<li>Layouterstellung mit HTML</li>
</ul>
<p>CSS Frameworks</p>
<ul>
<li>Vordefinierte Markup</li>
<li>Layouterstellung mit CSS</li>
</ul>
<p><span style="text-decoration:underline;"> </span></p>
<blockquote><p>Beim <strong>Frameworks</strong> handelt es sich nun um Stylesheets mit einer Auswahl fertiger Klassen für diverse Spaltenraster im eigentlichen Inhaltsbereich einer Webseite.</p></blockquote>
<h3><span style="text-decoration:underline;">Inhalte</span></h3>
<p>Mögliche Inhalte bzw. Stylesheets  eines Frameworks:</p>
<ul>
<li>Reset.css</li>
<li>Base.css</li>
<li>Typography.css</li>
<li>Layout.css</li>
<li>Browser.css</li>
<li>Table.css</li>
<li>Form.css</li>
<li>Print.css</li>
</ul>
<p>„ Yaml liefert zusätzlich die vom Benutzer erstellte Struktur mit. (Html Code)“</p>
<h3><span style="text-decoration:underline;">Vorteile und Nachteile</span></h3>
<p><strong><span style="text-decoration:underline;"> </span></strong></p>
<p>Vorteile</p>
<ul>
<li>Tabellenfrei (CSS)</li>
<li>Schnelle Entwicklung, Schnelle Ergebnisse</li>
<li>Cross-Browser Kompatibilität (IE Bugfixes, Bugprävetion)</li>
<li>Einheitliche Code Basis</li>
<li>Normalisierung der Code</li>
<li>Einhaltung von Standards</li>
<li>Vermeiden von alltäglichen Fehlern</li>
<li>Steigerung der Produktivität</li>
<li>Verbesserter Workflow bei Team-Arbeit</li>
<li>Flexible und Pflegeleicht</li>
<li>Modulare Aufbau</li>
<li>Wohl geformten Markup</li>
</ul>
<p>Nachteile</p>
<ul>
<li>Einarbeitungszeit für das Framework</li>
<li>Frameworks erzeugen mehr Code als notwendig (Overhead)</li>
<li>Eigenschränkte Kreativität durch Vorgaben (Individuelle Layouts brauchen individuelle Lösungen);-)</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Symfony - Fixtures con las Ciudades y Comunas de Chile]]></title>
<link>http://emartini.wordpress.com/2009/11/22/symfony-fixtures-con-las-ciudades-y-comunas-de-chile/</link>
<pubDate>Sun, 22 Nov 2009 02:12:33 +0000</pubDate>
<dc:creator>esteban.martini</dc:creator>
<guid>http://emartini.wordpress.com/2009/11/22/symfony-fixtures-con-las-ciudades-y-comunas-de-chile/</guid>
<description><![CDATA[Durante el desarrollo de nuestro proyecto para la Feria de Software tuvimos que tener algunos datos ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">Durante el desarrollo de nuestro proyecto para la <a title="Feria de Software UTFSM" href="http://www.feriadesoftware.cl/" target="_blank">Feria de Software</a> tuvimos que tener algunos datos de prueba para las <strong>comunas y ciudades de Chile</strong>, como no era fundamental tener las regiones simplificamos el modelo propuesto en <a title="snipplr.com - Regiones y Comunas de Chile" href="http://snipplr.com/view/525/sql--datos--regiones-y-comunas-de-chile/" target="_blank">este sitio</a> al siguiente (escrito en <a title="The Official YAML Web site" href="http://www.yaml.org/" target="_blank">notación YAML</a>)</p>
<p style="text-align:justify;">Para las <span style="text-decoration:underline;">ciudades</span>:</p>
<pre class="brush: php;">
  ciudad:
   id: ~
   nombre:      { type: varchar(100) }
</pre>
<p>Para las <span style="text-decoration:underline;">comunas</span></p>
<pre class="brush: php;">
  comuna:
   id: ~
   nombre:      { type: varchar(100) }
   ciudad_id:   { type: integer, foreignTable: ciudad, foreignReference: id, onDelete: restrict }
</pre>
<p style="text-align:justify;">Los cuales, como es de presumir, fueron agregados a nuestro <strong>esquema </strong>(./config/schema.yml)<strong>. </strong>Hasta aquí nada muy interesante, pero mientas discutíamos la forma más compleja y por ende mejor ( xD ) de cargar los datos,  <strong>Camila Maldonado</strong> se tomó la &#8216;molestia&#8217; de pasar la información directamente a un par de archivos yaml para ser cargados como <em>fixtures</em> (./data/fixtures) en nuestro proyecto. Les dejo a continuación los archivos:</p>
<p><span style="text-decoration:underline;"><span style="text-decoration:none;">Descarga</span></span>: <strong><a href="http://emartini.caccomex.cl/fixtures-chile_ciudades_comunas.zip">Fixtures symfony &#8211; Ciudades y Comunas de Chile</a> </strong>(zip &#8211; 5,5 KB)</p>
<p style="text-align:justify;">Es muy posible que falten varias comunas, pero como comenté sólo necesitábamos datos de prueba y éstos se ajustaron bastante bien: <strong>52 ciudades</strong> y <strong>345 comunas</strong> no está mal <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[YAML framework css]]></title>
<link>http://jariviablog.wordpress.com/2009/09/25/yaml-framework-css/</link>
<pubDate>Fri, 25 Sep 2009 23:54:54 +0000</pubDate>
<dc:creator>jarivia</dc:creator>
<guid>http://jariviablog.wordpress.com/2009/09/25/yaml-framework-css/</guid>
<description><![CDATA[YAML (Yet Another Multicolumn Layout) es un framework para CSS con el que se puede realizar hojas de]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.yaml.de/en/home.html" target="_blank">YAML</a> (Yet Another Multicolumn Layout) es un<strong> framework para CSS</strong> con el que se puede <strong>realizar hojas de estilo de una manera ágil y estándar para los múltiples navegadores.</strong> YAML combina una serie de características que facilitan mucho el trabajo de la maquetación con CSS.</p>
<p>Este framework es un esquema definido de plantillas que incluye una cabecera, un pie de página y un área para una o más columnas. Es compatible con la mayor parte de los navegadores y posee esquemas de diseño tanto fijos como fluídos. Es importante tener en cuenta que <strong>YAML no es una plantilla prefabricada</strong>.</p>
<p>Además, nos ofrece una herramienta online, llamada <a href="http://builder.yaml.de/">YAML Builder</a>, que nos permite crear nuestras propias plantillas de forma rápida y sencilla. Tan sólo deberemos indicar el tipo de diseño, los tamaños, podremos añadirle elementos HTML y por último recuperar el código fuente.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Country codes in YAML format]]></title>
<link>http://jonocode.wordpress.com/2009/09/20/country-codes-in-yaml-format/</link>
<pubDate>Sun, 20 Sep 2009 19:00:05 +0000</pubDate>
<dc:creator>jjmontgo</dc:creator>
<guid>http://jonocode.wordpress.com/2009/09/20/country-codes-in-yaml-format/</guid>
<description><![CDATA[Here are all the country codes in YAML format for your downloading pleasure! You may place them in y]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Here are all the country codes in YAML format for your downloading pleasure!  You may place them in your app.yml (for symfony users) and call the list with sfConfig::get(&#8216;app_countries&#8217;).</p>
<pre>
all:
  .lists:
    countries:
      CA:	Canada
      US:	United States of America
      AD: Andorra
      AE:	United Arab Emirates
      AF:	Afghanistan
      AG:	Antigua &#38; Barbuda
      AI:	Anguilla
      AL:	Albania
      AM:	Armenia
      AN:	Netherlands Antilles
      AO:	Angola
      AQ:	Antarctica
      AR:	Argentina
      AS:	American Samoa
      AT:	Austria
      AU:	Australia
      AW:	Aruba
      AZ:	Azerbaijan
      BA:	Bosnia and Herzegovina
      BB:	Barbados
      BD:	Bangladesh
      BE:	Belgium
      BF:	Burkina Faso
      BG:	Bulgaria
      BH:	Bahrain
      BI:	Burundi
      BJ:	Benin
      BM:	Bermuda
      BN:	Brunei Darussalam
      BO:	Bolivia
      BR:	Brazil
      BS:	Bahama
      BT:	Bhutan
      BU:	Burma (no longer exists)
      BV:	Bouvet Island
      BW:	Botswana
      BY:	Belarus
      BZ:	Belize
      CC:	Cocos (Keeling) Islands
      CF:	Central African Republic
      CG:	Congo
      CH:	Switzerland
      CI:	Côte D'ivoire (Ivory Coast)
      CK:	Cook Iislands
      CL:	Chile
      CM:	Cameroon
      CN:	China
      CO:	Colombia
      CR:	Costa Rica
      CS:	Czechoslovakia (no longer exists)
      CU:	Cuba
      CV:	Cape Verde
      CX:	Christmas Island
      CY:	Cyprus
      CZ:	Czech Republic
      DD:	German Democratic Republic (no longer exists)
      DE:	Germany
      DJ:	Djibouti
      DK:	Denmark
      DM:	Dominica
      DO:	Dominican Republic
      DZ:	Algeria
      EC:	Ecuador
      EE:	Estonia
      EG:	Egypt
      EH:	Western Sahara
      ER:	Eritrea
      ES:	Spain
      ET:	Ethiopia
      FI:	Finland
      FJ:	Fiji
      FK:	Falkland Islands (Malvinas)
      FM:	Micronesia
      FO:	Faroe Islands
      FR:	France
      FX:	France, Metropolitan
      GA:	Gabon
      GB:	United Kingdom (Great Britain)
      GD:	Grenada
      GE:	Georgia
      GF:	French Guiana
      GH:	Ghana
      GI:	Gibraltar
      GL:	Greenland
      GM:	Gambia
      GN:	Guinea
      GP:	Guadeloupe
      GQ:	Equatorial Guinea
      GR:	Greece
      GS:	South Georgia and the South Sandwich Islands
      GT:	Guatemala
      GU:	Guam
      GW:	Guinea-Bissau
      GY:	Guyana
      HK:	Hong Kong
      HM:	Heard &#38; McDonald Islands
      HN:	Honduras
      HR:	Croatia
      HT:	Haiti
      HU:	Hungary
      ID:	Indonesia
      IE:	Ireland
      IL:	Israel
      IN:	India
      IO:	British Indian Ocean Territory
      IQ:	Iraq
      IR:	Islamic Republic of Iran
      IS:	Iceland
      IT:	Italy
      JM:	Jamaica
      JO:	Jordan
      JP:	Japan
      KE:	Kenya
      KG:	Kyrgyzstan
      KH:	Cambodia
      KI:	Kiribati
      KM:	Comoros
      KN:	St. Kitts and Nevis
      KP:	Korea, Democratic People's Republic of
      KR:	Korea, Republic of
      KW:	Kuwait
      KY:	Cayman Islands
      KZ:	Kazakhstan
      LA:	Lao People's Democratic Republic
      LB:	Lebanon
      LC:	Saint Lucia
      LI:	Liechtenstein
      LK:	Sri Lanka
      LR:	Liberia
      LS:	Lesotho
      LT:	Lithuania
      LU:	Luxembourg
      LV:	Latvia
      LY:	Libyan Arab Jamahiriya
      MA:	Morocco
      MC:	Monaco
      MD:	Moldova, Republic of
      MG:	Madagascar
      MH:	Marshall Islands
      ML:	Mali
      MN:	Mongolia
      MM:	Myanmar
      MO:	Macau
      MP:	Northern Mariana Islands
      MQ:	Martinique
      MR:	Mauritania
      MS:	Monserrat
      MT:	Malta
      MU:	Mauritius
      MV:	Maldives
      MW:	Malawi
      MX:	Mexico
      MY:	Malaysia
      MZ:	Mozambique
      NA:	Namibia
      NC:	New Caledonia
      NE:	Niger
      NF:	Norfolk Island
      NG:	Nigeria
      NI:	Nicaragua
      NL:	Netherlands
      "NO":	Norway
      NP:	Nepal
      NR:	Nauru
      NT:	Neutral Zone (no longer exists)
      NU:	Niue
      NZ:	New Zealand
      OM:	Oman
      PA:	Panama
      PE:	Peru
      PF:	French Polynesia
      PG:	Papua New Guinea
      PH:	Philippines
      PK:	Pakistan
      PL:	Poland
      PM:	St. Pierre &#38; Miquelon
      PN:	Pitcairn
      PR:	Puerto Rico
      PT:	Portugal
      PW:	Palau
      PY:	Paraguay
      QA:	Qatar
      RE:	Réunion
      RO:	Romania
      RU:	Russian Federation
      RW:	Rwanda
      SA:	Saudi Arabia
      SB:	Solomon Islands
      SC:	Seychelles
      SD:	Sudan
      SE:	Sweden
      SG:	Singapore
      SH:	St. Helena
      SI:	Slovenia
      SJ:	Svalbard &#38; Jan Mayen Islands
      SK:	Slovakia
      SL:	Sierra Leone
      SM:	San Marino
      SN:	Senegal
      SO:	Somalia
      SR:	Suriname
      ST:	Sao Tome &#38; Principe
      SU:	Union of Soviet Socialist Republics (no longer exists)
      SV:	El Salvador
      SY:	Syrian Arab Republic
      SZ:	Swaziland
      TC:	Turks &#38; Caicos Islands
      TD:	Chad
      TF:	French Southern Territories
      TG:	Togo
      TH:	Thailand
      TJ:	Tajikistan
      TK:	Tokelau
      TM:	Turkmenistan
      TN:	Tunisia
      TO:	Tonga
      TP:	East Timor
      TR:	Turkey
      TT:	Trinidad &#38; Tobago
      TV:	Tuvalu
      TW:	Taiwan, Province of China
      TZ:	Tanzania, United Republic of
      UA:	Ukraine
      UG:	Uganda
      UM:	United States Minor Outlying Islands
      UY:	Uruguay
      UZ:	Uzbekistan
      VA:	Vatican City State (Holy See)
      VC:	St. Vincent &#38; the Grenadines
      VE:	Venezuela
      VG:	British Virgin Islands
      VI:	United States Virgin Islands
      VN:	Viet Nam
      VU:	Vanuatu
      WF:	Wallis &#38; Futuna Islands
      WS:	Samoa
      YD:	Democratic Yemen (no longer exists)
      YE:	Yemen
      YT:	Mayotte
      YU:	Yugoslavia
      ZA:	South Africa
      ZM:	Zambia
      ZR:	Zaire
      ZW:	Zimbabwe
      ZZ:	Unknown or unspecified country
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[hqt homepage]]></title>
<link>http://ttwhy.wordpress.com/2009/08/25/hqt-homepage/</link>
<pubDate>Tue, 25 Aug 2009 13:42:17 +0000</pubDate>
<dc:creator>ttwhy</dc:creator>
<guid>http://ttwhy.wordpress.com/2009/08/25/hqt-homepage/</guid>
<description><![CDATA[and a quick note, we released a new page about the distribution of supplies. its basicly just a comp]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>and a quick note, we released a new page about the distribution of supplies. its basicly just a company profile.<br />
Its build with CakePHP and YAML CSS framework. Highlight is the Spamprotect by Capcha.</p>
<p><a href="http://hqtrading.de">hqtrading.de</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[dotnetpro 08/2009 &ndash; Nordische Grammatik: Dom&auml;nenspezifische Sprachen mit Microsoft Oslo M]]></title>
<link>http://startbigthinksmall.wordpress.com/2009/07/28/dotnetpro-082009-nordische-grammatik-domnenspezifische-sprachen-mit-microsoft-oslo-m/</link>
<pubDate>Tue, 28 Jul 2009 07:22:14 +0000</pubDate>
<dc:creator>Lars Corneliussen</dc:creator>
<guid>http://startbigthinksmall.wordpress.com/2009/07/28/dotnetpro-082009-nordische-grammatik-domnenspezifische-sprachen-mit-microsoft-oslo-m/</guid>
<description><![CDATA[Soeben ist der dritte Artikel der DSL-Serie von Markus und mir bei der dotnetpro erschienen. Abstrac]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Soeben ist der dritte Artikel der DSL-Serie von <a href="http://voelter.de">Markus</a> und mir bei der <a href="http://www.dotnetpro.de">dotnetpro</a> erschienen.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2009/07/bild11.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Bild 11" border="0" alt="Bild 11" src="http://startbigthinksmall.files.wordpress.com/2009/07/bild11_thumb.png?w=555&#038;h=97" width="555" height="97" /></a> </p>
<p><strong>Abstract:</strong> Mehrspaltige Layouts für Webseiten sind komplex und stellen hohe Ansprüche an den Webprogrammierer. Warum nicht eine Sprache entwickeln, die solche Layouts vereinfacht? Mit Oslo M und dem ASP.NET MVC Framework lässt sich so eine Sprache realisieren. </p>
<h2>Inhalt</h2>
<p>Hauptsächlich dreht sich der Artikel um <a href="http://msdn.microsoft.com/en-us/library/dd857654%28VS.85%29.aspx">MGrammar</a>, den Teil der Sprache Microsoft M (Teil von <a href="http://msdn.microsoft.com/en-us/oslo/default.aspx">Microsoft Oslo</a>) mit dem andere Sprachen definiert werden können. Zuerst wird die MGrammar (Arbeitstitel) anhand einer simplen “Hello, World”-Sprache erklärt.</p>
<p>Danach erstellen wir eine DSL zur Beschreibung mehrspaltiger Layouts und bringen diese mittels <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> und <a href="http://www.yaml.de">YAML</a> ans laufen.</p>
<p>Das Beispiel im Artikel basiert auf der Oslo January CTP, der Quelltext für das Oslo May CTP kann aber bei mir angefragt werden.</p>
<h2>Beispiel</h2>
<p>Typisches dreispaltiges Portal-Layout.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2009/07/konkreteslayoutdreispalter.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Konkretes Layout - dreispalter" border="0" alt="Konkretes Layout - dreispalter" src="http://startbigthinksmall.files.wordpress.com/2009/07/konkreteslayoutdreispalter_thumb.png?w=418&#038;h=474" width="418" height="474" /></a> </p>
<p>* Die Berechnung der Restbreite stimmt hier nicht. Richtig wäre:</p>
<p><em>Rest = (75%* Gesamtbreite) –400px</em></p>
<p>Dies mag aber von CSS-Framework zu CSS-Framework variieren.</p>
<h2>DSL zur Beschreibung</h2>
<p>Die Syntaxhervorhebung ergibt sich aus der Grammatik und ein wenig Konfiguration.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2009/07/intellipadsyntaxhervorhebung.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="intellipad - Syntaxhervorhebung" border="0" alt="intellipad - Syntaxhervorhebung" src="http://startbigthinksmall.files.wordpress.com/2009/07/intellipadsyntaxhervorhebung_thumb.png?w=233&#038;h=195" width="233" height="195" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[YAML is a recursive acronym for "YAML Ain't Markup Language"]]></title>
<link>http://poroshkhan.wordpress.com/2009/07/24/yaml-is-a-recursive-acronym-for-yaml-aint-markup-language/</link>
<pubDate>Fri, 24 Jul 2009 21:27:20 +0000</pubDate>
<dc:creator>Nur-E-Alam Khan</dc:creator>
<guid>http://poroshkhan.wordpress.com/2009/07/24/yaml-is-a-recursive-acronym-for-yaml-aint-markup-language/</guid>
<description><![CDATA[According to Wikipedia, YAML (pronounced /ˈjæməl/, rhymes with camel) is a human-readable data seria]]></description>
<content:encoded><![CDATA[According to Wikipedia, YAML (pronounced /ˈjæməl/, rhymes with camel) is a human-readable data seria]]></content:encoded>
</item>
<item>
<title><![CDATA[YAML - Generador de layouts basados en CSS]]></title>
<link>http://hermosodia.wordpress.com/2009/07/22/yaml-generador-de-layouts-basados-en-css/</link>
<pubDate>Wed, 22 Jul 2009 07:33:34 +0000</pubDate>
<dc:creator>LeChuckNorris</dc:creator>
<guid>http://hermosodia.wordpress.com/2009/07/22/yaml-generador-de-layouts-basados-en-css/</guid>
<description><![CDATA[En algún post anterior hacía referencia a sitios web con layouts css para hacer C&amp;P. Vía fresher]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>En algún <a href="http://hermosodia.wordpress.com/2008/09/01/layouts-css/">post anterior</a> hacía referencia a sitios web con layouts css para hacer C&#38;P. Vía <a href="http://fresherswisdom.com/free-tutorials-collection/best-css-tools-collection.html">fresherswisdom.com</a> he conocido <a href="http://builder.yaml.de/#">YAML</a>, una interesante aplicación online que permite, de modo visual, la creación de layouts &#8220;limpitos&#8221; de modo personalizado.</p>
<p><img src="http://hermosodia.wordpress.com/files/2009/07/yaml.png" alt="yaml" title="yaml" width="400" height="211" class="aligncenter size-full wp-image-1570" /></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Symfony - Configurando Eclipse como IDE]]></title>
<link>http://emartini.wordpress.com/2009/07/15/symfony-configurando-eclipse-como-ide/</link>
<pubDate>Wed, 15 Jul 2009 02:08:32 +0000</pubDate>
<dc:creator>esteban.martini</dc:creator>
<guid>http://emartini.wordpress.com/2009/07/15/symfony-configurando-eclipse-como-ide/</guid>
<description><![CDATA[Es primera vez que meteré manos en el framework MVC para PHP de nombre symfony, no entraré en detall]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;"><img class="alignleft" style="border:0 none;padding:4px 5pt 0 0;" title="icon_symfony" src="http://emartini.wordpress.com/files/2009/07/icon_symfony.jpg" alt="icon_symfony" width="80" height="80" />Es primera vez que meteré manos en el <em>framework</em> MVC para PHP de nombre <strong><a title="Symfony - Project" href="http://www.symfony-project.org/" target="_blank">symfony</a></strong><em><strong>, </strong><span style="font-style:normal;">no entraré en detalles de sus <a href="http://www.librosweb.es/symfony_1_1/capitulo1/symfony_en_pocas_palabras.html">bondades</a>, sólo diré que me aburrí de re-inventar la rueda cada vez y el proyecto en el que trabajaré los próximos meses merece el uso de este </span>framework.</em></p>
<p style="text-align:justify;">En esta primera entrada <span style="text-decoration:line-through;">detallaré</span> propondré una configuración  para el IDE <strong>Eclipse</strong> que  permite alivianar un <strong>poco</strong> la  labor de programar, añadiendo <strong>soporte básico para las operaciones (de consola) de symfony</strong> y un <strong>editor para archivos yml</strong>.</p>
<p style="text-align:justify;"><em><span style="font-style:normal;"><!--more--></span></em></p>
<h1>Instalación</h1>
<p style="text-align:justify;"><em><span style="font-style:normal;">Conocidas las <a title="Conceptos Básicos - Documentación Symfony" href="http://www.librosweb.es/symfony_1_1/capitulo1/conceptos_basicos.html" target="_self">nociones básicas</a> con las que nos enfrentaremos a lo largo del proceso de desarrollo, comenzaré por configurar nuestro IDE, la idea es no tener que salir <span style="text-decoration:line-through;">tanto</span> del IDE para realizar alguna tarea, para cumplir con esto se requiere un editor de archivos </span><span style="font-style:normal;">YAML</span><span style="font-style:normal;"> y algún complemento que nos permita ejecutar los comandos de consola que usa symfony. Con esto en mente el IDE que utilizaremos será <strong><em>Eclipse</em></strong>. Por lo que debemos descargar Eclipse y sus plugins de </span>PHP Development Tools<span style="font-style:normal;"> (PDT) en su primera versión (la versión 2 no está soportada por el plugin de symfony a utilizar).</span></em></p>
<p style="text-align:justify;"><em><span style="font-style:normal;">Nota importante, me han comentado que el plugin no funciona en la versión 3.5, por ello usaremos la 3.4<br />
</span></em></p>
<blockquote>
<p style="text-align:justify;">Descarga Eclipse Classic: <a title="http://www.eclipse.org/downloads/" href="http://" target="_blank">http://www.eclipse.org/downloads/</a></p>
<p style="text-align:justify;">Descarga PDT v1.05: <a href="http://www.eclipse.org/downloads/download.php?file=/tools/pdt/downloads/drops/1.0.5/R200812031520/pdt-runtime-1.0.5.zip">Runtime</a> o sigue leyendo para ver cómo instalarlo utilizando el repositorio.</p>
</blockquote>
<p style="text-align:justify;">Para instalar PDT sólo basta copiar el contenido del archivo descargado en el directorio de Eclipse, respetando claro el árbol de directorios. También puede ser instalado vía repo</p>
<p style="text-align:justify;">Seguiremos complementando Eclipse con algunos plugins, para ello abrimos Eclipse y nos dirigimos a <strong>Help/Install New Software </strong>(Figura 1). Ahora añadiremos los siguientes repositorios haciendo click en el enlace que dice <strong><span style="color:#3366ff;">&#8216;Available Software Sites&#8217; <span style="color:#000000;"><span style="font-weight:normal;">y luego click en el botón Add.</span></span></span></strong><strong><span style="color:#3366ff;"><span style="color:#000000;"><span style="font-weight:normal;"> </span></span></span></strong></p>
<h2 style="text-align:justify;"><strong><span style="color:#3366ff;"><span style="color:#000000;"><span style="font-weight:normal;">Repositorios</span></span></span></strong></h2>
<p style="text-align:justify;"><strong><span style="color:#3366ff;"><span style="color:#000000;"><span style="font-weight:normal;">Estos son los &#8220;indespensables&#8221;<br />
</span></span></span></strong></p>
<div id="attachment_212" class="wp-caption alignright" style="width: 222px"><img class="size-full wp-image-212  " title="Imagen 2" src="http://emartini.wordpress.com/files/2009/07/imagen-2.png" alt="Imagen 2" width="212" height="247" /><p class="wp-caption-text">Figura 1: Instalar Nuevo Software en Eclipse</p></div>
<ul>
<li><strong><a href="http://wiki.eclipse.org/PDT" target="_blank">Plugins de PDT</a>: </strong>provee herramientas para desarrollar aplicaciones en PHP. <span style="text-decoration:underline;">Repositorio</span>: <span style="color:#008000;"><strong>http://download.eclipse.org/tools/pdt/updates/</strong></span></li>
<li><strong><a href="http://sfdt.borox.ch/" target="_blank">Plugin de symfony</a></strong>: (sin nombre aparentemente)<em><span style="font-style:normal;"> permitirá crear proyectos, aplicaciones y módulos a través de un </span><span style="font-style:normal;">wizard</span><span style="font-style:normal;">, gestionar instalaciones de sf para el proyecto en uso, ejecutar comandos sin la necesidad de abrir otra ventana, colorea la sintaxis de archivos yml (pero no tabula correctamente)  y es capaz de convertir archivos de Clay en archivos YAML. <span style="text-decoration:underline;">Repositorio</span>: </span></em><strong><span style="color:#008000;">http://sfdt.borox.ch/updates</span></strong></li>
</ul>
<p>Los siguientes son opcionales, pero pueden ayudar en la labor</p>
<ul>
<li><strong><a href="http://www.azzurri.jp/en/clay/" target="_blank">Clay Database Modeling &#8211; Azzuri</a></strong>: Sencillo editor gráfico para crear tablas y sus relaciones. <span style="text-decoration:underline;">Repositorio</span>: <strong><span style="color:#008000;">http://www.azzurri.co.jp/eclipse/plugins</span></strong></li>
<li><strong><a href="http://code.google.com/p/yedit/" target="_blank">yEdit YAML Editor</a></strong>: <span style="color:#ff9900;">[Recomendado!]</span> Editor muy sencillo que básicamente lo único que hace es interpretar las tabulaciones como &#8220;2 espacios&#8221; y colorea un poco la sintaxis, justo lo que nececitamos <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . <span style="text-decoration:underline;">Repositorio</span>: <strong><span style="color:#008000;">http://dadacoalition.org/yedit/</span></strong></li>
<li><strong><a href="http://www.wickedshell.net/" target="_blank">Wicked Shell</a>: </strong>Permite tener acceso a terminal o consola de tu sistema operativo a través de una cómoda pestaña. <span style="text-decoration:underline;">Repositorio</span>:<strong> </strong><strong><span style="color:#008000;">http://www.wickedshell.net/updatesite</span></strong></li>
</ul>
<p style="text-align:justify;">Una vez añadidos estos sitios o repositorios hay que instalar los plugins (que quieras), lo que es bastante sencillo, sólo selecciona el repositorio (<em>work with</em>) y luego se elige lo que necesites instalar, es preferente instalar las últimas versiones de cada plugin.</p>
<div id="attachment_227" class="wp-caption alignnone" style="width: 686px"><a href="http://emartini.wordpress.com/files/2009/07/imagen-9.png"><img class="size-full wp-image-227" title="Imagen 9" src="http://emartini.wordpress.com/files/2009/07/imagen-9.png" alt="Figura 2: Instalando Nuevo Software" width="676" height="527" /></a><p class="wp-caption-text">Figura 2: Instalando Nuevo Software</p></div>
<p>Una vez terminado el proceso de instalación y reiniciado Eclipse tendremos todo lo necesario para desarrollar nuestro proyecto, más cómodamente en Eclipse.</p>
<h1>Pruebas</h1>
<p>Para ver si todo está funcionando correctamente creemos un nuevo proyecto de symfony.</p>
<p style="text-align:center;"><strong>File -&#62;New -&#62; Project -&#62; Symfony -&#62; SfProject</strong></p>
<div id="attachment_229" class="wp-caption aligncenter" style="width: 483px"><a href="http://emartini.wordpress.com/files/2009/07/imagen-10.png"><img class="size-full wp-image-229" title="Imagen 10" src="http://emartini.wordpress.com/files/2009/07/imagen-10.png" alt="Imagen 10" width="473" height="476" /></a><p class="wp-caption-text">Figura 3: Creando un proyecto symfony</p></div>
<p style="text-align:justify;">
<p style="text-align:justify;">En el siguiente paso del wizard nos pedirá un directorio donde haya una instalación de symfony para ser usado como librería. Puedes usar tu instalación de PEAR o un sandbox no hay diferencia. El resto son parámetros propios de cualquier proyecto como nombre y ubicación.</p>
<div id="attachment_232" class="wp-caption aligncenter" style="width: 481px"><a href="http://emartini.wordpress.com/files/2009/07/sf-4.png"><img class="size-full wp-image-232" title="sf-4" src="http://emartini.wordpress.com/files/2009/07/sf-4.png" alt="sf-4" width="471" height="381" /></a><p class="wp-caption-text">Figura 4: Configurando el nuevo proyecto</p></div>
<p style="text-align:justify;">
<p style="text-align:justify;">Con esto se crea automáticamente un nuevo proyecto, el resultado es el mismo que utilizando el comando habitual de symfony:</p>
<blockquote>
<pre>symfony generate:project nombre-proyecto</pre>
</blockquote>
<p>Con esto ya estamos listos con la configuración, si quieres ver las características que instalamos continua leyendo,</p>
<h1>Revisando Características</h1>
<p>Revisemos brevemente nuevas funcionalidades que hemos instalado.</p>
<ol>
<h2>Habilidad de crear aplicaciones y módulos:</h2>
<div style="text-align:justify;">Desde ahora se pueden crear módulos y aplicaciones de manera sencilla. Esto se hace simplemente añadiendo un nuevo elemento al proyecto.</div>
</ol>
<p><span style="font-family:Monaco, 'Times New Roman', 'Bitstream Charter', Times, fantasy;color:#000080;font-size:small;"><span style="line-height:normal;"><br />
</span></span></p>
<ol>
<div style="text-align:justify;">
<div id="attachment_238" class="wp-caption aligncenter" style="width: 542px"><a href="http://emartini.wordpress.com/files/2009/07/imagen-14.png"><img class="size-full wp-image-238" title="Imagen 14" src="http://emartini.wordpress.com/files/2009/07/imagen-14.png" alt="sdf" width="532" height="335" /></a><p class="wp-caption-text">Figura 5: Añadiendo componentes al proyecto</p></div>
<p>Dentro del menú nos encontraremos nuevamente con la <strong>sub-categoría Symfony</strong> desde allí se pueden crear las módulos aplicaciones y módulos necesarios. ¿Lo malo? no soporta parámetros o flags adicionales por lo que presumo que el comando que (presumo) ejecuta es simplemente <em>generate:module</em> y <em>generate:app</em> respectivamente, así que si necesitas agregar más parámetros, tendrás que utilizar la consola. El resto de los pasos no requiere más explicación que ponerle nombre o indicar a qué aplicación corresponde el nuevo módulo.</p>
<h2>Abrir archivos y editar archivos .yml</h2>
<p>Ahora el editor de Eclipse reconoce los archivos .yml los abré y colorea, pero no formatea correctamente si presionas tab, lo cual en si no es un problema porque el archivo .yml no utiliza tabulaciones sino 2 espacios por cada nivel de anidación. Si te parece molesto igual que a mí, instala el plugin que recomendé más arriba: <a href="http://code.google.com/p/yedit/" target="_blank">yEdit YAML Editor</a> éste reconoce las tabulaciones como 2 espacios (o más dependiendo del nivel de anidación). Una vez instalado, tendrás que abrir estos archivos .yml haciendo click derecho sobre él  -&#62; open with -&#62; YEdit</p>
<h2>Crear el Modelo (en Propel) a través de Clay</h2>
<div>Si bien, no es mi herramienta favorita para crear, Clay provee un sistema básico y eficaz para crear modelos relacionales. Con el plugin de symfony podemos diseñar el Modelo con esta herramienta y exportarlo al archivo <em><strong>schema.yml</strong><span style="font-style:normal;"> (y sólo a ese).</span></em></div>
<div style="text-align:center;">
<div id="attachment_248" class="wp-caption aligncenter" style="width: 493px"><a href="http://emartini.wordpress.com/files/2009/07/imagen-16.png"><img class="size-full wp-image-248" title="Imagen 16" src="http://emartini.wordpress.com/files/2009/07/imagen-16.png" alt="sdf" width="483" height="148" /></a><p class="wp-caption-text">Figura 7: Ejemplo de modelo relacional hecho con Clay.</p></div>
</div>
<p>Ahora si hacemos click derecho sobre el archivo .clay y el menu contextual aparecerá sub-menú de nombre symfony dentro de él se incluye la opción <em><strong>Convert to Symfony YML-Schema. </strong><span style="font-style:normal;">El archivo que se obtiene, para este ejemplo en particular, es el siguiente.</span></em></p>
<p><span style="color:#ff0000;"><strong>[Pendiente de Revisión, no lo probé]</strong></span></p>
<blockquote>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">..</span>propel:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#000000;"> <span style="color:#ffffff;">&#8230;.</span><span style="color:#000080;">_</span></span><span style="color:#000080;">attributes:</span><span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;</span>package:</span> lib.model</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#000000;"> </span> <span style="color:#ffffff;">&#8230;.</span>usuario:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;</span><span style="color:#000080;">id:</span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">type:</span> INTEGER</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">required:</span> true</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">primaryKey:</span> true</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#000000;"> </span> <span style="color:#ffffff;">&#8230;&#8230;</span>nombre:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">type:</span> VARCHAR</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">size:</span> 50</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#000000;"> </span> <span style="color:#ffffff;">&#8230;.</span><span style="color:#000080;"> </span>mensajes:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;</span><span style="color:#000080;"> </span><span style="color:#000080;">id:</span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;..</span><span style="color:#000080;"><span style="color:#ffffff;">&#8230;</span>type:</span> INTEGER</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">required:</span> true</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span><span style="color:#000080;">primaryKey:</span> true</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#000000;"> </span> <span style="color:#ffffff;">&#8230;&#8230;</span>mensaje:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;</span><span style="color:#000080;"><span style="color:#ffffff;">..</span>type:</span> VARCHAR</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>size:</span> 255</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;</span>usuario_id:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>type:</span> INTEGER</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>required:</span> true</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>foreignTable:</span> usuario</p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span>foreignReference:<span style="color:#000000;"> id</span></p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span>onDelete:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;..</span>onUpdate:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;color:#000080;padding-left:60px;margin:0;"><span style="color:#ffffff;">&#8230;&#8230;</span>fecha_publicacion:<span style="color:#000000;"> </span></p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>type:</span> CHAR</p>
<p style="font:normal normal normal 11px/normal Monaco;padding-left:60px;margin:0;"><span style="color:#000080;"> <span style="color:#ffffff;">&#8230;&#8230;..</span>size:</span> 10</p>
</blockquote>
</div>
</ol>
<p style="padding-left:30px;text-align:justify;">Como se puede apreciar la sintaxis utilizada no se parece mucho a la utilizada en la <a href="http://www.symfony-project.org/cookbook/1_2/es/alternative_schema" target="_blank">documentación</a>, por lo que para programadores con poco experiencia en esta notación (como yo) resulta un poco confusa.</p>
<h1>Conclusiones</h1>
<p style="text-align:justify;">Después de haber pasado algunas horas (o quizás más de las que debí) navegando, recopilando información para tratar de obtener un IDE lo más completo posible con lo mejor de cada componente utilizado, quedo con la sensación de que no añadí algo realmente interesante. En particular lo digo por plugin a medias que sólo provee funcionalidades elementales, que final de cuentas me hará recurrir de todas a formas a la consola. Es más, la escasez de alternativas me hacen afirmar que no es indispensable un entorno de desarrollo más completo o complejo que el que construí.</p>
<p style="text-align:justify;">Lo destacable, el editor de archivos yml: <strong>YEdit</strong> y el esfuerzo de la comunidad en proveer plugins para facilitar el trabajo. Estoy seguro que  las próximas versiones serán más completas y que la incorporación de symfony a NetBeans hará más cómoda esta tarea.</p>
<p style="text-align:justify;">De todo lo propuesto, considero que usando Eclipse + PDT + YEdit es suficiente para tener un entorno de desarrollo para symfony adecuado.</p>
<p style="text-align:justify;">Espero les haya sido de ayuda, saludos!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Adding to the sfDoctrineGuardPlugin]]></title>
<link>http://jonocode.wordpress.com/2009/07/11/adding-sf_guard_user_profile-to-the-sfdoctrineguardplugin/</link>
<pubDate>Sat, 11 Jul 2009 22:46:13 +0000</pubDate>
<dc:creator>jjmontgo</dc:creator>
<guid>http://jonocode.wordpress.com/2009/07/11/adding-sf_guard_user_profile-to-the-sfdoctrineguardplugin/</guid>
<description><![CDATA[Here are some excellent resources for working with sfDoctrineGuardPlugin: Plugin page on symfony (RE]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Here are some excellent resources for working with sfDoctrineGuardPlugin:</p>
<p style="padding-left:30px;"><strong>Plugin page on symfony (README is possibly out of date)</strong><br />
<a href="http://www.symfony-project.org/plugins/sfDoctrineGuardPlugin">http://www.symfony-project.org/plugins/sfDoctrineGuardPlugin</a></p>
<p style="padding-left:30px;"><strong>Tutorial on how to add a profile to work with sfDoctrineGuardPlugin</strong><br />
<a href="http://www.symfony-project.org/blog/2008/11/12/call-the-expert-customizing-sfdoctrineguardplugin">http://www.symfony-project.org/blog/2008/11/12/call-the-expert-customizing-sfdoctrineguardplugin</a></p>
<p style="padding-left:30px;"><strong>Tutorial on how to add a registration module</strong><br />
<a href="http://www.symfony-project.org/blog/2008/12/03/call-the-expert-simple-registration-with-sfdoctrineguardplugin">http://www.symfony-project.org/blog/2008/12/03/call-the-expert-simple-registration-with-sfdoctrineguardplugin</a></p>
<p>First of all, the schema code in the documentation for sfDoctrineGuard appears to be old:</p>
<p>(be mindful of the lack of proper YAML spacing; I haven&#8217;t figured out how to incorporate code into wordpress.com posts yet)</p>
<pre class="brush: css;">
sf_guard_user_profile:
_attributes: { phpName: sfGuardUserProfile }
id:
user_id:     { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade }
first_name:  varchar(20)
last_name:   varchar(20)
birthday:    date
</pre>
<p>I replaced it with:</p>
<pre class="brush: css;">
sfGuardUserProfile:
columns:
user_id:     { type: integer, notnull: true, required: true }
first_name:  string(20)
last_name:   string(20)
email:       string(75)
relations:
sfGuardUser: { local: user_id, foreign: id, onDelete: CASCADE }
</pre>
<p>This schema could be parsed by Doctrine in Symfony 1.2.  I ran the <tt>symfony doctrine:build-all-reload</tt> task again.  However it coughed up an error from MySQL:</p>
<p><code><br />
SQLSTATE[HY000]: General error: 1005 Can't create table 'register.#sql-ae0_25'<br />
(errno: 150). Failing Query: ALTER TABLE sf_guard_user_profile ADD FOREIGN KEY<br />
(user_id) REFERENCES sf_guard_user(id) ON DELETE CASCADE<br />
</code></p>
<p>This seems to be a problem with the field definition.  It has to do with user_id being integer (bigint in the SQL), and the id field in the plugin&#8217;s schema set to integer(4).  Others have run into this error:</p>
<p><a href="http://forums.mysql.com/read.php?22,19755,19755#msg-19755">http://forums.mysql.com/read.php?22,19755,19755#msg-19755</a></p>
<p>Anyhow, I changed the definition for user_id to be the primary key.  This is how it should be anyway; each user should only have one profile.</p>
<pre class="brush: css;">
sfGuardUserProfile:
columns:
user_id:     { type: integer(4), primary: true }
...etc...
</pre>
<p>I ran <tt>symfony doctrine:build-all-reload</tt> again, and everything was fine&#8230;</p>
<p>Until I started using fixtures to load some default users and profiles:</p>
<pre class="brush: css;">
sfGuardUser:
sgu_admin:
username:       admin
password:       mr9o1ob7
is_super_admin: true
normal_user:
username:       user
password:       password
is_super_admin: false&lt;/code&gt;

sfGuardUserProfile:
sgup_admin:
sfGuardUser:    sgu_admin
first_name:     Jonathan
last_name:      Montgomery
email:          jjmontgo@gmail.com
sgup_user:
sfGuardUser:    normal_user
first_name:     Normal
last_name:      User
email:          noone@gmail.com

sfGuardPermission:
sgp_admin:
name:           admin
description:    Administrator permission

sfGuardGroup:
sgg_admin:
name:           admin
description:    Administrator group

sfGuardGroupPermission:
sggp_admin:
sfGuardGroup:       sgg_admin
sfGuardPermission:  sgp_admin

sfGuardUserGroup:
sgug_admin:
sfGuardGroup:       sgg_admin
sfGuardUser:        sgu_admin
</pre>
<p>This loaded to the database with user_id set to 0 in the user profile.</p>
<p>I tinkered around a bit more, altered the sfGuardUser relation under the profile schema (which didn&#8217;t seem to help), and eventually removed the primary key from user_id.</p>
<p>That worked.  I&#8217;m not sure why.  I don&#8217;t see why sfGuardUserProfile should have its own id field as a primary key.  Please comment on this if you know the answer.</p>
<p>Here is my final sfGuardUserProfile schema:</p>
<pre class="brush: css;">
sfGuardUserProfile:
actAs: [Timestampable]
columns:
user_id:
type: integer(4)
first_name:  string(20)
last_name:   string(20)
email:       string(75)
relations:
sfGuardUser:
local:     user_id
foreign:   id
type:      one
foreignType: one
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Editing YAML files in a Symfony Project using Eclipse PDT]]></title>
<link>http://jonocode.wordpress.com/2009/06/17/editing-yaml-files-in-a-symfony-project-using-eclipse-pdt/</link>
<pubDate>Wed, 17 Jun 2009 23:21:25 +0000</pubDate>
<dc:creator>jjmontgo</dc:creator>
<guid>http://jonocode.wordpress.com/2009/06/17/editing-yaml-files-in-a-symfony-project-using-eclipse-pdt/</guid>
<description><![CDATA[While using Eclipse PDT, every time I tried to open a YAML file, the software would try to open the ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>While using Eclipse PDT, every time I tried to open a YAML file, the software would try to open the file externally.  Since I had no YAML editor installed, this would generate an error.</p>
<p>Now I could right click and choose Open With &#8211;&#62; Text Editor.  But I wanted something a little better than a simple text editor, and I didn&#8217;t want the extra clicks.</p>
<p>That&#8217;s where Yedit came in, another great plugin for Eclipse.  The plugin can be found here:</p>
<p><a href="http://dadacoalition.org/yedit">http://dadacoalition.org/yedit</a></p>
<p>It installs easily in Eclipse:</p>
<p>Help &#8211;&#62; Software Updates &#8211;&#62; Add Site</p>
<p>Enter:</p>
<p>http://dadacoalition.org/yedit</p>
<p>Select the plugin from the list under this site, and click Install&#8230;</p>
<p>Remember to restart Eclipse after you install, in order to see the update.  You should now be able to open YAML files in your project easily.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Refactoring to separate presentation from logic]]></title>
<link>http://softwareapprenticeship.wordpress.com/2009/06/10/refactoring-to-separate-presentation-from-logic/</link>
<pubDate>Wed, 10 Jun 2009 22:41:24 +0000</pubDate>
<dc:creator>trptcolin</dc:creator>
<guid>http://softwareapprenticeship.wordpress.com/2009/06/10/refactoring-to-separate-presentation-from-logic/</guid>
<description><![CDATA[My plan today was to dig into my Swing code, get some tests wrapped around it, and eliminate the dup]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>My plan today was to dig into my Swing code, get some tests wrapped around it, and eliminate the duplication that built up last night as I played around with styling.  Company business intervened, so I spent most of the day on a project with Eric M. and Caleb working on translating a large set of data into YAML format (with occasional HTML where necessary).  As we got started, I realized that my work was going to be extremely error-prone, tedious, and slow if I just copied and pasted things over, formatting as I went.  So I hacked up a Ruby script to do the basic import to YAML, which I think saved a lot of time (and I feel much more comfortable with handing this to the client).  We did still do a bit of manual work (every export we sampled from our word processing program had limitations), but it wasn&#8217;t too bad.</p>
<p>Eventually, I got back over to my Swing code and eliminated a lot of duplication.  I&#8217;m working on extracting all view/presentation code away from the code that I need to test.  I&#8217;m not, for instance, going to bother with a test to make sure that the background color is blue.  Among other benefits, this will make it clear to me when I&#8217;m finished, as I go through and add tests.  I read the chapter in Programming in Scala last night on pattern matching, and I&#8217;m seeing uses for it everywhere now.  I&#8217;m going to be very careful to avoid switch statements where polymorphism is possible, but I&#8217;m starting to get more comfortable with Scala and find multiple solutions pretty quickly.</p>
<p>There&#8217;s been some talk recently on the JRuby mailing list about using <a href="https://jemmy.dev.java.net/">Jemmy</a> to write integration tests on Swing code, so I&#8217;m excited about its prospects as I delve into my GUI tests.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[JRuby and YAML]]></title>
<link>http://csausdev.wordpress.com/2009/05/20/jruby-and-yaml/</link>
<pubDate>Wed, 20 May 2009 03:51:48 +0000</pubDate>
<dc:creator>csausdev</dc:creator>
<guid>http://csausdev.wordpress.com/2009/05/20/jruby-and-yaml/</guid>
<description><![CDATA[I ran into a little problem when I converted our apache rewrite rule automated tests to use jruby in]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I ran into a little problem when I converted our apache rewrite rule automated tests to use <a href="http://jruby.codehaus.org/">jruby</a> instead of ruby. These tests use a little ruby driver which makes http requests to a local apache instance. The script reads a few <a href="http://yaml.org/">yaml</a> files which contain the url to test, and the expected result after Apache has done its mod_rewrite magic.</p>
<p>Using the MRI ruby meant having to install ruby on all developer machines, build boxes, and keep those ruby installations in sync. So I changed the ant script to pull jruby-complete.jar (1.2.0) from ivy, and run the tests in that. My tests started failing with ParserException messages about &#8220;found org.jvyamlb.tokens.KeyToken&#8221;. These were all yaml files that MRI ruby handles without complaint.</p>
<p>After much trial-and-error, slicing the yaml files up into smaller chunks to isolate the rules, I found the problem. Commas. In normal ruby, you can have them your values as long as they are not followed by a space. In jruby, you have to quote them. Arguably, JRuby is doing the right thing &#8211; I haven&#8217;t delved into the yaml spec enough to find out. </p>
<p>Here&#8217;s an example irb session with JRuby:</p>
<pre class="brush: ruby;">
irb(main):001:0&gt; require 'yaml'
=&gt; true
irb(main):002:0&gt; YAML.load(&quot;{url: http://someurl/path,with,commas, http_code: 200}&quot;)
ArgumentError: syntax error:ParserException while scanning a flow node we had this expected the node content, but found org.jvyamlb.tokens.KeyToken
        from (irb):3
</pre>
<p>Do the same with quoted strings:</p>
<pre class="brush: ruby;">
irb(main):004:0&gt; YAML.load(&quot;{url: \&quot;http://someurl/path,with,commas\&quot;, http_code: 200}&quot;)
=&gt; {&quot;url&quot;=&gt;&quot;http://someurl/path,with,commas&quot;, &quot;http_code&quot;=&gt;200}
</pre>
<p>Similarly, unquoted strings containing question marks (&#8220;?&#8221;) were truncated.</p>
<pre class="brush: ruby;">
irb(main):005:0&gt; YAML.load(&quot;{url: http://someurl/path?with=query, http_code: 200}&quot;)
=&gt; {&quot;with=query&quot;=&gt;nil, &quot;url&quot;=&gt;&quot;http://someurl/path&quot;, &quot;http_code&quot;=&gt;200}
</pre>
<p>Again, quoting the value solved the problem. Hopefully this helps anyone else that has YAML parsing problems in JRuby.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Pliki konfiguracyjne - YAML - część 1]]></title>
<link>http://owczepastwisko.wordpress.com/2009/05/17/pliki-konfiguracyjne-yaml/</link>
<pubDate>Sun, 17 May 2009 15:23:19 +0000</pubDate>
<dc:creator>owczepastwisko</dc:creator>
<guid>http://owczepastwisko.wordpress.com/2009/05/17/pliki-konfiguracyjne-yaml/</guid>
<description><![CDATA[Projektując dowolną aplikacje, często jesteśmy zmuszeni do wykorzystywania plików konfiguracyjnych z]]></description>
<content:encoded><![CDATA[Projektując dowolną aplikacje, często jesteśmy zmuszeni do wykorzystywania plików konfiguracyjnych z]]></content:encoded>
</item>
<item>
<title><![CDATA[LINQ to YAML]]></title>
<link>http://alexreg.wordpress.com/2009/05/14/linq-to-yaml/</link>
<pubDate>Wed, 13 May 2009 23:53:48 +0000</pubDate>
<dc:creator>Noldorin</dc:creator>
<guid>http://alexreg.wordpress.com/2009/05/14/linq-to-yaml/</guid>
<description><![CDATA[LINQ to XML is one of the many technologies introduced with the .NET Framework 3.5, and one that is ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://msdn.microsoft.com/en-us/library/bb387098.aspx">LINQ to XML</a> is one of the many technologies introduced with the .NET Framework 3.5, and one that is certainly a step forward in terms of usability. It allows querying in both the functional style (using LINQ and lambda expressions) and the more traditional imperative one, meaning that it&#8217;s a great tool for concisely working with XML data in any sort of application, and undoubtedly a significant improvement over the old XML DOM that resides in the <em>System.Xml</em> namespace.</p>
<p>In the spirit of LINQ, and with the advent of <a href="http://www.yaml.org/">YAML</a>, I recntly decided it was about time that this new &#8220;markup language&#8221; were integrated with LINQ. Surprisingly, there does not already exist anything akin to LINQ to YAML out there (though there are a couple of fairly usable implementations of a YAML reader/writer for .NET). This seemed to me like a good chance to potentially create something that might be used by more than the odd .NET developer or two. My plans are to implement a LINQ to YAML provider either from scratch or on top of one of the existing YAML libraries. (Which option I choose will depend on the state of the existing projects, which I haven&#8217;t yet investigated properly. I am however suspecting that it might be worthwhile writing my own, since it would a) teach me all the intricacies of YAML, and b) allow me to support the latest version [1.2], which the existing libraries do not.)</p>
<p>Before I launch into an overview of my intended implementation, here is a little bit about YAML itself, for those who aren&#8217;t already familiar with it. Although technically YAML isn&#8217;t a markup language (after all, the recursive acronym stands for <em>YAML Ain&#8217;t Markup Language</em>) &#8211; it is rather a serialisation format &#8211; it does essentially fulfill the the role that XML  traditionally has, in a variety of common situations. I&#8217;m not going to try to sell the format to you right now, but it should suffice to say that you wouldn&#8217;t have reached this far in the post if you weren&#8217;t already at least intrigued! Without doubt, the format is actively gaining popularity because of it&#8217;s ultra-lightweight syntax and suitability for hand editing, perhaps the two points that summarise its advantages over XML.</p>
<p>Anyway, here&#8217;s a short example of a YAML document (taken straight from <a href="http://en.wikipedia.org/wiki/Yaml#Sample_document">the Wikipedia page</a>), so you can see precisely how pleasant it is to work with (at least for humans).</p>
<p>&#8212;</p>
<pre>receipt:     Oz-Ware Purchase Invoice
date:        2007-08-06
customer:
    given:   Dorothy
    family:  Gale

items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      price:     100.27
      quantity:  1

bill-to:  &#38;id001
    street: &#124;
            123 Tornado Alley
            Suite 16
    city:   East Westville
    state:  KS

ship-to:  *id001

specialDelivery:  &#62;
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
...</pre>
<p>Of course, the great thing about YAML, which is demonstrated clearly by this example, is that you don&#8217;t have to have any real knowledge about YAML to understand exactly and immediately what the data represents, and as a bonus it doesn&#8217;t hurt your eyes to stare at for too long! Even the referencing syntax should be fairly self evident. (<em>&#38;id00</em> and<em> *id001</em> would surely be nothing new to C programmers.)</p>
<p>The semantics as well as the syntax of YAML obviously differ to those of XML greatly, although there is almost always some sort of correspondence between the features and possibilities that the two formats offer. The only notable missing feature when contrasted to XML is attributes, yet their usefulness is questionable anyway.</p>
<p>Right, so now I ought to explain a bit about how I actually plan to design this library. The basic framework will be virtually equivalent to that of LINQ to XML. In other words, the hierarchy will be largely based around an abstract <em>YamlObject</em> (<em>YObject</em>?) class, and will look very much like the one contained within <em>System.Xml.Linq</em>.</p>
<p><a href="http://i.msdn.microsoft.com/Bb308960.xlinqoverview01(en-us,MSDN.10).jpg"><img style="width:100%;" src="http://i.msdn.microsoft.com/Bb308960.xlinqoverview01(en-us,MSDN.10).jpg" alt="Diagram of LINQ to XML class hierarchy" /></a><em>LINQ to XML class hierarchy</em></p>
<p>Though LINQ to YAML must of course accomodate for the unique nature of the format, I would initially aim for minimal difference and only significantly adjust the hierarchy when it is found to be necessary. Classes such as <em>XCData</em> and <em>XDocumentType</em> would not apply at all to YAML, yet there would need to be a place for a <em>YReference</em> or such somewhere in the hierarchy. The referencing aspect of YAML will likely prove to be one of the more interesting challenges; while YAML&#8217;s lists, maps (dictionaries), and combinations thereof would seem relatively straightforward with regards to emulation of the LINQ to XML design, references would introduce a substantially novel concept. Some sort of implementation of lazy evaluation followed by concrete referencing should be able to solve the problem, but there&#8217;s no way to predict how well this might work in practice at this moment.</p>
<p>What I realised only after deciding to create a LINQ to YAML library is that among LINQ providers, LINQ to XML is somewhat special in that the LINQ aspect of it is built <em>on top of</em> <a href="http://msdn.microsoft.com/en-us/library/bb397919.aspx">LINQ to Objects</a> (i.e. LINQ using <em>IEnumerable&#60;T&#62;</em> objects), with only a relatively small number of extension methods specific to LINQ to XML. Indeed, most LINQ providers (LINQ to Objects and LINQ to SQL among others) require you to implement the <em>IQueryable</em> and <em>IQueryProvider</em> interfaces to provide complex logic for interpreting and returning the results of expressions, as well as evaluating complex expression trees.  All this means that I can pretty much just design a DOM  to a certain style (i.e. one suited to functional code, like LINQ to XML), and let LINQ to Objects to everything else for me.</p>
<p>As I can&#8217;t think of anything more worth mentioning about my project at this time, I shall leave any more specific and complex details to a future post. Still, do by all means feel free to query me about my plans &#8211; I would be glad to answer any questions, and even gladder to receive some suggestions as how you think I might design LINQ to YAML, or simply a nod that you might find this useful at some point. I don&#8217;t anticipate this project to be a very long one, though I must say that both my work and free-time schedule are likely to be fairly messed up for the next month or two, therefore I&#8217;m not going to promise when I&#8217;ll get around to my initial release. Whenever it so happens, I will duly post the link to the project page on Launchpad (or wherever I decide to host it).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Video2Brain Videotraining, Little Boxes 2 von und mit Peter Müller]]></title>
<link>http://mistermolly.wordpress.com/2009/05/06/video2brain-videotraining-little-boxes-2-von-und-mit-peter-muller/</link>
<pubDate>Wed, 06 May 2009 14:11:58 +0000</pubDate>
<dc:creator>mistermolly</dc:creator>
<guid>http://mistermolly.wordpress.com/2009/05/06/video2brain-videotraining-little-boxes-2-von-und-mit-peter-muller/</guid>
<description><![CDATA[Produktbild Little Boxes 2 Welcher Webdesigner träumt nicht davon, DIE perfekte, barrierefreie, vali]]></description>
<content:encoded><![CDATA[Produktbild Little Boxes 2 Welcher Webdesigner träumt nicht davon, DIE perfekte, barrierefreie, vali]]></content:encoded>
</item>
<item>
<title><![CDATA[SOL Meilenstein 5]]></title>
<link>http://ursingold.wordpress.com/2009/03/26/sol-meilenstein-5/</link>
<pubDate>Thu, 26 Mar 2009 18:43:32 +0000</pubDate>
<dc:creator>Urs</dc:creator>
<guid>http://ursingold.wordpress.com/2009/03/26/sol-meilenstein-5/</guid>
<description><![CDATA[Das Lernziel 3 lautete: «Kennenlernen von JYAML als Basis für ein eigenes Joomla-Template» Auch in d]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Das Lernziel 3 lautete: «Kennenlernen von JYAML als Basis für ein eigenes Joomla-Template»</p>
<p>Auch in dieser Phase gab es zeitliche Probleme: Um die geplanten 8 Stunden fürs SOL frei zu bekommen, musste ich eine Woche anhängen, sonst hätte es nicht gereicht. Alle Freitage in dieser SOL-Phase waren beruflich ausgebucht, obwohl dies eigentlich mein «Studientag» ist. Typisch fürs SOL war auch wieder, dass die Lernaufgaben immer Vorrang haben! Eigentlich schade, aber verständlich.</p>
<p>Zur Klärung vorneweg: JYAML ist eine Erweiterung zum CMS Joomla, mit der sich Joomla-Templates auf Basis des CSS-Frameworks YAML («Yet Another Multicolumn Layout») erstellen lassen. Beide Produkte stammen übrigens aus Deutschland: <a href="http://www.yaml.de/" target="_blank">YAML</a> wird von Dirk Jesse entwickelt, <a href="http://www.jyaml.de/" target="_blank">JYAML</a> von Reinhard Hiebl.</p>
<p><!--more--></p>
<p>Die vier Teilziele dieser Phase im Detail lauteten:</p>
<h4>Ziel 1 (das JYAML-Template untersuchen): Erreicht.</h4>
<p>Zunächst gab es Probleme bei der Installation von JYAML: Joomla verweigerte beharrlich die Installation des vollständigen JYAML-Paketes (bestehend aus der «Komponente», dem «Plugin» und dem «Template»). Der Installer meldete immer, gewisse Teile seien bereits vorhanden. Erst mit einer älteren Version von Joomla (1.5.7) klappte es schließlich. So ging schon mal kostbare Zeit verloren&#8230;</p>
<p>Ist JYAML einmal installiert, wird es in der Adminstrationsumgebung von Joomla über das Menü «Komponenten» aufgerufen. Der «JYAML Template Konfigurator» ist die Schnittstelle, über die eigene «Designs» erstellt und bearbeitet werden. Grundlage des Templates ist dabei das gesamte YAML-Framework. Es enthält also neben dem HTML-Grundgerüst eine Vielzahl an CSS- und JavaScript-Dateien, die an die Bedürfnisse von Joomla angepasst wurden. Der Code kann im integrierten Editor sogar direkt bearbeitet werden, sofern man weiss, was man tut! Zudem lassen sich eigene Stylesheets einbinden, die man extern erstellt hat. Doch auch dies setzt sehr gute Kenntnisse sowohl von CSS als auch von YAML voraus.</p>
<h4>Ziel 2 (die JYAML-Community im Web kennenlernen): Teilweise erreicht.</h4>
<p>Dokumentiert ist JYAML auf <a href="http://www.jyaml.de/" target="_blank">www.jyaml.de</a>, aber die Community diskutiert im YAML Community Forum (<a href="http://forum.yaml.de/" target="_blank">http://forum.yaml.de</a>). Ich habe mich dort zaghaft (als Anfänger) und nur kurz (wegen der fehlenden Zeit) umgeschaut. Mein Eindruck: vor allem für «Nerds» geeignet, die ganz spezifische Fragen haben. Reinhard Hiebl gibt als Moderator rasch und kompetent Antwort. Für Anfänger ist das Forum weniger geeignet.</p>
<h4>Ziel 3 (die Eignung von JYAML als Basis eines eigenen Templates abschätzen): Erreicht.</h4>
<p>Wer mit dem Framework YAML sattelfest ist und deshalb weiss, was er tut, für den kann JYAML ein leistungsfähiges Werkzeug sein, um eigene Joomla-Templates zu erstellen. Die Probleme mit der Installation haben mich allerdings etwas vorsichtig werden lassen: Wird JYAML mit zukünftigen Joomla-Versionen kompatibel sein? Macht man sich nicht zu sehr abhängig von einem einzigen Entwickler (Reinhard Hiebl)? Aus meiner Sicht wird das Erstellen von Joomla-Templates letztlich nicht einfacher, die Komplexität verlagert sich einfach, denn ohne gute YAML-Kenntnisse bringt auch JYAML nichts. Ernüchterndes Fazit: Das Erstellen von eigenen Joomla-Templates ist und bleibt eine zeitaufwendige, komplizierte Sache!</p>
<h4>Ziel 4 (eine Liste von Massnahmen für die konkrete (spätere) Umsetzung erstellen): Nicht erreicht.</h4>
<p>Dieses Ziel ist schlicht und ergreifend dem Zeitdruck zum Opfer gefallen. Im Moment steht auch keine konkrete Umsetzung an.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Getting Started with REST in WCF]]></title>
<link>http://techsavygal.wordpress.com/2009/03/10/getting-started-with-rest-in-wcf/</link>
<pubDate>Tue, 10 Mar 2009 11:39:18 +0000</pubDate>
<dc:creator>techsavygal</dc:creator>
<guid>http://techsavygal.wordpress.com/2009/03/10/getting-started-with-rest-in-wcf/</guid>
<description><![CDATA[Hi All, If you are planning to get started with REST in WCF, the following information might be help]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Hi All,</p>
<p>If you are planning to get started with REST in WCF, the following information might be helpful.</p>
<p><strong>What is REST?</strong></p>
<p><strong>Representational state transfer</strong> (<strong>REST</strong>) is a style of <a title="Software architecture" href="http://en.wikipedia.org/wiki/Software_architecture">software architecture</a> for distributed <a title="Hypermedia" href="http://en.wikipedia.org/wiki/Hypermedia">hypermedia</a> systems such as the <a title="World Wide Web" href="http://en.wikipedia.org/wiki/World_Wide_Web">World Wide Web</a>. As such, it is not strictly a method for building &#8220;<a class="mw-redirect" title="Web services" href="http://en.wikipedia.org/wiki/Web_services">web services</a>.&#8221; The terms &#8220;representational state transfer&#8221; and &#8220;REST&#8221; were introduced in 2000 in the doctoral dissertation of <a title="Roy Fielding" href="http://en.wikipedia.org/wiki/Roy_Fielding">Roy Fielding</a>,<sup class="reference"><a href="http://en.wikipedia.org/wiki/REST#cite_note-0"><span>[</span>1<span>]</span></a></sup> one of the principal authors of the <a title="Hypertext Transfer Protocol" href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">Hypertext Transfer Protocol</a> (HTTP) specification.</p>
<p>REST strictly refers to a collection of <a title="Network architecture" href="http://en.wikipedia.org/wiki/Network_architecture">network architecture</a> principles which outline how resources are defined and addressed. The term is often used in a looser sense to describe any simple interface which transmits domain-specific data over HTTP without an additional messaging layer such as <a class="mw-redirect" title="SOAP (protocol)" href="http://en.wikipedia.org/wiki/SOAP_%28protocol%29">SOAP</a> or <a title="Session management" href="http://en.wikipedia.org/wiki/Session_management">session tracking</a> via <a title="HTTP cookie" href="http://en.wikipedia.org/wiki/HTTP_cookie">HTTP cookies</a>. These two meanings can conflict as well as overlap. It is possible to design a software system in accordance with Fielding&#8217;s REST architectural style without using HTTP and without interacting with the World Wide Web.<sup class="reference"><a href="http://en.wikipedia.org/wiki/REST#cite_note-1"><span>[</span>2<span>]</span></a></sup> It is also possible to design simple XML+HTTP interfaces which do not conform to REST principles, and instead follow a model of <a title="Remote procedure call" href="http://en.wikipedia.org/wiki/Remote_procedure_call">remote procedure call</a>. The difference between the uses of the term &#8220;REST&#8221; therefore causes some confusion in technical discussions.</p>
<p>Systems which follow Fielding&#8217;s REST principles are often referred to as &#8220;<strong>RESTful</strong>&#8220;.</p>
<p><strong>What are RESTful Web Services?</strong></p>
<p>A RESTFul web service is a simple web service implemented using HTTP and the principles of REST. Such a web service can be thought about as a collection of resources. The definition of such a web service can be thought of as comprising three aspects:</p>
<ul>
<li>The URI for the web service such as <code>http://example.com/resources/cars</code></li>
<li>The <a title="MIME" href="http://en.wikipedia.org/wiki/MIME">MIME type</a> of the data supported by the web service. This is often <a title="JSON" href="http://en.wikipedia.org/wiki/JSON">JSON</a> , <a title="XML" href="http://en.wikipedia.org/wiki/XML">XML</a> or <a title="YAML" href="http://en.wikipedia.org/wiki/YAML">YAML</a> but can be anything.</li>
<li>The set of operations supported by the web service using <a title="Hypertext Transfer Protocol" href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods">HTTP methods</a> (e.g. POST, GET, PUT or DELETE).</li>
</ul>
<p>Members of the collection are addressed by ID using URIs of the form &#60;baseURI&#62;/&#60;ID&#62;. The ID can be any unique identifier. For example if a RESTFul web service representing a collection of cars for sale might have the URI <a href="http://example.com/resources/cars"><code>http://example.com/resources/cars</code></a>. f the service uses the car registration number as the ID then a particular car might be present in the collection as <a href="http://"><code>http://example.com/resources/cars/yxz123</code></a>.</p>
<p>The following table shows how the HTTP verbs are typically used to implement a web service.</p>
<table class="wikitable" style="text-align:center;height:250px;" border="1" width="561">
<caption>RESTful Web Service HTTP methods</caption>
<tbody>
<tr>
<th>Resource</th>
<th>GET</th>
<th>PUT</th>
<th>POST</th>
<th>DELETE</th>
</tr>
<tr>
<th>Collection URI such as <code>http://example.com/resources/cars/</code></th>
<td><strong>List</strong> the members of the collection. For example list all the cars for sale.</td>
<td>Not generally used. Meaning defined as replace the entire collection with another entire collection.</td>
<td><strong>Create</strong> a new entry in the collection where the ID is assigned automatically by the collection. The ID created is typically returned by this operation.</td>
<td>Not generally used. Meaning defined as delete the entire collection.</td>
</tr>
<tr>
<th>Member URI such as <code>http://example.com/resources/cars/yxz123</code></th>
<td><strong>Retrieve</strong> the addressed member of the collection</td>
<td><strong>Update</strong> the addressed member of the collection or create it with a defined ID.</td>
<td>Not generally used.</td>
<td style="text-align:center;"><strong>Delete</strong> the addressed member of the collection.</td>
</tr>
</tbody>
</table>
<p><strong>What are WCF Rest Services?</strong></p>
<p>WCF Rest Services are normal WCF Services that have added functionality so that they can be consumed in a RESTful manner (URI vs URL, Usage of HTTTP Verbs, Usage of Different Data Transfer Formats like JSON, YAML, etc&#8230;). So for example, if you had a stock ticker web service that you built in WCF, instead of requiring the caller to use a heavy WSDL implementation and ASMX, you could just use the WCF Rest functionality to publish that service as a JSON service instead and have it consumed via AJAX without having to point to an ASMX resource.</p>
<p><strong>An example of WCF REST Service in .Net Framework 3.5:</strong></p>
<p><span>WCF 3.5 provides explicit support for RESTful communication using a new binding named WebHttpBinding.<br />
The below code shows how to expose a RESTful service</span></p>
<p>[ServiceContract]<br />
interface IStock<br />
{<br />
[OperationContract]<br />
[WebGet]<br />
int GetStock(string StockId);<br />
}</p>
<p><span>Microsoft has released a white paper in early 2007 comparing different distributed communication technologies with WCF. (including REST Services). </span></p>
<p><span>You can download this whitepaper from <a title="here" href="http://msdn.microsoft.com/en-us/library/bb310550.aspx" target="_blank">here</a> (http://msdn.microsoft.com/en-us/library/bb310550.aspx)</span></p>
<p><span>Though there are loads of information on REST these days, i found the following links to be very insightful and helpful in understanding this technology.<br />
</span></p>
<p><span><a title="How-to create a WCF Restful Service Video" href="http://channel9.msdn.com/pdc2008/TL35/" target="_blank">How-to create a WCF Restful Service Video</a> ( </span><span>http://channel9.msdn.com/pdc2008/TL35/)</span></p>
<p><span><a title="An Introduction to WCF Restful Web Services" href="http://msdn.microsoft.com/en-us/magazine/2009.01.servicestation.aspx#id0070034" target="_blank">An Introduction to WCF Restful Web Services</a> by Jon Flanders in MSDN Magazine  Jan 2009</span></p>
<p><span><a title="A Guide to Designing and Building Restful Web Services using WCF 3.5" href="http://msdn.microsoft.com/en-us/library/dd203052.aspx" target="_blank">A Guide to Designing and Building Restful Web Services using WCF 3.5 </a>by Aaron Skonnard on MSDN in Oct 2008<br />
</span></p>
<p>WCF Blog Series:</p>
<ul>
<li><a href="http://blogs.msdn.com/bags/archive/2008/05/28/rest-in-wcf-part-i-rest-overview.aspx" target="_blank">REST in WCF &#8211; Part I (REST Overview)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/05/29/rest-in-wcf-part-ii-ajax-friendly-services-creating-the-service.aspx" target="_blank">REST in WCF &#8211; Part II (AJAX Friendly Services, Creating The Service)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/05/30/rest-in-wcf-part-iii-ajax-friendly-services-consuming-the-service.aspx" target="_blank">REST in WCF &#8211; Part III (AJAX Friendly Services, Consuming The Service)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/06/09/rest-in-wcf-part-iv-hi-rest-exposing-a-service-via-get-configuring-the-service.aspx" target="_blank">REST in WCF &#8211; Part IV (HI-REST &#8211; Exposing a service via GET &#8211; Configuring the service)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/06/10/rest-in-wcf-part-v-hi-rest-exposing-a-service-via-get-the-servicecontract-and-implementation.aspx" target="_blank">REST in WCF &#8211; Part V (HI-REST &#8211; Exposing a service via GET &#8211; The ServiceContract and Implementation)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/06/12/rest-in-wcf-part-vi-hi-rest-consuming-our-get-service-via-ajax.aspx" target="_blank">REST in WCF &#8211; Part VI (HI-REST &#8211; Consuming our GET service via AJAX)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/06/12/rest-in-wcf-part-vii-hi-rest-implementing-insert-and-update.aspx" target="_blank">REST in WCF &#8211; Part VII (HI-REST &#8211; Implementing Insert and Update</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/06/14/rest-in-wcf-part-viii-hi-rest-implementing-delete.aspx" target="_blank">REST in WCF &#8211; Part VIII (HI-REST &#8211; Implementing Delete)</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx" target="_blank">REST in WCF &#8211; Part IX &#8211; Controlling the URI</a></li>
<li><a href="http://blogs.msdn.com/bags/archive/2008/08/28/rest-in-wcf-part-x-supporting-caching-and-conditional-get.aspx" target="_blank">REST in WCF &#8211; Part X &#8211; Supporting Caching and Conditional GET</a></li>
</ul>
<p>Screencast Series on Channel9:</p>
<ul>
<li><a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Controlling-the-URI-in-RESTful-WCF-with-Rob-Bagby/" target="_blank">endpoint.tv &#8211; Controlling the URI in RESTful WCF with Rob Bagby</a></li>
<li><a href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/">deCast &#8211; Creating a HI-REST GET Service with WCF 3.5</a></li>
<li><a href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/">deCast &#8211; Consuming a HI-REST GET Service From Silverlight 2 (Beta 2)</a></li>
<li><a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Caching-and-Conditional-Get-with-Rob-Bagby/" target="_blank">endpoint.tv &#8211; Caching and Conditional Get with Rob Bagby</a></li>
<li><a href="http://channel9.msdn.com/posts/RobBagby/Building-an-AJAX-Friendly-WCF-Service/" target="_blank">deCast &#8211; Creating an AJAX-Friendly WCF Service</a></li>
<li><a href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-PUT-Service-That-Exposes-Insert-and-Update/" target="_blank">deCast &#8211; Creating a HI-REST PUT Service That Exposes Insert and Update</a></li>
<li><a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services-with-ASPNET-Membership/" target="_blank">endpoint.tv &#8211; Securing RESTful services with ASP.NET Membership</a></li>
<li><a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Content-Negotiation-with-RESTful-services/" target="_blank">endpoint.tv &#8211; Content Negotiation with RESTful services</a></li>
<li><a href="http://channel9.msdn.com/posts/RobBagby/decast-Tunneling-a-PUT-through-POST-with-RESTful-WCF-Services/" target="_blank">deCast &#8211; Tunneling a PUT through POST with RESTful WCF</a></li>
</ul>
<p>MSDN WebCasts:</p>
<p><span><a title="REST and WCF 3.5" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&#38;EventID=1032387086&#38;CountryCode=US" target="_blank">REST and WCF 3.5 </a>- Adnan Masood (LEVEL 200)</span></p>
<p><a title="VS 2008,WCF and REST" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032379184&#38;EventCategory=3&#38;culture=en-US&#38;CountryCode=US">VS 2008, WCF and REST</a> &#8211; (Level 200)</p>
<p><a title="REST and ASP.Net MVC" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032392747&#38;EventCategory=5&#38;culture=en-US&#38;CountryCode=US" target="_blank">REST and ASP.Net MVC </a>- Brian Hitney (Level 200)</p>
<p><a title="REST and ADO.Net Services" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032392745&#38;EventCategory=5&#38;culture=en-US&#38;CountryCode=US" target="_blank">REST and ADO.Net Services</a> &#8211; Chad Brookes (Level 200)</p>
<p><a title="REST Developer Center on MSDN" href="http://msdn.microsoft.com/en-us/netframework/cc950529.aspx" target="_blank">REST Developer Center on MSDN</a></p>
<p><span>MSDN Code Samples:<br />
</span></p>
<p><span><a title="REST and POX" href="http://msdn.microsoft.com/en-us/library/aa395208.aspx" target="_blank">REST and POX</a> (http://msdn.microsoft.com/en-us/library/aa395208.aspx)</span></p>
<p>For further queries on troubleshooting and general advice, you can also check out <a title="REST Forum" href="http://forums.asp.net/1180.aspx">REST Forums</a> from MSDN.</p>
<p>Enjoy!</p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
<p><span><br />
</span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Baseball Draft]]></title>
<link>http://jameshalberg.com/2009/03/09/baseball-draft/</link>
<pubDate>Tue, 10 Mar 2009 03:34:15 +0000</pubDate>
<dc:creator>Jim</dc:creator>
<guid>http://jameshalberg.com/2009/03/09/baseball-draft/</guid>
<description><![CDATA[Ah yes, it&#8217;s that wonderful time of year again: fantasy baseball time.  Anyone who plays fanta]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ah yes, it&#8217;s that wonderful time of year again: fantasy baseball time.  Anyone who plays fantasy sports can tell you that other than getting a check for winning your league (something I would know nothing about), the best part of the season is the draft.</p>
<p>My fantasy draft preparation always involves the creation of a spreadsheet.  This nugget of gold will start with ratings and stats from various sites and sources before getting my own personal notes, organization, and shuffling (aka &#8220;messing it up&#8221;).  and what kind of card-carrying software engineer would do such a compilation by hand&#8230;</p>
<p>My basic strategy for compiling this sucker this year:</p>
<ol>
<li>Scrape some stats and rankings from a few popular sites and dump them locally.</li>
<li>Load the stats from local, merge em, and kick out a csv.</li>
<li>Mess with stuff in the spreadsheet.</li>
<li>Win millions.</li>
</ol>
<h3 style='color:black;'>Scraping</h3>
<p>I&#8217;ve used <a href="http://wiki.github.com/why/hpricot">hpricot</a> in the past but wanted a bit of a refresher &#8212; Man, this thing makes this task nice and easy.  Most of the sites have a fairly sane markup scheme for the tables they store players data in, so it&#8217;s normally as simple as (this is Ruby btw):</p>
<pre style="color:green;"><span style="font-family:mceinline;">doc = Hpricot(open(url))
players = doc.search(".playerDataRow")
players.each do &#124;player&#124;
  meta = player.search("td .playerMeta")
  stats = player.search("td .playerStats")
  &#60; do stuff &#62;
end</span></pre>
<p>&#160;</p>
<div style='background-color:#F3F3E0;margin-bottom:10px;padding:15px;'>
<h3 style='color:black;'>Update: <span style="font-weight:normal;">Here are a couple example files (they should be .rb files, but are docs to make WordPress happy)</span></h3>
<p><span style="font-weight:normal;"><br />
<a href="http://jameshalberg.wordpress.com/files/2009/03/yahoo_parserrb.doc">Yahoo Parser</a></span></p>
<p><a href="http://jameshalberg.wordpress.com/files/2009/03/scraperb.doc">Something to invoke the parser</a>
</div>
<h3 style='color:black;'>Local Storage</h3>
<p>Last year, I wrote this as a single script (scrape -&#62; csv).  Things got hairy when I needed to tweak the merger and thus had to re-run the whole thing (annoying) or hack it to run only a portion&#8230; and the same portion on each site (annoying).  So, this year I got a little smart and wanted to dump the scrape results locally.</p>
<p>I fully intended to evaluate a few options here but as it turns out, the first try was just dead simple and worked perfectly: yaml.  My scrapers each end up with a couple Arrays: one for hitters and one for pitchers.  Each entry is a Hash of player data.  I considered skipping the Array here but didn&#8217;t want to have the logic for name collisions in the scraper.</p>
<p>How hard was it to write my +player_data+ Hash to yaml?</p>
<pre style="color:green;">YAML.dump(player_data, File.open(File.dirname(__FILE__) + "/yaml/" + filename, "w"))</pre>
<h3 style='color:black;'>Merging the scrape sources</h3>
<p>This is a separate script here now&#8230;</p>
<p>Resurrecting the player data proved as simple as storing it in the first place.</p>
<pre style="color:green;">YAML.load(File.open(File.dirname(__FILE__) + "/yaml/" + filename))</pre>
<p>First pass I just wanted to merge based on player names &#8211; ignoring the imperfections that surely come with that&#8230; I was pleasantly surprised at how well things actually came out.  I wrote a little throwaway script (as if this whole thing isn&#8217;t throwaway) to tell me how much of a problem I actually have.  Basically: how many players in the top 400 of any site don&#8217;t have a match from the other sites?  The answer was basically: a lot of Latin guys and a few others.</p>
<p>So, one problem I had was character sets used in the Latin player names.  This is an area where &#8220;you&#8217;re going to throw this away&#8221; came into play: I just grabbed the few codes that I was having trouble with and regex&#8217;d to replace them with their friendlier counterparts.  This is now on my list of &#8220;things to figure out how to do right&#8221;.</p>
<p>That out of the way, I re-ran and found that I really only had problems with about 20 guys.  People with names like &#8220;Mike Smith&#8221;, that were &#8220;Michael Smith&#8221; in the other set.  Here again: cheated.  20 guys?  I can handle typing 20 names instead of figuring this one out, so I just modified the yaml manually here (this immediately breaks down if I have to re-run the scraper, but&#8230; I didn&#8217;t).</p>
<p>After determining which of the dumped data I wanted to keep (and which site could trump the others when they both had something like HRs), I created my csv with <a href="http://fastercsv.rubyforge.org/">FasterCSV</a> and I was rockin&#8217;.</p>
<h3 style='color:black;'>In the spreadsheet</h3>
<p>At this point, I was realizing that I should have created some new fields in that script&#8230; maybe look for things like big differences between sources (why does Y! think this guy is #20 and ESPN thinks he&#8217;s #100?) or even just: what&#8217;s the average of all the sites scraped.  I was enamored with my spreadsheet though and haven&#8217;t <del>had to</del> been able to work with formulas in spreadsheets since my consulting-at-AmFam days, so I thought I&#8217;d give it a spin&#8230; and was quickly reminded of how easy they make it&#8230; to bash your head against the wall:</p>
<pre style="color:green;">=IF(AND(P13="n/a";F13="");M13;IF(P13="n/a";(M13+F13)/2;IF(F13="";(M13+P13)/2;(M13+P13+F13)/3)))</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ YAML Sucks. Gems Sucks. Syck Sucks.]]></title>
<link>http://ciaranm.wordpress.com/2009/03/01/yaml-sucks-gems-sucks-syck-sucks/</link>
<pubDate>Sun, 01 Mar 2009 18:41:26 +0000</pubDate>
<dc:creator>Ciaran McCreesh</dc:creator>
<guid>http://ciaranm.wordpress.com/2009/03/01/yaml-sucks-gems-sucks-syck-sucks/</guid>
<description><![CDATA[YAML, like XML (but don&#8217;t say that around YAML fans, because they will insist that YAML is not]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.yaml.org/">YAML</a>, like XML (but don&#8217;t say that around YAML fans, because they will insist that YAML is nothing like XML), is a faddish structured text format that, by virtue of its generality and abstractness, ends up being harder to work with even with a parser already written than an appropriately designed one-off flat text format.</p>
<p><a href="http://www.rubygems.org/">Gems</a> is Ruby&#8217;s way of dealing with distributions with lousy package managers and operating systems where there are no package managers, at the expense of sanity for the minority who could handle it better themselves. To be fair, <a href="http://www.rubygems.org/read/chapter/14#page62">they are open to this getting fixed</a>; unfortunately, thanks to the immense suckiness of YAML, this is not straightforward.</p>
<p>The metadata for every Gem hosted on <a href="http://rubyforge.org/">RubyForge</a> is available in <a href="http://gems.rubyforge.org/yaml">a really huge YAML file</a>, whose format, rather surprisingly, is <a href="http://www.rubygems.org/read/chapter/20#page85">properly documented</a>. There&#8217;s a standard tool for hosting things this way too, so presumably other repositories could easily do the same thing. This isn&#8217;t particularly nice, but it&#8217;s a huge improvement over CPAN&#8217;s lack of anything consistently useful&#8230;</p>
<p>Well, it would be a huge improvement, except the YAML file isn&#8217;t YAML.</p>
<p>Let&#8217;s run it through <a href="http://pyyaml.org/wiki/LibYAML">libyaml</a>&#8217;s <code>example-reformatter</code>:</p>
<pre style="margin-left:4em;">
# Snip zillions of lines of output
  extlib-0.9.3: !ruby/object:Gem::Specification
    name: extlib
    version: !ruby/object:Gem::Version
Scanner error: while scanning for the next token at line 343989, column 18
found character that cannot start any token at line 343989, column 18
</pre>
<p>Oops. Oh well. Let&#8217;s run it through <a href="http://code.google.com/p/yaml-cpp/">yaml-cpp</a>, nominee for the &#8220;biggest screw-up of a build system, even taking into account the cmake handicap&#8221; award:</p>
<pre style="margin-left:4em;">
Error at line 343989, col 18: unknown token
</pre>
<p>Mmm. So what&#8217;s going on there?</p>
<pre style="margin-left:4em;">
<span style="color:#666666;">343974 </span>  extra<span style="color:#a52a2a;">-</span><span style="color:#ff00ff;">1.0</span><span style="color:#6a5acd;">:</span> <span style="color:#2e8b57;">!ruby</span>/<span style="color:#008b8b;">object</span><span style="color:#6a5acd;">:</span><span style="color:#008b8b;">Gem</span><span style="color:#6a5acd;">::</span>Specification
<span style="color:#666666;">343975 </span>    <span style="color:#008b8b;">name</span><span style="color:#6a5acd;">:</span> extra
<span style="color:#666666;">343976 </span>    <span style="color:#008b8b;">version</span><span style="color:#6a5acd;">:</span> <span style="color:#2e8b57;">!ruby</span>/<span style="color:#008b8b;">object</span><span style="color:#6a5acd;">:</span><span style="color:#008b8b;">Gem</span><span style="color:#6a5acd;">::</span>Version
<span style="color:#666666;">343977 </span>      <span style="color:#008b8b;">version</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">&#34;1.0&#34;</span>
<span style="color:#666666;">343978 </span>    <span style="color:#008b8b;">platform</span><span style="color:#6a5acd;">:</span> ruby
<span style="color:#666666;">343979 </span>    <span style="color:#008b8b;">authors</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">343980 </span>    <span style="color:#a52a2a;">-</span> Matthew Harris
<span style="color:#666666;">343981 </span>    <span style="color:#008b8b;">autorequire</span><span style="color:#6a5acd;">:</span> extra
<span style="color:#666666;">343982 </span>    <span style="color:#008b8b;">bindir</span><span style="color:#6a5acd;">:</span> bin
<span style="color:#666666;">343983 </span>    <span style="color:#008b8b;">cert_chain</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343984 </span>
<span style="color:#666666;">343985 </span>    <span style="color:#008b8b;">date</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">2006</span><span style="color:#a52a2a;">-</span><span style="color:#ff00ff;">05</span><span style="color:#a52a2a;">-</span><span style="color:#ff00ff;">10</span> <span style="color:#ff00ff;">11</span><span style="color:#6a5acd;">:</span><span style="color:#ff00ff;">00</span><span style="color:#6a5acd;">:</span><span style="color:#ff00ff;">00</span> <span style="color:#a52a2a;">-</span><span style="color:#ff00ff;">04</span><span style="color:#6a5acd;">:</span><span style="color:#ff00ff;">00</span>
<span style="color:#666666;">343986 </span>    <span style="color:#008b8b;">default_executable</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">343987 </span>    <span style="color:#008b8b;">dependencies</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343988 </span>
<span style="color:#666666;">343989 </span>    <span style="color:#008b8b;">description</span><span style="color:#6a5acd;">:</span> `ruby<span style="color:#a52a2a;">-</span>extra' is a package full of simple/fun/useful methods that are added to the
             core classes and modules of Ruby. It is quite similar to Facets but is still minimal.
<span style="color:#666666;">343990 </span>    <span style="color:#008b8b;">email</span><span style="color:#6a5acd;">:</span> shugotenshi@gmail.com
<span style="color:#666666;">343991 </span>    <span style="color:#008b8b;">executables</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343992 </span>
<span style="color:#666666;">343993 </span>    <span style="color:#008b8b;">extensions</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343994 </span>
<span style="color:#666666;">343995 </span>    <span style="color:#008b8b;">extra_rdoc_files</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343996 </span>
<span style="color:#666666;">343997 </span>    <span style="color:#008b8b;">files</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">343998 </span>
<span style="color:#666666;">343999 </span>    <span style="color:#008b8b;">has_rdoc</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">true</span>
<span style="color:#666666;">344000 </span>    <span style="color:#008b8b;">homepage</span><span style="color:#6a5acd;">:</span> <span style="color:#008b8b;">http</span><span style="color:#6a5acd;">:</span>//ruby<span style="color:#a52a2a;">-</span>extra.rubyforge.org
<span style="color:#666666;">344001 </span>    <span style="color:#008b8b;">post_install_message</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344002 </span>    <span style="color:#008b8b;">rdoc_options</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">344003 </span>
<span style="color:#666666;">344004 </span>    <span style="color:#008b8b;">require_paths</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344005 </span>    <span style="color:#a52a2a;">-</span> lib
<span style="color:#666666;">344006 </span>    <span style="color:#008b8b;">required_ruby_version</span><span style="color:#6a5acd;">:</span> <span style="color:#2e8b57;">!ruby</span>/<span style="color:#008b8b;">object</span><span style="color:#6a5acd;">:</span><span style="color:#008b8b;">Gem</span><span style="color:#6a5acd;">::</span>Requirement
<span style="color:#666666;">344007 </span>      <span style="color:#008b8b;">requirements</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344008 </span>      <span style="color:#a52a2a;">-</span> <span style="color:#a52a2a;">-</span> <span style="color:#ff00ff;">&#34;&#62;&#34;</span>
<span style="color:#666666;">344009 </span>        <span style="color:#a52a2a;">-</span> <span style="color:#2e8b57;">!ruby</span>/<span style="color:#008b8b;">object</span><span style="color:#6a5acd;">:</span><span style="color:#008b8b;">Gem</span><span style="color:#6a5acd;">::</span>Version
<span style="color:#666666;">344010 </span>          <span style="color:#008b8b;">version</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">0.0</span>.<span style="color:#ff00ff;">0</span>
<span style="color:#666666;">344011 </span>      <span style="color:#008b8b;">version</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344012 </span>    <span style="color:#008b8b;">required_rubygems_version</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344013 </span>    <span style="color:#008b8b;">requirements</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
<span style="color:#666666;">344014 </span>
<span style="color:#666666;">344015 </span>    <span style="color:#008b8b;">rubyforge_project</span><span style="color:#6a5acd;">:</span> ruby<span style="color:#a52a2a;">-</span>extra
<span style="color:#666666;">344016 </span>    <span style="color:#008b8b;">rubygems_version</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">1.3</span>.<span style="color:#ff00ff;">1</span>
<span style="color:#666666;">344017 </span>    <span style="color:#008b8b;">signing_key</span><span style="color:#6a5acd;">:</span>
<span style="color:#666666;">344018 </span>    <span style="color:#008b8b;">specification_version</span><span style="color:#6a5acd;">:</span> <span style="color:#ff00ff;">1</span>
<span style="color:#666666;">344019 </span>    <span style="color:#008b8b;">summary</span><span style="color:#6a5acd;">:</span> Adds useful methods to built<span style="color:#a52a2a;">-</span>in/core Ruby classes and modules.
<span style="color:#666666;">344020 </span>    <span style="color:#008b8b;">test_files</span><span style="color:#6a5acd;">:</span> <span style="color:#a52a2a;">[]</span>
</pre>
<p>Looks like that backtick might be causing problems. According to <a href="http://yaml.org/spec/1.1/#id870830">the specification</a>:</p>
<blockquote><p>
The “@”  (#40, at) and “`”  (#60, grave accent) are reserved for future use.
</p></blockquote>
<p>So libyaml and yaml-cpp are quite correct in barfing. Wonderful.</p>
<p>Next step: what generates that file, and how can we get it fixed?</p>
<p>Turns out the file is created by serialising a load of <code>Gem::Specification</code> objects. The serialisation is done by a library called <a href="http://whytheluckystiff.net/syck/">Syck</a>. Syck correctly escapes characters outside the safely printable range, but doesn&#8217;t care about <code>@</code> or <code>`</code>. Patch time!</p>
<p>But things are never that simple. Syck&#8217;s most recent release was in 2005. Even getting at the source is somewhat tricky. According to <a href="http://whytheluckystiff.net/syck/">Syck&#8217;s homepage</a>, the source is in CVS. I&#8217;ve deliberately purged all knowledge of CVS from my brain, but it looks like the most recent commit was in September 2005.</p>
<p>According to <a href="http://rubyforge.org/forum/forum.php?forum_id=4680">this news item from November 2005</a>, Syck is now in SVN instead. The link given 404s. Hunting around finds <a href="http://code.whytheluckystiff.net/">this</a>, and from there <a href="http://github.com/why/syck/tree/master">this</a>. After waiting for three and a half weeks for a <code>git fetch</code> (because Github is slooooooooooow), it seems that there&#8217;s at least some recent activity here.</p>
<p>But this isn&#8217;t the Syck used by Ruby. Ruby SVN includes its own copy of Syck. A quick look at the svn log shows that:</p>
<ul>
<li>Various fixes in the Syck on Github aren&#8217;t in Ruby&#8217;s copy.</li>
<li>Various fixes in Ruby&#8217;s copy, including at least one with security implications, aren&#8217;t fixed in the Syck on Github.</li>
<li>Neither has fixed the problem we care about.</li>
</ul>
<p>So at this point I&#8217;m more or less giving up. The Gems YAML file isn&#8217;t YAML at all, and can only be parsed by Syck, which is at best badly maintained in at least two different places, with no coordination between the two. Brilliant.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[beautiful way to convert a dictionary to a Hash in Ruby]]></title>
<link>http://dagobart.wordpress.com/2009/02/24/beautiful-way-to-convert-a-dictionary-to-a-hash-in-ruby/</link>
<pubDate>Tue, 24 Feb 2009 21:27:52 +0000</pubDate>
<dc:creator>dagobart</dc:creator>
<guid>http://dagobart.wordpress.com/2009/02/24/beautiful-way-to-convert-a-dictionary-to-a-hash-in-ruby/</guid>
<description><![CDATA[Currently, I am twiddling around with /var/lib/apt/lists/*Packages for a small project. Those /var/l]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Currently, I am twiddling around with <tt>/var/lib/apt/lists/*Packages</tt> for a small project. Those <tt>/var/lib/apt/lists/*Package</tt> files are about what Debian packages are available on a system. The files are used by <tt>aptitude</tt> too.</p>
<p>I saw a few Perl modules to deal with the Package files, though no Ruby one. A victim of <a href="http://dagobart.wordpress.com/2008/10/24/a-nobodys-position-on-debians-position-on-rubygems/">Debian&#8217;s Ruby/Ruby gems policy</a>? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>However, the structure of the package files is almost YAML, but not quite. Actually, the file is subdivided into blocks, separated by <tt>\n\n</tt> sequences. Each such block is almost a dictionary &#8212; each pair separated from each other by a newline, and a key as the first word in line, followed by a colon and a space, then the value. With one exception &#8212; the Description field may contain multiple lines as the value part of the pair, each contiguous line starting with a space.</p>
<p>Once you fix those contiguous lines of the Description field, it&#8217;s easy &#8212; but to create a Hash of what originally might have been a hash already cries for an elegant solution. And here it is&#8230; apeiros_ and zibba__ of the IRC #Ruby channel pointed out that bit:</p>
<blockquote><p><tt>[20:31:40] &#60;dagobart&#62; is there an easy way to convert a colon/newline separated hash to a Hash?<br />
[20:32:04] &#60;zibba__&#62; dagobart: can you paste some example input?<br />
[20:32:06] &#60;apeiros_&#62; you mean string?<br />
[20:32:08] &#60;dagobart&#62; (whereby the original is strings, coming from a file)<br />
[20:32:21] &#60;zibba__&#62; "key: value \n" ?<br />
[20:32:33] &#60;dagobart&#62; zibba__ yepp. that's it<br />
[20:32:38] &#60;apeiros_&#62; <strong>Hash[*string.split(/[:\n]/)]</strong><br />
[20:32:41] &#60;zibba__&#62; dagobart: there you go<br />
[20:32:58] &#60;dagobart&#62; apeiros_, zibba__ thank you:)<br />
[20:33:24] &#60;zibba__&#62; what does the * do with string?[20:33:38] &#60;apeiros_&#62; nothing<br />
[20:33:49] &#60;apeiros_&#62; precedence is:<br />
[20:33:55] &#60;apeiros_&#62; Hash[*(string.split(/[:\n]/))]<br />
[20:34:22] &#60;apeiros_&#62; and * for args means "expand to multiple args". e.g. foo(*[1,2,3]) is equivalent to foo(1,2,3)<br />
[20:35:19] &#60;dagobart&#62; apeiros_: cool construct<br />
[20:35:38] &#60;dagobart&#62; though I doubt I yet understand it fully<br />
[20:35:45] &#60;zibba__&#62; apeiros_: I learn something new all the time. I have never seen that construct.<br />
[20:35:59] &#60;zibba__&#62; dagobart: who needs understanding when you have a one liner...<br />
[20:36:01] &#60;apeiros_&#62; dagobart, take it apart, play with it. irb is your friend with that.<br />
[20:36:26] &#60;apeiros_&#62; zibba_, the point of being a 1 liner is moot<br />
[20:36:29] &#60;zibba__&#62; it's basically like Hash[key1, value1, key2, value2]<br />
[20:36:38] &#60;apeiros_&#62; but using only 2 method calls is quite nice.<br />
[20:37:56] &#60;dagobart&#62; apeiros_: now I get it -- I mistook :\n as symbol-\n<br />
[20:38:28] &#60;dagobart&#62; apeiros_: though it's obvious at second glance; it's a regex at all<br />
[20:38:57] &#60;dagobart&#62; ...has its beauty, that construct</tt></p></blockquote>
<p>As this might be not the solution everyone might come up with at once, I liked to share it. I hope it&#8217;s useful for you.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Parametrizando código Ruby com YAML]]></title>
<link>http://tiagoromero.wordpress.com/2009/02/21/parametrizando-codigo-ruby-com-yaml/</link>
<pubDate>Sat, 21 Feb 2009 12:27:41 +0000</pubDate>
<dc:creator>Tiago</dc:creator>
<guid>http://tiagoromero.wordpress.com/2009/02/21/parametrizando-codigo-ruby-com-yaml/</guid>
<description><![CDATA[Acho que a maioria dos programadores Java, assim como eu, sempre que vão aderir a uma nova tecnologi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">Acho que a maioria dos programadores Java, assim como eu, sempre que vão aderir a uma nova tecnologia, procuram abstrações similares às quais temos no mundo Java. </p>
<p style="text-align:justify;">Pois bem, me vi na necessidade de parametrizar um código escrito em Ruby. A primeira coisa que me veio na cabeça: <strong>ARQUIVO PROPERTIES</strong>! Seria maravilhoso se existisse em Ruby um conceito exatamente igual, de forma que não fosse necessário gastar muito tempo com isso.</p>
<p style="text-align:justify;">Foi aí que me deparei com o fato de que Ruby não tem um parser para arquivo properties! Pior que isso, nenhuma outra linguagem é obrigada a ter parser para arquivo properties, pois este tipo de arquivos foi criado no mundo Java! É claro que não é difícil de construir um no Ruby (mostrei uma implementação disso no post anterior <strong>10 boas práticas em Ruby WATIR,</strong> na <a href="http://tiagoromero.wordpress.com/2009/02/10/10-boas-praticas-em-ruby-watirvari/#boas9" target="_blank">Boa Prática 9 - Recuperar mensagens de arquivos de texto</a>), mas seria ideal se houvesse algum recurso similar nativo do Ruby&#8230;</p>
<p style="text-align:justify;">Então passei a conhecer YAML. YAML é mais uma daquelas siglas recursivas, e significa YAML Ain&#8217;t Markup Language. É uma especificação de um padrão de serialização de dados que seja amigável a humanos, e compatível com todas as linguagens de programação. Seu site oficial é <a href="http://www.yaml.org/">http://www.yaml.org/</a>.</p>
<p style="text-align:justify;">É um projeto muito bacana e simplório, tendo como objetivo fugir da complexidade das linguagens de marcação. Além disso, apresenta parsers para C/C++, Java, Python, Ruby, Perl, C#/.NET, PHP, Javascript, Actionscript e outros.</p>
<p style="text-align:justify;">E o melhor: em Ruby é incrivelmente fácil de se trabalhar com YAML! Veja só:</p>
<p style="text-align:justify;"><strong>a) Para carregar uma parametrização de um arquivo YAML em um dictionary:</strong></p>
<pre style="background-color:#ffffff;border:thin solid #000000;padding:5px;">require "yaml"

# (...)

  # This will load options.yml into config dictionary
  options_file = 'options.yml'
  config = YAML.load_file(options_file)

  # Now it has been loaded. This will get param1 parameter
  # into param1 variable.
  param1 = config['param1']</pre>
<p><strong>b) Para serializar dados de um dictionary e gravar em um arquivo YAML:</strong></p>
<pre style="background-color:#ffffff;border:thin solid #000000;padding:5px;">require "yaml"

# (...)

  config = {
    'param1' =&#62; 'value1',
    'param2' =&#62; 'value2',
    'param3' =&#62; 'value3'
  }

  File.open('options.yml', 'w') do &#124;out&#124;
    YAML.dump(config, out)
  end</pre>
<p style="text-align:justify;">Além disso, YAML pode também serializar dados de objetos, arrays, etc. E como possui parsers em diversas linguagens, agora ficou muito mais <strong>fácil </strong>e <strong>econômico </strong>para realizar serialização de dados entre sistemas construídos em linguagens diferentes, contrapondo o XML! YAML não causará o overhead causado por arquivos XML.</p>
<p style="text-align:justify;">É claro que YAML não tem todo o potencial de XML, pois é apenas um formato de serialização de dados. Outro contraponto é que YAML não possui parsers mais complexos como os parsers de XML em Java e .NET. Mas para muitos propósitos, YAML pode ser mais adequado que XML.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[What does Pee Wee Herman have to do with YAML?]]></title>
<link>http://romansandals.wordpress.com/2009/02/12/what-does-pee-wee-herman-have-to-do-with-yaml/</link>
<pubDate>Thu, 12 Feb 2009 01:14:32 +0000</pubDate>
<dc:creator>rchanter</dc:creator>
<guid>http://romansandals.wordpress.com/2009/02/12/what-does-pee-wee-herman-have-to-do-with-yaml/</guid>
<description><![CDATA[Indeed, I often feel that XML documents, when compared with equivalent YAML files, demonstrate all t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><blockquote><p>Indeed, I often feel that XML documents, when compared with equivalent YAML files,  demonstrate all the grace and calm reserve of a Pee-wee Herman chase scene (complete with  rope swing, speedboat, sleigh, and man in a Godzilla costume).</p></blockquote>
<p>That&#8217;s a quote from <a href="http://www.apress.com/book/view/9781590598214">this book</a> by <a href="http://www.bluetheta.com/">André  Ben Hamou</a>, and it&#8217;s pretty much exactly how I feel about data serialisation. YAML has become my go-to format for just about everything. Why I love YAML:</p>
<ul>
<li>It&#8217;s really easy to map out and visualise complex data structures, especially in languages like Perl where this can be a bit of a pain.</li>
<li>It&#8217;s completely cross-platform. so I can transport stuff between all the languages I write (yeah, OK, both of them if you don&#8217;t count 37 dialects of shell).</li>
<li>It&#8217;s safe &#8212; no eval required</li>
<li>Once your code is built to marshal/unmarshal using YAML, adding support for more formats (JSON, XML, language-native formats) is a piece of piss.</li>
</ul>
<p>I will never write a config file parser again, nor hinky semi-structured report formats.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SOL Meilenstein 3]]></title>
<link>http://ursingold.wordpress.com/2009/01/24/sol-meilenstein-3/</link>
<pubDate>Sat, 24 Jan 2009 20:31:54 +0000</pubDate>
<dc:creator>Urs</dc:creator>
<guid>http://ursingold.wordpress.com/2009/01/24/sol-meilenstein-3/</guid>
<description><![CDATA[Das Lernziel 1 lautete: &#8220;Auffrischen der CSS-Grundlagen und Kennenlernen des YAML-Frameworks]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Das Lernziel 1 lautete: &#8220;Auffrischen der CSS-Grundlagen und Kennenlernen des YAML-Frameworks&#8221;</p>
<p>Gemessen an der Zielerreichung verlief die erste Phase des SOL recht erfolgreich. Für das erste Lernziel hatte ich dank den Weihnachtsferien viel Zeit und konnte mich in CSS und YAML vertiefen. Für die nächsten Meilensteine muss ich aber knapper kalkulieren und mich stärker an die Ziele halten, d.h. weniger „abschweifen“, auch wenn es durchaus interessant wäre, den vielen Links zum Thema zu folgen.</p>
<p>Es hat sich wieder einmal gezeigt, dass ich eher ein Nachtmensch bin, fand doch das SOL vorwiegend nach Sonnenuntergang statt. Zudem lerne ich nicht gerne verteilt in „kleinen Häppchen“, sondern lieber vertieft in größeren Blöcken.</p>
<p>CSS ist faszinierend, da man quasi jeden Pixel der Webseite damit steuern kann (von den Launen der Browser einmal abgesehen). Und man kann lernen durch Ausprobieren und sieht sofort das Ergebnis, ähnlich wie beim Programmieren. Das liegt mir.</p>
<p><!--more-->Die vier Teilziele dieser Phase im Detail:</p>
<h4>Ziel 1 (meine CSS-Kenntnisse repetieren): Erreicht.</h4>
<p>Parallel zum SOL habe ich das Skript für einen dreitägigen HTML-/CSS-Kurs überarbeitet, den ich ab Februar als Weiterbildung für Geomatiker halten werde. Es war hilfreich, ein konkretes Ergebnis der Repetition vor Augen zu haben. Manchmal habe ich mich auch schlicht in den Möglichkeiten von CSS verloren und dabei mehr Zeit investiert als geplant.</p>
<p>Die Syntax von CSS ist zwar einfach, aber wegen der Vererbung von Styles (das „Cascading“) kann es rasch komplex werden. Bei der Analyse der Vererbung hat mir <a href="https://addons.mozilla.org/de/firefox/addon/1843" target="_blank">Firebug</a> sehr geholfen. Eine Eigenschaft von CSS, &#8220;float&#8221;, hat es besonders in sich: das Verhalten von Elementen auf einer Webseite wird damit rasch unkontrollierbar! Das Buch <a href="http://little-boxes.de" target="_blank">Little Boxes 1</a> fand ich dabei so hilfreich, so dass ich mich entschloss, auch den Folgeband zu kaufen. (Den zu lesen habe ich aus Zeitgründen aber noch nicht begonnen.)</p>
<h4>Ziel 2 (CSS-Framework YAML installieren und ausprobieren): Erreicht.</h4>
<p><a href="http://www.yaml.de/" target="_blank">YAML</a> ist sehr gut dokumentiert, und der <a href="http://builder.yaml.de/" target="_blank">YAML-Builder</a> erlaubt es, per Drag and Drop sein eigenes mehrspaltiges Layout zu gestalten, ohne CSS händisch einzugeben. Wirklich beeindruckend.</p>
<h4>Ziel 3 (einen Einblick in die YAML-Community im Web gewinnen): Nicht erreicht.</h4>
<p>Aus Zeitgründen habe ich nur die Online-Dokumentation auf <a href="http://www.yaml.de" target="_blank">www.yaml.de</a> studiert, aber sonst nicht nach Informationen im Web gesucht. Auch auf den Kauf des Buches von Dirk Jesse, dem Erfinder von YAML, habe ich bisher verzichtet (D. Jesse: CSS-Layout. Praxislösungen mit YAML. Galileo Press 2007).</p>
<h4>Ziel 4 (Vor- und Nachteile des YAML-Frameworks abschätzen): Teilweise erreicht.</h4>
<p>Einsicht: Mehrspaltige Layouts sind nicht &#8220;from scratch&#8221;, sondern nur mit Frameworks wie YAML zu schaffen! Vor allem nicht-CSS-konforme Browser (berüchtigt: IE 6) erschweren das Leben. YAML versucht mit diversen &#8220;Patches&#8221; die Fehler der Browser auszubügeln. Während die Vorteile von YAML somit auf der Hand liegen, sind mir die Schwächen des Frameworks noch nicht so klar. Da brauche ich noch mehr Einarbeitungszeit, um seine Grenzen auszuloten.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
