tag:blogger.com,1999:blog-20870078952545677102024-03-05T09:16:49.361-06:00LibertadHackBlog para compartir experiencias dentro del mundo de los ordenadores digitalesaztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-2087007895254567710.post-16456017609284909882017-04-23T00:36:00.001-05:002017-04-23T00:37:52.316-05:00robotDisco<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOxF1uci6XKyeMsMPvJWMNEzm9sjv6kQM1tZJJrjIVsaXVhk7Ugdv7Nef1HpkXo7fKIrcPvuJLBT_3OWrGdPuN3rvgwTyOlJ8dvItlqSIhnZhHnLx2hNmvIMO5gMtw3M2fv_nD5m5mjt0/s1600/robotDisco.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOxF1uci6XKyeMsMPvJWMNEzm9sjv6kQM1tZJJrjIVsaXVhk7Ugdv7Nef1HpkXo7fKIrcPvuJLBT_3OWrGdPuN3rvgwTyOlJ8dvItlqSIhnZhHnLx2hNmvIMO5gMtw3M2fv_nD5m5mjt0/s400/robotDisco.jpg" width="400" /></a></div>
<br />
Aquí una foto del robot a que muy de vez en cuando le dedico ratos libres.<br />
<br />
<a name='more'></a>Es un móvil de dos motores con rueda loca. Los motores son unos micrometal gearmotors con encoders ópticos y el driver DRV8835 de pololu. Tiene un electroimán HCNE1-P20/15 que lo estoy alimentando a 5V y puede levantar monedas de 50C. La comunicación es a través de BlueTooth con un módulo HC-06. El control es usando un arduino UNO. Y todo lo estoy alimentando con un Bank Power (batería de emergencia para celular) de 5V 4000mAh.<br />
<br />
La primera fase es enviarle un comando (adelante, reversa, giro horario, giro antihorario, encender electroimán, apagar electroimán) desde una aplicación gambas. Lo subsecuente es implementar visión artificial.<br />
<br />
Saludos.aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-34346391254353251682017-04-16T23:12:00.001-05:002017-04-16T23:14:03.184-05:00Liberar BlackBerry 9550<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVS86CX0l_J1ESWQ0APrzmOw7WV99QcB6hTWb_NEZrhpFJbd9msUSxU0mZcfsVFtPpGntZzpZASfqhOkqzQFP8ifHNyD96BN7OkX-pmq-C4L3xko9BTqKaVweqqFE0yk3EqNKAveEk1HE/s1600/BB+9550.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVS86CX0l_J1ESWQ0APrzmOw7WV99QcB6hTWb_NEZrhpFJbd9msUSxU0mZcfsVFtPpGntZzpZASfqhOkqzQFP8ifHNyD96BN7OkX-pmq-C4L3xko9BTqKaVweqqFE0yk3EqNKAveEk1HE/s1600/BB+9550.jpg" /></a></div>
En el baúl de los recuerdos tenía un BlackBerry 9550 (que es del año 2010) que estaba con IUSACELL. El celular es un smartphone que tiene Whatsapp, correo electrónico, navegador web y cámara; las cosas que casi exclusivamente uso. Ya que actualmente estoy con otra compañía de celular decidí liberar el equipo para poder ocuparlo sin tener una SIM USACELL.<br />
<br />
Sorprendentemente en internet encontré el metodo fácil y gratis.<br />
<a name='more'></a><br />
<ol>
<li>Hay que instalar los drivers del teléfono en el PC. Yo use como OS Windows 7. DOWNLOAD <a href="https://mega.nz/#!J5oEVZpC!ZtaU628SYBkKvDdITgorvOqdaIhp5Zxv9-ZRYz-5hAk">BlackBerry USB and Modem Drivers ENG (DM4.5 B13).msi</a></li>
<li>Ejecutar la aplicación <a href="https://mega.nz/#!N053AB7D!T7mB-1e7bPCVF7hbW7EYlN5ZQ0LzAvhdhMQsS_iH0Jw" target="_blank">BBReader.exe</a> </li>
<ul>
<li>Antes que nada desconecten todas las redes del BlackBerry (WiFi y red celular)</li>
<li>Al ejecutar BBReader no debe de estar conectado el BB, hay que dar click al botón Read Phone; entonces conectamos el BB y después de unos segundos nos aparecerá el IMEI y MEPID.</li>
</ul>
<li>Ejecutar la aplicación <a href="https://mega.nz/#!w05BRYjS!EeauzH5B2aPi4NlnRG7aWN6yE338VfnnHSrY9pUy0iU" target="_blank">BBCalculator.exe</a></li>
<ul>
<li>En la pestaña Code Calculator poner el IMEI y MEPID</li>
<li>Click en Calculate Codes</li>
</ul>
<li>Ahora en el BB hay que ir a Opciones -> Opciones Avanzadas -> Tarjeta SIM</li>
<ul>
<li>Allí con el botón de logo de BB damos en "mostrar teclado", para teclear MEPD (es en mayúsculas, por lo que hay que presionar la tecla shift con cada letra y en el caso de la P son varias pulsaciones). Al momento de escribir no se verán los caracteres.</li>
<li>Nos aparecerá otra pantalla. De forma similar ahora tecleamos MEP2.</li>
<li>Nos aparecerá un cuadro de dialogo (que nos informará de cuantos intentos nos queda para poner el MEP2 para liberar nuestro teléfono), ponemos el número que nos dio el BBCalculator.</li>
<li>En caso de ser el código adecuado se nos informará.</li>
</ul>
<li>Apagamos el BB, le ponemos nuestro SIM. Al encender se conectará a la red de nuestra SIM.</li>
</ol>
<div>
<br /></div>
<div>
Referencias:<br />
<a href="https://www.fiuxy.co/celulares-y-telefonia/2632740-descargar-bbreader-bbcalculator-liberar-blackberry-gratis.html" target="_blank">Descargar BBreader + BBCalculator Liberar BlackBerry Gratis</a><br />
<a href="https://www.youtube.com/watch?v=eton2M3yhFE" target="_blank">Descargar BbCalculator | Mega | 2015 | Solo Programa</a><br />
<a href="http://www.unlocktotalk.com/BlackBerryMepReader.php" target="_blank">BlackBerry Code Error Solution</a><br />
<a href="http://singledrivers.blogspot.mx/2014/01/download-blackberry-storm2-9550-usb.html" target="_blank">Single Drivers</a></div>
<div>
<br /></div>
<ol>
</ol>
aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com1tag:blogger.com,1999:blog-2087007895254567710.post-16341376411714254122016-10-09T12:42:00.001-05:002017-04-15T19:02:26.310-05:00arduino como modbus TCP/IP server<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdJKpklPQ5ZaUzJyelf2Lg26D3tEegssKoB_eU34nzBGgkJ9TuCtjjqrcu6Bu6z_GceHLN38ks7mlfVHtkjR9CUl4MgnlIlWdJQlv1rhTmXaqeVFsWsx9tLwfAFYOrX0CrIEgZWQjd4ps/s1600/arduino_modbus.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdJKpklPQ5ZaUzJyelf2Lg26D3tEegssKoB_eU34nzBGgkJ9TuCtjjqrcu6Bu6z_GceHLN38ks7mlfVHtkjR9CUl4MgnlIlWdJQlv1rhTmXaqeVFsWsx9tLwfAFYOrX0CrIEgZWQjd4ps/s200/arduino_modbus.png" width="153" /></a></div>
He estado estudiando el protocolo modbus y más específicamente su variante TCP/IP.<br />
<br />
Haciendo uso de <a href="http://myarduinoprojects.com/modbus.html" target="_blank">ModbusTCP library for the Arduino</a> es muy fácil la implementación.<br />
<a name='more'></a><br />
Realicé unos muy (muy muy) pequeños cambios a la librería, así que recomiendo usar los archivos que incluyo en el ejemplo.<br />
<br />
El ejemplo pone al arduino como un dispositivo modbus TCP/IP server, el cual tiene configurado los pines 0 al 3 como entradas con las direcciones modbus 0 al 3 (Nota: activé los pull up resistors, así se pueden poner contactos secos entre los pines 0 al 3 y GND) y los pines 4 al 7 como salidas con las direcciones modbus 16 al 19.<br />
<br />
Como observación, la shield Ethernet utiliza los pines 10, 11, 12 y 13.<br />
<br />
Y disculpen que en la foto se vean alambres todos feos pero no tengo protoboard, jejeje.<br />
<br />
<span style="color: red;"><b><span style="font-size: large;">DOWNLOAD:</span></b></span> <a href="https://www.dropbox.com/s/kaes4ok9pm4knls/modbus_slave_test.tar.gz?dl=0" target="_blank">modbus_slave_test.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com2tag:blogger.com,1999:blog-2087007895254567710.post-29804141050181069012016-09-22T23:32:00.001-05:002016-10-03T15:46:25.510-05:00Aplicación: telcelgb Consulta tu saldo<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwK77F-1gOAJ94x1kDkPJsNDM7VwvxF2WJVK533e-wj30jXbH7ldJNHWyXujblkuJsomDgP7Et2tQx6CmbCkTyB8RgKeEK4Ys3nZpX13hb6tar0tm2NAUcgPg-fd6-J-WQXJsYnOp60S8/s1600/telcelgb.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwK77F-1gOAJ94x1kDkPJsNDM7VwvxF2WJVK533e-wj30jXbH7ldJNHWyXujblkuJsomDgP7Et2tQx6CmbCkTyB8RgKeEK4Ys3nZpX13hb6tar0tm2NAUcgPg-fd6-J-WQXJsYnOp60S8/s200/telcelgb.png" width="144" /></a></div>
Disculpen el comercial, pero es que tenía la necesidad de conocer mi saldo del celular de una forma más fácil.<br />
<br />
Estuve investigando como autenticarme a páginas web con curl por medio
del método post, que es el que usa el portal de MiTelcel (donde uno
puede consultar el saldo de celulares de Telcel). Curl tiene una
excelente documentación (<a class="post-url" href="https://curl.haxx.se/docs/httpscripting.html#Basic_Authentication" target="_blank">curl</a>).<br />
<br />
Para más info: <a href="https://www.gambas-es.org/viewtopic.php?f=5&t=5817&p=34520#p34520" target="_blank">Telcelgb: Conoce Tu Saldo</a> <br />
<br />
<a href="https://www.dropbox.com/home/Public/recursos?preview=telcelgb-0.0.1.tar.gz" target="_blank">telcelgb-0.0.1.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-52926221736854382482016-07-13T13:55:00.000-05:002016-07-13T13:57:33.175-05:00PLC 90-30 GE: Conversión de string a númeroTuve la necesidad de colectar datos modbus en un PLC 90-30 GE Fanuc, pero dichos datos me llegaban en caracteres (string).<br />
<br />
Al parecer el 90-30 no maneja datos tipo string, por lo que me tuve que crear una subrutina para convertir el string a un valor entero (en éste caso a DINT). Para tal subrutina ocupo un total de 16 registros, y puedo convertir cadenas de hasta 10 caracteres, pero hasta el valor 2147483647 (DINT).<br />
<br />
<a name='more'></a>Antes de invocar la subrutina es necesario pasarle a S2I_IN los registros a convertir, y después de invocada recoger el valor de S2I_OUT.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitn-g3WBH4O2lzJ9cI23eZt7g7q_P2N4qrkMvrd-e7beUBNiI6tOqh0D947zyydpLsLeXfluFkPt_DissabdDqfBe4EQuJeVvhsIcgXNKc9fqXHtgk2IHckXj674fjwCBDDQ1mCgfgw9o/s1600/STR2INT.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitn-g3WBH4O2lzJ9cI23eZt7g7q_P2N4qrkMvrd-e7beUBNiI6tOqh0D947zyydpLsLeXfluFkPt_DissabdDqfBe4EQuJeVvhsIcgXNKc9fqXHtgk2IHckXj674fjwCBDDQ1mCgfgw9o/s1600/STR2INT.JPG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
PLC 90-30 GE Fanuc doesn't handle string values. But with this subroutine I was able to convert a string to a numeric value (DINT). The subroutine uses 16 registers. It can convert 10 chars up, but value 2147483647 up.<br />
<br />
DOWNLOAD: <a href="https://dl.dropboxusercontent.com/u/3701367/recursos/string_to_dint_0.0.1.zip" target="_blank">string_to_dint_0.0.1.zip</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-20212886423632904752016-04-14T16:39:00.000-05:002016-04-14T16:43:35.490-05:00ModBus TCP/IP Client con PLC 90-30 GE-Fanuc<a href="http://www.modbus.org/images/logo_new.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://www.modbus.org/images/logo_new.jpg" /></a>Estoy desarrollando una interfaz en CIMPLICITY (GE) para un dispositivo ModBus TCP/IP Server. Pero como existe todo un sistema de PLC GE, la recolección de datos ModBus la haré por medio de un PLC 90-30 GE-Fanuc.<br />
<a name='more'></a><br />
Por ahora tengo desarrollado un ejemplo para leer solamente los registros de salida de mi dispositivo ModBus Server. Para tal caso me he basado en el ejemplo que viene en el documento <a href="https://www.dropbox.com/s/gtas0b8a9whlx4y/TCP_IP%20Ethernet%20Communications%20for%20Series%2090-30.pdf?dl=0" target="_blank">TCP_IP Ethernet Communications for Series 90-30</a> en el capitulo Modbus/TCP Client en las páginas 8-29 a la 8-33.<br />
<br />
Realicé algunas correcciones del ejemplo del documento. Por ejemplo, yo estoy usando aparte un módulo CMM321 (conectado en el rack 0, slot 6), y para ello los COM_REQ necesitan como parámetro SYS = 6, TAS = 0 (en caso de usar el mismo puerto ethernet del CPU deben ser SYS = 1, TAS = 21) y cambié algunos SET por COIL.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjglbAhtmeV1AXS5E2Ia638KPkq_oeUR85rBty-3W9dxOOjgkLf6Sfw1Qs5yCIqJM65cVee5VAvn5LnLEYwbOARXMGg4A7IRTxymGaXzEgLAw_2m832Rmy7478f4oxY_FmfLFaYfk5rFi8/s1600/PLC+y+CMM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjglbAhtmeV1AXS5E2Ia638KPkq_oeUR85rBty-3W9dxOOjgkLf6Sfw1Qs5yCIqJM65cVee5VAvn5LnLEYwbOARXMGg4A7IRTxymGaXzEgLAw_2m832Rmy7478f4oxY_FmfLFaYfk5rFi8/s400/PLC+y+CMM.jpg" width="400" /></a></div>
<br />
También realicé un control de errores, para en caso de que se desconecte el PLC o el dispositivo ModBus Server, intente reconectarse de nuevo.<br />
<br />
Para probar de mejor forma el sistema, también pongo a disposición un proyecto CIMPLICITY.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4izgEnVcBFBC3O3ID3JNkqc3dGgNsVG0MlkpNKw88jh5IaZ1BjCPAdTJxpourlUmmGh82nGaf9kQUMmg4ImqBHucPkMU8mP1j2neS5tBbzZ3sq8Kp3OdYNZTffYU_ZrTK2bReY7_ehKw/s1600/modbusPLC9030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4izgEnVcBFBC3O3ID3JNkqc3dGgNsVG0MlkpNKw88jh5IaZ1BjCPAdTJxpourlUmmGh82nGaf9kQUMmg4ImqBHucPkMU8mP1j2neS5tBbzZ3sq8Kp3OdYNZTffYU_ZrTK2bReY7_ehKw/s400/modbusPLC9030.png" width="400" /></a></div>
<br />
<br />
<span style="font-size: large;"><span style="color: red;">DESCARGAR</span></span> <a href="https://www.dropbox.com/s/wf5ws2rj1lrn7mn/plc9030ModBus.zip?dl=0" target="_blank">Proyecto Machine Edition: plc9030ModBus.zip</a><br />
<span style="font-size: large;"><span style="color: red;">DESCARGAR</span></span> <a href="https://www.dropbox.com/s/t1iddj8z55eghmz/plc9030ModBusCIMPLI.zip?dl=0" target="_blank">Proyecto CIMPLICITY: plc9030ModBusCIMPLI.zip</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-64483603950799997432015-11-07T19:31:00.000-06:002015-11-07T20:07:15.962-06:00Control de encoder Pololu usando arduino y gambasQué tal,<br />
<br />
Pues bien, estoy realizando un robot, pero como el trabajo no me deja mucho tiempo libre voy de poco en poco.<br />
<a name='more'></a><br />
Para la parte de los motores tengo pensado usar <a href="http://www.pololu.com/category/60/micro-metal-gearmotors" rel="nofollow" target="_blank">Micro Metal Gearmotors</a> (aunque no los he comprado en Pololu, hay opciones más baratas en ebay), <a href="http://www.pololu.com/product/1217" rel="nofollow" target="_blank">Encoders opticos de pololu</a> y una shield para arduino, igualmente de Pololu, la <a href="http://www.pololu.com/product/2511" rel="nofollow" target="_blank">DRV8835</a>. Y obviamente un arduino (he hecho las pruebas en un arduino Duemilanove pero el código debe ser compatible también con arduino UNO).<br />
<br />
El encoder de pololu la verdad que me ha agradado mucho, se comporta muy bien, aunque en la instalación de las librerías me he liado un poco.<br />
La librería usada para el encoder fue <a href="http://www.pololu.com/file/download/libpololu-arduino-150218.zip?file_id=0J859" target="_blank">libpololu-arduino-150218.zip</a> la cual es compatible con el entorno arduino 1.6.x.<br />
<br />
Y la shield DRV885 utiliza la librería <a href="https://github.com/pololu/drv8835-motor-shield" target="_blank">drv8835-motor-shield</a>.<br />
<br />
Para la comunicación entre mi aplicación PC en gambas y arduino hago uso del puerto serie.<br />
<br />
Así que el código en la parte de arduino es:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #272822; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #75715e;">#include <DRV8835MotorShield.h></span>
<span style="color: #75715e;">#include <PololuWheelEncoders.h></span>
<span style="color: #f8f8f2;">DRV8835MotorShield</span> <span style="color: #f8f8f2;">motors;</span>
<span style="color: #f8f8f2;">PololuWheelEncoders</span> <span style="color: #f8f8f2;">encoder;</span>
<span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">mcount</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">;</span>
<span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">mcount_limit</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">byte</span> <span style="color: #f8f8f2;">byteReadH;</span>
<span style="color: #f8f8f2;">byte</span> <span style="color: #f8f8f2;">byteReadL;</span>
<span style="color: #66d9ef;">void</span> <span style="color: #a6e22e;">setup</span><span style="color: #f8f8f2;">()</span> <span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">encoder.init(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">,</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span><span style="color: #ae81ff;">5</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">pinMode(</span><span style="color: #ae81ff;">2</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">INPUT);</span>
<span style="color: #f8f8f2;">pinMode(</span><span style="color: #ae81ff;">3</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">INPUT);</span>
<span style="color: #f8f8f2;">pinMode(</span><span style="color: #ae81ff;">4</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">INPUT);</span>
<span style="color: #f8f8f2;">pinMode(</span><span style="color: #ae81ff;">5</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">INPUT);</span>
<span style="color: #f8f8f2;">Serial.begin(</span><span style="color: #ae81ff;">9600</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">delay(</span><span style="color: #ae81ff;">500</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #a6e22e;">loop</span><span style="color: #f8f8f2;">()</span> <span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">if</span> <span style="color: #f8f8f2;">(Serial.available()</span> <span style="color: #f92672;">>=</span> <span style="color: #ae81ff;">5</span><span style="color: #f8f8f2;">)</span> <span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">byteReadH</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Serial.read();</span>
<span style="color: #f8f8f2;">Serial.write(byteReadH);</span>
<span style="color: #66d9ef;">if</span> <span style="color: #f8f8f2;">(byteReadH</span> <span style="color: #f92672;">==</span> <span style="color: #e6db74;">'$'</span> <span style="color: #f8f8f2;">)</span> <span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">byteReadH</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Serial.read();</span>
<span style="color: #f8f8f2;">byteReadL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Serial.read();</span>
<span style="color: #75715e;">//byteReadH = 0x00;</span>
<span style="color: #75715e;">//byteReadL = 0x32;</span>
<span style="color: #f8f8f2;">Serial.write(byteReadH);</span>
<span style="color: #f8f8f2;">Serial.print(</span><span style="color: #e6db74;">", "</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">Serial.write(byteReadL);</span>
<span style="color: #f8f8f2;">Serial.print(</span><span style="color: #e6db74;">", "</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">Serial.write(byteReadH</span> <span style="color: #f92672;"><<</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">|</span> <span style="color: #f8f8f2;">byteReadL);</span>
<span style="color: #f8f8f2;">Serial.println();</span>
<span style="color: #f8f8f2;">motors.setM1Speed(byteReadH</span> <span style="color: #f92672;"><<</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">|</span> <span style="color: #f8f8f2;">byteReadL);</span>
<span style="color: #f8f8f2;">byteReadH</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Serial.read();</span>
<span style="color: #f8f8f2;">byteReadL</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Serial.read();</span>
<span style="color: #f8f8f2;">mcount_limit</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">byteReadH</span> <span style="color: #f92672;"><<</span> <span style="color: #ae81ff;">8</span> <span style="color: #f92672;">|</span> <span style="color: #f8f8f2;">byteReadL;</span>
<span style="color: #f8f8f2;">Serial.flush();</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">else</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">Serial.flush();</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">mcount</span> <span style="color: #f92672;">=</span><span style="color: #f8f8f2;">encoder.getCountsM1();</span>
<span style="color: #66d9ef;">if</span> <span style="color: #f8f8f2;">(mcount</span> <span style="color: #f92672;">>=</span> <span style="color: #f8f8f2;">mcount_limit)</span> <span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">motors.setM1Speed(</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">encoder.getCountsAndResetM1();</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">}</span> </pre>
</div>
<br />
<br />
Y para la parte de gamba, me basé en el proyecto de ejemplo del puerto serie.<br />
<br />
Los archivos con el código usado son:<br />
<a href="http://www.dropbox.com/s/im5e32q5bol3tz3/SerialPort-0.1.tar.gz" target="_blank">SerialPort-0.1.tar.gz</a><br />
<a href="http://www.dropbox.com/s/ipyko19pdqvsa43/stop_encoder_serial.ino?dl=0" target="_blank">stop_encoder_serial.ino</a><br />
<br />
Y a continuación un vídeo mostrando el uso del encoder de Pololu:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwzVbp5vUaXhs9RN7w1T7PTmL47bJDmG6yDre5nSXPlloFNTtap2ovJfUurVwO5pjqsakwynWa6SK8tZXnB3A' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-87233358137529508322013-12-25T14:28:00.003-06:002013-12-26T17:26:51.348-06:00Aplicación: VPNBook-gb Cambia tu IP por una de US, UK o Europa<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0aPadGNid1qotiFFLKGT-dtRkb6rXcgXW1h5_Ee8WXwOVszcTBg5OrLuT3t85x49bIYyzdJfUxgL133cqxdNMaZW0vJ-VTqlNzmQ1U9_IvyKptuxI8Liy_nIZtBTLpjeAvC_E13ea5r0/s1600/vpnbook-gb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0aPadGNid1qotiFFLKGT-dtRkb6rXcgXW1h5_Ee8WXwOVszcTBg5OrLuT3t85x49bIYyzdJfUxgL133cqxdNMaZW0vJ-VTqlNzmQ1U9_IvyKptuxI8Liy_nIZtBTLpjeAvC_E13ea5r0/s320/vpnbook-gb.png" width="320" /></a></div>
<br />
Pss bien, un poco de historia de por qué esta aplicación. Hay un portal que se llama <a href="http://hulu.com/">hulu.com</a> el cual es como TV por internet, pero dicho servicio sólo está disponible en los USA, así que dije pss vamos a cambiar la IP.<br />
<a name='more'></a><br />
<br />
<br />
Buscando por internet me encontré que hay un VPN gratuito <a href="http://www.vpnbook.com/freevpn">vpnbook.com/freevpn</a>, como es tedioso entrar a la página pa' ver el user y el pass, y luego abrir la terminal, pss por eso ésta aplicación.<br />
<br />
Con VPNBook-gb podemos cambiar nuestra IP por una de US, UK o Europa (Rumania). La aplicación está escrita en gambas3, y usa openvpn.<br />
<br />
Tiene un pequeño trayicon (para habilitar el systray en Ubuntu ver <a href="http://robersoft.blogcindario.com/2011/10/00032-habilitar-area-de-notificacion-systray-para-aplicaciones-en-ubuntu-11-10.html" target="_blank">este hilo</a> ) con un popmenu con diferentes opciones y servers. Primero será necesario darle a Update data, y luego seleccionar el server deseado (para hulu es necesario elegir USA VPN). Si se da doble click en el trayicon la ventana se oculta (así sólo queda el trayicon).<br />
<br />
Para esta aplicación son necesarios permisos de superuser, por lo que te solicitará la contraseña primero (nota: el *.deb fue editado para que el archivo *.desktop abriera la aplicación con gksudo).<br />
<br />
Espero prueben esta aplicación y cualquier duda o sugerencia es bienvenida. Por cierto, esta app puede ser una alternativa al spotflux (para Windows).<br />
<br />
Y una recomendación, no creo que sea muy seguro usar un VPN, por eso usenlo con cuidado, sólo usenlo para entrar a hulu.com, jeje.<br />
<br />
Espero que lo disfruten!<br />
<br />
<span style="font-size: large;"><span style="color: red;">DOWNLOAD installer:</span></span> <a href="http://dl.dropboxusercontent.com/u/3701367/recursos/vpnbook-gb-current.deb">vpnbook-gb-current.deb</a><br />
<span style="font-size: large;"><span style="color: red;">DOWNLOAD source:</span></span> <a href="http://dl.dropboxusercontent.com/u/3701367/recursos/vpnbook-gb-current.tar.gz">vpnbook-gb-current.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-59636154005471043652013-06-23T22:59:00.002-05:002013-06-23T23:00:41.150-05:00Aplicación [gambas3]: blackjack<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOm48sXkOawtXaMEzE8OIAaW139NVAN574M-xbaaX1fR9WPly-BtnIRR4s8Wj1Wk2sTEwWXmZDvRo2G4C78EaizI2i1bUdwCEeRiphrTaNXgmslj0aV8-yqWri-jw6WXTy9QJDlvvtAe8/s1600/blackjack.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOm48sXkOawtXaMEzE8OIAaW139NVAN574M-xbaaX1fR9WPly-BtnIRR4s8Wj1Wk2sTEwWXmZDvRo2G4C78EaizI2i1bUdwCEeRiphrTaNXgmslj0aV8-yqWri-jw6WXTy9QJDlvvtAe8/s320/blackjack.png" width="320" /></a></div>
<br />
Tomé un curso on-line en Coursera llamado "<a href="https://www.coursera.org/course/interactivepython">An Introduction to Interactive Programming in Python</a>" el cual fue muy provechoso y divertido.<br />
<br />
<a name='more'></a>El punto del curso es aprender python realizando pequeños juegos, y aborda la programación orientada a objetos.<br />
<br />
Como yo también soy un usuario gambas, pues porté uno de los mini-proyectos del curso, blackjack, a gambas3, siguiendo los mismos paradigmas, en este caso usando clases.<br />
<br />
Aquí adjunto el code resultante en gambas3, con el puro afán de compartir, jo!<br />
<br />
Nota: Además de lo aprendido en el curso también seguí unos posts en <a href="http://blog.gambas-es.org/evento-draw/" target="_blank">blog.gambas-es.org</a><br />
<br />
Que divertido es el SoftwareLibre, jejeje
<br />
<br />
<span style="font-size: large;"><span style="color: red;">Download</span></span>: <a href="http://dl.dropboxusercontent.com/u/3701367/recursos/blackjack-0.0.1.tar.gz">blackjack-0.0.1.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-85073002563326395392013-03-31T15:56:00.001-06:002013-03-31T15:59:08.829-06:00tempardui: gambas3 + arduino para mostrar temperaturas<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV4Ado_zOTFs2AwU3XKRGGSEi7D_jsVGpvQ-z3fuXG8l1a0gqR2h7uVojSmo7ycU4clAvEA-nYLIkX8-b_VC3XOpk8MOzowpFe4z2esepXgJgPcZvP3DH-9pjrgkl_jFsugwqc6YoXkLA/s1600/tempardui.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV4Ado_zOTFs2AwU3XKRGGSEi7D_jsVGpvQ-z3fuXG8l1a0gqR2h7uVojSmo7ycU4clAvEA-nYLIkX8-b_VC3XOpk8MOzowpFe4z2esepXgJgPcZvP3DH-9pjrgkl_jFsugwqc6YoXkLA/s200/tempardui.png" width="50" /></a></div>
He realizado una pequeña aplicación en gambas3 que se conecta a un arduino para desplegar temperaturas.
<br />
<a name='more'></a><br />
<br />
Esta aplicación fue pensada para un horno de curado con termopares tipo K puestos en zonas especificas para desplegar dichas temperaturas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfpvAIerM8thYdBA0ItMtXzWdENVtqRUJs1L5XLzl64M8SYam3yfDPpZucf4388BoGG4pFlwbWGfFSm8mbxAfI0UWWLiPzuVFBcyQfovntT7pHD_ngvVhn9-QuPVv1l1VfSvEMmQmG79Y/s1600/tempardui.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfpvAIerM8thYdBA0ItMtXzWdENVtqRUJs1L5XLzl64M8SYam3yfDPpZucf4388BoGG4pFlwbWGfFSm8mbxAfI0UWWLiPzuVFBcyQfovntT7pHD_ngvVhn9-QuPVv1l1VfSvEMmQmG79Y/s320/tempardui.png" width="320" /></a></div>
<br />
<br />
Del lado del hardware tenemos un arduino (que puede ser un arduino serial, arduino Duemilanove, arduino UNO, etc) y una shield de Ocean Controls (<span id="goog_2002415995"></span><span id="goog_2002415996"></span> <a href="http://oceancontrols.com.au/KTA-259.html">http://oceancontrols.com.au/KTA-259.html</a> ). Si no se quiere comprar la shield en el mismo link están los diagramas (que prácticamente son un MAX6675 y un ADG608). Esta shield es para termopares tipo K, y para temperaturas de 0 a 1024°C.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZ_Ysf_USN8OtdRItlEweVYG5Vt1CwXyPJw0SOYv_cy1Xy9AApVoNoRpSBtgoTWJd0_hmG5wWvRYnPT_MqPCAuOLnxnq0CnYMyYDtBoc44ENsyLPOErpLhEK_lgRA14ZZ-F3zJyv66lg/s1600/arduino_temperatures.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZ_Ysf_USN8OtdRItlEweVYG5Vt1CwXyPJw0SOYv_cy1Xy9AApVoNoRpSBtgoTWJd0_hmG5wWvRYnPT_MqPCAuOLnxnq0CnYMyYDtBoc44ENsyLPOErpLhEK_lgRA14ZZ-F3zJyv66lg/s320/arduino_temperatures.jpg" width="320" /></a></div>
<br />
<br />
El firmware que usé en el arduino es el mismo que da como ejemplo Ocean Controls <a href="http://www.oceancontrols.com.au/datasheet/ocean/TCMux.zip">Sample Arduino Sketch Bit Bang SPI</a> Pero hay que tener cuidado con el PINCS que depende de que puente LK esté soldado en la shield (eso se define en la línea #define PINCS 8 //TCAmp Chip Select Change this to match the position of the Chip Select Link). Y algo muy importante, la línea 188 la cambie de Serial.println(176,BYTE); a <span style="color: red;">Serial.write("C\n");</span>. Ah! y también la velocidad del puerto serie la cambié de 9600baud a 19200baud (eso en la línea 34).<br />
<br />
Una vez que cargamos el firmware al arduino, desde el mismo Arduino IDE entramos al Serial Monitor; configuramos el line ending con Carriage return y la velocidad a 19200baud. Y enviamos las cadenas @NS4 y @SV (esto para definir que serán cuatro termopares).<br />
<br />
Incluyo las fuentes del programa en gambas3. El puerto serie debe ser el del arduino (en las fuentes tengo el /dev/ttyUSB0).<br />
<br />
Aquí un pequeño vídeo demostrativo:<br />
<br />
<div style="text-align: center;">
<br /><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/13_hK42LEPM" width="420"></iframe>
</div>
<br />
<br />
<span style="font-size: large;"><span style="color: red;">Download</span></span>: <a href="http://dl.dropbox.com/u/3701367/recursos/tempardui-0.0.1.tar.gz">tempardui-0.0.1.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com3tag:blogger.com,1999:blog-2087007895254567710.post-13468010299248301132012-10-07T15:33:00.001-05:002012-10-07T15:33:56.325-05:00Arduino serial board<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf12bb33-zIqIP79_NqqkDYjaVSOdBn_VujoDzvGI5-2lzSTN8ph9tw6cXvp_oPz4I_iTGD7MOdv6_YWbFQ2T3mps0x7KX_f59cXr_Bx6UaOisEOU5Vq4Wkhy91-HUB48YNl0CkIZ5SL0/s1600/arduino+-+serial.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf12bb33-zIqIP79_NqqkDYjaVSOdBn_VujoDzvGI5-2lzSTN8ph9tw6cXvp_oPz4I_iTGD7MOdv6_YWbFQ2T3mps0x7KX_f59cXr_Bx6UaOisEOU5Vq4Wkhy91-HUB48YNl0CkIZ5SL0/s320/arduino+-+serial.jpg" width="240" /></a></div>
<br />
Hey! Me construí un arduino serial board (<a href="http://arduino.cc/en/Main/ArduinoBoardSerialSingleSided3">ArduinoBoardSerialSingleSided3</a>). Es una buena experiencia para practicar con el soldador, je.<br />
<br />
Y aquí pongo una foto con los tres arduinos en mi poder, jejeje!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ7dGuj_cUeiueYp4t_Xk2n9wPmQJXA4bQpL-8J34WOzv3n23H2f7hyWoDWH1y5F1ayx6LhvY-Xrl4u-nZhyQO9IZdxwZC5S8z06HxAKjr4iJaOPjiP66N7JJAVOIt4itZ9zdImhlkiBI/s1600/07102012439.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ7dGuj_cUeiueYp4t_Xk2n9wPmQJXA4bQpL-8J34WOzv3n23H2f7hyWoDWH1y5F1ayx6LhvY-Xrl4u-nZhyQO9IZdxwZC5S8z06HxAKjr4iJaOPjiP66N7JJAVOIt4itZ9zdImhlkiBI/s320/07102012439.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
Saludos!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com1tag:blogger.com,1999:blog-2087007895254567710.post-46347033181146661602012-05-07T01:23:00.001-05:002012-05-16T22:30:59.900-05:00acsaao en Ubuntu 12.04<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbrXBltJt2i1ipnUM42ZCtMazufrBbVrs1iwVG5a76h3a7SqWpIc8LVWKj8WtTiybsXwScpThRlQXAaxBZCF34e0FIdvpJBvhPxkUOu1wBjolVfLplEa6Po9NJxc9t9LgcUT6S71RaMu8/s1600/acsaao.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbrXBltJt2i1ipnUM42ZCtMazufrBbVrs1iwVG5a76h3a7SqWpIc8LVWKj8WtTiybsXwScpThRlQXAaxBZCF34e0FIdvpJBvhPxkUOu1wBjolVfLplEa6Po9NJxc9t9LgcUT6S71RaMu8/s320/acsaao.png" width="320" /></a></div>
<br />
Acabo de instalar Ubuntu 12.04 en mi computador y me doy cuenta que no servía el <a href="http://libertadhack.blogspot.mx/2010/08/acsaao-aircrack-ng-script-acer-aspire.html">acsaao</a> (<b>a</b>ir<b>c</b>rack-ng <b>s</b>cript <b>A</b>cer <b>A</b>spire <b>O</b>ne). Era una bobada con xterm y una opción que le faltaba a airodump. Así que he actualizado el script, y lo cuelgo para el que le pueda servir, pero que no ande de ratero ehhhhhhhh.
<br />
<a name='more'></a><br />
También mencionar que en los repos de Ubuntu 12.04 ya no está aircrack-ng, pero para instalarlo pueden ver: <a href="http://libertadhack.blogspot.mx/2012/05/instalar-aircrack-ng-en-ubuntu-1204.html">Instalar aircrack-ng en Ubuntu 12.04</a> o pueden instalar el paquete que también cuelgo.<br />
<br />
Nota: Para usar la opción de stkeys es necesario instalar el paquete libssl0.9.8<br />
<br />
$ sudo apt-get install libssl0.9.8 <br />
<br />
<b style="color: red;">Download</b>: <a href="http://dl.dropbox.com/u/3701367/recursos/acsaao-0.0.3-1.tar.gz">acsaao-0.0.3-1.tar.gz</a><br />
<br />
<b><span style="color: red;">Download</span></b>: <a href="http://dl.dropbox.com/u/3701367/recursos/aircrack_1.1-2154_i386.deb">aircrack_1.1-2154_i386.deb</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com6tag:blogger.com,1999:blog-2087007895254567710.post-34458459003585555972012-05-07T00:40:00.002-05:002012-05-07T00:53:47.955-05:00Instalar aircrack-ng en Ubuntu 12.04<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.aircrack-ng.org/resources/aircrack-ng-new-logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.aircrack-ng.org/resources/aircrack-ng-new-logo.jpg" /></a></div>
<br />
aircrack-ng no viene en los repos oficiales de Ubuntu 12.04, pero es fácil instalarlo.
<br />
<a name='more'></a>Primero necesitamos algunos paquetes:
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ sudo apt-get install build-essential libssl-dev subversion checkinstall</div>
<br />
Después haciendo uso de suversion descargamos las fuentes más actuales de aircrack:
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ svn co http://trac.aircrack-ng.org/svn/trunk aircrack-ng<br />
$ cd aircrack-ng</div>
<br />
Compilamos e instalamos:
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ make<br />
$ sudo checkinstall</div>
<br />
Con checkinstall creamos un paquete *.deb con lo que es fácil administrar la instalación de aircrack-ng, pero tenemos que llenar algunos datos que no son críticos por lo que pueden usar los que pongo de ejemplo
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 300px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
This package will be built according to these values: <br />
<br />
0 - Maintainer: [ root@net ]<br />
1 - Summary: [ aircrack-ng 1.1 r2154 ]<br />
2 - Name: [ aircrack ]<br />
3 - Version: [ 1.1 ]<br />
4 - Release: [ 2154 ]<br />
5 - License: [ GPL ]<br />
6 - Group: [ checkinstall ]<br />
7 - Architecture: [ i386 ]<br />
8 - Source location: [ aircrack-ng ]<br />
9 - Alternate source location: [ ]<br />
10 - Requires: [ libssl-dev ]<br />
11 - Provides: [ aircrack ]<br />
12 - Conflicts: [ ]<br />
13 - Replaces: [ ]<br />
<br />
Enter a number to change any of them or press ENTER to continue:</div>
<br />
<br />
Si en algún momento queremos desinstalar aircrack-ng podemos hacerlo como si de cualquier paquete *.deb se tratase. También en el directorio aircrack-ng/ se encuentra dicho *.deb por si queremos compartirlo.
<br />
<br />
Por ultimo, pueden actualizar el fichero OUI de airodump-ng con:
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ sudo airodump-ng-oui-update</div>
<br />
Si han tenido problemas pueden descargar el paquete *.deb que yo creé:<br />
<b style="color: red;">DOWNLOAD</b>: <a href="http://dl.dropbox.com/u/3701367/recursos/aircrack_1.1-2154_i386.deb">aircrack_1.1-2154_i386.deb</a><br />
<br />
<br />
Referencias: <a href="http://scottlinux.com/2012/01/13/install-aircrack-ng-on-debian-linux/">scottlinux - Install aircrack-ng on Debian Linux</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com8tag:blogger.com,1999:blog-2087007895254567710.post-26119435164312415222012-04-07T17:49:00.001-05:002012-10-14T20:26:28.248-05:00Programar AVR con pickit2<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOkP2Tk15AmOGGHQv0jC3opX-dYoToIkNT4QvCIHNBQsAzAmg_RYgSUvT2WggJiHPws-LnOcW9QLC3v7LzC7k2HDNTthIc9Z2pVU3IpJV1CCIz8ZNMg8-CztddHIGw-q9Pa0PoHb_sWdU/s1600/avr_pickit2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOkP2Tk15AmOGGHQv0jC3opX-dYoToIkNT4QvCIHNBQsAzAmg_RYgSUvT2WggJiHPws-LnOcW9QLC3v7LzC7k2HDNTthIc9Z2pVU3IpJV1CCIz8ZNMg8-CztddHIGw-q9Pa0PoHb_sWdU/s320/avr_pickit2.png" width="320" /></a></div>
<br />
<br />
Para todos los que quieren comenzar a desarrollar en uC Atmel y tienen un pickit2, este hilo les será de gran interés.<br />
<a name='more'></a><br />
avrdude es un programa de línea de comandos, muy conocido, para programar controladores Atmel AVR. Éste tiene soportado una gran cantidad de programadores (Hardware), y dougy83 y prowan69 escribieron un parche para que pueda soportar el pickit2 <br />
<br />
<br />
----------------------------------------------------<br />
Actualización Octubre 2012<br />
<br />
El parche ya fue integrado desde la revisión 1102, así que pueden aplicar las sig instrucciones:<br />
<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ svn checkout svn://svn.savannah.nongnu.org/avrdude/trunk<br />
$ cd trunk/avrdude/<br />
$ ./bootstrap<br />
$ ./configure<br />
$ make<br />
$ sudo make install</div>
<br />
Si tienen algún problema o quieren ahorrarse todo el procedimiento, pueden descargar un paquete *.deb que creé con la revisión 1104, que incluye soporte para el pickit2:<br />
<br />
<b><span style="color: red;">DOWNLOAD</span></b>: <a href="http://dl.dropbox.com/u/3701367/recursos/avrdude_5.11.1-1104_i386.deb">avrdude_5.11.1-1104_i386.deb</a><br />
<br />
---------------------------------------------------<br />
<br />
<br />
El parche lo pueden encontrar en: <a href="http://savannah.nongnu.org/patch/?7184">http://savannah.nongnu.org/patch/?7184</a><br />
<br />
Básicamente para poder usar el pickit2 con AVR hay que compilar avrdude de la siguiente forma:<br />
<br />
1. Descargamos el parche. A la fecha el link de descarga del parche más actual es el que se muestra, es buena idea visitar la web del parche para ver si hay alguna actualización.<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ wget http://savannah.nongnu.org/file/avrdude_pickit2_support-svn-1068.patch?file_id=25391 -O avrdude_pickit2.patch</div>
<br />
2. Descargamos las fuentes de avrdude. Como el autor dice que el parche fue usado en la revisión 1068 de avrdude trunk descargamos esa. Puede probar otra revisión si lo desea.<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ svn checkout svn://svn.savannah.nongnu.org/avrdude/trunk -r 1068</div>
<br />
3. Aplicamos el parche a las fuentes.<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ cd trunk/avrdude/<br />
$ patch < ../../avrdude_pickit2.patch </div>
<br />
<br />
4. Compilamos e instalamos.<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 100px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ ./bootstrap<br />
$ ./configure<br />
$ make<br />
$ sudo make install</div>
<br />
Y así si por ejemplo queremos programar un ATtiny2313 con un programa llamado BlinkyLED.hex sería:<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 50px; overflow: auto; padding: 4px; text-align: left; width: 530px;">
$ avrdude -p t2313 -c pickit2 -e -U flash:w:BlinkyLED.hex</div>
<br />
La asignación de pines SPI del AVR con el pickit2 es el sig:<br />
<br />
<table border="1" style="background-color: #e8e8e8; color: black; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><tbody style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">ISP Pinout</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">AVR pin</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">Pickit2 pin</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">RST</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">VPP/MCLR (1)</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">VDD</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">VDD Target (2)</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">GND</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">GND (3)</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">MISO</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">PGD (4)</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">SCLK</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">SCLK - PDC (5)</td></tr>
<tr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">MOSI</td><td align="left" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">AUX (6)</td></tr>
</tbody></table>
<br />
<br />
<br />
Saludos!<br />
<br />
<br />
Esto fue probado por mi con el siguiente equipo:<br />
<br />
SO: GNU/Linux<br />
Distribución: Ubuntu 10.04<br />
Pickit2 firmware version: 2.32.00<br />
avrdude trunk revisión 1068 (avrdude version 5.11svn)<br />
Parche: file #25391 avrdude_pickit2_support-svn-1068.patchaztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com2tag:blogger.com,1999:blog-2087007895254567710.post-30471097208582369772012-03-11T15:23:00.000-06:002012-03-11T15:23:03.085-06:00Control servo por USB Pinguino + PyGTK<iframe allowfullscreen="" frameborder="0" height="344" src="http://www.youtube.com/embed/6F1cHNRFuyw?fs=1" width="459"></iframe><br />
<br />
He continuado haciendo pequeños ejemplos con pinguino (<a href="http://pinguino.cc/">http://pinguino.cc/</a>) y pyGTK.<br />
En esta ocasión controlo la posición de un servo a través de un programita en python que se conecta por USB a pinguino.<br />
<a name='more'></a>Del lado de pinguino tenemos:<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><br />
<pre><span class="comment" style="color: #999999; font-style: italic;">// File: ServoPC.pde
//
// February 2012
// aztk <aztecaymaya@gmail.com>
//
// Servo control from PC
</aztecaymaya@gmail.com></span><span class="type" style="color: #ff6633;">
void</span> setup<span class="operator" style="color: #663300; font-weight: bold;">()
{</span>
servo<span class="operator" style="color: #663300; font-weight: bold;">.</span>attach<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">);</span>
servo<span class="operator" style="color: #663300; font-weight: bold;">.</span>setMinimumPulse<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">);
}</span><span class="type" style="color: #ff6633;">
void</span> loop<span class="operator" style="color: #663300; font-weight: bold;">()
{</span><span class="flow" style="color: red;">
if</span><span class="operator" style="color: #663300; font-weight: bold;"> (</span>USB<span class="operator" style="color: #663300; font-weight: bold;">.</span>available<span class="operator" style="color: #663300; font-weight: bold;">())
{</span>
u8 value_s<span class="operator" style="color: #663300; font-weight: bold;">[</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">];</span>
value_s<span class="operator" style="color: #663300; font-weight: bold;">[</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">] =</span> USB<span class="operator" style="color: #663300; font-weight: bold;">.</span>read<span class="operator" style="color: #663300; font-weight: bold;">();</span>
servo<span class="operator" style="color: #663300; font-weight: bold;">.</span>write<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span> value_s<span class="operator" style="color: #663300; font-weight: bold;">[</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">]);
}
}</span></pre><br />
</div><br />
Nota: la biblioteca servo de pinguino está diseñada para servos que tienen su espectro de 1000us a 2000us, si como yo usan otro tipo de servo tienen que modificarla, ésta se encuentra en pinguino_beta9-05_linux/tools/share/sdcc/include/pic16/servos.c<br />
Por ejemplo, yo usé servos que van de 600us a 2400us (<a href="http://servocity.com/html/hs-322hd_standard_deluxe.html">HS-322HD</a>) por lo que en las partes que corresponde dejé los sig valores:<br />
Referencias: <a href="http://linuxdroids.wordpress.com/2010/07/29/pinguino-rutina-para-controlar-18-servos/">rutina para controlar 18 servos (creador de la biblioteca)</a><br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><br />
<pre><span class="keyword" style="color: #990000;">static</span><span class="type" style="color: #ff6633;"> void</span> ServosPulseDown<span class="operator" style="color: #663300; font-weight: bold;">()
{</span>
timingindex<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="flow" style="color: red;">
for</span><span class="operator" style="color: #663300; font-weight: bold;">(</span>timedivision<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">;</span>timedivision<span class="operator" style="color: #663300; font-weight: bold;"> <</span><span class="int" style="color: #999900;"> 251</span><span class="operator" style="color: #663300; font-weight: bold;">;</span>timedivision<span class="operator" style="color: #663300; font-weight: bold;">++){</span><span class="flow" style="color: red;">
if</span><span class="operator" style="color: #663300; font-weight: bold;"> (</span>timings<span class="operator" style="color: #663300; font-weight: bold;">[</span>timevalue<span class="operator" style="color: #663300; font-weight: bold;">][</span>timingindex<span class="operator" style="color: #663300; font-weight: bold;">] ==</span> timedivision<span class="operator" style="color: #663300; font-weight: bold;">){</span>
PORTB<span class="operator" style="color: #663300; font-weight: bold;"> =</span> PORTB<span class="operator" style="color: #663300; font-weight: bold;"> ^</span> timings<span class="operator" style="color: #663300; font-weight: bold;">[</span>MaskPort_B<span class="operator" style="color: #663300; font-weight: bold;">][</span>timingindex<span class="operator" style="color: #663300; font-weight: bold;">];</span>
PORTC<span class="operator" style="color: #663300; font-weight: bold;"> =</span> PORTC<span class="operator" style="color: #663300; font-weight: bold;"> ^</span> timings<span class="operator" style="color: #663300; font-weight: bold;">[</span>MaskPort_C<span class="operator" style="color: #663300; font-weight: bold;">][</span>timingindex<span class="operator" style="color: #663300; font-weight: bold;">];</span>
PORTA<span class="operator" style="color: #663300; font-weight: bold;"> =</span> PORTA<span class="operator" style="color: #663300; font-weight: bold;"> ^</span> timings<span class="operator" style="color: #663300; font-weight: bold;">[</span>MaskPort_A<span class="operator" style="color: #663300; font-weight: bold;">][</span>timingindex<span class="operator" style="color: #663300; font-weight: bold;">];</span>
timingindex<span class="operator" style="color: #663300; font-weight: bold;">++;
}</span><span class="comment" style="color: #999999; font-style: italic;">
// the following routine adds the requiered delay for every tick of timedivision, so every timedivision last 4 usec.
// ******** CAMBIADO 6 -> 0x12 ********************** 0x0d
</span> __asm
movlw<span class="int" style="color: #999900;"> 0x0e</span>
movwf _loopvar
bucle<span class="operator" style="color: #663300; font-weight: bold;">:</span>
NOP
decfsz _loopvar<span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;">1</span><span class="flow" style="color: red;">
goto</span> bucle
__endasm<span class="operator" style="color: #663300; font-weight: bold;">;
}
}</span></pre><br />
</div><br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><br />
<pre><span class="comment" style="color: #999999; font-style: italic;">//interrupt handler that handles servos
</span><span class="type" style="color: #ff6633;">void</span> servos_interrupt<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="type" style="color: #ff6633;">void</span><span class="operator" style="color: #663300; font-weight: bold;">)
{</span><span class="flow" style="color: red;">
if</span><span class="operator" style="color: #663300; font-weight: bold;"> (</span>PIR1bits<span class="operator" style="color: #663300; font-weight: bold;">.</span>TMR1IF<span class="operator" style="color: #663300; font-weight: bold;">) {</span>
PIR1bits<span class="operator" style="color: #663300; font-weight: bold;">.</span>TMR1IF<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">;</span>
T1CON<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;">0x00</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="flow" style="color: red;">
if</span><span class="operator" style="color: #663300; font-weight: bold;"> (</span>phase<span class="operator" style="color: #663300; font-weight: bold;">) {</span><span class="comment" style="color: #999999; font-style: italic;">
//case before 1st ms:
</span> ServosPulseUp<span class="operator" style="color: #663300; font-weight: bold;">();</span><span class="comment" style="color: #999999; font-style: italic;">
// Load at TMR1 54159d(also 0xFFFF - 12000d (- 54usec for adjustments)).
// ************* CAMBIADO *************
</span> TMR1H<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;"> 0xe6</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="comment" style="color: #999999; font-style: italic;"> //0xd3;
</span> TMR1L<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;"> 0x00</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="comment" style="color: #999999; font-style: italic;"> //0x8f;
// timer 1 prescaler 1 source is internal oscillator Fosc/4 (CPU clock or Fosc=48Mhz).
</span> T1CON<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">;</span>
phase<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">;
}</span><span class="flow" style="color: red;">
else</span><span class="operator" style="color: #663300; font-weight: bold;"> {</span><span class="comment" style="color: #999999; font-style: italic;">
//case before 2nd ms:
//The following call takes 1 ms aprox.:
</span> ServosPulseDown<span class="operator" style="color: #663300; font-weight: bold;">();</span><span class="comment" style="color: #999999; font-style: italic;">
// Now it takes place a 18 ms delay, after that a interrupt will be generated.
// Loading at TMR1 11535d (que es: 0xFFFF - (4,5 x 12000(duracion 1ms)) = 0x2D0F => a 4,5 ms)
// This 4,5 x 4 (with preescaler x 4) we get 18 ms delay.
</span> TMR1H<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;"> 0x2d</span><span class="operator" style="color: #663300; font-weight: bold;">;</span>
TMR1L<span class="operator" style="color: #663300; font-weight: bold;">=</span><span class="int" style="color: #999900;"> 0x0f</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="comment" style="color: #999999; font-style: italic;">
// timer 1 prescaler 1 source is internal oscillator Fosc/4 (recordemos que Fosc=48Mhz).
</span><span class="flow" style="color: red;"> if</span><span class="operator" style="color: #663300; font-weight: bold;"> (</span>needreordering<span class="operator" style="color: #663300; font-weight: bold;">)</span>
SortServoTimings<span class="operator" style="color: #663300; font-weight: bold;">();</span><span class="comment" style="color: #999999; font-style: italic;"> // This takes more than 1 ms, but it's call only if needed.
</span> T1CON<span class="operator" style="color: #663300; font-weight: bold;">= (</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;"> |</span><span class="int" style="color: #999900;"> 2</span><span class="operator" style="color: #663300; font-weight: bold;"> <<</span><span class="int" style="color: #999900;"> 4</span><span class="operator" style="color: #663300; font-weight: bold;"> ) ;</span><span class="comment" style="color: #999999; font-style: italic;"> // activate timer1 and prescaler = 1:4
</span> phase<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">;</span><span class="comment" style="color: #999999; font-style: italic;"> //This indicates that after next interrupt it will start the servos cycle.
</span><span class="operator" style="color: #663300; font-weight: bold;"> }
}</span><span class="flow" style="color: red;">
return</span><span class="operator" style="color: #663300; font-weight: bold;">;
}</span></pre><br />
</div><br />
Ese ajuste lo hice primeramente calculándolo, y retocándolo con pruebas en su funcionamiento.<br />
<br />
<div style="text-align: center;">Muy bien, ya que tenemos el firmware apropiado del lado de pinguino, del lado del PC va el siguiente programa python:</div><br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><br />
<pre style="text-align: -webkit-auto;"><span class="pre" style="color: #000099;">#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# control_servo.py
#
# Copyleft 2012 aztk <aztecaymaya@gmail.com>
#
# Control de un servo conectado a pinguino.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
</aztecaymaya@gmail.com></span>
import usb # requires pyusb available at https<span class="operator" style="color: #663300; font-weight: bold;">:</span><span class="comment" style="color: #999999; font-style: italic;">//sourceforge.net/projects/pyusb/files/
</span>
import pygtk
pygtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>require<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="char" style="color: #009900;">'2.0'</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
import gtk<span class="pre" style="color: #000099;">
#-------------------------------------------------------------------------------
# Pinguino Class by Marin Purgar (marin.purgar@gmail.com)
#-------------------------------------------------------------------------------
</span><span class="keyword" style="color: #990000;">class</span> Pinguino<span class="operator" style="color: #663300; font-weight: bold;">():</span>
VENDOR<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0x04D8</span>
PRODUCT<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0xFEAA</span>
CONFIGURATION<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 3</span>
INTERFACE<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0</span>
ENDPOINT_IN<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0x82</span>
ENDPOINT_OUT<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0x01</span>
device<span class="operator" style="color: #663300; font-weight: bold;"> =</span> None
handle<span class="operator" style="color: #663300; font-weight: bold;"> =</span> None
def __init__<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">,):</span><span class="flow" style="color: red;">
for</span> bus in usb<span class="operator" style="color: #663300; font-weight: bold;">.</span>busses<span class="operator" style="color: #663300; font-weight: bold;">():</span><span class="flow" style="color: red;">
for</span> dev in bus<span class="operator" style="color: #663300; font-weight: bold;">.</span>devices<span class="operator" style="color: #663300; font-weight: bold;">:</span><span class="flow" style="color: red;">
if</span> dev<span class="operator" style="color: #663300; font-weight: bold;">.</span>idVendor<span class="operator" style="color: #663300; font-weight: bold;"> ==</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>VENDOR<span class="operator" style="color: #663300; font-weight: bold;"> and</span> dev<span class="operator" style="color: #663300; font-weight: bold;">.</span>idProduct<span class="operator" style="color: #663300; font-weight: bold;"> ==</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>PRODUCT<span class="operator" style="color: #663300; font-weight: bold;">:</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>device<span class="operator" style="color: #663300; font-weight: bold;"> =</span> dev<span class="flow" style="color: red;">
return</span> None
def open<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="flow" style="color: red;">
if</span><span class="operator" style="color: #663300; font-weight: bold;"> not</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>device<span class="operator" style="color: #663300; font-weight: bold;">:</span>
print<span class="string" style="color: #009900;"> "Unable to find device!"</span><span class="flow" style="color: red;">
return</span> None<span class="flow" style="color: red;">
try</span><span class="operator" style="color: #663300; font-weight: bold;">:</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;"> =</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>device<span class="operator" style="color: #663300; font-weight: bold;">.</span>open<span class="operator" style="color: #663300; font-weight: bold;">()</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">.</span>setConfiguration<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>CONFIGURATION<span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">.</span>claimInterface<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>INTERFACE<span class="operator" style="color: #663300; font-weight: bold;">)</span>
except usb<span class="operator" style="color: #663300; font-weight: bold;">.</span>USBError<span class="operator" style="color: #663300; font-weight: bold;">,</span> err<span class="operator" style="color: #663300; font-weight: bold;">:</span>
print err
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;"> =</span> None<span class="flow" style="color: red;">
return</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle
def close<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="flow" style="color: red;">
try</span><span class="operator" style="color: #663300; font-weight: bold;">:</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">.</span>releaseInterface<span class="operator" style="color: #663300; font-weight: bold;">()</span>
except Exception<span class="operator" style="color: #663300; font-weight: bold;">,</span> err<span class="operator" style="color: #663300; font-weight: bold;">:</span>
print err
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">,</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>device<span class="operator" style="color: #663300; font-weight: bold;"> =</span> None<span class="operator" style="color: #663300; font-weight: bold;">,</span> None
def read<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">,</span> length<span class="operator" style="color: #663300; font-weight: bold;">,</span> timeout<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="flow" style="color: red;">
return</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">.</span>bulkRead<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>ENDPOINT_IN<span class="operator" style="color: #663300; font-weight: bold;">,</span> length<span class="operator" style="color: #663300; font-weight: bold;">,</span> timeout<span class="operator" style="color: #663300; font-weight: bold;">)</span>
def write<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">,</span> buffer<span class="operator" style="color: #663300; font-weight: bold;">,</span> timeout<span class="operator" style="color: #663300; font-weight: bold;"> =</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="flow" style="color: red;">
return</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>handle<span class="operator" style="color: #663300; font-weight: bold;">.</span>bulkWrite<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>ENDPOINT_OUT<span class="operator" style="color: #663300; font-weight: bold;">,</span> buffer<span class="operator" style="color: #663300; font-weight: bold;">,</span> timeout<span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
# Ventana principal
</span><span class="keyword" style="color: #990000;">class</span> Ventana<span class="operator" style="color: #663300; font-weight: bold;">:</span>
def __init__<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="pre" style="color: #000099;">
# Create a new window
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;"> =</span> gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>Window<span class="operator" style="color: #663300; font-weight: bold;">(</span>gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>WINDOW_TOPLEVEL<span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;">.</span>set_title<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="string" style="color: #009900;">"PinguinoUSBServo"</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;">.</span>resize<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">300</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 80</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;">.</span>connect<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="char" style="color: #009900;">'destroy'</span><span class="operator" style="color: #663300; font-weight: bold;">,</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>destroy<span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>vbox1<span class="operator" style="color: #663300; font-weight: bold;"> =</span> gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>VBox<span class="operator" style="color: #663300; font-weight: bold;">(</span>False<span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 10</span><span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
# Control scale
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>adjustment<span class="operator" style="color: #663300; font-weight: bold;"> =</span> gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>Adjustment<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 250</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 0</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>scale1<span class="operator" style="color: #663300; font-weight: bold;"> =</span> gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>HScale<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>adjustment<span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
#self.scale1.set_update_policy(gtk.UPDATE_DELAYED)
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>scale1<span class="operator" style="color: #663300; font-weight: bold;">.</span>set_digits<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>scale1<span class="operator" style="color: #663300; font-weight: bold;">.</span>set_draw_value<span class="operator" style="color: #663300; font-weight: bold;">(</span>False<span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>vbox1<span class="operator" style="color: #663300; font-weight: bold;">.</span>pack_start<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>scale1<span class="operator" style="color: #663300; font-weight: bold;">,</span> False<span class="operator" style="color: #663300; font-weight: bold;">,</span> False<span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 3</span><span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
# Etiqueta
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>labelv<span class="operator" style="color: #663300; font-weight: bold;"> =</span> gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>Label<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="string" style="color: #009900;">"Welcome"</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>vbox1<span class="operator" style="color: #663300; font-weight: bold;">.</span>pack_start<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>labelv<span class="operator" style="color: #663300; font-weight: bold;">,</span> False<span class="operator" style="color: #663300; font-weight: bold;">,</span> False<span class="operator" style="color: #663300; font-weight: bold;">,</span><span class="int" style="color: #999900;"> 3</span><span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
# Empaquetamos y mostramos
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;">.</span>add<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">.</span>vbox1<span class="operator" style="color: #663300; font-weight: bold;">)</span>
self<span class="operator" style="color: #663300; font-weight: bold;">.</span>window<span class="operator" style="color: #663300; font-weight: bold;">.</span>show_all<span class="operator" style="color: #663300; font-weight: bold;">()</span><span class="pre" style="color: #000099;">
# Conectamos senales y eventos
</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>adjustment<span class="operator" style="color: #663300; font-weight: bold;">.</span>connect<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="char" style="color: #009900;">'value_changed'</span><span class="operator" style="color: #663300; font-weight: bold;">,</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>enviarcmd<span class="operator" style="color: #663300; font-weight: bold;">,</span> self<span class="operator" style="color: #663300; font-weight: bold;">.</span>labelv<span class="operator" style="color: #663300; font-weight: bold;">)</span>
print<span class="string" style="color: #009900;"> "Wellcome"</span>
def enviarcmd<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">,</span> widget<span class="operator" style="color: #663300; font-weight: bold;">,</span> label<span class="operator" style="color: #663300; font-weight: bold;">):</span><span class="pre" style="color: #000099;">
# Enviamos el valor del scale al pinguino
</span> label<span class="operator" style="color: #663300; font-weight: bold;">.</span>set_text<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="string" style="color: #009900;">"angle: "</span><span class="operator" style="color: #663300; font-weight: bold;"> +</span> str<span class="operator" style="color: #663300; font-weight: bold;">(</span>round<span class="operator" style="color: #663300; font-weight: bold;">(</span>widget<span class="operator" style="color: #663300; font-weight: bold;">.</span>value<span class="operator" style="color: #663300; font-weight: bold;">) *</span><span class="float" style="color: #996600;"> 0.72</span><span class="operator" style="color: #663300; font-weight: bold;">) +</span><span class="string" style="color: #009900;"> "º"</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
pinguino<span class="operator" style="color: #663300; font-weight: bold;">.</span>write<span class="operator" style="color: #663300; font-weight: bold;">(</span>chr<span class="operator" style="color: #663300; font-weight: bold;">(</span>widget<span class="operator" style="color: #663300; font-weight: bold;">.</span>value<span class="operator" style="color: #663300; font-weight: bold;">),</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">)</span><span class="pre" style="color: #000099;">
#print "value: " + str(widget.value)
</span>
def destroy<span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">,</span> widget<span class="operator" style="color: #663300; font-weight: bold;">,</span> data<span class="operator" style="color: #663300; font-weight: bold;"> =</span> None<span class="operator" style="color: #663300; font-weight: bold;">):</span>
print<span class="string" style="color: #009900;"> "Goodbye"</span>
gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span>main_quit<span class="operator" style="color: #663300; font-weight: bold;">()</span>
def<span class="keyword" style="color: #990000;"> main</span><span class="operator" style="color: #663300; font-weight: bold;">(</span>self<span class="operator" style="color: #663300; font-weight: bold;">):</span>
gtk<span class="operator" style="color: #663300; font-weight: bold;">.</span><span class="keyword" style="color: #990000;">main</span><span class="operator" style="color: #663300; font-weight: bold;">()</span><span class="flow" style="color: red;">
if</span> __name__<span class="operator" style="color: #663300; font-weight: bold;"> ==</span><span class="char" style="color: #009900;"> '__main__'</span><span class="operator" style="color: #663300; font-weight: bold;">:</span>
ventana<span class="operator" style="color: #663300; font-weight: bold;"> =</span> Ventana<span class="operator" style="color: #663300; font-weight: bold;">()</span>
pinguino<span class="operator" style="color: #663300; font-weight: bold;"> =</span> Pinguino<span class="operator" style="color: #663300; font-weight: bold;">()</span><span class="flow" style="color: red;">
if</span> pinguino<span class="operator" style="color: #663300; font-weight: bold;">.</span>open<span class="operator" style="color: #663300; font-weight: bold;">() ==</span> None<span class="operator" style="color: #663300; font-weight: bold;">:</span>
print<span class="string" style="color: #009900;"> "Unable to open Pinguino device!"</span>
exit<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">1</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
pinguino<span class="operator" style="color: #663300; font-weight: bold;">.</span>write<span class="operator" style="color: #663300; font-weight: bold;">(</span>chr<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">),</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
ventana<span class="operator" style="color: #663300; font-weight: bold;">.</span><span class="keyword" style="color: #990000;">main</span><span class="operator" style="color: #663300; font-weight: bold;">()</span>
pinguino<span class="operator" style="color: #663300; font-weight: bold;">.</span>write<span class="operator" style="color: #663300; font-weight: bold;">(</span>chr<span class="operator" style="color: #663300; font-weight: bold;">(</span><span class="int" style="color: #999900;">0</span><span class="operator" style="color: #663300; font-weight: bold;">),</span><span class="int" style="color: #999900;"> 1</span><span class="operator" style="color: #663300; font-weight: bold;">)</span>
pinguino<span class="operator" style="color: #663300; font-weight: bold;">.</span>close<span class="operator" style="color: #663300; font-weight: bold;">()</span></pre><br />
</div><br />
Vean el vídeo mostrando el funcionamiento. Espero que la información presentada les sea de utilidad para sus proyectos.<br />
<br />
Saludos!!!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com2tag:blogger.com,1999:blog-2087007895254567710.post-73559444202984604542012-02-25T20:58:00.000-06:002012-02-25T20:58:41.067-06:00Comunicación USB Pinguino + PyGTK<div class="separator" style="clear: both; text-align: center;"><a href="http://img849.imageshack.us/img849/8346/pinguinousbx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="http://img849.imageshack.us/img849/8346/pinguinousbx.png" width="400" /></a></div><br />
Hace ya un ratote que usé PyGTK para comunicarme con un PIC por medio del puerto serie (ver <a href="http://pic-linux.foroactivo.net/t144-manejo-del-puerto-serie-con-python">manejo del puerto serie con Python</a>), y desde aquel entonces me llamó la atención hacer algo parecido pero con el USB.<br />
<a name='more'></a><br />
Pss bien, en ultimas fechas he estado hojeando un leve lo que es Pinguino (<a href="http://pinguino.cc/" rel="nofollow" target="_blank">http://pinguino.cc/</a>) y éste tiene implementado funciones para la comunicación USB desde el lado del PIC claro, y en la misma documentación de Pinguino se dan ejemplos de cómo realizar la interfaz de comunicación para la PC (con el PIC con Pinguino) por medio de python (usando pyUSB, en Debian y derivados instalar python-usb) (<a href="http://wiki.pinguino.cc/index.php/Interfacing_with_Python" rel="nofollow" target="_blank">pinguino.cc - Interfacing with Python</a>).<br />
<br />
Realicé un pequeño ejemplo para que vean que fácil es hacer la comunicación USB PIC - PC con Pinguino y Python.<br />
<br />
Del lado de Pinguino tenemos:<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><br />
<style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
.operator { color: #663300; font-weight: bold; }
</style><br />
<pre><span class="comment">// File: pyGTK_toogle
//
// February 2012
// aztk <aztecaymaya@gmail.com>
//
// Recibe información del puerto USB y dependiendo del comando
// enviado pone en alto o en bajo alguna salida.
</span><span class="type">
char</span> received_char<span class="operator">;</span><span class="type">
char</span> i<span class="operator">;</span><span class="type">
void</span> setup<span class="operator">()
{</span><span class="flow">
for</span><span class="operator"> (</span>i<span class="operator">=</span><span class="int">0</span><span class="operator"> ;</span>i<span class="operator"><</span><span class="int">8</span><span class="operator"> ;</span>i<span class="operator">++){</span>
pinMode<span class="operator">(</span>i<span class="operator">,</span>OUTPUT<span class="operator">);</span>
digitalWrite<span class="operator">(</span>i<span class="operator">,</span>LOW<span class="operator">);
}
}</span><span class="type">
void</span> loop<span class="operator">()
{</span><span class="flow">
if</span><span class="operator"> (</span>USB<span class="operator">.</span>available<span class="operator">())
{</span>
received_char<span class="operator"> =</span> USB<span class="operator">.</span>read<span class="operator">();</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'A'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">0</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'B'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">1</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'C'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">2</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'D'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">3</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'E'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">4</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'F'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">5</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'G'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">6</span><span class="operator">,</span>HIGH<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'H'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">7</span><span class="operator">,</span>HIGH<span class="operator">);</span></pre><pre><span class="operator"> </span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'a'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">0</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'b'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">1</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'c'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">2</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'd'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">3</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'e'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">4</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'f'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">5</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'g'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">6</span><span class="operator">,</span>LOW<span class="operator">);</span><span class="flow">
if</span><span class="operator"> (</span>received_char<span class="operator"> ==</span><span class="char"> 'h'</span><span class="operator">)</span> digitalWrite<span class="operator">(</span><span class="int">7</span><span class="operator">,</span>LOW<span class="operator">);
}
}</span></pre><br />
</div><br />
** Los pines 0 - 7 en Pinguino son los referentes al RB0 - RB7. Para ver disposición de pines de Pinguino revisar documentación.<br />
<br />
Del lado de la PC tenemos:<br />
<br />
<div style="background-color: #a0ffff; border: 0px solid 00000; color: black; font-family: arial; font-size: 12px; height: 900px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><style type="text/css">
.comment { color: #999999; font-style: italic; }
.pre { color: #000099; }
.string { color: #009900; }
.char { color: #009900; }
.float { color: #996600; }
.int { color: #999900; }
.bool { color: #000000; font-weight: bold; }
.type { color: #FF6633; }
.flow { color: #FF0000; }
.keyword { color: #990000; }
.operator { color: #663300; font-weight: bold; }
.operator { color: #663300; font-weight: bold; }
</style><br />
<br />
<br />
<pre><span class="pre">#! /usr/bin/python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# File: pingu_usb_toogle.py
#
# Pone en alto o en bajo bits por medio de instrucciones al puerto USB
# Envía los cómandos:
# A -> Bit0 ON
# B -> Bit1 ON
# C -> Bit2 ON
# D -> Bit3 ON
# E -> Bit4 ON
# F -> Bit5 ON
# G -> Bit6 ON
# H -> Bit7 ON
#
# a -> Bit0 OFF
# b -> Bit1 OFF
# c -> Bit2 OFF
# d -> Bit3 OFF
# e -> Bit4 OFF
# f -> Bit5 OFF
# g -> Bit6 OFF
# h -> Bit7 OFF
#
# aztk, february 2012
#
# aztecaymaya@gmail.com
#
# References:
# http://wiki.pinguino.cc/index.php/Interfacing_with_Python
#-------------------------------------------------------------------------------
</span>
import usb # requires pyusb available at https<span class="operator">:</span><span class="comment">//sourceforge.net/projects/pyusb/files/
</span>
import pygtk
pygtk<span class="operator">.</span>require<span class="operator">(</span><span class="char">'2.0'</span><span class="operator">)</span>
import gtk<span class="pre">
#-------------------------------------------------------------------------------
# Pinguino Class by Marin Purgar (marin.purgar@gmail.com)
#-------------------------------------------------------------------------------
</span><span class="keyword">class</span> Pinguino<span class="operator">():</span>
VENDOR<span class="operator"> =</span><span class="int"> 0x04D8</span>
PRODUCT<span class="operator"> =</span><span class="int"> 0xFEAA</span>
CONFIGURATION<span class="operator"> =</span><span class="int"> 3</span>
INTERFACE<span class="operator"> =</span><span class="int"> 0</span>
ENDPOINT_IN<span class="operator"> =</span><span class="int"> 0x82</span>
ENDPOINT_OUT<span class="operator"> =</span><span class="int"> 0x01</span>
device<span class="operator"> =</span> None
handle<span class="operator"> =</span> None
def __init__<span class="operator">(</span>self<span class="operator">,):</span><span class="flow">
for</span> bus in usb<span class="operator">.</span>busses<span class="operator">():</span><span class="flow">
for</span> dev in bus<span class="operator">.</span>devices<span class="operator">:</span><span class="flow">
if</span> dev<span class="operator">.</span>idVendor<span class="operator"> ==</span> self<span class="operator">.</span>VENDOR<span class="operator"> and</span> dev<span class="operator">.</span>idProduct<span class="operator"> ==</span> self<span class="operator">.</span>PRODUCT<span class="operator">:</span>
self<span class="operator">.</span>device<span class="operator"> =</span> dev<span class="flow">
return</span> None
def open<span class="operator">(</span>self<span class="operator">):</span><span class="flow">
if</span><span class="operator"> not</span> self<span class="operator">.</span>device<span class="operator">:</span>
print<span class="string"> "Unable to find device!"</span><span class="flow">
return</span> None<span class="flow">
try</span><span class="operator">:</span>
self<span class="operator">.</span>handle<span class="operator"> =</span> self<span class="operator">.</span>device<span class="operator">.</span>open<span class="operator">()</span>
self<span class="operator">.</span>handle<span class="operator">.</span>setConfiguration<span class="operator">(</span>self<span class="operator">.</span>CONFIGURATION<span class="operator">)</span>
self<span class="operator">.</span>handle<span class="operator">.</span>claimInterface<span class="operator">(</span>self<span class="operator">.</span>INTERFACE<span class="operator">)</span>
except usb<span class="operator">.</span>USBError<span class="operator">,</span> err<span class="operator">:</span>
print<span class="operator"> >></span> sys<span class="operator">.</span>stderr<span class="operator">,</span> err
self<span class="operator">.</span>handle<span class="operator"> =</span> None<span class="flow">
return</span> self<span class="operator">.</span>handle
def close<span class="operator">(</span>self<span class="operator">):</span><span class="flow">
try</span><span class="operator">:</span>
self<span class="operator">.</span>handle<span class="operator">.</span>releaseInterface<span class="operator">()</span>
except Exception<span class="operator">,</span> err<span class="operator">:</span>
print<span class="operator"> >></span> sys<span class="operator">.</span>stderr<span class="operator">,</span> err
self<span class="operator">.</span>handle<span class="operator">,</span> self<span class="operator">.</span>device<span class="operator"> =</span> None<span class="operator">,</span> None
def read<span class="operator">(</span>self<span class="operator">,</span> length<span class="operator">,</span> timeout<span class="operator"> =</span><span class="int"> 0</span><span class="operator">):</span><span class="flow">
return</span> self<span class="operator">.</span>handle<span class="operator">.</span>bulkRead<span class="operator">(</span>self<span class="operator">.</span>ENDPOINT_IN<span class="operator">,</span> length<span class="operator">,</span> timeout<span class="operator">)</span>
def write<span class="operator">(</span>self<span class="operator">,</span> buffer<span class="operator">,</span> timeout<span class="operator"> =</span><span class="int"> 0</span><span class="operator">):</span><span class="flow">
return</span> self<span class="operator">.</span>handle<span class="operator">.</span>bulkWrite<span class="operator">(</span>self<span class="operator">.</span>ENDPOINT_OUT<span class="operator">,</span> buffer<span class="operator">,</span> timeout<span class="operator">)</span><span class="keyword">
class</span> Ventana<span class="operator">:</span><span class="pre">
# This callback write a data in USB port
</span> def writex<span class="operator">(</span>self<span class="operator">,</span> widget<span class="operator">,</span> data<span class="operator">):</span>
INTERVAL<span class="operator"> =</span><span class="int"> 100</span><span class="pre">
# When a button is hold on
</span><span class="flow"> if</span><span class="operator"> (</span>widget<span class="operator">.</span>get_active<span class="operator">()):</span>
print<span class="string"> "Bit%s ON"</span><span class="operator"> %(</span>data<span class="operator"> -</span> ord<span class="operator">(</span><span class="char">'A'</span><span class="operator">))</span>
pinguino<span class="operator">.</span>write<span class="operator">(</span>chr<span class="operator">(</span>data<span class="operator">),</span> INTERVAL<span class="operator">)</span><span class="pre">
# When a button is hold off
</span><span class="flow"> else</span><span class="operator">:</span>
data<span class="operator"> =</span> data<span class="operator"> +</span><span class="int"> 32</span>
print<span class="string"> "Bit%s OFF"</span><span class="operator"> %(</span>data<span class="operator"> -</span> ord<span class="operator">(</span><span class="char">'a'</span><span class="operator">))</span>
pinguino<span class="operator">.</span>write<span class="operator">(</span>chr<span class="operator">(</span>data<span class="operator">),</span> INTERVAL<span class="operator">)</span><span class="pre">
# This callback quits the program
</span> def delete_event<span class="operator">(</span>self<span class="operator">,</span> widget<span class="operator">,</span> event<span class="operator">):</span>
INTERVAL<span class="operator"> =</span><span class="int"> 100</span>
pinguino<span class="operator">.</span>write<span class="operator">(</span><span class="char">'abcdefgh'</span><span class="operator">,</span> INTERVAL<span class="operator">)</span>
pinguino<span class="operator">.</span>close<span class="operator">()</span>
print<span class="string"> "All bits OFF"</span>
print<span class="string"> "Good Wave!!! :)"</span>
gtk<span class="operator">.</span>main_quit<span class="operator">()</span>
def destroy<span class="operator">(</span>self<span class="operator">,</span> widget<span class="operator">):</span>
INTERVAL<span class="operator"> =</span><span class="int"> 100</span>
pinguino<span class="operator">.</span>write<span class="operator">(</span><span class="char">'abcdefgh'</span><span class="operator">,</span> INTERVAL<span class="operator">)</span>
pinguino<span class="operator">.</span>close<span class="operator">()</span>
print<span class="string"> "All bits OFF"</span>
print<span class="string"> "Good Wave!!! :)"</span>
gtk<span class="operator">.</span>main_quit<span class="operator">()</span>
def<span class="keyword"> main</span><span class="operator">(</span>self<span class="operator">):</span>
gtk<span class="operator">.</span><span class="keyword">main</span><span class="operator">()</span><span class="flow">
return</span><span class="int"> 0</span>
def __init__<span class="operator">(</span>self<span class="operator">):</span><span class="pre">
# Create a new window
</span> self<span class="operator">.</span>window<span class="operator"> =</span> gtk<span class="operator">.</span>Window<span class="operator">(</span>gtk<span class="operator">.</span>WINDOW_TOPLEVEL<span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>set_title<span class="operator">(</span><span class="string">"PinguinoUSBX"</span><span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>connect<span class="operator">(</span><span class="string">"delete_event"</span><span class="operator">,</span> self<span class="operator">.</span>delete_event<span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>set_border_width<span class="operator">(</span><span class="int">20</span><span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>set_resizable<span class="operator">(</span>False<span class="operator">)</span><span class="pre">
# Create a vertical box
</span> vbox<span class="operator"> =</span> gtk<span class="operator">.</span>VBox<span class="operator">(</span>True<span class="operator">,</span><span class="int"> 2</span><span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>add<span class="operator">(</span>vbox<span class="operator">)</span><span class="flow">
for</span> i in range<span class="operator">(</span><span class="int">8</span><span class="operator">):</span>
bx<span class="operator"> =</span><span class="string"> "Bit%d"</span><span class="operator"> %</span> i
dx<span class="operator"> =</span> gtk<span class="operator">.</span>ToggleButton<span class="operator">(</span>bx<span class="operator">)</span>
dx<span class="operator">.</span>connect<span class="operator">(</span><span class="string">"toggled"</span><span class="operator">,</span> self<span class="operator">.</span>writex<span class="operator">,</span> ord<span class="operator">(</span><span class="char">'A'</span><span class="operator">) +</span> i<span class="operator">)</span>
vbox<span class="operator">.</span>pack_start<span class="operator">(</span>dx<span class="operator">,</span> True<span class="operator">,</span> True<span class="operator">,</span><span class="int"> 2</span><span class="operator">)</span><span class="pre">
# Add a separator for the quitbutton
</span> separator<span class="operator"> =</span> gtk<span class="operator">.</span>HSeparator<span class="operator">()</span>
separator<span class="operator">.</span>set_size_request<span class="operator">(</span><span class="int">90</span><span class="operator">,</span><span class="int"> 1</span><span class="operator">)</span>
vbox<span class="operator">.</span>pack_start<span class="operator">(</span>separator<span class="operator">,</span> False<span class="operator">,</span> True<span class="operator">)</span><span class="pre">
# Create the "Quit" button
</span> buttonq<span class="operator"> =</span> gtk<span class="operator">.</span>Button<span class="operator">(</span><span class="string">"Quit"</span><span class="operator">)</span>
buttonq<span class="operator">.</span>connect<span class="operator">(</span><span class="string">"clicked"</span><span class="operator">,</span> self<span class="operator">.</span>destroy<span class="operator">)</span>
vbox<span class="operator">.</span>pack_start<span class="operator">(</span>buttonq<span class="operator">,</span> True<span class="operator">,</span> True<span class="operator">,</span><span class="int"> 2</span><span class="operator">)</span>
self<span class="operator">.</span>window<span class="operator">.</span>show_all<span class="operator">()</span>
print<span class="string"> "Hey Hoo, Let's go!"</span><span class="flow">
if</span> __name__<span class="operator"> ==</span><span class="char"> '__main__'</span><span class="operator">:</span>
pinguino<span class="operator"> =</span> Pinguino<span class="operator">()</span><span class="flow">
if</span> pinguino<span class="operator">.</span>open<span class="operator">() ==</span> None<span class="operator">:</span>
print<span class="string"> "Unable to open Pinguino device!"</span>
exit<span class="operator">(</span><span class="int">1</span><span class="operator">)</span>
ventana<span class="operator"> =</span> Ventana<span class="operator">()</span>
ventana<span class="operator">.</span><span class="keyword">main</span><span class="operator">()</span>
</pre><br />
<br />
</div><br />
** No se olviden de tener instalado pyUSB y pyGTK<br />
<br />
Saludos!!!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com3tag:blogger.com,1999:blog-2087007895254567710.post-59251162541330226982011-10-30T16:42:00.000-06:002011-10-30T16:42:58.418-06:00Actualización downloadergoearHace unos días se cambió la apariencia de goear.com por lo que el programa <a href="http://libertadhack.blogspot.com/2010/08/aplicacion-downloader-goear.html">downloadergoear</a> que hice había dejado de funcionar.<br />
<br />
Pero ya he hecho los cambios pertinente para que de nuevo funcione, y podamos descargar música :D<br />
<a name='more'></a><br />
Saludos!<br />
<br />
DOWNLOAD:<br />
<br />
Descargar código fuente: <a href="http://dl.dropbox.com/u/3701367/recursos/downloadergoear-current.tar.gz">downloadergoear-current.tar.gz - SOURCES</a><br />
Descargar instalador (Debian, Ubuntu): <a href="http://dl.dropbox.com/u/3701367/recursos/downloadergoear-current.deb">downloadergoear-current.deb - DEB</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-82660589158260128982011-10-30T16:32:00.001-06:002012-10-17T21:50:09.249-05:00Aplicación: myipgb Saber tu IP pública<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLfeGwohSRM-XXKRsfuINt9zdyRgwIutJ62DcU1i558uAnr1YJOU7JcPmyPuZ5PSfH7LWdo78uMC6jA_9PGeV1vxpi-XUMo9mPP7DrAN3dyA1Xzu4u7aS8fR_HxwcWZ7lbHr4-TrKTvD8/s1600/myipgb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="93" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLfeGwohSRM-XXKRsfuINt9zdyRgwIutJ62DcU1i558uAnr1YJOU7JcPmyPuZ5PSfH7LWdo78uMC6jA_9PGeV1vxpi-XUMo9mPP7DrAN3dyA1Xzu4u7aS8fR_HxwcWZ7lbHr4-TrKTvD8/s400/myipgb.png" width="400" /></a></div>
<br />
<br />
Hace tiempo en el foro de gambas-es se abrió un hilo sobre como saber la IP pública. La solución que dieron fue la de conocerla desde una web como <a class="post-url" href="http://whatismyip.org/" target="_blank">http://whatismyip.org/</a> o como <a class="post-url" href="http://dynupdate.no-ip.com/ip.php" target="_blank">http://dynupdate.no-ip.com/ip.php</a><br />
<br />
Y yo por mi parte contribuí a hacer un pequeño script gambas (gbs2) para crear un icono en el área de notificaciones que mostrase la IP pública.<br />
<a name='more'></a><br />
Pues bien, aquí les dejo el script.<br />
<br />
<br />
Y para más info vean el hilo <a href="http://www.gambas-es.org/viewtopic.php?f=5&t=1827">http://www.gambas-es.org/viewtopic.php?f=5&t=1827</a><br />
<br />
<code><br />
<span class="code-row-text">#!<span style="color: #6132b2;">/</span>usr<span style="color: #6132b2;">/</span><a href="http://gambasdoc.org/help/lang/bin"><span style="color: #8b1433;">bin</span></a><span style="color: #6132b2;">/</span>env gbs2<br />
<br />
<span style="color: #1a5b1a; font-style: italic;">' myipgb.gbs - Saber la IP pública</span><br />
<span style="color: #1a5b1a; font-style: italic;">' $ ./myipgb.gbs [tiempo en ms] </span><br />
<br />
USE <span style="color: #7e4b05;">"gb.gui"</span><br />
USE <span style="color: #7e4b05;">"gb.form"</span><br />
USE <span style="color: #7e4b05;">"gb.net"</span><br />
USE <span style="color: #7e4b05;">"gb.net.curl"</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> F <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=form+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Form</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> TimerIP <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://gambasdoc.org/help/lang/timer"><span style="color: #8b1433;">Timer</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> TrayIP <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=trayicon+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">TrayIcon</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> mTray <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> mIP <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> mCopy <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> mQuit <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> HttpClientIP <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://www.google.com/search?hl=en&q=httpclient+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">HttpClient</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> Main<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
mTray <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><span style="color: #612188;">(</span>F, <a href="http://gambasdoc.org/help/lang/true"><span style="color: #0600ff; font-weight: bold;">TRUE</span></a><span style="color: #612188;">)</span><br />
mTray.<span style="color: blue;">Visible</span> <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/false"><span style="color: #0600ff; font-weight: bold;">FALSE</span></a><br />
<br />
mIP <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><span style="color: #612188;">(</span>mTray<span style="color: #612188;">)</span> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"mIP"</span><br />
mIP.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"IP"</span><br />
mCopy <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><span style="color: #612188;">(</span>mTray<span style="color: #612188;">)</span> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"mCopy"</span><br />
mCopy.<a href="http://www.google.com/search?hl=en&q=picture+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Picture</span></a> <span style="color: #6132b2;">=</span> <a href="http://www.google.com/search?hl=en&q=stock+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Stock</span></a><span style="color: #612188;">[</span><span style="color: #7e4b05;">"16/copy"</span><span style="color: #612188;">]</span><br />
mCopy.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"Copy IP"</span><br />
mQuit <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=menu+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Menu</span></a><span style="color: #612188;">(</span>mTray<span style="color: #612188;">)</span> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"mQuit"</span><br />
mQuit.<a href="http://www.google.com/search?hl=en&q=picture+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Picture</span></a> <span style="color: #6132b2;">=</span> <a href="http://www.google.com/search?hl=en&q=stock+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Stock</span></a><span style="color: #612188;">[</span><span style="color: #7e4b05;">"16/quit"</span><span style="color: #612188;">]</span><br />
mQuit.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"Quit"</span><br />
<br />
TrayIP <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=trayicon+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">TrayIcon</span></a> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"TrayIP"</span><br />
TrayIP.<a href="http://www.google.com/search?hl=en&q=picture+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Picture</span></a> <span style="color: #6132b2;">=</span> <a href="http://www.google.com/search?hl=en&q=stock+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Stock</span></a><span style="color: #612188;">[</span><span style="color: #7e4b05;">"16/network"</span><span style="color: #612188;">]</span><br />
TrayIP.<span style="color: blue;">Visible</span> <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/true"><span style="color: #0600ff; font-weight: bold;">TRUE</span></a><br />
<br />
HttpClientIP <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://www.google.com/search?hl=en&q=httpclient+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">HttpClient</span></a> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"HttpClientIP"</span><br />
HttpClientIP.<span style="color: blue;">URL</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"</span></span></code><code><span class="code-row-text"><span style="color: #7e4b05;"><a class="post-url" href="http://dynupdate.no-ip.com/ip.php" target="_blank">http://dynupdate.no-ip.com/ip.php</a>"</span><br />
HttpClientIP.<span style="color: blue;">Async</span> <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/true"><span style="color: #0600ff; font-weight: bold;">TRUE</span></a><br />
HttpClientIP.<span style="color: blue;">Get</span><br />
<br />
TimerIP <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/new"><span style="color: #0600ff; font-weight: bold;">NEW</span></a> <a href="http://gambasdoc.org/help/lang/timer"><span style="color: #8b1433;">Timer</span></a> <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <span style="color: #7e4b05;">"TimerIP"</span><br />
<a href="http://gambasdoc.org/help/lang/if"><span style="color: #0600ff; font-weight: bold;">IF</span></a> <a href="http://gambasdoc.org/help/lang/val"><span style="color: #8b1433;">Val</span></a><span style="color: #612188;">(</span><a href="http://www.google.com/search?hl=en&q=application+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Application</span></a>.<span style="color: blue;">Args</span><span style="color: #612188;">[</span>1<span style="color: #612188;">]</span><span style="color: #612188;">)</span> <a href="http://gambasdoc.org/help/lang/then"><span style="color: #0600ff; font-weight: bold;">THEN</span></a><br />
TimerIP.<span style="color: blue;">Delay</span> <span style="color: #6132b2;">=</span> <a href="http://gambasdoc.org/help/lang/val"><span style="color: #8b1433;">Val</span></a><span style="color: #612188;">(</span><a href="http://www.google.com/search?hl=en&q=application+site%3Ahttp://gambasdoc.org/&btnI=I%27m%20Feeling%20Lucky"><span style="color: #0600ff;">Application</span></a>.<span style="color: blue;">Args</span><span style="color: #612188;">[</span>1<span style="color: #612188;">]</span><span style="color: #612188;">)</span><br />
<a href="http://gambasdoc.org/help/lang/else"><span style="color: #0600ff; font-weight: bold;">ELSE</span></a><br />
TimerIP.<span style="color: blue;">Delay</span> <span style="color: #6132b2;">=</span> <span style="color: red;">1800000</span> <span style="color: #1a5b1a; font-style: italic;">' 30 min</span><br />
<a href="http://gambasdoc.org/help/lang/endif"><span style="color: #0600ff; font-weight: bold;">ENDIF</span></a><br />
TimerIP.<span style="color: blue;">Start</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> TimerIP_Timer<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
HttpClientIP.<span style="color: blue;">Get</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> mQuit_Click<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/print"><span style="color: #0600ff; font-weight: bold;">PRINT</span></a> <span style="color: #7e4b05;">"QUIT"</span><br />
<a href="http://gambasdoc.org/help/lang/quit"><span style="color: #0600ff; font-weight: bold;">QUIT</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> TrayIP_Menu<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
mTray.<span style="color: blue;">Popup</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> HttpClientIP_Finished<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/dim"><span style="color: #0600ff; font-weight: bold;">DIM</span></a> sIP <a href="http://gambasdoc.org/help/lang/as"><span style="color: #0600ff; font-weight: bold;">AS</span></a> <a href="http://gambasdoc.org/help/lang/type/string"><span style="color: #0600ff;">String</span></a><br />
<a href="http://gambasdoc.org/help/lang/if"><span style="color: #0600ff; font-weight: bold;">IF</span></a> <a href="http://gambasdoc.org/help/lang/lof"><span style="color: #8b1433;">Lof</span></a><span style="color: #612188;">(</span>HttpClientIP<span style="color: #612188;">)</span> <a href="http://gambasdoc.org/help/lang/then"><span style="color: #0600ff; font-weight: bold;">THEN</span></a> <br />
<a href="http://gambasdoc.org/help/lang/read"><span style="color: #0600ff; font-weight: bold;">READ</span></a> #HttpClientIP, sIP, <a href="http://gambasdoc.org/help/lang/lof"><span style="color: #8b1433;">Lof</span></a><span style="color: #612188;">(</span>HttpClientIP<span style="color: #612188;">)</span><br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a> <a href="http://gambasdoc.org/help/lang/if"><span style="color: #0600ff; font-weight: bold;">IF</span></a><br />
<a href="http://gambasdoc.org/help/lang/print"><span style="color: #0600ff; font-weight: bold;">PRINT</span></a> <a href="http://gambasdoc.org/help/lang/time"><span style="color: #8b1433;">Time</span></a><span style="color: #612188;">(</span><a href="http://gambasdoc.org/help/lang/now"><span style="color: #8b1433;">Now</span></a><span style="color: #612188;">)</span>, sIP<br />
mIP.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> sIP<br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> HttpClientIP_Error<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/print"><span style="color: #0600ff; font-weight: bold;">PRINT</span></a> <span style="color: #7e4b05;">"ERROR"</span><br />
mIP.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"IP"</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> mCopy_Click<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
Clipboard.<a href="http://gambasdoc.org/help/lang/copy"><span style="color: #0600ff; font-weight: bold;">Copy</span></a><span style="color: #612188;">(</span>mIP.<span style="color: blue;">Caption</span><span style="color: #612188;">)</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a><br />
<br />
<a href="http://gambasdoc.org/help/lang/public"><span style="color: #0600ff; font-weight: bold;">PUBLIC</span></a> <a href="http://gambasdoc.org/help/lang/sub"><span style="color: #0600ff; font-weight: bold;">SUB</span></a> mIP_Click<span style="color: #612188;">(</span><span style="color: #612188;">)</span><br />
<br />
mIP.<span style="color: blue;">Caption</span> <span style="color: #6132b2;">=</span> <span style="color: #7e4b05;">"IP"</span><br />
HttpClientIP.<span style="color: blue;">Get</span><br />
<br />
<a href="http://gambasdoc.org/help/lang/end"><span style="color: #0600ff; font-weight: bold;">END</span></a></span><br />
</code><br />
<br />
<br />
<br />
Saludos!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-90233999301323179712011-07-24T17:59:00.001-05:002011-07-24T18:02:44.037-05:00Resolver problema nokia 5310b<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIf0rwhKzFs39RJEKttPS_RH0viVYVnG_VIVcpKuIkINY2jISC69IUtfNRzwVViNjytnmSRZFgDkXwiDYlJ9XNwnVy-kcPoUWdx7BTI-cvk8A7hUUbAR49Pp5upjT3Sxd8x_TUTSuuohtT/s1600/nokia+5310+reset.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIf0rwhKzFs39RJEKttPS_RH0viVYVnG_VIVcpKuIkINY2jISC69IUtfNRzwVViNjytnmSRZFgDkXwiDYlJ9XNwnVy-kcPoUWdx7BTI-cvk8A7hUUbAR49Pp5upjT3Sxd8x_TUTSuuohtT/s1600/nokia+5310+reset.jpg" width="168" /></a></div><br />
Tenía el problema de que un nokia 5310b (aunque también pasa en el nokia 5310) se apagaba constantemente, y se iniciaba en la pantalla de configuración de hora y fecha. Pasados unos segundos se desvanecía la pantalla y se apagaba o iniciaba de nuevo. Toda una lata!!!!<br />
<a name='more'></a><br />
Al parecer eso pasa por contener algún archivo corrupto (comúnmente algún *.mp3) ya sea en la memoria SD o en la del teléfono.<br />
<br />
Sabiendo esto, la primer solución a intentar es quitarle y formatear la memoria mini SD, el formato que debe tener es Fat16. Intenten encender de nueva cuenta el nokia.<br />
<br />
Si eso no resolvió el problema, de seguro el archivo corrupto está en la memoria interna. Intenten conectar el teléfono al PC con el cable USB para formatear la memoria, aunque seguramente no dejará conectarlo (la verdad no probé conectar el fono al PC, perdí el cable, je). Otra forma de formatear la memoria es resetear el teléfono a sus condiciones iniciales (CUIDADO: Esto eliminará toda tu info). Para ello primero retira tu SIM por cualquier cosa, luego en tu teléfono ve a <b>MENU</b> > <b>SETTINGS</b> > <b>Rest. Factory Sett.</b> te pedirá un código de seguridad el cual por default es <span style="font-size: large;"><span style="color: #cc0000;">12345</span></span>. Tienes que ser rápido para que puedas hacerlo antes de que el teléfono se apague. Otra forma de acceder a la pantalla de reset es con la combinación de teclas <span class="Apple-style-span" style="font-family: 'Times New Roman';"><span class="Apple-style-span" style="font-family: 'Times New Roman';">dial *#7780#</span></span><br />
<br />
Espero que les sirva saber esto. Saludos!<br />
<br />
Referencias:<br />
<a href="http://mobiles.bigresource.com/Track/mobiles-twvBploT/">5310 Will Not turn on!</a><br />
<a href="http://www.ifixit.com/Wiki/Nokia_5310b_Troubleshooting">Nokia 5310b Troubleshooting</a><br />
<a href="http://www.master-reset.com/2009/03/master-or-hard-reset-on-nokia-5310b-or.html">How to Master or Hard Reset a Nokia 5310b or 5310</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-65181383268682292802011-06-19T20:37:00.000-05:002011-06-19T20:37:10.645-05:00nueva versión: megambasup 0.1.9 Upload files to megaupload<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQTM0REWIiWJl2q65Pw8YTSMs4KJqFkPUtFbiS1cSoiHYD8wKiDCZDgrUv16ZhDqjfgi42gfLiHJf_ruB_NuqKeS75igX3m1R4gNSgMvo7S289C_UuLUJGcnLbLGXRcJmuitNeDjMo-hI/s1600/Screenshot-megambasup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQTM0REWIiWJl2q65Pw8YTSMs4KJqFkPUtFbiS1cSoiHYD8wKiDCZDgrUv16ZhDqjfgi42gfLiHJf_ruB_NuqKeS75igX3m1R4gNSgMvo7S289C_UuLUJGcnLbLGXRcJmuitNeDjMo-hI/s320/Screenshot-megambasup.png" width="320" /></a></div><br />
<a name='more'></a><br />
De nueva cuenta he mejorado la aplicación <a href="http://libertadhack.blogspot.com/2011/01/megambasup-upload-files-to-megaupload.html">megambasup</a>.<br />
Ahora el Filemanager permite ordenar los archivos de nuestra cuenta MU por nombre, tamaño, número de descargas y fecha de súbida.<br />
Otra mejora es la capacidad de guardar la información entregada por el Filemanager en una hoja de cálculo, en un fichero *.ods.<br />
Y también fueron agregadas unas etiquetas que muestran el total de ficheros que tenemos, el total de descargas y nuestros reward points.<br />
<br />
Espero que les sea de utilidad. :)<br />
<br />
<br />
<span style="color: red; font-size: large;">INSTALADOR (DEB):</span> <a href="http://dl.dropbox.com/u/3701367/recursos/megambasup_0.1.9.deb">megambasup_0.1.9.deb</a><br />
<span style="font-size: large;"><span style="color: red;">FUENTES (SOURCES):</span></span> <a href="http://dl.dropbox.com/u/3701367/recursos/megambasup-0.1.9.tar.gz">megambasup-0.1.9.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com9tag:blogger.com,1999:blog-2087007895254567710.post-779922599979580822011-03-21T21:39:00.001-06:002011-03-21T21:40:14.041-06:00Diseño de engrane con QCAD<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKFccTAt5hqNZKx8a1Gg7yxlgGDTLPuIp8R2yjadVuw2LM7USETMhVrttAIFrastcDOpH2uU150XWWlcUZLLheNYAcZ7YyloXYcwqxLJEIfOArNRppO4FnyHSSCNtZePORoJOC8rywuBE/s1600/engrane_qcad.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKFccTAt5hqNZKx8a1Gg7yxlgGDTLPuIp8R2yjadVuw2LM7USETMhVrttAIFrastcDOpH2uU150XWWlcUZLLheNYAcZ7YyloXYcwqxLJEIfOArNRppO4FnyHSSCNtZePORoJOC8rywuBE/s320/engrane_qcad.png" width="320" /></a></div><br />
QCAD es un buen programa para dibujo asitido por computador en 2D, en este ejemplo hago el diseño de un engrane de dientes rectos con angulo de presión de 20º.<br />
<a name='more'></a><br />
<div aling="center"><iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/m1fdmUyqt2o?rel=0" title="YouTube video player" width="480"></iframe></div><br />
<style type="text/css">
p { margin-bottom: 0.08in; }
</style> <br />
<div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: medium;"><b>REALIZACIÓN DEL ENGRANE</b></span></span></div><div style="margin-bottom: 0in;"><br />
</div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">La envolvente solo se hace una vez y se aplica con el debido escalamiento para la construcción de cualquier otro engrane con ángulo de presión de 20°; en este ejemplo se hará un engrane con los siguientes datos:</span></span></div><div style="margin-bottom: 0in;"><br />
</div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">Z = 20 dientes</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">m = 4</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">Ɵ = 20°</span></span></div><div style="margin-bottom: 0in;"><br />
</div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 1</b>: Crear circunferencia con radio 100*cos(20)/2 con centro en 0,0 (formula 'i')</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 2</b>: Crear 12 líneas consecutivas tangentes al circulo de longitud 25*pi*cos(20)/18 (formula 'iii')</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 3</b>: Crear 12 copias del grupo de líneas cubriendo 60° con Edit - Rotate </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Multiple Copies: 12</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Angle: -60/12</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 4</b>: Usar Splines de 2do grado para unir los endpoints </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 5</b>: Borrar elementos sobrantes </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 6</b>: Guardar fichero, será nuestra plantilla de envolvente </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 7</b>: Guardar como... (usar otro nombre) para modificar libremente </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 8</b>: Seleccionar figura y aplicar escalamiento de 0.01*20*4 (formula 'iv')</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 9</b>: Crear círculos con los radios indicados (formulas 'v', 'vi' y 'vii')</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> r<sub>e</sub> = (20+2)*4/2</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> r<sub>p</sub> = 20*4/2</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> r<sub>i</sub> = 20*4/2 – 2.5*4/2</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 10</b>: Crear línea que una el centro con el diámetro primitivo </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 11</b>: Crear copia con Edit - Rotate con un ángulo de -360/(m Z) </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Angle: -360/(4*20)</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 12</b>: Aplicar mirror a la curva con eje la línea creada </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 13</b>: Descomponer curvas con Edit - Explote </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 14</b>: Recortar y borrar sobrantes </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 15</b>: Copiar curva izquierda con un ángulo de -360/Z</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Angle: -360/20</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 16</b>: Unir intersección diámetros primitivos con envolventes al centro circulo </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 17</b>: Recortar con diámetro raíz </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 18</b>: Fillet con radio 0.25*4 (formula viii)</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><b>PASO 19</b>: Crear 19 copias del diente cubriendo los 360° </span></span> </div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Multiplie copies: 19</span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"> Angle: 360/20</span></span></div><div style="margin-bottom: 0in;"><br />
</div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">Autor: aztk <aztecaymaya@gmail.com></aztecaymaya@gmail.com></span></span></div><div style="margin-bottom: 0in;"><span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">CopyLeft 2010</span></span><br />
<br />
<span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;">Referencias:</span></span><br />
<span style="font-family: FreeSans,sans-serif;"><span style="font-size: x-small;"><a href="http://www.produccionpormecanizado.es/2008/12/21/video-de-diseno-de-engranajes-con-autocad">http://www.produccionpormecanizado.es/2008/12/21/video-de-diseno-de-engranajes-con-autocad</a> </span></span></div><br />
Documento con información y formulas:<br />
<a href="http://dl.dropbox.com/u/3701367/recursos/QCAD%20-%20gear/gear.odt">gear.odt</a><br />
<br />
Archivos generados en QCAD:<br />
<a href="http://dl.dropbox.com/u/3701367/recursos/QCAD%20-%20gear/qcad-gear.tar.gz">qcad-gear.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-39204389706409204372011-03-05T14:40:00.001-06:002011-06-19T20:36:59.920-05:00nueva versión: megambasup 0.1.2 Upload files to megaupload<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq9VYu6Ltthb7C9PQ0ICB-HgJAphccZohYaN3Wc-LgI9hAyUTsQcTVg7PhEVc7593tL0UYjitJ3leBBZhL7Lv7hG0RfkbfVSOah0NF4DuCG7kja1k0ZQU7jCOHEk3hhwxdeghYuT8ZGv0/s1600/screenshot-megambasup_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq9VYu6Ltthb7C9PQ0ICB-HgJAphccZohYaN3Wc-LgI9hAyUTsQcTVg7PhEVc7593tL0UYjitJ3leBBZhL7Lv7hG0RfkbfVSOah0NF4DuCG7kja1k0ZQU7jCOHEk3hhwxdeghYuT8ZGv0/s320/screenshot-megambasup_02.png" width="320" /></a></div><a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-kDWPgNsUljzxWEkONfpXg7e-6eiAZkBF6orw23m3HGmubPzxofMAo5uuYr1DtfKS72ZmEu6yGklcSqTBV8EK4E_MZgocxsTZqInL7mvRnslasBKF4dNC_aSIN3mBJ-ZEmi5a36eYDQU/s1600/screenshot-megambasup_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-kDWPgNsUljzxWEkONfpXg7e-6eiAZkBF6orw23m3HGmubPzxofMAo5uuYr1DtfKS72ZmEu6yGklcSqTBV8EK4E_MZgocxsTZqInL7mvRnslasBKF4dNC_aSIN3mBJ-ZEmi5a36eYDQU/s320/screenshot-megambasup_01.png" width="320" /></a></div><br />
He mejorado un poco la aplicación <a href="http://libertadhack.blogspot.com/2011/01/megambasup-upload-files-to-megaupload.html">megambasup</a> para ahora permitir ver y eliminar archivos de nuestra cuenta megaupload, además de otros pequeños cambios.<br />
<br />
<span style="color: red; font-size: large;">INSTALADOR (DEB):</span> <a href="http://dl.dropbox.com/u/3701367/recursos/megambasup_0.1.2.deb">megambasup_0.1.2.deb</a><br />
<span style="font-size: large;"><span style="color: red;">FUENTES (SOURCES):</span></span> <a href="http://dl.dropbox.com/u/3701367/recursos/megambasup-0.1.2.tar.gz">megambasup-0.1.2.tar.gz</a>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com2tag:blogger.com,1999:blog-2087007895254567710.post-72414727136096100902011-02-07T14:17:00.001-06:002011-02-07T14:18:45.875-06:00gambas2: TableView a hoja de cálculo (ODS)<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwwAA1jCkVT6RqV0RSDisOs00_SJIDACnnNVJfLppvlKv_hp0m6RkH1tCTZe6WcIl2J8Yy1J9ePfiDgGTR5IGdoVEb1jXheG0lSYPhlVZOkae0zZWnzRmZSAIWqI6BIyGjMtKBSD_FewI/s1600/opendoc_gambas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwwAA1jCkVT6RqV0RSDisOs00_SJIDACnnNVJfLppvlKv_hp0m6RkH1tCTZe6WcIl2J8Yy1J9ePfiDgGTR5IGdoVEb1jXheG0lSYPhlVZOkae0zZWnzRmZSAIWqI6BIyGjMtKBSD_FewI/s400/opendoc_gambas.png" width="400" /></a></div><br />
He creado un pequeño código que exporta la data contenida en un TableView o GridView a una hoja de cálculo, fichero ODS de la fundación Open Document.<br />
<a name='more'></a><br />
Este pequeño modulo es muy simple y se limita solo a pasar la data pero sin conservar el formato de fuente.<br />
<br />
Aquí está la parte importante del código, pero también les dejo las fuentes para su facilidad. Cualquier duda aquí andamos :)<br />
<br />
<br />
<div style="font-family: arial; font-size: 12px; height: 450px; overflow: auto; padding: 4px; text-align: left; width: 530px;"><pre><span style="font-family: Helvetica,Arial,sans-serif;"><span style="font-style: italic;"><span style="color: #999999;">' Gambas module file
</span></span>
<span style="color: #0099ff;"><b>PRIVATE</b></span> pathOpendoc <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">String</span> <span style="color: blue;">=</span> <span style="color: #ff33ff;">"/tmp/opendocgambas/"</span> <span style="font-style: italic;"><span style="color: #999999;">' Ruta temporal donde se crearan los ficheros que componen el ODS
</span></span>
<span style="font-style: italic;"><span style="color: #999999;">' Funcion que creará los ficheros que componen el ODS, y los empaquetará con el nombre de la variable pathODS
</span></span><span style="color: #0099ff;"><b>PUBLIC</b></span> <span style="color: #0099ff;"><b>FUNCTION</b></span> saveODS<span style="color: blue;">(</span>controlx <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">Object</span>, pathODS <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">String</span><span style="color: #3399ff;">)</span>
<span style="color: #0099ff;"><b>DIM</b></span> writer <span style="color: #0099ff;"><b>AS</b></span> XmlWriter <span style="font-style: italic;"><span style="color: #999999;">' Creará los ficheros XML necesarios
</span></span> <span style="color: #0099ff;"><b>DIM</b></span> filex <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">File</span> <span style="font-style: italic;"><span style="color: #999999;">' Creará los ficheros de texto plano necesarios
</span></span> <span style="color: #0099ff;"><b>DIM</b></span> iCount <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">Integer</span> <span style="font-style: italic;"><span style="color: #999999;">' Índice para las filas del TableView
</span></span> <span style="color: #0099ff;"><b>DIM</b></span> jCount <span style="color: #0099ff;"><b>AS</b></span> <span style="color: #3399ff;">Integer</span> <span style="font-style: italic;"><span style="color: #999999;">' Índice para las columnas del TableView
</span></span>
<span style="font-style: italic;"><span style="color: #999999;">' Ejecutar función solo para GridViews o TableViews
</span></span> <span style="color: #0099ff;"><b>IF</b></span> <span style="color: #3399ff;">Object</span>.Type<span style="color: blue;">(</span>controlx<span style="color: blue;">)</span> <span style="color: blue;">=</span> <span style="color: #ff33ff;">"GridView"</span> <span style="color: blue;">OR</span> <span style="color: #0099ff;"><b>IF</b></span> <span style="color: #3399ff;">Object</span>.Type<span style="color: blue;">(</span>controlx<span style="color: blue;">)</span> <span style="color: blue;">=</span> <span style="color: #ff33ff;">"TableView"</span> <span style="color: #0099ff;"><b>THEN</b></span>
<span style="color: #0099ff;"><b>TRY</b></span> <span style="color: #0099ff;"><b>MKDIR</b></span> pathOpendoc <span style="font-style: italic;"><span style="color: #999999;">' Crear directorio temporal
</span></span> <span style="color: #0099ff;"><b>TRY</b></span> <span style="color: #0099ff;"><b>MKDIR</b></span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"Configurations2"</span> <span style="font-style: italic;"><span style="color: #999999;">' Crear otros directorios para el ODS
</span></span> <span style="color: #0099ff;"><b>TRY</b></span> <span style="color: #0099ff;"><b>MKDIR</b></span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"META-INF"</span>
<span style="color: #0099ff;"><b>TRY</b></span> <span style="color: #0099ff;"><b>MKDIR</b></span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"Thumbnails"</span>
<span style="font-style: italic;"><span style="color: #999999;">' Crear fichero mimetype
</span></span> filex <span style="color: blue;">=</span> <span style="color: #0099ff;"><b>OPEN</b></span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"mimetype"</span> <span style="color: #0099ff;"><b>FOR</b></span> <span style="color: #0099ff;"><b>INPUT</b></span> <span style="color: #0099ff;"><b>CREATE</b></span>
<span style="color: #0099ff;"><b>PRINT</b></span> #filex<span style="color: blue;">,</span> <span style="color: #ff33ff;">"application/vnd.oasis.opendocument.spreadsheet"</span>; <span style="font-style: italic;"><span style="color: #999999;">' El ";" es para no insertar una terminación de línea
</span></span> <span style="color: #0099ff;"><b>CLOSE</b></span> #filex
<span style="font-style: italic;"><span style="color: #999999;">' Crear fichero manifest.xml
</span></span> writer <span style="color: blue;">=</span> <span style="color: #0099ff;"><b>NEW</b></span> XmlWriter
<span style="color: #0099ff;"><b>WITH</b></span> writer
.Open<span style="color: blue;">(</span>pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"META-INF/manifest.xml"</span><span style="color: blue;">,</span> <span style="color: #0099ff;"><b>TRUE</b></span>, <span style="color: #ff33ff;">"UTF-8"</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:manifest"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"xmlns:manifest"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"application/vnd.oasis.opendocument.spreadsheet"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:version"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"1.2"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/statusbar/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/accelerator/current.xml"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/accelerator/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/floater/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/popupmenu/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/progressbar/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/menubar/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/toolbar/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/images/Bitmaps/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/images/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"application/vnd.sun.xml.ui.configuration"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Configurations2/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"text/xml"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"content.xml"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"text/xml"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"styles.xml"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"text/xml"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"meta.xml"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Thumbnails/thumbnail.png"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">" "</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"Thumbnails/"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"manifest:file-entry"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"manifest:media-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"text/xml"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"manifest:full-path"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"settings.xml"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
.EndElement
.EndDocument
<span style="color: #0099ff;"><b>END</b></span> <span style="color: #0099ff;"><b>WITH</b></span>
<span style="font-style: italic;"><span style="color: #999999;">' Crear fichero content.xml. En este fichero se encuentra la data del TableView
</span></span> writer <span style="color: blue;">=</span> <span style="color: #0099ff;"><b>NEW</b></span> XmlWriter
writer.Open<span style="color: blue;">(</span>pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"content.xml"</span><span style="color: blue;">,</span> <span style="color: #0099ff;"><b>TRUE</b></span>, <span style="color: #ff33ff;">"UTF-8"</span><span style="color: blue;">)</span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:document-content"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:office"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:office:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:style"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:style:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:text"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:text:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:table"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:table:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:number"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:chart"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:chart:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:form"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:oasis:names:tc:opendocument:xmlns:form:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:oooc"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"http://openoffice.org/2004/calc"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:field"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"xmlns:formx"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:version"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"1.2"</span><span style="color: blue;">)</span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:body"</span><span style="color: blue;">)</span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:spreadsheet"</span><span style="color: blue;">)</span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"table:table"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"table:name"</span><span style="color: blue;">,</span> <span style="color: blue;">CStr</span><span style="color: blue;">(</span>controlx.Name<span style="color: blue;">)</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"table:print"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"false"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
<span style="font-style: italic;"><span style="color: #999999;">' Si existen headers, también vaciarlos a la hoja de cálculo
</span></span> <span style="color: #0099ff;"><b>IF</b></span> controlx.Header <span style="color: blue;">=</span> GridView.Horizontal <span style="color: blue;">OR</span> <span style="color: #0099ff;"><b>IF</b></span> controlx.Header <span style="color: blue;">=</span> GridView.Both <span style="color: #0099ff;"><b>THEN</b></span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"table:table-row"</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>FOR</b></span> jCount <span style="color: blue;">=</span> <span style="color: red;">0 </span><span style="color: #0099ff;"><b>TO</b></span> controlx.Columns.Count <span style="color: blue;">-</span> <span style="color: red;">1
</span>
writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"table:table-cell"</span><span style="color: blue;">,</span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"office:value-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"string"</span><span style="color: blue;">]</span><span style="color: blue;">)</span>
writer.Element<span style="color: blue;">(</span><span style="color: #ff33ff;">"text:p"</span><span style="color: blue;">,</span> controlx.Columns<span style="color: blue;">[</span>jCount<span style="color: blue;">]</span>.Text<span style="color: blue;">)</span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>NEXT</b></span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>ENDIF</b></span>
<span style="font-style: italic;"><span style="color: #999999;">' Vaciar la info de las celdas del TableView a la hoja de cálculo
</span></span> <span style="color: #0099ff;"><b>FOR</b></span> iCount <span style="color: blue;">=</span> <span style="color: red;">0 </span><span style="color: #0099ff;"><b>TO</b></span> controlx.Rows.Count <span style="color: blue;">-</span> <span style="color: red;">1 </span><span style="font-style: italic;"><span style="color: #999999;">' Recorremos las filas
</span></span> writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"table:table-row"</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>FOR</b></span> jCount <span style="color: blue;">=</span> <span style="color: red;">0 </span><span style="color: #0099ff;"><b>TO</b></span> controlx.Columns.Count <span style="color: blue;">-</span> <span style="color: red;">1 </span> <span style="font-style: italic;"><span style="color: #999999;">' Recorremos las columnas
</span></span> writer.StartElement<span style="color: blue;">(</span><span style="color: #ff33ff;">"table:table-cell"</span><span style="color: blue;">)</span>
<span style="font-style: italic;"><span style="color: #999999;">' Indentificar si el dato es una string o un dato numerico
</span></span> <span style="color: #0099ff;"><b>IF</b></span> <span style="color: blue;">Str$</span><span style="color: blue;">(</span><span style="color: blue;">Val</span><span style="color: blue;">(</span>controlx<span style="color: blue;">[</span>iCount<span style="color: blue;">,</span> jCount<span style="color: blue;">]</span>.Text<span style="color: blue;">)</span><span style="color: blue;">)</span> <span style="color: blue;">=</span> controlx<span style="color: blue;">[</span>iCount<span style="color: blue;">,</span> jCount<span style="color: blue;">]</span>.Text <span style="color: #0099ff;"><b>THEN</b></span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:value-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"float"</span><span style="color: blue;">)</span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:value"</span><span style="color: blue;">,</span> controlx<span style="color: blue;">[</span>iCount<span style="color: blue;">,</span> jCount<span style="color: blue;">]</span>.Text<span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>ELSE</b></span>
writer.Attribute<span style="color: blue;">(</span><span style="color: #ff33ff;">"office:value-type"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"string"</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>ENDIF</b></span>
writer.Element<span style="color: blue;">(</span><span style="color: #ff33ff;">"text:p"</span><span style="color: blue;">,</span> controlx<span style="color: blue;">[</span>iCount<span style="color: blue;">,</span> jCount<span style="color: blue;">]</span>.Text<span style="color: blue;">)</span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>NEXT</b></span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
<span style="color: #0099ff;"><b>NEXT</b></span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
writer.EndElement<span style="color: blue;">(</span><span style="color: blue;">)</span>
writer.EndDocument<span style="color: blue;">(</span><span style="color: blue;">)</span>
<span style="font-style: italic;"><span style="color: #999999;">' Creamos un script bash para empaquetar los ficheros y directorios del ODS
</span></span> filex <span style="color: blue;">=</span> <span style="color: #0099ff;"><b>OPEN</b></span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"pckods"</span> <span style="color: #0099ff;"><b>FOR</b></span> <span style="color: #0099ff;"><b>INPUT</b></span> <span style="color: #0099ff;"><b>CREATE</b></span>
<span style="color: #0099ff;"><b>PRINT</b></span> #filex<span style="color: blue;">,</span> <span style="color: #ff33ff;">"#!/bin/bash"</span>
<span style="color: #0099ff;"><b>PRINT</b></span> #filex<span style="color: blue;">,</span> <span style="color: #ff33ff;">"# Script creado con gambas, comprime ficheros para crear un documento ODS"</span>
<span style="color: #0099ff;"><b>PRINT</b></span> #filex<span style="color: blue;">,</span> <span style="color: #ff33ff;">"cd $(dirname $0)"</span>
<span style="color: #0099ff;"><b>PRINT</b></span> #filex<span style="color: blue;">,</span> <span style="color: #ff33ff;">"zip -r $1 Configurations2 META-INF Thumbnails content.xml mimetype"</span>
<span style="color: #0099ff;"><b>CLOSE</b></span> #filex
<span style="color: #0099ff;"><b>EXEC</b></span> <span style="color: blue;">[</span><span style="color: #ff33ff;">"chmod"</span><span style="color: blue;">,</span> <span style="color: #ff33ff;">"+x"</span><span style="color: blue;">,</span> pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"pckods"</span><span style="color: blue;">]</span> <span style="color: #0099ff;"><b>WAIT</b></span>
<span style="color: #0099ff;"><b>EXEC</b></span> <span style="color: blue;">[</span>pathOpendoc <span style="color: blue;">&/</span> <span style="color: #ff33ff;">"pckods"</span><span style="color: blue;">,</span> pathODS<span style="color: blue;">]</span> <span style="color: #0099ff;"><b>WAIT</b></span> <span style="font-style: italic;"><span style="color: #999999;">' Ejecutamos el script
</span></span> <span style="color: #0099ff;"><b>ELSE</b></span>
<span style="color: #0099ff;"><b>ERROR</b></span> <span style="color: #ff33ff;">"El control no es un GridView o TableView"</span>
<span style="color: #0099ff;"><b>ENDIF</b></span>
<span style="color: #0099ff;"><b>END</b></span>
<span style="font-style: italic;"><span style="color: #999999;">' aztk
</span></span><span style="font-style: italic;"><span style="color: #999999;">' Tenochtitlan. Febrero del 2011
</span></span><span style="font-style: italic;"><span style="color: #999999;">' CopyLeft
</span></span></span></pre></div><br />
<br />
<div align="center"><input onclick="window.open('http://dl.dropbox.com/u/3701367/recursos/opendoc_gambas-0.0.1.tar.gz')" type="button" value="opendoc_gambas-0.0.1.tar.gz" /> </div>aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com5tag:blogger.com,1999:blog-2087007895254567710.post-36303300639646175912011-02-07T13:39:00.000-06:002011-02-07T13:39:38.056-06:00Picture: Tecnología Gambas<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPQ5TBrJM0hY-0OunpQjI3vRGZjGJxsKb3vmcLCWwXqDgg82gx1Q38QxEvHm-022AmoyptZwRZ-7-OoV004Q6UfIha2b_j0ztcKfREibCRT7pA_X3eU5tdEQz2ZigQUteoKS22iK8gF_c/s1600/tecnologia_gambas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPQ5TBrJM0hY-0OunpQjI3vRGZjGJxsKb3vmcLCWwXqDgg82gx1Q38QxEvHm-022AmoyptZwRZ-7-OoV004Q6UfIha2b_j0ztcKfREibCRT7pA_X3eU5tdEQz2ZigQUteoKS22iK8gF_c/s1600/tecnologia_gambas.png" /></a></div><a name='more'></a><br />
En el foro de <a href="http://gambas-es.org/">gambas-es</a> el usuario <a href="http://jsbsan.blogspot.com/">jsbsan </a>puso un hilo acerca de una convocatoria para la creación de un logotipo "Hecho con Gambas", la neta como yo no sé ni madres del diseño grafico no quería participar, pero despues de ver que había mucha participación me motivó a crearme el mio....... :)<br />
<br />
Con esta pequeñisima experiencia me he dado cuenta que los bros/sis que le meten al GIMP o similares son chingones, jejeje :) por que a mi que la neta me costó un buen, y eso que no hice gran cosa.<br />
<br />
Bueno, pss allí está mi pequeño aporte para el que le sea útil, también dejo el xcf pal' GIMP.<br />
<br />
<a href="http://dl.dropbox.com/u/3701367/recursos/tecnologia_gambas.xcf">Fichero XFC (para GIMP)</a><br />
<br />
Nota: Si quieren ver mas logotipos creados por los usuarios de gambas-es, ver el hilo <a href="http://gambas-es.org/viewtopic.php?f=7&t=1368&postdays=0&postorder=asc&start=0">Logotipo "Hecho con Gambas"...</a><br />
<br />
Saludos!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0tag:blogger.com,1999:blog-2087007895254567710.post-67472570069604044552011-01-15T21:13:00.001-06:002011-01-15T21:14:27.880-06:00megambasup (vídeo)<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/AIo2AbMjhSw?fs=1&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/AIo2AbMjhSw?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<a name='more'></a><br />
He hecho un pequeño clip donde se ve el uso de la apicación <a href="http://libertadhack.blogspot.com/2011/01/megambasup-upload-files-to-megaupload.html">megambasup</a>. Entre las funciones de la app se notan:<br />
<br />
<ul><li>Verificar usuario y contraseña</li>
<li>Habilitar algunas configuraciones</li>
<li>Importar ficheros desde el botón 'add files...'</li>
<li>Arrastrar y soltar ficheros hacia megambasup, para importarlos</li>
<li>Importar ficheros desde una lista (anteriormente creada con el mismo megambasup)</li>
<li>Subida de ficheros</li>
<li>Presentación del progreso de subida en una progress bar</li>
<li>Manipulación de la lista con los botones up, down, top and bottom</li>
<li>Cancelación de subidas</li>
<li>Entrega de los links de megaupload</li>
<li>etc</li>
</ul><br />
Je, mi primer vídeo en youtube.<br />
<br />
Saludos!aztkhttp://www.blogger.com/profile/08951830788389975908noreply@blogger.com0