====== ie-0117 Programación bajo plataformas abiertas ====== ===== Página proyectos estudiantes ===== [[teaching:ie0117:proyectos:2012:i:proyectos|Proyectos]] ===== Carta al estudiante ===== {{:ie0117:ie0117_carta_estudiante_ii-2012.pdf|ie-0117}} ===== Clases ===== ==== Primera semana (Instalación de Debian GNU/Linux) ==== Consiste en la instalación de Debian hasta tener un sistema gráfico completo, con el que se pueden instalar aplicaciones y tener acceso de administración al sistema. === Notas importantes === * No loggearse como "root" al sistema gráfico. Siempre usar un usuario normal. * Evitar utilizar "sudo su" para tareas administrativas. Mejor usar "sudo comando". === Comandos, archivos y temas importantes === * apt-get install .... * apt-cache search * apt-cache show * apt-get update * apt-get dist-upgrade * nano * /etc/apt/sources.list === Temas de lectura y comprensión === * Linux distributions * Desktop environments * Window managers * sudo * apt * Debian * Parts of a computer (hardware) * PC booting process * Linux booting process * Grub * Linux kernel * initrd ==== Segunda y tercera semana - Haciendo cosas útiles básicas! ==== Tenemos un sistema operativo y ya queremos comenzar a hacer algunas cosas interesantes como: * Como crear, borrar, mover, archivos y directorios? * Como acceso mi llave USB? * Quiero tener mi propia página web! Como? Y si lo quiero en mi casa y quiero que sea accesible al público? * Bueno, como es que se configura la red? Que es una red de computadoras? * Como me comunico con otra computadora? Como acceso otra computadora? * Y si mi hermano quiere usar mi compu, le doy mi clave de usuario o puedo hacer algo más? Y que tal si queremos compartir algunos archivos (suid)? * Como copio archivos a (desde) otra computadora? (sshfs, scp, rsync) * Como compilo un programa sencillo en linux? (hello world) * Como compilo un programa desarrollado por alquien más? (YARP) wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.6-rc2.tar.bz2 === Temas tentativos a cubrir === * Apache * Simple network administration (/etc/network/interfaces) * Working with the terminal (filesystem cmds) * Simple system administration (adduser, addgroup) * Remote access (ssh, vnc) * Environment (PATH) * File Systems === Proyectos modulo Linux === == Asistente de compras == - Pagina web - lista de compras - Aplicación de celular - Conexion a base de datos - Modificar si es necesario - base de datos Laura Fernandez Diana Fernandez Eduardo navarro == Matricula == Aplicación celular para matricula - Web server Kevin Villalobos == Facilitación de mantenimiento para internet cafes == - Servidor tftp - Servidor dhcp - Creación de las imagenes - Selección de varios sistemas de archivos para instalar Willi villalobos == Disponibilidad de servicios por red == - Servidor compartido de impresión y escaneo (cups) - Servidor archivos (nfs) Fernando Cortez == Reutilización de equipo obsoleto == - Estudio de aplicaciones y mercado - Prototipo funcional (Tal vez es muy poco para dos) Brian Villalobos Andres Sanchez (Buscar algo para él para linux) == Asistente personal (Final) == Andres Sanchez == Sistema integrada para casa inteligente == Jorge blanco Carolina vargas == Todavía no definida la aplicación final == Jose Vargas (sistemas encrustados) == Servidos integrado de almacenamiento == - Samba - Respaldos automatizados - Firewall - Dos clientes Javier Pacheco Jeancarlo Chavarria == Sistema de anuncios y busqueda de alquileres == (considerar unirlo al primer proyecto) Jorge Rodriguez Faltan Alejandro masis\\ Carolina arauz\\ Josselyn porras - oyente\\ Isaacs Calvo\\ ==== Python ==== === Primera semana === * ipython * for, enumerate, zip * list comprenhesions * xrange * map * reduce * lambda * functions * lists * ints * strings * floats * dicts * while * break, continue * pass * tuples * sets * immutable * First program * Accepting arguments: sys.argv, optparse * input, output, open, pickle * exceptions * classes * Numpy === Segunda semana === * Python-qt * Python YARP * Python orocos-kdl == Python-qt == sudo apt-get install libqt4-dev qt4-dev-tools python-qt4-dev pyqt4-dev-tools libtclap-dev import sys from PyQt4 import QtGui,QtCore app=QtGui.QApplication(sys.argv) main_widget=QtGui.QWidget() button=QtGui.QPushButton("test", main_widget) main_widget.show() main_widget.setWindowTitle("test application") def testprint(): print "Works" QtCore.QObject.connect(button,QtCore.SIGNAL("clicked()"),testprint) sys.exit(app.exec_()) == Python yarp == * We use python for this example * Open a console and run “yarp server”. Leave this console running * Type “ipython” in another console, then in the ipython interpreter, type the following: import yarp as y y.Network.init() input=y.BufferedPortBottle() output=y.BufferedPortBottle() input.open("/summer/in") output.open("/summer/out") While True: inputbottle=input.read(False) if inputbottle: outputnumber=inputbottle.get(0).asDouble()+inputbottle.get(1).asDouble() outputbottle=output.prepare() outputbottle.clear() outputbottle.addDouble(outputnumber) else: y.Time.delay(0.001) * In this moment the python application is in an infinite loop waiting for data in the input port * Start two extra consoles * In the first new console execute: “yarp write … /summer/in” * In the second new console execute: “yarp read … /summer/out” * New in the first new console you can type “10 10” and you will see the result in the second new console. * Basically the summer module is processing the data that is writen in the /summer/in port and the results are published in the /summer/out * With this you can easily make small simple modules and test them without having the whole system in one single file. Also allows to segment work between colleges and to separate processing in different computers. * You can interface this system with player. You comunicate with the hardware using player and between your own processing modules using YARP. ===== Ideas para proyectos ===== ==== Modulo Linux ==== * LVM+RAID servidor de alta disponibilidad * backup+LVM+snapshots * tftp+dhcp+nfs diskless boot diskless root * LaTeX + beamer * Bases de datos * Como hacer un paquete de debian y como empaquetar un proyecto en un paquete de debian * Como compilar el kernel de Linux ==== Proyecto final ==== * El sistema de información integrada de la escuela * Sistema para avisar a conserjes sobre asuntos de limpieza en la escuela ===== Materiales =====