Programación Práctica con Python 1: Elementos básicos

Por @jobliz

 

En el capítulo anterior…


En el post anterior presentamos al lenguaje Python, cómo instalarlo, y el propósito de ésta serie de tutoriales. La idea es llegar a la parte práctica lo más pronto posible, aunque cómo también se quiere que quienes estén empezando de cero puedan seguirlos, entonces dedicaremos dos entregas a los fundamentos de la programación en Python:

En ésta, veremos los elementos básicos del lenguaje, variables, condicionales, ciclos, etc, y además algunas de las costumbres de los programadores. Si ya tienes algo de experiencia en Python puedes pasar directamente a la próxima.

En la siguiente, veremos cómo se organiza el código en Python: Cómo acceder al código que hemos escrito en otro archivo, que es un módulo, y los sitios de donde se suelen descargar desde internet. Ésta parte es fundamental para el programador en Python y en cualquier otro lenguaje, ya que conseguir módulos ya hechos por otras personas simplifica mucho todo trabajo. Además, todo lo que se hará en la parte práctica de éstos tutoriales requerirá instalarse de las maneras expuestas.

Nota: Para tener una visión más amplia del lenguaje que la aquí presentada, puedes revisar éstos materiales:

Los primeros 4 capítulos de How To Think like a Computer Scientist
Los ejercicios del 0-6 y 18-21 de Learn Python the Hard Way


Antes de empezar.


Para escribir código hace falta un editor de texto hecho especialmente para eso. En realidad es posible hacerlo hasta en el bloc de notas, pero resulta extremadamente incómodo, como lo sería pelar una papa con una cuchara. Simplemente no está hecha para eso. Al instalar Python en Windows éste viene automáticamente con el editor IDLE, que es bastante bueno. y que será el que usaremos aquí. Éste, sin embargo, sólo tiene soporte para Python. Si en algún momento decides programar en otro lenguaje, es conveniente que busques un editor especializado en dicho lenguaje, o un editor multilenguaje cómo Notepad++.

Si estás en Linux, puedes instalar IDLE usando el gestor de paquetes de tu distro.

En realidad, la cultura de la programación tiene un gran número de editores de código, y éstos a su vez vienen en formas distintas. Otros lenguajes de programación como Java o los de Microsoft (C#, Visual Basic) tienen una cultura de IDE (entorno integrado de desarrollo), donde un programa complejo y con muchas funciones es necesario para aprovechar el lenguaje al máximo. Sigue siendo posible escribirlo con editores más sencillos, pero eso no forma parte de las costumbres de su comunidad. La descarga del “lenguaje” siempre viene junto a la gran herramienta, como Visual Studio en el caso de C# o Netbeans en el caso de Java.

Python, y a su vez otros lenguajes como PHP y Ruby, también tienen programas como esos, pero en general dependen menos de ellos. Si te preguntastes porqué la descarga de Python era tan ligera, y no un archivo de 200+ megabytes, ello se debe a que el instalador sólo trae el lenguaje y una herramienta sencilla para manejarlo, no un entorno de desarrollo completo.

Ahora que tenemos nuestro editor de textos, es hora de usarlo. En IDLE, escribe ésto y presiona F5

print("Hola mundo")

Ello hará que la ventana de al lado en IDLE salude al mundo educadamente. Ésto, aunque sencillo, en realidad es una pequeña costumbre dentro del mundo del código. Ahora que escribistes un programa, aunque sea pequeño, programas. ¡Bienvenid@!.

Sí, lo sé. ésto no es mucho, y prometí cosas maś prácticas en la introducción. Te prometo que dentro de dos tutoriales estaremos accediendo a la búsqueda de Twitter a través de internet, así que te pediré un poco más de paciencia.


Manejando datos.


Cuando nos disponemos a la idea de programar, lo más inmediato que hacemos es pensar en datos. ¿Qué queremos manejar, y de qué manera el lenguaje de programación nos permite hacerlo?. Por lo general, todos los lenguajes ofrecen una manera sencilla de usar:

Números enteros, para manejar las cantidades más comunes. Un gran cantidad de “cantidades” con las que trabajaremos serán de éste tipo. Comúnmente se les llama integers o ints.

Números decimales, para manejar todas las cantidades que requieren más exactitud que un integer. Éstos reciben el curioso nombre de floats por la forma en que se implementan en el CPU. No es imprescindible conocer los detalles cuando se programa en Python, aunque más adelante veremos que igual hace falta algo de cuidado al manejarlos.

Texto, una manera de representar secuencias de letras de la forma más sencilla posible. Palabras, oraciones, párrafos, todo lo que queramos usar en el programa que sea combinaciones de caracteres. A eso se les llama strings, o cadenas en español, porque son cadenas de caracteres. Por cierto, haz click derecho en ésta página, y dale a Ver código Fuente. El código HTML también puede ser una string. De hecho, nos hará falta pensar así cuando vayamos a acceder a internet y a Twitter con nuestro código Python.

Valores Booleanos, que sólo pueden representar dos cosas: Verdadero o Falso. Nos serán útiles cuando queramos expresar cosas que sólo pueden tener dos estados.

Sin embargo, necesitamos un “sitio” donde colocar dichos valores para que nos seán útiles. Y esto nos lleva a…


La variable.


Para almacenar todos los tipos de datos que se mencionaron más arriba, existe lo que se conoce como variable, una especie de caja con una etiqueta que nos permite tanto guardarla en la memoria como darle un nombre que nosotros podamos recordar. Por ejemplo, si queremos tener un número que represente la edad de alguien, podríamos decir.

edad = 42

Allí creamos una variable de nombre “edad”, en la que colocamos el integer 42. En caso de que queramos especificar un nombre (string), sería así:

nombre = "Cimón Volíbar"

Los valores booleanos (True y False), se escriben tal cual (y con mayúscula al inicio) del mismo modo:

australiano = False
latinoamericano = True

Cantidades como la estatura, por cierto, estarían mejor representada a través de un float (decimal) que de un integer. La única diferencia es el punto que separa la parte entera de la decimal.

estatura = 1.69

Con los floats, sin embargo, hay que tener especial cuidado con las multiplicaciones y divisiones. Sólo si alguno de los números involucrados es un float entonces el resultado también lo será. Una división de dos integers sólo dará la parte entera. Un caso particular sería:

dos = 5 / 2
dosymedio = 5 / 2.0

No es tan difícil de recordar, pero este detalle le ha dado dolores de cabeza hasta a programadores no tan novatos. Conviene no olvidarlo siempre que se quiera trabajar con cantidades decimales.

Y así concluímos con las variables. Éstas son la forma de darle nombres a los datos para poder usarlos en nuestros programas. Sin embargo, necesitamos algo más que nombres. Para empezar, algo que nos permita decidir qué hacer en diferentes situaciones.


Listas y diccionarios.


Si los datos están relacionados de alguna manera, entonces conviene buscar alternativas a las variables sueltas. Por ejemplo, si queremos representar los números del 1 al 10, sería muy incómodo escribir una variable “uno”, otra “dos”, y así. Resulta mucho más sencillo ponerlas todas juntas en una variable especial, que las agrupe a todas:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Ésta es la que se conoce como lista, y nos permite guardar cualquier cantidad de elementos dentro de ella, conservando su orden. Podemos acceder a cualquiera de sus miembros llamándolos con el nombre de la lista y corchetes:

primero = numeros[0]

El primer elemento siempre será el cero, por lo que para acceder al último valor de la lista tendríamos que usar un 9, no un 10 (en éste caso). Además de las listas también existen diccionarios, que son útiles cuando queremos agrupar datos relacionados entre sí no a través de posiciones, sino de nombres:

alturas = { "juan": 1.79, "ana": 1.62, "godzilla": 252.1 }

Para obtener alguno de los datos, usaríamos entonces su nombre, en vez de su posición:

altura_juan = alturas["juan"]

De este modo, ya podemos poner en memoria listas y diccionarios de datos, pero aún no sabemos cómo recorrerlos. ¿Cómo ver si un elemento está realmente allí, o revisar el contenido automáticamente?. Para poder hacerlo nos hace falta otra técnica, los ciclos.


Ciclos.


A partir de aquí vamos a hacer algo nuevo, ya que necesitaremos escribir varias líneas de código: Usaremos Pastebin para mostrar el código, ya que permite verlo con colores y descargarlo sin dificultad. Volviendo al tema, una de las cosas que las computadoras hacen mejor que cualquier persona es repetir acciones. Mientras que a uno le empezaría a fallar la cordura al tratar de revisar un armario con cientos o miles de gavetas, tu CPU revisará cada elemento de tus listas o diccionarios de lo más tranquilo.



Puedes copiar y pegar el código de antes y los que vienen en un archivo .py y ejecutarlo dándole a F5 en el editor IDLE.

La primera línea en ambos casos (lista y diccionario) los define con algunos elementos ya dentro de ellos, y la siguiente es la forma de agregar datos a cada uno. Posteriormente se puede ver que las palabras for e in sirven para recorrerlos a ambos, pero con algunas diferencias. Mientras que una lista genera sólo una variable, un diccionario necesita dos, separadas por comas antes del in. Aparte de eso, el diccionario requiere de acceder al método iteritems que está en todos los diccionarios. En el próximo tutorial veremos con más detalle ésto. Por ahora, ya podemos crear, aumentar y recorrer listas y diccionarios.


Condicionales.


Lo que se conoce como condicionales es la forma en que el lenguaje te permite saber si se cumplen ciertas condiciones, y qué hacer en caso de que sean o no ciertas. En Python, ésto es manejado por las palabras clave if, elif y else.




La función.


Como te podrás imaginar, manejar un programa grande con miles (o millones) de variables sueltas y repitiendo siempre el mismo código para manejarlas es una tarea que no sólo te resultaría difícil a tí, sino que es imposible para cualquier ser humano. Y fíjate que dije “manejar”, no “crear”… porque ese tipo de código sí logra aparecer en el mundo, y los programadores sarcásticamente lo llaman código spaghetti. Cómo siempre, el artículo en inglés de la Wikipedia es más descriptivo, y también tiene apetitosas fotos de pasta. Pero creeme que nadie siente hambre del infierno que es tratar de comprender el código espagueti. Así que necesitamos algo para evitar que nuestro código caiga en esa mala práctica.

La primera herramienta para evitar el código espagueti es la función. Si la variable es una caja y un nombre, entonces la función vendría siendo una forma de acción, como lo sería abrir varias cajas y usar sus contenidos de cualquier manera. Cuando saludamos al mundo con ésta línea de código:



Allí usamos una de cada una:

print es la acción, y por tanto, la función en sí
“Hola mundo” es el nombre/variable/sustantivo.

Para que la relación entre ellas quede un poco más clara, podemos asignar el mensaje a una variable y luego pasársela a print:



Lo realmente interesante de las funciones, por supuesto, es que podemos crear las nuestras. En Python, el nombre de las funciones se define con la expresión… def, seguida de los nombres con los que usará las variables que necesita encerrados entre paréntesis:



En la función “factorial” podemos ver dos cosas. Lo primero, que sería la presencia de x y n entre paréntesis luego del nombre de la función, son lo que se conoce como argumentos. Son los datos que se le deben dar a la función para que… funcione. Por lo general, una función necesita recibir al menos un argumento para tener algún sentido. Es posible que una función no reciba ningún argumento, pero entonces sus usos son mucho más limitados.


Para continuar.


Si has llegado hasta aquí, entonces ya tienes una idea general sobre cómo se vé python al programar, pero probablemente sientas que faltan muchos detalles. ¿Cómo obtener sólo una parte de una lista?, y cosas similares. Para continuar aprendiendo los detalles, recomiendo una vez más los siguientes libros.

Cómo Pensar en Python
Learn Python the Hard Way

Cualquiera de los dos te servirá para conocer los primeros detalles del lenguaje. En la próxima entrega veremos, sin embargo, algo un poco más práctico. Cómo descargar módulos adicionales para Python. ¡Está en producción!

Coding: Conociendo el Desarrollo para aplicaciones Android (Parte I).

Por @Rober_Vs Roberto von Schoettler.

Una vez que tengamos preparado el entorno de Eclipse, el ADT (Android Development Tools), el Android SDK (Software Development Kit) y el AVD Manager (Android Virtual Machine) para el desarrollo por medio de éste tutorial, podemos proceder a explorar las posibilidades que nos presenta Android.

1. Iniciamos Eclipse (en éste caso, usaré MOTODEV). Nos mostrará una ventana para elegir donde guardar los archivos de los proyectos:

Workspace

Luego nos mostrará su ventana de inicio, para empezar a trabajar, damos click en “Workbench” y allí nos mostrará el entorno de trabajo.

Workbench

2. Crear el nuevo proyecto. Nos dirigimos a la barra de menú superior:

menubar

Hacemos click en “File” -> “New” -> “Android Project”. En caso de no aparecer la opción de “Android Project”, nos dirigimos a “Other”

new01

Se abre una nueva ventana. Desplegamos la carpeta “Android” y damos click a “Android Project”

new02

Surge una ventana la cual nos pide datos del proyecto. Colocamos un nombre cualquiera, para éste tutorial usaré el nombre “Test001”.

new03

Más abajo debemos declarar bajo qué versión trabajaremos. Para mayor compatibilidad, generalmente se selecciona una versión no mayor a Android 2.2, para éste tutorial seleccionaremos Android 1.6. Procedemos a darle el nombre al paquete (Nota: el paquete debe tener al menos 2 identificadores: algo.algomas), en éste caso “com.test”, aunque pudiese haber sido “test.com” o “foo.fighters” o “red.hot.chili.peppers”.

new04

Click en “Finish”.

3. Empezando: Eclipse auto-generará carpetas y archivos para el proyecto. Para empezar nos enfocaremos en:

src: Donde se guardarán todos los archivos de código fuente.

gen: Carpeta que contiene la clase R.java, la cual se modifica automáticamente. Más adelante entenderemos un poco su función, el archivo en sí nos indica que no debe ser modificado manualmente.

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

res: Carpeta de recursos. Contiene las carpetas “drawable”, que es donde se guardarían íconos e imágenes contenidos en la aplicación, “layout” que serán las interfaces a usar y “values”, que serán valores que pueden ser usados como variables constantes (ej: strings) a utilizar en la app.

explanation

4. Interfaz: Empezaremos a crear la interfaz, para eso abrimos el archivo “main.xml”. Nos mostrará una pantalla negra para móvil que por defecto contendrá un LinearLayout con un TextView (mejor conocido como Label). Los LinearLayout pueden ser horizontales o verticales, son contenedores que resguardan sus componentes en una sola columna (para el caso del Vertical LinearLayout) o una sola fila (Horizontal).

Del costado izquierdo (Palette) desplegamos la carpeta “Layout” y agregamos un Horizontal LinearLayout. Ésto se hace estilo Drag & Drop (Mantener click sobre el componente, arrastrarlo adonde se desee y soltarlo).

layout01

De Palette, ahora desplegamos la carpeta “Text Fields”, agregamos un EditText sencillo y lo insertamos dentro del Horizontal LinearLayout.

layout02.

Desde Palette, desplegamos “Form Widgets” e insertamos un botón junto al EditText. Es el Horizontal LinearLayout quién nos permite colocarlos lado a lado (en una misma fila).

layout03

Ajustamos el tamaño del botón al gusto. Para cambiarle el texto, que diga otra cosa que no sea “Button”, o cualquier otra propiedad de cualquier componente tenemos 2 alternativas:

4.1 Conociendo los Views: En la barra de menú superior, click a Window -> Show View -> Other…

views01

Nos mostrará las diversas pestañas que podemos tener a disposición. Desplegamos la carpeta “General” y abrimos “Properties”. Automáticamente se agregará como pestaña al costado derecho junto a “Outline”

views02

Éste View nos muestra todas las propiedades del componente seleccionado, buscamos la propiedad “Text” y la cambiamos.

views03

(Nota: Las pestañas o Views, pueden ser colocadas en cualquier lado de acuerdo al gusto del consumidor, estilo Drag & Drop.)

4.2 Código XML: Justo debajo de las Palette podemos notar 2 pestañas “Graphical Layout” y “main.xml”. Hacemos click en “main.xml” para ir al código.

xml

Podemos observar todo lo que nos muestra la pantalla gráfica en código. Buscamos la línea en donde se declara el Botón y cambiamos la propiedad “android:text” que por defecto es igual a “Button”.

Por último, agregamos un TextView (Palette -> Form Widgets) debajo del EditText y el Botón.

layout04

Aquí culmina la primera parte de éste tutorial para conocer el entorno de desarrollo para Android. En la próxima parte, interactuaremos con los Activity que son las clases de Java que le dan vida a las interfaces. Continuaremos a partir de la interfaz aquí realizada.

Parte II

Introducción a CodeIgniter (primer capitulo)

Por Jonathan Rodríguez.

CodeIgniter es una librería de aplicaciones web para PHP. Permite a los desarrolladores construir aplicaciones web más rápidamente, y ofrece útiles librerías de código y atajos que aceleran las tareas tediosas en PHP. CodeIgniter se basa en un diseño modular (lo que quiere decir que puedes implementar librerías específicas a voluntad) lo que repercute en una mayor velocidad del sistema. Este tutorial intentará mostrar los pasos básicos de instalar la librería, incluyendo como construir una aplicación web básica hola mundo que utiliza un enfoque MVC (Modelo Vista Controlador).

¿Porque CodeIgniter?

CodeIgniter es una librería muy ligera con buen rendimiento. Mientras que resulta perfecta para el principiante (a causa de su pequeña curva de aprendizaje), también resulta perfecta para aplicaciones web grandes y exigentes. CodeIgniter dispone de una documentación accesible y fácil de comprender. Una lista de razones que hacen de CodeIgniter una librería adecuada:

  1. Genera URLs limpias aptas para motores de búsqueda.
  2. Fácilmente extensible.
  3. Funciona sobre PHP 4 (a partir de 4.3.2) y PHP 5.
  4. Soporta las principales bases de datos incluyendo MySQL (a partir de 4.1), MySQLi, SQL Server, Postgres, Oracle, SQLite y ODBC.
  5. La seguridad de la aplicación es un objetivo básico.
  6. Módulos y atajos que ayudan con las operaciones complejas como email, manipulación de imágenes, validación de formularios, subida de archivos, sesiones, aplicaciones multilenguaje y creación de apis para una aplicación.
  7. La mayoría de módulos sólo se cargan cuando son necesarios, lo que redunda en un drástico recorte de los recursos necesarios.

¿Porque MVC?

Para los principiantes, MVC significa Modelo, Vista, Controlador. Es un patrón de programación usando para desarrollar aplicaciones web. 

Modelo: El modelo trata con los datos en su origen y con la interacción con la base de datos y contendrá funciones como agregar registros a la base de datos o seleccionar registros específicos de la base de datos. En CodeIgniter el componente modelo no es requerido y puede ser incluido en el controlador.

Vista: La vista trata con la visualización de los datos y con la interfície que el usuario controla. En CodeIgniter (o CI) la vista puede ser una página web, una fuente RSS, datos Ajax o cualquier otra “página”.

Controlador: El controlador actúa como el intermediario entre la vista y el modelo y, como su nombre sugiere, controla lo que se envía desde el modelo hacia la vista. En CI, el controlador también es el lugar donde cargar módulos y atajos.

Ahora sin mas que decir, empecemos a usar Codeigniter.

- Paso 1:Descargando CodeIgniter

 Podemos descargarnos la librería en la pagina oficial http://www.codeigniter.com y pulsa sobre el gran botón de descarga. La ultima versión hasta ahora es la 2.0.3

20090118-180850.png

- Paso 2: Instalando y Explorando CodeIgniter

Yo personalmente recomiendo programar bajo Netbeans 7.0, pueden descargarlo de http://netbeans.org/downloads/index.html

Una vez descargado solo es necesario descomprimir el archivo .zip, dirigirse a su proyecto nuevo en Netbeans, borrar el archivo Index.php que se creo automáticamente y copiar las carpetas dentro de su proyecto.

Archivos

una vez copiado sus carpetas ya podemos empezar a utilizar la librería. 

  1. La carpeta system almacena todos los archivos que hacen que CI funcione.
  2. La carpeta controllers almacena todos los controladores de la aplicación.
  3. La carpeta errors almacena todas las páginas de patrones de errores de la aplicación. Cuando un error aparece, se genera una página de error a partir de uno de estos patrones.
  4. La carpeta hooks contiene extensiones que modifican el funcionamiento de los archivos del núcleo de CI. Están pensados para los usuarios avanzados de CI.
  5. La carpeta language contiene líneas de texto que pueden ser cargadas a través del módulo de lenguaje para crear sitios multilenguaje.
  6. La carpeta models almacena los modelos de la aplicación.
  7. La carpeta views almacena las vistas de la aplicación.
  8. La carpeta database almacena todos los drivers de base de datos y las clases que habilitan las conexiones a bases de datos.
  9. La carpeta helpers contiene los atajos del núcleo de CI, pero es posible ubicar otros atajos personales para que accedan todas las aplicaciones.
  10. La carpeta logs contiene todos los logs (registros) generados por CI.(para poder usarlo hay que activarlo primero, luego les enseñare como hacerlo).

- Paso 3: Como configurar CodeIgniter.

Conseguir que CI se ponga en marcha y funcione es bastante simple. Principalmente requiere editar unos pocos archivos de configuración. 

Se necesita configurar CI para que apunte a la URL base correcta de la aplicación. Para hacerlo, hay que abrir application/config/config.php y editar la variable array base_url para que apunte a tu servidor y carpeta CI.

$config[‘base_url’] = http://localhost/Nombre_de_tu_proyecto/;

Ahora comprobamos que todo este funcionando correctamente y ejecutamos el archivo índex.php y si todo va bien veremos algo como esto: test1gp.jpg

Muy bien, si les ha funcionado ya tenemos configurado lo básico para que empiece a funcionar nuestro proyecto, a medida que vayamos avanzando iremos haciendo nuevas configuraciones en los archivos.

Lo primero ahora será crear nuestro controlador principal, el que se ejecutara apenas se ejecute nuestra pagina, para ello nos dirigimos a la carpeta  application/controllers/ y dentro creamos un archivo nuevo llamado “PrincipalController.php”, muy bien, CodeIgniter carga por defecto el controlador “Welcome” por lo que debemos hacer que nos cargue primero nuestro controlador, para ello solo debemos  ir a  application/config/routes.php y modificar la linea 

$route[‘default_controller’] = ‘PrincipalController’;

Ya con esto al ejecutar nuestra pagina cargara  nuestro controlador.

Ahora programaremos nuestro “Hola Mundo”.

Abrimos el archivo que creamos “PrincipalController” y borramos todo, ahora lo primero que debe llevar nuestro archivo será:

<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

NOTA: En CodeIgniter se empieza con la etiqueta <?php que siempre hemos usado pero NO se cierra.

Ahora declararemos nuestra clase y constructor, nos debería quedar algo como

<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

class PrincipalController extends CI_Controller {

    function __construct() {

        parent::__construct();

    }

    function index(){

    }

}

La función índex siempre es la función principal, la que se ejecuta de primero.

Muy bien ahora  dentro de la función índex, hacer un echo ‘Hola mundo’; y funcionara perfectamente.

Eso es todo, espero que les haya gustado y servido.