<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog -  El TallerWeb &#187; Programacion</title>
	<atom:link href="http://blog.eltallerweb.com/tag/programacion-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.eltallerweb.com</link>
	<description>Blog para apasionados al diseño y desarrollo Web</description>
	<lastBuildDate>Tue, 16 Jun 2015 20:26:30 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>First Steps Yii-Framework</title>
		<link>http://blog.eltallerweb.com/first-steps-yii-framework/</link>
		<comments>http://blog.eltallerweb.com/first-steps-yii-framework/#comments</comments>
		<pubDate>Wed, 31 Jul 2013 19:18:24 +0000</pubDate>
		<dc:creator><![CDATA[Joge23]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[gii]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[tips. configuración]]></category>
		<category><![CDATA[yii]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=777</guid>
		<description><![CDATA[Por Jorge Villela, @Joge23_rm Hola a todos, traigo a ustedes una mini-guía para la utilización de Yii-Framework. Sirve para empezar a utilizar este Framework de desarrollo ágil muy recomendable para todo tipo de proyectos web, espero ]]></description>
				<content:encoded><![CDATA[<p>Por Jorge Villela, @Joge23_rm</p>
<p>Hola a todos, traigo a ustedes una mini-guía para la utilización de Yii-Framework. Sirve para empezar a utilizar este <em>Framework</em> de desarrollo ágil muy recomendable para todo tipo de proyectos web, espero les sirva, cualquier duda estoy disponible en @Joge23_rm o por correo <a href="mailto:joge23@gmail.com">joge23@gmail.com</a>. Saludos.</p>
<p><strong>NOMENCLATURA</strong></p>
<p style="text-align: left; background: yellow; width: 110px;" align="right">Cambios a líneas</p>
<p style="text-align: left; background: green; width: 130px;" align="right">Agregados de líneas</p>
<p style="text-align: left;"><strong>INSTALACIÓN</strong></p>
<p style="text-align: left;">Lo primero que debes hacer es descargar el  <em>Framework</em> del sitio: <a href="http://www.yiiframework.com/">http://www.yiiframework.com/</a> (versión actual: v1.1.13)</p>
<p style="text-align: left;">Descomprimir y colocar carpeta sin renombrar (para mantener un control de la versión utilizada para cada proyecto) en la carpeta de elección, sugerida en ambiente linux: /opt/</p>
<p style="text-align: left;">Para la creación del proyecto utilizamos el <em>Shell</em> de Linux, estando en la carpeta donde se va a alojar el proyecto se escribe /opt/yii_version/framework/yiic webapp nombreProyecto</p>
<p style="text-align: left;">          p.e.<em> jorge@jorge:/var/www$ /opt/yii-1.1.13.e9e4a0/framework/yiic webapp prueba</em></p>
<p style="text-align: left;">El sistema te solicitará confirmar la creación del proyecto, recordar que esto generará una carpeta con el nombre de dicho proyecto en donde estes ubicado. Puedes probar tu proyecto creado, en este ejemplo en el navegador:</p>
<p style="text-align: left;"><a href="http://localhost/prueba/">http://localhost/prueba/</a></p>
<p style="text-align: left;"><em>** En caso de mostrar el siguiente error</em></p>
<h1 style="text-align: left;">PHP warning</h1>
<p style="text-align: left;">date() [&lt;a href=&#8217;function.date&#8217;&gt;function.date&lt;/a&gt;]: It is not safe to rely on the system&#8217;s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &#8216;America/Chicago&#8217; for &#8216;CDT/-5.0/DST&#8217; instead</p>
<p style="text-align: left;">Verificar la configuración de PHP el default_time_zone (Este problema suele presentarse con Zend Studio)</p>
<p style="text-align: left;">Ya en este punto podrás ver tu sitio funcionando.</p>
<p style="text-align: left;">A partir de aquí se configurarán los archivos del proyecto, no debes modificar los del Framework a menos que sea muy necesario.</p>
<p style="text-align: left;">Podemos identificar que se han creado las carpetas de nuestro proyecto, debemos identificar la carpeta <em>Protected</em> que es donde estan los archivos de configuración, las extensiones, y el MVC (Models, Views, Controllers). En este punto están los de la estructura básica del proyecto.</p>
<p style="text-align: left;"><strong>CONFIGURACIÓN Y BASES DE DATOS</strong></p>
<p style="text-align: left;">prueba/protected/config/main.php</p>
<p style="text-align: left;">&lt;?php</p>
<p style="text-align: left;">// uncomment the following to define a path alias</p>
<p style="text-align: left;">// Yii::setPathOfAlias(&#8216;local&#8217;,&#8217;path/to/local-folder&#8217;);</p>
<p style="text-align: left;">// This is the main Web application configuration. Any writable</p>
<p style="text-align: left;">// CWebApplication properties can be configured here.</p>
<p style="text-align: left;">return array(</p>
<p style="text-align: left;">          &#8216;basePath&#8217;=&gt;dirname(__FILE__).DIRECTORY_SEPARATOR.&#8217;..&#8217;,</p>
<p style="text-align: left;"><span style="background-color: yellow;">          &#8216;name&#8217;=&gt;&#8217;Prueba&#8217;,</span></p>
<p style="text-align: left;"><span style="background-color: green;">          &#8216;language&#8217;=&gt;&#8217;es&#8217;,</span></p>
<p style="text-align: left;">          // preloading &#8216;log&#8217; component</p>
<p style="text-align: left;">          &#8216;preload&#8217;=&gt;array(&#8216;log&#8217;),</p>
<p style="text-align: left;">          // autoloading model and component classes</p>
<p style="text-align: left;">          &#8216;import&#8217;=&gt;array(</p>
<p style="text-align: left;">                   &#8216;application.models.*&#8217;,</p>
<p style="text-align: left;">                   &#8216;application.components.*&#8217;,</p>
<p style="text-align: left;">          ),</p>
<p style="text-align: left;">          &#8216;modules&#8217;=&gt;array(</p>
<p style="text-align: left;">                   // uncomment the following to enable the Gii tool</p>
<p style="text-align: left;"><span style="background-color: yellow;">                   &#8216;gii&#8217;=&gt;array(</span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                             &#8216;class&#8217;=&gt;&#8217;system.gii.GiiModule&#8217;,</span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                            &#8216;password&#8217;=&gt;&#8217;hfdjkhf&#8217;,</span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                            // If removed, Gii defaults to localhost only. </span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                             &#8216;ipFilters&#8217;=&gt;array(&#8216;127.0.0.1&#8242;,'::1&#8242;),</span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                        ),</span></p>
<p style="text-align: left;"><span style="background-color: yellow;">                        </span></p>
<p style="text-align: left;">                 ),</p>
<p>          // application components</p>
<p style="text-align: left;">          &#8216;components&#8217;=&gt;array(</p>
<p style="text-align: left;">                   &#8216;user&#8217;=&gt;array(</p>
<p style="text-align: left;">                             // enable cookie-based authentication</p>
<p style="text-align: left;">                             &#8216;allowAutoLogin&#8217;=&gt;true,</p>
<p style="text-align: left;">                   ),</p>
<p style="text-align: left;"><span style="background-color: green;">                               // JQUERY nativo desactivado</span></p>
<p style="text-align: left;"><span style="background-color: green;">                               &#8216;clientScript&#8217;=&gt;array(<br />
&#8216;scriptMap&#8217;=&gt;array(<br />
&#8216;jquery.js&#8217;=&gt;false,<br />
&#8216;jquery.min.js&#8217;=&gt;false,<br />
)<br />
),<br />
</span></p>
<p>                   // uncomment the following to enable URLs in path-format</p>
<p style="text-align: left;"><span style="background-color: yellow;">                    &#8216;urlManager&#8217;=&gt;array(<br />
&#8216;urlFormat&#8217;=&gt;&#8217;path&#8217;,<br />
&#8216;rules&#8217;=&gt;array(<br />
&#8216;&lt;controller:\w+&gt;/&lt;id:\d+&gt;&#8217;=&gt;'&lt;controller&gt;/view&#8217;,<br />
&#8216;&lt;controller:\w+&gt;/&lt;action:\w+&gt;/&lt;id:\d+&gt;&#8217;=&gt;'&lt;controller&gt;/&lt;action&gt;&#8217;,<br />
&#8216;&lt;controller:\w+&gt;/&lt;action:\w+&gt;&#8217;=&gt;'&lt;controller&gt;/&lt;action&gt;&#8217;,<br />
),<br />
),</span></p>
<p>                         &#8216;db&#8217;=&gt;array(<br />
&#8216;connectionString&#8217; =&gt; &#8216;sqlite:&#8217;.dirname(__FILE__).&#8217;/../data/testdrive.db&#8217;,<br />
),</p>
<p>// uncomment the following to use a MySQL database</p>
<p style="text-align: left;"><span style="background-color: yellow;">                         &#8216;db&#8217;=&gt;array(<br />
&#8216;connectionString&#8217; =&gt; &#8216;mysql:host=localhost;dbname=prueba&#8217;,<br />
&#8217;emulatePrepare&#8217;=&gt; true,<br />
&#8216;username&#8217; =&gt; &#8216;usuario&#8217;,<br />
&#8216;password&#8217; =&gt; &#8216;dsfsfsdfs&#8217;,<br />
&#8216;charset&#8217; =&gt; &#8216;utf8&#8242;,<br />
),<br />
</span></p>
<p style="text-align: left;">&#8216;errorHandler&#8217;=&gt;array(</p>
<p>                             // use &#8216;site/error&#8217; action to display errors</p>
<p>&#8216;errorAction&#8217;=&gt;&#8217;site/error&#8217;,</p>
<p>),</p>
<p>&#8216;log&#8217;=&gt;array(</p>
<p>&#8216;class&#8217;=&gt;&#8217;CLogRouter&#8217;,</p>
<p>&#8216;routes&#8217;=&gt;array(</p>
<p>array(</p>
<p>&#8216;class&#8217;=&gt;&#8217;CFileLogRoute&#8217;,</p>
<p>&#8216;levels&#8217;=&gt;&#8217;error, warning&#8217;,</p>
<p>),</p>
<p>// uncomment the following to show log messages on web pages</p>
<p>/*</p>
<p>array(</p>
<p>&#8216;class&#8217;=&gt;&#8217;CWebLogRoute&#8217;,</p>
<p>),</p>
<p>*/</p>
<p>),</p>
<p>),<br />
),</p>
<p>// application-level parameters that can be accessed</p>
<p>// using Yii::app()-&gt;params[&#8216;paramName&#8217;]</p>
<p>&#8216;params&#8217;=&gt;array(</p>
<p>// this is used in contact page</p>
<p>&#8216;adminEmail&#8217;=&gt;&#8217;webmaster@example.com&#8217;,</p>
<p>),</p>
<p>);</p>
<p>Lo que hicimos fue modificar el nombre de nuestra aplicación, modificar el lenguaje para el sitio, descomentar el código que permite utilizar Gii (generación de modelos y <em>crud</em>) y le modificamos el campo de <em>Password;</em> agregar el código para deshabilitar el JQuery nativo (recomendado para incluir la versión más nueva y que no choquen), descomentar UrlManager (esto hace que los métodos se muestren con <em>Friendly Url</em>)<em>,</em> descomentamos la configuración de DB y agregamos los datos de nuestra base de datos. Con esto finalizamos la modificación de este archivo.</p>
<p><strong>CREACIÓN DE MODELOS</strong></p>
<p>Es importante que el usuario <em>www-data</em> tenga permisos, se sugiere cambiar el propietario del proyecto cuando se utiliza el Gii(esto es porque se generan archivos a partir del navegador), en consola:</p>
<p><em>sudo chown -R www-data.www-data prueba</em></p>
<p>En el navegador: <a href="http://localhost/prueba/index.php/gii/default/login">http://localhost/prueba/index.php/gii/default/login</a></p>
<p>Utilizamos nuestra contraseña (la que asignamos para el componente Gii en el archivo de configuración).</p>
<p>Una vez adentro, seleccionamos la sección de <em>Model Generato</em>r y en esta parte ingresamos en el campo de <em>Table Name</em> el nombre de la tabla; lo demás es bueno dejarlo por <em>Default.</em> Seleccionamos el botón <em>Preview</em> y te mostrará la lista de archivos generados, en este caso sería un archivo<em> Tablename.php</em>, le das <em>Generate</em> y te regresará un mensaje de éxito.</p>
<p>Este es el proceso para crear los modelos de cada tabla, los cuales permitirán la conexión a la base y a dicha tabla.</p>
<p>p.e. Tablename::model()-&gt;findAll();//Con este comando recuperarías todos los registros de la tabla en concreto en forma de <em>array</em> de objetos.</p>
<p><strong>CREACIÓN DE CRUD (CONSULTAS, ALTAS, BAJAS Y CAMBIOS)</strong></p>
<p>A partir de nuestro archivo de modelo generado, podemos crear la consulta, altas, bajas y cambios a nuestra tabla con la opción de <em>Crud Generator</em>, donde sólo ingresaremos el nombre del modelo: <em>Tablename</em></p>
<p>Al seleccionar<em> Preview </em> nos mostrará todos los archivos (un C<em>ontroller</em> y varias vistas) que se van a generar, le damos <em>Generate</em> y listo, podemos empezar a utilizar/modificar según las necesidades del proyecto.</p>
<p><strong>PUNTOS CLAVES</strong></p>
<p><strong>Modelo</strong></p>
<p><em>Apartado de Rules:</em> Reglas que van aplicarse tanto al<em> Create</em> como al <em>Update</em> de los registros de cada modelo.</p>
<p><em>Apartado de AttributeLabels:</em> Permite definir las etiquetas de los campos, es muy útil si a lo largo de todo el proyecto se utilizan porque si hay un cambio sólo se modifica una vez.</p>
<p><strong>Controller</strong></p>
<p>Al principio se define el<em> layout</em> general, recomiendo moficar dicha línea y utilizar <em>layout main</em>,</p>
<p style="text-align: left; background: yellow; width: 215px;" align="right">public $layout=&#8217;//layouts/main';</p>
<p>El apartado de <em>accessRule</em>s  permite definir las reglas de accesso, en la configuración por <em>Default</em> se da acceso a todo(*) a algunas acciones de las clases, a los usuarios logueados(@) a otras y a un usuario en específico a otras (Admin). Este puede ser <em>customizado</em> con opciones como <em>&#8216;expression&#8217;</em>, todo esto viene en la documentación de Yii.</p>
<p>Más adelante están todos los métodos de la clase, los que vienen por <em>Default</em> y los que se crearán para el proyecto.</p>
<p><strong>Views</strong></p>
<p>Gracias al <em>Crud,</em> por cada C<em>ontroller</em> se generán:</p>
<ul>
<li>index.php (Página principal, por<em> Default</em> viene un listado de los elementos de la tabla).</li>
<li>_view.php (Se renderea parcialmente dentro de index.php, representa uno a uno los elementos que se muestran en la lista).</li>
<li>view.php (Es la vista individual de cada elemento de la tabla, si se utiliza el <em>controller tablename/1</em>) dirigirá por<em> Default </em>al <em>View</em> de ID 1</li>
<li>create/update (Contienen<em> al _form</em> que es donde se puede modificar al registro).</li>
</ul>
<p>Entre otras&#8230;</p>
<p><strong>Views site y Layout</strong></p>
<p>En las vistas que vienen generadas desde el principio se encuentran las de <em>Site </em>(vistas básicas, el <em>Index</em> del <em>Home</em>, el contacto y otras. Todas estas son las vistas que serían relativamente estáticas) y las de <em>Layout </em>(main.php contiene el código que envuelve a todas las vistas que se renderean, es decir, el cascarón del sitio).</p>
<p>Espero que esta información les sea de utilidad, aquí les dejos algunos links en donde pueden encontrar más información.</p>
<p><a href="http://www.yiiframework.com/">http://www.yiiframework.com/</a></p>
<p><a href="http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app">http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app</a></p>
<p><a href="http://www.yiiframework.com/wiki/">http://www.yiiframework.com/wiki/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/first-steps-yii-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creación de imágenes de Amazon con API Tools</title>
		<link>http://blog.eltallerweb.com/creacion-de-imagenes-de-amazon-con-api-tools/</link>
		<comments>http://blog.eltallerweb.com/creacion-de-imagenes-de-amazon-con-api-tools/#comments</comments>
		<pubDate>Fri, 12 Jul 2013 22:26:41 +0000</pubDate>
		<dc:creator><![CDATA[preack]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=751</guid>
		<description><![CDATA[Por Ivan Jiménez En esta ocasión les voy a mostrar cómo realizar respaldos de sus instancias EC2 de Amazon por medio de las API Tools de manera automática. Las herramientas de la API de Amazon ]]></description>
				<content:encoded><![CDATA[<p>Por Ivan Jiménez</p>
<p>En esta ocasión les voy a mostrar cómo realizar respaldos de sus instancias EC2 de Amazon por medio de las API Tools de manera automática.</p>
<p>Las herramientas de la API de Amazon son los paquetes de S<em>cripts</em> de línea de comandos para el servicio web de AWS (Amazon Web Services) que se utilizan para administrar instancias.</p>
<p>Existen otras herramientas de desarrollo proporcionadas por Amazon, pero las más utilizadas para administrar instancias EC2 son:</p>
<p><strong>Amazon EC2 API Tools (http://aws.amazon.com/developertools/351). </strong></p>
<p>Estas herramientas sirven como interfaz de cliente para el servicio Web de Amazon EC2, son utilizadas para registrar, lanzar instancias, gestionar grupos de seguridad, etc.</p>
<p><strong>Amazon EC2 AMI Tools (http://aws.amazon.com/developertools/368).</strong></p>
<p>Las AMI Tools son herramientas en líneas de comandos que sirven para crear una AMI (Amazon Machine Image) existente o volumen instalado.</p>
<p>* Para instalar estas herramientas consulte la documentación de Amazon.</p>
<p>Tomando en cuenta que ya se tienen instaladas las herramientas de Amazon, procederemos con la creación del <em>Script</em>.</p>
<p><strong>Creación del <em>Script</em></strong></p>
<p>Las Tools de Amazon al no ser un programa que se instale, sino un conjunto de <em>Scripts</em> y comandos que se utilizan por terminal, es necesario definir las variables de entorno.</p>
<p><a href="http://blog.eltallerweb.com/wp-content/uploads/2013/07/script.jpg"><img class=" wp-image-752 alignnone" title="script" src="http://blog.eltallerweb.com/wp-content/uploads/2013/07/script.jpg" alt="" width="651" height="260" /></a></p>
<p><strong>Explicando el <em>Script</em></strong></p>
<p>En la primera parte del <em>Script</em> se configuran las variables de entorno, certificados y llaves Amazon, ruta de las AMI y API Tools, ruta de archivos binarios.</p>
<p><a href="http://blog.eltallerweb.com/wp-content/uploads/2013/07/crear.jpg"><img class="wp-image-755 alignnone" title="crear" src="http://blog.eltallerweb.com/wp-content/uploads/2013/07/crear.jpg" alt="" width="647" height="128" /></a></p>
<p>El comando para describir instancias es &#8220;ec2-describe-instances &#8211;headers&#8221;, pero para obtener sólo los datos que necesitamos aplicamos unos filtros con los siguientes comandos:</p>
<p><a href="http://blog.eltallerweb.com/wp-content/uploads/2013/07/describir.jpg"><img class=" wp-image-756 alignnone" title="describir" src="http://blog.eltallerweb.com/wp-content/uploads/2013/07/describir.jpg" alt="" width="660" height="20" /></a></p>
<ul>
<li>grep Name: Nos mostrará nuestras instancias listadas por nombre.</li>
</ul>
<p>TAG     instance            i-abcd   Name    nombre-instancia</p>
<ul>
<li>awk {&#8216;print $3&#8243; &#8220;$5&#8242;}: Imprimimos las columnas 3 y 5.</li>
</ul>
<p>i-abcd nombre-instancia</p>
<ul>
<li>sed &#8220;s/[ ][ ]*/:/g&#8221;: Eliminamos los espacios entre columnas y ponemos &#8220;:&#8221; como separador.</li>
</ul>
<p>i-abcd:nombre-instancia</p>
<p>Esta salida la guardaremos en un archivo de texto, en este caso llamado imagenes.txt, el cual guardará el ID y nombre de nuestras instancias con el formato que le dimos.</p>
<p>El comando para la creación de imagenes es &#8220;ec2-create-image instance_id  &#8211;name  name                           &#8211;description  description&#8221;. Como los datos los vamos a obtener de nuestro archivo de texto necesitamos leerlo y obtener la información deseada por medio de un <em>while</em> y filtros.</p>
<p><a href="http://blog.eltallerweb.com/wp-content/uploads/2013/07/crear1.jpg"><img class=" wp-image-757 alignnone" title="crear" src="http://blog.eltallerweb.com/wp-content/uploads/2013/07/crear1.jpg" alt="" width="652" height="129" /></a></p>
<ul>
<li>/bin/echo $line: Lee línea por línea el archivo imagenes.txt.</li>
<li>/bin/cut -d: -f1: Selecciona la primera columna delimitada por &#8220;:&#8221;.</li>
</ul>
<p>ec2-create-image i-abcd</p>
<ul>
<li>/bin/cut -d: -f2`_`date +%d-%m-%Y`: Para el nombre de la instancia se selecciona la segunda columna delimitada por &#8220;:&#8221;, también le agregamos la fecha actual en el formato dd:mm:aaaa.</li>
</ul>
<p>ec2-create-image i-abcd &#8211;name nombre-instancia_dd:mm:aaaa</p>
<ul>
<li>/bin/cut -d: -f2`_`date +%d-%m-%Y`: Para la descripción se utiliza el mismo nombre de la instancia y de igual manera se le agrega la fecha actual.</li>
</ul>
<p>ec2-create-image i-abcd &#8211;name nombre-instancia_dd:mm:aa &#8211;description nombre-instancia_dd:mm:aaaa</p>
<p>Finalmente, para que esta tarea se haga de forma automática, lo tenemos que programar en el <em>cron</em>, en este caso el <em>Script</em> se ejecutará todos los domingos a las 2:00 am</p>
<p>0 2 * * 7 root sh /ruta-script/script.sh</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/creacion-de-imagenes-de-amazon-con-api-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Quién es Zend?</title>
		<link>http://blog.eltallerweb.com/quien-es-zend/</link>
		<comments>http://blog.eltallerweb.com/quien-es-zend/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 23:48:43 +0000</pubDate>
		<dc:creator><![CDATA[igormx]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[lenguaje]]></category>
		<category><![CDATA[programa]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[programador]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=634</guid>
		<description><![CDATA[Por Carlos Nacianceno, @igormx Muchos PHPeros no saben quién o qué es Zend. Otros quizá solo lo relacionan con el Zend Framework o con alguno de sus productos.  Un poco de historia Corría el año de ]]></description>
				<content:encoded><![CDATA[<p>Por Carlos Nacianceno, @igormx</p>
<h2><span style="font-size: 13px;">Muchos PHPeros no saben quién o qué es </span><a style="font-size: 13px;" href="http://zend.com/">Zend</a><span style="font-size: 13px;">. Otros quizá solo lo relacionan con el </span><a style="font-size: 13px;" href="http://zendframework.com/">Zend Framework</a> <span style="font-size: 13px;">o con alguno de sus productos. </span></h2>
<div>
<p><strong>Un poco de historia</strong></p>
<p>Corría el año de 1997, la internet como la conocemos hoy no existía y PHP también era un desconocido, de hecho no era PHP sino PHP/FI, Rasmus Lerdorf lo había creado hacía un tiempo (de hecho casi lo hizo en solitario desde el 95 al 97), pero era algo limitado y su nicho era pequeño.</p>
<p>Unos estudiantes del Technion de Israel, Andi Gutmans y Zeev Suraski, tenían un proyecto en una de sus clases de crear un carrito de compras, la mayoría de sus compañeros decidieron usar Perl, ellos decidieron usar PHP/FI. Pero se toparón con muchos problemas en la herramienta elegida, la mayoría de ellos errores en el parseador.</p>
<p>Decidieron avisar a Rasmus y éste les respondió que eran libres de proponer parches, por lo que decidieron crear un verdadero motor para el lenguaje el cual funcionó muy bien, tanto que Rasmus decidió sustituir su versión por la versión de Gutmans y Suraski (nada de egos super inflados eh) y así nació PHP 3.</p>
<p>PHP 3 se volvió muy popular, el “boom” histórico de PHP . Gutmans y Suraski fundaron Zend, volviéndose un ícono del mundo PHP.</p>
<p><strong>El PHP Empresarial</strong></p>
<p>No se asusten, esto es lo que hacemos todos los días, el PHP empresarial es el PHP que se orienta hacia los negocios, es el desarrollo que le implementas a la tienda de &#8220;don Pedrito&#8221; hasta el gran sistema que le codificas a la empresa multinacional.</p>
<p>Zend intentá cubrir todo este espectro, así que apoya con contribuiciones a proyectos<em> Open Source</em>, patrocinando otros proyectos gratuitos y además de proveer de productos para aquellos que cuentan con aplicaciones de misión crítica. Además, Zend tiene servicios como consultoría, soporte y entrenamiento, siendo esta última área el origen de la certificación en PHP.</p>
<p>Reconozcámoslo, muchas veces podemos hacer la caja nosotros solos, pero a veces necesitaremos la caja ya hecha.</p>
<p><strong>Zend y la Comunidad</strong><br />
Entre los aportes de Zend a la comunidad estan:</p>
<ul>
<li><strong>Zend Engine</strong>: El corazón de PHP, sobre esto corren todas tus aplicaciones</li>
<li><strong>Zend Optimizer+</strong>: Un acelerador de código PHP</li>
<li><strong>Zend Framework</strong>: Un framework MVC robusto y flexible</li>
<li><strong>Eclipse PDT: </strong>Un IDE para la edición PHP en el ambiente Eclipse</li>
<li><strong>Zend Server (versión gratuita)</strong>: La versión gratuita, de un stack PHP para tus deploys</li>
<li><strong>Zend Developer Zone</strong>: Centro de reunión de desarrolladores PHP del mundo entero</li>
</ul>
<p><strong>Productos Zend</strong><br />
Algunos de los productos de Zend son:</p>
<ul>
<li><strong>Zend Studio</strong>: IDE PHP basado en Eclipse, con funciones extras para intervenir mejor en el ciclo de una aplicación</li>
<li><strong>Zend Server</strong>: Stack PHP con  monitoreo y mejoras en perferomance</li>
<li><strong>Zend Guard</strong>: Encripta tu código PHP</li>
</ul>
<p><strong>En Latinoámerica</strong><br />
Si quieren más info sobre Zend o sus productos, pónganse  en contacto con <a href="http://www.eltallerweb.com/">El Taller Web</a>.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/quien-es-zend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTTPS (Hypertext Transfer Protocol Secure)</title>
		<link>http://blog.eltallerweb.com/https-hypertext-transfer-protocol-secure/</link>
		<comments>http://blog.eltallerweb.com/https-hypertext-transfer-protocol-secure/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 18:34:54 +0000</pubDate>
		<dc:creator><![CDATA[Joge23]]></dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[certificado]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[pagina web]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[sitio]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=624</guid>
		<description><![CDATA[Por Juan Carlos Sosa, @JuanC_Sosa Alguna vez te has preguntado ¿cómo se logra obtener o qué es el famoso HTTPS que vemos en algunas direcciones URL?. ¿Qué es? Utiliza un cifrado basado en SSL/TLS para crear un canal ]]></description>
				<content:encoded><![CDATA[<p>Por Juan Carlos Sosa, <a href="http://twitter.com/#!/@JuanC_Sosa">@JuanC_Sosa</a></p>
<p>Alguna vez te has preguntado ¿cómo se logra obtener o qué es el famoso HTTPS que vemos en algunas direcciones URL?.</p>
<p><strong>¿Qué es?</strong></p>
<p>Utiliza un cifrado basado en SSL/TLS para crear un canal cifrado (cuyo nivel de cifrado depende del servidor remoto y del navegador utilizado por el cliente) más apropiado para el tráfico de información sensible que el protocolo HTTP. De este modo se consigue que la información sensible (usuario y claves de paso normalmente) no pueda ser usada por un atacante que haya conseguido interceptar la transferencia de datos de la conexión, ya que lo único que obtendrá será un flujo de datos cifrados que le resultará imposible de descifrar.</p>
<p>El puerto estándar para este protocolo es el 443. <em>(Fuente: es.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure )</em></p>
<p><strong>¿Cómo obtengo un Certificado SSL para mi sitio web? </strong></p>
<p>A continuación una descripción paso a paso :</p>
<p>&nbsp;</p>
<p><em><strong>1 Asegurate que OpenSSL esté instalado en tu PATH de Linux.</strong></em></p>
<p>&nbsp;</p>
<p><em><strong>2 Crea una llave privada RSA para tu servidor  Apache</strong> </em>(será Triple-DES encriptada y en formato PEM): <strong>$ openssl genrsa -des3 -out server.key 1024</strong></p>
<div>
<p>NOTA: El tamaño de la llave 1024 , 2048 , 4096   &lt;&#8212; Depende del tipo del certificado</p>
</div>
<p>Haz un respaldo del archivo de llave server.key en un lugar seguro. Si quieres ver los detalles de la llave privada que acabas de crear entonces usa el siguiente comando: $ openssl rsa -noout -text -in server.key</p>
<p>Si es necesario puedes crear una versión no encriptada PEM de la llave privada con: <strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></p>
<div>
<p>NOTA: Esto se hace cuando no queremos que nos pida el PASSPRASHE cada vez que iniciamos el Apache (httpd) y así en lugar de usar la llave encriptada en la configuración del dominio agregamos la referencia a la llave no encriptada.</p>
</div>
<p>&nbsp;</p>
<p><strong><em>3 Crea un archivo CSR </em></strong><em>(</em>Certificate Signing Request) utilizando la llave privada RSA que creamos previamente y para esto utilizamos el siguiente comando: <strong>$ openssl req -new -key server.key -out server.csr</strong></p>
<p>En este paso nos pedirá información acerca de el dominio que queremos tener bajo HTTPS, hay que asegurarnos de ingresar el FQDN (&#8220;Fully Qualified Domain Name&#8221;) del servidor cuando el OpenSSL te lo pregunte lo que sería el &#8220;CommonName&#8221;, ejemplo cuando generamos un CSR para un sitio web el cual será accesado de la forma  https://www.foo.dom/,  entonces tendremos que ingresar &#8220;www.foo.dom&#8221; en este campo. Al final después de creado el archivo podrás ver el contenido del CSR utilizando: $ openssl req -noout -text -in server.csr</p>
<p>&nbsp;</p>
<p><em><strong>4  Ahora debemos enviar este el Certificate Signing Request (CSR) a un Autoridad Certificadora (CA)</strong></em> al cual deberás pagar para que te firme o valide. Una vez que el CSR ha sido firmado entonces obtendrás un Certificado el cual podrás usar en tu servidor Apache; el Certificado que te manden lo almacenas en un archivo con terminación .crt (server.crt ). Estas son algunas Autoridades Certificadoras:</p>
<p>Verisign http://digitalid.verisign.com/server/apacheNotice.htm</p>
<p>Thawte http://www.thawte.com/</p>
<p>CertiSign Certificadora Digital Ltda. http://www.certisign.com.br</p>
<p>IKS GmbH http://www.iks-jena.de/leistungen/ca/</p>
<p>Uptime Commerce Ltd. http://www.uptimecommerce.com</p>
<p>BelSign NV/SA http://www.belsign.be</p>
<p>GeoTrust http://www.geotrust.com/</p>
<p>Si desear ver los detalles de tu certificado firmado necesitas usar el siguiente comando: <strong>$ openssl x509 -noout -text -in server.crt</strong></p>
<p>&nbsp;</p>
<p><strong><em>5 Ahora tendremos dos archivos: server.key y server.crt.</em></strong> Estos pueden ser utilizados en tu archivo de configuración httpd.conf  o en el Virtualhost del dominio de la siguiente manera:</p>
<div>
<p>      SSLCertificateFile    /path/to/this/server.crt</p>
<p>SSLCertificateKeyFile /path/to/this/server.key</p>
</div>
<p><strong><em>6 Necesitaras una  IP dedicada para cada SSL si es que en el server alojas más de un dominio,</em></strong>  en este caso deberás solicitarla con tu proveedor de servicios de hosting.<strong> </strong>El archivo server.csr ya no se necesita más.</p>
<p><strong> </strong></p>
<p>Espero que esta información te sea útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/https-hypertext-transfer-protocol-secure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reglas de monitoreo en Zend Server</title>
		<link>http://blog.eltallerweb.com/reglas-de-monitoreo-en-zend-server/</link>
		<comments>http://blog.eltallerweb.com/reglas-de-monitoreo-en-zend-server/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 00:31:05 +0000</pubDate>
		<dc:creator><![CDATA[jmosqueda]]></dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[monitoreo]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[zend server]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=607</guid>
		<description><![CDATA[Por Lillian Domínguez La función de “monitoreo” de Zend Server se basa en un conjunto de reglas predefinidas que puede ser configurada para adaptarse a requisitos de su entorno (por ejemplo, umbrales de performance), o ]]></description>
				<content:encoded><![CDATA[<p>Por Lillian Domínguez</p>
<p>La función de “monitoreo” de Zend Server se basa en un conjunto de reglas predefinidas que puede ser configurada para adaptarse a requisitos de su entorno (por ejemplo, umbrales de performance), o habilitado y deshabilitado según sea necesario. Estas reglas definen la naturaleza de un evento disparado y los parámetros para la captura de información relacionada con el evento en una aplicación.</p>
<p>Por definición, la función de las reglas de monitoreo son diferentes entre sí ya que están monitoreando diferentes aspectos del entorno de desarrollo y producción. Por lo tanto, que se muestran de forma diferente y pueden configurarse de manera diferente. Por ejemplo, la regla de evento personalizado no muestra funciones. Para referencia, vea las reglas globales de vigilancia.</p>
<p><strong>Regla Grupos</strong></p>
<p>Existen dos tipos de grupos – La regla de grupo global y la regla de grupos de la aplicación, nombrado después de la aplicación relacionada.</p>
<p>La regla de grupo global, se muestra por defecto a la cabeza de la lista de grupos. Este grupo contiene una colección de reglas de monitoreo predefinidas y habilitadas llamado reglas globales. Estas reglas se asocian automáticamente con cualquier aplicación desplegada o definida en las aplicaciones | Página de aplicaciones, y están agrupadas juntas en diferentes grupos de reglas de aplicación.</p>
<p><strong>Regla de Interdependencias</strong></p>
<p>Las reglas incluídas en la regla de grupo Global (reglas-padres) tienen propiedades de reemplazo en relación con sus reglas de herencia (reglas-niño) en la regla de grupo de aplicación:</p>
<ul>
<li>Recientes aplicaciones desplegadas o definidas, automáticamente incluyen todas las reglas globales.</li>
<li>Una reciente regla global es agregada a las reglas globales y a todas las reglas de grupos de aplicación.</li>
<li>Reglas de aplicaciones recientemente creadas no se agregan a la regla de grupo Global.</li>
<li>Cambios hechos a una regla padre en el grupo de reglas globales son aplicados a todas sus reglas de herencia (reglas niño) en la regla de grupo de aplicación.</li>
<li>Cambios hechos a una regla-niño,  reemplazar las configuraciones globales en la regla de grupo de la aplicación específica que está asociada a la regla, pero no se aplican a las respectiva reglas-padre. Estos cambios pueden ser revertidos en  las configuraciones de la regla-padre.</li>
</ul>
<p><strong>Anulando y personalizando reglas</strong></p>
<p>Puedes decidir personalizar las reglas predeterminadas de monitoreo Global. Para diferenciar las personalizaciones de las reglas de las características de reglas por defecto,  las  reglas personalizadas reciben definiciones de estatus diferentes:</p>
<ul>
<li>Reglas personalizadas.</li>
<li>Reglas anuladas</li>
</ul>
<p>Nota:</p>
<p>Las reglas de caché se comportan de manera similar. No existen reglas caché global por defecto,  pero puede crear e incluirán todas las propiedades fundamentales descritas anteriormente. Consulta trabajo con caché de página para obtener información sobre cómo crear reglas de caché.</p>
<p>Checa en un video las reglas de monitoreo:</p>
<p><a href="http://files.zend.com/help/Zend-Server-6/zend-server.htm#editing_rules.htm">http://files.zend.com/help/Zend-Server-6/zend-server.htm#editing_rules.htm</a></p>
<p>Tienes dudas sobre el alcance de Zend Server, con gusto te asesoramos. Visita nuestro sitio: <a href="http://eltallerweb.com">ElTallerWeb.com</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/reglas-de-monitoreo-en-zend-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Server 6. Plataforma de aplicación Web y móvil</title>
		<link>http://blog.eltallerweb.com/zend-server-6-plataforma-de-aplicacion-web-y-movil/</link>
		<comments>http://blog.eltallerweb.com/zend-server-6-plataforma-de-aplicacion-web-y-movil/#comments</comments>
		<pubDate>Sat, 02 Mar 2013 05:00:34 +0000</pubDate>
		<dc:creator><![CDATA[jmosqueda]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[6]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[programadores]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=595</guid>
		<description><![CDATA[Por Lillian Domínguez ¿Tienes aplicaciones de producción?. Preveé la próxima crisis de aplicación utilizando Zend Server. Zend Server te apoya en: Detectar y resolver problemas de aplicación de producción de manera más rápida Evitar la ]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;" align="center">Por Lillian Domínguez</p>
<p>¿Tienes aplicaciones de producción?. Preveé la próxima crisis de aplicación utilizando Zend Server.</p>
<p>Zend Server te apoya en:</p>
<ul>
<li>Detectar y resolver problemas de aplicación de producción de manera más rápida</li>
<li>Evitar la degradación del rendimiento</li>
<li>Evitar los desastres de escalamiento y tolerancia a fallos</li>
<li>Automatizar el proceso de implementación para manejar el desarrollo iterativo de la aplicación</li>
<li>Dar visibilidad de la producción a sus desarrolladores en forma segura y controlada</li>
<li>Cumplir con sus compromisos de SLA de aplicación</li>
<li>Te brinda Paneles de métricas de rendimiento que te darán una visión a largo plazo y tendencias</li>
<li>Garantizar la alta disponibilidad con failover de aplicaciones integradas</li>
<li>Recibir notificación de problemas antes de que sean fallos</li>
<li>Mantener la seguridad de la aplicación y cumplimiento</li>
<li>Evitar cambios no autorizados en su entorno</li>
<li>Utilizar Zend Server en cualquier entorno de cloud – pública, privada o híbrido &#8211; para capacidad de flexibilidad y ráfaga</li>
</ul>
<p><strong>Y como desarrollador ¿en qué me apoya?</strong></p>
<ul>
<li>Brinda grabado instantáneas de ejecución de código PHP de línea por línea de interrupción de producción de anoche</li>
<li>Construye el almacenamiento en caché en tus aplicaciones</li>
<li>Evita cuellos de botella de tu código para paralelización de  tareas</li>
<li>Estandariza en la pila PHP más integral y coherente</li>
<li>Depuración avanzada, supervisión y herramientas de generación de perfiles.</li>
</ul>
<p>Zend, la empresa PHP, asegura sus componentes PHP de código abierto son compatibles y tienen las últimas actualizaciones de seguridad.</p>
<p>Conoce sus diferentes versiones: <a href="http://www.zend.com/en/products/server/editions">http://www.zend.com/en/products/server/editions</a>.</p>
<p>Si necesitas orientación, deseas adquirir una licencia o requieres apoyo de soporte con gusto te ayudamos, visita: http://eltallerweb.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/zend-server-6-plataforma-de-aplicacion-web-y-movil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¡Nueva versión de Zend Studio!</title>
		<link>http://blog.eltallerweb.com/nueva-version-de-zend-studio/</link>
		<comments>http://blog.eltallerweb.com/nueva-version-de-zend-studio/#comments</comments>
		<pubDate>Fri, 15 Feb 2013 14:57:36 +0000</pubDate>
		<dc:creator><![CDATA[igormx]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[lanzamiento]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[programadores]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[zend studio 10]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=572</guid>
		<description><![CDATA[Por Carlos Nacianceno, @igormx Hace apenas unos días, Zend anunció el lanzamiento de la última versión de su IDE, Zend Studio 10. Esta nueva versión nos ofrece las ya conocidas características de versiones anteriores que ]]></description>
				<content:encoded><![CDATA[<p>Por Carlos Nacianceno, @igormx</p>
<p>Hace apenas unos días, Zend anunció el lanzamiento de la última versión de su IDE, Zend Studio 10.</p>
<p>Esta nueva versión nos ofrece las ya conocidas características de versiones anteriores que nos ayudan a maximizar la productividad, como el PHPUnit, Debugging, perfilado de aplicaciones y Control de versiones(incluyendo Git).</p>
<p>Pero son las nuevas características de esta versión que llaman rápidamente nuestra atención, por ejemplo la posibilidad de crear aplicaciones móviles conectadas a la nube. Así es , desde Zend Studio 10, podemos crear los dos aspectos de una aplicación móvil, el lado cliente generado a partir de HTML y jQuery, y el lado del servidor con <em>web services RESTful</em> creados con PHP y componentes de Zend Framework 2 con la posibilidad de hospedar esto en la nube.</p>
<p>Y ya que hablamos de desarrollar usando la nube, Zend Studio nos da la posibilidad de desplegar nuestro código en “nubes”, que cuentan con <em>stacks</em> de PHP certificados y otras componentes como bases de datos que nos evitan la necesidad de tener que preparar ambientes de desarrollo en máquinas locales u otros servidores, en concreto se trata de la Zend Developer Cloud y la de Red Hat, la OpenShift, ambas gratuitas y abiertas.</p>
<p>Todo esto suena excelente, aunque debo confesar que para un servidor, la característica más atrayente es por mucho la integración del IDE con Zend Framework 2. Y es que el Zend Studio 10 te auxilia muchísimo en el desarrollo de aplicaciones ZF2. Por ejemplo, la creación inicial de la aplicación nos deja ya una estructura muy completa desde la cual podemos empezar a poner nuestro código; además nos ayuda en la creación de módulos, controladores, vistas y otros items del framework. Por si esto fuera poco, cuenta con un localizador de servicios ZF2 con integración a <em>composer</em>, sin mencionar la auto-completación de clases, métodos y <em>namespaces</em> que hace que el desarrollo en ZF2 sea mucho más sencillo.</p>
<p>¿Ya conoces el producto? Cuéntanos que te parecio.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/nueva-version-de-zend-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo subir un archivo con jQuery y Ajax + PHP</title>
		<link>http://blog.eltallerweb.com/como-subir-un-archivo-con-jquery-y-ajax-php/</link>
		<comments>http://blog.eltallerweb.com/como-subir-un-archivo-con-jquery-y-ajax-php/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 23:54:00 +0000</pubDate>
		<dc:creator><![CDATA[Joge23]]></dc:creator>
				<category><![CDATA[JQUERY]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[archivo]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[subir]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=532</guid>
		<description><![CDATA[Por Juan Carlos Sosa Para subir un archivo con  jQuery y Ajax + PHP, en lugar de  utilizar un plugin ya desarrollado y probado,  podemos utilizar la lógica de cómo se envía un archivo con ]]></description>
				<content:encoded><![CDATA[<p>Por Juan Carlos Sosa</p>
<p>Para subir un archivo con  jQuery y Ajax + PHP, en lugar de  utilizar un <em>plugin</em> ya desarrollado y probado,  podemos utilizar la lógica de cómo se envía un archivo con Ajax:</p>
<p>function uploadAjax(){</p>
<p>var inputFileImage = document.getElementById(&#8220;archivoImage&#8221;);</p>
<p>var file = inputFileImage.files[0];</p>
<p>var data = new FormData();</p>
<p>data.append(&#8216;archivo&#8217;,file);</p>
<p>var url = &#8220;upload.php&#8221;;</p>
<p>$.ajax({</p>
<p>url:url,</p>
<p>type:&#8217;POST&#8217;,</p>
<p>contentType:false,</p>
<p>data:data,</p>
<p>processData:false,</p>
<p>cache:false});</p>
<p>}</p>
<p><strong>Configurando el Html de la página, algo similar tiene que quedar el <em>Input:</em></strong></p>
<p>&lt;input type=&#8217;file&#8217; name=&#8217;archivoImage&#8217; id=&#8217;archivoImage&#8217; /&gt;</p>
<p>&lt;input type=&#8217;button&#8217; id=&#8217;botonSubidor&#8217; onclick=&#8217;uploadAjax()&#8217; /&gt;</p>
<p><strong>También pueden hacerlo con jQuery:</strong></p>
<p>$(document).ready(function() {     $(&#8216;#botonSubidor&#8217;).click(&#8216;uploadAjax&#8217;);})</p>
<p><strong>Obviamente el html tiene que quedar así:</strong></p>
<p>&lt;input type=&#8217;file&#8217; name=&#8217;archivoImage&#8217; id=&#8217;archivoImage&#8217; /&gt;</p>
<p>&lt;input type=&#8217;button&#8217; id=&#8217;botonSubidor&#8217; /&gt;</p>
<p><strong>El archivo upload.php</strong><strong></strong></p>
<p>//upload.php</p>
<p>$return = Array(&#8216;ok&#8217;=&gt;TRUE);</p>
<p>$upload_folder =&#8217;images';</p>
<p>$nombre_archivo = $_FILES[&#8216;archivo&#8217;][&#8216;name&#8217;];</p>
<p>$tipo_archivo = $_FILES[&#8216;archivo&#8217;][&#8216;type&#8217;];</p>
<p>$tamano_archivo = $_FILES[&#8216;archivo&#8217;][&#8216;size&#8217;];</p>
<p>$tmp_archivo = $_FILES[&#8216;archivo&#8217;][&#8216;tmp_name&#8217;];</p>
<p>$archivador = $upload_folder . &#8216;/&#8217; . $nombre_archivo;</p>
<p>if (!move_uploaded_file($tmp_archivo, $archivador)) {</p>
<p>$return = Array(&#8216;ok&#8217; =&gt; FALSE, &#8216;msg&#8217; =&gt; &#8220;Ocurrio un error al subir el archivo. No pudo guardarse.&#8221;, &#8216;status&#8217; =&gt; &#8216;error&#8217;);</p>
<p>}</p>
<p>echo json_encode($return);</p>
<p>Espero que esta información les sea de utilidad ¿Ustedes cómo lo harían?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/como-subir-un-archivo-con-jquery-y-ajax-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caso de éxito MongoDB: Foursquare</title>
		<link>http://blog.eltallerweb.com/mongo-db-caso-de-exito-foursquare/</link>
		<comments>http://blog.eltallerweb.com/mongo-db-caso-de-exito-foursquare/#comments</comments>
		<pubDate>Thu, 17 Jan 2013 00:57:28 +0000</pubDate>
		<dc:creator><![CDATA[jmosqueda]]></dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[bases]]></category>
		<category><![CDATA[caso]]></category>
		<category><![CDATA[datos]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[exito]]></category>
		<category><![CDATA[mongo db]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=521</guid>
		<description><![CDATA[Por Lillian Domínguez Foursquare (https://foursquare.com/) es una red social que te permite hacer registrar o &#8220;check in&#8221; del lugar en donde te encuentres, es muy popular en Estados Unidos, Brasil y México. Después de realizar ]]></description>
				<content:encoded><![CDATA[<p>Por Lillian Domínguez</p>
<p>Foursquare (https://foursquare.com/) es una red social que te permite hacer registrar o &#8220;check in&#8221; del lugar en donde te encuentres, es muy popular en Estados Unidos, Brasil y México.</p>
<p>Después de realizar una evaluación al sistema tomaron la decisión de migrar su administrador de base de datos de Prostgress a Mongo DB.</p>
<p><strong>Véamos algunos datos de interés:</strong></p>
<ul>
<li>Foursquare tiene 15 millones de usuarios, &gt;1 billón de Check In&#8217;s</li>
<li>Tráfico de pico: Concurrentemente  ~2500 HTTP  QPS Overall, ~80 Check-in&#8217;s por segundo</li>
<li>8 Cluster de Mongo DB en producción</li>
<li>8 fragmentos de usuarios, 12 fragmentos de Check-ins</li>
<li>Checkins: ~80 Inserciones/seg, ~2.5  ops/seg,  45MB/s Salidas en pico</li>
</ul>
<p><strong>Algunos hechos:</strong></p>
<ul>
<li>Todos los servidores corren en EC2</li>
<li>Mongo S (Mongo Shard) son colocados con AppServers, 1:1</li>
<li>Mongo Cs (Mongo Drivers) compartido en 3 Instancias</li>
<li>Mongo D (Mongo deamon) trabajando en un conjunto contenido en RAM</li>
<li>Configuración para MongoD en almacén de respaldo: Volúmenes  4 EBS con RAID0.</li>
</ul>
<p><strong>La problemática: </strong></p>
<ol>
<li>La Fragmentación se infla.</li>
</ol>
<p>Al modificarse los datos Con el tiempo,  la huella de Mongo D RAM crece loos nodos de la página del disco  y el rendimiento del sitio sufre.</p>
<p><strong>Solución:</strong>  La Orden replicaset por datSize + IndexSize, Uptime  DESC. –Reparar los nodos secundarios uno a la vez.  Los nodos primarios requieren stepdown() los cuáles son más delicados.</p>
<p><strong>La problemática: </strong></p>
<p><strong>        </strong> 2. Ejecución del EBS degradado</p>
<p>Síntomas:</p>
<p>Ioutil % en un volumen  &gt; 90</p>
<p>Qr/qw counts spike</p>
<p>Tasa de fallas &gt; 10 en mongostat</p>
<p>Algunas veces: tcploss counts spike</p>
<p><strong>Solución: </strong>Detener el proceso de Mongo D sí es nodo secundario, Stepdown() + Parar sí es el primario.  Reconstruir desde cero.</p>
<p><strong>Las problemática:  </strong></p>
<p><strong></strong>         3. Recientemente Mongo D no ha buscado en todos los datos.</p>
<p><strong>Solución:</strong></p>
<p>Db.checkins.find({unused_key:1}).explain()</p>
<p>Db.checkins.find({unused_key:1}).hint ({random_index: 1}).explain()</p>
<p>Cat &gt; /dev/null trabaja demasiado, a menos que el tamaño del conjunto de datos es más grande que la memoria RAM.</p>
<p><strong>He aquí la presentación completa:</strong></p>
<p><a href="https://docs.google.com/a/netmx.com.mx/presentation/pub?id=1q4R3F0AnWN-MQZqbysZ92nZ4_OC7bRzUCWfbmeHHcQQ&amp;start=false&amp;loop=false&amp;delayms=3000&amp;pli=1#slide=id.p">https://docs.google.com/a/netmx.com.mx/presentation/pub?id=1q4R3F0AnWN-MQZqbysZ92nZ4_OC7bRzUCWfbmeHHcQQ&amp;start=false&amp;loop=false&amp;delayms=3000&amp;pli=1#slide=id.p</a></p>
<p>Por Cooper Bethea. Site Reliability Engineer, Foursquare.</p>
<p><strong>Cónoce más sobre Mongo DB</strong></p>
<p>Próximo webinar de Mongo DB: Análisis de costo de propiedad para MongoDB. Enero 17 11:00am PST / 2:00pm EST / 7:00pm UTC  <a href="http://www.10gen.com/events/webinar/tco-mongodb-vs-oracle">http://www.10gen.com/events/webinar/tco-mongodb-vs-oracle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/mongo-db-caso-de-exito-foursquare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué es PHPUnit?</title>
		<link>http://blog.eltallerweb.com/que-es-phpunit/</link>
		<comments>http://blog.eltallerweb.com/que-es-phpunit/#comments</comments>
		<pubDate>Wed, 16 Jan 2013 21:18:44 +0000</pubDate>
		<dc:creator><![CDATA[igormx]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://blog.eltallerweb.com/?p=516</guid>
		<description><![CDATA[Por Carlos Nacianceno, @igormx PHPUnit es un framework open source para el desarrollo, orientado a pruebas ó TDD para culquier código PHP. Es decir, es un framework que nos ayuda a probar nuestro código. Ahora, ]]></description>
				<content:encoded><![CDATA[<p>Por Carlos Nacianceno, @igormx</p>
<p>PHPUnit es un <em>framework open source</em> para el desarrollo, orientado a pruebas ó TDD para culquier código PHP. Es decir, es un framework que nos ayuda a probar nuestro código.</p>
<p>Ahora, ¿Por qué probar nuestro código? Bueno, Sebastian Bergmann creador de PHPUnit, dice algo muy cierto, <em>&#8220;todos los programadores cometen errores, pero la diferencia entre los buenos programadores y los malos programadores es que los buenos programadores prueban su código para encontrar esos errores lo más pronto posible</em>&#8220;. Y es que esperar a que el software falle por sí mismo para después corregirlo es muy costoso, lento y dificíl de corregir.</p>
<p>La propuesta de PHPUnit y otros frameworks para pruebas es crear pequeñas unidades que revisen funcionalidades puntuales del código y probar que funcionen como debe, además de la posibilidad de automatizar estas pruebas para ejecutarlas frecuentemente, tanto como el código cambie.</p>
<p>Así, para probar el código no es suficiente recargar el navegador como loco, hay que definir la funcionalidad del mismo, separarla en unidades y revisar que cada una funcione como se supone.</p>
<p>La vía típica para instalar PHPUnit es a través de PEAR, aunque también algunos IDEs como Zend Studio ya lo traen integrado. Una vez instalado hay que crear los tests, que no es otra cosa que métodos clases en PHP, y ejecutarlos por línea de comando o desde nuestro IDE; así obtendremos un resultado para cada test. Para que una prueba sea exitosa, todos los tests unitarios deben pasar y obtener un alto porcentaje en la cobertura de código.</p>
<p>Crear tests unitarios puede complicarse si nuestro código no es testeable, es decir, no se presta mucho para hacerle pruebas, saber si un código es testeable o no, crear pruebas más efectivas es algo que sólo con la práctica lograremos.</p>
<p>Espero esto les sea de utilidad.<br />
Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eltallerweb.com/que-es-phpunit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
