Archive for 19 febrero 2007

Conferencia 3

febrero 19, 2007

Conferencia # 3 Software Libre
Python Básico. Medardo Rodríguez

Documentaciones:

Debian “Aptitude install pithon_doc”

http://www.python.org/doc/

Además:

• Python Books
• Guido’s essays and presentations
• Non English documents

• Trabajaremos con Python 2.4, ya existe la version 2.5

• Al hablar de estilo de programación en los lenguajes de programación tradicionales se tiene el gusto del programador como lo más importante. Esto es erróneo.
Al asumir que el único proceso que ocurre en la programación es un proceso hombre-máquina se está cometiendo un error. La programación es un proceso social.
En el Software Libre cualquiera recibe los códigos fuentes. Inclusive en el software privativo se estudian los códigos fuentes.

• Claridad: Es el proceso de percepción de un mensaje (sintaxis) Esto debe ser lo más simple posible.

• El Python no es eficiente en cuanto a velocidad pero sí respecto a la claridad.

• C++ y Pascal están hechos para permitir ciertas libertades a la hora de escribir el código.

• Delimitadores en Python.

   o Espacios y sangrías (4 espacios)
   o Permiten definir los bloques de programación
o En C sería usando llaves.
o En Pascal sería usando begin…end;
o Todas las variantes a la hora de emplear delimitadores son correctas para el compilador de C y Pascal.
• Debe haber un acuerdo para que el estilo de programación sea único.

• Editor emacs creado por Stallman.

   • Es preferible usar solamente espacios y cuatro espacios para el tab.
   • No usar más de 80 caracteres en una línea.
   • Las opciones –t dan warnings si hay mezcla y    –tt errores.
   • Usar líneas en blancos para separar bloques
   • Las clases con dos líneas.
   • Las funciones con una línea.
   • Usar espacios en las expresiones para delimitar niveles de precedencia.
   • No usar comentarios que sean obvios.
   • Sensible a la mayúscula.
   • Convenciones por nombre.

• Una buena selección de nombres aporta claridad y elegancia a la estructura del código.

• Prioriza la buena comunicación entre los programadores.

• Libros para comenzar con Python.

o http://swaroopch.info/text/byte_of_python:main_page
o Dive into Python.
Debian
• Python es un lenguaje script o interpretado (sus programas se ejecutan en un interprete en vez de compilarse)

• Lenguaje de código intermedio

• Ventajas del shell ipython

• ¿Cómo se programa en Python?

Las instrucciones se pueden probar una a una en el shell
En Python todo es objeto.

Vamos a emplear una definición de objeto abreviada, en otras conferencias lo iremos ampliando.

Objeto: Es un valor con estado y comportamiento.

El estado está dado por un conjunto de atributos y sus valores en un instante de tiempo dado.

El comportamiento está definido por las operaciones (digamos métodos para los entendidos en la Programación Orientada a Objetos)

• Ejemplo de instrucciones
Complex=3+5j
Complex.__doc__
Import sys
Sys.__doc__ (__doc__ ofrece la documentación de soporte)

• Modulos en Python

Son objetos que se definen a través de un archivo de código fuente.
Para usar otros modulos se usa la instrucción import
Import sys, os
From getopt import getopt, getoptError

Más adelante veremos paquetes y formas de distribuir softwares.

• print imprime varias cadenas separadas por comas. Todos los objetos de Python deben tener una representación como cadena.

• Los módulos tienen un atributo de nombre “__name__”. Si es el modulo principal este atributo recibe el nombre de “__main__”

• Para probar modulos se puede usar:
If __name__=”__name__”:
Pass

# indica comentarios

#! Indica con que programa se ejecuta el script. Esto se conoce como pragma

“””, comentario con más de una línea

• Traduciendo nuestro código fuente a lenguaje natural nos da la medida de la claridad (eficacia) con que estamos programando.

• La codificación es distinta al razonamiento.

Tipos de datos:

   o Lógicos o boléanos.
o Enteros.
o Punto flotante.
o Complejos.
o Cadenas de caracteres.
o Diccionarios.
o Tuplas.
o Listas.

Booleano

   o 0 es false y todo lo demás es true.
o Cadena vacía "es false.
o Una lista vacía [] es false.
o Una tupla vacía () es false.
o Un diccionario vacío {} es false.
o print bool(0)
o print bool(5)
o print bool({})

Diccionarios

o D={“Server”:”data.sld.cu”, “database”:”master”}
print d[`server`]
d[`database`]=`main`
del d[`server`]
len(d)

• Algo bien encapsulado se puede utilizar fácilmente y queda claro lo que es. Esto tiene implicaciones en teoría de tipos.
El encapsulamiento implica que existe una relación biunívoca entre cada elemento.
Python tiene muy bien implementado el encapsulamiento.

• Los diccionarios también se pueden considerar como listas.

Listas

Li=[“a”,”b”,”mpilgrim”,”z”,”example”]
El tratamiento para las listas es muy peculiar, lo que se hace es enumerar las fronteras.
/a/b/c/d/e/f/g/h/i/j/ Las barras indican las fronteras de los elementos de las listas
Las fronteras se enumeran desde 0 hasta 10 (en este caso)
Luego L[1] es “a”
L[1:3] es b, c

Li[0]
Li[-3] De atrás hacia delante, el elemento que se encuentra en la frontera 3
Li[1:3] Los elementos entre esas fronteras
Li[2:] Los elementos desde la segunda frontera hasta la ultima
Li[:3] Los elemento desde el inicio hasta la frontera 3

Li[:] En clon de la lista (copia)
d=Li[:]

Li.append(“new”)
Li.insert(2,`second`)
Li.extend([`one`,`two`])
Li.index(`one`)
in devuelve true o false si el elemento se encuentra
Li.remove(`new`)
Li.pop()
Li.pop(2)
Li+=[`o`,2]
Li=3*[1,2] esto da como resultado {[1,2],[1,2],[1,2]}

Tuplas

Son de solo lectura
T=(1,2)
L=(5)
Type(L)
Las tuplas son más eficientes que las listas

Formatear cadena

X=5
print ´%s=%d´ %(`X`,x)
uid=”sa”
pwd=”secret”

Mapeando Listas y Tuplas

Para las cadenas existen los métodos joint y split

Funciones

   o Type
o Str
o Dir
o Import__builtin__

Control de Flujo

   o Il: elif: else:
   o While : else:
   o For i in range
   o Break
   o Continue

• Operadores

Conferencia 2. Programación

febrero 19, 2007

Curso de Software Libre
Conferencia #2 Programación Medardo Rodríguez

Nota: Para editar documentos se usa openoffice.org

Programación:

  • Ingeniería
  • Ciencia Conceptos
  • Arte
  • ?

Podemos decir que la programación es ingeniería, ciencia, arte y algo más. De eso se tratará nuestra conferencia de hoy.

Lo más intuitivo: Programación es ingeniería.

Ingeniería: Proceso de creación, construcción
de cosas.

La programación como ingeniería es saber definir qué estamos programando. Es producir programas de computación

Programa: Modelo funcional que la computadora es capaz de interpretar y ejecutar de forma que simule o represente un modelo original.

La programación es el objeto de estudio de la carrera de informática.

¿Qué es programar bien?
¿Cuándo estamos programando bien?

Pudiéramos decir que cuando obtenemos los modelos teóricamente
o científicamente correctos. Pero esto no es un objeto de la programación sino un principio.

No podemos asumir que programar rápido y con códigos pequeños es programar bien. Sino cuando el proceso se haga en el menor tiempo posible y el resultado cumpla con las expectativas trazadas. Es decir que se cumpla con los objetivos que me tracé al decidir hacer el programa.

La tendencia hoy en día es utilizar lenguajes scripts en lugar de lenguajes compilados.

La disponibilidad de memoria y su uso no es un problema actualmente dadas las capacidades de los equipos actualmente. La eficiencia en el uso de la memoria pasa a ser un problema secundario.

Al comenzar a programar se debe partir de objetivos bien definidos.

¿Qué es hacer ciencia?

¿Cuántos científicos de la programación conocemos?

o Donald Knuth es uno de los más reconocidos expertos en ciencias de la computación. Se le conoce principalmente como el autor de la obra El arte de programar, una de las más respetadas referencias en el campo de las ciencias de la computación. Prácticamente creó el campo del análisis de algoritmos e hizo muchos aportes seminales en varias ramas teóricas de la ciencias de la computación. Autor de TeX, LateX y True Type Fonts

o Alan Mathison Turing Fue matemático, científico de la informática, criptógrafo y filósofo. Se le considera uno de los padres de la Ingeniería informática siendo el precursor de la informática moderna. Proporcionó una influyente formalización de los conceptos de algoritmo y computación: la máquina de Turing.

o Edsger Dijkstra. Entre sus contribuciones a la informática está el algoritmo de caminos mínimos; también conocido como Algoritmo de Dijkstra. Recibió el Premio Turing en 1972.

o El creador de Lotus, Mitch Kapor, fue el que contribuyó a que las PC se hicieran tan populares. El empleo de esta hoja de calculo fue lo que lanzó las PCs a ser conocidas en todas partes. Director de la Fundación Mozilla

¿Qué es una ciencia?
Es un instrumento para estudiar “cosas”

Todo fenómeno es representado en la conciencia desde puntos de vistas diferentes. En nuestra conciencia formamos distintas representaciones.

Forma de representación en la conciencia de un objeto de estudio.

La ciencia implica metodología de representación, gestión del conocimiento.

Asumimos patrones que tomamos como ciertos sin cuestionarnos si son ciertos o no.

¿Es fuertemente tipeado Python?

Definición de Tipo de una variable.
Indica:
o Características de esa variable
o Operaciones sobre esa variable.
o Clasificación (Taxonomías)

¿Qué es una variable?

¿Qué es un puntero?
Señalar algo
Señalar direcciones de memoria.
Referenciar una zona de memoria.

Surge el paradigma de la Programación Orientada a Objetos (POO).

Ada Byron Planteó como se debía programar un artefacto, la maquina analítica. En honor a ella se nombró un lenguaje de programación. Planteó la necesidad de lenguajes superiores de programación y no directamente en lenguaje de máquina. A ella se debe además el termino Debug

Barbara Liskov nee Huberman, introdujo el concepto de subtipo, comúnmente conocido como Principio de Sustitución de Liskov. Trabajó junto a Jeannette Wing. Autora del primer lenguaje que hizo abstracción de datos, autora del primer lenguaje distribuido.

“Que un objeto x de tipo X es verificable Q(x), entonces para un objeto y de tipo Y es verdadero Q(y) si Y es un subtipo de X”

Esto no es más que una proposición de la lógica formal. Esto es hacer ciencia de la computación.

Los modelos que están bien hechos deberían ser auto documentados. No sería necesaria la existencia de las ayudas. Este fue un planteamiento de Donald Knuth.

Las ciencias tienen axiomas o asumen otros de otras ciencias.

¿Qué es un axioma?
En epistemología, ciencia del estudio de la producción y validación del conocimiento científico. Un axioma es una "verdad evidente" sobre la cual descansa el resto del conocimiento o sobre la cual se construyen otros conocimientos. No todos los epistemólogos están de acuerdo que los axiomas existan de esa manera. En matemáticas un axioma no es necesariamente una verdad evidente, sino una expresión lógica utilizada en una deducción para llegar a una conclusión. En matemáticas se distinguen dos tipos de axiomas: axiomas lógicos y axiomas no-lógicos.

Es una verdad asumida como base para construir una metodología

La programación se basa en las matemáticas, pero debe mucho más
a:
1. Teoría del Conocimiento (epistemología)
2. Semiótica (La semiótica se define como la ciencia general de los signos. Un signo (del griego semeîon) es todo lo que se refiere a otra cosa (referente) es la materia prima del pensamiento y por lo tanto de la comunicación.)
3. Lingüística (Noam Chomsky, También se le considera creador de la jerarquía de Chomsky, una clasificación de lenguajes formales de gran importancia en teoría de la computación.)

¿Qué es un error sintáctico?

Surge el paradigma de la Programación Manipulada por Datos. Es el paso intermedio a la Programación Orientada a Objetos.

Retomando el tema de Tipos
Veamos la siguiente declaración:
Int age
¿Para qué nos sirve?
¿En qué nos ayuda?
Evita asignaciones de valores de tipos incorrectos, age=’a’ no
se puede hacer. Tampoco age=3.24

Estamos creando un formalismo que nos ayuda a crear restrcciones en nuestro modelo

Eiffel es un lenguaje de programación que permite definir restricciones.

Age=2043 no es un error para el compilador pero es incorrecto para la edad de una persona

Nota: ¿Cuantos lenguajes de programación orientados a objetos existen?
Más de 188

En Pascal se puede definir:
Tage=0..120;
Age:Tag;

La selección de un lenguaje de programación no puede estar restringida a que sea fuertemente tipado. Existen restricciones que no se expresan con intervalos. Son más ricas que las anteriores

C++ es muy bueno para encapsular restricciones pero nadie lo utiliza, prefieren chequear las restricciones en el algoritmo.

Nota: Ser programadores eficientes es el objetivo del curso

La Teoría del Conocimiento es la ciencia fundamental para la programación.

Desarrollar productos para computadoras se hace con computadoras.

La programación es una metodología que se basa en la teoría del conocimiento.

El proceso de programación es un proceso de aprendizaje.

Los procesos del conocimiento son procesos de comunicación. Movemos información que contiene conocimiento.

En el caso de la programación los destinatarios del conocimiento no son seres humanos sino computadoras

Semiótica.
Los símbolos son las unidades básicas que conforman un lenguaje.

Existen tres planos:
1. Sintáctico ¿Qué son los símbolos?
2. Semántico ¿Qué significado tiene el símbolo?
3. Pragmático Plano superior de la semiótica.

Al asumir el mensaje semánticamente recibimos con rechazo los detalles sintácticos. Esto es un proceso en Teoría del Conocimiento.

¿Por qué se desarrolló la lógica formal?
Porque es la rama matemática que apoya la teoría del conocimiento.

Arte

Humberto Eco, entre otras cosas es un teórico de la semiótica. Según él un mensaje tiene tantas lecturas como receptores. O sea que un mensaje es muchos mensajes al mismo tiempo.

La teoría de la comunicación no es artística esencialmente

¿Qué es arte? ¿Estética?
El término arte procede del término latino ars. En la Antigüedad se consideró el arte como la pericia y habilidad en la producción de algo. Es solo a partir de finales del siglo XV, durante el renacimiento Italiano, cuando, por primera vez se hace la distinción entre el artesano y el artista (artesanía y bellas artes) y equivalentemente entre artesano, productor de obras múltiples y artista, productor de obras únicas.

(ver…)

Según Humberto Eco, es toda obra que sobrepasa al código que lo porta. Cuando se recibe con una calidad superior a lo que se puede sacar del código de ese mensaje.

Todo mensaje lleva un componente denotativo y otro componente connotativo.

Por ejemplo la frase “Te amo”, tiene diferentes
connotaciones para cada quien la lee o escucha.

Catarsis es el proceso de sensaciones placenteras al recibir un mensaje.

El arte es un proceso de comunicación.

No todos somos científicos de la programación. El que resuelve
ecuaciones diferenciales en matemáticas es programador en informática.

Los lenguajes de programación tiene diversos errores según la
teoría de la comunicación.

¿Es la POO todo lo bueno que se cree?
¿Qué significa que una operación es virtual?
¿Qué significa que un método sea virtual?

A pesar de lenguajes tan malos al menos usarlos lo mejor posible.

Las personas inconscientemente le ponemos a nuestros mensajes una intencionalidad artística. Y en este punto es dónde se une arte y programación. Esto tiene que ver con el Software Libre.

Todo el que produce Software Libre tiene la intencionalidad del que lo vea (un algoritmo o un modelo) se maraville. No estamos hablando del diseño de las ventanas. A nivel social se incrementa exponencialmente. Todos tratan de mejorarlo. Coger esa joya de programación y superarlo.

Si todo el arte funcionara como el Software Libre esa connotación será superior. El paradigma del Software Libre sería superior.

El software Libre es muy joven. La esencia que lo hace mejor es su libertad.
Su influencia positiva está dada por su rapidez y eficiencia.

La programación comprende cuatro fases:
1. Percepción.
2. Razonamiento.
3. Diseño
4. Implementación.

Usualmente transformamos el problema original en otro. Basta con analizar el ejemplo de hacer la búsqueda de una tarjeta en un tarjetero. Frecuentemente todos lo que programan se plantean el algoritmo como: “Tomo la primera tarjeta, comparo, sino es la buscada, paso a la tarjeta siguiente, así sucesivamente hasta encontrar la tarjeta deseada”. Pero realmente al programar no empleamos ni:
Repeat
Until
(de Pascal)

ni,
do
while (de C)

generalmente lo que hacemos es:

for (int i=0; i<=count; i++)
{
if(tarjeta[i]==actual)
break;
}

transformamos el problema original en otro.

Hoare y Dijkstra establecieron las bases axiomáticas de la programación. La programación tiene axiomas pero hay que encontrárselos.

Sir Charles Antony Richard Hoare (Tony Hoare) es un científico Británico en computación, conocido sobre todo por la invención, en 1960 de Quicksort, que es el algoritmo de ordenamiento más ampliamente utilizado en el mundo, y probablemente el algoritmo de cualquier tipo más utilizado.
Estas fueron sus palabras al recibir en 1980 recibió el Premio Turing de la ACM(Association for Computing Machinery):
"Concluyo que hay dos formas de realizar el diseño de una aplicación: La primera es el hacerla tan sencilla que sea obvio para todos que no tenga deficiencias y la segunda es el hacerla tan complicada que no queden deficiencias obvias."

Un programa es una forma de representación del conocimiento. Este sería el primer axioma de la computación.

Nada de Machacar

febrero 16, 2007

Nada de machacar

Continuamos con el curso de Software Libre que se desarrolla en el Palacio de Computación, La Habana, Cuba. La segunda conferencia impartida por Medardo Rodríguez escudriñó en el concepto de programación que cada uno de nosotros se ha inventado o asumido como cierto. Pregunta tras pregunta llegó a demostrar que pese al auditorio conformado por estudiantes y especialistas de la rama, ninguno era capaz de responder exactamente ¿Qué es programar bien?

A cada respuesta del auditorio el conferencista respondía con otra pregunta cuestionando la respuesta y su validez. Llegó el momento que un asistente propuso buscar una wikipedia para poder responder a todo. Confieso que me sentí aplastado pese a mis 10 años de graduado de Ciencias de la Computación. Era incapaz de acertar en las interrogantes más inocentes o triviales para la actividad. Inclusive aquellas que constituyen la base de la misma. Pero el propio Medardo aclaró que no era su interés maltratar sino demostrar que no sabemos nada. Su pretención era trazar metas profundas en qué es programar y hacernos comprender “que por mucho que estudie más conocimiento tendré que aprender”.

Desde el comienzo Medardo guió al auditorio hacia su esquema de que era Programación:
Programación
=>Ingeniería
=>Ciencia
=>Arte
=>? (¿algo más?)
Y fue argumentando cada concepto con la ayuda de los propios asistentes que aportaron sus conceptos y definiciones exactas o intuitivas. Se fue armando entonces el rompecabezas.

Asumí en el acto la definición de programación como Ingeniería, reconozco que es lo que he hecho hasta este momento en la especialidad. Asumí el lado de ciencia sin saber explicar exactamente por qué. Pero el lado del arte estaba totalmente alejado de imaginarlo. ¿Por qué la programación es un arte? ¿El Software Libre como arte? Realmente fue el puntillazo para reconocer mi ignorancia. No sólo por la pregunta sino por la propia definición de arte.

Sigue manteniéndose el interés en el curso y la expectativa en las próximas conferencias crece exponencialmente entre los asistentes.

Alexander Cordero Pérez

Curso para Software Libre. Conferencia 1

febrero 16, 2007


Programación para Software Libre

Notas

Conferencia 1 Introducción al Software Libre.

Maikel Moya

¿Por qué muchos otros programadores quieren cooperar?

Manifiesto
GNU

Richard Stallman
Creador del GNU, su aporte más que informático se considera filosófico.

Proyecto GNU
o Manifiesto
o Prroyecto
o FSF Free Software Foundation
o Copy Left

GLP General Public License

GCC GNU Compiler Collection

Linus Torvalds Creador del núcleo compatible
con UNÍS

¿Qué plantea el Manifiesto GNU?
Se establecen distintas libertades que puede esgrimir el cliente, ya sea un
programador o no. Sencillamente es hacer con el software lo que quiera. Siempre
que preserve estas libertades
Libertad 0: Usar
Libertad 1: Estudiar
Libertad 2: Distribuir
Libertad 3: Mejorar y hacer públicas

Libre no quiere decir gratis.
El término inglés free denota tanto libre como gratis y esto a
traído confusión. El software libre no necesariamente tiene que
ser gratis. Sí se puede vender.

GPL2 => GPL3
• Resolver huecos que permitirían quitar libertades a los usuarios.
o DRM
o Tivo
• Resolver ambigüedades y aumentar la compatibilidad con otras licencias.
• Facilitar la adaptación a otros países.
• Defender a la comunidad del uso indiscriminado de patentes

Uno de las imposiciones del ALCA a los firmantes es la de patentar el software.

Ventajas:
   • Independencia Tecnológica.
   • Apropiación de Tecnología.
   • Facilitar la competencia.
   • Seguridad.
   • Estimula el uso de estándares.
   • Potencia la innovación.
Desde el punto de vista social:
   • Conocimiento compartido (Similar a Wikipedia)
   • Construcción Comunitaria.
   • Desarrollo Endógeno.
Económico:
   • No necesidad del pago de licencias de uso.
   • Coste Total de la Propiedad (TCO) menor.
   • Autogestión por parte del estado.
Soporte en Internet:
   • Listas
   • Foros
   • Canales de IRC (Internet Relay Chat, Charla interactiva mediante Internet. Herramienta de Internet que permite a un usuario "charlar" en tiempo    real con otros usuarios en modo texto.)
Soporte desconectado:
   • Empresas Especializadas.
   • LUGs(Grupos de Usuarios de SL)
   o Cursos
   o Charlas
   o InstallFest (Festivales de Instalación)
¿Dónde correo el SL?
   • Estaciones
   • Servidores (70% de los servidores en el mundo usan Apache)
   • Enrutadores 
   • Celulares
Países:
   • Venezuela (software para PDVSA)
   • Brasil
   • Alemania
   • España
   • México
   • India
   • ...entre otros
Compañías:
   • Google
   • Hwelett-Packard
   • IBM
   • Pixar
   • Dreamworks
   • Sun (licenció Java)
   • …entre otros
Cuba:
   • CIGB, Centro de Ingeniería Genética y Biotecnología.
   • Aduana General de la República
   • Infomed.
   • Universidades, facultad 10 de la UCI.
   • ...entre otros.
Frontera no tecnológica:
   • Conocimiento libre
   • Socialización (Wikipedia)
   • Lucha contra patentes.
   • Software
   • Biotecnología verde, biotecnología de plantas.
   • Biotecnología roja, biotecnología de humanos
Plataforma
   Conceptos de:
   • Particiones
   • Espacio de nombres únicos.
   • Superusuario: root.
   • Montar y Desmontar 
   Asociar y desasociar un sistema de ficheros a un espacio de disco(directorio    del sistema)

Directorios obligatorios en la raíz del Linux.
/bin /opt
/boot /proc
/dev /root
/etc /sbin
/home /srv
/lib /sys
/media /usr
/mnt /var

/ denota directorio
   
Modularidad:
   Componentes bien compatibilizados y determinados:
   • Kernel (detecta los dispositivos)
   • Shell (interprete de comandos)
   • X window (interfaz gráfica)
   • Display manager.
   • Windows Manager.
   • Entoprno de Escritorio.
   • Aplicación.

Distribuciones:
Es el código fuente compilado, acomodado, listo para correr y copiado
en un CD para hacerlo llegar a los usuarios que lo deseen.

Existen compañías que se dedican a hacer distribuciones, cobran
por el producto, brindan capacitación y asistencia técnica.

Debian:
Comunidad que se dedica a hacer distribuciones. Actualmente Hewelett-Packard
le da soporte a sus productos. Esto avala la calidad técnica del producto
de Debian. Cuentan con más de 15 000 aplicaciones.

Ubunto:
• Tiene a Debian como base.
• Amigable al usuario.
• Marketing agresivo.
• Amplio soporte comunitario.
• Es una distribución muy cómoda.

LiveCD:
Surge a partir del diseño robusto del SL. Es un CD con un sistema GNU
que es capaz de despertar completamente el equipo sin instalarse en la computadora.
Un ejemplo es el Kanoppix. Esto permite que el software sea conocido sin instalarse.

Especializaciones:
• Cubalin
• LinUHx, adaptación del Knoppix desarrollado en la UH. Se pretende
especializar.

Herramientas:
• GNU C Library
o Diferentes Kernels
? Linux
? Hurd
? Free BSD
? NetBSD
o Diferentes arquitecturas.
• Toolcahin GNU
o GNU make: automatizar la construcción.
o GNU Compiler Collection GCC
o GNU Binutils
o GNU Debugger (GDB.) depurador interactivo.
o GNU Build system (autotools)

• Se emplean en el desarrollo de:
o Hurd
o Linux
o BSD
o Sistemas embebidos (sistemas integrados)
o Solaris
o Playstation3
• Bash, el shell de GNU
• Perl , lenguaje de scripts
• Pitón, lenguaje de scripts.
• Ruby
• Ligaduras: se necesitn para poder emplear las bibliotecas creadas en
C y C++
• Herramientas IDEs:
o Anjuta + Glade
o Kdevelop + QtDesigner
o Eclipse, megaproyecto, IDE desarrollado en Java

Conferencia 1

febrero 1, 2007

Conferencia 1 Introducción al SL. Maikel Moya

¿Por qué muchos otros programadores quieren cooperar? Manifiesto GNU

• Richard Stallman
Creador del GNU, su aporte más que informático se considera filosófico.

• Proyecto GNU
o Manifiesto
o Prroyecto
o FSF Free Software Foundation
o Copy Left

• GLP General Public License

• GCC GNU Compiler Collection

• Linus Torvalds Creador del núcleo compatible con UNÍS

¿Qué plantea el Manifiesto GNU?
Se establecen distintas libertades que puede esgrimir el cliente, ya sea un programador o no. Sencillamente es hacer con el software lo que quiera. Siempre que preserve estas libertades
Libertad 0: Usar
Libertad 1: Estudiar
Libertad 2: Distribuir
Libertad 3: Mejorar y hacer públicas

Libre no quiere decir gratis.
El término inglés free denota tanto libre como gratis y esto a traído confusión. El software libre no necesariamente tiene que ser gratis. Sí se puede vender.

GPL2 => GPL3
• Resolver huecos que permitirían quitar libertades a los usuarios.
o DRM
o Tivo
• Resolver ambigüedades y aumentar la compatibilidad con otras licencias.
• Facilitar la adaptación a otros países.
• Defender a la comunidad del uso indiscriminado de patentes

Uno de las imposiciones del ALCA a los firmantes es la de patentar el software.

Ventajas:
• Independencia Tecnológica.
• Apropiación de Tecnología.
• Facilitar la competencia.
• Seguridad.
• Estimula el uso de estándares.
• Potencia la innovación.

Desde el punto de vista social:
• Conocimiento compartido (Similar a Wikipedia)
• Construcción Comunitaria.
• Desarrollo Endógeno.

Económico:
• No necesidad del pago de licencias de uso.
• Coste Total de la Propiedad (TCO) menor.
• Autogestión por parte del estado.

Soporte en Internet:
• Listas
• Foros
• Canales de IRC (Internet Relay Chat, Charla interactiva mediante Internet. Herramienta de Internet que permite a un usuario “charlar” en tiempo real con otros usuarios en modo texto.)

Soporte desconectado:
• Empresas Especializadas.
• LUGs(Grupos de Usuarios de SL)
o Cursos
o Charlas
o InstallFest (Festivales de Instalación)

¿Dónde correo el SL?
• Estaciones
• Servidores (70% de los servidores en el mundo usan Apache)
• Enrutadores
• Celulares

Países:
• Venezuela (software para PDVSA)
• Brasil
• Alemania
• España
• México
• India
• …entre otros

Compañías:
• Google
• Hwelett-Packard
• IBM
• Pixar
• Dreamworks
• Sun (licenció Java)
• …entre otros

Cuba:
• CIGB, Centro de Ingeniería Genética y Biotecnología.
• Aduana General de la República
• Infomed.
• Universidades, facultad 10 de la UCI.
• …entre otros.

Frontera no tecnológica:
• Conocimiento libre
• Socialización (Wikipedia)
• Lucha contra patentes.
o Software
o Biotecnología verde, biotecnología de plantas.
o Biotecnología roja, biotecnología de humanos

Plataforma
Conceptos de:
• Particiones
• Espacio de nombres únicos.
• Superusuario: root.
• Montar y Desmontar
Asociar y desasociar un sistema de ficheros a un espacio de disco(directorio del sistema)

Directorios obligatorios en la raíz del Linux.
/bin /opt
/boot /proc
/dev /root
/etc /sbin
/home /srv
/lib /sys
/media /usr
/mnt /var

/ denota directorio

Modularidad:
Componentes bien compatibilizados y determinados:
• Kernel (detecta los dispositivos)
• Shell (interprete de comandos)
• X window (interfaz gráfica)
• Display manager.
• Windows Manager.
• Entoprno de Escritorio.
• Aplicación.

Distribuciones:
Es el código fuente compilado, acomodado, listo para correr y copiado en un CD para hacerlo llegar a los usuarios que lo deseen.

Existen compañías que se dedican a hacer distribuciones, cobran por el producto, brindan capacitación y asistencia técnica.

Debian:
Comunidad que se dedica a hacer distribuciones. Actualmente Hewelett-Packard le da soporte a sus productos. Esto avala la calidad técnica del producto de Debian. Cuentan con más de 15 000 aplicaciones.

Ubunto:• Tiene a Debian como base.
• Amigable al usuario.
• Marketing agresivo.
• Amplio soporte comunitario.
• Es una distribución muy cómoda.

LiveCD:
Surge a partir del diseño robusto del SL. Es un CD con un sistema GNU que es capaz de despertar completamente el equipo sin instalarse en la computadora. Un ejemplo es el Kanoppix. Esto permite que el software sea conocido sin instalarse.

Especializaciones:• Cubalin
• LinUHx, adaptación del Knoppix desarrollado en la UH. Se pretende especializar.

Herramientas:
• GNU C Library
o Diferentes Kernels
 Linux
 Hurd
 Free BSD
 NetBSD
o Diferentes arquitecturas.
• Toolcahin GNU
o GNU make: automatizar la construcción.
o GNU Compiler Collection GCC
o GNU Binutils
o GNU Debugger (GDB) depurador interactivo.
o GNU Build system (autotools)

• Se emplean en el desarrollo de:
o Hurd
o Linux
o BSD
o Sistemas embebidos (sistemas integrados)
o Solaris
o Playstation3
• Bash, el shell de GNU
• Perl , lenguaje de scripts
• Pitón, lenguaje de scripts.
• Ruby
• Ligaduras: se necesitn para poder emplear las bibliotecas creadas en C y C++
• Herramientas IDEs:
o Anjuta + Glade
o Kdevelop + QtDesigner
o Eclipse, megaproyecto, IDE desarrollado en Java

Software Libre en Cuba

febrero 1, 2007

Software Libre en Cuba

Como una iniciativa para la promoción del Software Libre en Cuba se ha comenzado un curso en el Palacio de Computación. El mismo se ha propuesto ampliar el número de los seguidores de Software Libre en nuestro país, que sean más los conocedores de esta filosofía de programación y crear una comunidad de programadores para el Software Libre.

La primera conferencia de nivelación fue impartida por Maikel Moya. Se explicó que comprendía el proyecto GNU, su manifiesto, la licencia GPL y la filosofía defendida por Stallman en este proyecto. Se explicó que era una Distribución y ejemplos de Distribuciones existentes. Además se ejemplificaron las posibilidades que brinda el Software Libre en cuanto a desarrollo endógeno.

Uno de los puntos más importantes fue el reconocimiento hacia las amplias ventajas que brinda el Software Libre ante el Software Propietario. Las posibilidades para países en vías de desarrollo contribuyendo en gran medida a estrechar la brecha digital. Tema tan polémico y debatido en la actualidad no sólo por informáticos.

Al final de la conferencia se inició un debate a la manera de Software Libre: Todos preguntaron y todos respondieron. El que pudo aportar a solucionar las dudas lo hizo y de tal forma que el debate se extendió por más de una hora y el punto final hubo de ponerlo las restricciones del horario de la instalación. Los presentes quedaron imbuidos en el tema de los aspectos legales y que implica realmente el Software Libre. El debate no estuvo exento de buenas preguntas y buenas respuestas.

Este curso constituye un llamado a la comunidad de programadores y demás especialistas de la rama informática del país para que se interesen y comiencen a valorar las posibilidades del Software Libre. Incluso más, convocó a todos a incorporarse a los proyectos ya existentes y abogar por el respaldo de las instituciones para dar soporte a eventos como estos. Promover la cultura de Software Libre es una tarea que no ha comenzado con este curso, sino que viene avanzando desde hace tiempo y ahora a cristalizado en este primer curso. Se pretende que la experiencia se extienda a todo el país y que cada uno de los asistentes contribuya en ello reproduciendo el curso, trasmitiendo ideas, aportando otras nuevas.

La acogida del curso superó las expectativas de los organizadores. Las 100 capacidades del teatro del Palacio quedaron cubiertas desde la primera conferencia y ya ha quedado decidido que para el próximo curso se deberá prever un local más amplio. Por el momento todos estamos esperando la segunda conferencia, que se anunció ya muy prometedora.

Alexander Cordero Pérez.