Hd Magazine Nro 7

Embed Size (px)

Citation preview

  • 7/28/2019 Hd Magazine Nro 7

    1/57

    StaffEugenia Bahit GLAMP Hacker & eXtreme ProgrammerIndira Burga Ingeniera de SistemasMara Jos Montes Daz Tcnica en Informtica de GestinMilagros Infante Montero Est. Ingeniera de SistemasSergio Infante Montero Ingeniero de Software

    Hackers & Developers Magazine se distribuye bajo una licencia Creative Commons Atr ib u cinNoComercial CompartirIgual 3.0 Unported . Eres libre de copiar, distribuir y compartir este material.FREE AS IN FREEDOM!

    AO ----------- 0NMERO -------- 7FECHA: 2013-05-27#7

    SHE

    HDHackers &DEVELOPERS+Magazine digital de distribucinmensual sobre Software Libre, Hacking y Programacinpara profesionales del sector de Tecnologas de la Informacin

  • 7/28/2019 Hd Magazine Nro 7

    2/57

    Hacker es alguien que disfruta

    jugando con la inteligenciaRichard Stallman

    Free Software, Free Society(Pg. 97), GNU Press 2010-2012

    En esta edicin:Gua completa sobre el manejo de archivos por lnea de comandos.......4El mundo de la criptografa y la psicologa de las contraseas.............17Conociendo a Vala...............................................................................23Refactoring: avanzando con las soluciones..........................................27Inception Deck en el Agilismo..............................................................36NgiNX instalado y... ahora qu?..........................................................40El olvidado mundo de las variables en PHP..........................................49

    Y LAS SECCIONES DE SIEMPRE:

    ASCII Art...................................................................... Pg. 56Este mes: Homenaje ASCII a Betty Boop

    Zona U!........................................................................ Pg. 57La comunidad de nuestros lectores y lectoras

    Hackers & Developers Magazine, es

    una iniciativa sin fines de lucrodestinada al fomento y difusin delas tecnologas libres presentes ofuturas, bajo una clara pticadocente y altruista, que resulte deinters tcnico y/o cientfico aprofesionales del sector deTecnologas de la Informacin.Hackers & Developers Magazine sesostiene econmicamente con elapoyo de la comunidad, norecibiendo subvencin alguna deninguna empresa, organizacin uorganismo de Gobierno.Necesitamos de tu apoyo parapoder mantener este proyecto.

    Aydanos a continuarcon este proyectoPuedes hacer un donativo ahora,de 10, 15, 25, 50, 100 o 150 USD

    para ayudar a que Hackers &Developers Magazine pueda seguirpublicndose de forma gratuita,todos los meses. Puedes donar conPayPal o Tarjeta de Crdito a travsdel siguiente enlace:www.hdmagazine.org/donar

    CON TU DONACIN DE USD 150RECIBES DE REGALO,UNA FUNDA DENEOPRENE PARA TUORDENADOR PORTTIL

    VALUADA EN USD 25.-(Origen: Estados Unidos)

    Hackers &DEVELOPERS+

    D #7

    http://shop.fsf.org/product/free-software-free-society-2/http://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://shop.fsf.org/product/free-software-free-society-2/
  • 7/28/2019 Hd Magazine Nro 7

    3/57

    CrditosHackers & Developers Magazine es posible gracias al compromiso de:Responsable de ProyectoEugenia BahitResponsables de Comunicacin

    Indira Burga (Atencin al Lector) - Milagros Infante (Difusin)

    Staff

    Eugenia BahitArquitecta GLAMP & Agile Coach

    www.eugeniabahit.com

    Indira BurgaIngeniera de Sistemas

    about.me/indirabm

    Milagros Infante MonteroEstudiante de Ingeniera en Sistemas

    www.milale.net

    Mara Jos Montes DazTcnica en Informtica de Gestin

    archninfa.blogspot.com.es

    Sergio Infante MonteroIngeniero de Software

    neosergio.net

    DifusinHackers & Developers Magazine agradece a los portales que nos ayudan con la difusin del proyecto:

    www.debianhackers.net www.desarrolloweb.com www.desdelinux.net

    E-mail de Contacto:[email protected]

    Web Oficial:www.hdmagazine.orgCuenta Twitter Oficial: @HackDevMagazine

    http://www.eugeniabahit.com/http://www.about.me/indirabmhttp://www.milale.net/http://archninfa.blogspot.com.es/http://neosergio.net/http://www.debianhackers.net/http://www.desarrolloweb.com/http://www.desdelinux.net/mailto:[email protected]:[email protected]://www.hdmagazine.org/http://www.hdmagazine.org/https://twitter.com/HackDevMagazinehttp://www.eugeniabahit.com/http://www.about.me/indirabmhttp://www.milale.net/http://archninfa.blogspot.com.es/http://neosergio.net/http://www.debianhackers.net/http://www.desarrolloweb.com/http://www.desdelinux.net/mailto:[email protected]://www.hdmagazine.org/https://twitter.com/HackDevMagazine
  • 7/28/2019 Hd Magazine Nro 7

    4/57

    Hackers & Developers Magazine Ao 0, Nmero 7 4GNU/Linux para programadores:

    Gua completa sobre elmanejo de archivospor lnea de comandos

    La importancia de que un programador tenga la

    capacidad de moverse libremente por lnea decomandos radica en algo tan simple como en recordarque en los entornos de produccin (servidores) noexiste un entorno grfico. Es por ello, que aprender amanejar el Sistema Operativo por lnea de comandoses indispensable para cualquier programador. En esteartculo, nos centraremos en el manejo ymanipulacin de archivos.

    Escrito por: Eugenia Bahit (GLAMP Hacker & eXtreme Programmer)

    Eugenia es Arquitecta de Software, docente e instructora detecnologas GLAMP (GNU/Linux, Apache, MySQL, Python y PHP) y Agilecoach (UTN) especializada en Scrum y eXtreme Programming. Miembrode la Free Software Foundation, The Linux Foundation y DebianHackers. Creadora de python-printr, Europio Engine y colaboradora deVim.

    Webs:Cursos de programacin: www.cursosdeprogramacionadistancia.comWeb personal:www.eugeniabahit.com

    Redes sociales:Twitter / Identi.ca: @eugeniabahit

    s muy probable que al leer la frase manipulacin de archivos se piense encomandos como mv, cp y rm. Si bien son comandos que se utilizan para mover,copiar y eliminar archivos y directorios respectivamente, la manipulacin de

    archivos no solo se limita a ellos. Por lnea de comandos es necesario acceder a lasmismas opciones que accedes por entorno grfico. Desde descargar archivos de la Web,hasta comprimirlos, descomprimirlos, modificarlos o examinar sus propiedades.

    EEn este artculo intentaremos abarcar la manipulacin y manejo de archivos en elsentido ms amplio yendo desde lo ms bsico a lo que puedan ser consideradasfunciones un poco ms complejas.

    http://www.fsf.org/http://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.python-printr.org/http://www.europio.org/http://www.europio.org/http://www.vim.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahithttp://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.europio.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahit
  • 7/28/2019 Hd Magazine Nro 7

    5/57

    Lo ms bsico: moverse por el s istema de archivosYa conocers al comando cd para moverte entre directorios. Sin embargo, me sucede amenudo con muchos alumnos, ver que olvidan los atajos y las buenas prcticas. Pero concd se puede hacer mucho ms que simplemente cd /ruta/. Incluso, cd no lo es todo.Vemoslo en detalle.

    Conocer el directorio actual, te permite evitar escribir innecesarias rutas cuandodeseas navegar entre directorios:

    eugenia@cococha-gnucita:~$ pwd/home/eugenia

    En el caso anterior, suponiendo que tu usuario fuese eugenia, est claro que nonecesitars escribir cd /home/eugenia/mi-otra-carpeta para ingresar en esta ltima.

    Auto-completar el nombre de archivos y directorios, reduce el riesgo de errores (y suconsiguiente volver a escribir) as como tambin, ayuda a la falta de memoria, pues esmuy difcil recordar rutas completas. Tras escribir los primeros caracteres de un nombrese puede completar de forma automtica, pulsando la tecla tab una vez . Suponiendoque deseas ingresar en una carpeta llamada Documentos (o crees recordar que sunombre comienza por Do pero desconoces como sigue):

    eugenia@cococha-gnucita:~$ cd Do

    # Auto-completar la palabra comoeugenia@cococha-gnucita:~$ cd Documentos/

    La instruccin indica que la tecla TAB (tabulacin) debe ser pulsadaSi no se auto-completa, es seal de que existe ms de un archivo o directorio en el quesu nombre coincide con los caracteres escritos. En ese caso, pulsas la tecla tab 2 vecesconsecutivas, para que en pantalla te muestre las coincidencias.

    eugenia@cococha-gnucita:~$ cd DDescargas/ Documentos/eugenia@cococha-gnucita:~$ cd D

    RECUERDA: La barra diagonal / delante del nombre de una carpeta, indica que la misma se encuentra en la razdel sistema de archivos.

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 5

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    6/57

    Caminar hacia adelante en el sistema de archivos es tan simple como escribir cdcarpeta1/carpeta2/etctera , pero para caminar hacia atrs puede que te interesenalgunos atajos:

    # Retroceder un directorioeugenia@cococha-gnucita:~/Documentos/documentacion/lisp$ cd ..eugenia@cococha-gnucita:~/Documentos/documentacion$

    # Retroceder varios directorioseugenia@cococha-gnucita:~/Documentos/documentacion/lisp$ cd ../../../eugenia@cococha-gnucita:~$

    # Atajo para acceder a tu home independientemente de dnde te encuentreseugenia@cococha-gnucita:~/webprojects/demo.europio.org/public/core/cli$ cdeugenia@cococha-gnucita:~$ pwd/home/eugenia

    # Un atajo para no escribir /home/usuario

    eugenia@cococha-gnucita:~/webprojects/demo.europio.org/public/$ cd ~/Documentos/eugenia@cococha-gnucita:~/Documentos$

    Listar documentos y directorios, no se resume solo a ls. Algunos trucos:

    # Listado de documentos con informacin adicionaleugenia@cococha-gnucita:~/test/$ ls -ltotal 12-rw-r--r-- 1 eugenia eugenia 31 Apr 8 15:07 controller.phpdrwxr-xr-x 2 eugenia eugenia 4096 Apr 8 15:07 core

    -rw-r--r-- 1 eugenia eugenia 0 Apr 8 15:07 settings.php.distdrwxr-xr-x 6 eugenia eugenia 4096 Apr 8 15:07 static

    # Mostrar tambin ocultoseugenia@cococha-gnucita:~/test/$ ls -latotal 24drwxr-xr-x 4 eugenia eugenia 4096 Apr 8 15:07 .drwxr-xr-x 4 eugenia eugenia 4096 Apr 8 15:07 ..-rw-r--r-- 1 eugenia eugenia 31 Apr 8 15:07 controller.phpdrwxr-xr-x 2 eugenia eugenia 4096 Apr 8 15:07 core-rw-r--r-- 1 eugenia eugenia 55 Apr 8 15:07 .htaccess-rw-r--r-- 1 eugenia eugenia 0 Apr 8 15:07 settings.php.distdrwxr-xr-x 6 eugenia eugenia 4096 Apr 8 15:07 static

    # Tamao de archivo ms legibleeugenia@cococha-gnucita:~/test/$ ls -lahtotal 24Kdrwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 .drwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 ..-rw-r--r-- 1 eugenia eugenia 31 Apr 8 15:07 controller.phpdrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 core-rw-r--r-- 1 eugenia eugenia 55 Apr 8 15:07 .htaccess-rw-r--r-- 1 eugenia eugenia 0 Apr 8 15:07 settings.php.distdrwxr-xr-x 6 eugenia eugenia 4.0K Apr 8 15:07 static

    # Listar recursivamenteeugenia@cococha-gnucita:~/test/$ ls -lahR.:total 24K

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 6

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    7/57

    drwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 .drwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 ..-rw-r--r-- 1 eugenia eugenia 31 Apr 8 15:07 controller.phpdrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 core-rw-r--r-- 1 eugenia eugenia 55 Apr 8 15:07 .htaccess-rw-r--r-- 1 eugenia eugenia 0 Apr 8 15:07 settings.php.distdrwxr-xr-x 6 eugenia eugenia 4.0K Apr 8 15:07 static

    ./core:total 12Kdrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 .drwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 ..-rw-r--r-- 1 eugenia eugenia 709 Apr 8 15:07 helpers.php

    ./static:total 24Kdrwxr-xr-x 6 eugenia eugenia 4.0K Apr 8 15:07 .drwxr-xr-x 4 eugenia eugenia 4.0K Apr 8 15:07 ..drwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 cssdrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 htmldrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 imgdrwxr-xr-x 2 eugenia eugenia 4.0K Apr 8 15:07 js......

    Si adems se desea ordenar el listado, puede sumarse:

    -X Ordenar por extensin-S Ordenar por tamao-T Ordenar por fecha y hora

    Tambin puede obtenerse un listado tipo rbol, instalando tree:

    eugenia@cococha-gnucita:~/test/$ tree. controller.php core helpers.php settings.php.dist static

    css html template.html img js

    Algunas opciones muy tiles de tree pueden ser las siguientes:

    -a Incluye ocultos-p Incluye permisos-h Incluye el tamao de los archivos de forma legible-u Incluye el usuario propietario

    -g Incluye el grupo propietario

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 7

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    8/57

    -L NUMERO Para indicar la cantidad mxima de niveles dependencia a mostrar

    eugenia@cococha-gnucita:~/test/$ tree -aphug. [-rw-r--r-- eugenia eugenia 31] controller.php [drwxr-xr-x eugenia eugenia 4.0K] core [-rw-r--r-- eugenia eugenia 709] helpers.php [-rw-r--r-- eugenia eugenia 55] .htaccess [-rw-r--r-- eugenia eugenia 0] settings.php.dist [drwxr-xr-x eugenia eugenia 4.0K] static

    [drwxr-xr-x eugenia eugenia 4.0K] css [drwxr-xr-x eugenia eugenia 4.0K] html [-rw-r--r-- eugenia eugenia 1.4K] template.html [drwxr-xr-x eugenia eugenia 4.0K] img [drwxr-xr-x eugenia eugenia 4.0K] js

    Bsqueda y localizaci n de archivos y programasPara buscar archivos te puedes ayudar del comando find el cual posee la siguientesintaxis:

    find DONDE OPCIONES

    DONDE, debe ser reemplazado por la ruta de base en la cul se realizar la bsqueda. Porejemplo, para buscar archivos en toda mi home (incluyendo los subdirectorios), escribo:

    find /home/eugenia OPCIONES

    Entre las opciones de bsqueda, la ms frecuente es por nombre de archivo. Se puedebuscar por el nombre completo:

    eugenia@cococha-gnucita:~$ find /home/eugenia -name 'PHP Bsico.odt'/home/eugenia/Cursos/editables/PHP Bsico.odteugenia@cococha-gnucita:~$

    O tambin, realizar bsquedas por nombre parcial, utilizando comodines y expresionesregulares:

    Buscar todos los archivos con extensin .odteugenia@cococha-gnucita:~$ find /home/eugenia -name '*.odt'

    Buscar todos los archivos que comiencen por la palabra mvc (en minsculas)eugenia@cococha-gnucita:~$ find /home/eugenia -name 'mvc*'

    Buscar todos los archivos que comiencen por la palabra mvc pero esta vez

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 8

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    9/57

    sin distinguir maysculas y minsculaseugenia@cococha-gnucita:~$ find /home/eugenia -iname 'mvc*'

    Localizar la ubicacin del ejecutable de un programa mediante el comando which:

    eugenia@cococha-gnucita:~$ which apache2/usr/sbin/apache2eugenia@cococha-gnucita:~$ which php5/usr/bin/php5

    Si adems se desea localizar el binario ms los archivos fuentes y el manual , seutiliza el comando whereis:

    eugenia@cococha-gnucita:~$ whereis apache2apache2: /usr/sbin/apache2 /etc/apache2 /usr/lib/apache2 /usr/share/apache2/usr/share/man/man8/apache2.8.gzeugenia@cococha-gnucita:~$ whereis pythonpython: /usr/bin/python2.7 /usr/bin/python /etc/python2.7 /etc/python/usr/lib/python2.7 /usr/bin/X11/python2.7 /usr/bin/X11/python/usr/local/lib/python2.7 /usr/include/python2.7_d /usr/include/python2.7/usr/share/python /usr/share/man/man1/python.1.gz

    Manipulando archivos y directoriosPara crear directorios se utiliza el comando mkdir:

    # Crear un nico directorioeugenia@cococha-gnucita:~/borrador$ mkdir un_solo_directorio

    # Crear varios directorios anidadoseugenia@cococha-gnucita:~/borrador$ mkdir -p varios/directorios/anidadoseugenia@cococha-gnucita:~/borrador$ tree variosvarios directorios

    anidados

    2 directories, 0 files

    # Crear ms de un directorio al mismo tiempo (no anidados)eugenia@cococha-gnucita:~/borrador/varios/directorios/anidados$ mkdir dir1 dir2eugenia@cococha-gnucita:~/borrador/varios/directorios/anidados$ tree. dir1 dir2

    2 directories, 0 files

    Para crear archivos vacos se puede utilizar el comando touch como efecto colateral ya

    que dicho comando est destinado a cambiar la fecha/hora de un archivo, pero si esteno existe, lo crea:

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 9

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    10/57

    eugenia@cococha-gnucita:~/borrador/varios$ touch __init__.pyeugenia@cococha-gnucita:~/borrador/varios$ find ~/borrador/varios -name '__init__.py'/home/eugenia/borrador/varios/__init__.py

    Como alternativa, puede utilizarse echo, una instruccin bash destinada a escribir enpantalla. Dicha instruccin utilizada de forma conjunta con el carcter dedireccionamiento de la salida estndar > ayuda indirectamente, a crear un archivo:

    Crea un archivo vacoeugenia@cococha-gnucita:~/borrador/varios$ echo '' > archivo.php

    Crea un archivo con las etiquetas eugenia@cococha-gnucita:~/borrador/varios$ echo '' > archivo.php

    Para eliminar archivos y directorios:

    # Eliminar archivoseugenia@cococha-gnucita:~/borrador/varios$ rm __init__.py

    # Eliminar directorioseugenia@cococha-gnucita:~/borrador/varios$ rm -R directorios

    Tener en cuenta que la opcin -R siempre indica recursividad de accin en la gran mayora de los comandos.

    Es posible adems, eliminar archivos o directorios de forma segura hacindolosirrecuperables. Esto es muy til cuando por ejemplo hemos guardado informacin vital(como contraseas) en un archivo de texto plano y no queremos que el archivo se puedarecuperar mediante un software de recuperacin de datos. Este comando sobre-escribir el archivo tantas veces como le indiquemos y finalmente lo eliminar (es decir,elimina el archivo despus de haber sido sobre-escrito N cantidad de veces):

    eugenia@cococha-gnucita:~/borrador/uno$ shred -n 12 archivo1.copia -u

    -n CANTIDAD Indica la cantidad de veces que el archivo ser sobre-escrito-u Elimina el archivo tras sobre-escribirlo

    Para mover o renombrar archivos y directorios se utiliza la sintaxis:

    mv NOMBRE_ACTUAL NUEVO_NOMBRE

    Por ejemplo:

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 10

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    11/57

    eugenia@cococha-gnucita:~/borrador$ mv varios nuevo_nombreeugenia@cococha-gnucita:~/borrador$ find ~/borrador/ -name 'nuevo_nombre'/home/eugenia/borrador/nuevo_nombreeugenia@cococha-gnucita:~/borrador$ find ~/borrador/ -name 'varios'eugenia@cococha-gnucita:~/borrador$

    Es posible mover los archivos o directorios a una ruta distinta con el mismo nombre:

    eugenia@cococha-gnucita:~/borrador$ mkdir -p uno/dos/tres/cuatroeugenia@cococha-gnucita:~/borrador$ cd uno/dos/treseugenia@cococha-gnucita:~/borrador/uno/dos/tres/$ mv cuatro ../eugenia@cococha-gnucita:~/borrador/uno/dos/tres/$ cd ..eugenia@cococha-gnucita:~/borrador/uno/dos/$ tree. cuatro tres

    O moverlos a una ruta distinta con distinto nombre:

    eugenia@cococha-gnucita:~/borrador/uno$ touch archivo1 archivo2eugenia@cococha-gnucita:~/borrador/uno$ mv archivo2 dos/archivo_doseugenia@cococha-gnucita:~/borrador/uno$ tree dos/dos/ cuatro tres archivo_dos

    TIP: para repetir un comando que ya hayas ejecutado, puedes utilizar varios mtodos: 1) flecha arriba y abajopara ir desde el ltimo comando ejecutado hacia atrs y regresar; o 2) mi preferido: pulsando c t r l + R yescr ibes los pr imeros caracteres de un comando ya ejecutado para realizar una bsqueda . Sitienes que cancelar dicha bsqueda, pulsas Ctrl + G.

    Para copiar archivos se utiliza la sintaxis:

    cp ARCHIVO_ORIGINAL NOMBRE_COPIA

    Por ejemplo:

    eugenia@cococha-gnucita:~/borrador/uno$ cp archivo1 archivo1.copia

    Mientras que para copiar directorios es necesario hacerlo de forma recursiva con laopcin -R:

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 11

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    12/57

    cp -R DIRECTORIO_ORIGINAL NOMBRE_COPIA

    Por ejemplo:

    eugenia@cococha-gnucita:~/borrador$ cp -R uno/ uno.copiaeugenia@cococha-gnucita:~/borrador$ cd uno.copia/eugenia@cococha-gnucita:~/borrador/uno.copia/$

    Trabajando con archivos externosMuchas veces te ser necesario descargar un archivo desde alguna direccin deInternet. Pero cmo hacerlo sin un navegador? Es muy simple. Puedes utilizar elcomando wget:

    eugenia@cococha-gnucita:~/borrador$ wgethttp://www.europio.org/downloads/EuropioEngine_3_0_beta_1--app_demo.tar.gz--2013-04-08 18:12:26--http://www.europio.org/downloads/EuropioEngine_3_0_beta_1--app_demo.tar.gzResolviendo www.europio.org (www.europio.org)... 66.228.52.93Conectando con www.europio.org (www.europio.org)[66.228.52.93]:80... conectado.Peticin HTTP enviada, esperando respuesta... 200 OKLongitud: 109782 (107K) [application/x-gzip]Grabando a: EuropioEngine_3_0_beta_1--app_demo.tar.gz

    100%[==================================================================================

    ==========================>] 109.782 146K/s en 0,7s

    2013-04-08 18:12:27 (146 KB/s) - EuropioEngine_3_0_beta_1--app_demo.tar.gzguardado [109782/109782]

    eugenia@cococha-gnucita:~/borrador$

    Tambin es posible descargar varios archivos de forma recursiva agregando elargumento -r:

    wget -rhttp://www.europio.org/

    Copiar archivos mediante SSH suele ser sumamente til cuando deseas enviar tusarchivos de configuracin al servidor sin tener que estar sincronizando carpetas. Paracopiar archivos desde tu ordenador al servidor debes utilizar:

    scp /ruta/de/archivo/local usuario@ip-host-server:/ruta/a/directorio/remoto

    Por ejemplo:

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 12

    http://www.europio.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.europio.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    13/57

    eugenia@cococha-gnucita:~$ scp reporte_apache.html [email protected]:/home/userreporte_apache.html 100% 34KB 34.0KB/s 00:00eugenia@cococha-gnucita:~$

    Y, para descargar archivos desde tu servidor hacia tu ordenador local, utilizas lasintaxis inversa:

    scp [email protected]:/home/user/archivo.py /home/eugenia/

    Empaquetado y desempaquetadoEn caso que necesites empaquetar y comprimir todos los archivos de un directorio,puedes utilizar:

    tar -czv DIRECTORIO > ARCHIVO.tar.gz

    Por ejemplo:

    eugenia@cococha-gnucita:~$ tar -czv borrador/uno/ > directorio-uno.tar.gzborrador/uno/borrador/uno/archivo1borrador/uno/dos/

    borrador/uno/dos/tres/borrador/uno/dos/cuatro/borrador/uno/dos/archivo_dosborrador/uno/aborrador/uno/hola

    Luego, para explorar un archivo sin descomprimirlo, se puede utilizar:

    eugenia@cococha-gnucita:~$ tar -tf directorio-uno.tar.gzborrador/uno/borrador/uno/archivo1

    borrador/uno/dos/borrador/uno/dos/tres/borrador/uno/dos/cuatro/borrador/uno/dos/archivo_dosborrador/uno/aborrador/uno/hola

    Finalmente, se podr descomprimir un archivo mediante:

    eugenia@cococha-gnucita:~$ tar -xzv < directorio-uno.tar.gz

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 13

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    14/57

    Resumen de comandosMoverse por el sistema de Archivos

    Conocer el directorio actual pwd

    Auto-completar el nombre de archivos y directorios (pulsar la tecla TAB)

    Moverse hacia adelante cd carpeta1/carpeta2

    Moverse hacia atrs cd ..

    Volver a la home cd

    Abreviar /home/usuario en una ruta ~/

    Listar archivos y directorios (mtodo ms ptimo) ls -lha

    Mostrar rbol de archivos y directorios(requiere instalar el paquete tree)

    tree -a

    Bsqueda y localizacin de archivos y programas

    Buscar archivos find DONDE -iname 'PATRON'

    Localizar un programa which PROGRAMA

    Ubicar un programa, su binario, fuentes y manual whereis PROGRAMA

    Manipulacin de archivos y directorios

    Crear archivo touch ARCHIVO

    Crear directorios mkdir -p DIRECTORIO_1/ DIRECTORIO_2

    Eliminar archivos rm ARCHIVO

    Eliminar directorio rm -R DIRECTORIO

    Eliminacin segura de archivos shred ARCHIVO -n CANTIDAD -u

    Renombrar archivos o directorios mv ORIGINAL NUEVO_NOMBRECopiar archivo cp ORIGINAL NUEVO_NOMBRE

    Copiar directorio cp -R ORIGINAL NUEVO_NOMBRE

    Manejo de archivos externos

    Descargar archivo de Internet wget URL

    Descargar Web de forma recursiva wget -r URL

    Copiar archivos de local a servidor(el comando se ejecuta desde la PC local)

    scp /ruta/local user@ip:/ruta/destino

    Copiar archivos desde el servidor a la PC local(el comando se ejecuta desde la PC local)

    scp user@ip:/ruta/server /ruta/local

    Empaquetado y Desempaquetado

    Empaquetar tar -czv DIRECTORIO > tarball.tar.gz

    Explorar un tarball tar -tf tarball.tar.gz

    Desempaquetar en el directorio actual tar -xzv < tarball.tar.gz

    Miscelneas: historial de comandos ejecutados en la terminal

    Moverse en el historial de comandos ejecutados (flecha arriba / flecha abajo)

    Buscar un comando ejecutado, en el historial (Teclas Ctrl + R)

    Cancelar la bsqueda iniciada (Teclas Ctrl + G)

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 14

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    15/57

    El enlace de la imagen no funciona? Copia y pega esta URL: http://www.unixstickers.com/?tracking=519a6cd14bcdb

    http://www.unixstickers.com/?tracking=519a6cd14bcdbhttp://www.unixstickers.com/?tracking=519a6cd14bcdbhttp://www.unixstickers.com/?tracking=519a6cd14bcdb
  • 7/28/2019 Hd Magazine Nro 7

    16/57

    El enlace de la imagen no funciona? Copia y pega esta URL: http://www.hdmagazine.org/donar

    http://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donar
  • 7/28/2019 Hd Magazine Nro 7

    17/57

    Hackers & Developers Magazine Ao 0, Nmero 7 17El mundo de la

    criptografa y lapsicologa de lascontraseas

    La criptografa tiene principios tan interesantes queaveces son pasados por alto, pero que sin embargo elaprender sobre ellos nos dan la explicacin demuchas situaciones cotidianas. Aunque no parezca,existe toda una explicacin psicolgica detrs delhecho de elegir una contrasea. Proteger nuestrainformacin debe ser una responsabilidad y underecho para todos y por ello existe una herramientalibre llamada KeePass: un gestor que nos aliviar ellidiar con tantas claves.

    Escrito por: Milagros Alessandra Infante Montero (Est. Ing. Informtica)

    Estudiante de Ingeniera Informtica. Miembro de la comunidad desoftware libre Lumenhack. Miembro del equipo de traduccin alespaol de GNOME. Apasionada por el desarrollo de software,tecnologa y gadgets. Defensora de tecnologas basadas en softwarelibre y de cdigo abierto.

    Webs:Blog:www.milale.net

    Redes sociales:Twitter / Identi.ca: @milale

    unque no lo parezca, la criptografa est presente en nuestra vida cotidiana, yaque a diario usamos claves para producir la salida funcional de algoritmoscriptogrficos. En palabras simples, usamos claves para verificar si estamos o no

    autorizados para acceder a algn servicio o sistema. Aunque este parezca un temasencillo existe toda una psicologa detrs, como tambin criterios que deben tomarseen cuenta para proteger nuestra informacin y ms detalles que muchas veces pasamos

    por alto pero que en cambio si nos tomramos el tiempo se registraran menos casos derobo y/o infiltracin de informacin.

    A

    http://lumenhack.com/http://lumenhack.com/http://l10n.gnome.org/teams/eshttp://l10n.gnome.org/teams/eshttp://www.milale.net/http://www.milale.net/https://twitter.com/milalehttp://lumenhack.com/http://l10n.gnome.org/teams/eshttp://www.milale.net/https://twitter.com/milale
  • 7/28/2019 Hd Magazine Nro 7

    18/57

    El principio de KerckhoffQue nuestra informacin se mantenga protegida debera ser para todos un derecho, sinembargo existen personas movidas por intereses de por medio que buscarn la manerade obtener estos datos. Uno de los puntos importantes a tomar en cuenta es lo que elPrincipio de Kerckhoff dice: slo el mantener la clave en secreto proporcionaseguridad ya que como Claude Shannon dijo: El enemigo conoce el sistema; debemosestar prevenidos para todo tipo de ataque y no llegar a ser sorprendidos, al contrario,adelantarnos a lo que pueda pasar y de esta manera lograr que nuestros mecanismossean mejores y mantengan nuestra informacin a salvo. Mantener las claves en secretoes uno de los problemas ms difciles. Esta pequea pieza puede proteger todo unenorme sistema y por esto se considera como uno de los eslabones ms dbiles para unsupuesto atacante, ya que si la obtiene accede inmediatamente a todos los datoscifrados y se trae abajo todo lo que protega; es cierto tambin que por este motivocada vez se toman ms medidas y precauciones para proteger grandes sistemas, quizsya no solo una o dos claves, sino otros conceptos como la verificacin en dos o tres

    pasos, la biometra y ms.

    Este es un texto cifrado: LEGOIVW ERH HIZIPSTIVW. Este criptosistema tiene como clave sumar 4 letras al textonormal, por lo que resuelto, la frase descifrada sera: HACKERS AND DEVELOPERS.

    El secreto perfectoLa longitud de la clave es el tamao medido en bits, ya que la criptografa modernamaneja medidas binarias; este aspecto es determinante ya que mientras ms pequeasea, la susceptibilidad de un cifrador ser mayor frente a un ataque de bsquedaexhaustivo. Una clave debera ser tan grande como para que un ataque de fuerza brutasea imposible, este ataque se refiere a obtener una clave probando todas lascombinaciones posibles hasta encontrar la correcta, la longitud debera ocasionar queeste ataque lleve demasiado tiempo al ejecutarlo y finalmente no obtener el dato quebuscaba, esto es considerado el secreto perfecto; para explicar esto con un ejemplosencillo, una clave de longitud de n bits tiene 2 a la n claves posibles, por eso es quemientras ms extensa sea ms alto ser el grado de dificultad de poder obtenerla.

    Las organizaciones gastan millones de dlares en firewalls y

    dispositivos de seguridad, pero tiran el dinero porque

    ninguna de estas medidas cubre el eslabn ms dbil de la

    cadena de seguridad: la gente que usa y administra los

    ordenadores" Kevin Mitnick

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 18

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    19/57

    Psicologa de las contraseasExiste una interesante interseccin entre criptografa y psicologa, lo que da comoresultado la psicologa de la contrasea, que estudia qu es lo que hace a las clavesfciles de recordar o adivinar, ya que para que una contrasea funcione exitosamente es

    importante que el usuario la memorice. La psicologa detrs de escoger una clave es unbalance nico entre memorizacin, seguridad y conveniencia; las contraseas puedenser reflejo de la personalidad: aquellos que sean ms orientados a la seguridad puedenelegir las ms complicadas mientras que los que se sienten muy seguros con su vidacotidiana pueden nunca cambiarla. La memorizacin est relacionada con el uso de lamnemotecnia pero para algunas personas, esto se vuelve un tema complicado y lasolucin a ello es tener ciertas polticas que permitan mantener las contraseas seguras.

    Polticas de seguridadExisten muchos factores en la seguridad que debemos tener en cuenta al hablar decontraseas. Una poltica es un conjunto de reglas para mejorar la seguridad haciendoque los usuarios empleen claves seguras.

    Una de las polticas es acerca de la longitud y formacin. Se recomienda:

    usar letras maysculas y minsculas;

    incluir nmeros y caracteres especiales;

    evitar el uso de palabras que se encuentren en el diccionario o incluir informacinpersonal;

    evitar el uso de nmeros de telfono u otros nmeros comunes;

    Otra poltica es respecto a la caducidad de la contrasea. Se recomienda que seproponga un determinado tiempo para cambiarla que puede ser de 90 o 120 das. As, sepodran prevenir muchos ataques que requieren de tiempo para obtener esta pieza deinformacin.

    La siguiente poltica nos habla sobre la gestin de las claves. Se recomienda:

    nunca usar la misma contrasea para ms de una cuenta;

    nunca proporcionar la contrasea a nadie;

    nunca escribirla en un papel y dejarla cerca de la computadora;

    ser cuidadoso de desconectarse del servicio del que estbamos haciendo uso alfinalizar; entre muchas ms.

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 19

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    20/57

    Actualmente existen muchas formas de atentar contra la seguridad de la informacin.Uno de los delitos ms conocidos es el phishing. ste est dentro de las estafascibernticas ya que es cometido mediante el uso de ingeniera social. Al querer adquiririnformacin de forma fraudulenta, el phisher (el estafador) se hace pasar por unapersona de confianza de alguna empresa y por correo electrnico o por llamadastelefnicas intenta obtener los datos que desea.

    Ingeniera SocialEs importante entender como funciona la ingeniera social. sta es la prctica deobtener informacin confidencial manipulando a los usuarios; el principio que lasustenta es que en todo sistema el eslabn dbil es el usuario y los daos causadosvaran entre la prdida del acceso al correo electrnico y prdidas econmicassustanciales. Por ejemplo, la tcnica con la cual debemos tener ms cuidado es cuandollega un correo electrnico en el cual dan una ruta manipulada para que parezca la

    original de algn servicio que usemos. Quizs es un e-mail del banco al que se estafiliado, pero en realidad es un enlace que nos estar dirigiendo a solicitarnos el usuarioy la contrasea de nuestra cuenta y segn muchos estudios las personas suelen ser muyconfiadas de indicar sus datos sin pensar que esto se trata de una estafa; otro casopuede ser al recibir una llamada telefnica de parte de alguna persona de confianza dela empresa u organizacin en la que trabaja quien en realidad es un estafador queaverigu cierta informacin y ahora quiere utilizar eso para obtener los datos quedesea.

    Cracking de cuentas y robo de informacinEl crackingde contraseas puede definirse como la accin de corromper y destruir lasmedidas de seguridad que protegen la privacidad de una contrasea. Muchas personasno se dan el tiempo de buscar cmo crear una contrasea segura, es ms, el problemaradica en que pueden usar la misma clave para todas sus cuentas, pero deben pensarque si un Cracker llega a obtener esa informacin tendr acceso a todo y esto, essumamente peligroso ya que puede hacerse pasar por uno, enviar correos electrnicosdesprestigiando su centro laboral u ocasionndole conflictos de otra ndole. Pero porotro lado, tambin es cierto que el motivo principal es que si se coloca una clave distintapara cada servicio es muy probable que se las pueda olvidar.

    Contraseas fuertes para cada servicioPara darle solucin a esto existen muchas maneras que podemos empezar a aplicar paraponer a salvo y asegurar nuestra informacin. Un mtodo eficaz para crear unacontrasea segura es elegir una frase (de una cancin, del trabajo, etc), luego tomar laprimera letra de cada palabra y finalmente cambiar alguna de ellas por nmeros ocaracteres especiales; de esta manera la contrasea es larga y ser mucho mscomplicada de ser adivinada.

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 20

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    21/57

    La frase: Hackers & Developers - Magazine digital de distribucin mensual sobre Software Libre, Hacking yProgramacin. Resultara en: H&D-mdddmsslhp. Y aadiendo ciertos caracteres obtendramos lo siguiente: H&D-mdDdm5SLHP.

    Otro buen mtodo es que ya teniendo una base se creen contraseas distintas paracada servicio que usemos, por ejemplo, segn las letras obtenidas anteriormenteaadirle algo que nos indique de que servicio se trata.

    Si su contrasea predeterminada es: H&D-mdDdm5SLHP. Por ejemplo, se puede crear una contrasea para gmail:H&D-mdDdm5SLHP-gmail o una contrasea para twitter: H&D-mdDdm5SLHP-twitter

    Otra tcnica de crear contraseas podra ser colocando una base intermedia.

    Si por ejemplo usamos una frase personal para describirnos: Free Software activist and Python developer.Podramos tener como clave fsaapd, agregando caracteres especiales obtendramos f544pd y para usar una paracada servicio podriamos usar la base intermedia, por ejemplo para gmail obtendramos: GMAf544pdIL o si fuerapara twitter TWIf544pdTTER.

    Otra tcnica para la creacin de claves puede ser la base final.

    Si tenemos como un da importante el 27 de Mayo del 2013 (Lanzamiento de hdmagazine n 7) podramos tenercomo clave 270513, pero para que no sea algo comn podramos cambiar algunos nmeros por letras porejemplo: 27os1e y de esta manera para las personas que les agrada tanto usar fechas la pueden mantener mssegura y luego para usar una para cada servicio podriamos usar la base final, por ejemplo para gmailobtendramos: GmaiL27os1e o si fuera para twitter TwitteR27os1e.

    Saber romper medidas de seguridad no hace que seas

    hacker, al igual que saber hacer un puente en un coche no te

    convierte en un ingeniero de automocin. - Eric Raymond

    KeePass Password S afeKeePass1es un gestor de contraseas fcil de usar, liviano, libre y de cdigo abierto. La

    1 http://keepass.info

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 21

    http://keepass.info/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://keepass.info/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    22/57

    lista de contraseas que las personas tienen que usar es interminable y este gestorayuda a administrar las claves de manera segura, pudiendo colocarlas todas en una basede datos, protegindolas con una llave maestra (de esta manera solo habra querecordar la clave maestra para desbloquear la base de datos entera).

    Estas bases de datos estn encriptadas (no solo los campos de contraseas, sino

    tambin nlos ombres de usuario, notas, etc) usando los mejores y ms segurosalgoritmos actualmente conocidos: AES y Twofish. Tambin se pueden usar archivos declave que son ms seguros que la clave maestra, pero tendremos que tener muchocuidado de no perder el dispositivo donde se tiene almacenado el archivo; para contarcon mayor seguridad se pueden combinar ambos mtodos: la contrasea y el archivo declave. KeePass es portable, no almacena nada en la computadora, ni claves de registro niarchivos de inicializacin. La lista de contraseas se puede exportar en diferentesformatos como TXT, HTML, XML y CSV.

    KeePass puede ser una gran solucin al problema de la gestin de contraseas. Esta herramienta brinda muchasfacilidades a los usuarios y sobretodo se puede considerar como otra poltica que podemos ponernos como guapara protegernos contra el robo y/o infiltracin a nuestra informacin.

    Las personas muchas veces se quejan del robo de su informacin o de la prdida de suscuentas, sin darse cuenta que ellos mismos son quienes ocasionan este tipo desituaciones y malas experiencias. Por ms que uno piense que la informacin que tieneen determinado servicio no es muy importante y que no hay problema si llegan aacceder a ella es mejor protegerla de todas maneras o si no vas a usar esa cuenta,eliminarla.

    Es importante contar con una contrasea segura y distinta para cada servicio y de una uotra forma seguir todas las indicaciones redactadas lneas arriba, aplicar nuestraspropias polticas de seguridad y cumplirlas ya que la mejor defensa contra la ingenierasocial es educar y entrenar a los usuarios y sobretodo que ninguno sienta que nunca vaser vctima de un crackerporque s podra pasar.

    Evitar malos ratos e inconvenientes protegiendo nuestra informacin de esta simplemanera es algo a lo que definitivamente debemos darle la importancia que merece.

    El enlace de la imagen no funciona? Copia y pega esta URL: http://www.hdmagazine.org/donar

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 22

    http://www.hdmagazine.org/donarhttp://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/donarhttp://www.hdmagazine.org/donarhttp://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    23/57

    Hackers & Developers Magazine Ao 0, Nmero 7 23Conociendo a Vala

    Vala es un "nuevo" lenguaje de programacinmultiparadigma2, cuya sintaxis es bastante similar aC#, pero modificado para ser utilizado por GObject.

    Escrito por: Fabio Durn Verdugo Colaborador invitado

    Fabio es Ingeniero de Software y miembro de GNOME Foundation yGNOME Chile. Colabora en el BugSquad team de GNOME. Amante y

    propulsor del Software Libre y cdigo abierto. Actualmente, tambinest dedicado a la docencia universitaria. Python lover.

    Perfiles:https://live.gnome.org/FabioDuran

    Twitter:@fabioduran

    uchos desarrolladores quieren escribir aplicaciones para GNOME -o bibliotecas-en lenguajes de programacin de alto nivel, pero no pueden o no quieren

    utilizar Python o Java, por diversas razones. Entre la ms comn de lasjustificaciones, es que requieren de un wrapper o binding para poder acceder a lasbibliotecas.MAnte ello la nica forma que nos queda para programar en ambiente GNOME, es usandola API nativa de C, con la limitante de no contar con apoyo de una sintaxis o API paraGObject3.

    El fundamento de ValaVala fue diseado y orientado para utilizar las libreras existentes de C, especialmentebasadas en GObjects, una adaptacin entre lenguajes de programacin, ya que porejemplo no necesita ningn requisito extra en tiempo de ejecucin y adems de norequerir una ABI (application binary interface - interfaz binaria de aplicacin4) diferenteen comparacin a las aplicaciones y bibliotecas escritas en C, como ocurra antes de sucreacin.

    A lo anterior podemos agregar el enfoque del desarrollo definido por los diseadoresVala, que plantea su fcil utilizacin, debido a que lo nico que se necesita es una

    2 http://es.wikipedia.org/wiki/Lenguaje_de_programacin_multiparadigma3 https://developer.gnome.org/gobject/4 http://en.wikipedia.org/wiki/Application_binary_interface

    http://www.gnome.org/http://www.gnome.cl/http://www.gnome.cl/https://live.gnome.org/BugSquadhttps://live.gnome.org/BugSquadhttps://live.gnome.org/FabioDuranhttp://www.twitter.com/fabioduranhttp://www.twitter.com/fabioduranhttp://www.twitter.com/fabioduranhttp://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_multiparadigmahttps://developer.gnome.org/gobject/http://en.wikipedia.org/wiki/Application_binary_interfacehttp://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_multiparadigmahttp://www.gnome.org/http://www.gnome.cl/https://live.gnome.org/BugSquadhttps://live.gnome.org/FabioDuranhttp://www.twitter.com/fabioduranhttp://www.twitter.com/fabioduranhttps://developer.gnome.org/gobject/http://en.wikipedia.org/wiki/Application_binary_interface
  • 7/28/2019 Hd Magazine Nro 7

    24/57

    librera tipo Vala, o en otras palabras, una API que contenga clases y mtodos en sintaxisVala.

    InstalandoPara instalar Vala en tu mquina lo puedes realizar a travs de:

    apt$ apt-get install vala

    yumyum install vala

    pacmanpacman -S vala

    El compiladorEl compilador de Vala es valac. Traduce el cdigo fuente, permitiendo a losdesarrolladores escribir cdigo orientado a objetos complejo con rapidez, manteniendouna API y ABI de C estndar con un bajo uso de memoria.

    El uso del compilador:

    $ valac -o

    Para ejecutar nuestro binario generado solo sera:

    $ ./

    Nuestro Primer Programa en Vala: el clsico Hola Mundo!Para escribir cdigo Vala se puede utilizar el editor de texto o IDE que ms te acomode,como por ejemplo vim.

    Archivo: holamundo.vala

    class HolaMundo : GLib.Object {

    public static int main(string[] args) {

    stdout.printf("Hola Mundo!\n");

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 24

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    25/57

    return 0;}

    }

    Compilamos:

    valac holamundo.vala -o holamundo

    Ejecutamos:

    $ ./holamundo

    Y la salida ser:

    Hola Mundo!

    Ya tenemos nuestro primer hola mundo y podemos ahora presumir que tenemosnuestro primer programa Vala no es fascinante? Pero creo que sera an mejor sicreamos un hola mundo con una interfaz grfica.

    Nuestro Primer Programa Vala usando la l ibrera grficade GNOME (GTK+)Archivo: holamundo_gtk.vala

    using Gtk;

    int main (string[] args) {

    Gtk.init (ref args);var window = new Window ();window.title = "Nuestro Primer Programa Vala GNOME";window.window_position = WindowPosition.CENTER;window.set_default_size (400, 100);

    var button = new Button.with_label ("Haz click y di Hola Mundo!");button.clicked.connect (() => {stdout.printf("Hola Mundo!\n");});

    window.destroy.connect (Gtk.main_quit);window.add (button);window.show_all ();

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 25

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    26/57

    Gtk.main ();return 0;

    }

    Compilamos:

    $ valac --pkg gtk+-3.0 holamundo_gtk.vala -o holamundo_gtk

    La instruccin --pkg gtk+-3.0, bsicamente le est diciendo al compilador (valac) queenlace la librera gtk+-3.0 a nuestro nuevo archivo binario llamado holamundo_gtk.

    Usando el compilado correcto podemos ahora ejecutar:

    $ ./holamundo_gtk

    La salida al pulsar el ratn, ser:

    Hola Mundo!

    Por contraparte sin la instruccin --pkg, el compilador no reconocer la librera GTK que estamos instanciandocon la instruccinusing Gtk en nuestro cdigo.

    Si lo compilramos sin esteflag:

    $ valac holamundo_gtk.vala -o holamundo_gtk

    Obtendramos el siguiente mensaje de error:

    holamundo_gtk.vala:1.7-1.9: error: The namespace name `Gtk' could not be foundusing Gtk;

    Pues ya est. Tenemos nuestra primera APP Vala Gtk+.

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 26

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    27/57

    Hackers & Developers Magazine Ao 0, Nmero 7 27Refactoring:

    avanzando con lassoluciones

    En la edicin anterior de Hackers & DevelopersMagazine hicimos una introduccin a la tcnica deRefactoring y planteamos soluciones a problemas

    cotidianos. En esta entrega final, veremos problemasms complejos que tambin pueden ser solucionadosimplementando la tcnica de Refactoring.

    Escrito por: Eugenia Bahit (GLAMP Hacker & eXtreme Programmer)

    Eugenia es Arquitecta de Software, docente e instructora detecnologas GLAMP (GNU/Linux, Apache, MySQL, Python y PHP) y Agilecoach (UTN) especializada en Scrum y eXtreme Programming. Miembrode la Free Software Foundation, The Linux Foundation y DebianHackers. Creadora de python-printr, Europio Engine y colaboradora deVim.

    Webs:Cursos de programacin: www.cursosdeprogramacionadistancia.comWeb personal:www.eugeniabahit.com

    Redes sociales:Twitter / Identi.ca: @eugeniabahit

    n la edicin anterior, comentbamos la diferencia entre problema y error,

    explicando que la tcnica de Refactoring haba sido pensada para solucionarproblemas pero no, para corregir errores.

    ELos problemas estn muy ligados a la legibilidad del cdigo y su reutilizacin. Por lotanto, el Refactoringtiene por objetivo, hacer el cdigo ms legible y reutilizable.En esta entrega nos enfocaremos en problemas de legibilidad y reutilizacin, algo mscomplejos que los que vimos en el captulo anterior.

    PROBLEMA: Mtodos extensosNo solo una expresin puede ser extensa. Muchas veces, nos encontraremos conmtodos con extensos algoritmos que realizan varias acciones:

    http://www.fsf.org/http://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.python-printr.org/http://www.europio.org/http://www.europio.org/http://www.vim.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahithttp://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.europio.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahit
  • 7/28/2019 Hd Magazine Nro 7

    28/57

    function suscribir_al_newsletter() {if(isset($_POST['email'])) {

    $email = $_POST['email'];} else {

    $email = '';}

    if(isset($_POST['nombre'])) {$nombre = $_POST['nombre'];

    } else {$nombre = '';

    }

    if($email == '') {$errors[] = 'E-mail no puede estar vaco';

    elseif(strlen($email) < 7) {$errors[] = 'El e-mail no puede tener menos de 7 caracteres';

    } else {$email = strtolower(strip_tags($email));

    }

    if(strlen($nombre) < 5) {$errors[] = 'Por favor, indique un nombre y apellido legtimo';

    } else {$nombre = strtoupper(strip_tags($nombre));

    }

    $id = 0;$msg = 'Error desconocido';

    if(isset($errors)) {$msg = implode('
    ', $errors);

    } else {$sql = 'INSERT INTO newsletter (nombre, email) VALUES (?, ?);$data = array('ss', "{$nombre}", "{$email}");

    $id = DBLayer::ejecutar();}

    if($id > 0) {$msg = 'Se ha suscrito al newsletter';

    }

    $plantilla = file_get_contents('system_msg.html');print str_replace('{MSG}', $msg, $plantilla);

    }

    Cuando existen mtodos tan extensos, probablemente, la solucin consista en lacombinacin de diversas tcnicas, que van desde agrupar expresiones en una mismalnea hasta evitar la asignacin de variables temporales (como vimos la edicin pasada) yextraer cdigo llevndolo a diferentes mtodos. En estos casos, donde ms de unatcnica puede ser necesaria, un buen comienzo ser detectar la cantidad de acciones yresponsabilidades que el mtodo o funcin presentan actualmente.

    Si observamos el cdigo anterior, podremos encontrar las siguientes acciones yresponsabilidades:

    1. Recibir dos datos desde un formulario asignando dicho valor a dos variables;

    2. Validar que los datos recibidos desde el formulario sean correctos, retornando unmensaje de error en caso contrario;

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 28

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    29/57

    3. Filtrar los datos recibidos desde el formulario;

    4. Guardar los datos en la base de datos;

    5. Mostrar un mensaje en pantalla.

    No hace falta demasiado para ver que una sola funcin, est realizando el trabajo de 5

    funciones. Es entonces, cuando procedemos a extraer el cdigo y crear nuevosmtodos. Para ello, primero pasamos los bloques de cdigos (agrupados porresponsabilidad) a nuevos mtodos:

    function recibir_datos() {if(isset($_POST['email'])) {

    $email = $_POST['email'];} else {

    $email = '';}

    if(isset($_POST['nombre'])) {

    $nombre = $_POST['nombre'];} else {$nombre = '';

    }}

    function validar_datos() {if($email == '') {

    $errors[] = 'E-mail no puede estar vaco';elseif(strlen($email) < 7) {

    $errors[] = 'El e-mail no puede tener menos de 7 caracteres';} else {

    $email = strtolower(strip_tags($email));}

    if(strlen($nombre) < 5) {$errors[] = 'Por favor, indique un nombre y apellido legtimo';

    } else {$nombre = strtoupper(strip_tags($nombre));

    }}

    function guardar_datos() {$id = 0;$msg = 'Error desconocido';

    if(isset($errors)) {$msg = implode('
    ', $errors);

    } else {$sql = 'INSERT INTO newsletter (nombre, email) VALUES (?, ?);$data = array('ss', "{$nombre}", "{$email}");$id = DBLayer::ejecutar();

    }

    if($id > 0) {$msg = 'Se ha suscrito al newsletter';

    }}

    function mostrar_mensaje() {$plantilla = file_get_contents('system_msg.html');print str_replace('{MSG}', $msg, $plantilla);

    }

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 29

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    30/57

    function suscribir_al_newsletter() {recibir_datos();validar_datos();guardar_datos();mostrar_mensaje();

    }

    Acto seguido, verificamos aquellas variables de uso temporal que hayan quedadodefinidas pero que sean requeridas por ms de una funcin y las convertimos enpropiedades de clase:

    function recibir_datos() {if(isset($_POST['email'])) {

    $this->email = $_POST['email'];} else {

    $this->email = '';}

    if(isset($_POST['nombre'])) {$this->nombre = $_POST['nombre'];

    } else {$this->nombre = '';

    }}

    function validar_datos() {if($this->email == '') {

    $this->errors[] = 'E-mail no puede estar vaco';elseif(strlen($this->email) < 7) {

    $this->errors[] = 'El e-mail no puede tener menos de 7 caracteres';} else {

    $this->email = strtolower(strip_tags($this->email));}

    if(strlen($this->nombre) < 5) {$this->errors[] = 'Por favor, indique un nombre y apellido legtimo';

    } else {$this->nombre = strtoupper(strip_tags($this->nombre));

    }}

    function guardar_datos() {$id = 0;$this->msg = 'Error desconocido';

    if(isset($this->errors)) {$this->msg = implode('
    ', $errors);

    } else {$sql = 'INSERT INTO newsletter (nombre, email) VALUES (?, ?);$data = array('ss', "{$this->nombre}", "{$this->email}");$id = DBLayer::ejecutar();

    }

    if($id > 0) {$this->msg = 'Se ha suscrito al newsletter';

    }}

    function mostrar_mensaje() {

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 30

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    31/57

    $plantilla = file_get_contents('system_msg.html');print str_replace('{MSG}', $this->msg, $plantilla);

    }

    function suscribir_al_newsletter() {recibir_datos();validar_datos();guardar_datos();mostrar_mensaje();

    }

    Finalmente, aquellas instrucciones que puedan definirse en una sola lnea, pueden serrefactorizadas:

    function recibir_datos() {$this->email = isset($_POST['email']) ? $_POST['email'] : '';$this->nombre = isset($_POST['nombre']) ? $_POST['nombre'] : '';

    }

    function validar_datos() {if($this->email == '') {

    $this->errors[] = 'E-mail no puede estar vaco';elseif(strlen($this->email) < 7) {

    $this->errors[] = 'El e-mail no puede tener menos de 7 caracteres';} else {

    $this->email = strtolower(strip_tags($this->email));}

    if(strlen($this->nombre) < 5) {$this->errors[] = 'Por favor, indique un nombre y apellido legtimo';

    } else {

    $this->nombre = strtoupper(strip_tags($this->nombre));}

    }

    function guardar_datos() {$id = 0;$this->msg = 'Error desconocido';

    if(isset($this->errors)) {$this->msg = implode('
    ', $errors);

    } else {$sql = 'INSERT INTO newsletter (nombre, email) VALUES (?, ?);$data = array('ss', "{$this->nombre}", "{$this->email}");$id = DBLayer::ejecutar();

    }

    if($id > 0) $this->msg = 'Se ha suscrito al newsletter';}

    function mostrar_mensaje() {$plantilla = file_get_contents('system_msg.html');print str_replace('{MSG}', $this->msg, $plantilla);

    }

    function suscribir_al_newsletter() {recibir_datos();validar_datos();guardar_datos();

    mostrar_mensaje();

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 31

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    32/57

    }

    PROBLEMA: Cdigo duplicado en una misma c laseEs frecuente -y de lo ms comn-, que las mismas expresiones, comiencen a duplicarseen diferentes mtodos de una misma clase:

    def set_txt_encabezado(self):with open('plantilla.tmpl', 'r') as archivo:

    TEXTO = archivo.read()

    a = TEXTO.replace('X', self.destinatario)return "Estimado %s:
    " % a

    def set_txt_certificacion(self):with open('plantilla.tmpl', 'r') as archivo:

    TEXTO = archivo.read()a = TEXTO.replace('X', self.destinatario)return "Certifica que el %s" % a

    Las expresiones duplicadas en el cdigo de los diferentes mtodos de una misma clase,se solucionan extrayendo el cdigo duplicado de los mtodos y colocndolo en unnuevo mtodo de clase:

    def render(self):

    with open('plantilla.tmpl', 'r') as archivo:TEXTO = archivo.read()

    return TEXTO.replace('X', self.destinatario)

    def set_txt_encabezado(self):return "Estimado %s:
    " % self.render()

    def set_txt_certificacion(self):return "Certifica que el %s" % self.render()

    PROBLEMA: Cdigo duplicado en c lases con la misma herenciaEl caso anterior puede darse tambin, cuando el cdigo se encuentra duplicado endiferentes mtodos de clases con la misma herencia:

    class Carta(Documento):

    #...

    def set_txt_encabezado(self):

    with open('plantilla.tmpl', 'r') as archivo:

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 32

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    33/57

    TEXTO = archivo.read()

    a = TEXTO.replace('X', self.destinatario)return "Estimado %s:
    " % a

    class Certificado(Documento):

    #...

    def set_txt_certificacion(self):with open('plantilla.tmpl', 'r') as archivo:

    TEXTO = archivo.read()

    a = TEXTO.replace('X', self.destinatario)return "Certifica que el %s" % a

    En estos casos, en los cules existen dos o ms clases que heredan de la misma madre,

    se extrae el cdigo duplicado en los mtodos de las clases hijas y con ste, se crea unnuevo mtodo en la clase madre:

    class Documento(object):

    #...

    def render(self):with open('plantilla.tmpl', 'r') as archivo:

    TEXTO = archivo.read()

    return TEXTO.replace('X', self.destinatario)

    class Carta(Documento):

    #...

    def set_txt_encabezado(self):return "Estimado %s:
    " % self.render()

    class Certificado(Documento):

    #...

    def set_txt_certificacion(self):return "Certifica que el %s" % self.render()

    PROBLEMA: Cdigo duplicado en varias c lases sin la misma herenciaComo era de esperarse, el cdigo tambin podra aparecer duplicado en diferentesclases pero que no tienen la misma herencia:

    class Carta {

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 33

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    34/57

    #...

    function set_txt_encabezado() {$texto = file_get_contents('plantilla.tmpl');$a = str_replace('X', $this->destinatario, $texto);return "Estimado $a:
    ";

    }}

    class Certificado {

    #...

    function set_txt_certificacion() {$texto = file_get_contents('plantilla.tmpl');$a = str_replace('X', $this->destinatario, $texto);return "Certifica que el $a";

    }

    }

    En estos casos, la solucin es extraer el cdigo duplicado, crear una nueva clase y con elcdigo extrado, crear un mtodo para esta nueva clase que podr ser heredada por lasanteriores o simplemente, instanciada:

    class Documento {

    # ...

    function render() {$texto = file_get_contents('plantilla.tmpl');return str_replace('X', $this->destinatario, $texto);

    }

    }

    class Carta extends Documento {

    #...

    function set_txt_encabezado() {return "Estimado {$this->render()}:
    ";

    }}

    class Certificado extends Documento {

    #...

    function set_txt_certificacion() {return "Certifica que el {$this->render()}";

    }

    }

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 34

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    35/57

    El enlace de la imagen no funciona? Copia y pega esta URL: http://bit.ly/promo-payoneer

    http://bit.ly/promo-payoneerhttp://bit.ly/promo-payoneerhttp://bit.ly/promo-payoneer
  • 7/28/2019 Hd Magazine Nro 7

    36/57

    Hackers & Developers Magazine Ao 0, Nmero 7 36Inception Deck en el

    AgilismoAntes de iniciar un proyecto de desarrollo utilizandometodologas giles, deben responderse preguntascruciales que asegurarn un buen comienzo yprobablemente el xito al finalizarlo.

    Escrito por: Sergio Infante Montero (Ingeniero de Software)

    Ingeniero Informtico con estudios de Master de Direccin Estratgicaen TI. Senior Software Developer enBelatrix Software Factory, activista,contribuidor y consultor de proyectos FLOSS y escritor de artculos ylibros tcnicos de programacin.Perfiles:http://about.me/neosergioTwitter: @neosergio

    uchos proyectos estn destinados a fracasar desde el principio, sobre todoporque no se hacen las preguntas iniciales adecuadas o incluso porque no setiene el valor para hacerlas.M

    Para asegurar que exista un buen inicio, existe una herramienta llamada InceptionDeck, que consiste en 10 preguntas que deben responderse antes de iniciar cualquierproyecto de software.

    Herramienta propuesta por Jonathan Rasmusson5 y que es utilizada ampliamente por

    diversos equipos giles alrededor del mundo.

    Diferentes perspectivasCasi siempre al inicio de un proyecto las personas tienen diferentes perspectivas delproyecto, algunas mas simples otras mas complejas, y no basta asumir con que hay unconsenso.

    En los proyectos que he participado siempre hemos usado las siguientes estrategiaspara evitar que esta diversidad de ideas se normalice.

    Explicar a los miembros del equipo el contexto del proyecto.

    5 http://agilewarrior.wordpress.com/

    http://www.belatrixsf.com/http://www.belatrixsf.com/http://about.me/neosergiohttp://about.me/neosergiohttps://twitter.com/neosergiohttp://agilewarrior.wordpress.com/http://www.belatrixsf.com/http://about.me/neosergiohttps://twitter.com/neosergiohttp://agilewarrior.wordpress.com/
  • 7/28/2019 Hd Magazine Nro 7

    37/57

    Explicar los objetivos generales y la visin

    Dar a los patrocinadores del proyecto la informacin exacta que requieren paratomar las decisiones con respecto al proyecto

    Estas estrategias, permiten que el equipo de desarrollo tenga claro haca donde sequiere llegar y apuntar todos los esfuerzos para ello, as como a los patrocinadorespermitir aterrizar la idea, teniendo en cuenta las limitaciones actuales tantotecnolgicas como de concepto.

    Las preguntas engaosasEn algunos proyectos empiezan a hacerse anlisis de factibilidad, de fortalezas ydebilidades, de oportunidades y amenazas o incluso estudios estadsticos, pero todos

    estos anlisis y estudios en la mayora de ocasiones son una perdida de tiempo, porqudejan de evaluar aspectos crticos del proyecto.

    Las siguientes preguntas son las mas frecuentes y engaosas:

    Quienes son los responsables del proyecto?

    Cuanta experiencia tiene el equipo?

    Cuanto dinero tenemos disponible para gastar?

    En que otros proyectos han trabajado? Qu lenguaje de programacin van a usar y/o herramientas?

    Han hecho algo similar antes?

    Todas estas preguntas, brindaran respuestas ambiguas y por lo general darn unaperspectiva falsa de control y xito.

    Inception DeckConsiste en juntar a las personas adecuadas y hacerles las preguntas adecuadas, el slohecho de poder intentarlo las primeras veces, asegura un buen inicio, mientras se varepitiendo el mismo procedimiento proyecto tras proyecto, se llega a dominar la tcnicay por lo tanto un buen inicio de todo proyecto.

    Las preguntas a responder o dudas que resolver en el Deck son:

    Preguntar el porque estamos aqu.

    Es una manera de recordar quienes somos, cul es la responsabilidad que tenemos ante

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 37

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    38/57

    los clientes y porque decidimos formar parte del proyecto.

    Crear un elevator pitch

    Debemos ser capaces de describir el proyecto en dos oraciones y en menos de un

    minuto.

    Disear un eslogan para el producto

    Si tendramos que vender el producto en una revista o banner publicitario, como loharamos, saber qu es lo ms importante para decir, para asegurar su venta.

    Crear una lista de cosas que NO se harn

    Una cosa es saber que haremos en el proyecto, pero una parte igual de importante essaber que NO se har en el proyecto, y ser muy claros en definir los lmites.

    Conocer a los vecinos.

    Porque el proyecto depende de personas, es importante tratar de conocer a los queparticiparn del proyecto, para poder congeniar y encontrar un ambiente adecuado detrabajo.

    Mostrar la solucin

    Un prototipo o bosquejo de la solucin es necesaria para que el equipo conozca laarquitectura de la solucin y asegurarse que todos estn visualizando la mismaperspectiva.

    Preguntar que nos mantienen intranquilos

    En el proyecto hay cosas que nos mantienen temerosos, como el desconocimiento dealguna herramienta, o la aplicacin de tcnicas, entre otras cosas. Identificarlas y hablar

    de ellas, permite encontrar soluciones.

    El tamao del proyecto

    Cuntos meses dura el proyecto?, Estamos a tiempo?

    Ser claros en lo que hay que dar.

    Los proyectos tienen restricciones de tiempo, alcance, presupuesto. Y tienen

    parmetros esperados de calidad y funcionalidad. Saber que es lo mas y menosimportante para el equipo.

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 38

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    39/57

    Mostrar que cosas costar.

    Tiempo diario a dar, costo de inversin y el tipo de equipo que se necesita para hacerque las cosas funcionen.

    Todas estas preguntas y dudas, son slo el principio, este Deck permite clarificardetalles antes de empezar e incluso abre las puertas a otros tipos de preguntas queayudaran mucho ms, con el fin de tener a todos felices, clientes y desarrolladores.

    La sinceridad al principio del proyecto, es factor clave para

    su xito

    El enlace de la imagen no funciona? Copia y pega esta URL: http://www.defectivebydesign.org

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 39

    http://www.defectivebydesign.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.defectivebydesign.org/http://www.defectivebydesign.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    40/57

    Hackers & Developers Magazine Ao 0, Nmero 7 40NgiNX instalado y...

    ahora qu?En el nmero pasado vimos como instalar el servidorweb NGiNX, utilizando un enjaulado para aadirseguridad. En este artculo veremos cmo levantaruna aplicacin php, PhpMyAdmin.

    Escrito por: Mara Jos Montes Daz (Archera & Programadora)Estudiante de Grado Ingeniera en Tecnologa de la informacin. Tcnicoen informtica de gestin. Monitora FPO. Docente de programacinPython y Scratch para nios de 6-12 aos. Activista del software libre ycultura libre.

    Webs:Blog:http://archninfa.blogspot.com.es/

    Redes sociales:Twitter: @MMontesDiaz

    na vez instalado nuestro servidor NGiNX, php-fpm y MariaDB, vamos a aadiraplicaciones. Veremos cmo traducir los rewrite a NGiNX, dado que los .htaccessno son tratados por l.U

    Antes de continuar, comentar que en la ltima actualizacin del paquete de NGiNX se hacambiado el binario de /usr/sbin a /usr/bin y, adems est corregido el bug CVE-2013-20286, con lo que es conveniente actualizar.

    Lo primero que vamos a hacer es instalar los paquetes necesarios:

    # pacman -S phpmyadmin php-mcrypt

    Activamos el mdulo de php:

    # echo extensions = mycrypt > /etc/php/conf.d/mycrypt

    Ahora, necesitamos que estos sean vistos desde NGiNX. Para esto podemos optar pordos opciones:

    1.- Copiar los archivos de la aplicacin.

    6 http://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html

    http://archninfa.blogspot.com.es/http://archninfa.blogspot.com.es/https://twitter.com/MMontesDiazhttp://mailman.nginx.org/pipermail/nginx-announce/2013/000112.htmlhttp://mailman.nginx.org/pipermail/nginx-announce/2013/000112.htmlhttp://archninfa.blogspot.com.es/https://twitter.com/MMontesDiazhttp://mailman.nginx.org/pipermail/nginx-announce/2013/000112.htmlhttp://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html
  • 7/28/2019 Hd Magazine Nro 7

    41/57

    2.- Montar los directorios en los que se encuentra instalados en la jaula.

    Con la segunda opcin tenemos la ventaja de no duplicar espacio y, adems, alactualizar el sistema, no necesitaremos intervencin manual, salvo que queramos aadirseguridad adicional cambiando los permisos de los archivos, que, una vez actualicemos,deberos volver a establecerlos.

    Para hacer esto, editamos el/etc/fstaby le aadimos lo siguiente:

    # Para montar los dipostivos que utilizar NGiNXmount -t tmpfs none /srv/nginx/run -o 'noexec,size=1M'mount -t tmpfs none /srv/nginx/tmp -o 'noexec,size=100M'

    # Montamos los directorios de phpmyadmin/usr/share/webapps /srv/nginx/usr/share/webapps none bind 0 0/etc/webapps /srv/nginx/etc/webapps none bind 0 0

    Creamos los puntos de montaje y montamos:

    # mkdir -p /srv/nginx/etc/webapps# mkdir -p /srv/nginx/usr/share/webapps# mount -a

    Ya est nuestra aplicacin, ahora vamos a configurar NGiNX. Editamos el fichero deconfiguracin/srv/nginx/etc/nginx/nginx.confy eliminamos todas las referencias a server.Al final del archivo, aadimos dnde estar la configuracin de los diferentes hostsvirtuales:

    worker_processes auto;

    error_log /var/log/nginx/error.log;

    events {worker_connections 1024;

    }

    http {include mime.types;default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;#tcp_nopush on;

    #keepalive_timeout 0;

    keepalive_timeout 65;

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 41

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    42/57

    #gzip on;

    #Para configuraciones adicionales,#los archivos deben terminar en .confinclude server.d/*.conf;

    #Para definir los diferentes servidores virtualesinclude server.d/*;

    }

    Creamos un enlace a /usr/share/webapps/phpMyAdmin:

    # cd /srv/nginx/srv/html# ln -s /usr/share/webapps/phpMyAdmin phpmyadmin

    Creamos los directorios /srv/nginx/etc/nginx/{conf.d ,server.d} y, dentro de server.d, elarchivo defaultcon el siguiente contenido:

    server {listen 80;

    root /srv/html;index index.html index.htm index.php;

    error_page 500 502 503 504 /50x.html;

    location = /favicon.ico {log_not_found off;access_log off;

    }

    location = /robots.txt {allow all;log_not_found off;access_log off;

    }

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {access_log off;log_not_found off;

    expires 360d;}

    # Userdir, acceder al direcotrio public_html# de los usuarios mediante http:///~location ~ ^/~(.+?)(/.*)?$ {

    #autoindex on;autoindex_exact_size off;autoindex_localtime on;alias /home/$1/public_html$2;

    }

    #

    # PhpMyAdmin - php

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 42

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    43/57

    #location /phpmyadmin/libraries {

    deny all;}location /phpmyadmin/setup/lib {

    deny all;}

    location /phpmyadmin {try_files $uri $uri/ @rewrite ;

    }

    location ~ phpmyadmin(.+\.php)$ {try_files $uri =404;fastcgi_pass 127.0.0.1:9000;fastcgi_param PHP_ADMIN_VALUE

    open_basedir="/tmp/:/srv/html/:/etc/webapps/:/usr/share/webapps/:./";fastcgi_index index.php;

    include fastcgi.conf;}

    ## php por defecto#location ~ (.+\.php)$ {

    fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param PHP_ADMIN_VALUE open_basedir="/srv/html/:/tmp/:./";include fastcgi.conf;

    }

    location / {allow all;try_files $uri $uri/ @rewrite ;

    }

    ## Acceso al Status de NGiNX#location /nginx_status {

    #Ejemplo para permitir el acceso slo#a nuestra red localdeny 192.168.0.1 ;allow 192.168.0.0/24 ;allow 127.0.0.1 ;deny all ;stub_status on;

    }

    location @rewrite {rewrite ^ /index.php last;}

    ##limitando archivos ocultos, .bak, .old#location ~* (/\.|\.bak$|\~$|\.old$) {

    access_log off;log_not_found off;deny all;

    }}

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 43

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    44/57

    Todava nos falta un pequeo detalle ms para que la aplicacin phpMyAdmin funcionecorrectamente: Indicar en su archivo de configuracin,/etc/webapps/phpmyadmin/config.inc.php, dnde se encuentra la BBDD. Lo editamos yestablecemos como host 127.0.0.1 en lugar de localhost, aunque lo ideal es que laBBDD se ejecute en otro equipo:

    .../* Authentication type */$cfg['Servers'][$i]['auth_type'] = 'cookie';/* Server parameters */$cfg['Servers'][$i]['host'] = '127.0.0.1';$cfg['Servers'][$i]['connect_type'] = 'tcp';...

    Ahora, reiniciamos nginx y php-fpm:

    #sudo systemctl restart php-fpm nginx-jail

    Para acceder a phpMyAdmin, bastar ir al navegador y dirigirnos a:http://localhost/phpmyadmin

    Consejo: Si quieren activar la configuracin avanzada de phpMyAdmin, visitenhttps://wiki.archlinux.org/index.php/PhpMyAdmin, donde encontrarn una explicacin detallada para hacerlo.

    Para incluir otro ejemplo, voy a explicar cmo instalar Friendica7. Esta aplicacin es unared social distribuida, muy fcil de instalar y con caractersticas interesantes: Variosperfiles por cuenta, posibilidad de cambiar una cuenta de un servidor a otro, federadacon otras redes (por ejemplo StatusNet y Dispora), posibilidad de seguir RSS, etc.

    Para instalar la aplicacin, necesitaremos el paquete git:

    # pacman -S git# cd /srv/nginx/srv/html/# git clone https://github.com/friendica/friendica.git friendica

    # git clone https://github.com/friendica/friendica-addons friendica/addon

    Instalamos las extensiones php que nos faltan:

    # pacman -S php-curl php-gd php-intl# echo "extension=iconv.so" > /etc/php/conf.d/iconv.ini# echo "extension=imap.so" > /etc/php/conf.d/imap.ini# echo "extension=gd.so" > /etc/php/conf.d/gd.ini

    7 http://friendica.com/

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 44

    http://localhost/phpmyadminhttps://wiki.archlinux.org/index.php/PhpMyAdminhttps://wiki.archlinux.org/index.php/PhpMyAdminhttp://friendica.com/https://github.com/friendica/friendica.githttp://github.com/friendica/friendica-addonshttp://github.com/friendica/friendica-addonshttp://github.com/friendica/friendica-addonshttp://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://localhost/phpmyadminhttps://wiki.archlinux.org/index.php/PhpMyAdminhttp://friendica.com/https://github.com/friendica/friendica.githttp://github.com/friendica/friendica-addonshttp://github.com/friendica/friendica-addonshttp://github.com/friendica/friendica-addonshttp://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    45/57

    # echo extension=openssl.so > /etc/php/conf.d/openssl.ini

    Necesitamos poder enviar correos para poder enviar las notificaciones y para el registro

    de usuarios. Para ello vamos a utilizar msmtp8, que nos proporciona compatibilidad consendmail y nos permite utilizar una cuenta de correo, como por ejemplo, Gmail o Yahoo!para enviar los correos. De esta manera no necesitamos levantar un servicio comoPostfix, que se escapa un poco de la temtica del artculo.

    # pacman -S msmtp-mta

    Ahora, creamos el archivo /etc/msmtprc y configuramos nuestra cuenta:

    defaults

    auth ontls ontls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

    account gmailhost smtp.gmail.comport 587from [email protected] [email protected] password

    account yahootls_trust_file /usr/share/ca-ertificates/mozilla/Thawte_Premium_Server_CA.crthost smtp.correo.yahoo.es

    port 25from [email protected] [email protected] password

    # Cuenta por defectoaccount default : gmail

    Creamos el fichero de configuracin:

    # touch /srv/nginx/srv/html/friendica/.htconfig.php

    # chown http:http /srv/nginx/srv/html/friendica/.htconfig.php

    Una vez hecho esto, vamos a configurar el servidor virtual. Creamos el archivo/svr/nginx/etc/nginx/server.d/, para el ejemplo frndc.archnifa.org,y le aadimos lo siguiente:

    8 https://wiki.archlinux.org/index.php/Msmtp

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 45

    https://wiki.archlinux.org/index.php/Msmtphttp://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/https://wiki.archlinux.org/index.php/Msmtphttp://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    46/57

    server {listen 80;listen 443 ssl;server_name frndc.archninfa.org;

    root /srv/html/friendica;index index.php;

    access_log /var/log/nginx/frndc.archnifa.org.access;error_log /var/log/nginx/frndc.archnifa.org.error;

    server_name_in_redirect on;

    location = /favicon.ico {log_not_found off;access_log off;

    }

    location = /robots.txt {allow all;log_not_found off;access_log off;

    }

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {access_log off;log_not_found off;expires 360d;

    }

    # NO utilizar if para los rewrite, en lugar de esto:#location / {# if (!-e $request_filename){ rewrite ^(.*)$ /index.php?q=$1; }#}

    # Es mejor utlizar try_files:

    location / {try_files $uri $uri/ @rewrite;

    }

    location ~ (.+\.php)$ {try_files $uri =404;fastcgi_param HTTPS on;fastcgi_pass 127.0.0.1:9000;fastcgi_param PHP_ADMIN_VALUE

    open_basedir="/tmp/:/srv/html/friendica/:./:/srv/http/friendica/";fastcgi_index index.php;

    include fastcgi.conf;

    }

    # Para centralizar mejor los rewrite, derivamos con try_files# a @rewrite y, all, los especificamos:location @rewrite {

    rewrite ^(.*)$ /index.php?q=$1;}

    ##limitando archivos ocultos, .bak, .old#location ~* (/\.|\.bak$|\~$|\.old$) {

    access_log off;log_not_found off;

    deny all;

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 46

    http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    47/57

    }}

    Si estamos haciendo pruebas en nuestra lan y no tenemos un servidor de DNS, noolvidar aadir el dominio tanto al/etc/hosts, como al/srv/nginx/etc/hosts.

    Debemos crear una BBDD vaca y un usuario con permisos de escritura para la misma,podemos utilizar para esto phpMyAdmin.

    Damos permisos a carpetas especficas, por exigencia de la aplicacin:

    # chown http:http /srv/html/friendica/view/smarty3

    Creamos los certificados:

    # mkdir /srv/nginx/etc/nginx/ssl# cd /srv/nginx/etc/nginx/ssl# openssl genrsa -des3 -out server.key 1024# openssl req -new -key server.key -out server.csr# cp server.key server.key.org# openssl rsa -in server.key.org -out server.key# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt# cp -r /etc/ssl /srv/nginx/etc/

    Creamos el archivo/srv/nginx/etc/nginx/conf.d/ssl.confcon el siguiente contenido:

    #Configuracin de SSL:ssl_protocols SSLv3 TLSv1;ssl_prefer_server_ciphers on;ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key;

    # Prevenir ataques BEAST y otros exploitsssl_session_cache shared:SSL:10m;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM;add_header Strict-Transport-Security max-age=500;

    ssl_ecdh_curve secp521r1;

    Reiniciamos el servidor y nos dirigimos con nuestro navegador a http://frnc.archinfa.org:

    # systemctl restart php-fpm nginx-jail

    ConclusinCmo hemos podido ver, aunque tengamos la posibilidad de utilizar mltiples clusas

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 47

    http://frnc.archinfa.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://frnc.archinfa.org/http://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    48/57

    root dentro del contexto server, lo ideal es utilizar slo una. Igual ocurre con laclusula index, resultar ms clara revisin de la configuracin.

    Con respecto a los rewritey adaptacin de los .htaccess, debemos tener en cuenta que,aunque herramientas como http://winginx.com/htaccess, utilicen ifpara crearla, no es locorrecto. El uso de if para estos casos puede provocar diversos problemas, de ah la

    utilizacin de try_files. En el ejemplo utilizado, un .htaccesssimilar a:

    RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    Se traduce en:

    location / {

    try_files $uri $uri/ @rewrite;}

    ..................................................

    location @rewrite {rewrite ^(.*)$ /index.php?q=$1;

    }

    Enlaces de inters:http://wiki.nginx.org/Main

    http://wiki.nginx.org/IfIsEvil

    http://wiki.nginx.org/Pitfalls

    https://wiki.archlinux.org/index.php/Nginx

    https://wiki.archlinux.org/index.php/PhpMyAdmin

    http://friendica.com/

    http://winginx.com/htaccess

    2013HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported

    Pg. 48

    http://winginx.com/htaccesshttp://winginx.com/htaccesshttp://wiki.nginx.org/Mainhttp://wiki.nginx.org/IfIsEvilhttp://wiki.nginx.org/Pitfallshttps://wiki.archlinux.org/index.php/Nginxhttps://wiki.archlinux.org/index.php/PhpMyAdminhttp://friendica.com/http://winginx.com/htaccesshttp://www.hdmagazine.org/http://www.hdmagazine.org/http://www.hdmagazine.org/http://winginx.com/htaccesshttp://wiki.nginx.org/Mainhttp://wiki.nginx.org/IfIsEvilhttp://wiki.nginx.org/Pitfallshttps://wiki.archlinux.org/index.php/Nginxhttps://wiki.archlinux.org/index.php/PhpMyAdminhttp://friendica.com/http://winginx.com/htaccesshttp://www.hdmagazine.org/
  • 7/28/2019 Hd Magazine Nro 7

    49/57

    Hackers & Developers Magazine Ao 0, Nmero 7 49El olvidado mundo de

    las variables en PHPVariables locales; variables globales; variables sperglobales; variables estticas; variables variables;variables constantes... de verdad tienes la seguridadde conocerlas todas?

    Escrito por: Eugenia Bahit (GLAMP Hacker & eXtreme Programmer)

    Eugenia es Arquitecta de Software, docente e instructora detecnologas GLAMP (GNU/Linux, Apache, MySQL, Python y PHP) y Agilecoach (UTN) especializada en Scrum y eXtreme Programming. Miembrode la Free Software Foundation, The Linux Foundation y DebianHackers. Creadora de python-printr, Europio Engine y colaboradora deVim.

    Webs:Cursos de programacin: www.cursosdeprogramacionadistancia.comWeb personal:www.eugeniabahit.com

    Redes sociales:Twitter / Identi.ca: @eugeniabahit

    recuentemente me encuentro con que una gran cantidad de programadores serefiere al mbito de las variables de manera equivocada, confundiendo a veces,mbito con tipo. Me pareci una buena idea centrarme en este punto con la

    esperanza de dejar el tema ms claro.FSobre el mbito de una variablePara comenzar, lo primero que debemos dejar en blanco sobre negro es a qu nosreferimos realmente cuando hablamos del mbito de una variable. Bsicamente, elmbito al que pertenece una variable se refiere a la disponibilidad de dicha variableen el contexto de la aplicacin.

    Una variable puede estar disponible a nivel global o local. PHP, tambin incorpora elconcepto de variable sper global. Veamos a qu se refiere cada una.

    Variable global

    Son variables accesibles desde cualquier parte de la aplicacin, independientemente deltipo de estructura de control del que se trate. Las variables globales son aquellas que el

    http://www.fsf.org/http://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.python-printr.org/http://www.europio.org/http://www.europio.org/http://www.vim.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahithttp://www.fsf.org/http://www.linuxfoundation.org/http://www.debianhackers.net/http://www.debianhackers.net/http://www.python-printr.org/http://www.europio.org/http://www.vim.org/http://www.cursosdeprogramacionadistancia.com/http://www.eugeniabahit.com/https://twitter.com/eugeniabahit
  • 7/28/2019 Hd Magazine Nro 7

    50/57

    programador, define con la palabra global delante del nombre de la variable.

    Si una va