jueves, 16 de mayo de 2013

Ricardo Galli, de software libre


Lo que se aprende, o debería, en la carrera de informática

marzo 28, 2013
En mi apunte anterior “Lo que demanda el mercado…” critiqué la obstinación de algunas autoridades universitarias, especialmente las de la mía, en su posicionamiento extremamente conservadora contra el GNU/Linux… y cómo el tiempo les ha quitado la razón (yo diría que debería haberles avergonzado). A pesar de los dos enlaces que puse en la posdata, muchos interpretaron que pensaba que la universidad debe enseñar GNU/Linux porque tiene más salida laboral. Otros opinaron (sobre todo en Twitter) sobre lo poco que se aprende en la universidad de las últimas tecnologías [de moda].
Hace cinco años escribí un apunte muy largo sobre este tema: Sintonizar universidades y empresas, pero ¿qué debe saber un ingeniero? (y hay más, de gente más importante y valiosa que yo, como ¿Qué deberíamos enseñar a los nuevos desarrolladores? de Bjarne Stroustrup), ahora intentaré ser muy breve para contestar a esos dos temas.
No creo en ello, ni afirmé, que se deba enseñar GNU/Linux porque es lo que demanda el mercado, sólo demostré la falacia de justificar su casi prohibición en la universidad basada en el argumento que no es lo que el “mercado quiere”, o que es “poco profesional”  (prometo que me cansé de oír esas frases repetida por los burócratas de las TI de mi universidad).
No sé qué tecnologías se usarán dentro de diez años, pero vista la evolución actual (Linux hasta en los bolsillos…), apostaría a que es más probable que siga habiendo un uso importante de Linux y sistemas derivados. Con lo que eso provoca social, económica, y empresarialmente.
Aún así, no me cerraría en ello, si viese que surgen alternativas diferentes, tecnológicamente seductoras, prometedoras, y con una comunidad de frikis early adopters entusiasmados, las analizaría con mucha curiosidad y dejaría que esa comunidad crezca y ponga sus herramientas al límite. Si fuese una autoridad académica, haría lo posible para favorecer esas iniciativas, porque no podemos estar seguro de si será nuestro entorno profesional del futuro.
Lo que nunca haría es basar decisiones universitaria-académicas únicamente a lo que el “mercado demanda”, y mucho menos intentaría perjudicar a iniciativas alternativas al status quo. Sólo de una cosa estoy seguro: el status quo tiene caducidad, aunque no sepamos la fecha.
Por otro lado, son típicas las quejas del tipo (ejemplo real, de Twitter)
Salí de la universidad sin saber qué era un servidor de aplicaciones. ¡Qué atrasados!
En este caso en particular, no veo el problema. Un servidor de aplicaciones es sólo un servidor que implementa paso de mensajes distribuidos con mecanismo de rendevouz cliente-servidor (i.e. el servidor espera por conexiones que inician los clientes), y sincronización general de llamada a procedimientos remoto (i.e. bloqueo del emisor hasta recibir respuesta del receptor, en este caso el servidor), con técnicas para minimizar los tiempos de esperas, como mantener un pool de hilos en marcha (i.e. temas simples de gestión de procesos).
Conociendo esos temas fundamentales -los estudiaron en redes y algoritmos concurrentes y distribuidos- no hace falta conocer al detalle la tecnología de un fabricante o plataforma en particular (en este caso seguramente se refería a la plataforma Java 2 Enterprise Edition) para poder coger el manual y empezar a producir en pocas horas.
Otro tipo de queja habitual es (elijo este ejemplo porque además incluye el hype de moda, NoSQL):
Tuve dos asignaturas de bases de datos relacionales, y cuando voy a una empresa usan NoSQL, que nunca vimos en la universidad ¡Qué atrasados!
Parece creer que las base de datos relacionales tuviesen los días contados, y no involucrase conceptos importantes como álgebra, almacenamiento, atomicidad, concurrencia, serialización de operaciones, etc. Pero lo más importante, el NoSQL es sólo volver a usar los viejos sistemas de bases de datos simples con hashes o B-Trees pero con esteroides: replicación, distribución, índices multi columnas. Con saber los conceptos básicos de ficheros, estructuras de árboles de búsquedas, consultas algebraicas (estudiadas en base de datos) y algoritmos distribuidos ya  se tienen las nociones importantes para saber cómo funcionan e implementan esos sistemas. No tiene sentido que se pierda tiempo aprendiendo los detalles de Redis, Memcached, Cassandra, MongoDB, etc. durante la carrera. El tiempo es limitado, y quizás cuando acaben la carrera en un par de años, esas herramientas hayan cambiado mucho.
Un problema es no saber distinguir los conceptos fundamentales de las implementaciones tecnológicas particulares (y el hype de los vendedores de la plataforma). El otro problema es no saber que, aunque se quejan del tiempo que pasan en clases, el tiempo es finito y es imposible enseñar y entrenar en cada una de las tecnologías y productos que se usan en el mercado. Menos aún si queremos formar a los alumnos para que sean profesionales en cualquier “mercado”, no sólo en el que rodea a cada universidad.
Estos temas más locales, o de formación más profesional -es decir, con entrenamiento que demanda el mercado- deberían dejarse en todo caso para los master profesionales.
Pequeño bonus
Muchos se preguntarán qué conceptos fundamentales deberían conocerse en la carrera, no puedo hacer una lista exhaustiva, pero aquí van unos pocos ejemplos.
Programación en C. Es un lenguaje muy sencillo, pero que obliga a pensar y programar a un nivel muy próximo a la arquitectura de ordenadores. Por ejemplo, saber cómo se almacenan los datos en memoria, y la necesidad de manipular punteros. Esto de una idea del trabajo de los compiladores e intérpretes de otros lenguajes a la hora de convertir gestión de estructuras sofisticadas al nivel de ejecución.
Estructuras de datosArrays, listas, colas, pilas, colas con prioridad, heapshashes, árboles balanceados, árboles balanceados de búsqueda, árboles radix, representaciones de grafos, B-Trees.
Algoritmos fundamentales. Se debería conocer los algoritmos de ordenamientos y sus análisis de complejidad, diferencias entre P, NP y NP completo, implementar de memoria al menos el quicksort y mergesort. Recursividad, algoritmos de grafos, se debería saber implementar de memoria undepth-first-searchbreadth-first search (y su “primo”, el algoritmo del camino más corto de Dijkstra), backtracking, manipulación y operaciones de datos binarios, programación dinámica, algoritmos distribuidos, operaciones matriciales, patrones de strings, expresiones regulares, geometría computacional, etc.
Programación orientada a objetos. Dominar al menos un lenguaje orientado a objetos, como C++, Java, C# o incluso Python (con objetos).
Conceptos básicos de sistemas operativos. Gestión de memoria, de procesos, sistemas de ficheros (se debería ser capaz de implementar un sistema de ficheros completo, uno basado en i-nodos no toma más de 2000 líneas en C, un FAT es aún más sencillo).
Gestión de procesos y concurrencia. Los procesos son la unidad de ejecución fundamental, hay que conocer cómo están estructurados y gestionados por el sistema operativo, y los problemas de acceso concurrente a recursos compartidos (secciones críticas, exclusión mutua, interbloqueo, esperas infinitas, spinlocks, instrucciones de hardware, mutexes, semáforos, monitores, lectores escritores, mensajes, sincronización, etc.)
Administración de Sistemas. Linea de comandos en Unix, programación en shell y en al menos otro lenguaje de scripting como Python, Perl o Ruby. Gestión de procesos, usuarios, grupos y permisos. Comandos más utiles y usados, grep, find, awk, sort, netcat, tcpdump…  Sistema de arranque. Configuración de correo, servidores web, interfaces de red, ssh (y derivados), gestión de claves y certificados, manipulación y recuperación de sistemas de ficheros, sistemas de ficheros remotos (NFS, SMB…).
Esta es una lista pequeña e incompleta, pero creo que forman parte del “núcleo”, de lo que considero debe dominar un ingeniero informático cuando acaba su carrera, en cualquier de las ramas. La mayoría de ellos se estudian en clases (o deberían), pero hay otros que son de “cultura general”, o que deberían aprender los alumnos por sí mismos. Por ejemplo, no tiene sentido que se dediquen horas de clases a enseñar programación en shell o ssh, sino que cada uno debe estar motivado para aprenderlo durante su carrera, o el profesor incentivar a que lo hagan, porque también facilitan el trabajo a los alumnos.
Si eres ingeniero informático y hay algunos de esos temas que no sabes, todavía tienes tiempo de aprender. Muchos de los temas que menciono los aprendí después de acabar la carrera -imagina el nivel, además la hice cuando no había libros de textos de algunos de los temas más novedosos-, a otros los aprendí de verdad cuando tuve que enseñarlos. Es en ese momento cuando te das cuenta de los agujeros del conocimiento que tienes (es la mayor ventaja de dar clases).

viernes, 8 de febrero de 2013

evolución de diseño de paginas web

Ubuntu

  • Este mismo mes, Ubuntu Mobile estará disponible para desarrolladores.
  • En octubre verá la luz en dos grandes mercados no especificados.
  • Competirá con otros nuevos sistemas operativos móviles como Firefox OS
  • Canonical está trabajando para que su nuevo sistema operativo para dispositivos móvilesUbuntu Mobile, llegue antes de lo previsto. En concreto, la compañía ha confirmado que en octubre de este año llegarán los primeros dispositivos con su sistema, que se estrenarán en dos grandes mercados no especificados.
    El 2013 va a ser un año fundamental para el mercado de dispositivos móviles. Una vez consolidados los smartphones, se están preparando nuevos sistemas operativos que prometen catapultar los dispositivos inteligentes. Mozilla y Telefónica están trabajando en Firefox OS, que permitirá conseguir un gran rendimiento en smartphones de bajo coste, todo pensando en mercados emergentes. Sin embargo, Firefox OS no es el único que prepara su estreno.
    Se especula con que uno de los primeros mercados en los que Ubutu Mobile verá la luz será NorteaméricaCanonical, compañía detrás del desarrollo de Ubuntu, está trabajando a marchas forzadas para disponer de una versión móvil de su sistema operativo. Denominado Ubuntu Mobile, se esperaba que el sistema se diese a conocer a principios de 2014. Sin embargo, Canonicalpretende competir este mismo año y así lo ha confirmado su director ejecutivo y fundador.
    En una entrevista a The Wall Street Journal, Mark Shuttleworth ha asegurado que los primeros Ubuntu OS se estrenarán en octubre de este mismo año. Por el momento el director ejecutivo de Canonical no ha especificado los modelos que se lanzarán ni los países donde se producirá el estreno, aunque sí ha asegurado que serán dos grandes mercados. Se ha especulado con que uno de esos mercados será América del Norte, pero por el momento no se sabe el segundo.
    Los planes de Ubuntu pasan porque este mismo mes de febrero su sistema pase a estardisponible para desarrolladores. El objetivo es que puedan ir trabajando con Ubuntu Mobile para que en el momento del estreno haya contenido interesante que termine de hacer atractivo el sistema. Lo cierto es que lo poco que Canonical ha adelantado sobre Ubuntu Mobile es alentador y hay una gran expectación por conocer el futuro del sistema.

jueves, 17 de enero de 2013

          el sistema operativo que utilizo yo.

          UBUNTU-SNOW-maverick 10.10


Una versión personalizada de Ubuntu Maverick pensada para ser un escritorio híbrido, fusionando la elegante y estética interfaz gráfica de Mac OSX con el poder incomparable de Ubuntu.


La finalidad de Ubuntu Snow es la facilidad y la accesibilidad, permite a los nuevos usuarios introducirse al mundo de ubuntu a través de un escritorio agradable y elegante, que incluye ¡nautilus elementary con coverflow, consola, quicklook y stacks!
Los usuarios de Mac que migran hacia ubuntu, tienen ahora una alternativa que les permita familiarizarse con el maravilloso entorno GNU/Linux.

Ubuntu Snow integra las aplicaciones más populares y funcionales para el diseño gráfico, la autoría DVD, la edición digital y la productividad de oficina. Además, Ubuntu Snow incluye el maravilloso parche de 200 líneas que optimiza el rendimiento en las funciones multitarea.
video sobre el sistema operativo:
Importante: El usuario del LiveCD es “caronte” y la contraseña “odal”
esta basado en la version de 32bits ubuntu 10.10

lunes, 14 de enero de 2013


Distribuciones de Linux

tuxLinux es un sistema de libre distribución por lo que podeis encontrar todos los ficheros y programas necesarios para su funcionamiento en multitud de servidores conectados a Internet. La tarea de reunir todos los ficheros y programas necesarios, asi como instalarlos en tu sistema y configurarlo, puede ser una tarea bastante complicada y no apta para muchos. Por esto mismo, nacieron las llamadas distribuciones de Linux, empresas y organizaciones que se dedican a hacer el trabajo "sucio" para nuestro beneficio y comodidad.
Una distribución no es otra cosa, que una recopilación de programas y ficheros, organizados y preparados para su instalación. Estas distribuciones se pueden obtener a traves de Internet, o comprando los CDs de las mismas, los cuales contendrán todo lo necesario para instalar un sistema Linux bastante completo y en la mayoría de los casos un programa de instalación que nos ayudara en la tarea de una primera instalación. Casi todos los principales distribuidores de Linux, ofrecen la posibilidad de bajarse sus distribuciones, via FTP (sin cargo alguno).
Existen muchas y variadas distribuciones creadas por diferentes empresas y organizaciones a unos precios bastantes asequibles (si se compran los CDs, en vez de bajársela via FTP), las cuales deberiais poder encontrar en tiendas de informática ó librerías. En el peor de los casos siempre podeis encargarlas directamente por Internet a las empresas y organizaciones que las crean. A veces, las revistas de informática sacan una edición bastante aceptable de alguna distribución
estas distribuciones son solo algunas de muchas  ISOS
ubuntu-logoUBUNTU
Distribución basada en Debian, con lo que esto conlleva y centrada en el usuario final y facilidad de uso. Muy popular y con mucho soporte en la comunidad. El entorno de escritorio por defecto es GNOME.
Redhat-logoREDHAT ENTERPRISE
Esta es una distribución que tiene muy buena calidad, contenidos y soporte a los usuarios por parte de la empresa que la distribuye. Es necesario el pago de una licencia de soporte. Enfocada a empresas.
Fedora-logoFEDORA
Esta es una distribución patrocinada por RedHat y soportada por la comunidad. Facil de instalar y buena calidad.
Debian-logoDEBIAN
Otra distribución con muy buena calidad. El proceso de instalacion es quizas un poco mas complicado, pero sin mayores problemas. Gran estabilidad antes que últimos avances.
Suse_logoOpenSuSE
Otra de las grandes. Facil de instalar. Version libre de la distribucion comercial SuSE.
Suse_logoSuSE LINUX ENTERPRISE
Otra de las grandes. Muy buena calidad, contenidos y soporte a los usuarios por parte de la empresa que la distribuye, Novell. Es necesario el pago de una licencia de soporte. Enfocada a empresas.
Slackware-logoSLACKWARE
Esta distribución es de las primeras que existio. Tuvo un periodo en el cual no se actualizo muy a menudo, pero eso es historia. Es raro encontrar usuarios de los que empezaron en el mundo linux hace tiempo, que no hayan tenido esta distribucion instalada en su ordenador en algun momento.
Gentoo-logoGENTOO
Esta distribución es una de las unicas que incorporaron un concepto totalmente nuevo en Linux. Es una sistema inspirado en BSD-ports. Podeis compilar/optimizar vuestro sistema completamente desde cero. No es recomendable adentrarse en esta distribucion sin una buena conexion a internet, un ordenador medianamente potente (si quereis terminar de compilar en un tiempo prudencial) y cierta experiencia en sistemas Unix.
ubuntu-logoKUBUNTU
Distribución basada en Ubuntu, con lo que esto conlleva y centrada en el usuario final y facilidad de uso. La gran diferencia con Ubuntu es que el entorno de escritorio por defecto es KDE.
mandriva-logoMANDRIVA
Esta distribución fue creada en 1998 con el objetivo de acercar el uso de Linux a todos los usuarios, en un principio se llamo Mandrake Linux. Facilidad de uso para todos los usuarios.