<?xml version="1.0" encoding="UTF-8"?> <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/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Jorge Iván Meza Martínez &#187; CSS</title> <atom:link href="http://blog.jorgeivanmeza.com/tag/css/feed/" rel="self" type="application/rss+xml" /><link>http://blog.jorgeivanmeza.com</link> <description>The Fire Within Me: &#34;knowledge will set you free&#34;</description> <lastBuildDate>Tue, 31 Jan 2012 18:18:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Primeros pasos con PhoneGap para Android</title><link>http://blog.jorgeivanmeza.com/2011/05/primeros-pasos-con-phonegap-para-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=primeros-pasos-con-phonegap-para-android</link> <comments>http://blog.jorgeivanmeza.com/2011/05/primeros-pasos-con-phonegap-para-android/#comments</comments> <pubDate>Sun, 29 May 2011 06:35:29 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Móvil]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Android]]></category> <category><![CDATA[AVD]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Eclipse]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PhoneGap]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=16695</guid> <description><![CDATA[Introducción. PhoneGap en pocas palabras es un framework para el desarrollo de aplicaciones móviles que posibilita a los desarrolladores a que implementen sus proyectos utilizando las tecnologías estándar de web: HTML5, CSS3 y Javascript, y este las convierte a aplicaciones &#8230; <a
href="http://blog.jorgeivanmeza.com/2011/05/primeros-pasos-con-phonegap-para-android/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p><a
href="http://www.phonegap.com/" target="_blank">PhoneGap</a> en pocas palabras es un <em>framework</em> para el desarrollo de aplicaciones móviles que posibilita a los desarrolladores a que implementen sus proyectos utilizando las tecnologías estándar de web: <strong>HTML5</strong>,<strong> CSS3</strong> y<strong> Javascript</strong>, y este las convierte a aplicaciones híbridas, es decir, aplicaciones nativas de las diferentes plataformas móviles existentes que tienen acceso a gran parte del API nativo.</p><div
id="attachment_16703" class="wp-caption aligncenter" style="width: 664px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/build2.png"><img
class="size-full wp-image-16703" title="build2" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/build2.png" alt="Tomado de http://www.phonegap.com/" width="654" height="250" /></a><p
class="wp-caption-text">Tomado de http://www.phonegap.com/</p></div><p
style="text-align: left;">Esto lo logra empaquetando la aplicación web original con un navegador basado en <a
href="http://www.webkit.org/" target="_blank">webkit</a> para desplegarla como si fuera una aplicación verdaderamente nativa.</p><p
style="text-align: left;">Actualmente este <em>framework</em> soporta seis de las principales plataformas móviles del mercado: iOS, Android, Blackberry, PalmOS, Windows Mobile y Symbian.  Para mas información acerca del estado actual del soporte en cada una de estas plataformas consultar las <a
href="http://www.phonegap.com/features" target="_blank">características soportadas</a>.</p><p
style="text-align: left;">Existen <a
href="https://secure.wikimedia.org/wikipedia/en/wiki/Multiple_phone_web_based_application_framework" target="_blank">otros <em>frameworks</em> similares</a> a este entre los que se destacan <a
href="http://www.appcelerator.com/" target="_blank">Appcelerator Titanium</a>, <a
href="http://www.mobl-lang.org/" target="_blank">Mobl</a> y <a
href="http://www.sencha.com/products/touch/" target="_blank">Sencha Touch</a> de los cuales espero estar escribiendo mas adelante.</p><p
style="text-align: left;">En este artículo se describirá el proceso de instalación de PhoneGap, la creación de un proyecto base para el desarrollo con este <em>framework</em> y la elaboración de un ejemplo simple.</p><h2 style="text-align: left;">Instalar PhoneGap.</h2><p
style="text-align: left;">Descargar la última versión disponible del <em>framework</em> desde la siguiente ubicación.</p><p
style="text-align: left; padding-left: 30px;"><a
href="https://code.google.com/p/phonegap/downloads/list" target="_blank">https://code.google.com/p/phonegap/downloads/list</a></p><p
style="text-align: left;">Para efectos de la documentación se utilizará la versión <span
style="font-family: courier new,courier;">0.9.5.1</span> que corresponde con las mas reciente para esta fecha.</p><p
style="text-align: left;"><span
style="font-family: courier new,courier;">$ wget http://phonegap.googlecode.com/files/phonegap-0.9.5.1.zip</span></p><p
style="text-align: left;">Se descomprime el paquete recién descargado y se mueve a su ubicación final.</p><p
style="text-align: left;"><span
style="font-family: courier new,courier;">$ unzip phonegap-0.9.5.1.zip</span></p><p
style="text-align: left;"><span
style="font-family: courier new,courier;">$ mkdir ~/phonegap</span></p><p
style="text-align: left;"><span
style="font-family: courier new,courier;">$ mv phonegap-0.9.5.1 ~/phonegap/0.9.5.1</span></p><h2 style="text-align: left;">Crear la plantilla base de un proyecto Android.</h2><p
style="text-align: left;">A continuación se relacionan los pasos que se deben realizar para crear un proyecto PhoneGap para Android utilizando <a
href="http://blog.jorgeivanmeza.com/2011/05/instalar-eclipse-y-el-plugin-adt-en-gnulinux/" target="_blank">Eclipse y el <em>plugin</em> ADT</a> instalados anteriormente.</p><p
style="text-align: left;">Iniciar Eclipse y crear un nuevo proyecto a través del menú <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Android Project</strong>.</p><div
id="attachment_16712" class="wp-caption aligncenter" style="width: 617px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Menu_007.png"><img
class="size-full wp-image-16712" title="Menu_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Menu_007.png" alt="Crear un nuevo proyecto Android" width="607" height="159" /></a><p
class="wp-caption-text">Crear un nuevo proyecto Android</p></div><p
style="text-align: left;">En el diálogo de información del proyecto a crearse especificar al menos los siguientes campos y presione el botón <strong>Finish</strong> para continuar.</p><ol><li>Nombre del proyecto (<em>project name</em>).</li><li>API de Android a utilizarse (<em>build target</em>).  En este caso se utilizará el API 2.2.</li><li>Nombre de la aplicación (<em>application name</em>).</li><li>Crear una actividad (<em>create activity</em>).</li></ol><div
id="attachment_16713" class="wp-caption aligncenter" style="width: 535px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/New-Android-Project-_007.png"><img
class="size-full wp-image-16713" title="New Android Project _007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/New-Android-Project-_007.png" alt="Información básica del proyecto Android" width="525" height="767" /></a><p
class="wp-caption-text">Información básica del proyecto Android</p></div><p>En el Explorador de Paquetes (<em>package explorer</em>)  de Eclipse crear bajo el proyecto una carpeta <span
style="font-family: courier new,courier;">/assets/www</span> y otra <span
style="font-family: courier new,courier;">/libs</span>.</p><p
style="text-align: left;">Copiar en la carpeta <span
style="font-family: courier new,courier;">/assets/www</span> el archivo <span
style="font-family: courier new,courier;">phonegap.0.9.5.1.js</span> y copiar en <span
style="font-family: courier new,courier;">/libs</span> el archivo <span
style="font-family: courier new,courier;">phonegap.0.9.5.1.jar</span>.  Ambos archivos se encuentran bajo el directorio <span
style="font-family: courier new,courier;">~/phonegap/0.9.5.1/Android</span> creado durante el paso de instalación anterior.</p><div
id="attachment_16714" class="wp-caption aligncenter" style="width: 255px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0074.png"><img
class="size-full wp-image-16714" title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0074.png" alt="Estructura del proyecto Android" width="245" height="305" /></a><p
class="wp-caption-text">Estructura del proyecto Android</p></div><p>Hacer clic derecho sobre el directorio <span
style="font-family: courier new,courier;">/libs</span> y seleccionar el menú <strong>Build Path</strong> &gt; <strong>Configure Build Path&#8230;</strong> Allí en la pestaña <strong>Libraries</strong> agregue la referencia a <span
style="font-family: courier new,courier;">/libs/phonegap.0.9.5.1.jar</span> presionando el botón <strong>Add JARs&#8230;</strong></p><div
id="attachment_16715" class="wp-caption aligncenter" style="width: 763px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0075.png"><img
class="size-full wp-image-16715" title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0075.png" alt="Agregar al proyecto la referencia al JAR de PhoneGap." width="753" height="232" /></a><p
class="wp-caption-text">Agregar al proyecto la referencia al JAR de PhoneGap.</p></div><p>Realizar las siguientes modificaciones al código fuente de la actividad.  Este archivo se ubica bajo la carpeta <span
style="font-family: courier new,courier;">/src</span> del proyecto (<span
style="font-family: courier new,courier;">/src/com.jimezam.phonegap.demo/App.java</span> en este caso).</p><ol><li>Reemplazar la línea 3 (<span
style="font-family: courier new,courier;">import android.app.Activity;</span>) con la siguiente: <span
style="font-family: courier new,courier;">import com.phonegap.*;</span></li><li>En la línea 6 cambiar la superclase de <span
style="font-family: courier new,courier;">App</span> de <span
style="font-family: courier new,courier;">Activity</span> a <span
style="font-family: courier new,courier;">DroidGap</span>.</li><li>Reemplazar la línea 11 (<span
style="font-family: courier new,courier;">setContentView(R.layout.main);</span>) con la siguiente: <span
style="font-family: courier new,courier;">super.loadUrl("file:///android_asset/www/index.html");</span></li></ol><div
class="mceTemp mceIEcenter" style="text-align: left;"><dl
id="attachment_16716" class="wp-caption aligncenter" style="width: 741px;"><dt
class="wp-caption-dt"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0076.png"><img
class="size-full wp-image-16716 " title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0076.png" alt="Modificaciones a la actividad inicial." width="731" height="230" /></a></dt><dd
class="wp-caption-dd">Modificaciones a la actividad inicial.</dd></dl></div><p>Hacer clic derecho sobre el archivo <span
style="font-family: courier new,courier;">AndroidManifest.xml</span> y seleccionar el menú <strong>Open With&#8230;</strong> &gt; <strong>Text Editor</strong>.  A este documento realizar las siguientes modificaciones.</p><p>1. Agregar el siguiente texto entre la apertura de la etiqueta <span
style="font-family: courier new,courier;">&lt;manifest&gt;</span> y la apertura de la etiqueta <span
style="font-family: courier new,courier;">&lt;application&gt;</span>.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">&lt;supports-screens</span><br
/> <span
style="font-family: courier new,courier;"> android:largeScreens="true"</span><br
/> <span
style="font-family: courier new,courier;"> android:normalScreens="true"</span><br
/> <span
style="font-family: courier new,courier;"> android:smallScreens="true"</span><br
/> <span
style="font-family: courier new,courier;"> android:resizeable="true"</span><br
/> <span
style="font-family: courier new,courier;"> android:anyDensity="true"</span><br
/> <span
style="font-family: courier new,courier;"> /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.CAMERA" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.VIBRATE" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.INTERNET" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.RECEIVE_SMS" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.READ_CONTACTS" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.WRITE_CONTACTS" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;</span></p><p>2. Agregar el siguiente atributo a la etiqueta <span
style="font-family: courier new,courier;">&lt;activity&gt;</span>.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">android:configChanges="orientation|keyboardHidden"</span></p><div
id="attachment_16717" class="wp-caption aligncenter" style="width: 732px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0077.png"><img
class="size-full wp-image-16717 " title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0077.png" alt="Modificaciones al documento AndroidManifest.xml." width="722" height="615" /></a><p
class="wp-caption-text">Modificaciones al documento AndroidManifest.xml.</p></div><p>Finalmente crear el archivo <span
style="font-family: courier new,courier;">/assets/www/index.html</span> con el código fuente para la demostración.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">&lt;!DOCTYPE HTML&gt;</span><br
/> <span
style="font-family: courier new,courier;">&lt;html&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;head&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;title&gt;PhoneGap demostration with Android&lt;/title&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;script type="text/javascript" charset="utf-8" src="phonegap.js"&gt;&lt;/script&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;/head&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;body&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;h1&gt;Hello Android's World with PhoneGap&lt;/h1&gt;</span><br
/> <span
style="font-family: courier new,courier;"> &lt;/body&gt;</span><br
/> <span
style="font-family: courier new,courier;">&lt;/html&gt;</span></p><h2>Ejecutar el proyecto en el emulador.</h2><p>Seleccionar el menú <strong>Run</strong> &gt; <strong>Run As</strong> &gt; <strong>Android Application</strong>.</p><div
id="attachment_16720" class="wp-caption aligncenter" style="width: 708px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Java-Eclipse-_007.png"><img
class="size-full wp-image-16720" title="Java - Eclipse _007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Java-Eclipse-_007.png" alt="Ejecutar como aplicación Android." width="698" height="216" /></a><p
class="wp-caption-text">Ejecutar como aplicación Android.</p></div><p>Estos son un par de ejemplos de aplicaciones web simples ejecutándose con PhoneGap en el emulador de Android.</p><table
style="margin: auto;"><tbody><tr><td><p><div
id="attachment_16721" class="wp-caption aligncenter" style="width: 343px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0078.png"><img
class="size-full wp-image-16721" title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0078.png" alt="Hola Mundo web con Android" width="333" height="494" /></a><p
class="wp-caption-text">Hola Mundo web con Android</p></div></td><td><p><div
id="attachment_16722" class="wp-caption aligncenter" style="width: 344px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0082.png"><img
class="size-full wp-image-16722" title="Selection_008" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_0082.png" alt="The Simple List 0.1" width="334" height="495" /></a><p
class="wp-caption-text">The Simple List 0.1</p></div></td></tr></tbody></table><h2>Enlaces.</h2><ul><li>PhoneGap.<br
/> <a
href="http://www.phonegap.com/" target="_blank">http://www.phonegap.com/</a></li><li>PhoneGap get starter guide.<br
/> <a
href="http://www.phonegap.com/start#android" target="_blank">http://www.phonegap.com/start#android</a></li><li>PhoneGap, Android and Eclipse quickstart.<br
/> <a
href="http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart" target="_blank">http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart</a></li><li>PhoneGap documentation directory.<br
/> <a
href="http://wiki.phonegap.com/w/page/35502422/Documentation-Directory" target="_blank">http://wiki.phonegap.com/w/page/35502422/Documentation-Directory</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2011/05/primeros-pasos-con-phonegap-para-android/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Aplicación para el 6CCC: nuevo estilo para la programación</title><link>http://blog.jorgeivanmeza.com/2011/05/aplicacion-para-el-6ccc-nuevo-estilo-para-la-programacion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aplicacion-para-el-6ccc-nuevo-estilo-para-la-programacion</link> <comments>http://blog.jorgeivanmeza.com/2011/05/aplicacion-para-el-6ccc-nuevo-estilo-para-la-programacion/#comments</comments> <pubDate>Sat, 14 May 2011 03:05:24 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[scraping]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=16145</guid> <description><![CDATA[Introducción. Esta es una aplicación muy sencilla que se desarrolló en PHP para el sexto Congreso Colombiano de Computación.  Todo comenzó cuando no me resultó cómoda la manera como el sitio web desplegaba la programación del evento: por bloques de &#8230; <a
href="http://blog.jorgeivanmeza.com/2011/05/aplicacion-para-el-6ccc-nuevo-estilo-para-la-programacion/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>Esta es una aplicación muy sencilla que se desarrolló en PHP para el <a
href="http://www.6ccc.org/" target="_blank">sexto Congreso Colombiano de Computación</a>.  Todo comenzó cuando no me resultó cómoda la manera como el sitio web desplegaba la programación del evento: por bloques de auditorios siendo las filas conferencias y las columnas los días de las mismas.</p><div
id="attachment_16146" class="wp-caption aligncenter" style="width: 727px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_007.png"><img
class="size-large wp-image-16146  " title="Selection_007" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_007-1024x502.png" alt="Programación del 6CCC (versión original)" width="717" height="351" /></a><p
class="wp-caption-text">Programación del 6CCC (versión original)</p></div><p>Este estilo de presentación no es conveniente ya que no me permite visualizar fácilmente que conferencias se están realizando en un momento dado para poder decidir a cual de ellas asisto, es decir, el estilo idóneo de presentación de las conferencias debería ser en el que cada bloque representa un día del evento, cada fila un rango de tiempo específico y cada columna un auditorio donde se estén realizando las conferencias.  De esta manera, una vez ubicado el rango de tiempo que se desea consultar sólo será necesario revisar las columnas para determinar las conferencias a las que se puede asistir.</p><p>Ya que manipular manualmente esta información  para poder determinar cuales eran las conferencias que quería ver era demasiado engorroso decidi implementar una solución computacional muy simple.  Inicialmente la iba a desarrollar en Javascript por completo manipulando el árbol DOM pero me dí cuenta que podría serle de utilidad a otras personas también y preferí no sobrecargar al navegador del cliente con las operaciones de transformación del contenido del programa.  El resultado final fue el siguiente.</p><p
style="text-align: center;">&nbsp;</p><div
id="attachment_16148" class="wp-caption aligncenter" style="width: 475px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_008.png"><img
class="size-full wp-image-16148 " title="Selection_008" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/05/Selection_008.png" alt="Programación del 6CCC (versión mejorada)" width="465" height="395" /></a><p
class="wp-caption-text">Programación del 6CCC (versión mejorada)</p></div><h2>El prototipo.</h2><p>Las premisas eran las siguientes.</p><ul><li>No sobrecargar al cliente con cálculos en Javascript para facilitar la consulta desde móviles.</li><li>No requerir que se ingrese la información de la programación nuevamente, se debería tomar de la programación existente directamente.</li><li>Actualizarse automáticamente a la par de la programación original (esta última debería respetar su estructura HTML).</li><li>Facilitar la lectura de la información.</li><li>Facilitar la consulta de las conferencias presentándose en un momento específico del día y cuales se están presentando en este mismo momento.</li><li>Permitir la personalización de la presentación (esto se obtuvo mediante la implementación de una vista independiente de la lógica de procesamiento y de clases CSS).</li></ul><p>El prototipo se implementó en PHP sin ningún tipo de <em>framework</em> especializado y utilizando la técnica de <em><a
href="http://en.wikipedia.org/wiki/Web_scraping" target="_blank">web scraping</a></em> para obtener directamente la información de la página web original de la programación, de ahí que fuera necesario que esta respetara su estructura HTML durante las actualizaciones.  Para esto se utilizó la librería <a
href="http://code.google.com/p/phpquery/" target="_blank">phpQuery</a> la cual permite entre otras cosas obtener secciones de código HTML mediante rutas de selectores CSS de manera <em>similar</em> a jQuery.</p><h2>Conclusiones.</h2><ul><li>El uso de phpQuery para las necesidades del prototipo no fue tan simple ni intuitivo como lo es el uso de jQuery, sin embargo una vez entendida su implementación, permitió desarrollar la funcionalidad necesaria.</li><li>La programación original contaba con múltiples inconsistencias: diferentes formatos de fecha, la presencia de un día adicional en la programación general, la presencia de las temáticas generales de los bloques de conferencias en el mismo contenido de las conferencias, conferencias sin hora específica y, filas y columnas vacías para generar espacios en las tablas.  Por este motivo el prototipo incluye varias validaciones para solventar estos problemas que dificultan la adquisición de la información.</li><li>El prototipo toma la fecha y hora del sistema para determinar las conferencias que se están presentando actualmente (tanto para resaltarlas en el listado como para mostrarlas al inicio de la programación).  No se tuvieron en cuenta diferencias en la zona horaria.</li><li>El prototipo no pudo ser incluído en el sitio web del congreso ya que fue desarrollado utilizando PHP 5.3 (utiliza una función anónima en PHP) mientras que el <em>hosting </em>utilizado por la página era 5.2 y no se contaba con la información necesaria para <a
href="http://blog.jorgeivanmeza.com/2008/03/funciones-anonimas-en-php/" target="_blank">convertir la sintáxis de la función anónima al estilo antiguo</a>.</li><li>El código fuente del prototipo fue liberado bajo la licencia <a
href="http://creativecommons.org/licenses/by/3.0/" target="_blank">Creative Commons Attribution 3.0</a>.</li></ul><h2>Enlaces.</h2><ul><li>Demostración del prototipo, versión 0.1.<br
/> <a
href="http://demo.jorgeivanmeza.com/PHP/6CCCProg/0.1/" target="_blank">http://demo.jorgeivanmeza.com/PHP/6CCCProg/0.1/</a></li><li>Obtener el código fuente del prototipo.<br
/> <a
href="http://demo.jorgeivanmeza.com/PHP/6CCCProg/" target="_blank">http://demo.jorgeivanmeza.com/PHP/6CCCProg/</a></li><li>Librería phpQuery.<br
/> <a
href="http://code.google.com/p/phpquery/" target="_blank">http://code.google.com/p/phpquery/</a></li><li>Sexto Congreso Colombiano de Computación (6CCC).<br
/> <a
href="http://www.6ccc.org/" target="_blank">http://www.6ccc.org/</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2011/05/aplicacion-para-el-6ccc-nuevo-estilo-para-la-programacion/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Give Me a Tweet, versión 1.0</title><link>http://blog.jorgeivanmeza.com/2011/04/give-me-a-tweet-version-1-0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=give-me-a-tweet-version-1-0</link> <comments>http://blog.jorgeivanmeza.com/2011/04/give-me-a-tweet-version-1-0/#comments</comments> <pubDate>Sat, 23 Apr 2011 23:32:54 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Blueprint]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[CURL]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[qrcode]]></category> <category><![CDATA[REST]]></category> <category><![CDATA[Sqlite]]></category> <category><![CDATA[traducción]]></category> <category><![CDATA[Twitter]]></category> <category><![CDATA[urlshortener]]></category> <category><![CDATA[Yii]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=15575</guid> <description><![CDATA[Introducción. Preparé el prototipo de esta aplicación web muy simple para experimentar con algunas librerías que tenía por revisar, que a pesar de ser muy sencillas de utilizar es bueno ir conociendo para determinar mas adelante cual de todas las &#8230; <a
href="http://blog.jorgeivanmeza.com/2011/04/give-me-a-tweet-version-1-0/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/04/blue_bird-mirror.png"><img
class="alignleft size-thumbnail wp-image-15576" title="blue_bird-mirror" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/04/blue_bird-mirror-150x150.png" alt="" width="90" height="90" /></a>Preparé el prototipo de esta aplicación web muy simple para experimentar con algunas librerías que tenía por revisar, que a pesar de ser muy sencillas de utilizar es bueno ir conociendo para determinar mas adelante cual de todas las disponibles es la idónea.</p><p>Esta es de manera resumida la funcionalidad del prototipo.</p><ul><li>Obtiene cierta cantidad de tweets de ciertos usuarios predefinidos.</li><li>Los tweets son alamcenados en caché por una cantidad específica de tiempo.</li><li>El acceso a la página no requiere de ningún tipo de autenticación por parte del usuario.</li><li>Cuando el usuario accede al sitio web, el sistema elige un tweet azar y lo muestra.</li><li>La elección del tweet se realiza sobre los almacenados en el caché.  Si no hay caché o este es demasiado viejo, entonces se renueva automáticamente.</li><li>Los mensajes que no se encuentran escritos en español son traducidos automáticamente a este idioma.</li><li>Se prepara un enlace corto a la información del tweet.</li><li>Se presenta un QRCode con el enlace corto al tweet para ser fácilmente consultado por dispositivos móviles.</li></ul><h2>Herramientas.</h2><p>Estas fueron las herramientas utilizadas durante el desarrollo del prototipo.</p><ol><li>Netbeans (IDE).</li><li>SQLite (persistencia del caché).</li><li>Blueprint CSS Framework (<em>framework</em> para la presentación).</li><li>PHP (lenguaje de programación).</li><li>Yii PHP Framework (<em>framework</em> de desarrollo web).</li><li>Extensión de CURL para Yii (acceder al servicio REST fácilmente).</li><li>API REST de Twitter (obtener los mensajes).</li><li>Google Translate Service (servicio de traducción de textos).</li><li>jquery-qrcode para la generación de los códigos QR.</li><li>jquery-urlshortener que utiliza el servicio de bit.ly (acortador de URLs).</li></ol><h2>Prototipo.</h2><p
style="text-align: center;">&nbsp;</p><div
id="attachment_15578" class="wp-caption aligncenter" style="width: 585px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/04/Selection_002.png"><img
class="size-full wp-image-15578  " title="Selection_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/04/Selection_002.png" alt="Prototipo de Give Me a Tweet" width="575" height="456" /></a><p
class="wp-caption-text">Prototipo de Give Me a Tweet</p></div><h2>Instalación.</h2><p>El código fuente del protitpo puede obtenerse desde la siguiente ubicación.</p><p
style="padding-left: 30px;"><a
href="https://github.com/jimezam/Give-Me-a-Tweet/tree/v1.0" target="_blank">https://github.com/jimezam/Give-Me-a-Tweet/tree/v1.0</a></p><p>Para la ejecución de la aplicación web se requiere que se cuente además de la infraestructura web, con PHP con soporte para SQLite y CURL, y la distribución del Yii PHP Framework (1.1.7 o similar) en una ubicación conocida.</p><p>Finalmente se deberán modificar los siguientes archivos para ajustarlos a la infraestructura local.</p><p><span
style="font-family: 'courier new', courier;">index.php:</span></p><p
style="padding-left: 30px;"><span
style="font-family: 'courier new', courier;">$yii=dirname(__FILE__).'<strong>/../../yii-1.1.7.r3135</strong>/framework/yii.php';</span><br
/> <span
style="font-family: 'courier new', courier;">$config=dirname(__FILE__).'/protected/config/main.php';</span></p><p>Ajustar estas rutas a la ubicación real del <em>framework</em>.</p><p><span
style="font-family: 'courier new', courier;">protected/views/tweet/show.php:</span></p><p
style="padding-left: 30px;"><span
style="font-family: 'courier new', courier;">$.shortenUrl.settings.login  = '<strong>USUARIO</strong>'; </span><br
/> <span
style="font-family: 'courier new', courier;">$.shortenUrl.settings.apiKey = '<strong>LLAVE DEL API</strong>';</span></p><p>Modificar estos valores para que correspondan con la información del propietario del servicio.  Esta información se puede obtener de manera gratuita en el <a
href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation#Authentication_and_Shared_Parameters" target="_blank">sitio web de <em>bit.ly</em> para desarrolladores</a>.</p><p><span
style="font-size: 20px; font-weight: bold;">Enlaces.</span></p><ul><li>Netbeans.<br
/> <a
href="http://netbeans.org/">http://netbeans.org/</a></li><li><a
href="http://netbeans.org/"></a>SQLite.<br
/> <a
href="http://sqlite.org/">http://sqlite.org/</a></li><li>jQuery.<br
/> <a
href="http://jquery.org/">http://jquery.org/</a></li><li>Blueprint CSS Framework.<br
/> <a
href="http://www.blueprintcss.org/">http://www.blueprintcss.org/</a></li><li><a
href="http://sqlite.org/"></a>PHP.<br
/> <a
href="http://php.net/">http://php.net/</a></li><li><a
href="http://php.net/"></a>Yii PHP Framework.<br
/> <a
href="http://www.yiiframework.com/">http://www.yiiframework.com/</a></li><li><a
href="http://www.yiiframework.com/"></a> Extensión CURL para Yii.<br
/> <a
href="http://www.yiiframework.com/extension/curl/">http://www.yiiframework.com/extension/curl/</a></li><li><a
href="http://www.yiiframework.com/extension/curl/"></a>Introduction to developing with @twitterapi.<br
/> <a
href="http://dev.twitter.com/pages/intro-to-twitterapi">http://dev.twitter.com/pages/intro-to-twitterapi</a></li><li><a
href="http://dev.twitter.com/pages/intro-to-twitterapi"></a>Twitter, get statuses and user timeline.<br
/> <a
href="http://dev.twitter.com/doc/get/statuses/user_timeline">http://dev.twitter.com/doc/get/statuses/user_timeline</a></li><li><a
href="http://dev.twitter.com/doc/get/statuses/user_timeline"></a>Plugin<span
style="font-family: 'courier new', courier;"> jquery.qrcode.js</span>.<br
/> <a
href="http://jeromeetienne.github.com/jquery-qrcode/">http://jeromeetienne.github.com/jquery-qrcode/</a></li><li>Plugin <span
style="font-family: 'courier new', courier;">jquery-urlshortener</span>.<br
/> <a
href="https://bitbucket.org/jiaaro/jquery-urlshortener/wiki/Home" target="_blank"> https://bitbucket.org/jiaaro/jquery-urlshortener/wiki/Home</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2011/04/give-me-a-tweet-version-1-0/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Como personalizar la barra de idiomas en Drupal 6</title><link>http://blog.jorgeivanmeza.com/2009/08/como-personalizar-la-barra-de-idiomas-en-drupal-6/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-personalizar-la-barra-de-idiomas-en-drupal-6</link> <comments>http://blog.jorgeivanmeza.com/2009/08/como-personalizar-la-barra-de-idiomas-en-drupal-6/#comments</comments> <pubDate>Wed, 19 Aug 2009 22:24:15 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Drupal]]></category> <category><![CDATA[Hipergalaxia]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=1988</guid> <description><![CDATA[Introducción. Después de instalar y configurar los módulos para mantener las traducciones del contenido en el portal basado en Drupal 6, el siguiente paso era crear la barra de banderas que permitiera cambiar fácilmente entre los distintos idiomas del portal. &#8230; <a
href="http://blog.jorgeivanmeza.com/2009/08/como-personalizar-la-barra-de-idiomas-en-drupal-6/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>Después de <a
href="http://blog.jorgeivanmeza.com/2009/08/mejorando-la-creacion-de-contenido-traducido-con-drupal-6/" target="_blank">instalar y configurar los módulos</a> para mantener las traducciones del contenido en el portal basado en Drupal 6, el siguiente paso era crear la barra de banderas que permitiera cambiar fácilmente entre los distintos idiomas del portal.</p><p><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2009/08/BarraIdiomas.png"><img
class="aligncenter size-full wp-image-1989" title="BarraIdiomas" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2009/08/BarraIdiomas.png" alt="BarraIdiomas" width="392" height="27" /></a></p><h2>Procedimiento.</h2><ol><li>Instalar el módulo Consistent Language Interface que provee al bloque Consistent Language Interface block (<span
style="font-family: courier new,courier;">languageinterface</span>).<br
/> <a
href="http://drupal.org/project/languageinterface" target="_blank">http://drupal.org/project/languageinterface</a></li><li
class="php">Editar <span
style="font-family: courier new,courier;">page.tpl.php</span> e incluír el siguiente fragmento de código donde se desea la barra de banderas.<pre class="php">&lt;?php
    $flags = module_invoke('languageinterface', 'block', 'view', 0);
    print $flags['content'];
?&gt;</pre></li><li
class="php">Personalice la presentación de la barra con CSS ya que su estructura es básicamente una lista no ordenada.  Para establecer la distribución horizontal como la de la imagen propuesta, agregue el siguiente código en la hoja de estilos del tema.<pre class="css">#language-interface
{
    padding: 0;
    margin: 0;
}
#language-interface li
{
    display: inline;
    list-style-type: none;
    padding: 0;
    margin: 0px 5px 0px 0px;
    height: 12px;
}</pre></li><li
class="php">Si desea puede además establecer estilos particulares para cada idioma, la clase CSS deberá llamarse igual que el código del idioma.  Además es posible resaltar al idioma actual utilizando la clase <span
style="font-family: courier new,courier;">active</span>.</li></ol><h2>Enlaces.</h2><ul><li>Consistent Language Interface.<br
/> <a
href="http://drupal.org/project/languageinterface" target="_blank">http://drupal.org/project/languageinterface</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2009/08/como-personalizar-la-barra-de-idiomas-en-drupal-6/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Remover estilos CSS por defecto</title><link>http://blog.jorgeivanmeza.com/2009/06/remover-estilos-css-por-defecto/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=remover-estilos-css-por-defecto</link> <comments>http://blog.jorgeivanmeza.com/2009/06/remover-estilos-css-por-defecto/#comments</comments> <pubDate>Mon, 29 Jun 2009 03:08:08 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Hipergalaxia]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=1819</guid> <description><![CDATA[Introducción. El primer paso para desarrollar cualquier interfaz de usuario basada en HTML debería ser el remover los estilos introducidos por defecto por el navegador web, con esto podríamos estar [un poco mas] seguros que los estilos implementados van a &#8230; <a
href="http://blog.jorgeivanmeza.com/2009/06/remover-estilos-css-por-defecto/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>El primer paso para desarrollar cualquier interfaz de usuario basada en HTML debería ser el remover los estilos introducidos por defecto por el navegador web, con esto podríamos estar [un poco mas] seguros que los estilos implementados van a tener un igual comportamiento entre los diferentes tipos de navegadores web.</p><p>Hacer esto es muy fácil, sólo es necesario incluír el siguiente estilo provisto por Yahoo! al inicio de la hoja de estilos principal (la primera que se carga).</p><pre style="overflow: scroll; margin-bottom: 30px;">/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}</pre><p>Otra forma de hacerlo es simplemente hacer una referencia a esta hoja de estilos desde los servidores de Yahoo!.</p><pre class="javascript">&lt;link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/reset-fonts-grids/reset-fonts-grids.css"&gt;</pre><h2>Enlaces.</h2><ul><li>YUI Reset CSS.<br
/> <a
href="http://developer.yahoo.com/yui/reset/" target="_blank">http://developer.yahoo.com/yui/reset/</a></li><li>Basic Test Suite for YUI Reset.<br
/> <a
href="http://developer.yahoo.com/yui/examples/reset/reset-simple.html" target="_blank">http://developer.yahoo.com/yui/examples/reset/reset-simple.html</a></li><li>Using reset stylesheets.<br
/> <a
href="http://www.webmonkey.com/tutorial/Using_Reset_Stylesheets" target="_blank">http://www.webmonkey.com/tutorial/Using_Reset_Stylesheets</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2009/06/remover-estilos-css-por-defecto/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>La típica distribución de una página web</title><link>http://blog.jorgeivanmeza.com/2008/10/la-tipica-distribucion-de-una-pagina-web/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-tipica-distribucion-de-una-pagina-web</link> <comments>http://blog.jorgeivanmeza.com/2008/10/la-tipica-distribucion-de-una-pagina-web/#comments</comments> <pubDate>Mon, 13 Oct 2008 05:20:31 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[XHTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=797</guid> <description><![CDATA[Esta es la distribución típica de una página web.  Esta compuesta por los siguientes elementos. Cabecera. Columna izquierda. Contenido central. Columna derecha. Pies. De acuerdo con los estándares actuales, es preferible utilizar divs en lugar de tables (donde sea humanamente &#8230; <a
href="http://blog.jorgeivanmeza.com/2008/10/la-tipica-distribucion-de-una-pagina-web/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<div
id="attachment_798" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/distribucion_tipica.png"><img
class="size-full wp-image-798" title="distribucion_tipica" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/distribucion_tipica.png" alt="Distribución típica de una página web" width="500" height="374" /></a><p
class="wp-caption-text">Distribución típica de una página web</p></div><p>Esta es la distribución típica de una página web.  Esta compuesta por los siguientes elementos.</p><ul><li>Cabecera.</li><li>Columna izquierda.</li><li>Contenido central.</li><li>Columna derecha.</li><li>Pies.</li></ul><p>De acuerdo con los estándares actuales, es preferible utilizar <em>div</em>s en lugar de <em>table</em>s (donde sea humanamente posible) ya que el documento HTML debería encargarse de definir el <strong>contenido</strong> mientras que a través de la definición de estilos (CSS) se debería establecer la <strong>presentación</strong>, es decir, como se ordena y distribuye el contenido a lo largo y ancho de la página web.</p><p>Como lo he mencionado en otras ocasiones para mi CSS es todavía una ciencia oculta, hay muchas cosas que frecuentemente se me enrredan cuando utilizo CSS.  Sin embargo ultimamente lo he estado utilizando un poco mas y he adquirido mas práctica y cada vez me siento mas a gusto con utilizándolo.</p><p>Ahora implementar este diseño es algo sencillo para mi &#8230; bueno, casi.</p><p>Parto de la siguiente estructura de contenido.</p><pre lang='html'>        &lt;div id='pagina'&gt;
            &lt;div id='cabecera'&gt;
                Cabecera &lt;br /&gt;
            &lt;/div&gt;
            &lt;div id='colizq'&gt;
                Columna Izquierda &lt;br /&gt;
            &lt;/div&gt;
            &lt;div id='contenido'&gt;
                Contenido &lt;br /&gt;
            &lt;/div&gt;
            &lt;div id='colder'&gt;
                Columna Derecha &lt;br /&gt;
            &lt;/div&gt;
            &lt;div id='pies'&gt;
                Pies
            &lt;/div&gt;
        &lt;/div&gt;</pre><p>El resultado inicial es claramente inaceptable.</p><div
id="attachment_799" class="wp-caption aligncenter" style="width: 145px"><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res1.png"><img
class="size-full wp-image-799" title="res1" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res1.png" alt="Resultado #1" width="135" height="116" /></a><p
class="wp-caption-text">Resultado #1</p></div><p>Agregamos un poco de estilo para enrriquecer a la presentación.</p><pre lang='css'>    #pagina
    {
        width: 1024px;
        margin: auto;
        background-color: pink;
    }</pre><p>Con esto le damos un ancho suficiente para visualizar correctamente el contenido del sitio y lo centramos para que se vea bonito en monitores mas anchos.</p><pre lang='css'>    #cabecera
    {
        padding: 5px;
        background-color: orange;
    }
    #colizq
    {
        padding: 5px;
        background-color: yellow;
        width: 300px;
    }
    #contenido
    {
        padding: 5px;
        background-color: blue;
        width: 394px;
    }
    #colder
    {
        padding: 5px;
        background-color: red;
        width: 300px;
    }
    #pies
    {
        padding: 5px;
        background-color: green;
    }</pre><p>Les damos colores diferentes a cada una de las partes para diferenciarlas, un <span
style="font-family: courier new,courier;">padding</span> para separar un poco el borde del contenido de cada uno de los <em>div</em>s y en el caso de la parte central, el ancho específico que se requiera.</p><div
id="attachment_800" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res2.png"><img
class="size-full wp-image-800" title="res2" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res2.png" alt="Resultado #2" width="500" height="73" /></a><p
class="wp-caption-text">Resultado #2</p></div><p>Ya tiene cara de algo, pero no necesariamente lo que estamos buscando.  Es necesario ordenar las columnas izquirda, centro y derecha para que se ubiquen de la forma como sus mismos nombres lo indican.</p><p>En CSS esto equivale a decirle a los <em>div</em>s que floten (<span
style="font-family: courier new,courier;">float</span>) en la dirección que queramos.</p><pre lang='css'>    #colizq
    {
        float: left;
        padding: 5px;
        background-color: yellow;
        width: 300px;
    }
    #contenido
    {
        float: left;
        padding: 5px;
        background-color: blue;
        width: 394px;
    }
    #colder
    {
        float: left;
        padding: 5px;
        background-color: red;
        width: 300px;
    }</pre><p>El atributo adicionado les indica a los <em>div</em>s que vayan flotando y arreglándose a la <em>izquierda</em> cada vez que son agregados a la presentación.</p><div
id="attachment_801" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res3.png"><img
class="size-full wp-image-801" title="res3" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res3.png" alt="Resultado #3" width="500" height="44" /></a><p
class="wp-caption-text">Resultado #3</p></div><p>En algunos casos, cuando continúan mas <em>div</em>s y necesitamos que se alineen en una la siguiente fila, es necesario indicarle a un <em>div </em>específico que no permita que otros <em>div</em>s floten a uno/ninguno de sus lados.  Para esto se utiliza el atributo <span
style="font-family: courier new,courier;">clear</span> (<span
style="font-family: courier new,courier;">left, right, none, both</span>).</p><p>Para el caso de la sección de los pies se complementaría de la siguiente manera.</p><pre lang='css'>    #pies
    {
        padding: 5px;
        background-color: green;
        clear: left;
    }</pre><p>Hasta ahí todo es muy fácil: un pequeño paso para el lector, pero hace un año fue un gran paso para mi.  Pero aún me queda una duda por solucionar.</p><p>Qué pasa cuando las columnas -patriotas- tienen altos de diferente longitud ?</p><div
id="attachment_802" class="wp-caption aligncenter" style="width: 510px"><a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res4.png"><img
class="size-full wp-image-802" title="res4" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/res4.png" alt="Resultado #4." width="500" height="112" /></a><p
class="wp-caption-text">Resultado #4.</p></div><p>Se nota ese <em>sobrante</em> rosado bajo las columnas izquierda y derecha ?</p><p>Si revisamos las clases CSS, la rosada es la <span
style="font-family: courier new,courier;">#pagina</span>, esto significa que <span
style="font-family: courier new,courier;">#colizq</span> y <span
style="font-family: courier new,courier;">#colder</span> no están ocupando el mismo espacio vertical que <span
style="font-family: courier new,courier;">#contenido</span> hasta <span
style="font-family: courier new,courier;">#pies</span> y está dejando ver la capa inmediatamente inferior.</p><p>Para los "diseños" que comúnmente utilizo esto no es un problema ya que me gustan los diseños minimalistas y el blanco es mi fondo preferido.  Pero que va a pasar el día en que necesite que una columna sea de un fondo diferente del resto ?</p><p>Mi pregunta es: cómo hago para que las columnas ocupen la totalidad del espacio vertical disponible entre <span
style="font-family: courier new,courier;">#cabecera</span> y <span
style="font-family: courier new,courier;">#pies</span> ?  La duda persiste.</p><p>Enlace: <a
href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/10/demo1.html">código de demostración</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2008/10/la-tipica-distribucion-de-una-pagina-web/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>position:fixed en IE</title><link>http://blog.jorgeivanmeza.com/2008/03/positionfixed-en-ie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=positionfixed-en-ie</link> <comments>http://blog.jorgeivanmeza.com/2008/03/positionfixed-en-ie/#comments</comments> <pubDate>Wed, 05 Mar 2008 17:28:43 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[InternetExplorer]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=181</guid> <description><![CDATA[Nada funciona bien en IE. La gente inteligente debería utilizar Firefox únicamente. Desarrollar para IE es totalmente frustrante, no se adhiere completamente a los estándares y lo que se desarrolla para Firefox de CSS y JavaScript casi nunca le funciona. &#8230; <a
href="http://blog.jorgeivanmeza.com/2008/03/positionfixed-en-ie/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Nada funciona bien en IE.  La gente inteligente debería utilizar <a
href="http://www.getfirefox.com/" target="_blank">Firefox</a> únicamente.   Desarrollar para IE es totalmente frustrante, no se adhiere completamente a los estándares y lo que se desarrolla para Firefox de CSS y JavaScript <em>casi nunca</em> le funciona.  Hoy tuve un capítulo mas de esta historia.</p><p>Mi IE 7.0.5730.11 no entiende la instrucción <span
style="font-family: courier new,courier;">position:fixed</span> de CSS!</p><p>Tuve que implementar la solución expuesta por <a
href="http://www.gunlaug.no/contents/wd_additions_15.html" target="_blank">http://www.gunlaug.no/contents/wd_additions_15.html</a>.</p><pre lang="javascript">* html div#miDivId
{
top:expression(eval(document.compatMode &amp;&amp;
document.compatMode=='CSS1Compat') ?
documentElement.scrollTop + 5: document.body.scrollTop + 5);
}</pre><p>Véalo en vivo y a todo color siguiendo este <a
href="http://www.distritosmineros.gov.co/apps/pt/index.php/minisite/mapa_dm" target="_blank">enlace</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2008/03/positionfixed-en-ie/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Por fin un ejemplo de Box Model entendible (2da. parte)</title><link>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=por-fin-un-ejemplo-de-box-model-entendible-2da-parte</link> <comments>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/#comments</comments> <pubDate>Tue, 30 Oct 2007 16:22:21 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=134</guid> <description><![CDATA[Bueno, no me aguanté las ganas de seguir haciendo pruebas. Esta vez con Layout #13 de Layout Gala. El ejemplo anterior tomado de Matthew Levine estaba elegante pero no quiso funcionar en IE. Simplifiqué un poco el ejemplo y esto &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Bueno, no me aguanté las ganas de seguir haciendo pruebas.  Esta vez con <a
title="http://blog.html.it/layoutgala/LayoutGala13.html" href="http://blog.html.it/layoutgala/LayoutGala13.html" target="_blank">Layout #13</a> de Layout Gala.</p><p>El ejemplo anterior tomado  de Matthew Levine estaba elegante pero no quiso funcionar en IE.</p><p>Simplifiqué un poco el ejemplo y esto fue lo que obtuve.</p><p><a
title="test_div2a.gif" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.gif"><img
src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.gif" alt="test_div2a.gif" /></a></p><p>Me hace falta lograr que las columnas izquierda (azul) y derecha (rojo) ocupen tanto espacio como ocupe la columna central (salmón), sin embargo si utilizo <code>height: 100%</code> intentan tomar el alto de la pantalla.</p><p>Por ahora este es un gran paso para -mi- humanidad en la lucha contra las cajas.</p><p>El archivo de prueba puede descargarse del siguiente enlace: <a
title="test_div2a.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.html">test_div2a.html</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Por fin un ejemplo de Box Model entendible</title><link>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=por-fin-un-ejemplo-de-box-model-entendible</link> <comments>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/#comments</comments> <pubDate>Tue, 30 Oct 2007 14:37:58 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=131</guid> <description><![CDATA[Hace hace muy poco no había querido trabajar con CSS. Siempre encontraba una rápida respuesta para mejor hacerlo de la manera convencional &#8230; es mas rápido, no tengo tantos problemas, no se complica tanto, etc. En el último par de &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Hace hace muy poco no había querido trabajar con CSS.  Siempre encontraba una rápida respuesta para mejor hacerlo de la manera convencional &#8230; es mas rápido, no tengo tantos problemas, no se complica tanto, etc.  En el último par de meses en los que he estado de <em>webmaster</em> adaptando la presentación de algunos portales a la provista por el publicista de la Fundación he aprendido algunas cositas y como todo lo que aprendo, me ha terminado gustando mucho.</p><p>Una de las cosas de las que en realidad no he logrado entender  completamente es el <em>box model</em> (modelo de cajas) de CSS.  Yo quiero hacer lo que la teoría sugiere: en el HTML dejar sólo el contenido y en CSS especificar como se va a presentar esa información.  Según esto, yo quiero que el <em>layout</em> (distribución) de mi página esté dada por el CSS con <em>DIVs </em>y no en el HTML con <em>TABLE</em>.  Pero ah que cosa mas extraña para mi.</p><p>Le he sacado tiempo en varias oportunidades pero no lo he logrado.  Lo mas cerca que he estado funcionaba perfecto en Firefox pero se corría inexplicablemente en IE &#8230; como siempre.</p><p>Hoy amanecí con ganas de volver a intentarlo y encontré un par de enlaces muy interesantes.  Entre ellos me gustó <a
href="http://www.alistapart.com/articles/holygrail">In Search of the Holy Grail</a> de <a
href="http://www.alistapart.com/authors/l/matthewlevine">Matthew Levine</a> quien se toma su tiempo para explicar la implementación de una página con tres columnas, dos de ellas de ancho fijo y el centro líquido (consume el tamaño complementario) y con una estructura de DIVs simple, tal y como yo la quería.<br
/> <code><br
/> &lt;div id="<strong>header</strong>"&gt;Este es el header&lt;/div&gt;<br
/> &lt;div id="<strong>container</strong>"&gt;</code><br
/> <code>&lt;div id="<strong>center</strong>" class="column"&gt;Este es el centro&lt;/div&gt;</code><br
/> <code>&lt;div id="<strong>left</strong>" class="column"&gt;Esta es la izquierda&lt;/div&gt;</code><br
/> <code>&lt;div id="<strong>right</strong>" class="column"&gt;Esta es la derecha&lt;/div&gt;</code><br
/> <code>&lt;/div&gt;<br
/> &lt;div id="<strong>footer</strong>"&gt;Estos son los pies&lt;/div&gt;</code></p><p>Este código HTML produce el siguiente resultado después de ser mezclado con el CSS correspondiente.</p><p><a
title="demo_css_div" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/demo_css_div.gif"><img
src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/demo_css_div.gif" alt="demo_css_div" width="594" height="242" /></a></p><p>Como siempre &#8230; en Firefox funciona perfecto, lo acabo de probar en IE7 y se enloquece, a pesar de que el autor menciona que funciona en los principales navegadores.</p><p>El archivo de prueba que utilicé se puede descargar del siguiente enlace: <a
title="test_div.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div.html">test_div.html</a>.</p><p>Espero mas adelante tener un poco mas de tiempo y hacerlo funcionar ya que no quiero seguir haciendo páginas basadas en <em>TABLEs</em>.</p><p>Otro enlace relacionado con el tema que se ve prometedor es Layout Gala (<a
title="Layout Gala" href="http://blog.html.it/layoutgala/" target="_blank">http://blog.html.it/layoutgala/</a>) en el que se presentan varios diseños basados en columnas.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
