tag:blogger.com,1999:blog-365028922024-03-14T00:54:47.523-06:00Omar Flores Mtz :: Programación web, Software Libre, Linux y más..Lo unico que nos falta por hacer, es lo que aun no hemos intentado ....Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.comBlogger69125tag:blogger.com,1999:blog-36502892.post-62090767325610289872013-07-15T13:04:00.000-05:002013-07-15T13:04:03.377-05:00Múltiples conexiones a bases de datos en cakephp<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px; text-align: justify;">
En esta ocasión me encuentro trabajando con un proyecto sobre Mysql y Cakephp 2.2, la situación y complejidad del proyecto se ha visto en la necesidad de consultar información de otro sistema que se utiliza en la organización, el cual tiene su base de datos en Sql Server 2008. La idea es poder interactuar con los 2 Sistemas Gestores de Bases de Datos, compartiendo la información y centralizarla en un solo lugar.</div>
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px; text-align: justify;">
Gracias a este <a href="http://cakephp.hospedaxes.com/multiples-conexiones-a-bases-de-datos">post</a> que encontré navegando en la web se puede observar la flexibilidad que tiene Cakephp, el cual menciona lo siguiente:</div>
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px;">
</div>
<div style="text-align: justify;">
En cakephp existen gran cantidad de posibilidades desconocidas que, en algunos casos, pueden resultar útiles.</div>
<div style="text-align: justify;">
Una de ellas es la posibilidad de declarar <b>más de una conexión a base de datos</b>, pudiendo elegir en cada momento cuál de ellas deseamos utilizar.</div>
<br />
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px; text-align: justify;">
Puede resultar muy cómodo para organizar nuestros proyectos, para acceder a diferentes servidores de bases de datos o acceder a diferentes gestores de bases de datos.</div>
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px;">
</div>
<div style="text-align: justify;">
El proceso es sencillo, en primer lugar añadiremos al archivo <b>database.php</b> situado en <b>/app/config/</b> una nueva configuración de base de datos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Podremos copiar la configuración por defecto, llamada <b>default</b>, y cambiarle el nombre.</div>
<div style="text-align: justify;">
El fichero <b>database.php</b> quedará así</div>
<br />
<pre class="prettyprint" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #202020; font-family: 'Courier New', Courier, monospace; font-size: 13px; margin-bottom: 1em; margin-top: 1em; overflow: auto; padding: 2px; width: 684px;"><span class="kwd" style="color: #000088; margin: 0px; padding: 0px;">class</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> DATABASE_CONFIG </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">{</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pln" style="color: #000088; margin: 0px; padding: 0px;">public</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> $default </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> array</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">(</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'driver'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'mysql'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'persistent'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="color: #000088; margin: 0px; padding: 0px;">false</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'host'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'localhost'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'login'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'user'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'database'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'database'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'prefix'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">''</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">);</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pln" style="color: #000088; margin: 0px; padding: 0px;">public</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> $nueva_conexion </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> array</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">(</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'driver'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'mysql'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'persistent'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="color: #000088; margin: 0px; padding: 0px;">false</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'host'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'localhost'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'login'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'user'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'database'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'database_2'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'prefix'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">''</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">);</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pln" style="color: #000088; margin: 0px; padding: 0px;">public</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> $test </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> array</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">(</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'driver'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'mysql'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'persistent'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="kwd" style="color: #000088; margin: 0px; padding: 0px;">false</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'host'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'localhost'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'login'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'user'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'password'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'database'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'test_database_name'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'prefix'</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=></span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">''</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">,</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">);</span><span class="pln" style="color: black; margin: 0px; padding: 0px;">
</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">}</span></pre>
<pre class="prettyprint" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #202020; font-family: 'Courier New', Courier, monospace; font-size: 13px; margin-bottom: 1em; margin-top: 1em; overflow: auto; padding: 2px; width: 684px;"><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">
</span></pre>
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px;">
</div>
<div style="text-align: justify;">
Con esto habremos declarado otra conexión a la base de datos llamada <b>nueva_conexion</b></div>
<div style="text-align: justify;">
Una de las opciones que tiene la configuración de la base de datos, es la de utilizar un prefijo, es decir, que todas las tablas de la configuración de la base de datos comiencen con una palabra, también puede ser utilizado para organizar las bases de datos.</div>
<br />
<div style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px; margin-bottom: 10px; padding: 0px; text-align: justify;">
Para utilizar la configuración de la base de datos que hemos creado, tendremos que añadir en el modelo desde donde queremos acceder a esas tablas la siguiente línea:</div>
<pre class="prettyprint" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #202020; font-family: 'Courier New', Courier, monospace; font-size: 13px; margin-bottom: 1em; margin-top: 1em; overflow: auto; padding: 2px; width: 684px;"><span class="pln" style="color: black; margin: 0px; padding: 0px;"> </span><span class="pln" style="color: #000088; margin: 0px; padding: 0px;">public</span><span class="pln" style="color: black; margin: 0px; padding: 0px;"> $useDbConfig </span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">=</span><span class="str" style="color: #008800; margin: 0px; padding: 0px;">'nueva_conexion'</span><span class="pun" style="color: #666600; margin: 0px; padding: 0px;">;</span></pre>
<br />
<div style="text-align: justify;">
<span style="background-color: white; color: #202020; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 13px; line-height: 20px;">A partir de este momento, cada vez que accedamos a este modelo, cakephp utilizará las tablas existentes en la base de datos de esa conexión.</span></div>
<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-57893289661120335612012-08-03T16:01:00.006-05:002012-08-03T16:01:45.818-05:00Sublime Text 2<br />
<h2 style="background-image: url(http://4.bp.blogspot.com/-c3rFh6kP8Es/Ti9n2_BTMbI/AAAAAAAADGM/q511tbD-90Q/s000/dotted-line.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; border: 0px; color: #333333; font-family: Georgia, serif; font-size: 26px; font-style: italic; font-weight: normal; line-height: 1; margin: 0px 40px; outline: 0px; padding: 30px 0px 15px; position: relative; vertical-align: baseline;">
Tutorial para Sublime Text 2</h2>
<div class="wrap entry" id="post-body-7395757355859590120" style="border: 0px; color: #555555; font-family: 'Droid Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 16px; margin: 0px; outline: 0px; padding: 15px 40px 40px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;">
<div style="border: 0px; margin-bottom: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
</div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; padding: 4px; position: relative; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-xpTJbBFAxmM/UAguikrQshI/AAAAAAAACMA/1nBDmjQH62E/s1600/sublime_text_icon_2181.png" imageanchor="1" style="border: 0px; clear: right; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto 1em; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" src="http://4.bp.blogspot.com/-xpTJbBFAxmM/UAguikrQshI/AAAAAAAACMA/1nBDmjQH62E/s1600/sublime_text_icon_2181.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px; text-align: center;">Al principio pensaba que estaba<br />relacionado a la marca de un chocolate (?)</td></tr>
</tbody></table>
Sublime Text 2 es un editor de texto simpático que funciona en Linux, Mac y Windows. El poder de Sublime Text 2 se encuentra en sus extensiones o plugins y en las múltiples características que contiene: completado inteligente, integración con Git, movimiento entre archivos de proyecto, diff, entre otras delicias para el programador que se dedica a escribir código todo el día usando PHP, Python, Ruby o cualquier otro lenguaje de programación sin IDE agradecerá.<br /><br />A diferencia de Komodo, Notepad++ y gEdit con Plugins, debo afirmar que Sublime Text 2 tiene buen rendimiento, es ligero (No como Eclipse o NetBeans para PHP) y muy productivo, por tanto vale la pena pagar la licencia y sino, pues habrá que lidiar con el mensaje que recuerda a diario y si tiempo de caducidad el mensaje "UNREGISTERED".<br /><br />Aquí va la razón de este tutorial. La primera vez que instalé Sublime Text 2 quise instalar plugins los famosos plugins pero encontré difícil entender como funciona el Install Package. Respiré profundo y busqué guias de Sublime Text 2 en Google, pero no encontré nada interesante que un novato pueda entender a primera vista. Borré Sublime de mi Computadora. Pero luego le di una segunda oportunidad y aquí estamos.<br /><br />Fuera frustración, aquí vamos.<br /><br /><a href="" name="more" style="border: 0px; color: #333333; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; text-decoration: underline; vertical-align: baseline;"></a><br /><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">1. Instalar Sublime Text</b><br /><br />Lo primero es descargar el programa desde <a href="http://www.sublimetext.com/" style="border: 0px; color: #333333; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">http://www.sublimetext.com</a> según el sistema operativo. Para OSX y Windows no es muy complicado hacer el proceso de instalación, el problema aparece cuando se trata de Linux. Hay que descargar, configurar...<br /><br />Para facilitarnos la vida en Ubuntu 12.04 podemos usar un Deb creado por InfinitUbuntu. Descargamos el deb e instalamos en Ubuntu con un doble click sin complicaciones.<br /><br /><a href="http://www.infinitubuntu.com/2012/06/sublime-text-22181-linux-deb.html" style="border: 0px; color: #333333; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">http://www.infinitubuntu.com/2012/06/sublime-text-22181-linux-deb.html</a><br /><br />Otra manera es usando los repositos (cosa que no funciona muy bien para mi a la hora de recibir actualizaciones en Ubuntu y para otros sí)<br /><br /><code style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">$ sudo add-apt-repository ppa:webupd8team/sublime-text-2</code><br /><code style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">$ sudo apt-get update</code><br /><code style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">$ sudo apt-get install sublime-text-2</code><br /><br />En fin.<br /><br /><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">2. Instalar el Package Control</b><br /><br />Sublime Text 2 tiene un gestor de paquetes. <i style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">El truco es activar el gestor</i>. Busqué en los menús, pero no encontré nada obvio con la palabra "Install Package" o algo parecido con "Package". Solo encuentro<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Preference</b> ><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;"> Browse Package. </b>que me envía a una carpeta del sistema. Muy raro.<br /><br />Para instalar el gestor abrimos la consola en el menú <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">View</b> > <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Show Console </b>y en la línea inferior pegamos lo siguiente:<br /><br /><code style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'</code><br /><br />Se vería así:<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://1.bp.blogspot.com/-W56palV9xP8/UAgkvYhj7-I/AAAAAAAACLM/RbR3fj9nVf8/s1600/sublime+text+install+package+console.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="262" src="http://1.bp.blogspot.com/-W56palV9xP8/UAgkvYhj7-I/AAAAAAAACLM/RbR3fj9nVf8/s320/sublime+text+install+package+console.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">Hay que adminitilo: Una manera Friki de instalar Package Control en Sublime Text 2</td></tr>
</tbody></table>
Enter luego, reiniciamos Sublime Text 2 y notamos que hay algo nuevo en el menú. Ahora hay un elemento nuevo en <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Preference</b> > <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Package Control</b>. Mágico.<br /><br /><blockquote class="tr_bq" style="border: 0px; color: #888888; font-style: italic; margin: 25px 0px 25px 10px; outline: 0px; padding: 0px 20px; quotes: none; vertical-align: baseline;">
Si te gustan las emociones intensas y deseas probar el modo manual de instalar el Package Control recomiendo visitar las instrucciones que se presentan en<a href="http://wbond.net/sublime_packages/package_control/installation" style="border: 0px; color: #333333; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">http://wbond.net/sublime_packages/package_control/installation</a></blockquote>
<br />De acuerdo, presionamos <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Shift + Ctrl + P</b> para obtener un menú oculto, escribimos <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">"Install Package"</b>, presionamos <b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Enter</b> y esperaremos un poco hasta que el menú nos entregue la lista de paquetes disponibles para descarga. Seleccionamos en la lista el paquete que nos interesa y Listo, añadimos extensiones a Sublime Text 2.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://3.bp.blogspot.com/-8zkNW6bpGRo/UAgnDfItBwI/AAAAAAAACLU/6zgz7Gi7wBQ/s1600/install+package+sublime+text+2.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="262" src="http://3.bp.blogspot.com/-8zkNW6bpGRo/UAgnDfItBwI/AAAAAAAACLU/6zgz7Gi7wBQ/s320/install+package+sublime+text+2.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">Shift + Ctrl + P es el conjuro para llamar al menú oculto de Sublime Text 2</td></tr>
</tbody></table>
<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">2. Paquetes de Sublime Text 2 recomendados</b><br /><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></b><br />Son muchos los paquetes de Sublime Text 2, probarlos todos nos daría mucho tiempo, así que hice una pequeña lista de paquetes fundamentales que te pueden interesar:<br /><br /><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">SublimeLinter</b><br />Subraya los potenciales errores de un programa, por ejemplo, olvidaste el punto y coma al final o una expresión no tiene los paréntesis necesarios.<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://2.bp.blogspot.com/-ior-VDhYtZg/UAgtdPN3mTI/AAAAAAAACLg/ZPpTHPUHZk4/s1600/sublimelinter.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="114" src="http://2.bp.blogspot.com/-ior-VDhYtZg/UAgtdPN3mTI/AAAAAAAACLg/ZPpTHPUHZk4/s320/sublimelinter.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">SublimeLinter ayuda mucho.</td></tr>
</tbody></table>
<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Alignment</b><br />Formatear código rápido presionando Ctrl + Alt + a.<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://2.bp.blogspot.com/-B6bjrF-1GsI/UAgtfA2EKCI/AAAAAAAACLo/iL2S2Rc2u1g/s1600/SublimeAlignment.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="110" src="http://2.bp.blogspot.com/-B6bjrF-1GsI/UAgtfA2EKCI/AAAAAAAACLo/iL2S2Rc2u1g/s320/SublimeAlignment.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">Mucho mejor y más claro.</td></tr>
</tbody></table>
<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">FileDiffs</b><br />Compara archivos entre los Tabs actuales.<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://4.bp.blogspot.com/-e6hNTuF77Ps/UAgtj5ahaKI/AAAAAAAACLw/6672_F_0GEo/s1600/Sublime+FileDiffs.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="152" src="http://4.bp.blogspot.com/-e6hNTuF77Ps/UAgtj5ahaKI/AAAAAAAACLw/6672_F_0GEo/s320/Sublime+FileDiffs.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">Diff Sencillo sin problemas.</td></tr>
</tbody></table>
<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">SublimeCodeIntel</b><br />Completa el código.<br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; padding: 4px; position: relative; text-align: center;"><tbody>
<tr><td><a href="http://2.bp.blogspot.com/-KTteCM7GJQs/UAgt9H-pKKI/AAAAAAAACL4/RPQNb5nf8DQ/s1600/SublimeCodeIntel.png" imageanchor="1" style="border: 0px; color: #333333; cursor: pointer; font-size: 12px; margin: 0px auto; outline: 0px; padding: 0px; vertical-align: baseline;"><img border="0" height="180" src="http://2.bp.blogspot.com/-KTteCM7GJQs/UAgt9H-pKKI/AAAAAAAACL4/RPQNb5nf8DQ/s320/SublimeCodeIntel.png" style="background-color: white; border: 1px solid rgb(221, 221, 221); cursor: pointer; height: auto; max-width: 578px; padding: 8px; position: relative;" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 10px;">Extrañaba el completado, sobretodo en PHP.</td></tr>
</tbody></table>
<b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">Yii Framework Snipped</b><br />Soporte para PHP Yii Framework.<br /><br /><b style="border: 0px; color: #222222; line-height: 1; margin: 0px 0px 15px; outline: 0px; padding: 0px; vertical-align: baseline;">CodeIgniter Framework Snipped </b><br />CodeIgniter también tiene su espacio.<br /></div>
<div class="wrap entry" id="post-body-7395757355859590120" style="border: 0px; color: #555555; font-family: 'Droid Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 16px; margin: 0px; outline: 0px; padding: 15px 40px 40px; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline;">
<span style="font-size: xx-small;">Referencia Original de <a href="http://www.vidaamarilla.com/2012/07/tutorial-para-sublime-text-2.html">http://www.vidaamarilla.com/2012/07/tutorial-para-sublime-text-2.html</a></span></div>
<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1tag:blogger.com,1999:blog-36502892.post-73998898447561168542012-03-05T16:55:00.001-06:002012-03-05T16:58:21.923-06:00PHP: Contar archivos de una carpeta o directorio<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(51, 51, 51); font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><strong>A veces tenemos que lidiar con algunos codigos para tener control de nuestro sitio web.</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(51, 51, 51); font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); ">A continuacion les dejo un codigo que seguro les ayudara para contar archivos (en este caso imagenes) de una carpeta o directorio especifico</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(51, 51, 51); font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><span id="more-410"></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(51, 51, 51); font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); ">Pueden usar otras extensiones si lo desean (doc, pdf, swf, etc.)</p><h3 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 9px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 14px; color: rgb(51, 51, 51); line-height: 18px; background-color: rgb(255, 255, 255); ">Codigo</h3><div class="code" style="font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); "><!--?php </span--></span></span></code></div><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); "><br /></span><span style="color: rgb(0, 0, 187); ">$total_imagenes </span><span style="color: rgb(0, 119, 0); ">= count</span><span style="color: rgb(0, 119, 0); ">(</span><span style="color: rgb(0, 0, 187); ">glob("carpeta/{*.jpg,*.gif,*.png}",GLOB_BRACE)</span><span style="color: rgb(0, 119, 0); ">);<br /></span></span></code></div><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); ">echo </span><span style="color: rgb(0, 0, 187); ">"</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">total_imagenes = </span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">".$</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">total_imagenes</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); ">;<br />}<br /></span><span style="color: rgb(0, 0, 187); ">?></span></span></code></div><div class="numbers"><p style="color: rgb(51, 51, 51); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Tambien pueden contar un archivo especifico.</p><h3 style="color: rgb(51, 51, 51); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 9px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; ">Codigo</h3><div class="code"><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); "><!--?php </span--></span></span></code></div><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); "><br /></span><span style="color: rgb(0, 0, 187); ">$total_imagenes </span><span style="color: rgb(0, 119, 0); ">= count</span><span style="color: rgb(0, 119, 0); ">(</span><span style="color: rgb(0, 0, 187); ">glob("carpeta/mi_foto.jpg",GLOB_BRACE</span><span style="color: rgb(0, 119, 0); ">));<br /></span></span></code></div><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); ">echo </span><span style="color: rgb(0, 0, 187); ">"</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">total_imagenes = </span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">".$</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); ">total_imagenes</span></span></code><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 119, 0); ">;<br />}<br /></span><span style="color: rgb(0, 0, 187); ">?></span></span></code></div><div class="numbers" style="color: rgb(51, 51, 51); "><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); background-position: initial initial; background-repeat: initial initial; "><span style="color: rgb(0, 0, 0); "><span style="color: rgb(0, 0, 187); "><br /></span></span></code></div><div class="numbers" style="text-align: right; "><span><a href="http://tydw.wordpress.com/2008/06/24/php-contar-archivos-de-una-carpeta-o-directorio/"><code style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); ">fuente </code>http://tydw.wordpress.com/2008/06/24/php-contar-archivos-de-una-carpeta-o-directorio/</a></span></div></div></div></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com3tag:blogger.com,1999:blog-36502892.post-18900270951353160012012-02-28T21:31:00.003-06:002012-02-28T21:33:04.439-06:00960px El Tamaño Ideal Para Una Página<div style="text-align: center;"><br /></div><span style="font-style: normal; font-variant: normal; font-weight: normal; color: rgb(60, 60, 60); font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: -webkit-auto; background-color: rgb(255, 255, 255); "><div style="text-align: justify;"><span>Me encuentro en </span><a href="http://www.xyberneticos.com/index.php/2007/05/31/960px-el-tamano-perfecto/" style="text-decoration: none; color: rgb(68, 99, 162); ">Xybernéticos</a><span> que el tamaño perfecto para diseñar una página es de 960 pixeles (aunque la </span><a href="http://www.jeffwoelker.com/2007/05/05/usability-the-great-debate-of-web-design-1024-x-768-or-800-x-600/" style="text-decoration: none; color: rgb(68, 99, 162); ">teoría</a><span> de la usabilidad dice que tiene que ser de menos de 800 por aquello de que todos puedan ver las cosas igual)… pero bueno porque 960?.. porque es un número que es divisible entre 1, 2, 3, 4, 5, 8 y 10, de esta forma podemos tener ese mismo número de columnas en el sitio conservando la simetría y proporción.</span></div></span><div><div style="text-align: -webkit-auto;"><span ><span style="font-size: 12px; line-height: 18px;"><br /></span></span></div><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 430px; height: 220px;" src="http://www.estrafalarius.com/wp-content/uploads/2007/06/523945873_9de94a2923_o.jpg" border="0" alt="" /><div><span style="font-style: normal; font-variant: normal; font-weight: normal; color: rgb(60, 60, 60); font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: -webkit-auto; background-color: rgb(255, 255, 255); "><br /></span></div><div style="text-align: right;"><span ><span style="font-style: normal; font-variant: normal; font-weight: normal; color: rgb(60, 60, 60); font-family: Arial, Helvetica, sans-serif; line-height: 18px; text-align: -webkit-auto; background-color: rgb(255, 255, 255); ">fuente </span><a href="http://www.estrafalarius.com/2007/06/04/960px-el-tamano-ideal-para-una-pagina/">http://www.estrafalarius.com/2007/06/04/960px-el-tamano-ideal-para-una-pagina/</a></span></div></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1tag:blogger.com,1999:blog-36502892.post-4005694527648109572012-02-28T16:23:00.002-06:002012-02-28T16:28:33.972-06:00Que es una DMZ?<div style="text-align: left;"><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">Una </span><strong style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">DMZ</strong><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; "> (del inglés </span><em style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">Demilitarized zone</em><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">) o Zona DesMilitarizada. Una </span><strong style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">zona desmilitarizada</strong><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; "> (DMZ) o </span><strong style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">red perimetral</strong><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; "> es una red local que se ubica entre la red interna de una organización y una red externa, generalmente </span><a href="http://es.wikipedia.org/wiki/Internet" title="Internet" style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">Internet</a><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; background-color: initial; text-align: justify; ">.</span></div><div style="text-align: left;"><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; "><br /></span></div><div style="text-align: left;"><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; ">El objetivo de una DMZ es que las conexiones </span><strong style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; ">desde</strong><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; "> la red interna y la externa a la DMZ estén permitidas, mientras que las conexiones</span><strong style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; ">desde</strong><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; "> la DMZ sólo se permitan a la red externa, es decir: los equipos locales (</span><a href="http://es.wikipedia.org/wiki/Host" title="Host" style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">hosts</a><span style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: justify; background-color: initial; ">) en la DMZ no pueden conectar con la red interna.</span></div><div class="post-title" style="background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); text-align: justify; background-position: 50% 100%; "><div style="background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 100% 100%; "><h2 style="margin-top: 1em; margin-right: 1em; margin-bottom: 0px; margin-left: 0px; "><p style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-style: normal; font-variant: normal; color: rgb(85, 85, 85); font-size: 12px; font-weight: normal; line-height: 18px; ">Esto permite que los equipos (hosts) de la DMZ’s puedan dar servicios a la red externa a la vez que protegen la red interna en el caso de que intrusos comprometan la seguridad de los equipos (host) situados en la zona desmilitarizada. Para cualquiera de la red externa que quiera conectarse ilegalmente a la red interna, la zona desmilitarizada se convierte en un callejón sin salida.</p><p style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-style: normal; font-variant: normal; color: rgb(85, 85, 85); font-size: 12px; font-weight: normal; line-height: 18px; "><span id="more-392"></span>La DMZ se usa habitualmente para ubicar servidores que es necesario que sean accedidos desde fuera, como servidores de <a href="http://es.wikipedia.org/wiki/E-mail" title="E-mail" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">e-mail</a>, <a href="http://es.wikipedia.org/wiki/World_Wide_Web" title="World Wide Web" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">Web</a> y <a href="http://es.wikipedia.org/wiki/Domain_Name_System" title="Domain Name System" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">DNS</a>.</p><p style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-style: normal; font-variant: normal; color: rgb(85, 85, 85); font-size: 12px; font-weight: normal; line-height: 18px; ">Esto se ve muchísimo más claro en un esquema:</p></h2><h2 style="margin-top: 1em; margin-right: 1em; margin-bottom: 0px; margin-left: 0px; "></h2><h2 style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; color: rgb(102, 136, 187); font-size: 2em; margin-top: 1em; margin-right: 1em; margin-bottom: 0px; margin-left: 0px; "><img src="http://www.solusan.com/wp-content/2007/03/dmz1.jpg" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 509px; height: 624px; " /></h2><div><p align="left" style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 18px; ">Las conexiones que se realizan desde la red externa hacia la DMZ se controlan generalmente utilizando <a href="http://es.wikipedia.org/wiki/Port_address_translation" title="Port address translation" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">port address translation</a> (PAT).</p><p align="left" style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 18px; ">Habitualmente una configuración DMZ es usar dos cortafuegos, donde la DMZ se sitúa en medio y se conecta a ambos cortafuegos, uno conectado a la red interna y el otro a la red externa. Esta configuración ayuda a prevenir configuraciones erróneas accidentales que permitan el acceso desde la red externa a la interna. Este tipo de configuración también es llamado cortafuegos de subred monitoreada (screened-subnet firewall).</p><p style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 18px; "><strong><span class="mw-headline">Origen del término:<br /></span></strong><br />El término <strong>zona desmilitarizada</strong> es tomado de la franja de terreno neutral que separa a ambas Coreas, y que es una reminiscencia de la <a href="http://es.wikipedia.org/wiki/Guerra_corea" title="Guerra corea" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">Guerra de Corea</a>, aún vigente y en tregua desde <a href="http://es.wikipedia.org/wiki/1953" title="1953" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">1953</a>. Paradójicamente, a pesar de que <a href="http://es.wikipedia.org/wiki/Zona_Desmilitarizada_de_Corea" title="Zona Desmilitarizada de Corea" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">esta zona desmilitarizada</a> es terreno neutral, es una de las más peligrosas del planeta, y por ello da nombre al sistema <strong>DMZ</strong>.</p><p style="color: rgb(85, 85, 85); font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 18px; ">Un término relacionado directamente con esta tecnlogía es el llamado equipo <a href="http://es.wikipedia.org/wiki/basti%C3%B3n" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">bastión</a>, éste, normalmente a través de dos tarjetas de red (interfaces) mantiene aislada la red local de la red externa, es decir, la <a href="http://es.wikipedia.org/wiki/LAN" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">LAN</a> de la <a href="http://es.wikipedia.org/wiki/WAN" style="color: rgb(85, 119, 153); text-decoration: none; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); ">WAN</a>.</p></div><div><br /></div><div style="text-align: right;"><span ><span style="font-weight: normal;">fuente </span></span><a href="http://www.solusan.com/que-es-una-dmz.html" style="font-size: x-small; background-color: initial; ">http://www.solusan.com/que-es-una-dmz.html</a></div><p style="font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-style: normal; font-variant: normal; color: rgb(85, 85, 85); font-size: 12px; font-weight: normal; line-height: 18px; "><br /></p></div></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-71431964677757027412012-01-18T15:05:00.003-06:002012-01-18T15:10:54.884-06:00Ajustar width del jqgrid a un div contenedorSaludos, esta ocasión les comento como podemos hacer para que nuestro elemento <b>jqgrid</b> pueda ser ajustado al contenedor padre, en este caso solo debemos escribir la siguiente linea de código después de la llamada principal al <b>jqgrid</b><div><br /></div><div><span >$("#grid_id").setGridWidth($('#box-content').width(), true);</span></div><div><br /></div><div>con esto no necesariamente deberemos asignar un width estático en las propiedades del elemento <b>jqgrid</b></div><div><b><br /></b></div><div>Nos leemos en la proxima entrada.</div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com5tag:blogger.com,1999:blog-36502892.post-6076362950933841492011-12-06T16:20:00.001-06:002011-12-06T16:23:51.644-06:00Múltiples llamadas AJAX en CakePHP causa error 403 o logoutSituación:<br /><br /><div style="text-align: justify;">Desarrollando una aplicación web, tiene un formulario que contenía entre otros elementos una etiqueta SELECT de HTML con varias etiquetas OPTION que al seleccionarlas hace una llamada AJAX (utilizando jQuery) para buscar una información en específica y desplegarla.</div><br />Problema:<br /><br /><div style="text-align: justify;">Cuando haces rápidamente clicks a varias de las etiquetas OPTION, lo que resulta en varias llamadas AJAX simultáneas, la primera llamada es procesada y la segunda y/o posteriores dan un error 403, y si tienes activado un módulo de seguridad te devolverá la página de login.</div><br />Solución:<br /><br /><div style="text-align: justify;">Luego de Googlear la solución y leer foros encontré que la solución es una modificación bien sencilla, simplemente debes de cambiar el valor de la constante ‘Security.level’ de ‘high’ a ‘medium’ que se encuentra en el archivo ‘/app/config/core.php’.</div><br />Explicación:<br /><br /><div style="text-align: justify;">Cuando configuramos el nivel de seguridad de CakePHP a ‘high’ cada llamada que se realiza entre el cliente al servidor es encriptada con un valor diferente lo cual afecta al reseteo y cambia valor constante de las Cookies de seguridad utilizadas por CakePHP. Cuando reconfiguramos el nivel de seguridad a ‘medium’ la medida ya descrita es pasada por alto.</div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-11273299984273437142011-10-21T02:07:00.001-05:002011-10-21T02:08:35.741-05:00Funciones de ordenamiento en phpVeamos directamente las funciones disponibles para ordenar arrays.<br /><br /><span style="font-weight:bold;">sort()</span><br /><br />Es la función más básica para ordenar arrays en PHP. Ordena el array de valores menores a mayores. Lo vemos con un ejemplo.<br /><br />//Ordenar desde el menor al mayor <br />$alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo"); <br />sort($alumnos); <br />foreach ($alumnos as $key => $val) { <br /> echo "alumnos[" . $key . "] = " . $val . "<br>"; <br />}<br /><br />Que dará como resultado: <br />alumnos[0] = Alberto <br />alumnos[1] = Gerardo <br />alumnos[2] = Juan <br />alumnos[3] = Marcelo <br />alumnos[4] = Pepe<br /><br /><span style="font-weight:bold;">rsort()</span><br /><br />Esta función ordena el array por valores. La "r" delante quiere decir que ordena en orden reverso, de mayor a menor.<br /><br />//ordenar de mayor a menor (orden inverso... Reverse order) <br />$alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo"); <br />rsort($alumnos); <br />foreach ($alumnos as $key => $val) { <br /> echo "alumnos[" . $key . "] = " . $val . "<br>"; <br />}<br /><br />Que daría como respuesta: <br />alumnos[0] = Pepe <br />alumnos[1] = Marcelo <br />alumnos[2] = Juan <br />alumnos[3] = Gerardo <br />alumnos[4] = Alberto<br /><br /><span style="font-weight:bold;">ksort()</span><br /><br />También podemos ordenar un array por el índice o llave, que quiere decir que en lugar de ordenar atendiendo a los valores, se ordenaría atendiendo al índice que tienen. Para ver este ejemplo utilizaremos arrays asociativos, que son los que tienen índices de texto en vez de números.<br /><br />En el array siguiente vemos que tenemos índices como "h", "e", "a", en lugar de números. Lo que hará este tipo de ordenación es fijarse en esos índices para poner el array ordenado por ellos.<br /><br />//Ordenar arrays por su índice <br />$calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral"); <br />ksort($calles); <br />foreach ($calles as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />Esto dará como resultado esta ordenación: <br />a = Bailén <br />e = Castellana <br />h = Leganitos <br />z = Fuencarral<br /><br /><span style="font-weight:bold;">krsort()</span><br /><br />También podemos ordenar por índices pero en sentido inverso. Es decir, por índices pero de mayor a menor.<br /><br />//ordenar por índice o clave, pero en orden inverso <br />$calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral"); <br />krsort($calles); <br />foreach ($calles as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />En este caso el resultado sería el siguiente: <br />z = Fuencarral <br />h = Leganitos <br />e = Castellana <br />a = Bailén<br /><br /><span style="font-weight:bold;">asort()</span><br /><br />Esta función ordena los elementos de un array, pero manteniendo la correlación entre índices y valores a los que están asociados. Ordena por valores. Se utiliza generalmente en arrays asociativos.<br /><br />//ordenar manteniendo los índices <br />$capitales = array("España" => "Madrid", "Argentina" => "Buenos Aires", "México" => "Ciudad de México", "Brasil" => "Brasilia"); <br />asort($capitales); <br />foreach ($capitales as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />Dará como resultado el siguiente orden de array: <br />Brasil = Brasilia <br />Argentina = Buenos Aires <br />México = Ciudad de México <br />España = Madrid<br /><br /><span style="font-weight:bold;">arsort()</span><br /><br />Es lo mismo que asort(), pero realiza el orden en inverso de los valores de los arrays. Como decíamos, lo habitual es realizar este tipo de orden en arrays asociativos, pero en este caso vamos a ver el orden en un array normal (con índices numéricos) para que se vea mejor cómo trabaja la función:<br /><br />//ordenar manteniendo los índices, Reverso <br />$ciudades = array("Madrid", "Barcelona", "Valencia", "Sevilla", "Bilbao"); <br />arsort($ciudades); <br />foreach ($ciudades as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />El resultado obtenido es este: <br />2 = Valencia <br />3 = Sevilla <br />0 = Madrid <br />4 = Bilbao <br />1 = Barcelona<br /><br /><span style="font-weight:bold;">natsort()</span><br /><br />Para acabar vamos a ver esta función que hace una ordenación natural de los elementos del array, es decir, ordena tal como lo haría una persona. Hay una pequeña diferencia sobre el orden que haría sort(). La función natsort mantiene la asociación clave - valor.<br /><br />$productos = array ("producto 11", "producto 1", "producto 12", "producto 2"); <br />natsort($productos); <br />foreach ($productos as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />Esto daría como respuesta: <br />2 = producto 1 <br />4 = producto 2 <br />1 = producto 11 <br />3 = producto 12 <br />0 = producto 20<br /><br />Ahora, para que se vea la diferencia con un orden normal, vamos a ordenar ese mismo array con la función sort(), que hace un orden alfanumérico normal.<br /><br />$productos = array ("producto 11", "producto 1", "producto 12", "producto 2"); <br />sort($productos); <br />foreach ($productos as $key => $val) { <br /> echo $key ." = " . $val . "<br>"; <br />}<br /><br />El resultado de este orden será el siguiente: <br />0 = producto 1 <br />1 = producto 11 <br />2 = producto 12 <br />3 = producto 2<br /><br />Como se puede ver, el orden es distinto, porque en ese caso ordena por un orden alfanumérico estricto, sin tener en cuenta los valores como un humano lo haría.<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-28541371416212294142011-04-28T16:59:00.001-05:002011-04-28T16:59:46.085-05:00Tutorial cakePHP ITST<div style="width:425px" id="__ss_7770877"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/omicx/tutorial-de-cakephp-itst" title="Tutorial de cakePHP itst">Tutorial de cakePHP itst</a></strong><object id="__sse7770877" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tutorialdecakephpitst-110428165646-phpapp01&stripped_title=tutorial-de-cakephp-itst&userName=omicx" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7770877" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tutorialdecakephpitst-110428165646-phpapp01&stripped_title=tutorial-de-cakephp-itst&userName=omicx" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/omicx">omicx</a>.</div></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-28008239362652940092010-12-07T10:08:00.005-06:002010-12-07T10:58:09.208-06:00Implementando El Patrón De Diseño Mvc con PHPPara implementar este patrón y entenderlo un poco más, veremos como convertir una aplicación PHP básica en una aplicación basada en la arquitectura MVC. En este caso, la aplicación será un listado de posts en un blog. En la manera tradicional de PHP, mostrar un listado de post desde la base de datos, se vería como el siguiente script:<br /><pre><code><br /><?php// Connecting, selecting database<br />$link = mysql_connect('localhost', 'myuser', 'mypassword');<br />mysql_select_db('blog_db', $link);<br /> <br />// Performing SQL query<br />$result = mysql_query('SELECT date, title FROM post', $link); <br />?><br /><html><br /> <head><br /> <title>List of Posts</title><br /> </head><br /> <body><br /> <h1>List of Posts</h1><br /> <table><br /> <tr><th>Date</th><th>Title</th></tr><br /><?php<br />// Printing results in HTML<br />while($row = mysql_fetch_array($result, MYSQL_ASSOC))<br />{<br /> echo "<tr>";<br /> printf("<td> %s </td>", $row['date']);<br /> printf("<td> %s </td>", $row['title']);<br /> echo "</tr>";<br />}<br />?><br /> </table><br /> </body><br /></html><br /><?php<br />// Closing connection<br />mysql_close($link);<br />?><br /></code></pre><br /><br />El script de arriba es rápido de escribir, rápido de ejecutar, pero es muy poco mantenible; algunos de los problemas que encontramos son que no hay chequeo de error (¿qué ocurre si la conexión a la base de datos falla?), el HTML y el código PHP están mezclados incluso entrelazados, y el código está atado a un base de datos MySQL.<br /><br />Separando la Presentación<br /><br />Las llamadas a las funciones echo y printf del script de arriba hacen el código difícil de leer. Modificar el código HTML para mejorar la presentación es un fastidio con la sintáxis actual. Por lo tanto, podemos separar el código en dos partes. Primero, el código PHP con toda la lógica de negocio en un script controlador (controller), como se muestra en el siguiente script (index.php):<br /><br /><pre><code><br /><?php// Connecting, selecting database<br />$link = mysql_connect('localhost', 'myuser', 'mypassword');<br />mysql_select_db('blog_db', $link);<br /> <br />// Performing SQL query<br />$result = mysql_query('SELECT date, title FROM post', $link);<br /> <br />// Filling up the array for the view<br />$posts = array();<br />while($row = mysql_fetch_array($result, MYSQL_ASSOC))<br />{<br /> $posts[] = $row;<br />}<br /> <br />// Closing connection<br />mysql_close($link);<br /> <br />// Requiring the view<br />require('view.php');<br /></code></pre><br /><br />El código HTML, el cual contiene algo de código PHP, es guardado en un script de vista (view.php):<br /><br /><pre><code><br /><html><br /> <head><br /> <title>List of Posts</title><br /> </head><br /> <body><br /> <h1>List of Posts</h1><br /> <table><br /> <tr><th>Date</th><th>Title</th></tr><br /> <?php foreach($posts as $post): ?><tr><br /> <td><?php echo $post['date'] ?></td><br /> <td><?php echo $post['title'] ?></td><br /> </tr><?php endforeach; ?><br /> </table><br /> </body><br /></html><br /></code></pre><br /><br />Una buena regla para determinar si la vista esta lo suficientemente limpia es que esta debería de contener la mínima cantidad de código PHP posible, de este modo la vista puede ser entendida por un diseñador HTML sin conocimientos de PHP. La sintaxis PHP más comunes en la vista son echo, if/endif, foreach/endforeach, y nada más. Además, no debería haber código PHP imprimiendo tags HTML.<br /><br />Por ende, toda la lógica es movida al controlador, y contiene solo código PHP, sin HTML. Como algo importante, deberías imaginar que el mismo controlador debería poder ser usado para diferentes presentaciones (vistas), tales como paginas HTML, archivos PDF, o en una estructura XML.<br /><br />Separando la manipulación de datos<br /><br />La mayoría del código del controlador esta dedicado a la manipulación de datos. Pero que pasa si necesitas listar los posts para otro controlador, por ejemplo, uno que tenga una salida en un feed RSS, o si quieres mantener todas las consultas a la base de datos en un solo lugar, para evitar duplicar código, o bien si decides cambiar el modelo de datos, en donde la table post pase a llamarse weblog_post, o por un requerimiento necesitas cambiarte desde MySQL a PostgreSQL. Para hacer todo esto posible, lo que necesitamos hacer es remover la manipulación de datos del controlador, y poner toda esa lógica en otro script (model.php), el cual será nuestro modelo:<br /><br /><pre><code><br /><?phpfunction getAllPosts()<br />{<br /> // Connecting, selecting database<br /> $link = mysql_connect('localhost', 'myuser', 'mypassword');<br /> mysql_select_db('blog_db', $link);<br /> <br /> // Performing SQL query<br /> $result = mysql_query('SELECT date, title FROM post', $link);<br /> <br /> // Filling up the array<br /> $posts = array();<br /> while($row = mysql_fetch_array($result, MYSQL_ASSOC))<br /> {<br /> $posts[] = $row;<br /> }<br /> <br /> // Closing connection<br /> mysql_close($link);<br /> <br /> return $posts;<br />}<br /></code></pre><br /><br />Y modificando el controlador (index.php) para incluir el modelo, tenemos:<br /><br /><pre><code><br /><?php// Requiring the model<br />require_once('model.php');<br /> <br />// Retrieving the list of posts<br />$posts = getAllPosts();<br /> <br />// Requiring the view<br />require('view.php');<br /></code></pre><br /><br />De este modo, el controlador es totalmente leible, ya que su única tarea es obtener los datos desde el modelo y pasarselo a la vista. En aplicaciones más complejas, el controlador además maneja la petición, la sesión de usuario, la autenticación, y demàs cosas.<br /><br />El modelo esta dedicado a acceder a los datos y puede ser organizado acordemente. Todos los parametros que no dependen de la capa de datos (como ser los parametros de la petición) deben ser provistos por el controlador y no accedidos directamente por el modelo. De este modo, las funciones del modelo pueden ser facilmente utilizadas en otro controlador.<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-7142610461622021742010-11-26T11:38:00.007-06:002010-11-26T11:45:13.392-06:00Generar archivos pdf con Dompdf en CodeigniterDespués de haber buscado librerías de pdf para integrarlas al codeigniter llego la conclusión de que la que más se adapta a mis necesidades es <span style="font-weight: bold;">dompdf</span>, dado que le puedo pasar una pagina HTML y este la pasa a PDF incluyendo las imágenes y algunas reglas de estilo, a continuación presento el procedimiento.<br /><br /> 1. Descargamos la librería en su versión 0.5 dado que no funciona con su versión beta me deje llevar por la manía de usar siempre la última versión en fin descárgala de aquí.<br /> 2. Descomprimir el archivo en la ruta ./system/plugins/ lo dejamos con el nombre de dompdf.<br /> 3. Creamos un plugin con el nombre to_pdf_pi.php el código para este plugin es el siguiente te recuerdo no dejar espacios porque te generaría el error Unable to stream pdf: headers already sent.<br /><br /><code style="color:orange"><br /><?php if (!defined('BASEPATH')) exit('No direct script access allowed');<br />function pdf_create($html, $filename, $stream=TRUE)<br />{<br />require_once("dompdf/dompdf_config.inc.php");<br /><br />$dompdf = new DOMPDF();<br />$dompdf->load_html($html);<br />$dompdf->render();<br />if ($stream) {<br />$dompdf->stream($filename.".pdf");<br />} else {<br />$CI =&amp; get_instance();<br />$CI->load->helper('file');<br />write_file("./invoices_temp/invoice_$filename.pdf", $dompdf->output());<br />}<br />}<br /><br /></code><br />4. En el controlador ingresaremos el siguiente código.<br /><br /><code style="color:orange"><br />function pdf ()<br />{<br />$data = 0;<br />$this ->load->plugin('to_pdf');<br />$html = $this->load->view( 'welcome_message' , $data , true );<br /><br />pdf_create ($html,'pruebas');<br />}<br /></code><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com2tag:blogger.com,1999:blog-36502892.post-39723596774462014062010-11-23T15:06:00.001-06:002010-11-23T15:07:21.844-06:00LINQ con Visual Studio 2008<div style="width:425px" id="__ss_5879793"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/omicx/linq-con-visual-studio-2008" title="Linq con visual studio 2008">Linq con visual studio 2008</a></strong><object id="__sse5879793" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linqconvisualstudio2008-101123150036-phpapp01&stripped_title=linq-con-visual-studio-2008&userName=omicx" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5879793" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linqconvisualstudio2008-101123150036-phpapp01&stripped_title=linq-con-visual-studio-2008&userName=omicx" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/omicx">omicx</a>.</div></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-16797696372935969612010-04-22T10:00:00.001-05:002010-04-22T10:02:19.886-05:00Ubuntu 10.04 LTSEn espera de Ubuntu 10.04 LTS<br /><br /><script type="text/javascript" src="http://www.ubuntu.com/files/countdown/display1.js"></script><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1tag:blogger.com,1999:blog-36502892.post-3038604946490484482010-01-11T12:40:00.001-06:002010-01-11T12:40:22.865-06:00Bases de la Maquetacion con CSS<a href=http://blog.aplicacionesweb.cl/2008/04/11/bases-de-la-maquetacion-con-css/>Bases de la Maquetacion con CSS</a><br /><br />Posted using <a href="http://sharethis.com">ShareThis</a><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com2tag:blogger.com,1999:blog-36502892.post-25205016118711503602009-12-08T10:22:00.001-06:002009-12-08T10:24:26.353-06:00Twitter desde python<p>Bueno, investigando investigando me encontré con un desarrollo para manejar las api's de twitter desde Python con el módulo python-twitter, este lo pueden descargarcon apt-get</p><p>#apt-get install python-twitter</p><p>Después de esto solo deben entrar a una consola de python y hacer lo siguiente:</p><pre>import twitter<br />api = twitter.Api('usuario', 'password')<br />status = api.PostUpdate('Actualizando desde Python')</pre><p>Es genial, para más información <a target="_blank" href="http://code.google.com/p/python-twitter/">python-twitter</a></p><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1tag:blogger.com,1999:blog-36502892.post-19216658872912832652009-07-31T17:16:00.000-05:002009-07-31T17:17:17.229-05:00System Administrator Day<p> <span class="style7" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"> <strong>July 31, 2009 <span class="style8">(Last Friday Of July)</span><br /> 10</strong></span><span style="font-family:Verdana, Arial, Helvetica, sans-serif;"><span class="style7"><strong>th Annual<br /> System Administrator Appreciation Day</strong></span></span></p><p> <span class="style6" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"> A <strong>sysadmin</strong> unpacked the server for this website from its box, installed an operating system, patched it for security, made sure the power and air conditioning was working in the server room, monitored it for stability, set up the software, and kept backups in case anything went wrong. All to serve this webpage.</span></p> <p> <span class="style6" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"> A <strong>sysadmin</strong> installed the routers, laid the cables, configured the networks, set up the firewalls, and watched and guided the traffic for each hop of the network that runs over copper, fiber optic glass, and even the air itself to bring the Internet to your computer. All to make sure the webpage found its way from the server to your computer.</span></p> <table align="right"> <tbody><tr> <td width="203"> <span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"> <strong> <img src="http://sysadminday.com/images/tedwires200.jpg" alt="Ted In Wires" width="200" border="1" height="204" /></strong></span></td> </tr> <tr> <td> <div align="center"> <span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"> <em><br /></em></span></div> </td> </tr> </tbody></table> <p class="style6"> <span class="style6" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"> A <strong>sysadmin</strong> makes sure your network connection is safe, secure, open, and working. A <strong>sysadmin</strong> makes sure your computer is working in a healthy way on a healthy network. A <strong> sysadmin</strong> takes backups to guard against disaster both human and otherwise, holds the gates against security threats and crackers, and keeps the printers going no matter how many copies of the tax code someone from Accounting prints out.</span></p><p class="style6"><span class="style6" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:78%;"><a href="http://sysadminday.com/">more</a><br /></span></p><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-40115271256912716572009-07-21T21:05:00.000-05:002009-07-21T21:06:39.186-05:00Microsoft stuns Linux world, submits source code for kernel<h3 style="text-align: justify;">Microsoft's most important open source act</h3><div style="text-align: justify;"> </div><p style="text-align: justify;">Sam Ramji, who runs the Open Source Software Lab for Microsoft and is the company's director of open source technology strategy, called the Linux kernel submission the company's most important Linux/open source commitment ever. </p><div style="text-align: justify;"> </div><p style="text-align: justify;">"It is a significant piece of technology. It is a strategic technology and it is under the GPLv2 license that the Linux kernel uses, and which the community is organized around." </p><div style="text-align: justify;"> </div><p style="text-align: justify;"><a href="http://www.networkworld.com/slideshows/2009/020909-evolution-windows.html"><b>Evolution of Microsoft Windows</b></a> </p><div style="text-align: justify;"> </div><p style="text-align: justify;">Ramji said the code could be used by any Linux distribution, commercial or otherwise, without requiring any relationship with Microsoft. That could help emerging distributions such a <a href="http://www.networkworld.com/reviews/2009/060109-ubuntu-desktop-test.html">Ubuntu</a> gain a foothold in corporate networks.<br /></p><p style="text-align: justify;"><a href="http://www.networkworld.com/news/2009/072009-microsoft-linux-source-code.html?page=2">more</a><br /></p><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-68348035811657182162009-06-06T11:51:00.001-05:002009-06-06T11:51:52.222-05:00Envio de correos con PHPMailer<p><a href="http://phpmailer.sourceforge.net/">PHPMailer</a> es una clase escrita en PHP que facilita el envío de correo, añadiendo facilidad en el envío de correos con adjuntos, en formato HTML y con diferentes codificaciones, soporte para imagenes embebidas, headers personalizados y además funciona con múltiples servidores de correo.</p> <p>El primer paso es <a href="http://sourceforge.net/project/showfiles.php?group_id=26031">descargar PHPMailer</a>, aquí encontraremos dos archivos: <strong>class.phpmailer.php</strong> el cual contiene las funciones para el envío de correo y <strong>class.smtp.php</strong> para enviar correo mediante servidores SMTP.</p> <p>yo lo he utilizado con mi cuenta de yahoo y su servidor smtp y funciona sin ningun problema.</p> <p>Aqui les dejo el ejemplo que hice:</p> <span style="color: rgb(128, 0, 0);"><?php<br /> <span style="color: rgb(153, 204, 0);">//en el directorio includes deberan estar class.phpmailer.php y class.smtp.php<br /> // primero hay que incluir la clase phpmailer para poder instanciar un objeto de la misma</span><br /> require "includes/class.phpmailer.php";<br /><span style="color: rgb(153, 204, 0);"> //instanciamos un objeto de la clase phpmailer</span><br /> $mail = new phpmailer();<br /><span style="color: rgb(153, 204, 0);"><br /> //Con PluginDir le indicamos a la clase phpmailer donde seencuentra la clase smtp </span><br /> $mail->PluginDir = "includes/";<br /><br /> <span style="color: rgb(153, 204, 0);"> //Con la propiedad Mailer le indicamos que vamos a usar un servidor smtp</span><br /> $mail->Mailer = "smtp";<br /><br /> <span style="color: rgb(153, 204, 0);"> //Asignamos a Host el nombre de nuestro servidor smtp</span><br /> $mail->Host = "smtp.mail.yahoo.com";<br /><br /> <span style="color: rgb(153, 204, 0);"> //Le indicamos que el servidor smtp requiere autenticación</span><br /> $mail->SMTPAuth = true;<br /><br /><span style="color: rgb(153, 204, 0);"> //Le decimos cual es nuestro nombre de usuario y password</span><br /> $mail->Username = "cuenta@yahoo.com.mx";<br /> $mail->Password = "password";<br /><br /> <span style="color: rgb(153, 204, 0);">//Indicamos cual es nuestra dirección de correo y el nombre que queremos que vea el usuario que lee nuestro correo</span><br /> $mail->From = "cuenta@yahoo.com.mx";<br /> $mail->FromName = "Nombre a mostrar p/e Pedrito Andrade";<br /><br /> //el valor por defecto 10 de Timeout lo cambiamos por 30<br /> $mail->Timeout=30;<br /><br /> <span style="color: rgb(153, 204, 0);"> //Indicamos cual es la dirección de destino del correo</span><br /> $mail->AddAddress("cuenta@destino.com");<br /><br /> <span style="color: rgb(153, 204, 0);">//Asignamos asunto y cuerpo del mensaje<br /> //El cuerpo del mensaje lo ponemos en formato html, haciendo<br /> //que se vea en negrita</span><br /> $mail->Subject = "Probando phpmailer";<br /> $mail->Body = "<b>Mensaje de prueba mandado con phpmailer en formato html</b>";<br /><br /> <span style="color: rgb(153, 204, 0);"> //Definimos AltBody por si el destinatario del correo no admite email con formato html </span><br /> $mail->AltBody = "Mensaje de prueba mandado con phpmailer en formato solo texto";<br /><br /> <span style="color: rgb(153, 204, 0);">//se envia el mensaje, si no ha habido problemas<br /> //la variable $exito tendra el valor true</span><br /> $exito = $mail->Send();<br /><br /> <span style="color: rgb(153, 204, 0);"> //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho<br /> //para intentar enviar el mensaje, cada intento se hara 5 segundos despues<br /> //del anterior, para ello se usa la funcion sleep </span><br /> $intentos=1;<br /> while ((!$exito) && ($intentos < 5)) {<br /> sleep(5);<br /> $exito = $mail->Send();<br /> $intentos=$intentos+1; <br /> }<span style="color: rgb(153, 204, 0);">//while</span><br /> <br /> if(!$exito)<br /> {<br /> echo "Problemas enviando correo electrónico a ".$valor;<br /> echo "<br/>".$mail->ErrorInfo; <br /> }<br /> else<br /> {<br /> echo "Mensaje enviado correctamente";<br /> }<br />?></span><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-68051941662028435932009-05-14T13:33:00.002-05:002009-05-14T13:36:25.747-05:00Nominacion de proyectos en SourceforgeSaludos lectores, les comento q he entrado al 2009 Community Choice Award de <a href="http://www.sourceforge.net/">sourceforge.net</a> con los pequeños proyectos que tengo hopedados en ese es servidor web que ofrece servicios de ayuda para el desarrollo de proyectos open source.<br /><br />aqui los enlaces para darle seguimiento.<br /><span style="font-weight:bold;"><br />Control BioAcceso.</span> Control de Asistencias Biometrico<br /><br /><a href="http://sourceforge.net/community/cca09/nominate/?project_name=Control BioAcceso&project_url=http://controlbioacces.sourceforge.net/"><img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/></a><br /><br /><span style="font-weight:bold;">VAccess.</span> Control de Asistencias por lectura de codigos de barra<br /><a href="http://sourceforge.net/community/cca09/nominate/?project_name=VAccess&project_url=http://vaccess.sourceforge.net/"><img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/></a><br /><br />Saludos y espero su aporte.<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-10580690323973731972009-04-08T12:38:00.001-05:002009-04-08T12:43:26.404-05:00Ya casi Ubuntu 9.10 Karmic KoalaMostrando el conteo de dias para el lanzamiento de Karmic Koala...<br /><script type="text/javascript" src="http://www.ubuntu.com/files/countdown/display2.js"></script><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com3tag:blogger.com,1999:blog-36502892.post-71398022797946992842009-03-31T16:16:00.002-06:002009-03-31T16:22:33.365-06:00Bases de datos HSQLDB<h2>¿Qué es HSQLDB?</h2>HSQLDB <acronym title="Hypersonic SQL Data Base" lang="en"></acronym>es un sistema de gestión de base de datos relacionales escrito en Java. Como principal ventaja tiene su velocidad y su reducido tamaño. Además, puede mantener la base de datos en memoria o en ficheros en disco. <p> Se pueden realizar las operaciones más habituales de los sistemas de gestión de bases de datos (CRUD) usando sintaxis SQL, soporta triggers, integridad referencial... </p> <p> Como curiosidad,<acronym title="Hypersonic SQL Data Base" lang="en"></acronym> HSQLDB es el gestor de base de datos usado por "Base", el equivalente de Access dentro de Open Office.</p> <p>Más información sobre <a href="http://www.hsqldb.org/doc/guide/">hsqldb</a><acronym title="Hypersonic SQL Data Base" lang="en"></acronym><br /></p><p>Saludos ...<br /></p><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com2tag:blogger.com,1999:blog-36502892.post-47259724471376488132009-02-17T10:19:00.003-06:002009-02-17T10:26:26.188-06:00Lenny is out !!!Hola, esta vez leo copio y pego..<br /><br /><p style="text-align: justify;"><strong>14 de febrero de 2009</strong></p><div style="text-align: justify;"> </div><p style="text-align: justify;">El Proyecto Debian se complace en anunciar la publicación oficial de la versión 5.0 de Debian GNU/Linux, nombre en clave <q>lenny</q>, tras 22 meses de desarrollo constante. Debian GNU/Linux es un sistema operativo libre que soporta un total de doce arquitecturas de procesador e incluye los entornos de escritorio KDE, GNOME, Xfce y LXDE. También ofrece compatibilidad con el estándar FHS v2.3 y software desarrollado para la versión 3.2 de LSB.</p><div style="text-align: justify;"> </div><p style="text-align: justify;">Debian GNU/Linux se ejecuta en ordenadores que van desde agendas hasta supercomputadoras, pasando por prácticamente cualquier sistema intermedio. Se da soporte a un total de doce arquitecturas: Sun SPARC (sparc), HP Alpha (alpha), Motorola/IBM PowerPC (powerpc), Intel IA-32 (i386), IA-64 (ia64), HP PA-RISC (hppa), MIPS (mips, mipsel), ARM (arm, armel), IBM S/390 (s390), y AMD64 de AMD y EM64T de Intel (amd64).</p><p style="text-align: justify;">El proyecto dedica la publicación de Debian GNU/Linux 5.0 <q>Lenny</q> a Thiemo Seufer, un desarrollador Debian que falleció el pasado 26 de diciembre de 2008 en un trágico accidente de coche. Thiemo participaba de muchas formas distintas en Debian. Mantenía algunos paquetes y era la persona que más ayudaba en la adaptación de Debian a la arquitectura MIPS. También era un miembro del grupo del núcleo, así como un miembro del grupo que trabaja en el instalador de Debian. Sus contribuciones han ido más allá del proyecto Debian: trabajó en la adaptación a MIPS del núcleo de Linux, en la emulación MIPS de qemu y en muchos proyectos pequeños, demasiados para describirlos todos aquí.</p><div style="text-align: justify;"> </div><p style="text-align: justify;">Echaremos de menos el trabajo, dedicación, amplio conocimiento técnico y la habilidad de compartir todo esto con otras personas de Thiemo. No olvidaremos todas sus contribuciones. El gran nivel del trabajo de Thiemo pondrá el listón alto a los que quieran continuar su trabajo.</p><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><p style="text-align: justify;"><br /></p><div style="text-align: justify;"><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b9fPPb_hp5w/SZrkHUODw3I/AAAAAAAAAFw/Te5jDCkYZ9I/s1600-h/lennybanner_indexed.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 163px;" src="http://1.bp.blogspot.com/_b9fPPb_hp5w/SZrkHUODw3I/AAAAAAAAAFw/Te5jDCkYZ9I/s200/lennybanner_indexed.png" alt="" id="BLOGGER_PHOTO_ID_5303802325520073586" border="0" /></a><a href="http://www.debian.org/News/2009/20090214">noticia oficial </a><br /></div><br />Saludos ...<br /></div><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-61264115581390399542009-01-15T01:19:00.002-06:002009-01-15T01:41:26.782-06:00Crear un Pen Drive Usb Booteable de KnoppixSaludos a toda la comunidad de lectores, pues les cuento que he creado una usb booteable de GNU/Linux Knoppix, estas son las herramientas que utilice:<br /><br /><p>Hay que descargar Syslinux de aqui <a href="http://syslinux.zytor.com/index.php" onclick="javascript:pageTracker._trackPageview ('/outbound/syslinux.zytor.com');">http://syslinux.zytor.com/index.php</a>.</p> <p>Extraer syslinux en C:\syslinux-3.11.</p> <p>ejecutar en el interprete de comandos syslinux.exe que se encuentra en “C:\syslinux-3.11\win32\syslinux.exe (Unidad USB)”<br />p/e. “C:\syslinux-3.11\win32\syslinux.exe E:”</p> Ahora tenemos que copiar el contenido del disco de Knoppix a la USB<br /><p>El la USB , mover el contenido de /boot/isolinux a la raiz de la USB. Una vez realizado esto borrar el directorio boot.</p> <p>Tambien hay que eliminar el archivo ISOlinux.bin.</p> <p>Renombrar el archivo ISOlinux.cfg a SYSlinux.cfg.</p> <p>Esto es todo lo qu debemos hacer!<span style="font-weight: bold;"><br /></span></p>Solo nos queda reiniciar nuestra Pc e iniciar desde la USB.<br /><br />Espero le sea de utilidad ...<span style="font-weight: bold;"></span><div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1tag:blogger.com,1999:blog-36502892.post-28644625265087397292008-11-19T23:40:00.003-06:002008-11-19T23:57:03.715-06:00Instalando Squid en Guindos Xp<div style="text-align: justify;">Hola comunidad de lectores.. esta vez he configurado un servidor proxy con squid en guindos xp debido a q' es el sistema q' manejan en la escuela donde lo puse, no se preocupen pronto lo migraré a GNU/Linux esa es la idea.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b9fPPb_hp5w/SST7XIZKgMI/AAAAAAAAAEU/0MZIwE1oqoE/s1600-h/proxy.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_b9fPPb_hp5w/SST7XIZKgMI/AAAAAAAAAEU/0MZIwE1oqoE/s200/proxy.jpg" alt="" id="BLOGGER_PHOTO_ID_5270613838738915522" border="0" /></a></div><br /><div style="text-align: justify;">Un proxy nos sirve para permitir el acceso a Internet a todos los equipos de una organización cuando sólo se puede disponer de un único equipo conectado, esto es, una única dirección IP.<br />Un proxy permite a otros equipos conectarse a una red de forma indirecta a través de él.<br /><br />Cuando un equipo de la red desea acceder a una información o recurso, es realmente el proxy quien realiza la comunicación y a continuación traslada el resultado al equipo inicial.<br /></div><br /><br />Aqui les va que es lo q hice:<br /><br />1. Primero desarge el paquete de squid para windows aqui<br /><br />2. Descomprimimos el paquete con winrar en el disco local C:<br /><br />3. La carpeta que se descomprime en C: hay que renombrarla y llamarla squid<br /><br />4. Entramos a la carpeta C:/squid/etc y renombramos los archivos .deafult, para que siempre los tengamos originales guardados, los dejamos todos con extensión .conf<br /><br />5. Abrimos el archivo squid.conf con nuestro editor preferido.<br /><br />6. Allí buscamos la variable http_port podemos dejarla 3128 por defecto o poner 8080 o ambas.<br /><br />7. Buscamos la línea cache_dir ufs c:/squid/var/cache 100 16 256 y nos aseguramos que este descomentada (sin el símbolo # al principio de la linea); también podemos aumentar el tamaño de la memoria para el almacenamiento de 100 a otro valor por ej. 1000.<br /><br />8. Buscamos la línea visible_hostname y colocamos el nombre de nuestra máquina, si no lo sabes te vas a inicio y luego a ejecutar y tipeas msinfo32 allí verás el nombre del sistema.<br /><br />9. Buscamos la sección de las listas de acceso, se identifican porque contienen la palabra acl, es la sección ACCESS CONTROLS del squid.conf; allí buscamos donde dice:<br /><br /> acl all src 0.0.0.0/0.0.0.0<br /> acl manager proto cache_object<br /> acl localhost src 127.0.0.1/255.255.255.255<br /> acl to_localhost dst 127.0.0.0/8<br /> acl SSL_ports port 443 563<br /> acl Safe_ports port 80 # http<br /> acl Safe_ports port 21 # ftp<br /> acl Safe_ports port 443 563 # https, snews<br /> acl Safe_ports port 70 # gopher<br /> acl Safe_ports port 210 # wais<br /> acl Safe_ports port 1025-65535 # unregistered ports<br /> acl Safe_ports port 280 # http-mgmt<br /> acl Safe_ports port 488 # gss-http<br /> acl Safe_ports port 591 # filemaker<br /> acl Safe_ports port 777 # multiling http<br /> acl CONNECT method CONNECT<br /><br /> y debajo escribimos acl nuestra_red src 192.168.0.0/255.255.255.0 También podemos crear un archivo .txt y guardarlo en c:/squid/etc, en dicho archivo colocamos la o las IP que queramos que accedan a los servicios de red.<br /><br /> Ejemplo:<br /> 192.168.0.1<br /> 192.168.0.2<br /> 192.168.1.3<br /><br /> 192.168.3.45 , (sólo la máquinas con estas ip accederán a Internet)<br /> el archivo se nombra permitidos.txt y se guarda en c:/squid/etc, y entonces debajo de la línea acl CONNECT method CONNECT colocaríamos acl nuestra_red src “c:/squid/etc/permitidos.txt”; de la primera forma estaríamos dando acceso a toda la red y de esta sería acceso solo a algunas máquinas.<br /><br />10. Buscamos la línea http_access allow manager localhost y debajo de ella agregamos: http_acess allow nuestra_red<br /><br />11. Crear los siguientes directorios en forma manual<br /><br /> C:\squid\var\cache<br /> C:\squid\var\cache\00<br /> C:\squid\var\cache\01<br /> C:\squid\var\cache\02<br /> C:\squid\var\cache\03<br /> C:\squid\var\cache\04<br /> C:\squid\var\cache\05<br /> C:\squid\var\cache\06<br /> C:\squid\var\cache\07<br /> C:\squid\var\cache\08<br /> C:\squid\var\cache\09<br /> C:\squid\var\cache\0A<br /> C:\squid\var\cache\0B<br /> C:\squid\var\cache\0C<br /> C:\squid\var\cache\0D<br /> C:\squid\var\cache\0E<br /> C:\squid\var\cache\0F<br /><br /> O sea nos vamos al direcorio var y creamos un directorio llamado cache y luego dentro de éste creamos varios directotios nombrados de 00 hasta 0F (Esto es numeración Hexadecimal)<br /><br />12. Ir a menú Inicio, darle clic a ejecutar y escribir cmd y darle a aceptar (esto es para abrir una consola)<br /><br />13. Una vez en la consola escribir: c:/squid/sbin/squid –z y si todo ha salido bien no dará mensajes de error.<br /><br />14. Luego escribir c:/squid/sbin/squid –i lo cual instalará squid como servicio de Windows xp.<br /><br />15. Iniciar el servicio squid, ir a menú Inicio y hacer clic en ejecutar, luego escribimos services.msc y le damos clic a aceptar, esto nos abrirá la ventana de los servicios y allí buscamos a squid y lo iniciamos o reiniciamos.<br /><br />De esta forma ya tendremos nuestro Proxy-cache funcionando en Windows.<br /><br />Solo nos queda configurar nuestros navegadores web cliente con la direccion ip del servidor proxy y el puerto asignado.<br /><br />Saludos !!!<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com0tag:blogger.com,1999:blog-36502892.post-60606646367947372462008-11-13T16:22:00.004-06:002008-11-13T16:55:22.927-06:00Sistemas Biometricos..<div style="text-align: justify;">Hola comunidad, esta ocasión comentaré un poco sobre los sistemas biométricos los cuales son métodos automáticos de verificación e identificación de un individuo utilizando características físicas y comportamientos precisos.<br /><br />La biometría es el estudio de métodos automáticos para el reconocimiento único de humanos basados en uno o más rasgos conductuales o físicos intrínsecos. El término se deriva de las palabras griegas "bios" de vida y "metrón" de medida.<br /><br />La "biometría informática" es la aplicación de técnicas matemáticas y estadísticas sobre los rasgos físicos o de conducta de un individuo, para “verificar” identidades o para “identificar” individuos.<br /></div><br /><span style="font-weight: bold;">Principales Tecnologías Biométricas</span><br /><ul><li> Huella Digital (Fingerprint)</li><li> Biometría de mano (Hand Geometry)</li><li> Iris</li></ul><span style="font-weight: bold;"><br />Otras Tecnologías Biométricas</span><br /><ul><li> Rostro</li><li> Voz</li><li> Firma</li><li> Patrones de venas</li></ul><br /><span style="font-weight: bold;">Características de Operación de Tecnologías Biométricas: </span><br /><ul><li> Huella Digital: Mide características y patrones de las líneas de las huellas. </li><li> Geometría de Mano: Medidas precisas del tamaño y forma de la mano. </li><li> IRIS: Cámara de video usada para examinar el Iris del ojo humano. </li><li> Rostro: Medición de características faciales utilizando una cámara. </li><li> Voz: Uso de Micrófono para capturar el habla y comparar patrones. </li><li> Firma: Se usa una pluma ó stylus para medir la velocidad, presión y dirección, gravando el patrón de una firma hecha a mano. </li></ul><br /><span style="font-weight: bold;">Procesos de Autentificación e Identificación biométrica</span><br /><ul><li> <span style="font-weight: bold;">Verificación:</span> Es el corroborar la identidad de una persona por medio de un dato previamente dado (como el nombre, una credencial, CURP, etc) y su huella digital, por ejemplo: yo digo que soy Juan Pérez y lo confirmo con mi huella digital.</li></ul><ul><li> <span style="font-weight: bold;">Identificación:</span> Es el corroborar la identidad de una persona utilizando solamente su huella digital, por ejemplo: coloco mi huella digital y el sistema automáticamente sabe que soy Juan Pérez.</li></ul><br /><div style="text-align: justify;">Mas adelante escribiré un poco sobre el desarrollo de un Sistema de Asistencias en Java controlado por medio de lectura de huellas dactilares, estén pendientes...<br /></div><br />Saludos !!!<div class="blogger-post-footer">http://omixisc.blogspot.com</div>Omar Flores Mtzhttp://www.blogger.com/profile/13610683451731530372noreply@blogger.com1