martes, 5 de septiembre de 2017
Al final no escribir en este blog.
viernes, 3 de julio de 2015
De editor a IDE, o lo que es lo mismo: VIM con esteroides.
Hace unos meses me enfrente a un problema en la oficina, y no es el café, si no los recursos de la maquina que tengo para poder hacer lo que debo. Así que hice lo que debía, pero tener la IDE, el cliente de base de datos (Si, ya sé que aman phmMyAdmin sobre todas las cosas... yo no) docenas de pestañas en el browser y alguna otra cosa en extra... hacían que la maquina fuera por lo suelos en rendimiento. Cambiamos algunas cosas, entorno gráfico, menos pestañas en el browser, ya no mas reproductor de audio en la maquina... usamos en pool data del IDE y dejamos ir al workbrench un rato, pero el IDE seguía consumiendo tantos recursos, hasta el punto de ser molesto.
Así negando a usar un editor de código popular, elegí entre todos los males, el peor, ¿por qué escoger la opción menos malvada? Tomamos vim como el equipo de GEx y lo pusimos bello para editar las necesidades del día al día.
Para lograr esto, usaremos plugins y para hacerlo de la manera mas rápida, usaremos Vundle, un gestor de paquetes para vim que nos permite manejar los paquetes desde el vimrc, lo cual para empezar, debemos clonar el proyecto en nuestra carpeta .vim/bundle/
y crear (en caso de no tenerlo) nuestro .vimrc en el home de nuestro con el siguiente esqueleto, donde poco a poco iremos armando para poder incluir los paquetes (plugins) necesarios o que necesitemos según los gustos de cada quien. Y para ello, les recomiendo la pagina de vimawesome.com donde encontraremos todo lo que necesitemos para convertir a nuestro editor en una pequeña IDE.$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
set rtp+=~/.vim/bundle/Vundle.vim " alternatively, pass a path where Vundle should install plugins " "call vundle#begin('~/some/path/here') call vundle#begin() " " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' call vundle#end() " required filetype plugin indent on " required " " Brief help " " :PluginList - lists configured plugins " " :PluginInstall - installs plugins; append `!` to update or just " :PluginUpdate " " :PluginSearch foo - searches for foo; append `!` to refresh local cache " " :PluginClean - confirms removal of unused plugins; append `!` to " auto-approve removal " " see :h vundle for more details or wiki for FAQ
Otra necesidad, es poder navegar por el proyecto sin tener que salir de vim, para lo cual tenemos la ayuda de NERDTree, un explorador de filesystem desplegado en un árbol, el cual nos permite ver carpetas y abrir los archivos necesarios sin salir del editor.
La necesidad de hoy en día, nos obliga a tener una manera de poder navegar en nuestro código teniendo a la mano las variables y funciones para poder navegar mejor entre tantas lineas de código y evitar la perdida de estar buscando de forma manual, por ello existe Tagbar que requiere que tengamos instalado ctag, el cual podemos compilarlo o descargarlo desde nuestro gestor de dependencias favorito.
Los IDE's modernos nos permiten el autocompletado de código, lo cual es una gran ayuda a la hora de escribir de una forma mas rápida y no cometer errores de sintaxis, en lo personal, uso YouCompleteMe, el cual requiere que clones el proyecto en tu carpeta de Bundles y compiles.
cd ~/.vim/bundle/YouCompleteMe ./install.sh --clang-completer
Para poder hacer de YouCompleteMe una experiencia totalmente agradable, usaremos SuperTab que nos ayudara a todos aquellos que estamos muy acostumbrados al autocomplete por medio del tabulador.
Otro paquete que no nos puede faltar para nuestro adorado vim, es el uso de snippets que lo encontramos en IDE's y editores como sublime o atom, y para ello, nada mejor que ultisnips, un paquete que nos ayudara a crearlos de una forma tan simple y que hará las delicias de chicos y grandes.
Y aunque existen muchas otras opciones para diferentes lenguajes como ruby, php, javascript, java o integrarlo con git creo que esto es lo básico para poder hacer de vim algo mas que un simple editor de textos.
Les dejo mi vimrc que esta adaptado para php, es lo que por el momento uso, no sin antes decirles que si gustan de tener estadísticas y datos de su forma de programar, se den una vuelta por wakatime, el cual tiene diferentes plugins para distintas IDE's, editores y si, también para nuestro adorado y amado vim.
Happy hacking.
lunes, 16 de marzo de 2015
Java y su paso de valor "Referenciado"
Si tu creas un objeto y lo pasas a una variable, que es lo que pasa?? Mi respuesta inmediata fue: se referencia, por lo cual no se reserva memoria para este paso.
supongamos que tenemos una clase Algo y un código así.
Algo a = new Algo();
Algo b = a;
a = null;
Y esto causo realmente la duda, si a es ahora nula, por que b no? Y es que aunque a y b estén referenciados al mismo objeto, no están relacionados de ninguna otra forma, por lo que una asignación como en este caso, al objeto a, lo desenganchará del objeto original, pero no afectara a b en lo mínimo. Por lo cual, a es nulo, pero b sigue apuntando al objeto original, pero no es realmente asi.
Si bien, la VM relaciona la variable a y b por medio del id, a y b son una copia del objeto creado (Si, al ser copia, se hace la asignación de este en memoria). Así que si hacemos algo como esto (disculpen que use la imprudencia de #Groovy, pero es que si soy un poco flojo).
class Algo{
def name;
}
Algo a = new Algo(name:"basura")
Algo b = a
println "Esto contiene la variable a: ${a.getName()}"
println "Esto contiene la variable b: ${b.getName()}"
println "Este es el id del objeto a: ${a.hashCode()}"
println "Este es el id del Objeto b: ${b.hashCode()}"
En este punto, la variable name va a tener el mismo valor tanto para a como para b, y los id de cada uno serán idénticos, lo cual nos haría pensar que si, el paso es por referencia y no por valor. Y si seguimos jugando con esto, mas nos hará pensar lo mismo!
b.setName("Random");
println "Esto contiene la variable a: ${a.getName()}"
println "Esto contiene la variable b: ${b.getName()}"
println "Este es el id del objeto a: ${a.hashCode()}"
println "Este es el id del Objeto b: ${b.hashCode()}"
a.setName("Uetiko")
println "Esto contiene la variable a: ${a.getName()}"
println "Esto contiene la variable b: ${b.getName()}"
println "Este es el id del objeto a: ${a.hashCode()}"
println "Este es el id del Objeto b: ${b.hashCode()}"
Y si, sigue cambiando y cambiando y no deja de ser el mismo id, pero como bien se ha mencionado antes, todo cambia cuando haces a una de las dos nula:
a = null
try{
println "Esto contiene la variable a: ${a.getName()}"
}catch(Exception e){
println e.getMessage()
}
println "Esto contiene la variable b: ${b.getName()}"
println "Este es el id del Objeto b: ${b.hashCode()}"
Aquí vemos como la variable 'a' la hacemos nula y la marcamos para que sea procesada por el GC, y esperanzados a que b, que era una referencia, pues muera de igual forma, por desgracia no es así como funciona, ya que si recordamos las sabias palabras de Ken Arnold y James Gosling, nos damos cuenta que si, la VM al estar pensada para que corra en diferentes arquitecturas, lo mas lógico es que la única forma de pasar valores en java, es por valor, ya que esto ayuda a la simpleza.
Con amor, Random.
jueves, 22 de enero de 2015
Mientras encripatmos a alguien, hablemos de cifrado y así.
Muchas veces confundimos el codificar, con cifrar, con encriptar ( No, nos negamos a meter a alguien en una cripta.) que no, no es encriptar, por que cada que dices encriptar, dios mata un gatito, y los gatitos son como las direcciones IPv4, ya no hay mas.
Pero hablemos de conceptos.
¿Qué es codificar?
En términos muy simples es expresar una misma información de una forma distinta, es decir, transformamos nuestros símbolos (Caracteres) en otro sistema de representación, por eso, en realidad no estas ocultando o dificultando el acceso a la información, y el ejemplo mas común es el lenguaje.
Supongamos que tenemos un mensaje: "Hola, mundo"
Es simple, es burdo, pero es lindo, ahora tenemos el mismo mensaje en ingles: "Hello world"
Foneticamente y morfologicamente son distintos, pero el significado es el mismo, simplemente codificamos el mensaje, y por eso se puede leer de otra manera, en este caso, en ingles.
Y bien, ¿Qué es cifrar?
Es aplicarle a un mensaje un algoritmo y una clave, y esto nos da como resultado, un mensaje cifrado, vulgarmente conocido como criptograma.
Pero cuando hablamos de algoritmo, hablamos de un proceso que debe ser siempre unívoca, lo que significa que una entrada siempre provoca una misma salida o resultado, pero como no queremos eso, tenemos que variar la entrada y para ello usamos una clave.
Supongamos que yo tengo un secreto (Una clave) y utilizo este secreto para cifrar un mensaje. Si yo quiero compartir este mensaje con alguien mas, tengo que compartir mi secreto con esta otra persona, y luego esta persona aplicar mi secreto para poder leer el mensaje. Por lo que podríamos decir que, nuestro mensaje es tan seguro como mantengamos oculto nuestro secreto. Esta técnica se le conoce como criptografia simétrica.
De aquí nace otro concepto interesante en los años 70's que pretendió arreglar el inconveniente del secreto pre-compartido con un juego de llaves, donde una se una en un sentido y la otra, en otra (Por que, obvio, no creo que sean para lo mismo, no tendría caso). Para este punto, una de ellas es la llave privada, que nadie debe tener, y la otra es una publica, que puedo compartirla con quien yo quiera. Y a esto se le llamo criptigrafía asimétrica.
Cuando creamos estas llaves con PGP o GPG, ponerle una frase de paso o clave a la llave privada, es obligatorio (O muy recomendado, de verdad, tienen que ponerle una clave, ya les diré por que). Pero algunas veces, cuando usamos RSA o SSL no lo hacemos por que suponemos que están en un sitio seguro y... nadie entra a sitios seguros a robar información, o ¿si? El caso es que, supongamos que nuestra llave privada cae en otras manos que no sean las nuestras y no cuenta con una frase de paso (clave), pues esta persona podrá leer nuestros mensajes cifrados y saber donde ocultamos las galletas de chispas de chocolate que no queremos compartir con el resto de la humanidad.
Gracias a la criptografia asimétrica, hoy podemos hace una firma. pero pongamos en contexto algo simple del funcionamientos de las llaves. Y es que si bien, todo mundo (o los que queramos) tiene nuestra llave publica, el proceso de cifrado es a la llave publica y el proceso de decifrado es por lo tanto, a la llave privada, pero si ¿esto lo hacemos al revés? Aplicando el proceso de cifrado a la privada y el decifrado a la publica. Y si, es aquí donde entra la tan conocida firma digital o electrónica, es decir, solo tu, que tienes tu llave privada puedes generar una firma valida y cualquiera con tu llave publica verificar la integridad, la autenticidad y el no repudio de la información entregada, por lo que luego no puedes venir a decirle que no haz escrito el correo mandado. ¿Pero como de que no? Tengo la prueba matemática para demostrarlo!
Una cadena es tan fuerte como el mas débil de sus eslabones.
Si bien, el cifrado es algo (mucho) útil a la hora de mantener segura nuestra información y poder asegurar la veracidad de la información que se maneja, de nada sirve que tengamos una llave de 4096 bits si para comparar las firmas digitales lo hacemos por medio de la comparación de cadenas: Nintento, nunca cambies, por favor.
Existe desde hace unos cuantos meses o miles de años, desde los algoritmos clásicos y de eso, hace ya mucho los ataques criptograficos o el criptoanalisis, que consiste en descubrir debilidades en los algoritmos criptograficos que nos permitan obtener pistas para decrifrar las claves.
Ahora, supongamos, mi querido lector, que tenemos el algoritmo RSA que se basa en el problema matemático de la factorización de números enteros, en el cual usaremos nuestra computadora cuántica que funciona con aire y que compramos en china a un buen precio para tratar de romper un mensaje cifrado. Esto es un coste exponencial, que en la teoría de la complejidad, si nosotros aumentamos un poco la complejidad de la frase de paso (clave), poder romperla se vuelve un lio hasta el punto que no se podría... o si, pero nos llevaría mas tiempo del que lleva el universo siendo universo, así que no esta nada mal desde ese punto de vista.
Así que, la criptografia no nos hace la vida mas fácil, pero si mas segura. Tiene un costo, pero tiene beneficios que cada uno de ustedes le dará el peso que crea necesario.
Con amor: Uetiko
sábado, 5 de julio de 2014
GnuPG creación de llaves y exportación para su uso en otros clientes
La criptografía no es una moda o algo que se invento de un par de años a la fecha, es una serie de técnicas y métodos tan antigua como la propia humanidad Y aunque ahora la tecnología nos permite algo mas confiable, no es algo que muchos de nosotros usemos o que incluso, conozcamos.
GnuPG o simplemente GPG, es un programa de código abierto que remplaza a la suit de criptografía PGP y que utiliza el estándar denominado OpenPGP, así que eso ya es un punto bueno para su uso. Este pequeño cifra mensajes usando un par de llaves asimétricas que deben generar ustedes, pero también se puede añadir una firma para demostrar que ustedes, mis niños, son los autores del mensaje en cuestión y que no es algún mono haciendo de las suyas a su nombre.
Hasta aquí se escucha bien y... ¿Cómo demonios se usa?
GPG se usa por medio de la consola de comandos, aunque existen implementaciones en entorno gráfico que te ayudaran a la creación, exportación y administración de tus llaves, pero hoy no les enseñare a usar alguna de ellas, si no que lo haremos de nuevo de la forma artesanal, así es, por medio de nuestra amiga consola.
lo primero que debemos hacer es tener instalado gpg, que ya casi la mayoría de unix o BSD's ya tienen por defecto, si no es así para su linux favorito, pueden descargarlo de su gestor de paquetes o bien, bajar el código y tener un buen rato de soledad compilandolo.
Una vez instalado, no requieren ser todo poderoso alias, root para su ejecución, tan solo tener ganas de hacer las cosas.
Así que vamos a crear las llaves con el siguiente comando, recuerden que esto es solo una bella receta, pero pueden agregar sus ingredientes preferidos viendo el manual de gpg en su linea de comandos con man.
$gpg --gen-keyEsto les dará una salida, pero que aun así, será interactiva y les pedirá los parámetros necesarios de forma amigable y que les dirá donde pondrá los archivos creados con extención gpg.
Como gpg nace con la insignia de libertad, no usara algoritmos privativos o con patentes como IDEA, que es la piedra angular de pgp, así que usara algoritmos como ELGamal, CASTT5, Triple DES, AES y blowfish.
Siendo DSA y ELGamal sus algoritmos por defecto, los dejará escoger algún otro que ustedes prefieran, así mismo les dirá que usara una llave de 1024 bits, pero que igual, podrán decirle que quieren algo mas de bits, por ejemplo, ya es recomendable usar 2048 o por que no, ponernos serios con 4096 bits para que... no sé, tengan mas tranquilidad en sus almas a la hora de cifrar o firmar sus mensajes.
También les pedira que indiquen si quieren que sus llaves tengan una fecha de caducidad o que sean eternas, esto ya dependerá de sus gustos o paranoia a la hora de pensar en compartir su llave publica.
Otros datos importantes y que no deben de dejar si llenar serán:
- su nombre real
- dirección de correo electrónico
- un comentario (Opcinal)
- Y si, una clave de paso (Recomiendo que lo hagan, por si su llave privada cae en manos nada confiables)
Administrar tus llaves es tu responsabilidad, ya que puedes crear tantas como requieras, una para los amigotes, para la novia, para tu trabajo, etc, etc, etc, por lo cual uno siempre debe saber cual es cual y tener una idea para poder hacer el buen uso de ellas, así que gpg nos da la opción de listarlas mediante dos argumentos al comando gpg
$ gpg -ko bien
$ gpg --list-keys
Esto nos desplegara la longitud de las llaves publicas y privadas, así como en usuario (Tu nombre) y un hash que las identificará, algo así como:
/home/uetiko/.gnupg/pubricng.gpgPero eso ¿qué carajos quiere decir?, digo, se ve padre y esta bien chido, pero en que idioma esta... Bien, con calma chamacos.
--------------------------------------
pud 2048D/CA5B3485 2014-07-05
uid Uetiko
sub 2048C/EF7A4E93 2014-07-05
- pud: Es la llave publica.
- sud: es la llave privada
- 2048D: Es la longitud de bits que escogieron.
- CA5B3485: Es el ID de la llave.
- Uetiko: Es el nombre real de ustedes (Bueno... debe ser su nombre real por convención y buenas practicas)
Para ello podemos exportarlas en formatos amigables y así seguir manteniendo una comunicación segura usando los clientes que queramos usar. Y para ello exportaremos las claves por partes, primero la publica para pasarla a nuestros amigotes y luego la privada, para que la usemos en nuestros clientes de confianza.
Exportando la llave publica
Como gpg tiene muchas opciones para nuestros gustos mas exquisitos, podemos usar una forma simple, pero muy buena para cocinar nuestra llave publica en ese formato amigable que deseamos.
$ gpg --armor --export> miLlavePublica.asc
Esto nos dará como salida algo asi como:
-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.0.1 (GNU/Linux)Comment: For info see http://www.gnupg.orgmQGiBDkHP3URBACkWGsYh43pkXU9wj/X1G67K8/DSrl85r7dNtHNfLL/ewil10k2q8saWJn26QZPsDVqdUJMOdHfJ6kQTAt9NzQbgcVrxLYNfgeBsvkHF/POtnYcZRgLtZ6syBBWs8JB4xt5V09iJSGAMPUQE8Jpdn2aRXPApdoDw179LM8Rq6r+gwCg5ZZapGNlkgFu24WM5wC1zg4QTbMD/3MJCSxfL99Ek5HXcB3yhj+o0LmIrGAVBgoWdrRdBIGjQQFhV1NSwC8YhN/4nGHWpaTxgEtnb4CI1wI/G3DK9olYMyRJinkGJ6XYfP3bcCQmqATDF5ugIAmdditnw7deXqn/eavaMxRXJM/RQSgJJyVpbAO2OqKe6L6Inb5HkjcZA/9obTm499dDMRQ/CNR92fA5pr0zriy/ziLUow+cqI59nt+bEb9nY1mfmUN6SW0jCH+pIQH5lerV+EookyOyq3ocUdjeRYF/d2jl9xmeSyL2H3tDvnuE6vgqFU/Nsdvby4B2Iku7S/h06W6GPQAe+pzdyX9vS+Pnf8osu7W3j60WprQkUGF1bCBHYWxsYWdoZXIgPHBhdWxnYWxsQHJlZGhhdC5jb20+iFYEExECABYFAjkHP3UECwoEAwMVAwIDFgIBAheAAAoJEJECmvGCPSWpMjQAoNF2zvRgdR/8or9pBhu95zeSnkb7AKCm/uXVS0a5KoN7J61/1vEwx11poLkBDQQ5Bz+MEAQA8ztcWRJjW8cHCgLaE402jyqQ37gDT/n4VS66nU+YItzDFScVmgMuFRzhibLblfO9TpZzxEbSF3T6p9hLLnHCQ1bDHRsKfh0eJYMMqB3+HyUpNeqCMEEd9AnWD9P4rQtO7Pes38sV0lX0OSvsTyMG9wEBvSNZk+Rl+phA55r1s8cAAwUEAJjqazvk0bgFrw1OPG9m7fEeDlvPSV6HSA0fvz4wc7ckfpuxg/URQNf3TJA00Acprk8Gg8J2CtebAyR/sP5IsrK5l1luGdk+l0M85FpT/cen2OdJtToAF/6fGnIkeCeP1O5aWTbDgdAUHBRykpdWU3GJ7NS6923fVg5khQWguwrAiEYEGBECAAYFAjkHP4wACgkQkQKa8YI9JamliwCfXox/HjlorMKnQRJkeBcZiLyPH1QAoI33Ft/0HBqLtqdtP4vWYQRbibjW=BMEc-----END PGP PUBLIC KEY BLOCK-----Bien, ya podemos descansar un poco, pero el problema es que esto es la publica... Y la privada? Por que la necesitamos nosotros para cifrar o firmar nuestros preciados mensajes... Bien, usando el siguiente comando podremos exportar esa preciada llave que debemos guardar lo mejor posible.
$ gpg --export-secret-key -a > miLlaveSecreta.ascEsto nos generara una salida parecida a la anterior, pero nos dirá que es private y no public, por lo que ya podremos hacer uso de esta llave en nuestros clientes que no soportan la extensión de gpg.
La privacidad es un derecho que debemos tener, pero es su responsabilidad crearla y mantenerla de esta forma.
Con amor: Uetiko.
martes, 2 de marzo de 2010
La vida tras el lente.
El resultado fue la foto de arriba (Y mi Flickr), con la cual termine por jubilar al pobre cel que al rededor de un año me acompaño fingiendo ser una gran cámara. Ahora salimos corriendo por una cámara Sony Alpha para poder seguir con este ocioso trabajo de seguir tomando fotos y más fotos a diestra y siniestra. La verdad es que me es muy divertido y bueno, espero poder comprarle un lente el próximo mes. Pero eso será con mas tiempo y calma, por lo mientras les dejo una de las fotos que saque con la nueva integrante de la familia.
lunes, 8 de febrero de 2010
Happy
lunes, 23 de noviembre de 2009
De pasadita!
martes, 13 de octubre de 2009
Notas sobre Java (Teoría)
Historia.
En 1991 se creo un proyecto interno en Sun Microsystem denominado Green. El plan era desarrollar un lenguaje basado en C++ que en un inicio se llamo Oak, culpa de un roble que se podía ver desde la oficina de James Gosling, su creador. Pero ya existia un lenguaje con ese nombre, por lo que mas adelante se le llamo Java, cuando un grupo de generentes visitaron una cafetería local.
Java fue creado para el mercado de dispositivos electrónicos inteligentes. Por desgracia, la proyección de Sun fue errónea y este tipo de dispositivos no se desarrollaban tan rápido. Así que el proyecto corrió con la suerte de ser cancelado. En 1993 exploto la popularidad de Internet y los chicos de Sun se dieron cuenta de que Java podía agregarle Dinamismo a las estaticas paginas creadas en html vil y villano.
En 1995, Sun Microsystem dio a conocer Java dentro de una conferencia y su fuerte fue los actuales y extintos Apples dentro de las paginas de Internet y se gano el corazón del mundo de los negocios, así como aplicaciones para dispositivos móviles como los celulares y radiolocalizadores.
Java se divide en tres ediciones que son:
- Java Standar Edition (Java SE).
- Java Enterprise Edition (Java EE) Orientada a las aplicaciones de redes a gran escala y aplicaciones basadas en web.
- Java Micro Edition (Java ME) Orientada al desarrollo de aplicaciones para dispositivos moviles con memoria limitada.
La programación en Java pasa por 5 etapas:
- Edición
- Compilación
- Carga
- Verificación
- Ejecución
En esta primer etapa, es la parte donde escribiremos el programa ayudados por un editor. Posterior mente guardaremos el archivo bajo la extención '.java'.

Por ejemplo, suelo usar los editores vi o emacs para entornos Linux, pero para el campo de guerra necesitamos poder. Para ello existen los Entornos de desarrollo integrado (IDE's).

Entre los mas populares tenemos:
Etapa 2
Para compilar un archivo .java, es necesario hacerlo con el archivo javac, que es el compilador.
Por ejemplo, supongamos que trabajamos con vi para hacer un pequeño programa y es hora de saber si podemos seguir o nos detenemos a ver errores. Desde una shell podemos hacer lo siguiente:
[Sugizo@old ~]$javac HolaMundo.java
si no detecta ningun error, nos generara un archivo '.class' a la cual llamamos 'Byte Code' que será lo que la Maquina Virtual de Java (JVM) usara para hacer las tareas que hemos escrito.
Para ejecutar este programa es tan fácil como escribirn en nuestra terminal lo siguiente:
[Sugizo@old ~]$java HolaMundo
Y veremos en terminal o por Interface grafica de usuario (GUI) el resultado.
Etapa 3
Para poder ejecutar el programa, este debe cargarse primero a memoria, de lo que se encarga el cargador de clases. el cargador también carga cualquiera de los .class de las librerías que el programa use.
Etapa 4
A medida en que se cargan las clases, existe un componente interno conocido como el verificador de Byte Code que examina las clases para asegurar que sean correctos y no violen las restricciones de seguridad.
Etapa 5
En este punto, la JVM ejecuta los Byte Code. Antes esta parte era la mas pesada ya que la Maquina virtual interpretaba bytecode por bytecode, ahora es mas eficiente gracias a algo llamado Just in time (JIT), esto hace que se interpreten a medida de que busca puntos activos del programa. Es decir, partes del codigo que se ejecutan con frecuencia.
Ahora bien, instalar Java en Windows es tan fácil como dar doble click. Pero para hacerlo desde linux, basta seguir estas instrucciones.
Besitos.
jueves, 20 de agosto de 2009
Programando pic's desde linux. (config.inc)
Básicamente diremos lo siguiente.
- Puerto A fue usado para el convertidor analógico digital RA0, RA1, RA2 (Valores de referencia), RA3 (Valores de referencia), RA4 y RA5.
- Puerto B para uso de teclado por su patita RB0/INT Que genera interrupción, y por que se puede programar las patitas RB4-RB7 como interrupción por cambio de estado.
- Puerto C, uso de Led's o cualquier otra cosa que le quieran colgar.
- Puerto D, bus de datos para la pantalla LCD.
- Puerto E, lineas de control para LCD.
;************************************************
;Libreria de configuración general del pic.
;***************************************************
;Configura la direccionalidad de los puertos del PIC
Init_Config
bcf STATUS,RP0
bcf STATUS,RP0
clrf PORTA
movlw b'11110000' ;Configiración del puerto B para el teclado
movwf PORTB
call Init_interrup
bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISC
clrf TRISD
clrf TRISE
call Init_ADC
bcf STATUS,RP0
return
;******************************************
;Habilitando interrupciones
Init_interrup
movlw b'11111000'
movwf INTCON
return
;******************************************
;Rutina de configuración del ADC
Init_ADC
;bsf STATUS,RP0
;bcf STATUS,RP1
movlw b'10001100' ;configuramos las entradas del ADC para abrir 3 canales
movwf ADCON1 ;y tener dos valores de referencia.
bcf STATUS,RP0
movlw b'01000000'
movwf ADCON0
return
;******************************************
;Rutina de configuración del Timer1
TMR1_Config
clrf T1CON
bsf STATUS,RP0
bcf STATUS,RP1
bcf PIE1,TMR1IE ;Inhabilitando el desbodamiento del TMR1
bcf STATUS,RP0
clrf TMR1L
clrf TMR1H
bsf PIE1,TMR1IE
movlw 0x36
movwf T1CON
return
Lo basico e indispensable.
miércoles, 29 de julio de 2009
Programando pic's desde linux. (ADC)
Así que hoy para variar, me he puesto a darle duro a esto para poder partir en mas fragmentos y mejor documentados, por lo que la configuración quedo dividida en los una rutina mas para la configuración del ADC y una para la configuración general del PIC.
org 0
call Init
call ADC_Config
goto Principal
org 4
retfie
Y con esto tenemos un mejor panorama de la configuración del modulo de ADC del PIC. Basta señalar que Init solo configura los puertos de entrada y salida. Pero ADC_Config se limita a configurar el modulo como esta a continuación.
ADC_Config
;Cambiando al banco 1 para configuracion del ADC
bsf STATUS,RP0
bcf STATUS,RP1
;Desactivando las interrupciones
clrf INTCON
clrf PIE1
;Configurando las patitas del puerto A
movlw 0x8F
movwf ADCON1
;Cambiando de banco. Y con esta linea arreglamos el problema que teniamos con el mal funcionamiento del pic.
bcf STATUS,RP0
;Seleccionando la frecuencia de reloj para la conversión. Fosc/8
;ADCS1=0
;ADCS0=1
;ADON=1
movlw 0x41
movwf ADCON0
;Configurando el bit de estado de la conversión.
;GO=1. Iniciandoce la conversión.
bsf ADCON0,GO
return
Y con esto resolvemos el problema de sobre escritura de ADCON1. y podremos seguir. Ya les ire poniendo mas cosas para que podamos seguir experimentando.
miércoles, 13 de mayo de 2009
De la música y sus recuerdos.
Ya varios lectores me han pedido que regrese la entrada de recuerdos y música. Hoy les he hecho caso ya que no veo el por que no deba subir mis memorias que son libres.
De la entrada original le he cambiado algunas cosas dejando la idea integra.
A lo largo de mi vida he tenido la fortuna de conocer a varias personas con las cuales he podido hablar de música y de otros temas más que son muy interesantes. Entre muchas platicas con estas personas, uno de estos artistas he llegado a ser Bjork, una cantante y compositora islandesa que desde hace ya varios años he seguido.
Cuando entre a trabajar a la Ford, que se encuentra en Santa Fe, frente a la universidad Ibero Americana.
Cada día me hacia un tour para poder entrar a las 8 de la mañana. Entre microbuseros y metro, lograba llegar al trafico de Vasco de Quiroga hasta el entronque de la autopista México-Toluca. Del cual hemos de decir que es de medio salvaje a muy intenso en las mañanas y tardes. No olvidemos los días de lluvia, por que nadie sale de Santa Fe con eso. Durante ese viaje de cada mañana siempre iba escuchando el iPod (o iPot o aipol) y me hice muy amigo de muchas melodías, algunas que me ponían nostálgico, otras que me llenaban de vigor y otras que solo me hacían pasar un buen rato.
La letra es tan incomprensible como cualquier acto amoroso que uno pueda generar de buenas a primeras. Justificas cualquier cosa durante casi toca la canción, cualquier idea y tratas de purificar y purificarte con ideas, sueños, recuerdos para eliminar cualquier mal sabor de boca. Y todo esto para terminar de golpe aceptando lo que ya sabes y lo que es la realidad. Amas y estas herido, te hieres por amor y solo quieres esperar algo que ni tu mismo sabes.
Y esto te hace terminar escuchando un track de 3 horas mientras dices: ¿Por qué te haces eso a ti mismo?
Seguiremos en la próxima recordando mas canciones y experiencias de vida.
viernes, 8 de mayo de 2009
viernes, 24 de abril de 2009
entre
retando al futuro que siempre me cambia
y que no quiero entender
Despierto desde temprano
simplemente para crear mi ejercicio favorito
Entre los tumultos del futuro
y término entendiendo que tengo miedo de entrar a la ducha
desde el comienzo hasta el inevitable final
Siempre mantengo mis manos lejos de mi
No es que me deje solo
simplemente nunca estuve ahí
De cualquier forma
Leo mi futuro
Ahora lo puedo hacer
domingo, 19 de abril de 2009
Cuentos cortos para sueños largos.
visto de velo, mascaras y sonrisas
cubro mi rostro con bellos tatuajes
hermosas telas cubren mi cuerpo
fina piel adornan mis pies.
Por mí? Por decir?
Donde estoy?
De noche desgarro mi piel
De día busco la redención en tus brazos
Te llamo... Pero sin aparente resultado
mi voz resumbá en el cielo con fuerza.
Miento, chantajeo, encubro las cosas
camino sin rumbo fijo entre los muertos
y en los campos dejo de entender al mundo
Todo ello para poder contar la verdad
Y las cosas que siento
tu jamás las sabrás.
martes, 14 de abril de 2009
De los deseos
Sigue ese camino lleno de mentiras
Oh, si. Eso es lo que deseo de ti
excita mi deseo, desborda mi pasión
Puedes venir cuando quieras
lo siento, me encanta jugar este juego
Por que te ves como una cereza
Y deseo explorarte
sábado, 4 de abril de 2009
Confeción
Ordenados por las voces rabiosas en mi cabeza
doblegadas por el ser de mi mirada.
Sin ganas de gritar.
Todo llega completamente quieto
no podemos estar tan distantes
mientras la soledad es nombrada
Dulcemente vienes y dulcemente te vas
apareces y desapareces sin voluntad
Perdiendonos entre versos amorosos
Te pareces tanto a mi y eres diferente
que te revuelcas en mi felicidad
blasfemando de Dios
Pero te sigo adorando
No estaremos apatados jamás
Murmurar ahora no sirve de nada
Es el lugar donde los lamentos no tienen nombre
El remordimiento y la redención desaparecen.
Duele estar vivo lejos de lo que se ama
es la mentira que escogimos para los dos
nuestros dulces labios resecos
nuestros cuerpos apartados entre las sabanas
Murmura en mi oído que me amas
vuelveté loco al saber de mi
desborda tu amor sobre el único recuerdo
por que yo no estoy ahí.
blasfemas


