Bienvenido(a) a Proyecto Script

Hola!!!

Este es un buen lugar donde buscar las respuestas a tus dudas sobre "Programación", "Lenguajes", "Linux", "Electrónica", etc.

Suele ser difícil buscar en la red y encontrar respuestas claras y en español a muchas preguntas sobre estos temas, así que aquí tienes un buen lugar para iniciar.

Quieres ser parte de esto, solo ¡regístrate!

lunes, 8 de diciembre de 2008

Tabla simulando un arbol

Seguramente se ha presentado el caso donde tiene una tabla a nivel base de datos que guarda la información de una entidad que tiene un comportamiento de árbol, peensando un ejemplo práctico tenemos una tabla de Categorias la cual esta construida por el siguiente script:

   1 CREATE TABLE categories (
   2   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   3   nombre VARCHAR(20) NOT NULL,
   4   parent_id BIGINT NULL
   5 );


De esta manera podriamos tener lo siguiente:

  • General de División
    • General de Brigada
      • General Brigadrier


Y visto como una tabla tendrías:

id |        nombre       | parent_id
------------------------------------
 1 | General de División |   null
 2 | General de Brigada  |     1
 3 | General Brigadier   |     2


Vayamos al código...
Existe una funcion llamada "acts_as_tree" la cual nos ayuda con ese comportamiento, es importante hacer la aclaración que hasta la versión 1.x de Rails (mas específicamente en ActiveRecord) era parte de ésta, pero apartir de la versión 2.x, ésta fue seprada para convertirse en un plugin.

La instalación del plugin es muy sencilla, basta con ejecutar la siguiente linea:

script/plugin install acts_as_tree


Una vez hecho esto, podemos ir a nuestra clase model "Categoria":

   1 class Categoria < ActiveRecord::Base
   2   acts_as_tree :order => 'parent_id'
   3 end


De esta manera tenemos los isguientes metodos disponibles para aprovechar mucho mejor el comportamiento en arbol:

MétodoDescripcion
childrendevuelve todos los hijos inmediatos
parentdevuelve el padre (objeto inmediato)
siblingsdevuelve todos los hijos del mismo padre (hermanos)
self_and_siblingsdevuelve todos los hermanos incluyéndome
ancestorsdevuelve todos los objetos padre hasta llegar a la raiz (padre, abuelo, etc)
rootdevuelve el objeto raiz de la jerarquía


Digg!

viernes, 5 de diciembre de 2008

Problems compiling app-text/poppler-bindings-0.8.7

Hace algunos días trataba de compilar el paquete "app-text/poppler-bindings-0.8.7" pero me arrojaba el siguiente error en la compilación:

0001 neobalam proyectos # emerge -q1 =app-text/poppler-bindings-0.8.7
0002 >>> Verifying ebuild Manifests...
0003
0004 >>> Emerging (1 of 1) app-text/poppler-bindings-0.8.7 to /
0005 * Applying poppler-0.6-bindings.patch ... [ ok ]
0006 * Running eautoreconf in '/var/tmp/portage/app-text/poppler-bindings-0.8.7/work/poppler-0.8.7' ...
0007 ...
0008 checking for Qt headers... /usr/qt/3/include
0009 checking for Qt libraries... /usr/qt/3/lib
0010 checking if Qt needs -pthread... no
0011 checking for POPPLER_QT4... configure: error: Package requirements (QtCore >= 4.1.0 QtGui >= 4.1.0 QtXml >= 4.1.0 QtTest >= 4.1.0) were not met:
0012
0013 No package 'QtGui' found
0014
0015 Consider adjusting the PKG_CONFIG_PATH environment variable if you
0016 installed software in a non-standard prefix.
0017
0018 Alternatively, you may set the environment variables POPPLER_QT4_CFLAGS
0019 and POPPLER_QT4_LIBS to avoid the need to call pkg-config.
0020 See the pkg-config man page for more details.
0021
0022
0023 !!! Please attach the following file when seeking support:
0024 !!! /var/tmp/portage/app-text/poppler-bindings-0.8.7/work/poppler-0.8.7/config.log
0025 *
0026 * ERROR: app-text/poppler-bindings-0.8.7 failed.
0027 * Call stack:
0028 * ebuild.sh, line 49: Called src_compile
0029 * environment, line 2536: Called econf 'src_compile' 'src_compile' '--enable-cairo-output' '--enable-poppler-glib'
0030 * ebuild.sh, line 519: Called die
0031 * The specific snippet of code:
0032 * die "econf failed"
0033 * The die message:
0034 * econf failed
0035 *
0036 * If you need support, post the topmost build error, and the call stack if relevant.
0037 * A complete build log is located at '/var/tmp/portage/app-text/poppler-bindings-0.8.7/temp/build.log'.
0038 * The ebuild environment file is located at '/var/tmp/portage/app-text/poppler-bindings-0.8.7/temp/environment'.
0039 *
0040
0041 * Messages for package app-text/poppler-bindings-0.8.7:


Cabe mencionar que usaba el administrador "Portage" (para los que no sepan algo como el "apt-get", "yast", etc, a diferencia que este descara el código fuente y lo compila).

Por fin pude compilar ese paquete, basta con incluir en la compulacion qt-4 y poppler-bindings en la misma llamada de emerge-

Digg!

martes, 14 de octubre de 2008

Unexpected result mapping beans with betwixt

Dadas dos clases (beans), las intentaba mapear con betwixt, pero a la hora de hacer la generación del XML a partir de los beans, curiosamente no aparecia el XML que yo esperaba. Lo que hice fue (por razones de practicidad del momento) en un archivo definir algunas clases entre ellas los beans a manera, donde ninguno de los beans tenía el modificador public, algo como lo siguiente:

   1 public class Prueba {
   2     // Definicion de clase
   3 }
   4 
   5 class Familia implements Serializable {
   6     List personas;
   7 
   8     // setters y getters
   9 }
  10 
  11 class Persona implements Serializable {
  12     private String nombre;
  13     private String apellido;
  14     // setters y getters
  15 }


Y los beans mapeados de la siguiente forma:

Primero el archivo Persona.betwixt:

   1 <info primitiveTypes="element">
   2   <element name="persona">
   3     <attribute name="nombre" property="nombre" updater="setNombre" />
   4     <attribute name="apellido" property="apellido" updater="setApellido" />
   5   </element>
   6 </info>


Y en segundo lugar el archivo Familia.betwixt:

   1 <info primitiveTypes="element">
   2   <element name="familia">
   3     <element name="personas">
   4       <element name="personas" property="personas" updater="setPersonas" />
   5     </element>
   6   </element>
   7 </info>


El problemas radica en que todas las clases a mapear deben estar definicas con el modificador public. Así que hay que ponerlo en archivos separados.


Digg!

sábado, 27 de septiembre de 2008

Agregar automáticamente salto de línea en Emacs

Para agregar de manera automática un salto de línea en cualquier buffer al momento de guardar a un archivo en Emacs basta con agregar la siguiente línea:

1 (setq require-final-newline t)

Nótese que se pasa como parámetro a la funcion una t, lo cual podríamos ver para fines prácticos como un true, recordemos que el lenguaje es Lisp y dado que utiliza listas, podríamos decir que "algo" está o no en una lista, asi que podríamos ver como un valor false a nil (lo cual significa Not In List).

Es decir, si lo queremos deshabilitar estaría asi:

1 (setq require-final-newline nil)


Digg!

lunes, 15 de septiembre de 2008

Error en NewGem con RubyGems 1.1.1: Undefined method `add_development_dependency'

Para empaquetar proyectos en gem's de ruby, una vez que ejecutaba rake, arroja lo siguiente:

neoriddle@neobalam ~/proyectos/amatohtli $ rake
(in /home/neoriddle/proyectos/amatohtli)
rake aborted!
undefined method `add_development_dependency' for #
/home/neoriddle/proyectos/amatohtli/Rakefile:2
(See full trace by running task with --trace)
neoriddle@neobalam ~/proyectos/amatohtli $


El error se soluciona con actualizar la version de rubygems a la versión 1.2.0.

En mi caso muy particular yo tenia a versión 1.1.1:

neobalam amatohtli # emerge -vp =dev-ruby/rubygems-1.2.0

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] dev-ruby/rubygems-1.2.0 [1.1.1] USE="doc server" 242 kB

Total: 1 package (1 upgrade), Size of downloads: 242 kB
neobalam amatohtli #


Una vez hecho esto ya no arrojaró errores.


Digg!

domingo, 14 de septiembre de 2008

Problemas con caracteres al enviar un formulario HTML

Muchas ocaciones tenemos el problema donde el enviar una forma de html los caracteres cambiar por caracteres raros o simplemente no son los que esperabamos.

Esto es principalmente porque al momento que se hace la encapsulación de la petición se toma un charset (conjunto de caracteres) que no corresponde al que necesitamos para que estos caracteres sean válidos.

La solución es simple, basta con especificar el charset en el atributo accept-charset del tag form de html:

1 <form method="post" accept-charset="CHARSET" />

Para mayor información sobre charset's consulte la sección 6.9 y para detalles del tag form la sección 17.3 de la especificación de html 4.01.


Digg!

sábado, 13 de septiembre de 2008

Carga de archivos en un tag <FORM> con Java (Apache FileUpload)

La carga de archivos requiere -según la especificacion de HTML 4.0-
básicamente dice que para poder enviar un archivo hay que poner el valor
multipart/form-data al atributo enctype del tag
form, de la siguiente manera:


1 <form method="post" action="miaccion" enctype="multipart/form-data">

Esto es con respecto a el archivo HTML (o JSP, o algún tipo similar), pero
ahora falta la programación del lado del servidor. Por suerte existe Apache
Commons FileUpload, el cual implementa la solución dejandonos solo unas
clases para obtener los archivos.

Como ejemplo, imaginemos que tenemos el siguiente archiv jsp:

1 <form method="post" action="MiServlet" enctype="multipart/form-data">
2   <input name="cancion" type="file" value="~/jaguares_-_45_-_alquimista.mp3" />
3   <input name="grupo" type="text" value="Jaguares" />
4   <input name="submit" type="submit" value="Enviar" />
5 </form>


Entonces en nuestra clase MiServlet podríamos hacer lo siguiente:

1 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
2 import org.apache.commons.fileupload.servlet.ServletFileUpload;
3 import org.apache.commons.fileupload.FileItem;
4
5 public class MiServlet extends HttpServlet {
6   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
7     DiskFileItemFactory factory = new DiskFileItemFactory();
8     ServletFileUpload upload = new ServletFileUpload(factory);
9     List params = upload.parseRequest(request);
10     Map paramsMap = new HashMap();
11     for(FileItem param : params) {
12       // paramsMap["grupo","Jaguares"];
13       paramsMap.put(param.getFieldName(),param.getString());
14     }
15   }
16 }


Una vez ya en este punto, tenemos los siguientes métodos en la interfaz FileItem:


  • getInputStream()

  • getName()

  • getOutputStream()

  • getSize()

  • write(java.io.File file)

  • getContentType()



Cuando algunos de los parámetros es un archivo el método getContentType es diferente de null por lo es importante señalar que los parámetros como típicamente se obtienen aquí no tiene efecto, es decir:

   1 public class MiServlet extends HttpServlet {
   2   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
   3     req.getParameter("cancion"); // null
   4     req.getParameter("grupo"); // null
   5     req.getParameterNames(); // Enumeration vacio
   6   }
   7 }



Digg!

jueves, 17 de julio de 2008

Problema 'xcb_xlib_unlock' al actualizar JVM

Después de cada actualización a la JVM es posible que cuando se quiere ejecutar algo en Java nos arroje algún error similar, en este reproduciré el error al ejecutar un archivo jar (el cual es el un diagramador de modelos entidad-relación):


neoriddle@neobalam ~/dbwrench_1.4.7 $ java -jar DbWrenchAll.jar
java: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
Abortado
neoriddle@neobalam ~/dbwrench_1.4.7 $


Y esto se corrige deshabilitando el XCB Xlib de la siguiente manera, basta con ejecutar la línea correspondiente (con los suficientes privilegios) dependiendo de la versión de la JVM.


  • Para Java 5:
    sed -i 's/XINERAMA/FAKEEXTN/g' /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib/i386/xawt/libmawt.so


  • Para Java 6:
    sed -i 's/XINERAMA/FAKEEXTN/g' /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/i386/xawt/libmawt.so

Según he visto en varios foros, el problema se puede reproducir con muchas aplicaciones escritas o ejecutables en Java.

Como referencias aqui tienen las siguientes ligas:



Digg!

martes, 24 de junio de 2008

Registro de Nick en IRC

Muchos de los canales de IRC, solicitan que los nicknames (o apodos) sean registrados, unos servidores (como por ejemplo Freenode) lo requieren para entrar a algún canal y otros simplemente para mandar mensajes privados a los integrantes del canal.

Aquí escribo los pasos básicos para realizar este proceso:

  • Una vez dentro del servidor hay que elegir el apodo (de hecho para entrar al servidor se debió haber elegido un nick) pero si se quiere cambiar se puede hacer con el siguiente comando: /nick nuevo_nombre.
  • Después si el apodo ha sido elegido lo notificará en tal caso pide autentificarse (lo cual se explica mas adelante), en caso de que el apodo este libre hay que registrar la contraseña y un correo electrónico relacionados con el apodo, esto se hace con el siguiente comando: /msg nickserv register <password>, o /msg nickserv register <password> <email> (es importante escribir un correo electrónico válido porque ahí se enviará una confirmación de registro que hay que realizar forzosamente).
  • Una vez realizado el paso anterior es posible que se mande un correo electrónico para confirmar el registro, en tal caso ahí se envían unas instrucciones para enviar el código de verificación del registro.
  • Y por ultimo lo que queda es iniciar sesión con este apodo (nombre de usuario) y con su contraseña registrada, con el siguiente comando /msg nickserv identify password.
Por ejemplo imaginemos que mi apodo es 'usuarioirc', la contraseña es 'claveirc' y el correo eletrónico al registrar es 'micorreo@miservidor.com', el registro sería de la siguiente manera:


/nick usuarioirc
/msg nickserv register claveirc micorreo@miservidor.com
...
/msg nickserv identify claveirc


Digg!

domingo, 15 de junio de 2008

Mas sobre JSTL

Bueno,hoy quiero compartir algo de lo que aprendí haciendo mi proyecto con JSP y JSTL.

Intente hacer todo el proyecto usando las librerías estándar que ofrece JSTL 1.1, evitando el uso de java tradicional.

Mientras iba avanzado en el proyecto me di cuenta de que no se puede reemplazar uno por el otro; aunque JSTL engloba las funciones principales JSP tiene más ventaja para nosotros los que no estamos familiarizados con la web.

Un ejemplo de ello en mi sistema fue cuando generé una lista de captura de calificaciones de asignaturas (mostrando las calificaciones de acuerdo al grado y/o al plan de estudios y nombrando los SELECT de las calificaciones con el nombre de la asignatura), pero en la página donde recibí el valor no pude referenciar la variable de ningun modo por que en ${param.atributo} atributo no es un string y eso me genera un grave problema a la hora de iterar.
En cambio si hubiera usado algo del lenguaje java pude haber creado un arreglo de String con los nombres de las materias de dicho grado y/o plan de estudios e insertar los valores con request.getParam(arreglo[posicion]); .

Con esto no digo que JSTL no sirva ni mucho menos, es mucho más fácil usar DBCP con JSTL, solo indicando el dataSource como atributo de la etiqueta
en lugar de crear objetos Context,DataSource... en fin, aprendí que combinando estas dos cosas podemos hacer cosas muy hermosas y funcionales:D.

Quizá muchos de ustedes ya sepan eso, pero yo tuve que aprenderlo del modo difícil y quiero que el próximo que este en una situacion similar lo piense dos veces antes de hacer a un lado el buen lenguaje java.


Digg!

sábado, 14 de junio de 2008

Avira Antivir License File

Seguramente los usuarios del programa de Antivirus Avira AntiVir a la hora de hacer la actualización de la definición de virus, les ha pedido este programa un archivo de licencia.

Sucede que si vamos a la página oficial del programa, deberíamos encontrar una forma rápida para descargar este archivo, pero bajo el esquema espacial del sitio en estos momentos, simplemente no se encuentra en la sección de soporte, descargas, ni ninguna.

Resulta que existe una liga a este archivo en la sección Support, después a FAQ y finalmente en la primera pregunta del FAQ se encuentra la liga a este archivo, por si las dudas aquí pondré una liga a el:

Debido a que los administradores de ese sitio pueden cambiar la url hacia este archivo (y obviamente yo no tengo control sobre eso) es posible que la liga se rompa, en ese caso por favor envienme un mensaje informando este caso y aún mejor la nueva ruta para que se actualize.

Digg!

lunes, 9 de junio de 2008

Railscasts

A todos los programadores de Rails muy seguramente les servirá esta página, se llama Railscasts, la cual tiene pequeñas "recetas de cocina" sobre el trabajo con Rails. Y para los que están cansados de que cuando le preguntan a alguien los manda a Google, aquí a parte de dar soluciones tienen un video como demostración para ver la implementación paso a paso. Vale la pena tenerlo entre los favoritos y hasta tener el feed suscrito.

Digg!

domingo, 1 de junio de 2008

Error al generar controlador con Login_Generator en Rails 2.0

Tratando de implementar un sistema de seguridad por logeo en una aplicacion en Rails 2.0, uno de los pasos señala que hay que generar un controlador con la siguiente instrucción:

ruby script/generate login <controlador&rt;

En mi caso lo hice así:

$ ruby script/generate login Security
    create lib/login_system.rb
    create app/controllers/security_controller.rb
    create test/functional/security_controller_test.rb
    create app/helpers/security_helper.rb
    create app/models/user.rb
    create test/unit/user_test.rb
    create test/fixtures/users.yml
No such file or directory - /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml
$


Revisando un poco el directorio para comprobar si realmente ese archivo no existia me di cuenta que si existe, pero con otro nombre:

$ ls -l /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/rails_generator/generators/components/scaffold/templates/
total 40
-rw-r--r-- 1 root root 2464 may 13 23:47 controller.rb
-rw-r--r-- 1 root root 1256 may 13 23:47 functional_test.rb
-rw-r--r-- 1 root root 46 may 13 23:47 helper.rb
-rw-r--r-- 1 root root 495 may 13 23:47 layout.html.erb
-rw-r--r-- 1 root root 1152 may 13 23:47 style.css
-rw-r--r-- 1 root root 463 may 13 23:47 view_edit.html.erb
-rw-r--r-- 1 root root 697 may 13 23:47 view_index.html.erb
-rw-r--r-- 1 root root 411 may 13 23:47 view_new.html.erb
-rw-r--r-- 1 root root 285 may 13 23:47 view_show.html.erb
$


Y como podemos ver si existe pero con la convención de nombres de la versión de Rails 2.0 (la cual es .html.erb) y no con la versión 1.2 (la cual es .rhtml).

Así que solo basta con hacer una copia del archivo con el nombre de la versión 2.0 a uno con el nombre de la versión 1.2:

$ cp layout.html.erb layout.rhtml

De esta manera ya existirá:

$ ls -l /usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/rails_generator/generators/components/scaffold/templates/
total 40
-rw-r--r-- 1 root root 2464 may 13 23:47 controller.rb
-rw-r--r-- 1 root root 1256 may 13 23:47 functional_test.rb
-rw-r--r-- 1 root root 46 may 13 23:47 helper.rb
-rw-r--r-- 1 root root 495 may 13 23:47 layout.html.erb
-rw-r--r-- 1 root root 495 jun 1 15:38 layout.rhtml
-rw-r--r-- 1 root root 1152 may 13 23:47 style.css
-rw-r--r-- 1 root root 463 may 13 23:47 view_edit.html.erb
-rw-r--r-- 1 root root 697 may 13 23:47 view_index.html.erb
-rw-r--r-- 1 root root 411 may 13 23:47 view_new.html.erb
-rw-r--r-- 1 root root 285 may 13 23:47 view_show.html.erb
$


Y con esto ya podremos seguir con la creacion del controlador (en mi caso aquí esta el ejemplo):

$ ruby script/generate login Security
identical lib/login_system.rb
identical app/controllers/security_controller.rb
identical test/functional/security_controller_test.rb
identical app/helpers/security_helper.rb
identical app/models/user.rb
identical test/unit/user_test.rb
identical test/fixtures/users.yml
overwrite app/views/layouts/scaffold.rhtml? (enter "h" for help) [Ynaqdh]
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help
overwrite app/views/layouts/scaffold.rhtml? (enter "h" for help) [Ynaqdh] Y
    force app/views/layouts/scaffold.rhtml
    identical public/stylesheets/scaffold.css
    create app/views/security
    create app/views/security/welcome.rhtml
    create app/views/security/login.rhtml
    create app/views/security/logout.rhtml
    create app/views/security/signup.rhtml
    create README_LOGIN
$


Digg!

domingo, 25 de mayo de 2008

SD/SDIO/MMC/MS/MSPro funcionando en linux

Para usar el dispositivo para SD/MMCMS/MSPro, basicamente en el kernel hay que tener habilitadas algunas opciones:

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
  MMC/SD Card support -->
    <*> MMC support
    [ ] MMC debugging
    <*> MMC block device driver
    <*> Secure Digital Host Controller Interface support (EXPERIMENTAL)
    < > Winbond W83L51xD SD/MMC Card Interface support
File systems --->
  <*> DOS FAT fs support
  DOS/FAT/NT Filesystems -->
    <*> MSDOS fs support
    < > UMSDOS: Unix-like file system on top of standard MSDOS fs
    <*> VFAT (Windows-95) fs support


En mi caso tengo un dispositivo de la marca Ricoh:

# lspci | grep -i mmc
03:01.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)


Asi que solo lo recompilamos y usamos ese kernel y listo.

Digg!

sábado, 24 de mayo de 2008

Kopete tarda en iniciar

He encontrado que Kopete suele tardar en iniciar mucho tiempo debido a que la carga de los plugins que a su vez éste carga son pesados. En mi caso tuve la desafortunada experiencia durante casi mas de 4 meses donde Kopete tardaba en iniciar 5 minutos al principio y esto se extendió hasta casi 25 minutos, obviamente eso no es normal ni deseable, así que encontré que el archivo donde guarda la configuración de usuario ~/.kde/share/config/kopeterc, y ahí hay una linea que activa el plugin (muchas veces ya instalado, esto dependiendo del administrador de paquetes de dicha distribución), esta línea es:

kopete_statisticsEnabled=true

por lo que hay que cambiar su valor a false en caso de que no se pueda desactivar por la interfaz gráfica, de tal modo dicha linea cambiaría a:

kopete_statisticsEnabled=false

De este modo ya no carga las estadísticas que guarda por cada contacto y ya no hay retardo.

Aquí dejo el vínculo hacia el foro donde escribí un post sobre este problema (Gentoo Forums).

Digg!

martes, 13 de mayo de 2008

JSTL =O!

Bueno, soy algo novato en esto de jstl y quisiera la opinion de todo aquel que sea capaz de darla, sobre si jstl es diferente de jsp, si es una extension de jsp, en que casos la usas, cualquier cosa s valida x]

jueves, 24 de abril de 2008

Manejo de RSS con Ruby

Recientemente investigé un poco como manejar los RSS con Ruby y encontré varias APIs, como FeedTools, FeedUpdater, RSSRuby, etc.

Y aquí les dejo un código (que ya probé y funciona).

Para escribir RSS:


require 'rss/maker'

version = "2.0" # ["0.9", "1.0", "2.0"]
destination = "test_maker.xml" # local file to write

content = RSS::Maker.make(version) do |m|
m.channel.title = "Example Ruby RSS feed"
m.channel.link = "http://www.rubyrss.com"
m.channel.description = "Old news (or new olds) at Ruby RSS"
m.items.do_sort = true # sort items by date

i = m.items.new_item
i.title = "Ruby can parse RSS feeds"
i.link = "http://www.rubyrss.com/"
i.date = Time.parse("2007/2/11 14:01")

i = m.items.new_item
i.title = "Ruby can create RSS feeds"
i.link = "http://www.rubyrss.com/"
i.date = Time.now
end

File.open(destination,"w") do |f|
f.write(content)
end

Y para leer:

require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'

source = "http://rubyforge.org/export/rss_sfnewreleases.php" # url or local file
content = "" # raw content of rss feed will be loaded here
open(source) do |s| content = s.read end
rss = RSS::Parser.parse(content, false)


Digg!

sábado, 19 de abril de 2008

File system del iPhone

Un dia me encontraba jugando con mi iphone
I descubri ke el system operative es algo asi
komo freebsd y ademas el entorno de desarrollo
del iphone utiliza objetive C para desarrollar sus
aplikaciones.

Estoy por conseguir su entorno de desarrollo para windows para compartirlo aka ademas de
todo un file system del iPhone para aprender nuevas kosas.
pronto estara en la red.

BY T E


Digg!

martes, 8 de abril de 2008

Arrancando una tarjeta nVidia

Para poder hacer uso de una tarjeta grafica nVidia bajo Linux, primeramente deberemos de tenerla instalada, por lo cual deberemos de buscar los drivers, para lo cual dentro de el CD o medio de datos que nos dan con el producto buscaremos si en este estan los drives (estos deben ser compatibles con nuestro Kernel), en caso de que no existan dichos archivos, podemos acudis a las siguientes paginas.

http://www.nvidia.es/object/linux_es.html
http://www.linux-drivers.org/

Si en "Linux Drivers" tu dispositivo aparece como "unsupported" lamentablemente sera poco probable que logres compatibilidad, en otro caso siempre esta Google.

Una vez instalados los drivers (No lo explicare, ya que el fabricante o proveedor de dichos archivos inclue las instrucciones y estas llegan a variar segun modelo, fuente, etc), proseguimos a arrancar nuestro dispositivo, ya que normalmente este no se encuentra activo despues de instalar.

Accediendo como root
En la terminal de Linux teclear: ($ es el prompt, lo que seria c:\> en windows)
$su

"Ingresa el password del root"

Apagando el modo grafico

$init 3

Te aparecera la terminal pero en toda tu pantalla, no te asustes.

Configuranción de nVidia recomendada. (Puede cambiar ligeramente según modelo)

$nvidia--xconfig --composite
$nvidia--xconfig --render-acel
$nvidia--xconfig --add-argb-glx-visuals -d 24

Arrancando modo grafico

En mi caso, yo uso KDE y x11 con OpenSuSe 10.3 (Sax2 es elprograma que ayuda a la configuración grafica de x11)

$sax2 -r -m 0=nvidia

"ojo que 0 ---> es un cero, si no usas SuSe, deberás hacerlo con tu administrador gráfico"

$init 5

o en su defecto

$startx

-----
**Esto lo e probado en SuSe 10.3, si tienes otra distro y se requiere modificar algo, por favor, no dudes en colaborar con ello

¿ERRORES?
Si encuentras un error en esto, por favor, has el favor de indicarlo, pero no borrarlo ya que mes mejor marcar el error que borrarlo. (Así se aprenderá mas de ello)

lunes, 7 de abril de 2008

FLISOL 2008

Estamos casi a un mes de que el FLISOL (Festival Latinoamericano de Software Libre) en su edición 2008 se lleve a cabo.

Este festival tienes como objetivo ser una puerta de entrada y alternativa para todas las personas que quieren usar software libre y/o necesitan ayuda o tienen problemas instalado dicho software.

Este festival se realiza simultáneamente en las principales ciudades de latinoamérica, en la Ciudad de México las sedes serán las siguientes:

  • CECyT No.8
  • CUGS-CIC
  • ESCOM-CIDETEC
  • UACM
  • UAMA
  • UAMI
  • UNAM (LIDSOL)
  • UNITEC Campus Sur
En el Estado de México también habrá sedes (para mayor información vaya a la página de FLISOL.

En este festival existen personas experimentadas (y veces con mucho ánimo), y están ahí para ayudar a los demás en la instalación de software pero también para dar consejos de como usarlos de una manera adecuada o quizá mas óptima de la que lo venimos haciendo. También existen exposiciones sobre este temas relacionados con este tipo de software.

Asi que es una buena recomendación, cabe señalar que en cada una de las sedes las actividades (talleres de instalación, exposiciones, platicas, etc) pueden variar y muy probablemente no ser las mismas.

Digg!

Cambios en Java 5 y 6

Recientemente estaba navegando y me encontré con este artículo, el cual hace una recopilación sobre las "mejoras" que dieron en el SDK de Java a partir de las versiones 5 y 6.
Muchas personas que desarrollan con este lenguaje muy probablemente no sepan estos cambios, por lo que aquí les dejo la liga a articulo original.

http://www.javamexico.com/blogs/jb/mejoras_partir_de_java_5_y_6_recopilacion

Digg!

domingo, 2 de marzo de 2008

Tarjetas Intel y el GLX

Después de casi 8 meses de tratar de configurar correctamente mi tarjeta "Intel Corporation Mobile 945GM/GMS, 943/940GML" por fin lo logré y gracias también a las personas que dan soporte a los foros de Gentoo.

En resumen aquí tiene los pasos que se necesitan para tener un esta tarjeta funcionando de manera correcta.

Básicamente deben instalar un paquete llamado "915resolution" que hace que la resolución nativa sea disponible en Linux (en mi caso 1280x800), de esta manera solo falta registrar en el xorg.conf, posteriormente hay que instalar otros paquetes (y recomiendo éstas versiones debido a que probé con versiones previas y no logre buenos resultados):

libdrm-2.3.0
mesa-7.0.2
xorg-server-1.4.0.90-r3
xf86-video-i810-2.2.1

Quizá sea necesario reinstalar las dependencias de estos paquetes para evitar problemas de ligado.

Y listo tendremos un buen rendimiento de nuestra tarjeta, la cual la podremos probar con comandos como: glxinfo y glxgears.

viernes, 29 de febrero de 2008

Ruby fácil para principiantes

Me he encontrado a muchos compañeros los cuales han querido aprender otros lenguajes de los clásicos que en las escuelas se imparten en el mejor de los casos medianamente bien.

Aquí les traigo algunos libros que a mi juicio son bueno para empezar a hacer pininos. Estos van desde lo muy sencillo a lo mas avanzado y de varias formas para bordar y dar una introducción los temas; los estilos son muchos, algunos como una especificación otro como una noción básica y poco a poco agregar detalles o subir el nivel.

El listado es el siguiente:

-Ruby Pocket Reference (O'Reilly)
-Ruby on Rails: Up and Running )O'Relliy)

Próximamente enlistaré mas libros en cuanto encuentre nuevamente los títulos.

miércoles, 13 de febrero de 2008

Participa en ProyectoScript

Para registrarte como miembro de este blog puedes hacerlo de dos formas:
  • Solo deja tu correo (de Gmail) en un comentario a esta entrada y en unos minutos estarás registrado y listo para hacer uso de él.
  • Escríbenos a proyectoscript@gmail.com y dinos de manera opcional algunos datos para saber quien eres.
Si elegiste registrarte por comentario en cuanto hayas sido registrado tu comentario desaparecerá y será la primera confirmación de tu registro y automáticamente también llegará a tu correo una notificación.