lunes, 31 de octubre de 2011

Liberado Puppy Linux 5.3 'Slacko'

Ya está disponible versión 5.3 de Puppy Linux, una distribución ligera que ocupa menos de 125 MB, y que comparte compatibilidad binaria con Slackware (de hecho, comparte también el repositorio de paquetes). Esta distribución es idónea para equipos antiguos y/o con pocos recursos.

Las características más novedosas de esta versión son:
- Compatibilidad con Slackware 13.37
- Linux Kernel 2.6.37.6
- PMusic y Pequalizer para organizar y reproducir colecciones de música
- Frisbee Network Manager, para gestionar conexiones a redes inalámbricas
- Seamonkey como suite de navegador web y cliente de correo
- Gestión de paquetes de Slackware, Salix y Slacky, además de los paquetes PET de Puppy
- Ofimática con Abiword (procesador de textos) y GNumeric (hoja de cálculo)
- Soporte multimedia para muchos formatos





Referencias
Puppy Linux | Sitio oficial
Noticias Puppy | Noticias
Notas de la release | Liberación de Slacko
Recursos de Slacko | Blog de Barry Kauler

martes, 18 de octubre de 2011

Una semana de desintoxicación tecnológica

A continuación se documento un experimento vivido en primera persona, para evaluar hasta qué punto nos afecta la dependencia a la tecnología, acuñada como tecnodependencia. Los datos aquí ilustrados son meramente personales, aunque pueden coincidir con un porcentaje importante de la sociedad.

El reto era vivir durante una semana sin conexión a redes sociales y sin usar el teléfono móvil.


Introducción

En primer lugar, he de describirme como un tecnoadicto desde que a principios de los años 80 me acerqué por vez primera a un ordenador personal de 1KB de memoria RAM (el mítico Spectrum Z80). Mi vida se vió arrastrada a un maravilloso mundo de información interpretada para según que fines, principalmente para el software. He hecho carrera en el mundo del software y la consultoría, siendo activista del software libre desde hace más de una década. No quiero aburrir con mi Currículum ni mis conocimientos. Tan sólo dar una pincelada de un recién estrenado cuarentañero que se crió en el albor de la informática personal y profesional.

Poseo un teléfono móvil de última generación: un Samsung Galaxy ACE. Cuando lo adquirí hace ya seis meses, exigí no tener una tarifa de datos. El motivo de esta decisión es que me paso más de 12 horas al día frente a un ordenador, y la pantalla y el teclado de éste me dan las prestaciones que no me da el teléfono. Asimismo, si he de usar una conexión de datos, prefiero usar la Wifi de casa o las Wifis públicas que encontramos en edificios de la Administración Pública o de los centros comerciales. Tampoco hago uso del correo o de las redes sociales en mi teléfono (por las razones esgrimidas antes), por lo que no tengo instalados programas del tipo What's Up, Twitter, Facebook, etc. Lo que sí utilizo y aprecio de forma adicional es la cámara de fotos y el GPS. Mi uso principal del teléfono es su concepto básico: realizar y recibir llamadas telefónicas, y algún que otro SMS.

En la actualidad, y desde hace mucho tiempo, utilizo las siguientes redes sociales: Facebook, Twitter, LinkedIn, Xing, Tumblr, Picotea y Google+ (hace tiempo abandoné MySpace, Tuenti y hi5). En el trabajo, suelo utilizar Picotea, Tumblr y Google+, ya que el proxy no lo tiene capado, y además, en Picotea y Tumblr me replica los posts a Facebook y Twitter automáticamente y por detrás, sin pasar por el proxy. El uso que le doy es de unos 10-15 minutos cada varias horas de trabajo (unas dos o tres veces al día), devorando rápidamente todos los post que me comparten (principalmente noticias tecnológicas y de actualidad), que después filtro y replico de forma implacable. En casa, puedo tirarme dos o tres horas diarias por la noche actulizando y compartiendo noticias y reflexiones, además de comunicarme por mensajes, eventos o compartiendo álbumes, debido a mi papel de político (voy a omitir publicidad de mi partido en época de precampaña, aunque much@s ya lo conocéis)


Día 1: Lunes 17 de Octubre de 2011
El teléfono móvil está guardado en el cajón del despacho de mi casa, completamente apagado. Tanto en el ordenador de casa como en el del trabajo he cerrado todas las pestañas por defecto asignadas a redes sociales.

A lo largo del día tengo tentaciones de llamadas de teléfono que podría haber recibido, todas ellas importantes, de asuntos pendientes o en el aire, tanto personales como de actividades políticas. He llevado el coche al taller para una revisión y el cambio de pastillas de freno. Doy el teléfono de mi esposa, para contactar cuando acaben. Empiezo a percatarme de la necesidad y utilidad del teléfono, más allá de la dependencia en sí. No es plan dar teléfonos de otros para que me localicen, ya que es molesto para los que han de atender mis llamadas.

En cuanto a redes sociales, sufro de ansiedad. Me muero de ganas por saber qué está pasando en el mundo. Echo de menos las noticias que me vienen en forma de flashes (mensajes cortos de microblogging, con el correspondiente enlace a la noticia). Me molesta tener que buscar en el buscador las noticias o acceder a medios de prensa online. Me cansa mucho y rápidamente, y además me despista.

Sufro también ansiedad por saber quiénes me siguen, me contestan, me dejan comentarios, me replican... Sufro por no seguir a mis contactos principales, saber qué han publicado, dejar comentarios, replicarles, compartir sus enlaces, ver sus fotos...

Estas ansiedades duran todo el día. En casa, por la noche, mi mente se embota por no saber qué hacer fuera de las redes sociales. ¿Qué visito si no puedo compartirlo con mis amigos, ni decir "Me gusta", "+1", Twittear, etc...? Me he vuelto muy cómodo obteniendo en forma de flashes los titulares de todas las noticias que me gustan, en lugar de buscarlas. Empiezo a darme cuenta de la dependencia que tengo a las redes sociales. En realidad no me concentro en tareas realmente importantes para mi. No puedo concentrarme en tareas concretas, y me disperso tanto que termino no haciendo nada.


Día 2: Martes 18 de Octubre de 2011

Gracias a la ausencia de redes sociales, mi concentración en el trabajo ha crecido espectacularmente y mi día laboral ha sido de los más productivo. He podido finiquitar los más de 200 correos electrónicos que tenía pendientes, chequear todas mis tareas pendientes y llevar al día mi trabajo diario. He conseguido quitarme la bola que me agobiaba.

Algunas veces me ha entrado "el mono" de redes sociales, especialmente en los ratos que menos carga de trabajo tenía. La ansiedad persiste, pero lo he controlado y he seguido concentrándome en el trabajo. Sigo teniendo algo de dispersión, pero mi nivel de concentración ha crecido espectacularmente.

Por la tarde, a las 7, he tenido que encender de nuevo el teléfono móvil. Me han bombardeado el correo electrónico con amenazas si no me localizaban. Hay cosas muy urgentes e importantes que me reclaman para el partido de cara a lo que queda de precampaña y para empezar la campaña. Siendo coordinador territorial de 30 localidades es necesario tener conmigo contacto directo y en tiempo real.

La lección de este segundo día es que el teléfono móvil es una herramienta imprescindible para la comunicación, quizá la más importante de todas. Quizá también sea la que mejor uso le damos, pues nos cuesta dinero, y cuando duele en el bolsillo se procura darle sentido y utilidad a su uso. Yo, al menos, no estaba todo el día enganchado al What's Up o al Twitter o al Facebook. Puede llegar incluso a molestar estar reunido o tomando algo o compartiendo algún momento, que uno no haga caso, se aísle por atender al teléfono.


Día 3: Miércoles 19 de Octubre de 2011

Resulta curioso el ruido que deja tanta información y la adición que podemos llegar a tener. Nunca antes hemos podido acceder a tanta, y sin embargo, estamos expuestos al caos de información. Creo que habría que enseñar cómo gestionar la información, clasificar, catalogar, priorizar y, sobre todo, identificar información de calidad, para no ahogarnos en las mareas de datos.

El día de trabajo ha sido muy productivo, y he podido realizar más cosas de las que podía imaginar. Mi concentración ha mejorado, aunque a veces echo de menos poder mirar quién está y qué ha compartido. El impulso es controlable. No tengo un síndrome de abstinencia tan potente.

He reflexionado largo y tendido sobre la verdadera utilidad de las redes sociales y uso eficiente de las mismas. Aún me queda mucho por discernir, por lo que esperaré al último día para escribir mis conclusiones. Sirva como adelanto que deberían existir cursos sobre este asunto, y enfocarlo especialmente en aprovechar las cualidades de las redes sociales y sobre uso. Por poner algún ejemplo: tengo casi 1200 amigos en Facebook, pero, sin embargo, no tengo más contacto que con apenas 30. Deberíamos aprender a poner un límite a nuestra agenda, hacer limpieza de amistades, enfocarnos en foros que vayamos a seguir realmente de forma cotidiana, en lugar de acumular cientos de páginas y temas por curiosidad o por recomendaciones. Otro ejemplo es saber elegir y limitar el número de redes sociales. ¿Para qué tantas? ¿Por qué replicar lo mismo en todas? Lo más importante de nuestras vidas es el tiempo, y hemos de administrarlo muy bien. Dedicar parte del mismo a cultivar amistades o redes de contactos (networking) es un tiempo bien invertido, hasta cierto punto. Hay que saber dónde está ese límite y cómo exprimir la utilidad y la productividad de estas maravillosas herramientas.


Día 4: Jueves 20 de Octubre de 2011

Hoy he tenido el día libre por asuntos propios, por lo que no me he acercado a un ordenador hasta ahora, las 19:44 horas. No he tenido mono de redes sociales, aunque por el chat de Gmail, un amigo me ha comentado la noticia del día: la presunta muerte de Gadafi. En ese momento, el mono se me ha disparado y he corrido a ver la noticia. La adición estaba escondida y ha saltado como un resorte a la mínima oportunidad. Pero lo he hecho sin acceder a ninguna red social, si no por el buscador. He estado tentado de ver esta y otras noticias del día, así como compartir todo. Pero no me ha costado reprimirlo.

En cuanto al teléfono móvil, me he dado cuenta de que hago un uso responsable y productivo del mismo. Hoy he realizado algunas llamadas realmente importantes. El coste de las mismas está bien invertido.


Día 8: Lunes 24 de Octubre de 2011

He estado tres días sin actualizar el blog, ya que he estado completamente desconectado de Internet. El viernes 21 tuve un día muy complicado en el trabajo, lo exigió de mi el 200% de mi concentración. También fue mi cumpleaños, el cual fue celebrado durante del fin de semana y, como podéis imaginar, estuve ocupado en otros quehaceres más cotidianos y físicos. Por tanto, tres días sin tecnología alguna, a excepción, como bien podéis imaginar, del tan útil teléfono móvil.


CONCLUSIONES

Tras esta semana de experimentación, he podido experimentar por mí mismo que generamos nuestra propia dependencia hacia la tecnología, pero no sabemos utilizarla de forma responsable, lo que hace evidente que se generen cursos acerca de entrenar a las personas sobre el uso de de la tecnología.

Vivimos en la era de la información, y nos maravillamos de poder tener acceso inmediato a cuanta información queramos, con tan sólo un clic. Podemos conseguirla desde nuestro teléfono móvil o desde el ordenador de nuestra casa. Pero, ¿realmente esto es bueno? ¿No tenemos demasiada información? ¿No sufrimos gula informativa? ¿No estamos también consumiendo información contaminada? La información es, posiblemente, el mayor poder que tenemos en nuestra sociedad actual, pero también es el poder más manipulado y tóxico que existe. Entre tanta y tanta información hay también desinformación, información falsa, información manipulada, información extraída de contexto y utilizada para inculcar creencias intoxicadas. Tendemos a recopilar información de una forma descontrolada y sin analizarla. Al final tendemos al caos y a la acumulación de basura informativa.

Teniendo en mente este concepto, ¿qué puede estar pasando en las redes sociales? Tenemos cantidades ingentes de amigos a quienes jamás hemos visto, y les confiamos nuestros secretos. Tenemos amigos que publican noticias, blogs e información que puede venir ya intoxicada. ¿Y qué decimos de la seguridad? ¿Sabemos acaso qué hacen con los datos de nuestra actividad en las redes sociales? Formamos parte de estadísticas y de análisis de cuando hacemos y publicamos en las redes sociales. Pueden saber cuántas veces nos conectamos, cuánto tiempo, a qué horas, con qué frecuencia, sobre qué temas leemos o estamos interesados, quiénes son nuestros amigos, qué relaciones tenemos en distintas jerarquías, qué publicamos, qué decimos en los chat... Si nos detenemos a pensarlo, la sangre se nos helaría.

No trato de ser conspiranoico, pero los hechos son evidentes, y Facebook, por ejemplo, ha sido acusada muchas veces de actividades similares, o de políticas de seguridad muy sospechosas.

Las redes sociales son herramientas que son útiles para la sociedad, que incrementan la relación entre individuos y grupos con intereses afines, y además desde la comodidad de casa, sin las limitaciones del espacio o del tiempo.

Sobre este tema se pueden escribir montañas y montañas de libros, pero a la conclusión que quiero llegar es: ¿realmente necesitamos las redes sociales? Pensémoslo detenidamente. Intentemos repetir este experimento y tomar conciencia desde otra perspectiva sobre si las redes sociales son realmente útiles o son un entretenimiento más, una forma de alienar o distraer a las masas de los problemas reales, ya sean los cotidianos o los problemas de calado social, político, económico, mundial...

Creo que las redes sociales pueden ser útiles cuando realmente seamos responsables de su uso, de conocer qué hacen realmente y los peligros que entrañan, así como también qué podemos aprovechar y cómo. Creo que una red social es útil cuando une a grupos e individuos por temáticas concretas y no dispersas, cuando los involucrados en esa red sí se conocen personalmente o se tiene una relación más intensa que la de un simple amigo agregado, cuando esas relaciones funcionan entre sí, fluyendo de uno a otro lado, coordinando ideas y proyectos, tomando acciones para avanzar en objetivos comunes...

¿Cuántos amigos de verdad tienes realmente en tus redes sociales? ¿Con cuántos de ellos sueles comunicarte y con qué frecuencia? ¿Qué haces con esos amigos realmente útil, y o perder el tiempo en vanalidades? Estas tres preguntas son clave para empezar a tomar conciencia de qué uso damos a las redes sociales. A partir de ahí podemos ir planteando más cuestiones y despejando más bulto hasta obtener una red social práctica.

Por mi parte, voy a reducir mis redes sociales a la mínima esencia. Voy a revisar mis amistades y empezar a eliminar lo superfluo para quedarme únicamente con lo que necesito y me interesa. Dejaré de perseguir noticias y replicarlas, para centrarme únicamente a mis pensamientos y reflexiones. Después de esta semana sin redes sociales tengo una conciencia más limpia y menos contaminada.

jueves, 13 de octubre de 2011

Ha fallecido Dennis Ritchie, el padre de UNIX y C

Otra despedida se cierne sobre este mundo tecnológico. Dennis Ritchie, creador de UNIX y el lenguaje C (junto a Ken Thompson) nos ha dejado a la edad de 70 años. Mientras el mundo alimenta la leyenda de Steve Jobs, olvida y mira hacia otro lado para un personaje que ha sido más influyente y determinante en la informática.

UNIX es el sistema operativo sobre el cual está basado Linux y BSD, este último forkeado por Apple para sus ordenadores. El lenguaje C es utilizado en la inmensa mayoría de aplicaciones que se ejecutan en casi cualquier ordenador del mundo, o del cual se han extraído los conceptos para otros lenguajes (como Java o PHP, por poner sólo un ejemplo. La dimensión de su legado es inmensamente influyente y determinante, sin los cuales la tecnología y la informática hoy en día no existirían como lo conocemos ahora.

Descansa en paz, Dennis. Muchas gracias por hacer de este mundo un lugar mejor.



martes, 11 de octubre de 2011

Frases

"Las cosas que más faltaban en mi vida no se vendían. ¿Por qué buscar más dinero? Estoy muy contento, los lujos no podrían haberme hecho tan feliz como haber logrado algo"
Richard Stallman (Padre del Software Libre)

jueves, 6 de octubre de 2011

El espíritu de la manzana se fue

Dice el cancionero popular que "algo se muere en el alma, cuando un amigo se va". Hay hombres que pasan por el mundo dejando una huella imborrable y duradera, hombres que son grandes por el espacio que ocupan en el mundo, pero sobre todo, por el vacío que dejan cuando ya no están.

Ha fallecido Steve Jobs, un visionario, un genio, un talento portentoso de los negocios, de la tecnología, de hacer todo humano y sencillo. Revolucionó la tecnología, sembrando muchas veces la polémica por su forma de hacer las cosas. Se atrevió a llegar donde nadie imaginó o se atrevió. Por ello, se ganó muchos enemigos envidiosos de su genialidad.

Yo he sido siempre crítico a los productos y a las prácticas de Apple, pero también he sido un admirador de la belleza, de la sencillez y de la innovación que Apple ha plasmado en sus productos. Detrás de todo eso ha estado Steve Jobs, el espíritu de la manzana (Apple). Su mente, su genio, su talento, su visión, su magia... se han desvanecido hace unas pocas horas, tras una larga, agónica y titánica lucha contra el cáncer de páncreas. Pero su recuerdo permanece, señalándonos la senda que podemos seguir hacia un mundo más humano y mejor.

Gracias, Steve, por todo lo que has hecho, por todo lo nos has dejado, por las lecciones que nos has dado, por el calor de ese corazón que ha dejado de latir para siempre. Gracias por decirnos que podemos lograr todo aquello que imaginemos. Te recordaremos siempre. Adiós. Descansa en Paz.


































viernes, 30 de septiembre de 2011

Linux, el resucitador de viejos ordenadores

Linux, el resucitador viejos ordenadores
Autor: Rafael Hernampérez Martín
Fecha: 18/08/2011

Los ordenadores no envejecen ante los ojos del tiempo, si no ante los ojos de la evolución del hardware y del software. ¿Alguien tiene un viejo PC en lo más recóndito de un cuarto trastero o acumulando polvo en algún oscuro rincón? ¿Por qué se ha jubilado una magnífica máquina que sigue funcionando estupendamente? Aquel flamante PC que con ilusión compramos para adentrarnos en el apasionante mundo de la informática tiene aún mucha vida por delante, y puede darnos un gran servicio y muchas horas de satisfacción. Aún podemos resucitarlo con software actual que aproveche sus humildes limitaciones.

Mientras la evolución natural de la tecnología tiende a ir vertiginosamente“in crescendo” en recursos y capacidades, existen entusiastas que exprimen las posibilidades de aquellas máquinas que unos pocos años han defenestrado ante la imparable tendencia de la industria, de la moda y de las exigencias de un público ávido de funcionalidades que exigen cada vez más velocidad y capacidad de procesamiento, de presentación visual, de memoria y de sistemas de almacenamiento. Y es que, pensándolo fríamente, no se deja tiempo para explotar y aprovechar eficientemente un ordenador. ¿Alguno recuerda la larga vida que tuvo el extinto Spectrum, con apenas unas pocas KBytes de memoria RAM y una vetusta cinta de cassette como medio de almacenamiento? Fue toda una década gloriosa que resistió heróicamente a los inicios del PC, y en donde muchos aprendimos el noble arte de programar en Basic y ensamblador. Ordenadores como el Amstrad, el Commodore y el MSX tuvieron días largos y gloriosos, y fueron idolatrados por legiones de fans que, con ilusión y afán, consiguieron reventar contínuamente sus aparentes limitaciones.

Linux es un sistema operativo muy potente y versátil, cuyo código, al estar abierto y ser libre, permite a millones de desarrolladores de todo el mundo adaptarlo tanto a necesidades genéricas como específicas, y compartir dichas adaptaciones con todo el mundo. Entre estas posibilidades está la de trabajar de forma excelente en viejas máquinas bajas de recursos hasta tales límites de devolverle la vida a primigenios PC ocupando apenas un diskette.

Sin llegar a ese extremo minimalista, la mayoría de los usuarios desearían darle una segunda oportunidad a su viejo PC, que le haga sentir una experiencia de usuario – dentro de lo posible - similar a la que tienen ahora, y para ello es imprescindible una interfaz gráfica de usuario, con un escritorio funcional, facilidad de uso, con aplicaciones actuales y capacidades de conexión a internet. Existen bastantes distribuciones Linux que contemplan estas características, por lo que hablar sobre todas ellas requeriría de varios artículos. Sin embargo, como introducción para conocer estas maravillas del software hemos elaborado una breve lista de cinco de las más populares.



Damn Small Linux


CPU mínima: 486DX
RAM mínima: 16 MB
Tamaño ISO: 50 MB
Arranque: Disco Duro, CD, memoria USB, Compact Flash
Escritorio: Fluxbox (http://fluxbox.org/)
Modo Live: Sí
Enlace: http://www.damnsmalllinux.org/index_es.html


Puppy Linux



CPU mínima: Pentium 166Mhz
RAM mínima: 128 MB
Tamaño ISO: 128 MB
Arranque: Disco Duro, CD, memoria USB, Compact Flash
Escritorio: Fluxbox (http://fluxbox.org/) y XFCE (http://www.xfce.org/)
Modo Live: Sí
Enlace: http://puppylinux.org



Slax


CPU mínima: 486DX
RAM mínima: 96MB
Tamaño ISO: 200 MB
Arranque: Disco Duro, CD, memoria USB
Escritorio: KDE (http://www.kde.org) y Fluxbox (http://fluxbox.org/)
Modo Live: Sí
Módulos software adicional: Sí
Enlace: http://www.slax.org


Vector Linux (Light Edition)


CPU mínima: Pentium 166Mhz
RAM mínima: 64MB
Tamaño ISO: 700MB
Espacio Disco Duro: 1,8 GB
Arranque: Disco Duro, CD
Escritorio: Fluxbox (http://fluxbox.org/) y JWM (http://joewing.net/programs/jwm/)
Modo Live: Sí
Enlace: http://vectorlinux.com/



Zenwalk



CPU mínima: Pentium III
RAM mínima: 256MB
Tamaño ISO: 700MB
Espacio Disco Duro: 1,5 GB
Arranque: Disco Duro, CD
Escritorio: XFCE (http://www.xfce.org/), Openbox (http://openbox.org/) o Gnome (http://www.gnome.org/)
Modo Live: Sí
Enlace: http://www.zenwalk.org




Enlaces de interés:
Distribuciones Linux para equipos modestos: http://rafinguer.blogspot.com/2007/04/distribuciones-linux-para-equipos.html
¿Cómo aprovechar ese viejo ordenador?: http://rafinguer.blogspot.com/2006/11/cmo-aprovechar-ese-viejo-ordenador.html





Linux, el resucitador de viejos ordenadores por Rafael Hernampérez Martín se encuentra bajo una Licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.

Estadísticas de Google+

Con la aparición de Google+, el gigante de las búsquedas ha vuelto a imponerse como líder indiscutible de internet y del negocio que genera, ocupando uno de los sectores más importantes y acercándose a Facebook. En muy poco tiempo ha conseguido captar millones de usuarios, en mucho menos tiempo que el resto de redes sociales, marcando un record muy difícil de batir.

Si eres bloguero o tienes una página web, quizá te interese promocionar tu perfil, mostrando tus estadísticas. Google ha habilitado un sitio especial llamado Social Statistics para ver las estadísticas de todos sus usuarios:

http://socialstatistics.com

Como dato anecdótico y curioso, en el primer lugar del ranking mundial aparece Mark Zukerberg, el "creador" de Facebook, por delante de Larry Page, fundador de Google.

Pero si realmente quieres promocionar tu perfil de Google+, mostrando tus estadísticas, en cualquier sitio Web, simplemente debes introducir el siguiente código HTML/JavaScript:

<div class="socialstatistics-widget" data-id="111989909116190075662"></div>
<script> (function(d,t){var b=d.createElement(t),c=d.getElementsByTagName(t)[0];b.async=b.src="http://socialstatistics.com/widget/widget.min.js";c.parentNode.insertBefore(b,c);})(document,'script');</script>


El parámetro data-id recoge tu ID en Google+ para que el Script consulte tus estadísticas. Para obtener ese ID, accede a Google+, haz click sobre tu perfil (en tu nombre). Se mostrará la página de tu perfil, y en la barra de dirección de tu navegador aparecerá una URL como ésta:


Copia el código (los números) y pégalos al código anterior. El resultado debería ser el siguiente:

lunes, 19 de septiembre de 2011

Primera toma de contacto con Ruby


Hace mucho tiempo que quería tomar contacto con un lenguaje de programación que ha tenido mucho auge en Japón y en EEUU, y que en España está tímidamente haciéndose conocer. En los últimos años, Ruby se está haciendo un hueco importante entre los lenguajes de programación, especialmente para la Web, gracias a su framework Ruby On Rails (RoR).

Ruby es un lenguaje de programación orientado a objetos, reflexivo e interpretado, con una sintaxis inspirada en Python y en Perl, y con una implementación de software libre. El intérprete de este lenguaje está disponible para varias plataformas, tales como Windows, Linux o MacOS. Fue creado en 1995 por Yukihiro "Matz" Matsumoto. La principal característica de este lenguaje es que está pensado para la productividad.

Para empezar a realizar cosas con este lenguaje tenemos una "shell" o consola (como en Python), donde podemos probar antes de generar el código final del programa. En el caso de Ruby, la consola se llama irb (Interface Ruby shell).

Lo más sencillo a probar es una simple operación matemática:

irb(main):001:0> 2+2
=>4

O un literal o cadena de caracteres, escrito entre comillas dobles o simples:

irb(main):002:0> "Soy Rafael"
=>"Soy Rafael"

La diferencia con otros lenguajes de programación es que en Ruby todo es un objeto y, por tanto, se puede acceder directamente a sus métodos y propiedades. Por ejemplo, en el último ejemplo, hemos usado un literal, que es un objeto de tipo String. Por tanto, se puede acceder a los métodos de dicho objeto:

irb(main):003:0> "Soy Rafael".length
=>10
irb(main):004:0> "Soy Rafael".reverse
=>"leafaR yoS"

El método length retorna la longitud del literal, mientras que el método reverse retorna el literal invertido.

El operador "+" permite sumar dos números, pero en el caso de los literales, permite concatenar dos literales en 1:

irb(main):005:0> "Soy " + "Rafael"
=>"Soy Rafael"


El operador "*" permite multiplicar dos números, pero en el caso de los literales permite repetir dicho literal n veces:

irb(main):006:0> "Rafael"*3
=>"RafaelRafaelRafael"

Sin embargo, si se intenta realizar cualquier otro tipo de operación matemática, ésta dará un error, ya que un literal tiene distinta naturaleza de los números. Lo mismo ocurriría si se desea ejecutar un método de literal para un número. Por ejemplo, lo siguiente daría un error:

irb(main):007:0> "El resultado es: " + 2+2                                            
=> TypeError: can't convert Fixnum into String

Para poder llevar a cabo ésto será necesario que los valores sean del mismo tipo, y para ello, disponemos de métodos de conversión o "casting":

irb(main):008:0> "El resultado es: " + (2+2).to_s                                     
=> "El resultado es: 4"

El método to_s (to string), permite convertir un valor numérico a un literal. En el ejemplo se ha utilizado el paréntesis para englobar el resultado del número.

El siguiente ejemplo realiza la operación inversa, es decir, convierte un literal a un número para poder realizar la operación matemática:

irb(main):009:0> 20 + "4".to_i                                                        
=> "24"

El método to_i (to integer), convierte el valor a un número de tipo entero.

Los siguientes ejemplos convierten un número en literal, y después ejecutan un método específico para literales:

irb(main):010:0> 365.to_s.reverse
=> "563"
irb(main):011:0> 65535.to_s.length                                                    
=> 5

Ruby también trata arrays, que son colecciones de valores. Dichas colecciones se especifican encerrando entre corchetes ([ ]) los valores que lo conforman. El siguiente ejemplo crea un array con una serie de valores numéricos:

irb(main):012:0>  [20, 15, 45, 78, 27]                                                 
=> [20, 15, 45, 78, 27]

Los arrays también son objetos, y como tales, también tienen métodos que realizan acciones:

irb(main):013:0> [20, 15, 45, 27].max                                                 
=> 45                                                                   
irb(main):014:0> [20, 15, 45, 27].min                                                 
=> 15                                                                   
irb(main):015:0> [20, 15, 45, 27].length                                              
=> 4                                                                    
irb(main):016:0> [20, 15, 45, 27].reverse                                             
=> [27, 45, 15, 20]

El método max (maximum) retorna el valor más alto del array. El método min (minimum) retorna el valor más bajo del array. El método length retorna la longitud del array, es decir, el número de valores que contiene. El método reverse retorna los valores del array en orden inverso.

Para facilitar el uso de los valores, Ruby permite almacenar los valores se pueden almacenar variables, las cuales, serán automáticamente del tipo de los valores que contienen. Las variables almacenan los valores bajo un nombre fácil de recordar, y mediante el cual se refiere a dichos valores. Por ejemplo, si la lista anterior se trata de una lista de préstamos, la cual se va a utilizar para varias operaciones, lo mejor es almacenarlo en una variable que repetir la lista constantemente:

irb(main):017:0> prestamos = [20, 15, 45, 27]                                            
=> [20, 15, 45, 27] 
irb(main):018:0> print ticket[1]                                                      
20=> nil                                                 
irb(main):019:0> prestamos.sort!                                                         
=> [15, 20, 27, 45]
irb(main):020:0> prestamos.sort!.reverse                                                 
=> [45, 27, 20, 15]

En este ejemplo, se almacena la lista en la variable prestamos. Las siguientes operaciones se realizan sobre la variable. En primer lugar, se visualiza el valor que se encuentra en el array, en la posición 1 (las posiciones dentro del array comienzan en 0 y terminan en longitud-1, y se accede a la misma indicándolo entre corchetes). A continuación, el método sort! ordena la lista de menor a mayor. Por último, ordena la lista y, a continuación, se invierte el orden de la lista (ordenación de mayor a menor).

Un literal es un array de caracteres. Probemos lo siguiente:

irb(main):021:0> texto = "en un lugar de la Mancha, de cuyo nombre no quiero acordarme"                                                                       
=> "en un lugar de la Mancha, de cuyo nombre no quiero acordarme"       
irb(main):022:0> texto['lugar']='sitio'                                               
=> "sitio"                                                              
irb(main):023:0> print texto                                                          
en un sitio de la Mancha, de cuyo nombre no quiero acordarme=> nil

La variable texto contendrá un literal, que en sí mismo en su array de caracteres. La segunda sentencia, busca la subcadena 'lugar' dentro del array, y reemplaza su valor por 'sitio'. La última sentencia muestra el valor del literal con el resultado, en donde 'lugar' ha sido sustituido por 'sitio'.

El método include? nos permite consultar si una subcadena se encuentra dentro del texto, retornando true (verdadero) o false (falso) en caso afirmativo o negativo.

irb(main):024:0> texto.include? "lugar"                                               
=> false
irb(main):025:0> texto.include? "Mancha"                                              
=> true                                                                

Recordemos que, aunque sea un literal, seguimos tratando un array, y que algunos de los métodos que estamos probando pueden servirnos para otro tipo de arrays. Así, el método include? también puede aplicarse a nuestro array prestamos:

irb(main):026:0> ticket.include? 20                                                   
=> true                                                                 
irb(main):027:0> ticket.include? 80                                                   
=> false

En el caso de los literales, hay métodos específicos, como, por ejemplo, el poder convertir todos los caracteres del array a minúsculas (con el método downcase) o a mayúsculas (con el método upcase):

irb(main):028:0> texto.downcase                                                       
=> "en un sitio de la mancha, de cuyo nombre no quiero acordarme"       
irb(main):029:0> texto.upcase                                                         
=> "EN UN SITIO DE LA MANCHA, DE CUYO NOMBRE NO QUIERO ACORDARME"

Los arrays son un recurso valioso en la programación con Ruby, pero la complejidad de las necesidades reales con los datos nos van a exigir algo más funcional y avanzado para un tratamiento secuencial y lineal de colecciones de datos. Ruby provee un tipo de dato cuya estructura es un diccionario y funciona como una tabla hash. Esto es, se define una clave o valor único, y un valor, lo que facilita las búsquedas. Las siguientes líneas definen y añaden valores a un diccionario, el cual es una colección de libros, los cuales están catalogados por una valoración. En este caso, el título del libro es la clave (valor único), y la catalogación es el valor (que puede repetirse):

irb(main):030:0> libros = {}
=> {}
irb(main):031:0> libros["Don Quijote de la Mancha"] = :esplendido
=> :esplendido
irb(main):032:0> libros["El Alquimista"] = :esplendido
=> :esplendido
irb(main):033:0> libros["Millenium"] = :muy_bueno
=> :muy_bueno
irb(main):034:0> libros["El angel caido"] = :mediocre
=> :mediocre
irb(main):035:0> libros
=> {"Don Quijote de la Mancha"=>:esplendido, "El Alquimista"=>:esplendido, "Millenium"=>:muy_bueno, "El angel caido"=>:mediocre}

A continuación, se consulta el tamaño del diccionario y se consulta la valoración de un determinado libro:

irb(main):036:0> libros.length
=> 4
irb(main):037:0> libros["Millenium"]
=> :muy_bueno

Para consultar las claves del diccionario, se utiliza el método key:

irb(main):037:0> libros.keys
=> ["Don Quijote de la Mancha", "El Alquimista", "Millenium", "El angel caido"]

Para consultar los valores del diccionario se utiliza el método values:

irb(main):038:0> libros.values
=> [:esplendido, :esplendido, :muy_bueno, :mediocre]



Conclusiones
Esta pequeña toma de contacto al lenguaje Ruby nos permite echar un vistazo a los tipos de datos básicos que conforman el lenguaje, así como vislumbrar la potencia que tiene al ser tratado todo como objetos, con sus correspondientes métodos. Para conocer los métodos de cualquier objeto, basta con ejecutar el método methods:

irb(main):038:0> 5.methods                                                            
=> [:to_s, :-@, :+, :-, :*, :/, :div, :%, :modulo, :divmod, :fdiv, :**,:abs, :magnitude, :==, :===, :<=>, :>, :>=, :<, :<=, :~, :&, :|, :^, :[], :<<, :>>, :to_f, :size, :zero?, :odd?, :even?, :succ, :integer?, :upto, :downto, :times, :next, :pred, :chr, :ord, :to_i, :to_int, :floor, :ceil, :truncate, :round, :gcd, :lcm, :gcdlcm, :numerator, :denominator, :to_r, :rationalize, :singleton_method_added, :coerce, :i, :+@, :eql?, :quo, :remainder, :real?, :nonzero?, :step, :to_c, :real, :imaginary, :imag, :abs2, :arg, :angle, :phase, :rectangular, :rect, :polar, :conjugate, :conj, :between?, :nil?, :=~, :!~, :hash, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :__id__, :object_id, :to_enum, :enum_for, :require, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]

irb(main):039:0> "Soy Rafael".methods                                                 
=> [:<=>;, :==, :===, :eql?, :hash, :casecmp, :+, :*, :%, :[], :[]=, :insert, :length, :size, :bytesize, :empty?, :=~, :match, :succ, :succ!, :next, :next!, :upto, :index, :rindex, :replace, :clear, :chr, :getbyte, :setbyte, :to_i, :to_f, :to_s, :to_str, :inspect, :dump, :upcase, :downcase, :capitalize, :swapcase, :upcase!, :downcase!, :capitalize!, :swapcase!, :hex, :oct, :split, :lines, :bytes, :chars, :codepoints, :reverse, :reverse!, :concat, :<<, :crypt, :intern, :to_sym, :ord, :include?, :start_with?, :end_with?, :scan, :ljust, :rjust, :center, :sub, :gsub, :chop,:chomp, :strip, :lstrip, :rstrip, :sub!, :gsub!, :chop!, :chomp!, :strip!, :lstrip!, :rstrip!, :tr, :tr_s, :delete, :squeeze, :count, :tr!, :tr_s!, :delete!, :squeeze!, :each_line, :each_byte, :each_char, :each_codepoint, :sum, :slice, :slice!, :partition, :rpartition, :encoding, :force_encoding, :valid_encoding?, :ascii_only?, :unpack, :encode, :encode!, :to_r, :to_c, :>, :>=, :<, :<=, :between?, :nil?, :!~, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :__id__, :object_id, :to_enum, :enum_for, :require, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]
    


Enlaces
Página oficial de Ruby: http://www.ruby-lang.org
Prueba Ruby desde el navegador: http://tryruby.org


lunes, 14 de marzo de 2011

Por la neutralidad en la red




Neutralidad en la red
Han actuado
0 personas
Nos faltan
0 apoyos


Apúntate ahora


Tu nombre
Tu apellido
Tu correo-e
Cód. Postal