Flisol en Carapachay

6 abril 2011 by

El FLISol es el Festival Latinoamericano de Instalación de Software Libre, es el evento de difusión de Software Libre más grande en Latinoamérica, y este año se hace en Carapachay, Vicente Lopéz (entre otras ciudades).
El lugar elegido es la escuela de oficios San Cayetano de Carapachay.

Para tal fin, las diversas comunidades locales de software libre (en cada país y en cada ciudad/localidad), organizan simultáneamente eventos en los que se instala, de manera gratuita y totalmente legal, software libre en las computadoras que llevan los asistentes.
Además, en forma paralela, se ofrecen charlas, ponencias y talleres, sobre temáticas locales, nacionales y latinoamericanas en torno al Software Libre.

En este sitio podés encontrar la data del evento.

La puerta de la escuela estará abierta para aquellas persona que deseen asistir y pasar un lindo dia de la mano del Software Libre.

Primera experiencia docente con Python

13 junio 2010 by

Me llamo Dante Sanfelice y gracias a una recomendación de José Avendaño estoy dando un taller de programación en lenguaje Python en el Centro de Atención Integral San Juan Bautista.
El curso está compuesto por chicos y chicas entre trece y dieciséis años, estamos estudiando los conceptos básicos de programación y escribiendo código Python.

Para enseñar estoy utilizando un libro que me paso Javier Castrillo que se llama Doma de serpientes para niños, aprendiendo a programar con python el website de la traduccion esta aquí. Ahora estamos viendo el uso del modulo turtle que permite hacer dibujos en la pantalla .

Nuestra sala de programación esta compuesta por dos servidores que arman una red TCOS de doce computadoras en las cuales corre un sistema Ubuntu 9.04. La red fue instalada por los chicos de sanca.

Esta muy bueno ver como gracias a TCOS los chicos pueden usar un sistema operativo GNU-Linux de ultima generación con acceso a Internet editores de texto y programas educativos como el Tuxpaint en computadoras técnicamente obsoletas.

Agradezco a las autoridades del Centro de Atención Integral San Juan Bautista por darme la oportunidad de tener mi primera experiencia docente difundiendo técnologias libres como Python y GNU-Linux.

Entrega de diplomas

22 diciembre 2009 by
















arrancamos con pygame !!!

10 diciembre 2009 by


# -*- coding: utf8 -*-
#!/usr/bin/env python

import pygame
from pygame.locals import *
from sys import exit

pygame.init()

imagen = 'linux.png'
fondo = 'linux_2.jpg'

pantalla = pygame.display.set_mode((500,400), 0 ,32)
pygame.display.set_caption("Aparición")
fondo = pygame.image.load(fondo).convert()
pingui = pygame.image.load(imagen).convert_alpha()

x, y = 200, 150


while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        x -= 1
    elif keys[pygame.K_RIGHT]:
        x += 1

    if keys[pygame.K_DOWN]:
        y += 1
    elif keys[pygame.K_UP]:
        y -= 1



    pantalla.blit(fondo,(0,0))
    pantalla.blit(pingui,(x,y))

    pygame.display.update()


Tenemos subversion!!!!!

12 agosto 2009 by

http://code.google.com/p/relaxtives

Que es Subversion

Subversion (también conocido como SVN) es un potente sistema de control de versiones. Es considerado el “sucesor” de CVS, ya que fue diseñado con la idea de reemplazarlo.

Lo bueno de Subversion, es que para los que vienen de usar CVS, lo van a ver como un “alivio”, ya que muchas de las fallas de CVS son solucionadas. Y para los que nunca usaron un sistema de control de versiones, les va a parecer muy simple de instalar, configurar y usar.

Ventajas

* Se sigue la historia de los archivos y directorios a través de copias y renombrados.
* Las modificaciones (incluyendo cambios a varios archivos) son atómicas.
* La creación de ramas y etiquetas es una operación más eficiente; Tiene costo de complejidad constante (O(1)) y no lineal (O(n)) como en CVS.
* Se envían sólo las diferencias en ambas direcciones (en CVS siempre se envían al servidor archivos completos).
* Puede ser servido mediante Apache, sobre WebDAV/DeltaV. Esto permite que clientes WebDAV utilicen Subversion en forma transparente.
* Maneja eficientemente archivos binarios (a diferencia de CVS que los trata internamente como si fueran de texto).
* Permite selectivamente el bloqueo de archivos. Se usa en archivos binarios que, al no poder fusionarse fácilmente, conviene que no sean editados por más de una persona a la vez.
* Cuando se usa integrado a Apache permite utilizar todas las opciones que este servidor provee a la hora de autentificar archivos (SQL, LDAP, PAM, etc.).

Momentos del SanCa

10 julio 2009 by

¡Y dale con el mismo título! ¿No tenés otro para ponerle?
Lo importante es el momento, no el título. XD

 

Cada jornada que pasa va poniendo más interesante al curso. Ahora estamos en receso vacacional y por la gripe A nos tocó un mes completo. Cada uno en nuestras casas estamos realizando tareas para no perder el ritmo y seguir caminando hacia la meta que se va acercando un poquito más.

Hace poquito dejamos a un costado la CLI y empezamos a programar ventanitas, también conocida como GUI con la ayuda de wxpython.

Dos fotos que ilustran un momento de la merienda colectiva donde festejamos el cumpleaños de un compañero.

Cumpleaños en el SanCa

Cumpleaños en el SanCa


Cumpleaños en el SanCa

Cumpleaños en el SanCa

WIDGETS

23 junio 2009 by

Estos son los Widgets que venimos aprendiendo hasta el momento.
Le saque foto a cada cosa para qe qede mas lindo..
espero ke les guste..

WX.FRAME


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxFrame

WX.PANEL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxPanel

WX.STATICTEXT


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.ventana.Show()
        return True
aplicacion = App()
aplicacion.MainLoop()

wxStaticText

WX.TEXTCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxTextCtrl

WX.TEXTCTRL (con multilinea)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        self.ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxtextctrlmultilinea

WX.BUTTON


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxButton

WX.COMBOBOX


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN | wx.CB_READONLY)
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxcombobox

WX.COMBOBOX (editable.. se puede agregar algo)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN )
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

wxcombobox

WX.MESSADEDIALOG y WX.EVT.BUTTON (ponerle funcion a los botones!)


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN)
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,200))
        self.cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,195))
        self.cuadro_edad.SetRange(0,100)
        fecha_nacimiento = wx.StaticText(panel, -1, 'F Nac', pos = (20,230))
        cuadro_nacimiento = wx.DatePickerCtrl(panel, -1, pos = (90,225), size = (150, -1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_cancelar)
        self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar)
        self.ventana.Show()
        return True

    def OnSalir(self, evt):
        self.ventana.Close()

    def OnAceptar(self, evt):
        ingresoapellido = self.cuadro_apellido.GetValue()

        dialogo = wx.MessageDialog(self.ventana, u'Estimado/a %s, sus datos fueron guardados' % (ingresoapellido), u'Información', wx.OK | wx.ICON_INFORMATION)
        dialogo.ShowModal()
        dialogo.Destroy()

aplicacion = App()
aplicacion.MainLoop()

mesagedialog

WX.SPINCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        ventana = wx.Frame(parent = None , title = u'Ingreso' , size = (300,300) , pos = (250,250))
        panel = wx.Panel(ventana , -1)
        texto_edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,25))
        cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,20))
        cuadro_edad.SetRange(0,110)
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,240))
        ventana.Show()
        return True

aplicacion = App()
aplicacion.MainLoop()

spinctrl

WX.DATEPICKERCTRL


# -*- coding: UTF8 -*-

import wx

class App(wx.App):
    def OnInit(self):
        self.ventana = wx.Frame(parent = None, title = u'Examen Medico', size = (300,400), pos = (320,150))
        panel = wx.Panel(self.ventana, -1)
        datos = wx.StaticText(panel, -1, u'Datos del empleado: ', pos = (20,20))
        apellido = wx.StaticText(panel, -1, u'Apellido: ', pos = (20,50))
        self.cuadro_apellido = wx.TextCtrl(panel, -1, '', pos = (90 , 45), size = (150,-1))
        sexo = wx.StaticText(panel, -1, u'Sexo: ', pos = (20,80))
        sexolista = [u'F', u'M']
        cuadro_sexo = wx.ComboBox(panel, -1, '', (90,75), (150,-1), sexolista, wx.CB_DROPDOWN)
        observaciones = wx.StaticText(panel, -1, u'Obs: ', pos = (20,110))
        cuadro_obs = wx.TextCtrl(panel, -1, '', pos = (90,105), size = (150,80), style = wx.TE_MULTILINE)
        edad = wx.StaticText(panel, -1, u'Edad: ', pos = (20,200))
        self.cuadro_edad = wx.SpinCtrl(panel, -1, pos = (90,195))
        self.cuadro_edad.SetRange(0,100)
        fecha_nacimiento = wx.StaticText(panel, -1, 'F Nac', pos = (20,230))
        cuadro_nacimiento = wx.DatePickerCtrl(panel, -1, pos = (90,225), size = (150, -1))
        boton_aceptar = wx.Button(panel, -1, u'Aceptar', pos = (200,350))
        boton_cancelar = wx.Button(panel, -1, u'Cancelar', pos = (100,350))
        self.Bind(wx.EVT_BUTTON, self.OnSalir, boton_cancelar)
        self.Bind(wx.EVT_BUTTON, self.OnAceptar, boton_aceptar)
        self.ventana.Show()
        return True

    def OnSalir(self, evt):
        self.ventana.Close()

    def OnAceptar(self, evt):
        ingresoapellido = self.cuadro_apellido.GetValue()

        dialogo = wx.MessageDialog(self.ventana, u'Estimado/a %s, sus datos fueron guardados' % (ingresoapellido), u'Información', wx.OK | wx.ICON_INFORMATION)
        dialogo.ShowModal()
        dialogo.Destroy()

aplicacion = App()
aplicacion.MainLoop()

dtaepickerctrl

instalate algo

12 junio 2009 by

Hablamos muchísimo de los ejercicios que realizamos en el curso, pero omitimos en todo momento información sobre que usamos para llevar a cabo esos ejemplos de python. Y como una gran mayoría de usuarios no tiene la posibilidad de contar con computadoras equipadas con software libre. La idea de este post es ayudar a quienes tienen otras cosas a instalar las aplicaciones que van a necesitar para aprender lo que estamos aprendiendo. En este ejemplo los aplicativos corren en Windowrs. Asi que ahi vamos.

Python
Bueno en el caso nuestro, el curso se orienta a aprender a programar utilizando como lenguaje Python

Para poder disfrutar de este lenguaje podemos seguir el siguiente tutorial que explica como instalarlo

Geany
Como editor sencillo para andar probando estas cuestiones de codigo utilizamos uno que es genial. Geany. Para instalarlo pueden visitar la zona de descarga de la pagina oficial, para descargar geany

ipython
Cuando nos cansamos (literalmente) de los colores de la terminal saltamos a probar una vuelta de tuerca al asunto. ipython salio a resolvernos el tema de andar probando comandos o pequeñas lineas que nos podían solucionar el planteo inicial.

MySQL, phpMyAdmin
A medida que fuimos avanzando con el tema vimos en varias oportunidades el manejo de un sistema de bases de datos como el de MySQL y llegamos a utilizar un buen manejador y administrador de bases de datos como phpMyAdmin.

Una buena opción para poder manejar esa artillería de herramientas bajo estas condiciones es contar con la ayuda de XAMPP.

Y como siempre para instalarlo podemos seguir el siguiente tutorial.

wxPython
Y por ultimo y no por algo en particular nos toca la herramienta que estamos aprendiendo a los golpes que es ni mas ni menos que wxPython

Para poder disfrutar de esta herramienta tenemos que instalar el siguiente archivo. Y una ves instalado no tenemos excusa para seguir aprendiendo.

Momentos del SanCa

4 junio 2009 by

Volvíamos de la merienda de todos los días. Nuestras cabezas estaban todavía con los planteos de los ejercicios 76 y 75. Con la energía renovada nos sentamos en nuestros escritorios y acometimos con la tarea. Éstas son algunas de las imágenes de tan importante gesta.

El ejercicio75 consiste en que a través de un menú generar altas y consultas a una base de datos MySQL desde python. El ejercicio 76 consiste en que a partir de dos tuplas, una con nombre y otra con apellido, presentar esos datos por pantalla en una tabla con cabecera y los datos.

 

Momentos del SanCa

Momentos del SanCa

 

Momentos en el SanCa...

Momentos en el SanCa...

 

Momentos del SanCa...

Momentos del SanCa...

Primera etapa

4 junio 2009 by

Hoy terminamos la primera etapa de nuestro camino. Somos menos que al principio, lamentablemente, pero estamos en marcha. A partir del lunes comenzaremos con programación de apliaciones GUI con la biblioteca wxPython, y un nuevo horizonte se nos aparece. Es una oportunidad para recomenzar, un nuevo mojón en el hermoso arte de aprender. Felicitaciones a los que han emprendido este camino y han perseverado en el aprendizaje. Aunque las cosas a veces no se ven muy claras, el seguir andando y poniendo garra junto a nuestros compañeros nos acerca cada día un poco más al objetivo de aprender, compartir, cooperar.

Algunas cosas que hemos visto hasta hoy:

Aplicaciones.
Lenguajes de programación
Lenguaje de máquina – Binario – Lenguajes de bajo y alto nivel -
Compilados e interpretados

Estructuras lógicas – Diagramas – Abstracción de realidades y
problemáticas de todos los días llevadas a diagramas de flujo.

Python – Intérprete Python – Hola mundo

Editores de texto. Geany como IDE de desarrollo.

Variables, constantes, tipos de datos, cadenas, tuplas, listas,
diccionarios, boolean, unicode. Métodos básicos de c/u de ellas.
Ejercicios con cada uno y combinados. (sort, upper, slice, operaciones
básicas, keys, y todo lo que se les ocurra.

Bucles for, while. Condiciones if, elif, else.

Escritura en archivos. write(), readline(), open(), close(), etc

Definición y uso de funciones. Argumentos.

Módulo pickle. Importar. Módulos. Creación de módulos.

Clases. Métodos especiales (__init__(), etc). Instancias. Objetos. Métodos.

Conexión a bases de datos. (MySQLdb). Conocimiento de lenguaje SQL
standard desde consola y administrador web (PHPMyadmin). Aplicaciones
con menúes, conexión, consultas, ABM.


Seguir

Get every new post delivered to your Inbox.