<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1301357717395532954</id><updated>2011-12-01T02:04:21.702-08:00</updated><category term='cheat sheet'/><category term='postgresql'/><category term='funcion de cadena'/><category term='javascript'/><category term='access denied for user'/><category term='muchos a muchos'/><category term='Lenguajes procedimentales'/><category term='doctrine'/><category term='M:N'/><category term='grant'/><category term='configurar proyecto symfony'/><category term='conexion entre bases de datos'/><category term='css'/><category term='dblink'/><category term='codigo fuente en el blog'/><category term='crosstab'/><category term='exportar a hoja de calculo'/><category term='diagrama entidad relacion'/><category term='vitualhost'/><category term='privilegios a los usuarios de la bd'/><category term='SyntaxHighlighter'/><category term='er'/><category term='calculo de edad'/><category term='problema con nombre de los campos en sfDependentSelectPlugin'/><category term='entidad relacion'/><category term='numeros decimales'/><category term='ccs'/><category term='plpgsql'/><category term='validacion javascript'/><category term='exportar a excel'/><category term='etiqueta a'/><category term='mysql'/><category term='php'/><category term='imagenes y texto en vinculo'/><category term='filas a columnas'/><category term='documentar base de datos'/><category term='Unificar documentos de identidad'/><category term='solo numeros'/><category term='apache2'/><category term='iniciar un proyecto symfony'/><category term='query calculo edad'/><category term='convertir numero a texto'/><category term='split'/><category term='contrib'/><category term='substring'/><category term='symfony 1.4'/><category term='expresion regular'/><category term='twitter'/><category term='html'/><category term='sfDependentSelectPlugin'/><category term='host virtual'/><category term='permiso a bases de datos mysql'/><category term='symfony'/><category term='grupo etario'/><category term='embeber twits'/><category term='svn'/><category term='incrustar twitter'/><title type='text'>Algunos Tips...!</title><subtitle type='html'>Algunas cosas interesantes en cuanto a desarrollo web que se consiguen el la red y casi siempre se me olvidan.. Una especie de Guia rapida con algunos tips importantes en desarrollo de software bajo plataforma libre...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-2437809959731895211</id><published>2011-10-24T07:02:00.000-07:00</published><updated>2011-10-24T07:02:47.007-07:00</updated><title type='text'>sfDependentSelectPlugin en relaciones Muchos a Muchos M:N</title><content type='html'>Bien.. imaginemos que tenemos 2 tablas que se relacionan de M:N es decir, exite una tabla intermedia con las llaves primarias de las 2 tablas principales. en mi caso: centro y motivo_egreso y la tabla intermedia motivo_egreso_centro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;para usar sfDependentSelectPlugin y mostrar en mi caso, motivo de egreso y que se listen los centros asociados a través de una tabla intermedia , la única forma que conseguí de hacerlo es la siguiente:en lib/form/Doctrine/TuClaseForm.class.php&lt;br /&gt;&lt;pre class="brush: js;"&gt;     public function configure()&lt;br /&gt;     {&lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;      $this-&amp;gt;widgetSchema['motivo_egreso_id'] = new sfWidgetFormDoctrineChoice(array(&lt;br /&gt;            'model'     =&amp;gt; 'MotivoEgreso',&lt;br /&gt;            'add_empty' =&amp;gt; '&amp;lt;- Seleccione -&amp;gt;',&lt;br /&gt;            'method' =&amp;gt; 'getDescripcion',&lt;br /&gt;            'label' =&amp;gt; 'Motivo de Egreso :',&lt;br /&gt;        ));&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;validatorSchema['motivo_egreso_id'] = new sfValidatorDoctrineChoice(array(&lt;br /&gt;            'model' =&amp;gt; 'MotivoEgreso',&lt;br /&gt;            'column' =&amp;gt; 'id',&lt;br /&gt;            'required' =&amp;gt; true&lt;br /&gt;        ),array('required'=&amp;gt;'Campo requerido'));&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;widgetSchema['centro_id_egreso'] = new sfWidgetFormArrayDependentSelect(array(&lt;br /&gt;            'callable' =&amp;gt; array('CentroTable', 'getCentrosByMotivoEgreso'),&lt;br /&gt;            'depends' =&amp;gt; 'motivo_egreso_id',&lt;br /&gt;            'add_empty' =&amp;gt; '&amp;lt;- Seleccione -&amp;gt;',&lt;br /&gt;        ));&lt;br /&gt;&lt;br /&gt;         $this-&amp;gt;validatorSchema['centro_id_egreso'] = new sfValidatorChoice(array(&lt;br /&gt;            'choices' =&amp;gt; CentroTable::getCentrosByMotivoEgreso(),&lt;br /&gt;            'required' =&amp;gt; true&lt;br /&gt;        ),array('required'=&amp;gt;'Campo requerido'));&lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;&lt;/pre&gt;Luego defines el metodo getCentrosByMotivoEgreso() en mi caso en lib/model/doctrine/CentroTable.class.php&lt;br /&gt;&lt;pre class="brush: js;"&gt;class CentroTable extends Doctrine_Table&lt;br /&gt;{&lt;br /&gt;    public static function getInstance()&lt;br /&gt;    {&lt;br /&gt;        return Doctrine_Core::getTable('Centro');&lt;br /&gt;    }&lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;     .................    &lt;br /&gt;    &lt;br /&gt;    public static function getCentrosByMotivoEgreso()&lt;br /&gt;    {&lt;br /&gt;        $motivos = Doctrine_Core::getTable('MotivoEgreso')&lt;br /&gt;                    -&amp;gt;createQuery('m')&lt;br /&gt;                    -&amp;gt;innerJoin('m.MotivoEgresoCentro mc')&lt;br /&gt;                    -&amp;gt;innerJoin('mc.Centro c')&lt;br /&gt;                    -&amp;gt;orderBy('m.id,c.id asc' )&lt;br /&gt;                    -&amp;gt;execute();&lt;br /&gt;        $arr = array();$arr_centro=array();&lt;br /&gt;        foreach($motivos as $motivo){&lt;br /&gt;            foreach($motivo-&amp;gt;getCentro() as $centro)&lt;br /&gt;                $arr_centro = $arr_centro + array($centro-&amp;gt;getId() =&amp;gt; $centro-&amp;gt;getDescripcion());    &lt;br /&gt;            $arr = $arr + array($motivo-&amp;gt;getId()=&amp;gt;$arr_centro);&lt;br /&gt;            $arr_centro=array();&lt;br /&gt;        }&lt;br /&gt;        return $arr;&lt;br /&gt;    }&lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;     ................. &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Bien, la idea que conseguí la obtuve de http://www.symfony-project.org/plugins/sfDependentSelectPlugin, en la seccion de "Using arrays only"decidí crear un array con la consulta que necesitaba para realizar los combos dependientes... repito es la única forma que conseguí de hacer eso, quizás exista una mejor manera, espero sus comentarios! Pd: el widget que deben usar en el form es sfWidgetFormArrayDependentSelect y ahi si utilizas el arreglo generado!Listo a probar...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-2437809959731895211?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/2437809959731895211/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/10/sfdependentselectplugin-en-relaciones.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2437809959731895211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2437809959731895211'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/10/sfdependentselectplugin-en-relaciones.html' title='sfDependentSelectPlugin en relaciones Muchos a Muchos M:N'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-4179434140634285843</id><published>2011-07-25T09:42:00.000-07:00</published><updated>2011-07-25T09:42:45.228-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='problema con nombre de los campos en sfDependentSelectPlugin'/><category scheme='http://www.blogger.com/atom/ns#' term='sfDependentSelectPlugin'/><title type='text'>sfDependentSelectPlugin - problema con nombre de los campos</title><content type='html'>Cuando el combo superior no cumple con el estandar de nombre....&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;si tenemos un campo de referencia en una tabla que no cumple con el nombre estandar ej. direccion_id y por el contrario tenemos algo como receptor_direccion_id&lt;br /&gt;los combos dependientes no funcionan.. al menos no a mi... hay q hacer 3 sencillos pasos...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.- debes modificar 2 cosas proy/plugins/sfDependentSelectPlugin/sfWidgetFormDependentSelect.class&lt;br /&gt;&lt;br /&gt;// en la funcion configure agregar una nueva opcion widget&lt;br /&gt;&lt;pre class="brush: js;"&gt;protected function configure($options = array(), $attributes = array())&lt;br /&gt;{&lt;br /&gt;$this-&amp;gt;addOption('depends', '');&lt;br /&gt;$this-&amp;gt;addOption('widget', '');//nueva opcion widget&lt;br /&gt;$this-&amp;gt;addOption('add_empty', true);&lt;br /&gt;// ajax&lt;br /&gt;$this-&amp;gt;addOption('ajax', false);&lt;br /&gt;$this-&amp;gt;addOption('cache', true);&lt;br /&gt;$this-&amp;gt;addOption('params', array());&lt;br /&gt;$this-&amp;gt;addOption('url', sfContext::getInstance()-&amp;gt;getController()-&amp;gt;genUrl('sfDependentSelectAuto/_ajax'));&lt;br /&gt;// source&lt;br /&gt;$this-&amp;gt;addRequiredOption('source_class', '');&lt;br /&gt;$this-&amp;gt;addOption('source_params', array());&lt;br /&gt;&lt;br /&gt;parent::configure($options, $attributes);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;2.- luego&lt;br /&gt;//en la funcion render modificar la opcion 'dependiente'&lt;br /&gt;&lt;pre class="brush: js;"&gt;public function render($name, $value = null, $attributes = array(), $errors = array()) &lt;br /&gt;{&lt;br /&gt;.....&lt;br /&gt;......&lt;br /&gt;...........&lt;br /&gt;$config = array(&lt;br /&gt;'id'          =&amp;gt; $this-&amp;gt;generateId($name),&lt;br /&gt;'opciones'    =&amp;gt; $values,&lt;br /&gt;'vacio'       =&amp;gt; true === $this-&amp;gt;getOption('add_empty') ? '' : $this-&amp;gt;getOption('add_empty'),&lt;br /&gt;'ajax'        =&amp;gt; $this-&amp;gt;getOption('ajax'),&lt;br /&gt;'url'         =&amp;gt; $this-&amp;gt;getOption('url'),&lt;br /&gt;'cache'       =&amp;gt; $this-&amp;gt;getOption('cache'),&lt;br /&gt;'dependiente' =&amp;gt; ($this-&amp;gt;getOption('widget') == '' ? $this-&amp;gt;getOption('depends') : $this-&amp;gt;getOption('widget')),//validamos el valor q viene en la opcion&lt;br /&gt;'varref'      =&amp;gt; '_ds_ref',&lt;br /&gt;'varsoloref'  =&amp;gt; '_ds_get_ref_value',&lt;br /&gt;'params'      =&amp;gt; array_merge($this-&amp;gt;getOption('params'), array(&lt;br /&gt;'_ds_id'            =&amp;gt; $this-&amp;gt;generateId($name),&lt;br /&gt;'_ds_source_class'  =&amp;gt; $sourceClass,                                    &lt;br /&gt;'_ds_source_params' =&amp;gt; $this-&amp;gt;getOption('source_params'),&lt;br /&gt;)),            &lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;......&lt;br /&gt;...........&lt;br /&gt;&lt;br /&gt;return $widget . $script;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;3.- por ultimo en /proy/lib/form/doctrine/CorrespondenciaForm.class agregas la opcion q acabas de crear... y listo! cuando no necesites &lt;br /&gt;eso solo usas la opcion depends&lt;br /&gt;&lt;pre class="brush: js;"&gt;$this-&amp;gt;validatorSchema['receptor_direccion_id'] = new sfValidatorDoctrineChoice(array(&lt;br /&gt;'model' =&amp;gt; $this-&amp;gt;getRelatedModelName('Direccion'),&lt;br /&gt;'required' =&amp;gt; true), array('required' =&amp;gt; 'Campo Obligatorio'));&lt;br /&gt;&lt;br /&gt;$this-&amp;gt;widgetSchema['receptor_persona'] = new sfWidgetFormDoctrineDependentSelect(array(&lt;br /&gt;'model'     =&amp;gt; 'Persona',&lt;br /&gt;'depends'   =&amp;gt; 'Direccion',&lt;br /&gt;'widget'   =&amp;gt; 'correspondencia_receptor_direccion_id', // nombre del campo renderizado en el form (combo superior)&lt;br /&gt;'add_empty' =&amp;gt; '&amp;lt;- Seleccione receptor -&amp;gt;',&lt;br /&gt;'method' =&amp;gt; '__toString',&lt;br /&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;y listo!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-4179434140634285843?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/4179434140634285843/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/07/sfdependentselectplugin-problema-con.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/4179434140634285843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/4179434140634285843'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/07/sfdependentselectplugin-problema-con.html' title='sfDependentSelectPlugin - problema con nombre de los campos'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-6770761812925213183</id><published>2011-06-29T13:31:00.000-07:00</published><updated>2011-06-29T13:39:25.525-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unificar documentos de identidad'/><title type='text'>Unificar Documentos de identidad en un solo campo</title><content type='html'>Luego de varios intentos de registrar en BD documentos de identidad un buen amigo me paso un&amp;nbsp;código&amp;nbsp;que probablemente solucione el tema de unificar criterios en cuanto a&amp;nbsp;números&amp;nbsp;de documentos de&amp;nbsp;identificación&amp;nbsp;para una estructura de datos que&amp;nbsp;contendrá&amp;nbsp;información&amp;nbsp;de personas..&amp;nbsp;Típico&amp;nbsp;que necesitas&amp;nbsp;registrar&amp;nbsp;en tu&amp;nbsp;aplicación&amp;nbsp;datos personales, incluyendo documentos legales de&amp;nbsp;identificación,&amp;nbsp;normalmente&amp;nbsp;podrías&amp;nbsp;generar un solo campo tipo text para meter&amp;nbsp;ahí&amp;nbsp;lo que sea, o crear diferentes campos para guardar la info del documento de identidad (Cédula&amp;nbsp;de identidad, pasaporte, etc)&lt;br /&gt;&lt;br /&gt;Bien hace un tiempo me mandaron esta&amp;nbsp;solución pero no sabia donde la&amp;nbsp;había&amp;nbsp;dejado, la&amp;nbsp;volví&amp;nbsp;a encontrar me&amp;nbsp;pareció&amp;nbsp;interesante y la voy a aplicar en un proyecto nuevo.. prueben este PHP y verifiquen lo generado, la idea es generar un&amp;nbsp;único&amp;nbsp;campo para guardar el dato de la&amp;nbsp;identificación&amp;nbsp;de la persona que se genera...&lt;br /&gt;&lt;pre class="brush: js;"&gt;$str = "V158202995";&lt;br /&gt;echo 'cadena enviada= '.$str;&lt;br /&gt;$arr2 = str_split($str, 1);&lt;br /&gt;foreach ($arr2 as $array):&lt;br /&gt;       echo 'valor= '.$array.' codigo ascii= '.ord($array);&lt;br /&gt;       $asci.=ord($array);&lt;br /&gt;endforeach;&lt;br /&gt;echo 'cadena resultante en codigo ascii= '.$asci;&lt;br /&gt;$asci2 = str_split($asci, 2);&lt;br /&gt;foreach ($asci2 as $array):&lt;br /&gt;       echo 'valor en codigo ascii= '.$array.' valor normal= '.chr($array);&lt;br /&gt;       $asc.=chr($array);&lt;br /&gt;endforeach;&lt;br /&gt;echo 'cadena reconstruida= '.$asc; &lt;/pre&gt;&lt;br /&gt;el resultado de lo ejecutado sera asi:&lt;br /&gt;&lt;pre class="brush: js;"&gt;cadena enviada= V158202995&lt;br /&gt;valor= V codigo ascii= 86&lt;br /&gt;valor= 1 codigo ascii= 49&lt;br /&gt;valor= 5 codigo ascii= 53&lt;br /&gt;valor= 8 codigo ascii= 56&lt;br /&gt;valor= 2 codigo ascii= 50&lt;br /&gt;valor= 0 codigo ascii= 48&lt;br /&gt;valor= 2 codigo ascii= 50&lt;br /&gt;valor= 9 codigo ascii= 57&lt;br /&gt;valor= 9 codigo ascii= 57&lt;br /&gt;valor= 5 codigo ascii= 53&lt;br /&gt;cadena resultante en codigo ascii= 86495356504850575753&lt;br /&gt;valor en codigo ascii= 86 valor normal= V&lt;br /&gt;valor en codigo ascii= 49 valor normal= 1&lt;br /&gt;valor en codigo ascii= 53 valor normal= 5&lt;br /&gt;valor en codigo ascii= 56 valor normal= 8&lt;br /&gt;valor en codigo ascii= 50 valor normal= 2&lt;br /&gt;valor en codigo ascii= 48 valor normal= 0&lt;br /&gt;valor en codigo ascii= 50 valor normal= 2&lt;br /&gt;valor en codigo ascii= 57 valor normal= 9&lt;br /&gt;valor en codigo ascii= 57 valor normal= 9&lt;br /&gt;valor en codigo ascii= 53 valor normal= 5&lt;br /&gt;cadena reconstruida= V158202995&lt;br /&gt;&lt;/pre&gt;Luego se guarda en BD el ascii generado... Podrias generar un metodo para hacer la transformacion y el reverso del numero y lo invocas antes de llamar al metodo save()&lt;br /&gt;&lt;br /&gt;Y listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-6770761812925213183?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/6770761812925213183/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/06/unificar-documentos-de-identidad-en-un.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6770761812925213183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6770761812925213183'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/06/unificar-documentos-de-identidad-en-un.html' title='Unificar Documentos de identidad en un solo campo'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-1672543366208072855</id><published>2011-06-14T11:58:00.000-07:00</published><updated>2011-06-14T11:59:29.221-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='exportar a hoja de calculo'/><category scheme='http://www.blogger.com/atom/ns#' term='exportar a excel'/><title type='text'>Exportar a Excel en Symfony</title><content type='html'>Típico que necesitas exportar a una hoja de calculo el resultado de alguna consulta..&lt;br /&gt;bien, es simple, solo debes indicar en el action que no usaras el layout y que vas a cambiar el tipo de salida de la respuesta.. &lt;br /&gt;Primero, supongamos que vamos a enviar a una hoja de calculo nuestro Index, podriamos generar un action para realizar esta tarea.&lt;br /&gt;En el index agragamos un vinculo a nuestra accion&lt;br /&gt;&lt;br /&gt;&amp;lt;a class="ods" href="&amp;lt;?php echo url_for('item/indexExport') ?&amp;gt;"&amp;gt;Exportar&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;Y la accion seteamos el layout en false y modificamos el contentype del response...&lt;br /&gt;&lt;pre class="brush: js;"&gt;public function executeIndexExport(sfWebRequest $request)&lt;br /&gt;  {&lt;br /&gt;   $this-&gt;items = Doctrine_Core::getTable('Item')&lt;br /&gt;      -&gt;createQuery('a')&lt;br /&gt;      -&gt;orderBy('a.categoria_id,a.descripcion')&lt;br /&gt;      -&gt;execute();&lt;br /&gt;   $this-&gt;setLayout(false);&lt;br /&gt;   $this-&gt;getResponse()-&gt;setContentType('application/msexcel');&lt;br /&gt;   $this-&gt;setTemplate('index');&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;luego... ejecutas, pruebas y guardas el archivo generado y listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-1672543366208072855?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/1672543366208072855/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/06/exportar-excel-en-symfony.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1672543366208072855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1672543366208072855'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/06/exportar-excel-en-symfony.html' title='Exportar a Excel en Symfony'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-5139379784621010461</id><published>2011-06-06T09:11:00.000-07:00</published><updated>2011-10-24T07:25:41.681-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='symfony 1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='configurar proyecto symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='iniciar un proyecto symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='doctrine'/><title type='text'>Comenzar un proyecto en Symfony 1.4 (part.2)</title><content type='html'>bien.. ya sabemos como &lt;a href="http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14.html"&gt;comenzar un proyecto Symfony&lt;/a&gt;&lt;br /&gt;Ahora veamos el resto de los pasos.. comencemos desde el inicio:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /var/www/&lt;br /&gt;$ mkdir -p proy&lt;br /&gt;$ cd proy/&lt;br /&gt;$ mkdir -p lib/vendor&lt;br /&gt;$ cd lib/vendor&lt;br /&gt;$ tar zxpf /home/usuario/Escritorio/symfony-1.4.4.tgz &lt;br /&gt;$ mv symfony-1.4.4/ symfony&lt;br /&gt;$ symfony -V&lt;br /&gt;$ symfony generate:project proy&lt;br /&gt;&lt;/pre&gt;Verifica el post para crear el &lt;a href="http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14.html"&gt;Comendo Symfony&lt;/a&gt;&lt;br /&gt;PARA SEGURIDAD CONTRA ATAQUES XSS Y CSRF&lt;br /&gt;&lt;pre class="brush: js;"&gt;symfony generate:app --escaping-strategy=on --csrf-secret=ClaveUnicaSecreta frontend&lt;br /&gt;&lt;/pre&gt;Ahora creamos el &lt;a href="http://roy-rc.blogspot.com/2011/02/host-virtuales-para-tus-proyectos-php.html"&gt;Virtual Host&lt;/a&gt; para nuestro proyecto proy&lt;br /&gt;&lt;br /&gt;En el navegador&lt;br /&gt;http://localhost.proy/&lt;br /&gt;y para ver la aplicacion funcionando en modo desarrollo&lt;br /&gt;http://localhost.proy/frontend_dev.php&lt;br /&gt;&lt;br /&gt;Creando al estructura de datos&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ sudo su&lt;br /&gt;# su - postgres&lt;br /&gt;$ psql&lt;br /&gt;postgres=#  create database proy_db with owner u_test;&lt;br /&gt;postgres=#  CREATE TABLE persona&lt;br /&gt;(&lt;br /&gt;  id serial NOT NULL,&lt;br /&gt;  nacionalidad character(1),&lt;br /&gt;  ci numeric(10),&lt;br /&gt;  nombre character varying(100) NOT NULL,&lt;br /&gt;  apellido character varying(100) NOT NULL,&lt;br /&gt;  sexo character(1),&lt;br /&gt;  fecha_nac date,&lt;br /&gt;  created_at timestamp without time zone,&lt;br /&gt;  updated_at timestamp without time zone,&lt;br /&gt;  CONSTRAINT persona_pkey PRIMARY KEY (id),&lt;br /&gt;  CONSTRAINT persona_ci_key UNIQUE (ci)&lt;br /&gt;);&lt;br /&gt;ALTER TABLE persona OWNER TO u_test;&lt;br /&gt;postgres=#  \q&lt;br /&gt;$ exit&lt;br /&gt;# exit&lt;br /&gt;&lt;/pre&gt;/// Estando nuevamente en /var/www/proy ///&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ symfony configure:database "pgsql:host=localhost;dbname=proy_db" u_test 123456&lt;br /&gt;$ symfony doctrine:build-schema&lt;br /&gt;&lt;/pre&gt;//SI TIENES CAMPOS AUTO ADMINSTRABLES created_at updated_at&lt;br /&gt;//debes ejecutar el comando para el schema&lt;br /&gt;//buscar en el schema los campos created_at updated_at ELIMINALOS y colocar al inicio de la clase del schema actAs: { Timestampable: ~ }&lt;br /&gt;Persona:&lt;br /&gt;connection: doctrine&lt;br /&gt;tableName: persona&lt;br /&gt;actAs: { Timestampable: ~ }&lt;br /&gt;columns:&lt;br /&gt;id:.....&lt;br /&gt;.....&lt;br /&gt;luego ejecutas:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ symfony doctrine:build --model&lt;br /&gt;$ symfony doctrine:build --filters&lt;br /&gt;$ symfony doctrine:build --forms&lt;br /&gt;&lt;/pre&gt;o en todo caso&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ symfony doctrine:build --all --no-confirmation&lt;br /&gt;&lt;/pre&gt;//modificar proy/lib/form/doctrine/PersonaForm.class.php y agregas lo siguiente dentro del metodo configure()&lt;br /&gt;&lt;pre class="brush: js;"&gt;public function configure()&lt;br /&gt;  {&lt;br /&gt; unset($this['created_at']);&lt;br /&gt;        unset($this['updated_at']);&lt;br /&gt;        .....&lt;br /&gt;        ...&lt;br /&gt;        ..&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;De la sigueinte manera se crean CRUD (CREATE,RETRIEVE,UPDATE,DELETE) para los modulos de la aplicacion&lt;br /&gt;// symfony doctrine:generate-module --with-show --non-verbose-templates aplicacion modulo Modelo&lt;br /&gt;en nuestro caso el CRUD para la clase persona&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ symfony doctrine:generate-module --with-show --non-verbose-templates frontend persona Persona&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;y ahora a probar...&lt;br /&gt;http://proy.localhost/frontend_dev.php/persona&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-5139379784621010461?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/5139379784621010461/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14_06.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5139379784621010461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5139379784621010461'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14_06.html' title='Comenzar un proyecto en Symfony 1.4 (part.2)'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-5695832700181982366</id><published>2011-06-06T08:48:00.000-07:00</published><updated>2011-06-06T08:51:11.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='symfony 1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='configurar proyecto symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='iniciar un proyecto symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='doctrine'/><title type='text'>Comenzar un proyecto en Symfony 1.4</title><content type='html'>Aqui dejo unos sencillos pasos para comenzar a configurar un proyecto con symfony 1.4 con ORM Doctrine&lt;br /&gt;&lt;br /&gt;Descargar la version de symfony que desee utilizar&lt;br /&gt;ej. symfony 1.4.4&lt;br /&gt;&lt;br /&gt;Url de consulta&lt;br /&gt;http://www.symfony-project.org/jobeet/1_4/Doctrine/es/01&lt;br /&gt;&lt;br /&gt;Para descargar la version 1.4.4&lt;br /&gt;http://www.symfony-project.org/installation/1_4&lt;br /&gt;Descargar symfony-1.4.4.tgz&lt;br /&gt;&lt;br /&gt;Crear proyecto&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /var/www/&lt;br /&gt;$ mkdir proy&lt;br /&gt;$ cd /proy&lt;br /&gt;$ mkdir -p lib/vendor&lt;br /&gt;$ tar zxpf /home/usuario/Escritorio/symfony-1.4.4.tgz&lt;br /&gt;$ mv symfony-1.4.4/ lib/vendor/symfony&lt;br /&gt;&lt;/pre&gt;Verifica la version y la configuracion&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ php lib/vendor/symfony/data/bin/symfony -V&lt;br /&gt;$ php lib/vendor/symfony/data/bin/check_configuration.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para acceder al symfony q estamos instalando es necerio ejecutar&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ php lib/vendor/symfony/data/bin/symfony -- COMANDOS --&lt;br /&gt;&lt;/pre&gt;Para mejorar esto crearemos un comando en el shell:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ vim $HOME/.bashrc&lt;br /&gt;// o usas gedit&lt;br /&gt;$ gedit $HOME/.bashrc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;agregamos al final del archivo&lt;br /&gt;&lt;pre class="brush: js;"&gt;alias symfony='./lib/vendor/symfony/data/bin/symfony'&lt;br /&gt;&lt;/pre&gt;Guardamos los cambios y vamos a OTRA CONSOLA.. para verificar los cambios&lt;br /&gt;NOTA: esta linea de comando funciona solo para los proyectos q posean la carpeta lib/vendor/symfony&lt;br /&gt;&lt;br /&gt;para probar el comando&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /var/www/proy&lt;br /&gt;$ symfony -V&lt;br /&gt;&lt;/pre&gt;Ahora puedes comenzar a hacer todo lo correspondiente con tu proyecto...&lt;br /&gt;&lt;br /&gt;NOTA: la&amp;nbsp;versión&amp;nbsp;q se instala por defecto utiliza el ORM Doctrine&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-5695832700181982366?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/5695832700181982366/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5695832700181982366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5695832700181982366'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/06/comenzar-un-proyecto-en-symfony-14.html' title='Comenzar un proyecto en Symfony 1.4'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-6329646333722247949</id><published>2011-03-03T07:28:00.001-08:00</published><updated>2011-03-03T07:40:54.157-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='muchos a muchos'/><category scheme='http://www.blogger.com/atom/ns#' term='M:N'/><category scheme='http://www.blogger.com/atom/ns#' term='doctrine'/><title type='text'>Relaciones Muchos a Muchos (M:N) en symfony 1.4 y Doctrine</title><content type='html'>Este es mi primer post de Symfony, mas adelante publicare muchos mas tips relacionados a este excelente framework de desarrollo en PHP.&lt;br /&gt;&lt;br /&gt;Probando algunas cosas en symfony necesite hacer relaciones M:N en sf 1.4 con doctrine.. propel en la verison df 1.2 resolvia el asunto el solo, aparentemente 1.4 no lo hace asi... bien, supongamos que necesitamos realizar este tipo de relacion en nuestro projecto M:N, autor y libro, un autor tieme muchos libros y un libro tiene muchos autores necesariamente necesitamos una tabla intermedia parar representar este tipo de relacion..&lt;br /&gt;En la vista de autor o de libro necesitamos tener un listado de libros o autores dependiendo del caso, una lista multiple, o un listado con checkboxes,&lt;br /&gt;&lt;br /&gt;para realizar este ejemplo necesitamos la estructura (PostgreSQL):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;CREATE TABLE autor&lt;br /&gt;(&lt;br /&gt;  id serial NOT NULL,&lt;br /&gt;  descripcion text NOT NULL,&lt;br /&gt;  CONSTRAINT autor_pkey PRIMARY KEY (id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;CREATE TABLE libro&lt;br /&gt;(&lt;br /&gt;  id serial NOT NULL,&lt;br /&gt;  descripcion text NOT NULL,&lt;br /&gt;  CONSTRAINT libro_pkey PRIMARY KEY (id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;CREATE TABLE autor_libro&lt;br /&gt;(&lt;br /&gt;  autor_id integer NOT NULL,&lt;br /&gt;  libro_id integer NOT NULL,&lt;br /&gt;  CONSTRAINT autor_libro_pkey PRIMARY KEY (autor_id, libro_id),&lt;br /&gt;  CONSTRAINT autor_libro_autor_id_fkey FOREIGN KEY (autor_id)&lt;br /&gt;      REFERENCES autor (id) MATCH SIMPLE&lt;br /&gt;      ON UPDATE NO ACTION ON DELETE NO ACTION,&lt;br /&gt;  CONSTRAINT autor_libro_libro_id_fkey FOREIGN KEY (libro_id)&lt;br /&gt;      REFERENCES libro (id) MATCH SIMPLE&lt;br /&gt;      ON UPDATE NO ACTION ON DELETE NO ACTION&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;creamos nuestro proyecto, aplicacion, realizamos la conexion a BD y generamos el modelo, filtros y formularios, notamos que efectivamente en la vista de autor y de libro no existe referencia a la tabla intermedia... &lt;br /&gt;&lt;pre class="brush: js;"&gt;symfony generate:project proy&lt;br /&gt;symfony generate:app app&lt;br /&gt;symfony configure:database "pgsql:host=localhost;dbname=proy_db" u_test 123456&lt;br /&gt;symfony doctrine:build-schema&lt;br /&gt;symfony doctrine:build --model&lt;br /&gt;symfony doctrine:build --filters&lt;br /&gt;symfony doctrine:build --forms&lt;br /&gt;symfony doctrine:generate-module --with-show  app libro Libro&lt;br /&gt;symfony doctrine:generate-module --with-show  app autor Autor&lt;br /&gt;symfony cc&lt;br /&gt;&lt;/pre&gt;como solucionamos esto.. bien.. el schema original de la primera corrida es algo asi...&lt;br /&gt;&lt;br /&gt;lo q tenemos q mejorar es lo referente a la relacion que representa el schema de la siguiente manera...&lt;br /&gt;&lt;pre class="brush: js;"&gt;Autor:&lt;br /&gt;  connection: doctrine&lt;br /&gt;  tableName: autor&lt;br /&gt;  columns:&lt;br /&gt;    id:&lt;br /&gt;      ....&lt;br /&gt;    descripcion:&lt;br /&gt;      ....&lt;br /&gt;  relations:&lt;br /&gt;    AutorLibro:&lt;br /&gt;      local: id&lt;br /&gt;      foreign: autor_id&lt;br /&gt;      type: many&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;si lo que queremos es que en la vista de autor nos muestre un listado de libros para hacer una seleccion multiple tenemos que modificar la parte de la relacion de la tabla autor.&lt;br /&gt;ahora quedara asi&lt;br /&gt;&lt;pre class="brush: js;"&gt;Autor:&lt;br /&gt;  connection: doctrine&lt;br /&gt;  tableName: autor&lt;br /&gt;  columns:&lt;br /&gt;    id:&lt;br /&gt;      ....&lt;br /&gt;    descripcion:&lt;br /&gt;      ....&lt;br /&gt;  relations:&lt;br /&gt;    Libro:&lt;br /&gt;      class: Libro&lt;br /&gt;      refClass: AutorLibro&lt;br /&gt;      local: autor_id&lt;br /&gt;      foreign: libro_id&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;posterior a esto lo q debemos hacer es ejecutar modelo, filtros, formulario y regenerar el modulo autor&lt;br /&gt;&lt;pre class="brush: js;"&gt;symfony doctrine:build --model&lt;br /&gt;symfony doctrine:build --filters&lt;br /&gt;symfony doctrine:build --forms&lt;br /&gt;symfony doctrine:generate-module --with-show  app autor Autor&lt;br /&gt;symfony cc&lt;br /&gt;&lt;/pre&gt;Chequea nuevamente la vista y observamos una lista multiple donde se listaran todos los libros..&lt;br /&gt;OJO, si modificas la estructura de datos y necesitas generar nuevamente el schema se perderan los cambios realizados en la tabla autor... algo malo a mi parecer.. debe haber algun plugin que realice algo de esto.. pero bueee...&lt;br /&gt;&lt;br /&gt;si necesitas cambiar esa lista multiple solo deberas cambiar el widget y listo... &lt;br /&gt;&lt;br /&gt;si tienes el plugin sfFormExtraPlugin instalado, solo agrega en /lib/form/doctrine/AutorForm.class.php:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$this-&gt;widgetSchema['libro_list']-&gt;setOption('renderer_class', 'sfWidgetFormSelectDoubleList');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;tambien puedes cambiar lo que muestra en la lista agregando algunas validaciones de la consulta o mostrar checkboxes.. pero eso lo veremos luego en otro articulo..&lt;br /&gt;la referencia de todo esto q explico lo puedes conseguir &lt;a href="http://melikedev.com/2009/12/09/symfony-w-doctrine-saving-many-to-many-mm-relationships/" target="_blank"&gt;Aqui&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-6329646333722247949?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/6329646333722247949/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/03/relaciones-muchos-muchos-mn-en-symfony.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6329646333722247949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6329646333722247949'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/03/relaciones-muchos-muchos-mn-en-symfony.html' title='Relaciones Muchos a Muchos (M:N) en symfony 1.4 y Doctrine'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-2883496891060683086</id><published>2011-02-24T11:03:00.000-08:00</published><updated>2011-08-09T08:08:30.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vitualhost'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2'/><category scheme='http://www.blogger.com/atom/ns#' term='host virtual'/><title type='text'>host virtuales para tus proyectos PHP</title><content type='html'>Para crear host virtuales para tus proyectos PHP..&lt;br /&gt;&lt;pre class="brush: js;"&gt;# cd /etc/apache2/sites-available/&lt;br /&gt;&lt;/pre&gt;aqui dentro encontraras varios archivos, necesitamos default, copiamos este archivo y lo editamos&lt;br /&gt;&lt;pre class="brush: js;"&gt;# cp default sitios&lt;br /&gt;# vim sitios&lt;br /&gt;&lt;/pre&gt;encontraremos un contenido similar al siguiente&lt;br /&gt;&lt;pre class="brush: js;"&gt;&amp;lt; VirtualHost *:80&amp;gt;&lt;br /&gt; ServerAdmin webmaster@localhost&lt;br /&gt;&lt;br /&gt; DocumentRoot /var/www&lt;br /&gt; &amp;lt; Directory /&amp;gt;&lt;br /&gt;  Options FollowSymLinks&lt;br /&gt;  AllowOverride All&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt; &amp;lt; Directory /var/www/&amp;gt;&lt;br /&gt;  Options Indexes FollowSymLinks MultiViews&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Order allow,deny&lt;br /&gt;  allow from all&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt; &amp;lt; Directory "/usr/lib/cgi-bin"&amp;gt;&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt; # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt; # alert, emerg.&lt;br /&gt; LogLevel warn&lt;br /&gt;&lt;br /&gt; CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &amp;lt; Directory "/usr/share/doc/"&amp;gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; /VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;lo editamos y terminamos con un archivo similar a este&lt;br /&gt;&lt;pre class="brush: js;"&gt;&amp;lt; VirtualHost *:80&amp;gt;&lt;br /&gt; ServerAdmin webmaster@localhost&lt;br /&gt;        ServerName  ingreso.localhost&lt;br /&gt; DocumentRoot /var/www/ingreso/web/&lt;br /&gt; &amp;lt; Directory /&amp;gt;&lt;br /&gt;  Options FollowSymLinks&lt;br /&gt;  AllowOverride All&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt; &amp;lt; Directory /var/www/ingreso/web/&amp;gt;&lt;br /&gt;  Options Indexes FollowSymLinks MultiViews&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Order allow,deny&lt;br /&gt;  allow from all&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt; &amp;lt; Directory "/usr/lib/cgi-bin"&amp;gt;&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt; # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt; # alert, emerg.&lt;br /&gt; LogLevel warn&lt;br /&gt;&lt;br /&gt; CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &amp;lt; Directory "/usr/share/doc/"&amp;gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &amp;lt; /Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; /VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;al inicio agregamos el ServerName, modificamos el Documentroot y cambiamos tambien el 2do &amp;lt; Directory ...&amp;gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;&amp;lt; VirtualHost *:80&amp;gt;&lt;br /&gt; ServerAdmin webmaster@localhost&lt;br /&gt;        ServerName  ingreso.localhost&lt;br /&gt; DocumentRoot /var/www/ingreso/web/&lt;br /&gt; &amp;lt; Directory /&amp;gt;&lt;br /&gt;  Options FollowSymLinks&lt;br /&gt;  AllowOverride All&lt;br /&gt; &amp;lt; /Directory&amp;gt;&lt;br /&gt; &amp;lt; Directory /var/www/ingreso/web/&amp;gt;&lt;br /&gt;  ....&lt;br /&gt;  ....&lt;br /&gt;  .... &lt;br /&gt;&lt;/pre&gt;en este archivo tambien podemos definir la ruta hacia donde se almacenaran los logs este proyecto&lt;br /&gt;si necesitas hacer mas de 1 virtual host modifica este mismo archivo # vim /etc/apache2/sites-available/sitios&lt;br /&gt;y agrega un nuevo tag &amp;lt; VirtualHost *:80&amp;gt; con la misma caracteristica y solo modificas las rutas y el nombre del ServerName&lt;br /&gt;&lt;br /&gt;luego de realizar tus modificaciones debes habilitar el virtualhost creado y releer la confuiguracion del apache&lt;br /&gt;&lt;pre class="brush: js;"&gt;# a2ensite sitios&lt;br /&gt;# /etc/init.d/apache2 reload&lt;br /&gt;&lt;/pre&gt;No olvides agregar la linea correspondiente el /etc/hosts&lt;br /&gt;&lt;pre class="brush: js;"&gt;# vim /etc/hosts&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: js;"&gt;127.0.0.1       localhost&lt;br /&gt;127.0.1.1       fmnh-d550&lt;br /&gt;127.0.0.1       ingreso.localhost&lt;br /&gt;192.168.1.14    desarrollo&lt;br /&gt;192.168.1.11    intranet&lt;br /&gt;&lt;/pre&gt;y probar en tu navegador&lt;br /&gt;&lt;br /&gt;http://ingreso.localhost/&lt;br /&gt;&lt;br /&gt;y listo...!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-2883496891060683086?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/2883496891060683086/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2011/02/host-virtuales-para-tus-proyectos-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2883496891060683086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2883496891060683086'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2011/02/host-virtuales-para-tus-proyectos-php.html' title='host virtuales para tus proyectos PHP'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-6264427323249175384</id><published>2010-10-25T10:51:00.000-07:00</published><updated>2010-10-25T10:51:29.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='solo numeros'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='validacion javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='numeros decimales'/><title type='text'>JavaScript: validacion de campos de texto</title><content type='html'>&lt;div style="text-align: justify;"&gt;En internet se puede conseguir un monton de controles para validar cajas de texto.. pero para que buscar en la web si puedo buscar en mi blog.. jejeje.. aqui publico 3 validaciones simples.. solo numeros enteros, numeros con 2 decimales y solo caracteres... copy paste y listo.. a probar&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var objeto2;  &lt;br /&gt;function decimales(objeto, e){               &lt;br /&gt; var keynum           &lt;br /&gt; var keychar           &lt;br /&gt; var numcheck          &lt;br /&gt; if(window.event){&lt;br /&gt;  /*/ IE*/             &lt;br /&gt; keynum = e.keyCode         &lt;br /&gt; }          &lt;br /&gt; else if(e.which){ &lt;br /&gt; /*/ Netscape/Firefox/Opera/*/           &lt;br /&gt; keynum = e.which         &lt;br /&gt; }            &lt;br /&gt; if((keynum&gt;=35 &amp;&amp; keynum&lt;=37) ||keynum==8||keynum==9||keynum==46||keynum==39) {&lt;br /&gt;             return true;         &lt;br /&gt; }          &lt;br /&gt; if(keynum==190||keynum==110||(keynum&gt;=95&amp;&amp;keynum&lt;=105)||(keynum&gt;=48&amp;&amp;keynum&lt;=57)){&lt;br /&gt;  posicion = objeto.value.indexOf('.');               &lt;br /&gt;  if(posicion==-1) {              &lt;br /&gt;   return true;           &lt;br /&gt;  }else { &lt;br /&gt;  if(!(keynum==190||keynum==110)){&lt;br /&gt;   objeto2=objeto;&lt;br /&gt;   t = setTimeout('dosDecimales()',150);&lt;br /&gt;   return true;&lt;br /&gt;  }else{&lt;br /&gt;   objeto2=null;&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; }else {&lt;br /&gt; return false;&lt;br /&gt; }        &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function dosDecimales(){    &lt;br /&gt; var objeto = objeto2;&lt;br /&gt; var posicion = objeto.value.indexOf('.');&lt;br /&gt; var decimal = 2;&lt;br /&gt; if(objeto.value.length - posicion &lt; decimal){&lt;br /&gt;  objeto.value = objeto.value.substr(0,objeto.value.length-1);                                        &lt;br /&gt; }else {&lt;br /&gt;  objeto.value = objeto.value.substr(0,posicion+decimal+1);                                            &lt;br /&gt; }&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function enteros(objeto, e){&lt;br /&gt; var keynum&lt;br /&gt; var keychar&lt;br /&gt; var numcheck&lt;br /&gt;  if(window.event){ /*/ IE*/&lt;br /&gt;   keynum = e.keyCode&lt;br /&gt;  }&lt;br /&gt;  else if(e.which){ /*/ Netscape/Firefox/Opera/*/&lt;br /&gt;   keynum = e.which&lt;br /&gt;  }&lt;br /&gt;  if((keynum&gt;=35 &amp;&amp; keynum&lt;=37) ||keynum==8||keynum==9||keynum==46||keynum==39) {&lt;br /&gt;   return true;&lt;br /&gt;  }&lt;br /&gt;  if((keynum&gt;=95&amp;&amp;keynum&lt;=105)||(keynum&gt;=48&amp;&amp;keynum&lt;=57)){&lt;br /&gt;   return true;&lt;br /&gt;  }else {&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function caracteres(e) {&lt;br /&gt;    tecla = (document.all) ? e.keyCode : e.which;&lt;br /&gt; if (tecla==8 || tecla==37 || tecla&lt;=38 || tecla==39 || tecla&lt;=40) return true;&lt;br /&gt;    patron =/[A-Za-z]/;&lt;br /&gt;    te = String.fromCharCode(tecla);&lt;br /&gt;    return patron.test(te);&lt;br /&gt;}&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;&lt;br /&gt; &lt;label for="decimal"&gt;Numeros decimales&lt;/label&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt; &lt;div class ="help"&gt;&lt;br /&gt;Use el separador de decimales punto "." // usa la funcion js decimales y dosDecimales&lt;/div&gt; &lt;input onkeydown="return decimales(this, event)" type="text" name="decimal" value="" id="decimal" /&gt; &lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;&lt;br /&gt; &lt;label for="entero"&gt;Numeros enteros&lt;/label&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt; &lt;div class ="help"&gt;&lt;br /&gt;Use solo numeros enteros&lt;/div&gt; &lt;input onkeydown="return enteros(this, event)" type="text" name="entero" value="" id="entero" /&gt; &lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;&lt;br /&gt; &lt;label for="caracter"&gt;Caracteres&lt;/label&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt; &lt;div class ="help"&gt;&lt;br /&gt;Use solo caracteres&lt;/div&gt; &lt;input type="text" name="textfield" onkeypress="return caracteres(event)" onblur="this.value=this.value.toUpperCase();"&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-6264427323249175384?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/6264427323249175384/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/10/javascript-validacion-de-campos-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6264427323249175384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6264427323249175384'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/10/javascript-validacion-de-campos-de.html' title='JavaScript: validacion de campos de texto'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3405969160165319777</id><published>2010-09-30T10:06:00.000-07:00</published><updated>2010-10-25T11:02:06.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grant'/><category scheme='http://www.blogger.com/atom/ns#' term='privilegios a los usuarios de la bd'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: Para otorgar privilegios a un usuario</title><content type='html'>&lt;div style="text-align: justify;"&gt;PosgreSQL permite crear provilegios por tabla en la base de datos de manera que un usuario en particular pueda crear consultas SELECT pero no pueda ejecutar el resto UPDATE, DELETE, INSERT.. el problema de esto es que pasa si tienes una BD con muchas tablas, tendrias q generar la sentencia grant por cada tabla GRANT SELECT ON TABLE public.table to u_read; para solucionar esto dejo aqui una consulta que genera todas las sentencias GRANT para cada tabla dentro de la BD&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;select 'GRANT SELECT ON TABLE '||schemaname||'.'||tablename||' TO u_read;' &lt;br /&gt;from pg_tables &lt;br /&gt;where schemaname in ('public') order by schemaname, tablename;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para ver la &lt;a href="http://www.openg.info/entry/grant-select-tables-postgresql"&gt;Referencia&lt;/a&gt;.&lt;br /&gt;Referencia de Postgresql &lt;a href="http://www.postgresql.org/docs/8.3/static/sql-grant.html"&gt;Aqui!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3405969160165319777?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3405969160165319777/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/09/postgresql-para-otorgar-privilegios-un.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3405969160165319777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3405969160165319777'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/09/postgresql-para-otorgar-privilegios-un.html' title='PostgreSQL: Para otorgar privilegios a un usuario'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-8641079772843224398</id><published>2010-09-07T12:52:00.000-07:00</published><updated>2010-09-07T12:52:41.170-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='split'/><category scheme='http://www.blogger.com/atom/ns#' term='funcion de cadena'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><category scheme='http://www.blogger.com/atom/ns#' term='expresion regular'/><title type='text'>PostgreSQL: funcion para dividir cadenas a partir de expresiones regulares</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;la funcion regexp_split_to_table y regexp_split_to_array Dividide una cadena usando expresiones regulares POSIX como el delimitador.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt; &lt;a href="http://www.postgresql.org/docs/current/static/functions-string.html"&gt;Referencia&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;El sigueinte ejemplo divide una cadena de texto utilizando como delimitador 'espacio' para separar las palabras y devolver un arreglo de postgres.&lt;/span&gt;&lt;/div&gt;&lt;pre class="brush: js;"&gt;select regexp_split_to_array('hola mundo! que tal!',E'\\s+') as x&lt;/pre&gt;y el resultado &lt;br /&gt;&lt;pre class="brush: js;"&gt;{hola,mundo!,que,tal!}&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;El sigueinte ejemplo divide una cadena de texto utilizando como delimitador 'espacio' para separar las palabras y devolver un recorset que contiene una fila para cada palabra&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="brush: js;"&gt;select regexp_split_to_table('hola mundo como estas',E'\\s+') as x&lt;/pre&gt;y el resultado es:&lt;br /&gt;&lt;pre class="brush: js;"&gt;"hola"&lt;br /&gt;"mundo"&lt;br /&gt;"como"&lt;br /&gt;"estas"&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;puedes cambiar la expresion regular E'\\s+' (que por lo q entiendo son espacios en blanco) por estas otras '[^0-9]+' '[^A-Z]+' '[^A-Z]*' '[^a-z]*' o cualquier otra que utilices, pruebalo y observa los resultados.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Utilidad: imagina que quieres crear usuarios con el primer caracter del nombre y el apellido concatenado a partir de tu tabla de personal de tu sistema administrativo entonces usas esto:&lt;/div&gt;&lt;pre class="brush: js;"&gt;select cedula,nombre,apellido,substring(nombre from 1 for 1) ||&lt;br /&gt;(select regexp_split_to_table(apellido,E'\\s+') as x limit 1) as login,&lt;br /&gt;md5('123456'),1 as status from personal where status = 1 order by cedula&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;Luego toca verificar la unicidad de los login's de la tabla... y listo... &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-8641079772843224398?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/8641079772843224398/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/09/postgresql-funcion-para-dividir-cadenas.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/8641079772843224398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/8641079772843224398'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/09/postgresql-funcion-para-dividir-cadenas.html' title='PostgreSQL: funcion para dividir cadenas a partir de expresiones regulares'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3965523622662712630</id><published>2010-09-07T06:32:00.000-07:00</published><updated>2010-09-07T09:52:00.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etiqueta a'/><category scheme='http://www.blogger.com/atom/ns#' term='imagenes y texto en vinculo'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS: Vinculos con texto e imagenes</title><content type='html'>&lt;div style="text-align: justify;"&gt;En muchas ocaciones he tenido que crear vinculos con imagenes/iconos y texto representativos de la accion que realizan, ej. agregar,modificar, eliminar y cada vez q pongo la imagen en la etiqueta &amp;lt;a&amp;gt; la imagen no queda centrada con el texto.. quizas para muchos es una cuestion muy sencilla, pero para mi que no se mucho o nada de CSS es importante.. aqui va el .css para realizar esto:&lt;/div&gt;&lt;pre class="brush: js;"&gt;a&lt;br /&gt;{&lt;br /&gt;  color: #524F46;&lt;br /&gt;  outline: none;&lt;br /&gt;  text-decoration: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a:hover&lt;br /&gt;{&lt;br /&gt;  text-decoration: underline;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a.salir {&lt;br /&gt;    background: transparent url(../images/imgForm/salir.png) no-repeat scroll left center;&lt;br /&gt;    padding: 2px 0 2px 25px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a.listado {&lt;br /&gt;    background: transparent url(../images/imgForm/list.png) no-repeat scroll left center;&lt;br /&gt;    padding: 2px 0 1px 20px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a.agregar {&lt;br /&gt;    background: transparent url(../images/imgForm/add.png) no-repeat scroll left center;&lt;br /&gt;    padding: 2px 0 1px 20px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a.modificar {&lt;br /&gt;    background: transparent url(../images/imgForm/edit.png) no-repeat scroll left center;&lt;br /&gt;    padding: 2px 0 1px 20px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;a.eliminar {&lt;br /&gt;    background: transparent url(../images/imgForm/delete.png) no-repeat scroll left center;&lt;br /&gt;    padding: 2px 0 1px 20px;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Y en los vinculos donde se implemtentan la hoja de estilos: &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;&lt;a class="salir" href="http://www.blogger.com/ofertaservicio/web/login_dev.php/login" onclick="return confirm('Esta seguro que desea salir?');"&gt;Salir&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="listado" href="http://www.blogger.com/ofertaservicio/web/personal_dev.php/personal"&gt;Volver al listado de personal&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3965523622662712630?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3965523622662712630/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/09/css-vinculos-con-texto-e-imagenes.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3965523622662712630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3965523622662712630'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/09/css-vinculos-con-texto-e-imagenes.html' title='CSS: Vinculos con texto e imagenes'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-7222695792200978589</id><published>2010-09-06T11:59:00.000-07:00</published><updated>2010-09-22T08:47:02.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embeber twits'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='incrustar twitter'/><title type='text'>HTML: incrustar los ultimos twits en tu pagina web</title><content type='html'>&lt;div style="text-align: justify;"&gt;Buscando una manera de incrustar los twits mas recientes en una pagina web, me consegui con el siguiente codigo que esta disponible en &lt;a href="www.twitter.com"&gt;Twitter&lt;/a&gt; y un amigo esta probando para la intranet.. es facil de implementar, solo quizas le falta algo de diseño pero es lo q te da twitter.. aqui va el codigo, solo copialo, cambia la direccion del twitter y listo..&lt;/div&gt;&lt;pre class="brush: js;"&gt;&amp;lt;div  style = "margin-top:0px; margin-bottom:0px; position:relative;left:0px;overflow:hidden;padding-left:0px; &lt;br /&gt;padding-right:0px; padding-top:0px; padding-bottom:0px;  background-color:;width:100%; "&amp;gt;&lt;br /&gt;&amp;lt;h3 style="overflow:hidden"&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;lt;script src="http://widgets.twimg.com/j/2/widget.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;new TWTR.Widget({&lt;br /&gt;  version: 2,&lt;br /&gt;  type: 'profile',&lt;br /&gt;  rpp: 10,&lt;br /&gt;  interval: 6000,&lt;br /&gt;  width: 250,&lt;br /&gt;  height: 300,&lt;br /&gt;  theme: {&lt;br /&gt;    shell: {&lt;br /&gt;      background: '#000000',&lt;br /&gt;      color: '#ffffff'&lt;br /&gt;    },&lt;br /&gt;    tweets: {&lt;br /&gt;      background: '#f5edf5',&lt;br /&gt;      color: '#0a0a0a',&lt;br /&gt;      links: '#c73261'&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  features: {&lt;br /&gt;    scrollbar: true,&lt;br /&gt;    loop: false,&lt;br /&gt;    live: true,&lt;br /&gt;    hashtags: true,&lt;br /&gt;    timestamp: true,&lt;br /&gt;    avatars: false,&lt;br /&gt;    behavior: 'all'&lt;br /&gt;  }&lt;br /&gt;}).render().setUser('LuisChataing').start();&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-7222695792200978589?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/7222695792200978589/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/09/html-incrustar-los-ultimos-twits-en-tu.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7222695792200978589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7222695792200978589'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/09/html-incrustar-los-ultimos-twits-en-tu.html' title='HTML: incrustar los ultimos twits en tu pagina web'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-2958791507653508131</id><published>2010-08-31T07:54:00.000-07:00</published><updated>2010-10-25T10:57:06.053-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='substring'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: funcion para reemplazar substring</title><content type='html'>&lt;a href="http://www.postgresql.org/docs/8.3/static/functions-string.html"&gt;Referencia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La funcion overlay(string placing string from int [for int]) retorna un dato tipo TEXT y reeplaza parte de una cadena...&lt;br /&gt;&lt;br /&gt;ejemplo de la funcion:&lt;br /&gt;&lt;pre class="brush: js;"&gt;select overlay('Txxxxas' placing 'hom' from 2 for 4)&lt;/pre&gt;&lt;br /&gt;En la funcion overlay indicas el inicio de la cadena a reemplazar y la cantidad de caracteres q eliminaras de la cadena original, no importa si la subcadena nueva contenga la misma cantidad de caracteres. en el ejemplo se elimina desde el caracter 2, 4 caracteres 'xxxx' y se reeplaza con 'hom' 3 caracteres.. y el resultado es: Thomas&lt;br /&gt;&lt;br /&gt;Tambien existe la funcion replace(string text, from text, to text) que reemplaza las ocurrencias de una cadena en otra por otra cadena&lt;br /&gt;&lt;br /&gt;ejemplo de la funcion:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;select replace('abcdefabcdef', 'cd', 'XYZ')&lt;/pre&gt;y el resultado es 'abXYZefabXYZef'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-2958791507653508131?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/2958791507653508131/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-funcion-para-reemplazar.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2958791507653508131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/2958791507653508131'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-funcion-para-reemplazar.html' title='PostgreSQL: funcion para reemplazar substring'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-5553702372749549511</id><published>2010-08-30T12:46:00.000-07:00</published><updated>2010-08-30T12:46:33.232-07:00</updated><title type='text'>SVN: eliminar los archivos .svn el proyecto</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este comando lo paso un amigo hace un tiempo... el comando busca los archivos .svn y los elimina.. muy util para subir proyectos al SVN que antes estaban en otro SVN, claro, suponiendo q ya no eliminaste los archivos .svn desde el IDE (ej. eclipse)&lt;/div&gt;&lt;br /&gt;Debes entrar en la carpeta y luego ejecutar el comando y listo!&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /var/www/proy&lt;br /&gt;$ find . -name .svn -print0 | xargs -0 rm -rf&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-5553702372749549511?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/5553702372749549511/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/svn-eliminar-los-archivos-svn-el.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5553702372749549511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5553702372749549511'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/svn-eliminar-los-archivos-svn-el.html' title='SVN: eliminar los archivos .svn el proyecto'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3600446747538764072</id><published>2010-08-30T05:57:00.000-07:00</published><updated>2010-08-30T07:44:09.752-07:00</updated><title type='text'>Comando Linux: Diff - para comparar archivos -</title><content type='html'>&lt;div style="text-align: justify;"&gt;Es invocado desde la línea de comando con los nombres de dos archivos: &lt;tt&gt;diff &lt;i&gt;original&lt;/i&gt; &lt;i&gt;new&lt;/i&gt;&lt;/tt&gt;. El resultado del comando representa los cambios requeridos para hacer que el archivo &lt;i&gt;original&lt;/i&gt; se convierta en el &lt;i&gt;nuevo&lt;/i&gt; archivo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si &lt;i&gt;original&lt;/i&gt; y &lt;i&gt;nuevo&lt;/i&gt; son directorios, entonces diff se ejecutará sobre cada archivo que exista en ambos directorios. Una opción, &lt;tt&gt;-r&lt;/tt&gt;, hará que cualesquiera subdirectorios emparejados comparen archivos entre directorios.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://es.wikipedia.org/wiki/Diff"&gt;Referencia de wikipedia&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ diff original.txt nuevo.txt &lt;/pre&gt;&amp;nbsp;y tambien puedes utilizar &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ diff -e original.txt nuevo.txt&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3600446747538764072?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3600446747538764072/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/comando-linux-diff-para-comparar.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3600446747538764072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3600446747538764072'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/comando-linux-diff-para-comparar.html' title='Comando Linux: Diff - para comparar archivos -'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-1187302103786525297</id><published>2010-08-29T07:55:00.000-07:00</published><updated>2010-10-25T10:58:09.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='convertir numero a texto'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: Funcion que convierte un numero a texto</title><content type='html'>&lt;div style="text-align: justify;"&gt;La siguiente funcion esta escrita en plpgsql y retorna un cadena de texto correspondiente a un numero que se pasa por parametro, la funcion devuelve hasta un maximo de 999999999,99&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta funcion la saque de un foro hace un tiempo ya, la tenia en alguna BD de prueba y para no perderla... pues la coloco aqui..&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;-- DROP FUNCTION f_convnl(numeric);&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION f_convnl(num numeric)&lt;br /&gt;  RETURNS character varying AS&lt;br /&gt;$BODY$&lt;br /&gt;-- Función que devuelve la cadena de texto en castellano que corresponde a un número.&lt;br /&gt;-- Parámetros: número con 2 decimales, máximo 999999999,99.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;DECLARE &lt;br /&gt; d VARCHAR[];&lt;br /&gt; f VARCHAR[];&lt;br /&gt;&lt;br /&gt; g VARCHAR[];&lt;br /&gt; numt VARCHAR;&lt;br /&gt; txt VARCHAR;&lt;br /&gt;&lt;br /&gt; a INTEGER;&lt;br /&gt; a1 INTEGER;&lt;br /&gt; a2 INTEGER;&lt;br /&gt; n INTEGER;&lt;br /&gt;&lt;br /&gt; p INTEGER;&lt;br /&gt; negativo BOOLEAN;&lt;br /&gt;BEGIN&lt;br /&gt; -- Máximo 999.999.999,99&lt;br /&gt;&lt;br /&gt; IF num &amp;gt; 999999999.99 THEN&lt;br /&gt;  RETURN '---';&lt;br /&gt;&lt;br /&gt; END IF;&lt;br /&gt; txt = '';&lt;br /&gt; d = ARRAY[' un',' dos',' tres',' cuatro',' cinco',' seis',' siete',' ocho',' nueve',' diez',' once',' doce',' trece',' catorce',' quince',&lt;br /&gt;&lt;br /&gt;  ' dieciseis',' diecisiete',' dieciocho',' diecinueve',' veinte',' veintiun',' veintidos', ' veintitres', ' veinticuatro', ' veinticinco',&lt;br /&gt;&lt;br /&gt;  ' veintiseis',' veintisiete',' veintiocho',' veintinueve'];&lt;br /&gt;&lt;br /&gt; f = ARRAY ['','',' treinta',' cuarenta',' cincuenta',' sesenta',' setenta',' ochenta', ' noventa'];&lt;br /&gt;&lt;br /&gt; g= ARRAY [' ciento',' doscientos',' trescientos',' cuatrocientos',' quinientos',' seiscientos',' setecientos',' ochocientos',' novecientos'];&lt;br /&gt;&lt;br /&gt; numt = LPAD((num::numeric(12,2))::text,12,'0');&lt;br /&gt;&lt;br /&gt; IF strpos(numt,'-') &amp;gt; 0 THEN&lt;br /&gt;&lt;br /&gt;    negativo = TRUE;&lt;br /&gt; ELSE&lt;br /&gt;    negativo = FALSE;&lt;br /&gt;&lt;br /&gt; END IF;&lt;br /&gt; numt = TRANSLATE(numt,'-','0');&lt;br /&gt;&lt;br /&gt; numt = TRANSLATE(numt,'.,','');&lt;br /&gt;&lt;br /&gt; -- Trato 4 grupos: millones, miles, unidades y decimales&lt;br /&gt; p = 1;&lt;br /&gt; FOR i IN 1..4 LOOP&lt;br /&gt;&lt;br /&gt;  IF i &amp;lt; 4 THEN&lt;br /&gt;   n = substring(numt::text FROM p FOR 3);&lt;br /&gt;&lt;br /&gt;  ELSE&lt;br /&gt;   n = substring(numt::text FROM p FOR 2);&lt;br /&gt;&lt;br /&gt;  END IF;&lt;br /&gt;  p = p + 3;&lt;br /&gt;  IF i = 4 THEN&lt;br /&gt;&lt;br /&gt;   IF txt = '' THEN&lt;br /&gt;    txt = ' cero';&lt;br /&gt;&lt;br /&gt;   END IF;&lt;br /&gt;   IF n &amp;gt; 0 THEN&lt;br /&gt;   -- Empieza con los decimales&lt;br /&gt;&lt;br /&gt;    txt = txt || ' con';&lt;br /&gt;   END IF;&lt;br /&gt;&lt;br /&gt;  END IF;&lt;br /&gt;  -- Centenas &lt;br /&gt;  IF n &amp;gt; 99 THEN&lt;br /&gt;&lt;br /&gt;   a = substring(n::text FROM 1 FOR 1);&lt;br /&gt;&lt;br /&gt;   a1 = substring(n::text FROM 2 FOR 2);&lt;br /&gt;&lt;br /&gt;   IF a = 1 THEN&lt;br /&gt;    IF a1 = 0 THEN&lt;br /&gt;&lt;br /&gt;     txt = txt || ' cien';&lt;br /&gt;    ELSE&lt;br /&gt;     txt = txt || ' ciento';&lt;br /&gt;&lt;br /&gt;    END IF;&lt;br /&gt;   ELSE&lt;br /&gt;    txt = txt || g[a];&lt;br /&gt;&lt;br /&gt;   END IF;&lt;br /&gt;  ELSE&lt;br /&gt;   a1 = n;&lt;br /&gt;  END IF;&lt;br /&gt;&lt;br /&gt;  -- Decenas&lt;br /&gt;  a = a1;&lt;br /&gt;  IF a &amp;gt; 0 THEN&lt;br /&gt;&lt;br /&gt;   IF a &amp;lt; 30 THEN&lt;br /&gt;    IF a = 21 AND (i = 3 OR i = 4) THEN&lt;br /&gt;&lt;br /&gt;     txt = txt || ' veintiuno';&lt;br /&gt;    ELSIF n = 1 AND i = 2 THEN&lt;br /&gt;&lt;br /&gt;     txt = txt; &lt;br /&gt;    ELSIF a = 1 AND (i = 3 OR i = 4)THEN&lt;br /&gt;&lt;br /&gt;     txt = txt || ' uno';&lt;br /&gt;    ELSE&lt;br /&gt;     txt = txt || d[a];&lt;br /&gt;&lt;br /&gt;    END IF;&lt;br /&gt;   ELSE&lt;br /&gt;    a1 = substring(a::text FROM 1 FOR 1);&lt;br /&gt;&lt;br /&gt;    a2 = substring(a::text FROM 2 FOR 1);&lt;br /&gt;&lt;br /&gt;    IF a2 = 1 AND (i = 3 OR i = 4) THEN&lt;br /&gt;&lt;br /&gt;      txt = txt || f[a1] || ' y' || ' uno';&lt;br /&gt;&lt;br /&gt;    ELSE&lt;br /&gt;     IF a2 &amp;lt;&amp;gt; 0 THEN&lt;br /&gt;      txt = txt || f[a1] || ' y' || d[a2];&lt;br /&gt;&lt;br /&gt;     ELSE&lt;br /&gt;      txt = txt || f[a1];&lt;br /&gt;     END IF;&lt;br /&gt;&lt;br /&gt;    END IF;&lt;br /&gt;   END IF;&lt;br /&gt;  END IF;&lt;br /&gt;&lt;br /&gt;  IF n &amp;gt; 0 THEN&lt;br /&gt;   IF i = 1 THEN&lt;br /&gt;&lt;br /&gt;    IF n = 1 THEN&lt;br /&gt;     txt = txt || ' millón';&lt;br /&gt;&lt;br /&gt;    ELSE&lt;br /&gt;     txt = txt || ' millones';&lt;br /&gt;    END IF;&lt;br /&gt;&lt;br /&gt;   ELSIF i = 2 THEN&lt;br /&gt;    txt = txt || ' mil';&lt;br /&gt;&lt;br /&gt;   END IF;  &lt;br /&gt;  END IF;&lt;br /&gt; END LOOP;&lt;br /&gt;&lt;br /&gt; txt = LTRIM(txt);&lt;br /&gt; IF negativo = TRUE THEN&lt;br /&gt;&lt;br /&gt;    txt= '-' || txt;&lt;br /&gt; END IF;&lt;br /&gt;    RETURN txt;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;$BODY$&lt;br /&gt;  LANGUAGE 'plpgsql' VOLATILE&lt;br /&gt;  COST 100;&lt;br /&gt;ALTER FUNCTION f_convnl(numeric) OWNER TO u_test;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-1187302103786525297?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/1187302103786525297/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-funcion-que-convierte-un.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1187302103786525297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1187302103786525297'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-funcion-que-convierte-un.html' title='PostgreSQL: Funcion que convierte un numero a texto'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-7422544857395753632</id><published>2010-08-27T14:35:00.000-07:00</published><updated>2010-10-25T10:59:13.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plpgsql'/><category scheme='http://www.blogger.com/atom/ns#' term='Lenguajes procedimentales'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: Lenguajes procedimentales</title><content type='html'>&lt;div style="text-align: justify;"&gt;Los lenguajes procedimentales son utilizados para realizar funciones complejas e base de datos, Postgres al igual q SQLServer, Oracle y otros posee lenguajes procedimentales, a mi parecer mucho mejor q SQLServer por q no solo tienes que diseñar tus funciones con el lenguaje por defecto, si no q tambien los creas con diferentes lenguajes:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;plruby , pljava , plproxy , plperl, C y creo q otros....&lt;/div&gt;&lt;br /&gt;El nativo de postgres plpgsql.&lt;br /&gt;&lt;br /&gt;Para instalar leguajes procedimentales en postgres:&lt;br /&gt;&lt;br /&gt;plpgsql es el lenguaje procedimental de postgres por defecto, para instalarlo se ejecuta el siguiente comando como el usuario postgres: &lt;br /&gt;&lt;pre class="brush: js;"&gt;# su - postgres&lt;br /&gt;$ psql data_db&lt;br /&gt;data_db=# CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql;&lt;/pre&gt;&lt;br /&gt;para otro tipo de lenguajes como C o Perl debes buscar el paquete e instalarlo como el usuario root:&lt;br /&gt;&lt;pre class="brush: js;"&gt;# aptitude search plperl&lt;br /&gt;# aptitude install postgresql-plperl-8.3&lt;/pre&gt;&lt;br /&gt;cambias al usuario postgres y creas el lenguaje&lt;br /&gt;&lt;pre class="brush: js;"&gt;# su - postgres&lt;br /&gt;$ psql data_db&lt;br /&gt;data_db=# CREATE TRUSTED PROCEDURAL LANGUAGE plperl;&lt;/pre&gt;&lt;br /&gt;Listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-7422544857395753632?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/7422544857395753632/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-lenguajes-procedimentales.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7422544857395753632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7422544857395753632'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-lenguajes-procedimentales.html' title='PostgreSQL: Lenguajes procedimentales'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3814511412243738578</id><published>2010-08-23T09:25:00.000-07:00</published><updated>2010-09-22T08:56:02.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conexion entre bases de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='dblink'/><category scheme='http://www.blogger.com/atom/ns#' term='contrib'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: DBlink, conexion entre bases de datos postgres</title><content type='html'>&lt;div style="text-align: justify;"&gt;DBlink consta de un conjunto de funciones diseñadas para realizar conexiones entre bases de datos Postgres, en el mismo server o en otros.. lo que se necesita es instalar DBlink en el servidor que hace la peticion..&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para implementar esto debes instalar el paquete contrib de la version que usas de postres&lt;/div&gt;&lt;pre class="brush: js;"&gt;# aptitude install postgresql-contrib-8.3&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;el contrib de postgres provee una serie de funciones muy utiles para desarrolladores y administradores.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para instalar la funcion en tu BD debes ser el usuario postgres y por lineas de comando:&lt;/div&gt;&lt;pre class="brush: js;"&gt;$ cd /usr/share/postgresql/8.3/contrib&lt;br /&gt;$ psql test_db u_test -h localhost &amp;lt; dblink.sql&lt;/pre&gt;Te conectas a la BD que tiene instalado el DBlink y realizas la consulta  &lt;br /&gt;&lt;pre class="brush: js;"&gt;$ psql test_db u_test -h localhost&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: justify;"&gt;La idea es trear datos de la BD my_db que esta en el servidor 191.168.50.90 y mostrarlos en la conexion establecida en test_db en localhost &lt;/div&gt;&lt;pre class="brush: js;"&gt;test_db=# select * from&lt;br /&gt;dblink ('dbname=my_db hostaddr=191.168.50.90 user=u_test password=123456 port=5432',&lt;br /&gt;'select id,descripcion from tabla')  as t1(id int4,descripcion text); &lt;/pre&gt;&lt;br /&gt;Listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3814511412243738578?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3814511412243738578/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-dblink-conexion-entre-bases.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3814511412243738578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3814511412243738578'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-dblink-conexion-entre-bases.html' title='PostgreSQL: DBlink, conexion entre bases de datos postgres'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3245204272172504554</id><published>2010-08-04T08:04:00.000-07:00</published><updated>2010-10-25T11:00:44.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diagrama entidad relacion'/><category scheme='http://www.blogger.com/atom/ns#' term='er'/><category scheme='http://www.blogger.com/atom/ns#' term='entidad relacion'/><category scheme='http://www.blogger.com/atom/ns#' term='documentar base de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: Postgresql-autodoc</title><content type='html'>&lt;div style="text-align: justify;"&gt;postgresql_autodoc:&lt;br /&gt;varios tipos de archivo a partir de una bd postgresql para la documentacion de de la base de datos..&lt;/div&gt;archivos que genera:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .dia .htm .xml .dot (a partir de este archivo se genera un .png del diagrama) y otros....&lt;br /&gt;&lt;br /&gt;Instalacion&lt;br /&gt;&lt;pre class="brush: js;"&gt;# aptitude install postgresql-autodoc&lt;br /&gt;# aptitude install dia&lt;br /&gt;# aptitude install GraphViz&lt;/pre&gt;&lt;br /&gt;Opciones de uso:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ postgresql_autodoc--help&lt;/pre&gt;&lt;br /&gt;Para generar los documentos:&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ postgresql_autodoc -d Nomb_BD -f /ruta_destino/Nombre_BD -h localhost -u usuario_db --password=pass_db&lt;/pre&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -d = base de datos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -f = archivo destino y el prefijo de los archivos generados&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; se generan archivos como:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /ruta_destino/Nombre_BD.dia&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /ruta_destino/Nombre_BD.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -h = host de la bd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -u = usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --password= =password de bd&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Luego para generar una imagen .png apartir del documento .dot generado con postgresql_autodoc ejecutamos el siguiente comando&lt;/div&gt;&lt;pre class="brush: js;"&gt;$ dot -Tpng -o /ruta_destino/output.png /ruta_destino/Nombre_BD.dot&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3245204272172504554?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3245204272172504554/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-postgresql-autodoc.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3245204272172504554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3245204272172504554'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/postgresql-postgresql-autodoc.html' title='PostgreSQL: Postgresql-autodoc'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-3788703420826085539</id><published>2010-08-04T07:46:00.000-07:00</published><updated>2011-07-12T08:39:23.698-07:00</updated><title type='text'>PHP: Problemas de apache2 al interpretar PHP5</title><content type='html'>&lt;div style="text-align: justify;"&gt;En algunas oportunidades me he visto en la necesidad de configurar ambientes de desarrollo en diferentes maquinas.. algunas veces todo va muy bien otras no tanto.. en particular al instalar apache2 y php5 en algunas ocaciones (no se en realidad el por que de esto) apache no interpreta en php y el navegador lanza una ventanita diciendo algo asi como descargar archivo.php.. para solucionar esto edita el archivo apache2.conf:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# vim /etc/apache2/apache2.conf&lt;/pre&gt;Al final del archivo colocas los siguiente:&lt;br /&gt;&lt;pre class="brush: js;"&gt;LoadModule php5_module modules/libphp5.so&lt;br /&gt;&lt;br /&gt;AddType application/x-httpd-php .php&lt;br /&gt;AddType application/x-httpd-php-source .phps&lt;/pre&gt;&lt;br /&gt;Luego solo reiniciamos el servicio&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# /etc/init.d/apache2 restart&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-3788703420826085539?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/3788703420826085539/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/08/php5-problemas-de-apache2-al.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3788703420826085539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/3788703420826085539'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/08/php5-problemas-de-apache2-al.html' title='PHP: Problemas de apache2 al interpretar PHP5'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-6893978238545164369</id><published>2010-07-28T12:21:00.000-07:00</published><updated>2010-07-28T12:21:13.702-07:00</updated><title type='text'>PHP: APC acelerador de php</title><content type='html'>&lt;div style="text-align: justify;"&gt;Codigos PHP (normales o con frameworks como Symfony) requieren que tengas instalado un acelerador de PHP usando de manera mucho mas eficiente el cache.. Aqui un buen tip para instalar el APC&lt;/div&gt;&lt;br /&gt;Instalacion de alternate php cache(acelerador de php)&lt;br /&gt;&lt;pre class="brush: js;"&gt;# aptitude install apache2-threaded-dev php5-dev libmagic-dev&lt;br /&gt;# pecl install apc&lt;/pre&gt;&lt;br /&gt;para versiones recientes de Ubuntu&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# aptitude install php-apc&lt;/pre&gt;&lt;br /&gt;modificamos el php.ini&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# vim /etc/php5/apache2/php.ini&lt;/pre&gt;&lt;br /&gt;en la seccion destinada para las extenciones agregamos&lt;br /&gt;&lt;pre class="brush: js;"&gt;extension=apc.so&lt;br /&gt;    [APC]&lt;br /&gt;    apc.enabled=1&lt;br /&gt;    apc.shm_segments = 1&lt;br /&gt;    apc.shm_size = 64&lt;br /&gt;    apc.max_file_size = 10M&lt;br /&gt;    apc.stat = 1&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# /etc/init.d/apache2 restart&lt;/pre&gt;&lt;br /&gt;Listo.. busca en la maquina apc.php descomprimelo y copialo en /var/www/&lt;br /&gt;ejecutalo en el navegador y observa su comportamiento&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# updatedb&lt;br /&gt;# locate apc.php&lt;/pre&gt;&lt;br /&gt;en mi caso /usr/share/doc/php-apc/apc.php.gz&lt;br /&gt;&lt;br /&gt;Listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-6893978238545164369?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/6893978238545164369/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/php-apc-acelerador-de-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6893978238545164369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/6893978238545164369'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/php-apc-acelerador-de-php.html' title='PHP: APC acelerador de php'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-5277359849747805469</id><published>2010-07-27T13:13:00.000-07:00</published><updated>2011-09-13T12:38:32.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='permiso a bases de datos mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='grant'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='access denied for user'/><title type='text'>MySQL: otorgar permisos a la BD a otros hosts</title><content type='html'>&lt;div style="text-align: justify;"&gt;Para dar permisos a otros host para el acceso a las BD en general desde MySQL solo debes ingresar por consola y ejecutar las siguientes lineas:&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ mysql -u root -p&lt;br /&gt;mysql&amp;gt; GRANT ALL ON *.* TO 'root'@'191.168.50.72' IDENTIFIED BY '123456' with grant option;&lt;/pre&gt;Si luego de realizar eso aun se genera el error:Access denied for user 'root'@'' (using password: YES)Esto indica que existe un problema con DNS. Para arreglarlo, es necesario ejecutar:&lt;pre class="brush: js;"&gt;$ mysqladmin -p flush-hosts&lt;/pre&gt;para reestablecer la cache interna de DNS.Y listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-5277359849747805469?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/5277359849747805469/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/mysql-otorgar-permisos-la-bd-otros.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5277359849747805469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/5277359849747805469'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/mysql-otorgar-permisos-la-bd-otros.html' title='MySQL: otorgar permisos a la BD a otros hosts'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-1968771816605276613</id><published>2010-07-26T11:48:00.000-07:00</published><updated>2010-07-27T08:42:26.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crosstab'/><category scheme='http://www.blogger.com/atom/ns#' term='filas a columnas'/><category scheme='http://www.blogger.com/atom/ns#' term='contrib'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: crosstab - Filas a columnas en una consulta SQL-</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bien.. hace unos dias me preguntaron como se crea una consulta para transformar filas a columnas, muy usado para generar reportes en tus codigos PHP, pues bien, en SQL server aparentemente debes usar procedimientos almacenados, en Oracle 11g existe una funcion PIVOT, pero investigando por ahi  consegui esta informacion en la misma pagina de postgres... &lt;a href="http://www.postgresql.org/docs/current/static/tablefunc.html"&gt;Ver&lt;/a&gt;.&lt;br /&gt; Normalmente para evitar programar funciones o procedimientos almacenados uno crea codigo php medianamente complejo para armar las consultas y cambiar las filas q contienen resultados o datos de filas a columnas agrupando valores para conseguir un reporte que se entienda aqui voy a explicar como se hace en Postgres 8.3 y 8.4 utilizando las librerias contrib&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Primero, debes tener instalado en contrib en la maquina&lt;br /&gt;&lt;pre class="brush: js;"&gt;# aptitude install postgresql-contrib-8.3&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;el contrib de postgres provee una serie de funciones muy utiles para desarrolladores y administradores (Ej. dblink) asi como tambien la funcion crosstab&lt;br /&gt;&lt;br /&gt;para instalar la funcion en tu BD debes ser el usuario &lt;span style="font-weight: bold;"&gt;postgres&lt;/span&gt; en la maquina y por lineas de comando&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /usr/share/postgresql/8.3/contrib&lt;br /&gt;$ psql test &lt; tablefunc.sql&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Y listo.. tu bd &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;test&lt;/span&gt;&lt;/span&gt; tiene habilitada la funcion.. si necesitas q tus otras BD tengan la funcion cargada debes hacer el procedimiento por cada BD.. ahora, si necesitas que todas tus futuras bases de datos vengan con la funcion precargada al momento de crearlas debes hacer esto:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;$ cd /usr/share/postgresql/8.3/contrib&lt;br /&gt;$ psql template1 &lt; tablefunc.sql&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;bien, ya tenemos las funciones cargadas, pero ¿Como la usamos?...&lt;br /&gt;veamos un ejemplo:&lt;br /&gt;creamos una tabla de prueba con datos&lt;br /&gt;&lt;/div&gt;&lt;pre class="brush: js;"&gt;CREATE TABLE ct(id SERIAL, rowid TEXT, attribute TEXT, value TEXT);&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test1','att1','val1');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test1','att2','val2');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test1','att3','val3');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test1','att4','val4');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test2','att1','val5');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test2','att2','val6');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test2','att3','val7');&lt;br /&gt;INSERT INTO ct(rowid, attribute, value) VALUES('test2','att4','val8');&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Visualizamos los datos&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;select * from ct&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;1;"test1";"att1";"val1"&lt;br /&gt;2;"test1";"att2";"val2"&lt;br /&gt;3;"test1";"att3";"val3"&lt;br /&gt;4;"test1";"att4";"val4"&lt;br /&gt;5;"test2";"att1";"val5"&lt;br /&gt;6;"test2";"att2";"val6"&lt;br /&gt;7;"test2";"att3";"val7"&lt;br /&gt;8;"test2";"att4";"val8"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;y ahora a ver la funcion en accion: queremos ver test1 y test2 con todos sus valores en la misma fila:&lt;br /&gt;&lt;pre class="brush: js;"&gt;SELECT *&lt;br /&gt;FROM crosstab(&lt;br /&gt; 'select rowid, attribute, value&lt;br /&gt;  from ct&lt;br /&gt;  order by rowid,attribute')&lt;br /&gt;AS ct(row_name text, category_1 text, category_2 text, category_3 text, category_4 text);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;"test1";"val1";"val2";"val3";"val4"&lt;br /&gt;"test2";"val5";"val6";"val7";"val8"&lt;/pre&gt;&lt;br /&gt;Y listo..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-1968771816605276613?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/1968771816605276613/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/postgresql-crosstab-filas-columnas-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1968771816605276613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/1968771816605276613'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/postgresql-crosstab-filas-columnas-en.html' title='PostgreSQL: crosstab - Filas a columnas en una consulta SQL-'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-7041597428758509224</id><published>2010-07-22T07:37:00.000-07:00</published><updated>2010-07-26T14:27:42.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cheat sheet'/><category scheme='http://www.blogger.com/atom/ns#' term='ccs'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Cheat Sheet: Hoja de trucos</title><content type='html'>Aqui un vinculo que un pana me paso..&lt;br /&gt;&lt;br /&gt;Multiples hojas llenas de tips de diversos topicos..&lt;br /&gt;&lt;br /&gt;CCS, HTML, Photoshop, PHP&lt;br /&gt;&lt;br /&gt;Muy util...&lt;br /&gt;&lt;a href="http://www.webanddesigners.com/34-cheat-sheets-for-web-designers-and-developers"&gt;Clik aqui&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-7041597428758509224?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/7041597428758509224/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/cheat-sheet-hoja-de-trucos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7041597428758509224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/7041597428758509224'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/cheat-sheet-hoja-de-trucos.html' title='Cheat Sheet: Hoja de trucos'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-4548440099809222153</id><published>2010-07-20T08:18:00.000-07:00</published><updated>2010-08-06T08:41:35.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>SVN: configuración</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Configuración de SVN&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;# apt-get install subversion&lt;br /&gt;# apt-get install libapache2-svn&lt;br /&gt;# mkdir -p /var/local/repositorio&lt;br /&gt;# svnadmin create /var/local/repositorio/&lt;br /&gt;# chown -R www-data:www-data /var/local/repositorio/&lt;br /&gt;# cd /etc/apache2/mods-available/&lt;br /&gt;# vim dav_svn.conf&lt;br /&gt;&lt;br /&gt;&amp;lt;Location /repositorio&amp;gt;&lt;br /&gt;DAV svn&lt;br /&gt;SVNPath /var/local/repositorio&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthName "Subversion repository"&lt;br /&gt;### fichero de passwords&lt;br /&gt;AuthUserFile /etc/subversion/passwd&lt;br /&gt;### permito las opciones GET PROPFIND OPTIONS REPORT a usuarios anonimos&lt;br /&gt;&amp;lt;LimitExcept GET PROPFIND OPTIONS REPORT&amp;gt;&lt;br /&gt;### pero requiero autentificación para el resto de operaciones&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/LimitExcept&amp;gt;&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;br /&gt;# /etc/init.d/apache2 restart&lt;br /&gt;# htpasswd -c /etc/subversion/passwd rramos&lt;br /&gt;# cd /var/local/conf&lt;br /&gt;# vim passwd&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-4548440099809222153?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/4548440099809222153/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/svn-configuracion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/4548440099809222153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/4548440099809222153'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/svn-configuracion.html' title='SVN: configuración'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-8782765750783357147</id><published>2010-07-16T11:18:00.000-07:00</published><updated>2010-07-26T14:31:26.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grupo etario'/><category scheme='http://www.blogger.com/atom/ns#' term='calculo de edad'/><category scheme='http://www.blogger.com/atom/ns#' term='query calculo edad'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL: Calcular la edad y obtener el grupo etario</title><content type='html'>&lt;div style="text-align: justify;"&gt;Esta consulta es util si lo que se desa obtener es la edad de las personas registradas, ademas obtener el grupo etario al cual pertenecen.. Una consulta muy util si se desea realizar estadisticas por grupo etario..&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;select count(*),&lt;br /&gt;/*substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int  as edad, --Descomentar si deseas la edad de las personas*/&lt;br /&gt;case&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 0 and 12&lt;br /&gt;    then '1-. INFANTE (0-12)'&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 13 and 17&lt;br /&gt;    then '2-. ADOLESCENTE (13-17)'&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 18 and 28&lt;br /&gt;    then '3-. JOVEN (18-28)'&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 29 and 35&lt;br /&gt;    then '4-. ADULTO JOVEN (29-35)'&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 36 and 59&lt;br /&gt;    then '5-. ADULTO (36-59)'&lt;br /&gt;    when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int &gt;= 60&lt;br /&gt;    then '6-. ADULTO MAYOR (60 o mas)'&lt;br /&gt;end AS grupo_etario&lt;br /&gt;from persona p&lt;br /&gt;group by grupo_etario /*,edad --Descomentar si deseas la edad de las personas*/&lt;br /&gt;order by grupo_etario&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-8782765750783357147?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/8782765750783357147/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/postgresql-calcular-la-edad-y-obtener.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/8782765750783357147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/8782765750783357147'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/postgresql-calcular-la-edad-y-obtener.html' title='PostgreSQL: Calcular la edad y obtener el grupo etario'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1301357717395532954.post-864001725808325879</id><published>2010-07-15T09:00:00.001-07:00</published><updated>2010-07-16T10:14:28.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente en el blog'/><category scheme='http://www.blogger.com/atom/ns#' term='SyntaxHighlighter'/><title type='text'>Probando SyntaxHighlighter</title><content type='html'>&lt;div style="text-align: justify;"&gt;Despues de algunos intentos al fin me funciono.. la tactica para publicar en blogger es esta.. los script de SyntaxHighlighter debes colocarlos en la pagina del blog no en el articulo(tonto yo q no sabia).. en Diseño -&gt; Edicion de HTML&lt;br /&gt;Dentro de la etiqueta &amp;lt;head&amp;gt; colocas los script q vas a usar para publicar tu codigo.. en mi caso lo siguinte:&lt;br /&gt;&lt;/div&gt;&lt;pre class="brush: js;"&gt;&lt;script type="text/javascript" src="http://www.anysportsleague.com/styles/syntaxhighlighter_3.0.83/scripts/shCore.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://www.anysportsleague.com/styles/syntaxhighlighter_3.0.83/scripts/shBrushJScript.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;    SyntaxHighlighter.config.bloggerMode=true;&lt;br /&gt;    SyntaxHighlighter.all();&lt;br /&gt;&lt;/script&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;tu articulo con el codigo fuente va entre los tags &amp;lt;pre class="brush: js;"&amp;gt; .... &amp;lt;/pre&amp;gt; &lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Y al poner tu codigo de ejemplo se ve asi..&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: js;"&gt;function public HolaMundo&lt;br /&gt;{&lt;br /&gt;   return 'Hola!!';&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1301357717395532954-864001725808325879?l=roy-rc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roy-rc.blogspot.com/feeds/864001725808325879/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://roy-rc.blogspot.com/2010/07/probando-syntaxhighlighter.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/864001725808325879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301357717395532954/posts/default/864001725808325879'/><link rel='alternate' type='text/html' href='http://roy-rc.blogspot.com/2010/07/probando-syntaxhighlighter.html' title='Probando &lt;a href=&apos;http://alexgorbatchev.com/SyntaxHighlighter/&apos;&gt;SyntaxHighlighter&lt;/a&gt;'/><author><name>Roiman Ramos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_nQeHJU2a9hM/TE785aAe12I/AAAAAAAAAAw/-sfJkBF-AVI/S220/tux_yoda.png'/></author><thr:total>0</thr:total></entry></feed>
