Mostrando las entradas con la etiqueta lenguajes. Mostrar todas las entradas
Mostrando las entradas con la etiqueta lenguajes. Mostrar todas las entradas

miércoles, 14 de diciembre de 2011

Los acentos y las aplicaciones Qt

Retornando a clases, volví a desempolvar varios programas que tenía instalados hace tiempo pero que ni había usado, como es el caso de Anjuta, que aproveché que en Debian Testing está ya en su versión 3.2.2, y RStudio, un espectacular IDE para programar en R, un lenguaje estadístico bastante poderoso y que ha tenido una grandísima inversión en los ultimos años.

RStudio está hecho con Qt4, el framework para crear aplicaciones multiplataforma (funciona en los típicos Windows, MaxOSX, y Linux, además de muchos modelos de Celulares Nokia, y hasta en Android ). Bastante poderoso, aunque en lo personal me gusta más Gtk, y cuando son programas multiplataforma, el ya nombrado wxWidgets (que en su próxima versión, vendrá portado a Gtk3).

Dadas las bondades que trae Qt, no me extraña que los creadores de RStudio lo hayan escogido. Sin embargo, tuve un problema con las tildes... no podía escribirlas y salían siembre as`i, muy molesto, sobretodo porque con los años me he acostumbrado a ir poniendo las tildes automáticamente cuando escribo. Yo ya sabía que tenía este problema pues con el Skype sucedía lo mismo, aunque con él nunca sufrí porque no lo uso mucho, pero con el RStudio... documentar código sin tildes no es algo que me agrade <_<


Solución al problema de los acentos en Qt

Básicamente, en la red ya circulaba una solución, que incluía la instalación de scim, pero al día de hoy, scim ya no se usa en general, pues ha sido sustituido en su mayoría por iBus que es más potente. Así que, esa solución no va a funcionar actualmente en la mayoría de los casos.

Por lo que la solución vendría siendo, instalar el paquete de iBus para qt (lo más probable es que el iBus de gtk ya lo tengas):
sudo aptitude install ibus-qt4
Y luego, ir a editar el archivo profile del sistema con:
sudo gedit /etc/profile
y agregar estas lineas al final:
#iBus para QT
export QT_IM_MODULE="ibus"
y obviamente reiniciar el pc para que la variable del sistema quede activa.

Para saber si todo está bien, basta con escribir en el terminal echo $QT_IM_MODULE, y ver que nos devuelva ibus.
En teoría esto es cuando se tienen problemas con Qt, quizás si el problema es al revés, ie: aplicaciones Qt bien, y Gtk mal, haciendo lo mismo pero con GTK_IM_MODULE se solucione...

Saludos!, y espero que les funcione ^^U


https://code.google.com/p/ibus/wiki/Install#Run_gnome,_kde_or_old_X_applications

Update:

Después de pelear recientemente otra vez con el problema de las tildes en skype, dí con otra solución que es todo lo contrario a la anterior, por si esa no les funciona:

Antes de abrir skype, deberían de eliminar la variable de entorno "XMODIFIERS", con esto, se evita que el ibus intervenga en la gestión de la escritura... sí, se pierde las capacidades para escribir en otros idiomas, pero ganamos la posibilidad de poner las tildes. Esto se hace con el comando:
unset XMODIFIERS

Así que podemos crear un script para abrir el skype de esa forma, que contendría lo siguiente:

#!/bin/bash

unset XMODIFIERS
skype &

Hacen un archivo de texto en /usr/bin con el nombre que quieran, y le dan permisos de ejecución con chmod +x y listo.


lunes, 3 de octubre de 2011

CSS, un juego de niños

Hace poco mi primo estuvo preguntándome mucho sobre CSS, ya que está viendo una materia sobre desarrollo web en la universidad.
Fue mucho lo que le expliqué por Skype, pero al final, quise escanearle un pequeño libro (menos de 100 paginas) que tengo sobre CSS, que lleva el mismo titulo de esta entrada. El libro es una muy buena y firme introducción al desarrollo de paginas web usando CSS. muy recomendable para cualquiera.

Existe ya una versión del libro circulando en Internet, pero esta versión que yo escanee, viene con al ultima página restante, además de tener una calidad muy superior, y estar a color, de ahí el peso.

Considero que a esta época, un archivo de 75MB no es exageradamente pesado de descargar y almacenar, además que la calidad es apreciable a la vista, y lo vale:

http://www.megaupload.com/?d=FVLTM4IL
http://www.mediafire.com/?r26api9jhnhac40

Saludos!! :D

EDIT: Resubido por MediaFire (esperemos que no se caiga pronto ^^U )

sábado, 13 de agosto de 2011

Instalación fácil de SQL Developer en Debian y Ubuntu

En el Post anterior, escribí sobre Oracle11g.
Este por defecto viene con un editor/interprete de PL/SQL se se llama SQL*Plus. Es extremadamente simple, no tiene en verdad ningún atractivo, y puede ser un poco difícil escribir, ya que no maneja un "cursor" para desplazarse por el texto (eso significa, que si te percatas de un error al inicio de la instrucción, hay que borrar todo <_<).


Así que un amigo (gracias @andr3s22) me recomendó mejor instalar el SQL Developer, un IDE hecho por Oracle especializado justamente en PL/SQL, así que, para instalarlo se debe bajar la versión para la plataforma de preferencia:
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html


Muy bueno, como está escrito en Java es multiplataforma, pero como es normal con estos de Oracle, solo tienen el .rpm para Linux <_<
Afortunadamente en los repositorios de Debian (y por consiguiente en los de Ubuntu) hay un paquete que permite muy fácilmente, crear un paquete .deb con base en el .zip (el que dice "Oracle SQL Developer for other platforms"). Aunque podríamos usar el .zip directamente sin muchos inconvenientes, es mucho mejor usar el método que describiré, ya que así es más limpio a la hora de actualizar y de una vez deja todos los iconos en su lugar (y nos ahorra mucho de configuración).


Cómo hacerlo...
1) Descargar el paquete sqldeveloper-package, que es el que hará todo el trabajo "sucio" por nosotros ;D
sudo aptitude install sqldeveloper-package

2) Debemos ir (desde consola) a la carpeta donde tengamos el .zip del SQL Developer, y digitamos lo siguiente (recuerden que si quieren ver todos los parámetros posibles, pueden escribir -h ):
make-sqldeveloper-package sqldeveloper-3.0.04.34-no-jre.zip
Esto dejará un .deb listo para instalar en la misma carpeta. Obviamente, debemos instalarlo :)


3) Al abrir por primera vez el programa (que se encuentra en el menú Programación), nos va a salir un terminal pidiéndonos que le demos el path de Java ("Type the full pathname of a J2SE installation"). En Debian y Ubuntu, si tenemos instalado los paquetes java-6-sun, el path sería /usr/lib/jvm/java-6-sun, OJO, porque este path cambiaría si estamos usando OpenJDK.

Una vez lo escribamos y le demos enter, el SQL Developer cargará sin problemas.


Saludos! ^^


Edit: Luego de varios días me di cuenta que SQL Developer no lograba conectarse a la base de datos, aun cuando SQL*Plus si podía. Me salía un error que decía "The network adapter could not establish the connection", lo que me llevó a investigar un poco, y resultó que era problema con los listeners para conectar con la base de datos... la solución fue, ir a la carpeta /u01/app/oracle/product/11.2.0/xe/network/admin/ y ejecutar lo siguinete:
sudo mv listener.ora listener.ora.sav
Ya luego podemos reiniciar la base de datos (pararla y volverla a iniciar). Se puede hacer manualmente los listeners (no como root, ie, sin sudo) así:
/u01/app/oracle/product/11.2.0/xe/bin/lsnrctl start

Oracle Database 11.2 Express Edition Beta en Ubuntu y Debian

Luego del fiasco que fue lo de mi exposición en el #BarCamp Campus Party (No la pude dar por problemas técnicos con el stream <_< ) y por otras situaciones varias anduve algo deprimido, con lo que la escritura en el blog pues, ya ven que se vio algo afectada ^^U
Pero bueno, hace un par de semana empecé la universidad otra vez, y como siempre, llega la hora de probar herramientas nuevas que, como "cosa rara", no funcionan del todo bien en Linux.

Este semestre estoy viendo Bases de datos 2, materia en la cual se enseña PL/SQL, el lenguaje de programación basado en SQL para bases de datos. El SQL puro permite administrar bases de datos de una forma mucho más simple a como se haría de una forma no estandarizada, pero, para procedimientos más complejos o extensos, se queda corto o es mucho más trabajoso realizarlos.

Por eso se inventó SQL/PSM, una adición al SQL normal que lo extiende convirtiéndolo en un lenguaje de programación completo. SQL/PSM es un estándar, y como tal, existe múltiples implementaciones, prácticamente una para cada base de datos. MySQL, PosgresSQL, Oracle, etc..., todas tienen su implementación, y en particular, la implementación de Oracle se llama PL/SQL, y para poderla usar pues hay que instalar su base de datos.

Ellos tienen una versión Express que es gratuita para uso personal, pero, lamentablemente la versión 10g Express (estable en este momento) para linux solo viene compilada para 32bits (i386), y en mi maquina que es de 64bits, y que hoy en día es lo más común, es un poco incomodo poderlo instalar.
Afortunadamente, me percaté que la versión 11g Express está en beta en este momento, y que venía para Linux a 64bits (Aleluya!), pero, solo en .rpm y no en .deb, lo cual no es agradable cuando se usa Debian como yo lo hago (tampoco para los n00bs que usan Ubuntu :P ).

Para poderlo usar, al menos mientras sale la versión final, tuve que convetirlo a un .deb usando alien. Para ahorrarles trabajo, les dejo el .deb ya convertido (pesa 273MB):
http://www.megaupload.com/?d=5Y2OSLOI
Update: Como todos saben, luego de lo sucedido con Megaupload, muchas cosas importantes se perdieron, entre ellas, el instalador... y como no tenía backup del mismo tuve que rehacer el instalador, así que aquí dejo de nuevo el .deb en un folder de Mediafire (pesa como 305MB):

http://www.mediafire.com/?i41ystin31fn4

Cómo instalarlo:
1) El .deb está convertido sin organizarlo bien, así que no instala las dependencias, por lo que primero deberíamos instalarlas:
sudo aptitude install libc6 libaio1

2) Luego se instala el .deb dándole doble clic, o si se prefiere desde consola con dpkg:
sudo dpkg -i oracle-xe_11.2.0-2_amd64\[rpm-alien\].deb

3) Debemos configurar las variables de entorno para que luego no nos falle al intentar conectarnos con algún programa como el SQL*Plus.
En el archivo ~/.profile debemos anexar estas dos lineas:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe/
export ORACLE_SID=XE

4) Para configurar el Oracle11g, hay que ejecutar el siguiente comando, y poner en cada opción, lo que les sugieren dentro de los [corchetes], obviamente, cuando pida la contraseña del usuario administrador (siempre se conoce como SYSTEM), no saldrán los corchetes:
sudo /etc/init.d/oracle-xe configure

Una muestra en esta imagen:



5) Por ultimo, agregamos nuestro usuario al grupo dba, esto es, el grupo de usuarios que pueden usar bases de datos. Esto se puede hacer gráficamente desde la aplicación "Usuarios y grupos" del menú Sistema->Administración.
Update: en gnome 3, quizás haga falta instalar el paquete gnome-system-tools.


6) No olvidar que cuando necesitemos la base de datos, pues hay que inicializarla:


NOTAS ACLARATORIAS:

Espero que esto sea de utilidad mientras sale la versión final del Oracle Express Edition 11g.

miércoles, 8 de junio de 2011

Scala, el lenguaje que va a dar de qué hablar

Ayer hice algo "estúpidamente interesante". Este año asistiré al CampusParty Colombia, (#cpco4) junto con bastantes personas de la universidad, y la verdad, no puedo estar más emocionado con el asunto. Llevo ahorrando desde inicios del año para eso, y definitivamente no pienso solo ir en "plan turista", por eso me inscribí para participar en el #BarCamp que se hará allí mismo; el titulo de la desconferencia que voy a dar se titula "El lenguaje Scala... porque hay vida después de Java" jajajaja!, si, Java no está muerto, pero es un lenguaje al que se le está notando la vejes.

Qué es Scala
Scala es un lenguaje de programación que apareció en el 2003, Orientado a Objetos (más que Java incluso, aunque en principio no lo parezca), y Funcional (es decir, con toques de los lenguajes declarativos). Aunque esta mezcla suene "efervescente" y hasta dañina, en la practica se ha visto que la combinación da buenos resultados, como es el caso de Python.
Sin embargo, compararlo con Python está mal, ya que ni siquiera le ha influenciado (Java, Pizza, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk y Scheme, si lo han hecho xD ). Realmente, con solo conocer sus influencias, algunos se asustarán, pero viéndolo desde la otra cara de la moneda, hay que ser sinceros: Java en verdad es un lenguaje feo. No digo que no sea útil, ni que sea un mal lenguaje, pero si se ha quedado en una posición tan estricta con su cantidad de sintaxis, que muchos le tenemos pereza a escribir en él.
De nuevo mirando a los ancestros de Scala (interpretese "ancestros" como los ancianos de antaño, llenos de cualidades y conocimientos que los jóvenes ansían alcanzar), cada uno tiene cosas particulares que lo hace útil en su campo de acción. Puede que no sean los más populares, pero hay cosas que simplemente es mejor hacerlas en ellos para no quebrarnos la cabeza. Además como plus... Scala es más elegante de escribir que Java :)

¿Porqué dar una desconferencia sobre Scala?
Bueno... Scala es un buen lenguaje de programación, quizás no muy intuitivo para mentes no "funcionales" (o.o  de lenguajes funcionales jajaja), pero que definitivamente ha probado su utilidad en el campo de batalla: Twitter y Foursquare son dos servicios web escritos en Scala. El primero es archi-conocido, y de hecho, desde que pasaron parte de su sistema a Scala la cantidad de caídas en el sistema ha menguado considerablemente, la famosa "ballena de la muerte"(link) ya no se ve tan a menudo como antes. Por otro lado, Foursquare no es tan conocido por estos lugares (más que todo porque los dispositivos con localización no son tan difundidos por lo costosos), pero según sus desarrolladores, el sistema les ocupa solo 14000 lineas de código... eso es un proyecto lo suficientemente pequeño para ser mantenido por un equipo pequeño de desarrollo, pensando además lo complejo que sería de mantener en otro lenguaje.

Por eso y más, la gente debería conocer Scala. Poco a poco va tomando fuerza de la mano de bibliotecas y Frameworks que se van creando con él. Dos ejemplos que puedo dar son Lift, un framework web inspirado en Django, Ruby on Rails, y otros frameworks no tan conocidos, que se jacta de ser "el más seguro hoy en día"... por algo será. El otro es Akka, una biblioteca para sistemas críticos concurrentes, más general que Lift, y que coloca en bandeja de plata la facilidad de crear este tipo de sistemas de forma fácil y mantenible.

Hay mucho más que comentar sobre Scala... su propio diseño y arquitectura son bastante interesantes, pero... eso lo escribiré después, aunque seguro lo escucharán en la desconferencia ;D

¡¡Nos veremos en el #BarCamp!! (si es que algún amigo mio graba mi conferencia y la pongo por aquí :P )

sábado, 4 de junio de 2011

Como usar CLIPSJNI junto con Java


"Fin de semestre: tres palabras que te hacen feliz", y más aun cuando el resultado de las notas y las materias salen bien. Como vieron en el post anterior, estuve ocupado haciendo un sistema experto para el curso de inteligencia artificial, al final, hasta hice una guía de como hacerlo funcionar correctamente (con base en los ejemplos con los que viene el CLIPSJNI)... cabe anotar que me dieron una buena bonificación en la calificación final del curso por hacerlo ^_^ .
Como buen seguidor del Software Libre, dejo el link al repositorio del código del sistema experto, bajo licencia GPLv2. En la carpeta docs, está el PDF y el ODT de la guía que he hecho.
Espero que quien encuentre esto, le sea de mucha utilidad:

sábado, 23 de abril de 2011

Sistemas expertos con CLIPS y Java mediante CLIPSJNI


Estoy viendo en la universidad Inteligencia artificial. En mi universidad, es la materia básica que sienta las bases para los demás cursos sobre el tema. El tema principal de la materia, en mi caso, es sobre los sistemas expertos, que son eso, sistemas que pueden razonar como un experto en un tema especifico.
Para poder crear un sistema de razonamiento de este estilo, se hace necesario lo que se conoce como un “motor de inferencias”, el motor permite analizar los datos (hechos) y tomar decisiones sobre ellos (usando reglas). Su funcionamiento es sencillo realmente, ya que simplemente hacen algo como: “si este hecho, o estos hechos en conjunto, se dan, entonces hay que hacer esto otro...”.

La teoría es fácil, y ya existen herramientas para crearlos más abstractamente (es decir: fácilmente). Una de ellas es CLIPS, una biblioteca escrita en C que es un motor de inferencias creado para la Nasa. El problema es que para una aplicación real para usuarios reales CLIPS solo no puede usarse (amenos que queramos volverlos locos ;D ). Hay que combinarlo con otros lenguajes que permitan hacer cosas útiles con el motor, y que escondan lo suficiente las cosas aburridas a los usuarios finales. En mi caso, desdí usar java (#fail), ya que el profesor nos daría una bonificación en la nota por eso D:

Para eso hay dos posibilidades: usar JESS, una implementación del lenguaje de CLIPS pero hecho en java, o usar CLIPSJNI... por el titulo ya saben que opté por usar este ultimo, ya que el JESS me parece más “sucio”, ya que tocaría mezclar muchos conceptos de CLIPS y de java. En cambio con CLIPSJNI es más separado en ese aspecto y a mi criterio, más limpio.

Lamentablemente a la hora de bajarlo para usarlo, me di por enterado que solo daban los binarios para Winbug y para Mac... y para linux debía ser compilado.
La verdad es la cosa más sencilla del mundo, nada fuera de lo común, un simple make -f makefile.linux y ya... “ja ja”, la verdad es que no; salió un error que decía que tenía problemas y que debía re-compilar usando el parámetro -fPIC en el gcc... además de eso hay que especificar donde está java en el computador.

/usr/bin/ld: agenda.o: relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
agenda.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libCLIPSJNI.so] Error 1

En debian hice así:

En la linea 33 es donde está especificado los argumento que debe usar el gcc para la compilación general, solo se le anexa el -fPIC en cualquier lado(obviamente un lugar valido...).
Y en la linea 39, que es donde se arma el libCLIPSJNI.so también debe anexarse el -fPIC y debe especificarse el path de Java, en mi caso quedó así:

gcc -o libCLIPSJNI.so -fPIC -shared -Wall -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -lm $(OBJS) CLIPSJNI_Environment.c
El error que sale está explicado en esta pagina del wiki de gentoo, y se da por la arquitectura de 64bits... Espero que les sirva esto por si tienen problemas ^_^

martes, 1 de marzo de 2011

Sobre los lenguajes de script

Quizás una de las cosas que más me gusta, y a la que más le encuentro satisfacción (además de comer...) es aprender lenguajes de programación.

Cuando ingresé a la universidad, no sabía en realidad lo que quería con ello... es decir, yo entré a estudiar informática no porque quisiera ser hacker o una cosa así, sinó porque sabía que siempre me había ido bien con los computadores, y que si no me dedicaba a esto, terminaría siendo historiador... jajaja!

Así fue como me inspiré y logré pasar a la universidad al tercer intento (universidades publicas ftw! ). El primer semestre aprendí C, el segundo semestre aprendí C++, el tercer semestre aprendí Java, el cuarto semestre aprendí Scheme y Maude (de la familia de Lisp), el quinto semestre aprendí C# y Vala, y estas ultimas vacaciones aprendí Python y un poco(muy poco) de Ruby y Haskell.

Viendo todos estos lenguajes, tengo claro cuales son los que más me gustan y porque: Python, Vala... y ya jajajaja, las razones: son multiplataforma, fáciles, y OpenSource. Sin embargo, estoy aquí para hablar de los lenguajes de scripts.
Los más populares son PHP, Python, Ruby, Lua, Perl y JavaScript. La idea de los lenguajes dinámicos no es nueva, y vino del lado de la familia Lisp.


Type(languaje)
La inmensa mayoría de lenguajes de programación vienen de dos vertientes: La familia FORTRAN (C, Java, Cobol, Delphy...), y los de la familia Lisp (O'Caml, Haskell, Scheme...). La familia Fortran es más cercana a la maquina, y muy orientada al los procedimientos específicos (por eso se les conoce como lenguajes procedimentales). Por el contrario, los lenguajes de la familia Lisp son más matemáticos, no se enfocan en un orden especifico, sinó en crear declaraciones [de propiedades matemáticas] que puedan ser llamadas en cualquier momento (por eso se les conoce como lenguajes declarativos).
La familia de los lenguajes procedimentales tuvo mejor acogida a nivel general (claramente, a pocos les apasiona las matemáticas), y los lenguajes declarativos solo fueron populares a nivel académico. Todo esto ha ido cambiando luego de la aparición de los lenguajes de script (dinámicos). Estos tomaron el dinamismo conceptual de los lenguajes declarativos, mezclandolo con la estructura de los lenguajes procedimentales (algunos, incluso embadurnándolos con orientación a objetos), creando así lenguajes de mucho más alto nivel.


Superioridad
Los lenguajes de scripts son superiores a cualquier otro en que no se hace necesario el tedioso sistema de "compilar-probar-arreglarfallos-compilar...", donde la compilación es lenta y molesta. Los lenguajes de script facilitan el desarrollo rápido de aplicaciones mucho más que un lenguaje como puede ser Java o C#, también tienen el plus de que gratificantemente, se han desarrollado muy cercanos a la web, lo que hace mucho más sencillo implementar cualesquier sistema con ellos (JavaScript, PHP, Python, Ruby... son muy populares en cuanto a desarrollo web).

Y, quizás el plus más importante, es que son menos aburridos. Aprender lenguajes de script es importante para cualquier programador. Seguramente muchas universidades solo se preocupan de enseñar lo suficiente para formar cientos de Mokey Programmers en Java y C#, pero estoy convencido que aprender un lenguaje de script capacita mucho mejor a un programador, que enredarlo toda su vida en un lenguaje que aburre luego de un tiempo.


Un escrito en pro de la productividad.

lunes, 6 de diciembre de 2010

Muffin Translator, mi proyecto de vacaciones

Como proyecto de vacaciones, me propuse hacer un programita al que le tenía ganas hace tiempo: Muffin Translator.
Como sabrán, tengo amigos en un fansub de anime. Ellos para traducir, deben bajar los capítulos del anime a traducir, de algún fansub en ingles, para leer los subtítulos, traducirlos y escribirlos en un archivo de texto plano. Esto conlleva tener que pasar entre ventanas con las teclas Alt+Tab, cosa engorrosa viendo que son cerca de 500 lineas de dialogo por capítulos.
Aquí nace la idea de Muffin: tener todo en una misma ventana, es decir, video, texto, y diccionarios online.

Pero, ¿Con qué hacerlo?, el lenguaje de programación es importante y más porque, aun que soy usuario de Linux, la mayoría de los que usarían el programa usan Windows. Tampoco puedo desarrollarlo solo para Windows, porque esa mayoría no son el 100% jejejejejeje
Pensé en usar Vala+Mx: Vala es el lenguaje de programación del proyecto Gnome muy parecido a C y muy integrado a GTK... no quise usar GTK por lo maluco que es compilar cosas para Windows. Mx es un sistema de widgets basados en Clutter (una biblioteca para manejar datos OpenGL de forma más abstracta y fácil), peeeeeero... tiene el problema de la casi nula documentación, y que nadie la ha usado lo suficiente como para tener ejemplos concretos desde Vala.
La otra opción fue C#+Mono: Mono es multiplataforma también, pero, tuve el inconveniente del video... no supe qué usar, y no supe hacer las interfaces gráficas tampoco, y como la documentación era demasiado "serious business", no me ayudaba mucho.
Por ultimo, consideré Python+wxWidgets: Python es un lenguaje multiplataforma, super-popular en todas las distribuciones Linux, y que en Windows es fácil crear ejecutables (py2exe). Además es un lenguaje muy fácil y bastante practico. wxWidgets, es una biblioteca para GUIs (al igual que GTK, o Qt4...), escrito en C++, que su filosofía es escribir el mismo código para crear la interfaz gráfica, y que al usarlo en cualquier sistema operativo, se vea igual. Así, en Windows, usa las bibliotecas nativas de Windows para crear la GUI. En Linux, usa GTK, en Mac, usaba Carbon, pero ya se está portando a Cocoa. Yo la conocía hace mucho tiempo (Aegisub usa esta biblioteca), por lo que se lo que se puede hacer con ella, además la documentación es muy buena, y en español, aunque no es mucho, hay varios ejemplos de como usarse. Por otro lado, viene integrado con muchas funcionalidades, que sumadas a las propias de Python, lo hicieron el candidato perfecto.

Lo siguiente, ya habiendo seleccionado a Python, fue definir el tema del video. Si conocen sobre anime en ingles, quizás se habrán dado cuenta que los gringos prefieren publicar mucho de su anime en el formato contenedor Matroska (MKV), ese es un problema, pues el MKV permite múltiples canales de subtítulos, audio, etc... bastante flexible, pero no muy sencillo par mi.
¿Cómo hacer entonces para reproducir video en Muffin?. Primero lo primero, qué alternativa conocía en Python: PyGame o PyGlet, ambas son para crear videojuegos, pero no sabía como integrarlas... de hecho, parecía imposible. La otra opción era usar pyffmpeg, un warper de ffmpeg (un conjunto de codecs multipletaforma), funcionó... pero excesivamente lento, la razón es que está diseñado para manejar fotograma a fotograma el video... algo que es pesado computacionalmente, y que para Muffin no era muy interesante.
Por casualidad dí con MplayerCtrl, un warper para usar el popular Mplayer en... oh sorpresa: wxPython.

Ahora mismo ando programándolo, he usado wxGlade para la interfaz gráfica, y voy a usar Mercurial como control de versiones y CodeGoogle como hosting.
Pronto les daré más bocadillos ;D

lunes, 20 de septiembre de 2010

Como instalar LaTeX en Ubuntu o Debian

Como bien saben, soy estudiante universitario, y una de las cosas que como buen estudiante debo hacer es entregar trabajos escritos. Lo común siempre ha sido hacer el trabajo en Word (aka, OpenOffice LibreOffice) y entregar el PDF o el trabajo impreso como tal, pero este semestre tomé una materia de la linea de "Ingeniería de Software" donde básicamente me exigen entregar los dichos trabajos en LaTeX.


Pero, ¿Qué es LaTeX?, podría pensarse como un compilador para documentos... es decir, se le pasa un archivo fuente con el texto maquetado, es decir, etiquetado con definiciones tipo "esto es un titulo" y cosas así. Para usarse más cómodamente, se puede usar un IDE integrado, que permite convertir las fuentes a PDF, PostScript, etc, para no tener que compilar los .tex manualmente.

El problema fue que aunque había oído hablar de LaTeX, nunca lo había usado y mucho menos instalado, y todos los que conocía que lo han usado solo conocen como instalarlo en Winbug y no en Linux.

Intenté de varias formas: Primero instalé Lyx, un programa que deja escribir en LaTeX pero de forma visual, bastante practico, pero a mi no me servía para la universidad, ya que el profesor nos da plantillas personalizadas, y como Lyx es para gente que no quiere aprender LaTeX de verdad, pues lo descarté.

Luego escuché de Kile, un IDE para LaTeX muy bien diseñado y que se integra perfectamente con KDE... muy bueno por cierto, pero no me gustó... yo uso Gnome y descargar 300MB de más solo por usarlo... es un poco desperdiciador.

La ultima opción que leí, fue sobre TexMaker... la aplicación está escrita usando Qt4, pero no es tan integrada a KDE como Kile (ya saben, son varios cientos de megas menos en la descarga), había leído que era lenta, y por eso no me había animado a probarla. Para sorpresa mía, me conseguí por medio de un amigo los archivos de instalación del LaTeX para Winbug proporcionados por el profesor, y eso fue un autentico lol, cuando el IDE para LaTeX que usan, es TexMaker. Que alivio.

Cómo instalar LaTeX con TexMaker 

Un simple:
$ sudo aptitude install texmaker texlive-lang-spanish xfonts-scalable texlive-fonts-extra
Instala el TexMaker con todos los texlive-xxxxx, más el modulo para el español, junto a varias fuentes. Pesa unos 500MB masomenos, así que vayan y tómense un café o algo (la versión de Windows pesa lo mismo que un CD,  así que no tienen queja). Pueden instalar otros módulos, hay muchos, y serán necesarios según lo que vayan a hacer. Son fáciles de encontrar, todos comienzan con "texlive-".

Actualización: El LaTeX viene con un pequeño modulo para descargar estilos de letras (fonts) de forma automática. El comando es el siguiente:
$ sudo getnonfreefonts-sys --all



La primer vez que corrí el TexMaker funcionó de maravilla, pero cuando quise compilar los documentos de prueba que da el profesor, no funcionó y me soltó el siguiente error:
 ! LaTeX Error: File 'picins.sty' not found.

La forma de solucionarlo es bajando el archivo en cuestión (picins.sty) y copiarlo al directorio de los estilos.
$ sudo cp /picins.sty /usr/share/texmf/tex/latex 

Después actualizamos la configuración para que LaTeX lo reconozca:
$ sudo texconfig rehash 
Luego, y aun después de hacer lo anterior, no va a compilar, ya que lo hace primero en un formato llamado DVI, pero que la verdad a nosotros no nos interesa mucho, por lo que podemos ir a Opciones/configurar texmaker, luego en compilación rápida, y cambiarlo a: PdfLaTeX + Ver PDF.

Tambien es recomendable usar la siguiente etiqueta, para que el LaTeX sepa que se escribe en utf8 y no es ascii, evitandonos errores con las tildes:
\usepackage[utf8]{inputenc}
 Una vez hecho esto, el LaTeX quedará funcionando a las mil maravillas ^^

viernes, 13 de noviembre de 2009

Go, el antes y el despues en la programación

Escribo desde los computadores de la universidad.

Hace unos días, un acontecimiento sumamente importante pasó: bajo la financiación de Google, un grupo de los más prestigiosos programadores (varios de los creadores de Unix, uno de los desarrolladores de gcc, y otros tantos...), se han dado cuenta de una GRAN NECESIDAD, pero que nadie se había dado a la tardea de emprender una solución: Programar se ha hecho difícil.


En un principio, los computadores eran demasiado simples, y "estrechos", por lo que lenguajes como en C, y posterior mente el C++, dieron cabida a un auge en la programación. Pero, hoy en día, los PC son ya demasiado grandes, los sistemas demasiado complejos, y las necesidades de sistematicación más especificas, por lo que para hacer un programa que alivie una necesidad, su desarrollo se ha vuelto una tarea bastante compleja, y no solo eso, sinó también aburrida.

Aquí, es cuando explico por qué el titulo del post: estos señores, han desarrollado un lenguaje de programación pensando en lo siguiente: un lenguaje Orientado a objetos (en parte si, y en parte no), de compilación rápida, con recolección de basura, y en el que fuera fácil la programación concurrente. lo han hecho, y lo nombraron "Go".

Go es básicamente un descendiente de C en su sintaxis, y tiene parte de Pascal/Modula/Oberon, y de otros lenguajes como Newsqueak y Limbo. Esos, Y NO PYTHON, como muchos han dicho.

Además, el desarrollo de sus compiladores es bastante interesante, ya que (según entiendo, aun no he leído con calma los FAQs, puede que me esté equivocando con mi pésimo ingles xDD) es posible compilar para otra arquitectura, no como en C, que hay que compilar para cada arquitectura físicamente... ya averiguaré este punto con calma.

Es tiempo de hacer historia. Este lenguaje, que aun es experimental, promete ser el futuro, es decir, "bye bye, java", tanto así, que Google ha mostrado interés en cambiar el software de sus servidores en un futuro, por aplicaciones escritas en Go.

Desde mi punto de vista, la de un simple estudiante de tercer semestre, que apenas aprendí a escribir en java hace muy poco, y que le tenia tengo fe a Vala, quiero aprender lo más rápido posible sobre este lenguaje. Es mejor hacerlo ya que el proyecto lleva poco tiempo a la vista del publico, y no luego.

Sin más, los invito a que se unan al grupo de discusión en español sobre el lenguaje. En este momento somos pocos, y hay la intención de hacer la traducción (que ya se está haciendo) de toda la información relacionada con Go.

http://groups.google.com/group/golang-spanish?pli=1

Saludos!!, y en cuanto tenga más información, la iré publicando (o eso espero al menos ^^U )