<?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>El Blog de Luis &#187; Programación</title>
	<atom:link href="http://lgallardo.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://lgallardo.com</link>
	<description>http://lgallardo.com &#62; Un poco de Linux, PS3, PSP y tecnología</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:52:21 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Reparar tablas de MySQL</title>
		<link>http://lgallardo.com/2012/01/12/reparar-tablas-de-mysql/</link>
		<comments>http://lgallardo.com/2012/01/12/reparar-tablas-de-mysql/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 14:00:11 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=3875</guid>
		<description><![CDATA[Si por alguna razón se llegan a encontrar con un mensaje como el siguiente al consultar una tabla: mysql&#62; select * from data_values_queued; ERROR 1194 (HY000): Table 'data_values_queued' is marked as crashed and should be repaired La forma de ver y reparar el problema es la siguiente. CHECK TABLE Primero se procede a verificar la [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/' rel='bookmark' title='Sentencias preparadas de MySQL en C (ejemplo completo)'>Sentencias preparadas de MySQL en C (ejemplo completo)</a></li>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="MySQL fix" href="http://farm8.staticflickr.com/7151/6681306521_1459a85f7c_o.jpg" target="_blank"><img class="aligncenter" src="http://farm8.staticflickr.com/7151/6681306521_d8362964d1_m.jpg" alt="MySQL fix" width="240" height="124" /></a></p>
<p>Si por alguna razón se llegan a encontrar con un mensaje como el siguiente al consultar una tabla:</p>
<pre>mysql&gt; select * from data_values_queued;
ERROR 1194 (HY000): Table 'data_values_queued' is marked as crashed and should be repaired</pre>
<p>La forma de ver y reparar el problema es la siguiente.</p>
<h2>CHECK TABLE</h2>
<p>Primero se procede a verificar la tabla, para determinar el problema:</p>
<pre>mysql&gt; check table data_values_queued;
+----------------------------+-------+----------+----------------------------------------------------------+
| Table                      | Op    | Msg_type | Msg_text                                                 |
+----------------------------+-------+----------+----------------------------------------------------------+
| datbas1.data_values_queued | check | warning  | 4 clients are using or haven't closed the table properly |
| datbas1.data_values_queued | check | error    | Size of datafile is: 4200         Should be: 4220        |
| datbas1.data_values_queued | check | error    | Corrupt                                                  |
+----------------------------+-------+----------+----------------------------------------------------------+
3 rows in set (0.05 sec)</pre>
<p>Aquí vemos que la tabla no fue cerrada adecuadamente, por ejemplo producto de un apagón. En mi caso descarto el primer mensaje porque el motor que uso es <em>InnoDB</em>, el cual permite concurrencia en las tablas.</p>
<h2>REPAIR TABLE</h2>
<p>Ahora para reparar la tabla se puede usar la siguiente sentencia:</p>
<pre>mysql&gt; repair table data_values_queued ;
+----------------------------+--------+----------+----------------------------------------+
| Table                      | Op     | Msg_type | Msg_text                               |
+----------------------------+--------+----------+----------------------------------------+
| datbas1.data_values_queued | repair | warning  | Number of rows changed from 144 to 143 |
| datbas1.data_values_queued | repair | status   | OK                                     |
+----------------------------+--------+----------+----------------------------------------+
2 rows in set (0.00 sec)</pre>
<p>&nbsp;</p>
<p>Ya con esto habremos reparado la tabla. Veamos si es así:</p>
<pre>mysql&gt; select * from data_values_queued;
+---------+--------+----------+---------------------+
| id      | iodbId | value    | timestamp           |
+---------+--------+----------+---------------------+
| 1476194 |    170 | 297      | 2012-01-11 08:40:45 |
| 1476193 |    170 | 296      | 2012-01-11 08:40:17 |
| 1476176 |     71 | 11692    | 2012-01-11 05:06:46 |
| 1476177 |     72 | 12061    | 2012-01-11 05:06:46 |
| 1476178 |     73 | 11820    | 2012-01-11 05:06:46 |
| 1476179 |    107 | 11703    | 2012-01-11 05:06:46 |</pre>
<pre>...</pre>
<pre>| 1476258 |    170 | 282      | 2012-01-11 11:07:43 |
+---------+--------+----------+---------------------+
143 rows in set (0.00 sec)</pre>
<h2>Referencias</h2>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.0/en/check-table.html" target="_blank">CHECK TABLE Syntax</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.0/en/repair-table.html" target="_blank">REPAIR TABLE Syntax</a></li>
</ul>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/' rel='bookmark' title='Sentencias preparadas de MySQL en C (ejemplo completo)'>Sentencias preparadas de MySQL en C (ejemplo completo)</a></li>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2012/01/12/reparar-tablas-de-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conector MySql para OpenWrt (MIPS)</title>
		<link>http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/</link>
		<comments>http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 16:18:42 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[OpenWrt]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=3415</guid>
		<description><![CDATA[Si estás interesado en desarrollar aplicaciones en C usando MySQL en OpenWrt bajo MIPS, necesitarás el conector respectivo para poder comunicarte con la base de datos. En la página de MySQL solo encontrarás los conectores compilados para x86 y las fuentes por si deseas compilarlo por tu cuenta para x86 y otras arquitecturas. Este es [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/05/19/compilacion-cruzada-cross-compiling-de-mips-para-openwrt/' rel='bookmark' title='Compilación-cruzada (cross-compiling) de MIPS para OpenWrt'>Compilación-cruzada (cross-compiling) de MIPS para OpenWrt</a></li>
<li><a href='http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/' rel='bookmark' title='Sentencias preparadas de MySQL en C (ejemplo completo)'>Sentencias preparadas de MySQL en C (ejemplo completo)</a></li>
<li><a href='http://lgallardo.com/2011/09/08/configurar-openvpn-en-openwrt/' rel='bookmark' title='Configurar OpenVPN en OpenWrt'>Configurar OpenVPN en OpenWrt</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.megaupload.com/?d=1S6XOILG" target="_blank"><img class="aligncenter" title="OpenWrt MIPS MySQL" src="http://farm7.static.flickr.com/6007/5930905681_7741837923.jpg" alt="" width="399" height="242" /></a><br />
Si estás interesado en desarrollar aplicaciones en C usando MySQL en OpenWrt bajo MIPS, necesitarás el conector respectivo para poder comunicarte con la base de datos. En la página de MySQL solo encontrarás los conectores compilados para x86 y las fuentes por si deseas compilarlo por tu cuenta para x86 y otras arquitecturas. Este es el que usaremos para poder compilar para MIPS el conector de MySQL. Veamos como hacerlo:</p>
<ol>
<li>Descarga el <a href="http://www.megaupload.com/?d=1S6XOILG" target="_blank">conector MySql para C</a> (en este ejemplo uso la versión 6.0.2).</li>
<li>Descomprimir el archivo descargado y entrar en el directorio <em>mysql-connector-c-6.0.2</em>:<br />
<blockquote>
<pre>tar xvzf mysql-connector-c-6.0.2.tar.gz
cd mysql-connector-c-6.0.2</pre>
</blockquote>
</li>
<li>Instalar cmake. Si estás en Debian (o derivados) basta con hacer:<br />
<blockquote>
<pre> aptitude install cmake</pre>
</blockquote>
</li>
<li>Configurar el ambiente para cross-compilar para MIPS, exportando las siguientes variables:<br />
<blockquote>
<pre>export CHROOT=/home/lgallard/backfire
export TOOLCHAIN_PATH=$CHROOT/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1
export PATH=$PATH:$TOOLCHAIN_PATH/usr/bin/
export AR=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ar
export AS=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-as
export LD=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ld
export NM=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-nm
export CC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
export CPP=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-cpp
export GCC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
export CXX=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-g++
export RANLIB=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ranlib</pre>
</blockquote>
</li>
<li>Generar el archivo Makefile:<br />
<blockquote>
<pre>cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/ruta_de_instalacion</pre>
</blockquote>
</li>
<li>Compilar el conector:<br />
<blockquote>
<pre>make</pre>
</blockquote>
</li>
<li>Instalar los archivos binarios:<br />
<blockquote>
<pre>make install</pre>
</blockquote>
</li>
<li>Verificar que se haya compilado correctamente para MIPS:<br />
<blockquote>
<pre>file /ruta_de_instalacion/lib/libmysql.so.16.0.0

/ruta_de_instalacion/lib/libmysql.so.16.0.0: ELF 32-bit MSB shared object, <strong>MIPS, MIPS32</strong> rel2 version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped</pre>
</blockquote>
</li>
</ol>
<h2>Uso del conector</h2>
<p>Ahora ya podrás usar el conector en tus proyectos de C y  Mysql en OpenWrt para MIPS, solo basta agregar las rutas de los includes y la librerías de la siguiente forma:</p>
<blockquote>
<blockquote>
<pre>gcc cliente.c -o cliente  -I/ruta_de_instalacion/include -L/ruta_de_instalacion/lib -lmysqlclient -lz -ldl</pre>
</blockquote>
</blockquote>
<h2>Aprender el API</h2>
<p>Si estás interesado en aprender el API, te recomiendo el libro de <a href="http://www.kitebird.com/mysql-book/" target="_blank">MySQL Developer’s Library de Paul DuBois</a> el cual tiene un ejemplo muy bueno de cómo hacer sentencias preparadas usando el conector de C para MySQL en el <a href="http://www.megaupload.com/?d=14A6MLF6" target="_blank">capítulo 7.</a></p>
<h2>Recursos</h2>
<ul>
<li><a href="http://www.megaupload.com/?d=1S6XOILG" target="_blank">Archivos fuente del conector MySql para C versión 6.02</a></li>
<li><a href="http://www.megaupload.com/?d=14A6MLF6" target="_blank">MySQL Developer’s Library: Capítulo 7</a> (PDF)</li>
</ul>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/05/19/compilacion-cruzada-cross-compiling-de-mips-para-openwrt/' rel='bookmark' title='Compilación-cruzada (cross-compiling) de MIPS para OpenWrt'>Compilación-cruzada (cross-compiling) de MIPS para OpenWrt</a></li>
<li><a href='http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/' rel='bookmark' title='Sentencias preparadas de MySQL en C (ejemplo completo)'>Sentencias preparadas de MySQL en C (ejemplo completo)</a></li>
<li><a href='http://lgallardo.com/2011/09/08/configurar-openvpn-en-openwrt/' rel='bookmark' title='Configurar OpenVPN en OpenWrt'>Configurar OpenVPN en OpenWrt</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sentencias preparadas de MySQL en C (ejemplo completo)</title>
		<link>http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/</link>
		<comments>http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 18:21:20 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=3356</guid>
		<description><![CDATA[En el trabajo me tocó hacer una interfaz a una base de datos MySQL desde C puro, y buscando en Internet di con el libro de MySQL Developer&#8217;s Library de Paul DuBois el cual tiene un ejemplo muy bueno de cómo hacer sentencias preparadas usando el conector de C de MySQL en el capítulo 7. [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2012/01/12/reparar-tablas-de-mysql/' rel='bookmark' title='Reparar tablas de MySQL'>Reparar tablas de MySQL</a></li>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2009/06/18/respaldo-completo-en-cpanelautomatic-full-backup-on-cpanel/' rel='bookmark' title='Respaldo completo en cPanel'>Respaldo completo en cPanel</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="MySql logo" href="http://farm6.static.flickr.com/5194/5863838834_0729b09cb0.jpg"><img class="alignnone" src="http://farm6.static.flickr.com/5194/5863838834_0729b09cb0.jpg" alt="MySql logo" /></a></p>
<p>En el trabajo me tocó hacer una interfaz a una base de datos MySQL desde C puro, y buscando en Internet di con el libro de <a href="http://www.kitebird.com/mysql-book/" target="_blank"><span style="font-size: small;">MySQL Developer&#8217;s Library de </span>Paul DuBois</a> el cual tiene un ejemplo muy bueno de cómo hacer sentencias preparadas usando el conector de C de MySQL en el <a href="http://www.megaupload.com/?d=14A6MLF6" target="_blank">capítulo 7</a>. Y aunque en el libro explica como ejecutar una sentencia SQL teniendo parámetros preparados (preapared statements) para luego explicar como obtener los datos de la consulta, al final no se ve todo en conjunto por lo que me dispuse a colocar un ejemplo completo:</p>
<blockquote>
<pre>void iodb_getNumAddresses(int id, int *numAddresses){

 MYSQL *conn;
 MYSQL_STMT *stmt;
 char *sql;

 // Bind variables
 MYSQL_BIND param[1], result[1];

 int myId, myNumAddresses;
 my_bool is_null[1];

 sql = "select count(*) from addresses where id = ?";

 // Open Database
 openDB(&amp;conn);

 // Allocate statement handler
 stmt = mysql_stmt_init(conn);

 if (stmt == NULL) {
  print_error(conn, "Could not initialize statement handler");
  return;
 }

 // Prepare the statement
 if (mysql_stmt_prepare(stmt, sql, strlen(sql)) != 0) {
  print_stmt_error(stmt, "Could not prepare statement");
  return;
 }

 // Initialize the result column structures
 memset (param, 0, sizeof (param)); /* zero the structures */
 memset (result, 0, sizeof (result)); /* zero the structures */

 // Init param structure
 // Select
 param[0].buffer_type     = MYSQL_TYPE_LONG;
 param[0].buffer         = (void *) &amp;myId;
 param[0].is_unsigned    = 0;
 param[0].is_null         = 0;
 param[0].length         = 0;

 // Result
 result[0].buffer_type     = MYSQL_TYPE_LONG;
 result[0].buffer         = (void *) &amp;myNumAddresses;
 result[0].is_unsigned    = 0;
 result[0].is_null         = &amp;is_null[0];
 result[0].length         = 0;

 // Bind param structure to statement
 if (mysql_stmt_bind_param(stmt, param) != 0) {
  print_stmt_error(stmt, "Could not bind parameters");
  return;
 }

 // Bind result
 if (mysql_stmt_bind_result(stmt, result) != 0) {
  print_stmt_error(stmt, "Could not bind results");
  return;
 }

 // Set bind parameters
 myId            = id;

 // Execute!!
 if (mysql_stmt_execute(stmt) != 0) {
  print_stmt_error(stmt, "Could not execute statement");
  return;
 }

 if (mysql_stmt_store_result(stmt) != 0) {
  print_stmt_error(stmt, "Could not buffer result set");
  return;
 }

 // Init data
 (*numAddresses) = 0;

 // Fetch
 if(mysql_stmt_fetch (stmt) == 0){
  (*numAddresses) = myNumAddresses;
 }

 // Deallocate result set
 mysql_stmt_free_result(stmt); /* deallocate result set */

 // Close the statement
 mysql_stmt_close(stmt);

 // Close Database
 closeDB(conn);

}</pre>
</blockquote>
<p>Aquí lo importante a resaltar es que se tiene dos estructuras especiales del API MySQL, <em>param</em> y <em>result</em>, las cuales configuran los parámetros que usará la sentencia preparada así como el sitio donde se guardarán los resultados, respectivamente. En este ejemplo, al hacer la consulta se tendrá el valor en la variable <em>numAddresses</em>.</p>
<h2>Referencias</h2>
<ul>
<li><a href="http://www.megaupload.com/?d=14A6MLF6" target="_blank">MySQL Developer&#8217;s Library: Capítulo 7</a> (PDF)</li>
<li><a href="http://www.kitebird.com/mysql-book/" target="_blank">Página del libro MySQL Developer&#8217;s Library</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/c.html" target="_blank">MySQL C API</a></li>
</ul>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2012/01/12/reparar-tablas-de-mysql/' rel='bookmark' title='Reparar tablas de MySQL'>Reparar tablas de MySQL</a></li>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2009/06/18/respaldo-completo-en-cpanelautomatic-full-backup-on-cpanel/' rel='bookmark' title='Respaldo completo en cPanel'>Respaldo completo en cPanel</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2011/06/23/sentencias-preparadas-de-mysql-en-c-ejemplo-completo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compilación-cruzada (cross-compiling) de MIPS para OpenWrt</title>
		<link>http://lgallardo.com/2011/05/19/compilacion-cruzada-cross-compiling-de-mips-para-openwrt/</link>
		<comments>http://lgallardo.com/2011/05/19/compilacion-cruzada-cross-compiling-de-mips-para-openwrt/#comments</comments>
		<pubDate>Thu, 19 May 2011 18:23:05 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[OpenWrt]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=3236</guid>
		<description><![CDATA[Si por alguna razón necesitas cross-compilar alguna aplicación para la arquitectura MIPS que correrá en OpenWrt sin usar la herramienta de compilación proporcionada por el proyecto, puedes seguir estos pasos: Ubica la el toolchain para MIPS de OpenWrt. Desde el directorio donde descargaste OpenWrt ejecuta: find -name *toolchain-mips* ./staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1 Nota: Se debió haber compilado algo [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2011/09/08/configurar-openvpn-en-openwrt/' rel='bookmark' title='Configurar OpenVPN en OpenWrt'>Configurar OpenVPN en OpenWrt</a></li>
<li><a href='http://lgallardo.com/2010/11/17/openwrt-en-virtualbox/' rel='bookmark' title='OpenWrt en VirtualBox'>OpenWrt en VirtualBox</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="MIPS-OpenWrt" href="http://farm3.static.flickr.com/2271/5737118209_f4b66bc879.jpg"><img class="alignnone" src="http://farm3.static.flickr.com/2271/5737118209_f4b66bc879.jpg" alt="MIPS-OpenWrt" /></a></p>
<p>Si por alguna razón necesitas cross-compilar alguna aplicación para la arquitectura MIPS que correrá en OpenWrt sin usar la herramienta de compilación proporcionada por el proyecto, puedes seguir estos pasos:</p>
<ol>
<li>Ubica la el toolchain para MIPS de OpenWrt. Desde el directorio donde descargaste OpenWrt ejecuta:</li>
<blockquote>
<pre>find -name *toolchain-mips*
<strong>./staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1</strong></pre>
</blockquote>
<p><strong>Nota:</strong> Se debió haber compilado algo previamente bajo esta arquitectura para poder disponer del toolchain.</p>
<li>Exporta las siguientes variables, teniendo en cuenta la ruta absoluta del toolchain (coloco el ejemplo de mi máquina):</li>
<blockquote>
<pre>export TOOLCHAIN_PATH=/home/lgallard/backfire/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1
export PATH=$PATH:$TOOLCHAIN_PATH/usr/bin/
export AR=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ar
export AS=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-as
export LD=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ld
export NM=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-nm
export CC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
export CPP=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-cpp
export GCC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
export CXX=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-g++
export RANLIB=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ranlib</pre>
</blockquote>
<li>Luego para compilar proyectos con Makefile y autotools puedes ejecutar en el directorio de las fuentes de la aplicación:</li>
<blockquote>
<pre>./configure --target=mips-openwrt-linux --host=mips-openwrt-linux</pre>
</blockquote>
</ol>
<p><strong>Referencia:</strong> <a href="http://www.frontiernet.net/~beakmyn/CrossCompile.htm" target="_blank">Cross-compile for WRT</a></p>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2011/09/08/configurar-openvpn-en-openwrt/' rel='bookmark' title='Configurar OpenVPN en OpenWrt'>Configurar OpenVPN en OpenWrt</a></li>
<li><a href='http://lgallardo.com/2010/11/17/openwrt-en-virtualbox/' rel='bookmark' title='OpenWrt en VirtualBox'>OpenWrt en VirtualBox</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2011/05/19/compilacion-cruzada-cross-compiling-de-mips-para-openwrt/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Instalación de Subclipse en Debian (y derivados)</title>
		<link>http://lgallardo.com/2011/02/27/instalacion-de-subclipse-en-debian-y-derivados/</link>
		<comments>http://lgallardo.com/2011/02/27/instalacion-de-subclipse-en-debian-y-derivados/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 14:00:51 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=2923</guid>
		<description><![CDATA[&#160; Enlace al video Si estás interesado en instalar Subclipse como cliente SVN para Eclipse, puedes seguir de forma general los pasos explicados a continuación, los cuales son independiente del sistema operativo y serán válidos para Windows, Mac o Linux, salvo el procedimiento de cómo instalar y configurar la librería JavaHL en Debian (y derivados [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2010/12/15/herramientas-de-desarrollo-de-cc-para-eclipse-en-debian/' rel='bookmark' title='Herramientas de desarrollo de C/C++ para Eclipse en Debian'>Herramientas de desarrollo de C/C++ para Eclipse en Debian</a></li>
<li><a href='http://lgallardo.com/2011/11/01/instalacion-de-subdownloader-en-debian/' rel='bookmark' title='Instalación de SubDownloader en Debian'>Instalación de SubDownloader en Debian</a></li>
<li><a href='http://lgallardo.com/2010/04/03/empaquetenado-codigo-python-para-symbian/' rel='bookmark' title='Empaquetenado código Python para Symbian'>Empaquetenado código Python para Symbian</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p style="text-align: center;"><embed type="application/x-shockwave-flash" width="420" height="340" src="http://blip.tv/play/hPMngqeYbgA" allowscriptaccess="always" allowfullscreen="true"></embed><br />
<a href="http://blip.tv/file/4818275" target="_blank">Enlace al video</a></p>
<p>Si estás interesado en instalar Subclipse como cliente SVN para Eclipse, puedes seguir de forma general los pasos explicados a continuación, los cuales son independiente del sistema operativo y serán válidos para Windows, Mac o Linux, salvo el procedimiento de cómo instalar y configurar la librería <em>JavaHL</em> en Debian (y derivados como Ubuntu).</p>
<h2>Instalación de Subclipse:</h2>
<p>De forma general, estos son los pasos para instalar Subclipse en Eclipse:</p>
<ol>
<li>Abrir Eclipse, e ir a <em>Help &gt; Install New Software.</em></li>
<li>Agregar el url de Subclipse para la versión de Eclipse que se tenga. Por ejemplo, para Galileo se debe agregar <em>http://subclipse.tigris.org/update_1.6.x</em></li>
<li>Seleccionar todos los componentes mostrados: <em>Core SVNkit Library, Optional JNA Library (recommended)</em> y <em>Subclipse.</em></li>
<li>Aceptar el acuerdo de licencia para iniciar la instalación. Casi finalizando la instalación nos aparecerá un mensaje advirtiendo que se instalará software no firmado, aquí aceptamos.</li>
<li>Al finalizar nos pedirá reiniciar Eclipse.</li>
</ol>
<h2>Librería JavaHL en Debian</h2>
<p>Sino quieres usar la librería <em>SVNKit</em> sino <em>JavaHL</em> entonces debes instalar el siguiente paquete:</p>
<blockquote>
<pre> aptitude install libsvn-java</pre>
</blockquote>
<p>Luego se tienen dos alternativas para indicarle a Eclipse la existencia de dicha librería:</p>
<ol>
<li>Lo correcto es tratar de hacer que Eclipse lea el archivo de configuración con la ruta a la librería <em>JavaHL</em>. Yo la verdad no he logrado dar con el archivo <em>eclipse.ini</em> para el usuario, solo el archivo general <em>/etc/eclipse.ini</em>. Allí como root se puede puede agregar la línea mostrada en negritas, quedando algo como esto:</li>
<blockquote>
<pre>-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
<strong>-Djava.library.path=/usr/lib/jni</strong>
-Xms128m
-Xmx512m</pre>
</blockquote>
<li>La otra solución es hacer un enlace simbólico a la librería, esto es:</li>
<blockquote>
<pre>ln -s /usr/lib/jni/libsvnjavahl-1.so /usr/lib/</pre>
</blockquote>
<li>Reiniciar Eclipse y verificar yendo a <em>Preferences &gt; Team &gt; SVN</em>, donde debe aparecer la versión de la librería.</li>
</ol>
<h2>Librería SVNKit</h2>
<p>Con la instalación al principio se descargó la librería SVNKit, la cual puede usarse en sustitución de JavaHL, sin necesidad de configurar ningún archivo adicional de inicialización y con la ventaja de ser multiplataforma, es decir, que en Windows y Mac también servirá. Para esto solo hay que ir a <em>Window&gt; Preferences &gt; Team &gt; SVN</em> y seleccionar en la interfaz SVN a usar la opción que diga <em>SVNKit</em>:</p>
<p style="text-align: center;"><a title="SVNKit" href="http://farm6.static.flickr.com/5131/5446166406_7dcebaaeaa.jpg"><img class="alignnone" src="http://farm6.static.flickr.com/5131/5446166406_7dcebaaeaa.jpg" alt="SVNKit" /></a></p>
<p>Ya con esto podrás usar este cliente SVN en Eclipse!!</p>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2010/12/15/herramientas-de-desarrollo-de-cc-para-eclipse-en-debian/' rel='bookmark' title='Herramientas de desarrollo de C/C++ para Eclipse en Debian'>Herramientas de desarrollo de C/C++ para Eclipse en Debian</a></li>
<li><a href='http://lgallardo.com/2011/11/01/instalacion-de-subdownloader-en-debian/' rel='bookmark' title='Instalación de SubDownloader en Debian'>Instalación de SubDownloader en Debian</a></li>
<li><a href='http://lgallardo.com/2010/04/03/empaquetenado-codigo-python-para-symbian/' rel='bookmark' title='Empaquetenado código Python para Symbian'>Empaquetenado código Python para Symbian</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2011/02/27/instalacion-de-subclipse-en-debian-y-derivados/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Herramientas de desarrollo de C/C++ para Eclipse en Debian</title>
		<link>http://lgallardo.com/2010/12/15/herramientas-de-desarrollo-de-cc-para-eclipse-en-debian/</link>
		<comments>http://lgallardo.com/2010/12/15/herramientas-de-desarrollo-de-cc-para-eclipse-en-debian/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 14:00:07 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=2812</guid>
		<description><![CDATA[Si te gusta Eclipse y quieres programar en C o en C++ en Linux tienes la opción de descargar desde la página del proyecto las herramientas de desarrollo de C/C++,  o si eres como yo que me gusta tener todo (o casi todo) instalado desde los repositorios de Debian, puedes hacer lo siguiente: Agrega los [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/11/01/instalacion-de-subdownloader-en-debian/' rel='bookmark' title='Instalación de SubDownloader en Debian'>Instalación de SubDownloader en Debian</a></li>
<li><a href='http://lgallardo.com/2009/10/17/como-instalar-el-plugin-de-flash-en-debian/' rel='bookmark' title='Cómo instalar el plugin de Flash en Debian'>Cómo instalar el plugin de Flash en Debian</a></li>
<li><a href='http://lgallardo.com/2010/06/03/actualizando-repositorios-de-debian/' rel='bookmark' title='Actualizando repositorios de Debian'>Actualizando repositorios de Debian</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="C/C++ for Eclipse on Debian" href="http://farm6.static.flickr.com/5207/5259399491_c5fa460a55_o.png"><img class="alignnone" src="http://farm6.static.flickr.com/5207/5259399491_6129648ea5.jpg" alt="C/C++ for Eclipse on Debian" /></a></p>
<p>Si te gusta Eclipse y quieres programar en C o en C++ en Linux tienes la opción de descargar desde la página del proyecto las herramientas de desarrollo de C/C++,  o si eres como yo que me gusta tener todo (o casi todo) instalado desde los repositorios de Debian, puedes hacer lo siguiente:</p>
<ol>
<li>Agrega los repositorios de Sid en el archivo <em>/etc/apt/sources.list</em>, por ejemplo:</li>
<blockquote>
<pre>deb ftp.us.debian.org/debian sid main contrib non-free</pre>
</blockquote>
<li>Actualiza el listado paquetes e instala el componente C/C++:</li>
<blockquote>
<pre>aptitude update
aptitude install eclipse-cdt</pre>
</blockquote>
<li>Una vez que hayas terminado de instalar el componente, y para que no instales más nada de Sid (hay que recordar que es la rama inestable de Debian),  deshaz el cambio del archivo <em>/etc/apt/sources.list</em>:</li>
<blockquote>
<pre>#deb ftp.us.debian.org/debian sid main contrib non-free</pre>
</blockquote>
<li>Acuatiza el listado paquetes una vez más:</li>
<blockquote>
<pre>aptitude update</pre>
</blockquote>
</ol>
<p>Ahora podrás escribir  código C/C++ desde Eclipse desde Debian como puedes apreciar en la imagen.</p>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/11/01/instalacion-de-subdownloader-en-debian/' rel='bookmark' title='Instalación de SubDownloader en Debian'>Instalación de SubDownloader en Debian</a></li>
<li><a href='http://lgallardo.com/2009/10/17/como-instalar-el-plugin-de-flash-en-debian/' rel='bookmark' title='Cómo instalar el plugin de Flash en Debian'>Cómo instalar el plugin de Flash en Debian</a></li>
<li><a href='http://lgallardo.com/2010/06/03/actualizando-repositorios-de-debian/' rel='bookmark' title='Actualizando repositorios de Debian'>Actualizando repositorios de Debian</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2010/12/15/herramientas-de-desarrollo-de-cc-para-eclipse-en-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ps3split: script para picar archivos mayores a 4GB</title>
		<link>http://lgallardo.com/2010/11/06/ps3split-script-para-picar-archivos-mayores-a-4gb/</link>
		<comments>http://lgallardo.com/2010/11/06/ps3split-script-para-picar-archivos-mayores-a-4gb/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 14:00:04 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[PS3]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=2695</guid>
		<description><![CDATA[Si al momento de respaldar tus juegos  de PS3, (por ejemplo en una PS3 con Linux o con alguna lectora de Bluray externa,) e intentas copiarlos a un disco externo o directamente a la PS3 vía FTP, no podrás hacerlo por la limitante del sistema de archivos FAT32 (la PS3 no reconoce NTFS). Una solución [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/06/11/como-picar-archivos-grandes-en-linuxhow-to-split-large-files-on-linux/' rel='bookmark' title='Cómo picar archivos grandes en Linux'>Cómo picar archivos grandes en Linux</a></li>
<li><a href='http://lgallardo.com/2011/07/05/spoofer-de-version-para-ps3/' rel='bookmark' title='Spoofer de version para PS3'>Spoofer de version para PS3</a></li>
<li><a href='http://lgallardo.com/2009/09/14/%c2%bfcuanto-tarda-compilar-un-kernel-en-un-ps3/' rel='bookmark' title='¿Cuánto tarda compilar un kernel en un PS3?'>¿Cuánto tarda compilar un kernel en un PS3?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Si al momento de respaldar tus juegos  de PS3, (por ejemplo en una PS3 con Linux o con alguna lectora de Bluray externa,) e intentas copiarlos a un disco externo o directamente a la PS3 vía FTP, no podrás hacerlo por la limitante del sistema de archivos FAT32 (la PS3 no reconoce NTFS). Una solución es volverlos a rippear con Open Manager, pero si aun quieres aprovechar ese respaldo puedes usar este script que hice especial para Open Manager:</p>
<pre>#!/bin/sh</pre>
<pre>find $1 -size +4G -execdir sh -c 'echo "Spliting file: $@";\
 split -b 4000m -d -a 2 "$@" "$@.666";\
 rm "$@"' ps3-split {} +
echo "Finished!!"</pre>
<p>Copia este script en un archivo de nombre <em>ps3split</em>, o descargalo directamente <a href="http://lgallardo.com/wp-content/uploads/2010/11/06/ps3split" target="_blank">aquí</a>. Recuerda que debes darle los permisos adecuados para que se ejecute:</p>
<blockquote>
<pre>chmod +x ps3split</pre>
</blockquote>
<h2>Modo de uso</h2>
<ol>
<li> Indica la ruta del juego. Ejemplo:</li>
<blockquote>
<pre>./ps3split /home/lgallard/PS3/respaldos/BLUS30036</pre>
</blockquote>
<li>Esperar un rato (recuerda que son más de 4 GB lo que se está picando).</li>
<li>Copia el directorio del juego en tu disco externo o pendrive USB y conéctalo a la PS3.</li>
<li>En la PS3 ejecuta Open Manager y copia el juego en el disco duro de la PS3. Open Manager automágicamente corregirá el juego en cuestión.</li>
</ol>
<h2>Referencias</h2>
<ul>
<li><a href="http://content.hccfl.edu/pollock/unix/findcmd.htm" target="_blank">A Unix/Linux &#8220;find&#8221; Command Tutorial</a></li>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?find" target="_blank">man find</a></li>
<li><a href="http://daxhordes.org/forum/viewtopic.php?f=72&amp;t=4425&amp;start=0" target="_blank">SPLIT-4G</a></li>
</ul>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/06/11/como-picar-archivos-grandes-en-linuxhow-to-split-large-files-on-linux/' rel='bookmark' title='Cómo picar archivos grandes en Linux'>Cómo picar archivos grandes en Linux</a></li>
<li><a href='http://lgallardo.com/2011/07/05/spoofer-de-version-para-ps3/' rel='bookmark' title='Spoofer de version para PS3'>Spoofer de version para PS3</a></li>
<li><a href='http://lgallardo.com/2009/09/14/%c2%bfcuanto-tarda-compilar-un-kernel-en-un-ps3/' rel='bookmark' title='¿Cuánto tarda compilar un kernel en un PS3?'>¿Cuánto tarda compilar un kernel en un PS3?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2010/11/06/ps3split-script-para-picar-archivos-mayores-a-4gb/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Plugin Sociable hackeado para bit.ly</title>
		<link>http://lgallardo.com/2010/07/12/plugin-sociable-hackeado-para-bit-ly/</link>
		<comments>http://lgallardo.com/2010/07/12/plugin-sociable-hackeado-para-bit-ly/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:30:14 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=2430</guid>
		<description><![CDATA[Estuve probando varios plugins para que los usuarios del blog puedan compartir las entradas en las redes sociales como Twitter o Facebook y el que más me gustó fue Sociable. Pero al probar con Twitter y con Identi.ca me di cuenta que utiliza awe.sw como herramienta para acortar el URL, pero el servicio está colapsado [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/10/17/como-instalar-el-plugin-de-flash-en-debian/' rel='bookmark' title='Cómo instalar el plugin de Flash en Debian'>Cómo instalar el plugin de Flash en Debian</a></li>
<li><a href='http://lgallardo.com/2009/06/18/respaldo-completo-en-cpanelautomatic-full-backup-on-cpanel/' rel='bookmark' title='Respaldo completo en cPanel'>Respaldo completo en cPanel</a></li>
<li><a href='http://lgallardo.com/2009/04/17/articulos-en-varios-idiomas-en-wordpressmultilingual-wordpress-posts/' rel='bookmark' title='Artículos en varios idiomas en WordPress'>Artículos en varios idiomas en WordPress</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Sociable WordPress Plugin" href="http://farm5.static.flickr.com/4095/4785976156_dff7195b04.jpg"><img src="http://farm5.static.flickr.com/4095/4785976156_dff7195b04.jpg" alt="Sociable WordPress Plugin" /></a></p>
<p>Estuve probando varios plugins para que los usuarios del blog puedan compartir las entradas en las redes sociales como <em>Twitter</em> o <em>Facebook</em> y el que más me gustó fue <em><a href="http://blogplay.com/plugin" target="_blank">Sociable</a></em>. Pero al probar con <em>Twitter</em> y con<em> Identi.ca</em> me di cuenta que utiliza <a href="http://awe.sm/" target="_blank">awe.sw</a> como herramienta para acortar el URL, pero el servicio está colapsado y no están dando invitaciones. De esta forma me puse a investigar maneras de hacerlo funcionar con <a href="http://bit.ly" target="_blank">Bit.ly</a> y me encontré con un <a href="http://webexpedition18.com/articles/how-to-sociable-wp-plugin-with-auto-tinyurl-or-bitly-shortening/" target="_blank">artículo</a> que describe exactamente lo que quería, sin embargo el código usa la función <em>file_get_contents</em>, la cual arroja el siguiente error en mi servidor:</p>
<blockquote>
<pre>Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/g/gallardo/web/wp-content/plugins/sociable/sociable.php on line 813</pre>
</blockquote>
<p>Que es el resultado de no tener activa la variable <em>allow_url_fopen</em> habilitada en PHP. Después de consultar con mi proveedor de hosting, me aconsejaron que usará <a href="http://www.php.net/manual/en/curl.examples-basic.php" target="_blank">cURL</a> en vez de <em>file_get_contents</em>, por lo que tuve que hacer algunas modificaciones al archivo <em>sociable.php</em>, y agregar el archivo <em>sociable-bitly.php</em> que es donde se acorta los URLs con <em>cURL</em>.</p>
<p>Ambos archivos los coloqué en un zip <a href="http://lgallardo.com/wp-content/uploads/2010/07/sociable.3.5.2-hacked.zip" target="_blank">sociable.3.5.2-hacked.zip</a> por si alguien necesita usarlo. Pero ojo,  que no es el plugin completo sino son únicamente estos archivos para copiar en la carpeta <em>/sociable</em> del plugin oficial. Otro detalle es que se debe editar el archivo <em>sociable-bitly.php</em> para colocar el login y el API Key de Bit.ly en las siguientes líneas:</p>
<blockquote>
<pre>$bitlylogin = 'yourbitlylogin';
$bitlyapikey= 'yourbitlyapikey';</pre>
</blockquote>
<p>Se podría hacer más cosas con este plugin, como por ejemplo quitar por completo el código de awe.sw, crear los campos de entrada para Bit.ly en el panel de administración, o integrarlo con tinyurl. Esperemos que la próxima versión oficial tenga algunos de estos cambios.</p>
<h2>Referencias:</h2>
<ul>
<li><a href="http://webexpedition18.com/articles/how-to-sociable-wp-plugin-with-auto-tinyurl-or-bitly-shortening/" target="_blank">How To: Sociable WP Plugin With Auto TinyURL Or Bit.ly Shortening</a></li>
<li><a href="http://www.php.net/manual/en/book.curl.php" target="_blank">Client URL Library</a></li>
</ul>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/10/17/como-instalar-el-plugin-de-flash-en-debian/' rel='bookmark' title='Cómo instalar el plugin de Flash en Debian'>Cómo instalar el plugin de Flash en Debian</a></li>
<li><a href='http://lgallardo.com/2009/06/18/respaldo-completo-en-cpanelautomatic-full-backup-on-cpanel/' rel='bookmark' title='Respaldo completo en cPanel'>Respaldo completo en cPanel</a></li>
<li><a href='http://lgallardo.com/2009/04/17/articulos-en-varios-idiomas-en-wordpressmultilingual-wordpress-posts/' rel='bookmark' title='Artículos en varios idiomas en WordPress'>Artículos en varios idiomas en WordPress</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2010/07/12/plugin-sociable-hackeado-para-bit-ly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Empaquetenado código Python para Symbian</title>
		<link>http://lgallardo.com/2010/04/03/empaquetenado-codigo-python-para-symbian/</link>
		<comments>http://lgallardo.com/2010/04/03/empaquetenado-codigo-python-para-symbian/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 05:00:12 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=2103</guid>
		<description><![CDATA[Digamos que quieres empaquetar una aplicación Python para teléfonos Symbian de forma que puedas distribuir software en archivos de instalación .sis. ¿Cómo puedes hacerlo? Fácil, con ensymble. Instalación de ensymble En Debian puedes instalarlo desde los repositorios escribiendo: aptitude install ensymble Empaquetado de una aplicación Si tienes un archivo llamado aplicacion.py y quieres convertirlo en [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2011/02/27/instalacion-de-subclipse-en-debian-y-derivados/' rel='bookmark' title='Instalación de Subclipse en Debian (y derivados)'>Instalación de Subclipse en Debian (y derivados)</a></li>
<li><a href='http://lgallardo.com/2010/11/06/ps3split-script-para-picar-archivos-mayores-a-4gb/' rel='bookmark' title='ps3split: script para picar archivos mayores a 4GB'>ps3split: script para picar archivos mayores a 4GB</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="PyS60" href="http://farm5.static.flickr.com/4014/4478517476_2f19a3591c.jpg"><img class="alignnone" src="http://farm5.static.flickr.com/4014/4478517476_2f19a3591c_m.jpg" alt="PyS60" /></a></p>
<p>Digamos que quieres empaquetar una aplicación <em>Python</em> para teléfonos <em>Symbian </em>de forma que puedas distribuir software en archivos de instalación <em>.sis</em>. ¿Cómo puedes hacerlo? Fácil, con<em> ensymble.</em></p>
<h2>Instalación de ensymble</h2>
<p>En Debian puedes instalarlo desde los repositorios escribiendo:</p>
<blockquote>
<pre>aptitude install ensymble</pre>
</blockquote>
<h2>Empaquetado de una aplicación</h2>
<p>Si tienes un archivo llamado <em>aplicacion.py</em> y quieres convertirlo en un archivo de instalación <em>.sis</em>, solo escribe:</p>
<blockquote>
<pre>ensymble py2sis aplicacion.py</pre>
</blockquote>
<h2>Empaquetado de directorios</h2>
<p>Algunas veces necesitas empaquetar directorios para distribuir librerías. En este caso debes copiar la estructura de directorios que deseas en tu teléfono y copiar allí tus archivos. Por ejemplo, digamos que quieres hacer un archivo <em>.sis</em> para una librería <em>Python</em> que creaste, llamada <em>milib</em> donde los archivos <em>configuraciones.py</em> y <em>red.py</em> serán guardados:</p>
<blockquote>
<pre>mkdir MiLib/pyhon/lib/milib
cp configuraciones.py MiLib/pyhon/lib/milib
cp red.py MiLib/pyhon/lib/milib

ensymble simplesis --caption="MiLib" --version=1.0.2 MiLib</pre>
</blockquote>
<p>Con la última orden terminarás con un archivo llamado <em>MiLib_v1_0_2.sis</em>. Este archivo instalará un directorio llamado  <em>E:\\Python\Lib\milib</em> (o <em>C:\\Python\Lib\milib</em> dependiendo de donde lo instales) con tus dos archivos <em>Python</em>.</p>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2011/07/14/conector-mysql-para-openwrt-mips/' rel='bookmark' title='Conector MySql para OpenWrt (MIPS)'>Conector MySql para OpenWrt (MIPS)</a></li>
<li><a href='http://lgallardo.com/2011/02/27/instalacion-de-subclipse-en-debian-y-derivados/' rel='bookmark' title='Instalación de Subclipse en Debian (y derivados)'>Instalación de Subclipse en Debian (y derivados)</a></li>
<li><a href='http://lgallardo.com/2010/11/06/ps3split-script-para-picar-archivos-mayores-a-4gb/' rel='bookmark' title='ps3split: script para picar archivos mayores a 4GB'>ps3split: script para picar archivos mayores a 4GB</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2010/04/03/empaquetenado-codigo-python-para-symbian/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Definición de variables</title>
		<link>http://lgallardo.com/2009/11/04/definicion-de-variables/</link>
		<comments>http://lgallardo.com/2009/11/04/definicion-de-variables/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 05:00:36 +0000</pubDate>
		<dc:creator>Luis Gallardo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[HP-48]]></category>

		<guid isPermaLink="false">http://lgallardo.com/?p=1566</guid>
		<description><![CDATA[Siguiendo con nuestro curso de programación de HP-48, ahora comentaré sobre las definición de las variables. Una variable es donde se guarda temporalmente los datos que procesarán los programas. En el lenguaje USER-RPL las variables son vistas como locales, globales y del entorno. Variables locales Este tipo de variables son las que se usan internamente [...]
Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/05/12/curso-de-programacion-hp-48programming-the-hp-48/' rel='bookmark' title='Curso de programación HP48'>Curso de programación HP48</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con nuestro curso de programación de HP-48, ahora comentaré sobre las definición de las variables. Una variable es donde se guarda temporalmente los datos que procesarán los programas. En el lenguaje USER-RPL las variables son vistas como locales, globales y del entorno.</p>
<h2>Variables locales</h2>
<p>Este tipo de variables son las que se usan internamente en los programas para realizar cálculos. Veamos un ejemplo:</p>
<p style="text-align: center;"><a title="HP48-  local variables" href="http://farm3.static.flickr.com/2459/4062841922_9cc7a0eef4.jpg"><img class="alignnone" src="http://farm3.static.flickr.com/2459/4062841922_9cc7a0eef4.jpg" alt="HP48-  local variables" /></a></p>
<p>Aquí las variables UNO y DOS contienen los valores 1 y 2, respectivamente. Luego en el mismo programa son usadas para realizar una suma cuyo resultado queda en la pila de la calculadora.</p>
<h2>Variables globales</h2>
<p>Si defines una variable global, esta puede ser usada desde el programa actual y también por otros programas que hayan sido invocados desde el actual .El ejemplo anterior lo modifiqué para usar un programa externo que hace la suma, llamado SUMAR:</p>
<p style="text-align: center;"><a title="HP48-  global variables" href="http://farm3.static.flickr.com/2586/4062237501_d48d3909e3.jpg"><img class="alignnone" src="http://farm3.static.flickr.com/2586/4062237501_d48d3909e3.jpg" alt="HP48-  global variables" /></a></p>
<p>El programa SUMAR invoca las variables globales y realiza la suma, como se muestra a continuación:</p>
<p style="text-align: center;"><a title="HP48 - global variables2" href="http://farm3.static.flickr.com/2702/4062249303_3da83e2253.jpg"><img class="alignnone" src="http://farm3.static.flickr.com/2702/4062249303_3da83e2253.jpg" alt="HP48 - global variables2" /></a></p>
<p style="text-align: left;">Este tipo de declaración no tiene restricción en el ámbito de existencia de la variable, ya que es definida como global. Pero tiene como inconveniente que los programas que usan variables globales ocupan más espacio que los que no lo usan.</p>
<h2>Variables del entorno</h2>
<p style="text-align: left;">Las variables del entorno son las que pueden ser usadas desde el directorio de trabajo actual. Por ejemplo, los valores 1 y 2 pueden guardarse en variables en el directorio actual con el nombre UNO y DOS, y se puede modificar el programa SUMAR para que invoque estas variables:</p>
<p style="text-align: center;"><a title="HP48 - environment variables" href="http://farm3.static.flickr.com/2486/4063035464_bf82ed1043.jpg"><img class="alignnone" src="http://farm3.static.flickr.com/2486/4063035464_bf82ed1043.jpg" alt="HP48 - environment variables" /></a></p>
<p>Artículos relacionados:<ol>
<li><a href='http://lgallardo.com/2009/05/12/curso-de-programacion-hp-48programming-the-hp-48/' rel='bookmark' title='Curso de programación HP48'>Curso de programación HP48</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://lgallardo.com/2009/11/04/definicion-de-variables/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

