Está en la página 1de 74

AO ----------- 0 NMERO -------- 4 FECHA: 2013-02-25

78

HD DEVELOPERS +
Hackers &
Maga$ine digital de distri-uci'n mensual so-re Soft;are Li-re3 )ac*ing y Programaci'n ,ara ,rofesionales del sector de %ecnolog as de la Informaci'n

9/arciso:

Staff
Eugenia Bahit Indira Burga Laura Mora Mar a !os" Montes # a$ Milagros Infante Montero
Arquitecta GLAP & Agile Coach Ingeniera de Sistemas Administradora de Redes y Sistemas %"cnica en Inform&tica de Gesti'n Est( Ingenier a de Sistemas

)ac*ers & #e+elo,ers Maga$ine se distri-uye -a.o una licencia Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted ( Eres li-re de co,iar3 distri-uir y com,artir este material(

4REE AS I/ 4REE#5M6

)# DEVELOPERS
+
)ac*ers & #e+elo,ers Maga$ine3 es una iniciati+a sin fines de lucro destinada al fomento y difusi'n de las tecnolog as li-res ,resentes o futuras3 -a.o una clara ',tica docente y altruista3 que resulte de inter"s t"cnico yIo cient fico a ,rofesionales del sector de %ecnolog as de la Informaci'n( )ac*ers & #e+elo,ers Maga$ine se sostiene econ'micamente con el a,oyo de la comunidad3 no reci-iendo su-+enci'n alguna de ninguna em,resa3 organi$aci'n u organismo de Go-ierno( /ecesitamos de tu a,oyo ,ara ,oder mantener este ,royecto(

Hackers &

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

Hacker es alguien que disfruta jugando con la inteligencia

En esta edici'n<
PEP= de Python((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 8 )al >111 !unior( ?Primera Parte@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((> Pylint al rescate((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( A0 Manual de MBC< ?0@ Controladores((((((((((((((((((((((((((((((((((((((((((((((((((((((AC #ou-le %est con Dend4rame;or*E (((((((((((((((((((((((((((((((((((((((((((((((((((((((E0 FC'mo crear a,licaciones Ge- P)P con Euro,ioEngineH(((((((((((((((((((((EC Manual de Perl ?Parte II@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((8A Conociendo a #5M< Parte II(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((8> P&sate a G/2ILinuJ con Arch< Pacman3 el gestor de ,aquetes(((((((((((((K8 EJ,lorando Mosh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( L8 Agilismo en ,ala-ras sim,les(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((LC #e estudiante a ,rogramador((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((CE
M LAS SECCI5/ES #E SIEMPRE< ASCII Art(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( P&g( C0 Este mes< N%he first #affodil of S,ringO -y Susie 5+iatt Dona 26(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( P&g( C8 La comunidad de nuestros lectores y lectoras

AyPdanos a continuar con este ,royecto


Puedes hacer un donati+o ahora3 de A13 AK3 EK3 K13 A11 o AK1 2S# ,ara ayudar a que )ac*ers & #e+elo,ers Maga$ine ,ueda seguir ,u-lic&ndose de forma gratuita3 todos los meses( Puedes donar con PayPal o %ar.eta de Cr"dito a tra+"s del siguiente enlace< ;;;(hdmaga$ine(orgIdonar C5/ %2 #5/ACIQ/ #E 2S# AK1

RECIBES #E REGAL53 2/A 42/#A #E /E5PRE/E PARA %2 5R#E/A#5R P5R%R%IL


BAL2A#A E/ 2S# EK(S ?5rigen< Estados 2nidos@

Cr"ditos
)ac*ers & #e+elo,ers Maga$ine es ,osi-le gracias al com,romiso de<

Responsable de Proyecto

Eugenia Bahit
Responsables de Comunicacin Indira Burga ?Atenci'n al Lector@ S Milagros Infante ( if!si"#)

Sta
Eu!enia "ahit $r%!itecta G&$'P & $gi(e )oac* www.e!ge#ia+a*it.co, #ndira "ur!a -#ge#iera .e Siste,as a+o!t.,e/i#.ira+,

Permanente
Laura $ora $.,i#istra.ora .e 2e.es y Siste,as GNU/&i#!3 +(ac4*o(..#!se5as.co, $ar%a &os' $ontes D%a( 67c#ica e# -#for,tica .e Gesti"# arc*#i#fa.+(ogs5ot.co,.es

$ila!ros #n ante $ontero 0st!.ia#te .e -#ge#ier1a e# Siste,as www.,i(a(e.#et

Colaboradores Estables
0(i8a+et* 2a,1re8 (-#ge#iera 0(ectr"#ica) Sergio -#fa#te 'o#tero (-#ge#iero -#for,tico)

Redactores Voluntarios
)e(ia )i#tas 0(ia#a )ara+a((o

9ece(y 1a8 ('aestra e# -#te(ige#cia $rtificia()

Di usin
)ac*ers & #e+elo,ers Maga$ine agradece a los ,ortales que nos ayudan con la difusi'n del ,royecto<

www..e+ia#*ac4ers.#et

www..esarro((owe+.co,

www..es.e(i#!3.#et

ESmail de Contacto<
contactoThdmaga$ine(org

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

8
PM %)5/

PEP) de Python

*u' me+or ,ue contar con un documento ,ue liste las con-enciones ,ue tiene el len!ua+e ,ue usamos para desarrollar. PEP) es la !u%a de estilo de Python. La cla-e para este PEP es una de las ideas de /uido Van Rossum0 ,ue el cdi!o se suele leer mucho m1s de lo ,ue se escribe.

Escrito por: $ila!ros 2lessandra #n ante $ontero (0st. -#g. -#for,tica)


Estudiante de #n!enier%a #n orm1tica. 'ie,+ro .e 2PESOL ($sociaci"# Per!a#a .e Software &i+re) y .e (a co,!#i.a. .e software (i+re Lumenhack. 'ie,+ro .e( e%!i5o .e tra.!cci"# a( es5a:o( .e /3O$E. $5asio#a.a 5or e( .esarro((o .e software, tec#o(og1a y ga.gets. efe#sora .e tec#o(og1as +asa.as e# software (i+re y .e c".igo a+ierto.
4ebs5 ;(og< www.,i(a(e.#et Redes sociales5 6witter / -.e#ti.ca< 6milale

&

a P0P (Python Enhancement Proposal) es (a 5ro5!esta .e ,e=ora .e Pyt*o#, co#si.era.a co,o est#.ares. So# (as g!1as .e esti(o %!e se e#c!e#tra# e# (a P0P #>,ero ?, %!e est# .irigi.as a ,e=orar (a (egi+i(i.a. .e( c".igo y a (ograr co#siste#cia. 0sto >(ti,o es f!#.a,e#ta( .e#tro .e !# ,".!(o o f!#ci"#, 5ero ta,+i7# es ,!y i,5orta#te sa+er c!a#.o ser i#co#siste#te. Por e=e,5(o, 5o.e,os to5ar#os co# !#a sit!aci"# e# (a %!e .e+e,os sa+er .ifere#ciar si a( a5(icar a(g!#a reg(a e( c".igo ser ,e#os (egi+(e.

Una consistencia estpida es el duende de las mentes pequeas. - Ralph Waldo Emerson

Es im,ortante recordar que PEP nos dice queW 9La legi-ilidad cuenta:3 es im,ortante seguir -uenas ,r&cticas de ,rogramaci'n y al final que me.or que lograr un c'digo lim,io que cum,la todos los est&ndares(

4ormato del c'digo


#ndentacin5 Se .e+e !sar @ es5acios 5or ca.a #iAe( .e i#.e#taci"#. )!a#.o se i#.e#te c".igo #o se .e+e# ,e8c(ar ta+!(a.ores o es5aciosB sie,5re es reco,e#.a+(e so(o *acer(o co# es5acios.

7ama8o m19imo de l%nea 6o.as (as (1#eas .e+e# co#tar co# !# ,3i,o .e 79 caracteres y .e 72 caracteres a (i#eas e,5(ea.as 5ara .oc!,e#taci"# o co,e#tarios. $( .iAi.ir (1#eas (argas se s!e(e co#ti#!ar (a (1#ea .e for,a i,5(1cita .e#tro .e 5ar7#tesis, corc*etes o ((aAes, 5ero %!e.a ,e=or e( !so .e !#a +arra i#Aerti.a (so+re to.o, c!a#.o #o e3ista 5osi+i(i.a. .e agr!5a,ie#to)< C
def __init__(self, first, second, third, fourth, fifth, sixth): output = (first + second + third + fourth + fifth + sixth)

L%neas en blanco &as (1#eas e# +(a#co se5ara# (as f!#cio#es #o a#i.a.as y .efi#icio#es .e c(ases (co# .os (1#eas) y (as .efi#icio#es .e ,7to.os .e#tro .e !#a ,is,a c(ase (co# !#a (1#ea), se 5!e.e# !sar (1#eas e# +(a#co e3traB 5yt*o# ace5ta e( carcter co#tro(-& (D&).

Codi icacin de caracteres Se reco,ie#.a e( !so .e $S)-- o &ati#-1 (e# (!gar .e este >(ti,o, !sar U6F-?) 1

Im,orts
&os i,5orts .e+er1a# co(ocarse e# .isti#tas (1#eas y sie,5re e# (a 5arte s!5erior .e( arc*iAo, a#tes .e (as Aaria+(es g(o+a(es y (as co#sta#tes .e( ,".!(o. 0stos .e+e# agr!5arse sig!ie#.o este or.e#< i,5orts .e (i+rer1a est#.ar, i,5orts .e 5royectos .e terceras 5artes re(acio#a.os e i,5orts .e a5(icacio#es (oca(es/i,5orts es5ec1ficos .e (a (i+rer1a.

Es,acios en -lanco en eJ,resiones y sentencias


Se .e+e# eAitar es5acios e# +(a#co e3tra e# (as sig!ie#tes sit!acio#es<

*tt5<//www.5yt*o#.org/.eA/5e5s/5e5-E120/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( K

es5!7s .e e#trar o a#tes .e sa(ir .e !# 5ar7#tesis, corc*ete o ((aAe. $#tes .e !#a co,a, 5!#to y co,a o .os 5!#tos. $#tes .e a+rir !# 5ar7#tesis 5ara !#a (ista .e arg!,e#tos. $#tes .e a+rir !# 5ar7#tesis !sa.o co,o 1#.ice o 5ara 5articio#ar. No se .e+e .ar ,s .e !# es5acio a(re.e.or .e !# o5era.or .e asig#aci"# (! otro o5era.or arit,7tico) 5ara a(i#ear(o co# otro.

Comentarios y documentaci'n
0s +asta#te 5ri,or.ia( %!e co,e#te,os #!estro c".igo. -,agi#e# %!e .es5!7s .e ,!c*o tie,5o A!e(Aes a reAisar e( c".igo %!e *iciste 5ero *ay ,!c*as cosas %!e #o rec!er.as. 0s i,5orta#te te#er co,o 5riori.a. %!e (os co,e#tarios se e#c!e#tre# act!a(i8a.os acor.e a (o %!e se Aaya .esarro((a#.o. &os co,e#tarios .e +(o%!e se i.e#ta# a( ,is,o #iAe( %!e .ic*o c".igo, ca.a (1#ea co,ie#8a co# !# F y !# >#ico es5acio y 5ara e( caso .e (os co,e#tarios e# (1#ea %!e se e#c!e#tra e# (a ,is,a (1#ea .e (a se#te#cia, (os co,e#tarios .e+er1a# se5ararse 5or a( ,e#os .os es5acios .e (a se#te#cia %!e co,e#ta#. Para e( caso .e (as ca.e#as .e .oc!,e#taci"#, esta es (a ,a#era correcta .e rea(i8ar(o (#otar (a (1#ea e# +(a#co a#tes .e( GGG .e cierre)<
"""Documentacin de ejemplo Debe realizarse de esta manera para cumplir los est ndares del !"! """

Con+enciones de nom-res
Para (as co#Ae#cio#es .e #o,+res a># #o se tie#e a(go co#siste#te 5ero s1 se tie#e est#.ares reco,e#.a.os.

Descripti-o5 0stos so# (os esti(os .e #o,+ra.o. $%!1 e#co#tra,os a (os ,s co,!#es< !#a (etra e# ,i#>sc!(a, !#a (etra e# ,ay>sc!(a, ,i#>sc!(as, ,ay>sc!(as, co# g!io#es +a=os, o co#si.era#.o 5a(a+ras co# )a,e()ase, 5ero 5or e=e,5(o a(go %!e .e+e eAitarse es e( !so .e 5a(a+ras %!e i#icie# co# ,ay>sc!(as y te#ga g!io#es +a=os.

Prescripti-o5 03iste# E caracteres %!e .e+e# eAitarse !sar co,o #o,+re .e Aaria+(e< (a e(e ,i#>sc!(a, (a o ,ay>sc!(a y (a (etra i ,ay>sc!(a. &os #o,+res .e ,".!(os .e+e# escri+irse e# s! tota(i.a. co# ,i#>sc!(as o co# g!io#es +a=os, 5ara e( caso .e (as f!#cio#es ta,+i7# .e+e# escri+irse e# ,i#>sc!(as. 0# (os arg!,e#tos .e
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L

f!#cio#es y ,7to.os .e+e !ti(i8arse sie,5re H selfI co,o 5ri,er arg!,e#to .e (os ,7to.os .e i#sta#cia y HclsI co,o 5ri,er arg!,e#to .e ,7to.os .e c(ase. 0( .ise:o %!e se tie#e 5ara (a *ere#cia, si #o sa+es +ie# si 5o#er a !# ,7to.o o Aaria+(e .e i#sta#cia %!e sea 5>+(ico o #o 5>+(ico, es ,e=or .e=ar(o co,o #o 5>+(ico ya %!e si se #ecesita ca,+iar (!ego ser ,s fci( %!e e( *acer(o .e ,a#era i#Aersa.

9Y: interacti+o
### $% + $% &' ### _ &'

0sta es rea(,e#te !#a caracter1stica >ti( %!e sor5re#.e#te,e#te 5oca ge#te co#oce. 0# e( i#t7r5rete i#teractiAo ca.a Ae8 %!e se eAa(>a !#a e35resi"# o ((a,a.a a f!#ci"#, e( res!(ta.o se a(,ace#a e# !# #o,+re te,5ora( J (!# g!i"# +a=o). 0ste J a(,ace#a (a >(ti,a e35resi"# i,5resa. )!a#.o !# res!(ta.o es None, #a.a se i,5ri,e, as1 %!e J #o ca,+ia.

Esto solo funciona en el int"r,rete interacti+o no dentro de un m'dulo

Ahora, es mi conviccin que !thon es mucho m"s #"cil que ensear a estudiantes de pro$ramacin ! que ensearles % o %&& o 'ava al mismo tiempo porque todos los detalles de los len$ua(es son mucho m"s di#)ciles. *tros len$ua(es de scriptin$ realmente no #uncionan mu! +ien all). ,uido -an Rossum

PEP= A(8(E
0s e( Aerifica.or .e (a g!1a .e esti(o .e Pyt*o#, esta *erra,ie#ta 5er,ite Aerificar t! c".igo co# (as co#Ae#cio#es %!e se tie#e#. &a ,a#era .e i#sta(ar, act!a(i8ar o .esi#sta(ar es (a sig!ie#te<
( pip install pep' ( pip install )up*rade pep'

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( C

( pip uninstall pep'

Conclusiones
Pyt*o# es !# (e#g!a=e ta# ge#ia( %!e *asta c!e#ta co# s! .oc!,e#to .e g!1as .e esti(o. 0s ,!y i,5orta#te sa+er c",o escri+ir c".igo (i,5io y (egi+(e e# e( (e#g!a=e e# e( %!e .esarro((a,os, ya %!e a (a (arga e( c".igo %!e rea(ice,os es #!estra creaci"#. K!7 ,e=or si esto %!e crea,os es .e ay!.a 5ara (os .e,s y a5arte .e to.o, si es ta# c(aro %!e c!,5(a co# to.os (os est#.ares 5ara %!e trascie#.a co# e( tie,5o.

2RL PARA REGIS%R5< htt,<II-it(lyI,ayoneerShd

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( =

Hal :;;; &unior. <Primera Parte=

En esta oportunidad -eremos como interactuar con un sensor >D y nuestro sistema /3?@Linu9. Via+aremos desde ,u' es un sensor >D hasta los pasos de instalacin de di erentes bibliotecas para su uso.

Escrito por: Celia Cintas (&ice#cia.a e# -#for,tica)


Licenciada en #n orm1tica (UNPSL;), act!a(,e#te rea(i8a#.o Doctorado #n!enier%a (Procesa,ie#to .e -,ge#es, UNS), oce#te (UNPSL;), -#te#to .e sysa.,i# ())) y co.e ,o#4ey e( resto .e (as *oras <). Pyt*o#era 5or .efecto co# a(ar,a#tes i#c(i#acio#es *acia Pro(og y otras *ere=1as.
4ebs5 ;(og< *tt5<//yeta#ot*er(og.wor.5ress.co,/ Redes sociales5 6witter / -.e#ti.ca< 6R7A$celia

ste t1t!(o (i#te#to *!,or1stico) se .e+e a %!e co# 5e%!e:os 5rogra,as 5o.re,os 5rocesar (o %!e #!estro se#sor o+serAa y rea(i8ar accio#es e# 5os .e (o Aisto, 5er,iti7#.o#os i#teract!ar co# (a ,%!i#a ,e.ia#te ,oAi,ie#tos, gestos y so#i.os. 0# esta 5ri,era 5arte Aere,os (os 5asos #ecesarios 5ara te#er #!estro se#sor a#.a#.o co# #!estro GNU/&i#!3 y .e=are,os 5ara (a seg!#.a 5arte a(g!#os 5rogra,as *acie#.o !so .e e(...

Anatom a gen"rica de un sensor 0#


Ma+(a#.o e# c!estio#es .e Mar.ware est co,5!esto co,o ,1#i,o 5or<

Se#sor .e Prof!#.i.a., i#tegra.o 5or< &ser -#frarro=o. Se#sor )'NS ,o#ocro,o.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( >

PM %)5/

9 .e5e#.ie#.o .e( ,o.e(o .e( c!a( .is5o#ga,os 5o.e,os e#co#trar agrega.os co,o< 'otor PiAota(. U#a c,ara .e ti5o 2G;. 'icr"fo#os.

Bi-liotecas #is,oni-les
Para tra+a=ar .es.e GNU/&i#!3, o5ta,os 5or Open3# SDB, %!e 5!e.e .escargarse e# *tt5<//www.o5e##i.org/. )o,o #os co,e#ta N5e#N- e# s! 5gi#a, #os otorga $P-s 5ara e( .esarro((o .e a5(icacio#es co# se#sores E y .e a!.ioB ta,+i7# e# s! 5gi#a e#co#trare,os middlewares .e a(to #iAe( 5ara so(!cio#es .e visual traking2 ,e.ia#te Computer Vision, reco#str!cci"# .e o+=etos e# tie,5o rea(E.

0# #!estro caso Aere,os N-60O.

N-60O otorga !#a $P- 5ara e( co#tro( ,e.ia#te ,a#os o c!er5o co,5(eto. S!s a(gorit,os !ti(i8a# 5rof!#.i.a., co(or, -2 y a!.io co,o f!e#tes .e i#for,aci"#, .a#.o#os .etecci"#, seg!i,ie#to y a#(isis .e (a esce#a, e#tre ,!c*as cosas ,s.

K!e.a 5ara f!t!ros art1c!(os c*ar(ar so+re libfreenect, !# e3ce(e#te 5royecto.

Instalaci'n
&a i#sta(aci"# es muuuuy si,5(e. $#tes %!e #a.a .e+e,os .escargar N5e#N- y N-60. Para (os linuxeros .e P@<
( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$0-/$-1pen23,4inux,x5%,&.$./.tar.zip

9 (os .e E2<

2 E

*tt5<//cAr(co.e.ics.fort*.gr/*a#.trac4i#g/ *tt5<//www.artecE..co,/es/E.Jsca##ersJforJf!#/software/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( A1

( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$0-/$-1pen23,4inux,x'5,&.$./.tar.zip

&!ego e3trae,os (os arc*iAos<


( unzip 1pen23,4inux,x5%,&.$./.tar.zip 6 tar x7jf 1pen23,4inux,x5%,&.$./.tar.bz&

Nos !+ica,os e# (a car5eta y #os e#co#trare,os co# e( si,5(e y %!eri.o install.sh, %!e ge#erar (as reg(as e# udev #ecesarias 5ara 5o.er !ti(i8ar (os .is5ositiAos si# ser root<
( cd 1pen23,&.$./,x5%( sudo .-install.sh

$*ora *are,os a(go si,i(ar 5ara i#sta(ar N-60. 0# P@<


( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$&-$&-238",9in,4inux,x5%, 7$.:.&.&$.tar.zip

9 (os .e E2<
( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$&-$&-238",9in,4inux,x'5, 7$.:.&.&$.tar.zip

Se e3trae .e (a ,is,a for,a %!e Ai,os a#terior,e#te y corre,os s! install.sh

E.em,los
N-60 trae !#a +ater1a .e scripts e# (os %!e 5o.e,os c*e%!ear %!e *aya %!e.a.o to.o correcta,e#te i#sta(a.o, co,o 5or e=e,5(o<
( cd ;amples-9in-x5%,<elease ( .-;ample,!la=ers

0# este e=e,5(o a.e,s .e i.e#tificar !s!arios se 5!e.e# e#co#trar es%!e(etos .e (os ,is,os, (os %!e #os .e=ar *acer !# seg!i,ie#to .e s!s ,oAi,ie#tos.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( AA

6e#ie#.o to.o i#sta(a.o, e# (a seg!#.a 5arte Aere,os 5e%!e:as a5(icacio#es e# (as %!e 5o.e,os *acer !so y a+!so .e #!estro se#sor .e for,a ,!y si,5(e <)

Referencias y Lin*s Interesantes


Q1R *tt5<//www.o5e##i.org/ Q2R *tt5<//o5e#4i#ect.org/wi4i/'ai#JPage QER *tt5s<//git*!+.co,/N5e#Si#ect/(i+free#ect Q@R *tt5<//.e5t*=s.,e.ia.,it.e.!/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( AE

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

A0
PM %)5/

Pylint al rescate

Cuando nosotros desarrollamos en nuestro len!ua+e pre erido0 en este caso Python0 podr%amos tomar en cuenta al!unas herramientas ,ue -eri i,uen si a medida ,ue -amos a-an(ando0 -amos bien o si ya se present al!Cn error y -er como corre!irlo. Pylint es una !ran herramienta ,ue -iene a nuestro rescate en contra de los bu!s.

Escrito por: $ila!ros 2lessandra #n ante $ontero (0st. -#g. -#for,tica)


Estudiante de #n!enier%a #n orm1tica. 'ie,+ro .e 2PESOL ($sociaci"# Per!a#a .e Software &i+re) y .e (a co,!#i.a. .e software (i+re Lumenhack. 'ie,+ro .e( e%!i5o .e tra.!cci"# a( es5a:o( .e /3O$E. $5asio#a.a 5or e( .esarro((o .e software, tec#o(og1a y ga.gets. efe#sora .e tec#o(og1as +asa.as e# software (i+re y .e c".igo a+ierto.
4ebs5 ;(og< www.,i(a(e.#et Redes sociales5 6witter / -.e#ti.ca< 6milale

y(i#t@ es !#a *erra,ie#ta %!e Aerifica errores e# e( c".igo .e Pyt*o# e i#te#ta *acer c!,5(ir (os est#.ares e# e( c".igo +as#.ose e# (a P0P?. 0sta *erra,ie#ta te a(erta so+re 5osi+(es fa((as e# e( c".igo, .etecta ciertos 5e(igros e# .eter,i#a.o co#te3to y ,ostra#.o ,e#sa=es a ,e.i.a %!e Aa a#a(i8a#.o (o %!e Hco.ea,osI. &os ,e#sa=es se c(asifica# +a=o Aarias categor1as y a( ,ostrar (as esta.1sticas se co,5ara (a e=ec!ci"# 5reAia co# (a act!a( 5ara 5o.er Aer si e( c".igo t!Ao a(g!#a ,e=ora. &os ti5os .e ,e#sa=e 5!e.e# ser<

DRE 2efactori8ar 5or !#a Aio(aci"# .e ,7trica .e H+!e#a 5rcticaI. DCE )o#Ae#ci"# 5or !#a Aio(aci"# a( est#.ar .e co.ificaci"#. D2E $(erta 5ara 5ro+(e,as .e esti(o o errores .e 5rogra,aci"# ,e#ores. DEE 0rror e# 5ro+(e,as .e 5rogra,aci"# i,5orta#tes (5or e=e,5(o !# bug). DAE Fata( 5or errores %!e i,5i.iero# s! 5osterior 5rocesa,ie#to .e a#(isis.

*tt5<//www.(ogi(a+.org/car./5y(i#tJ,a#!a(

Caracter sticas
Est1ndar de cdi!o Terificar (a (o#git!. .e (as (1#eas .e( c".igo, si (os #o,+res .e Aaria+(e est# +ie# for,a.os, si (os ,".!(os i,5orta.os so# !sa.os. Deteccin de error Terificar si (as i#terfaces .ec(ara.as so# rea(,e#te i,5(e,e#ta.as, si (os ,".!(os est# i,5orta.os. 2yuda de re actori(acin Py(i#t .etecta c".igo .!5(ica.o #nte!racin del editor e #DE Py(i#t Aie#e i#tegra.o co# Aarios e.itores e - 0 U. Dia!ramas ?$L PyreAerse crea .iagra,as U'& 5ara c".igo .e Pyt*o# #nte!racin continua E9tensibilidad

An&lisis est&tico del c'digo en P ython


0( a#(isis esttico .e( c".igo se refiere a( 5roceso .e eAa(!aci"# .e( c".igo f!e#te si# e=ec!tar(o, (a i#for,aci"# %!e se o+te#.r #os 5er,itir ,e=orar (a (1#ea +ase .e #!estro 5royecto. 0s 5or esto %!e Py(i#t es ,!y #ecesario e# e( 5roceso .e i#tegraci"#. Para a(g!#as 5erso#as %!i8s (os ,e#sa=es 5o.r1a# res!(tar !# 5oco ,o(estos, ya %!e cosas %!e !#o 5!e.e co.ear co#scie#te,e#te y %!e #o re5rese#ta# ,ayor re(eAa#cia 5ara !#o, 5ara e( caso .e Py(i#t 5!e.e %!e s1 re5rese#te a(go #egatiAo, 5ero to.o es c!esti"# .e co#si.erar %!e ,e#sa=es .esea,os %!e #os sea# a(erta.os y c!a(es #o.

A.usta la configuraci'n de Pylint ,ara no reci-ir alertas so-re ciertos ti,os de ad+ertencias o errores(

Py(i#t *ace !#a serie .e reAisio#es a( c".igo f!e#te< 2eAisio#es +sicas< Prese#cia .e ca.e#as .e .oc!,e#taci"# (docstring) No,+res .e ,".!(os, c(ases, f!#cio#es, ,7to.os, arg!,e#tos, Aaria+(es. N>,ero .e arg!,e#tos, Aaria+(es, retor#os, ,7to.os, etc.

*tt5<//www.(ogi(a+.org/car./5y(i#tJ,a#!a(Fi.e-i#tegratio#

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( A8

Uso .e .ec(aracio#es g(o+a(es

2eAisi"# .e Aaria+(es< eter,i#a si !#a Aaria+(e o i,5ort #o est sie#.o !sa.o. Taria+(es i#.efi#i.as Uso .e Aaria+(e a#tes .e asig#aci"# .e Aa(or.

2eAisi"# .e c(ases< '7to.os si# se(f co,o 5ri,er arg!,e#to. $cceso >#ico a ,ie,+ros e3iste#tes A1a se(f $tri+!tos #o .efi#i.os e# e( ,7to.o JJi#itJJ

2eAisi"# .e .ise:o< N>,ero .e ,7to.os, atri+!tos, Aaria+(es, etc. 6a,a:o, co,5(e=i.a. .e f!#cio#es.

Ntras a.Aerte#cias< )".igo f!e#te co# caracteres #o-$S)--. 2eAisi"# .e e3ce5cio#es

Benta.as
Py(i#t tie#e !#a secci"# .e.ica.a a re5ortes %!e se e#foca# e# !# as5ecto 5artic!(ar .e( 5royecto refere#te a (o .eta((a.o e# s!s a#(isis y fi#a(,e#te c!e#ta co# !#a 5!#t!aci"# ge#era( +asa.o e# e( #>,ero y seAeri.a. .e errores y a.Aerte#cias e#co#tra.as e# to.o e( c".igoB Py(i#t es tota(,e#te co#fig!ra+(e y 5er,ite i#sta(ar co,5(e,e#tos y/o plugins 5ara agregar f!#cio#a(i.a.es.

.en$o esa esperan/a, que ha! un camino me(or. 0erramientas de alto nivel que actualmente te permiten ver la estructura del so#t1are m"s clara ser"n de enorme valor. ,uido -an Rossum

E.em,lo
U# e=e,5(o .e( re5orte %!e Py(i#t .a es e( sig!ie#te<

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( AK

Messages by category ------------------------------+,,,,,,,,,,,+,,,,,,,,+,,,,,,,,,,+,,,,,,,,,,,+ >t=pe >number >pre7ious >difference > +===========+========+========= +===========+ >con7ention >?5? >$@&$ >,@:&.// > +,,,,,,,,,,,+,,,, ,,,+,,,,,,,,,,+,,,,,,,,,,,+ >refactor >&5@ >$'& >+':.// > +,,,,,,,,,,,+,,,,,,,,+,,,,,,,,,,+,,,,,,,,,,,+ >+arnin* >@50 >'&5 >,50.// > +,,,,,,,,,,,+,,,,,,,,+,,,,,,,,,,+,,,,,,,,,,,+ >error >@' >&?$ >,&$0.// > +,,,,,,,,,,,+,,,,,,,,+,,,,,,,,,,+,,,,,,,,,,,+

0s i,5orta#te sa+er a %!e se refiere (os c".igo i#.ica.os 5or Py(i#t, 5ara esto e( sig!ie#te co,a#.o es .e ,!c*a !ti(i.a..
p=lint )help,ms*=A1D3B1

Posibles mensa+es5 4;F>F5 No e3iste e( ,7to.o JJi#itJJ R;F;G5 )a,i#a co,o !#a f!#ci"#, *a+(a co,o !# ,7to.o 4;H;G I 4;JGG K #mports comod%n Por e=e,5(o se e#c!e#tra !# from mod le im!ort ", 5ero este ,".!(o i,5orta.o #o se est !sa#.o. C;GGF5 Se *a((a !# docstring (!#a ca.e#a .e .oc!,e#taci"#) Aac1a 4;>;G5 P!#to y co,a i##ecesario.

9 c(aro %!e #o estar .e ,s te#er a (a ,a#o (a 5gi#a .e( wi4i .e Py(i#t P 5ara sa+er e( sig#ifica.o e3acto .e ca.a ,e#sa=e %!e #os a5are8ca, .es5!7s .e e=ec!tar (a *erra,ie#ta %!e Aie#e a #!estro rescate e# +!sca .e 5osi+(es bugs.

*tt5<//5y(i#t-,essages.wi4i.ot.co,/a((-,essages

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( AL

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

AC
MA/2AL #E MBC

$anual de $VC5 <>= Controladores

En la primera entre!a del manual0 estu-imos -iendo como crear el controlador principal de la aplicacin. 2prendimos cmo 'ste0 se comunicaba de orma directa con el controlador del modelo correspondiente0 actuando de LruteadorM de los recursos. En esta entre!a inal nos concentraremos en las responsabilidades de los controladores y en los casos en las ,ue 'stas inter-ienen.

Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)


0!ge#ia es 2r,uitecta de So tNare, docente i#str!ctora .e tec#o(og1as /L2$P (GNU/&i#!3, $5ac*e, 'ySK&, Pyt*o# y PMP) y 2!ile coach (U6N) es5ecia(i8a.a e# Scr!, y eVtre,e Progra,,i#g. 'ie,+ro .e (a Aree So tNare Aoundation e i#tegra#te .e( e%!i5o .e Debian Hackers.
4ebs5 )!rsos .e 5rogra,aci"# a ista#cia< www.c!rsos.e5rogra,acio#a.ista#cia.co, We+ 5erso#a(< www.e!ge#ia+a*it.co, Redes sociales5 6witter / -.e#ti.ca< 6eu!eniabahit

# (a 5ri,era e#trega .e( 'a#!a( .e 'T) 5!+(ica.a e# Mac4ers & eAe(o5ers 'aga8i#e Nro. 1, *a+(a,os .e FrontController y a5re#.i,os %!e 7ste act>a .e ruteador! .e ca.a rec!rso, i#sta#cia#.o .irecta,e#te a( co#tro(a.or .e( ,o.e(o.

)o,o recor.ar#, ca.a co#tro(a.or .e+er1a estar 5re5ara.o -.es.e s! ,7to.o co#str!ctor- 5ara rea(i8ar !#a ((a,a.a .e retor#o a( rec!rso corres5o#.ie#te. ic*a acci"#, se e#co#tra+a e# re(aci"# .irecta a (a i#sta#cia ge#era.a 5or FrontController. &a i.ea .e esta >(ti,a e#trega e# co#ce#trar#os e# (os rec!rsos %!e (os co#tro(a.ores .e (os ,o.e(os s!e(e# ,a#e=ar, s!s res5o#sa+i(i.a.es y (os casos e# (as %!e (as ,is,as i#terAie#e#.

Caracter sticas de los controladores


6o.o co#tro(a.or ((eAar e( #o,+re .e( ,o.e(o, seg!i.o .e (a 5a(a+ra Controller<
# En Python

class CidrioAontroller(object): pass # En PHP class CidrioAontroller D E

6o.o co#tro(a.or .e+e 5re5arar s! ,7to.o co#str!ctor 5ara reci+ir a( ,e#os 2 5ar,etros e# (a i#sta#cia %!e rea(ice e( FrontController<
# En PHP class CidrioAontroller D function __construct($recurso='', $argumento) D E E

0# e( caso .e Pyt*o#, a.e,s, ser ,!y >ti( %!e e( FrontController (e e#treg!e !# tercer 5ar,etro< e( .iccio#ario en#iron 5ara %!e e( co#tro(a.or 5!e.a rec!5erar (os .atos e#Aia.os .es.e (os for,!(arios (A1a $O%&) a traA7s .e (a c(aAe 's(i.in! t (si e3iste). 0# este caso, e( co#tro(a.or, .e+er .is5o#er .e .ic*o Aa(or e# !#a 5ro5ie.a.<

Por fa+or3 notar que esto es solo necesario si se est& tra-a.ando en el su,uesto de GSGI so-re A,ache(

# En Python class CidrioAontroller(object): def __init__(self, recurso='', argumento=0, environ={}): self.pd = en7FG+s*i.inputGH.read() if G+s*i.inputG in en7iron else GG

&os ,7to.os co#str!ctores .e+er# rea(i8ar !#a ((a,a.a .e retor#o a (os rec!rsos corres5o#.ie#tes, 5as#.o(es e( arg!,e#to co,o 5ar,etro<
# En Python class CidrioAontroller(object): def __init__(self, recurso=GG, ar*umento=/, en7iron=DE): self.pd = en7FG+s*i.inputGH.read() if G+s*i.inputG in en7iron else GG getattr(self, recurso)(int(argumento)) # En PHP class CidrioAontroller D function __construct((recurso=GG, (ar*umento) D call_user_func(array($this, $recurso), $argumento);

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( A=

E E

&os ,7to.os .e (os co#tro(a.ores, re5rese#tar# (os rec!rsos .is5o#i+(es<


# En Python class CidrioAontroller(object): def __init__(self, recurso=GG, ar*umento=/, en7iron=DE): self.pd = en7FG+s*i.inputGH.read() if G+s*i.inputG in en7iron else GG *etattr(self, recurso)(int(ar*umento)) def agregar(self, Iar*): pass def guardar(self, Iar*): pass def ver(self, id=/): pass # En PHP class CidrioAontroller D function __construct((recurso=GG, (ar*umento) D call_user_func(array($this, $recurso), $argumento); E function agregar() D E function guardar() D E function ver((id=/) D E E

;sica,e#te e3iste# U ti5os .e rec!rsos est#.ar<


a*re*ar() editar(id) *uardar() eliminar(id) listar() 7er(id) Juestra el formulario para crear un nue7o objeto Juestra el formulario para modificar un objeto existente Buarda los cambios realizados a tra7Ks de editar() = a*re*ar() "limina un objeto existente (opcional) Juestra la coleccin completa de objetos basados en el mismo modelo (opcional) !ermite 7er los datos de un objeto

&os rec!rsos editar)*, eliminar)* y #er)* s!e(e# reci+ir (a 5ar,etro (arg!,e#to reci+i.o .es.e FrontController).

.e( o+=eto co,o

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( A>

Res,onsa-ilidades de los controladores


1. &(a,ar a( ,o.e(o (crear i#sta#cia). Ge#era(,e#te e# (os rec!rsos editar, ( ardar+ eliminar y listar (e# este >(ti,o caso, ((a,ar a( co(ector). 2. Sa#ear y aseg!rar (os .atos reci+i.os .es.e e( !s!ario $N60S .e ,o.ificar e( ,o.e(o< e( sa#ea,ie#to y aseg!raci"# .e .atos reci+i.os 5or e( !s!ario, est e# ,a#os .e (os co#tro(a.ores y NN .e (os ,o.e(os. E. 'o.ificar s!s 5ro5ie.a.es c!a#.o sea #ecesario. Ge#era(,e#te e# (os rec!rsos .o#.e rea(i8a ((a,a.as a( ,o.e(o. @. Macer (as ((a,a.as (a() a (os ,7to.os corres5o#.ie#tes .e( ,o.e(o. e ig!a( for,a %!e (os a#teriores, e# (os casos e# (os %!e se ((a,a a( ,o.e(o y se (o ,o.ifica. U. 0#tregar (os .atos o+te#i.os a (a Aista< 0# e( rec!rso a(re(ar+ s!e(e ((a,ar .irecta,e#te a (a Aista si# 5asar .atosB 0# (os rec!rsos editar+ #er y listar+ e#trega (os .atos .e( o+=eto a (a AistaB 0# (os rec!rsos eliminar y ( ardar+ s!e(e 5asar .e (argo a (a Aista y e# ca,+io, re.irige a( !s!ario *acia otro rec!rso.

FC'mo se +en los m"todos de un controladorH


U# e=e,5(o co# c".igo co,e#ta.o<

# En Python class CidrioAontroller(object): def __init__(self, recurso='', argumento=0, environ={}): self.pd = en7FG+s*i.inputGH.read() if G+s*i.inputG in en7iron else GG *etattr(self, recurso)(int(ar*umento)) def agregar(self, arg): # Llama directamente a la vista 7ista = CidrioCie+() self.output = 7ista.mostrar_form_alta() def editar(self, id=0): # Instancia al modelo modelo = Cidrio() # Modifica las propiedades necesarias modelo.7idrio_id = int(id) # Llama al mtodo correspondiente (necesita recuperar el objeto) modelo.*et() # Le entre a la informaci!n a la vista 7ista = CidrioCie+() self.output = 7ista.mostrar_form_edicion(modelo) def guardar(self, arg):

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( E1

# "btiene los datos enviados del el formulario # Esto eneralmente debe hacerse desde un Helper post = self.pd.split(G6G) _!1;8 = DE for par in post: field, 7alue = par.split(G=G) _!1;8FfieldH = 7alue # Instancia al modelo modelo = Cidrio() # Modifica las propiedades necesarias modelo.7idrio_id = int(_!1;8FG7idrio_idGH if G7idrio_idG in _!1;8 else / modelo.color = _!1;8FGcolorGH # Llama al mtodo correspondiente (necesita uardar el objeto) modelo.sa7e() # Pasa de lar o a la vista y en cambio# recurre a otro recurso self.listar() def eliminar(self, id=0): # Instancia al modelo modelo = Cidrio() # Modifica las propiedades necesarias modelo.7idrio_id = int(id) # Llama al mtodo correspondiente (necesita destruir al objeto) modelo.destro=() # Pasa de lar o a la vista y en cambio# recurre a otro recurso self.listar() def listar(self, arg): # $ecurre al colector para traer toda la colecci!n de objetos %idrio coleccion = CidrioAollector().*et() # Le entre a la informaci!n a la vista 7ista = CidrioCie+() self.output = 7ista.mostrar_listado(coleccion)

# En PHP class CidrioAontroller D function __construct($recurso='', $argumento=0) { call_user_func(arra=((this, (recurso), (ar*umento)L E function agregar() { # Llama directamente a la vista (7ista = ne+ CidrioCie+()L (7ista,#mostrar_form_alta()L E function editar($id=0) { # Instancia al modelo (modelo = ne+ Cidrio()L # Modifica las propiedades necesarias (modelo,#7idrio_id = (int)(idL # Llama al mtodo correspondiente (necesita recuperar el objeto) (modelo,#*et()L # Le entre a la informaci!n a la vista (7ista = ne+ CidrioCie+()L (7ista,#mostrar_form_edicion((modelo)L E

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( EA

function guardar() { # Instancia al modelo (modelo = Cidrio() # Modifica las propiedades necesarias (id = isset((_!1;8FG7idrio_idGH) M (int)(_!1;8FG7idrio_idGH : /L (modelo,#7idrio_id = (idL (modelo,#color = (_!1;8FGcolorGHL # Llama al mtodo correspondiente (necesita uardar el objeto) (modelo,#sa7e()L # Pasa de lar o a la vista y en cambio# recurre a otro recurso (this,#listar()L E function eliminar($id=0) { # Instancia al modelo (modelo = ne+ Cidrio()L # Modifica las propiedades necesarias (modelo,#7idrio_id = (int)(idL # Llama al mtodo correspondiente (necesita destruir al objeto) (modelo,#destro=()L # Pasa de lar o a la vista y en cambio# recurre a otro recurso (this,#listar()L E function listar() { # $ecurre al colector para traer toda la colecci!n de objetos %idrio (coleccion = CidrioAollector::*et()L # Le entre a la informaci!n a la vista (7ista = ne+ CidrioCie+()L (7ista,#mostrar_listado((coleccion)L E E

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( EE

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

E0
P)P I %##

Double 7est con OendArameNorkF

2 -eces se desean hacer pruebas a un system under test <S?7= ,ue depende de uno o mas componentes0 los cuales no pueden ser incorporados al entorno de pruebas. Debido a esto nacen los Doubles Test0 ,ue separan el ob+eto ,ue se est1 probando de otros ob+etos <de los cu1les se depende pero no se necesita probar=0 disminuyendo sus dependencias. De esta manera se mantienen las pruebas de inte!racin como pruebas unitarias. Hablaremos un poco mas de su uncin y de cmo se implementan.

Escrito por: #ndira "ur!a (-#ge#iera .e Siste,as)


-#.ira es #n!. de Sistemas .e Per>. Gestora .e Proyectos .e .esarro((o .e software, pro!ramadora PHP, a#a(ista, #!eAa a,a#te .e (as metodolo!%as P!iles. $*ora e#A!e(ta e# !#a #!eAa aAe#t!ra< s! 5ro5ia e,5resa G#C Pro+ectsG .e.ica.a a( .esarro((o .e Software.
4ebs5 $+o!t.,e< *tt5<//a+o!t.,e/i#.ira+, Redes sociales5 6witter< 6indirabm

o,o teor1a +sica 5ara to.a 5r!e+a !#itaria es %!e e( SU6 se e#c!e#tre ais(a.o .e( siste,a .e+i.o a %!e #o se .esea %!e 7ste e=ec!te ,7to.os %!e 5!e.a# ,o.ificar (a .ata. $( e3istir .e5e#.e#cias .e 7stos se !ti(i8a# (os "ouble #est %!e ree,5(a8a# (as .e5e#.e#cias .#.o#os (as res5!estas %!e .esea,os 5ara %!e (a 5r!e+a se e=ec!te correcta,e#te. 6a,+i7# s!e(e !ti(i8arse c!a#.o te#e,os a(g># error e# 5ro.!cci"#, e# !# ,7to.o %!e #o *a si.o testea.o. Para este caso, (o !(ti,o %!e .esea,os es %!e se e=ec!te# (os otros ,7to.os .e5e#.ie#tes as1 %!e *acer !# test .o+(e es (a res5!esta.

%uando nosotros escri+imos una prue+a en la cual podr)amos 2o no3 usar una real dependencia de componentes

24*%3, nosotros podemos reempla/arlo con un 4o+le de rue+as. El do+le de prue+as no tiene que comportarse e5actamente como el real 4*%6 simplemente tiene que proporcionar la misma A 7 que la real de modo que el 8U. piensa que es el verdadero9 : ,erard ;es/aros
e#tro .e (os doubles tests, se s!e(e *a+(ar .e (os St!+s y 'oc4s, a!#%!e ta,+i7# est# (os S5ies, Fa4es y !,,y. Si# e,+argo a%!1 *a+(are,os .e (os .os 5ri,eros. Stubs< 2ee,5(a8a e( co,5o#e#te .e( %!e .e5e#.e e( SU6 y este test sirAe co,o 5!#to .e co#tro( 5ara (os inputs i#.irectos .e( SU6. $ocks< N+=eto 5re-5rogra,a.o co# e35ectatiAas %!e co#for,a (a es5ecificaci"# .e c",o se es5era %!e se reci+a# (as ((a,a.as Pero co,o e# rea(i.a. f!#cio#a, a%!1 (es .e=o !# grfico %!e ,!estra a groso ,o.o (a f!#ci"# .e (os st!+ y ,oc4 e# !#a 5r!e+a.

$ co#ti#!aci"# ,ostrare,os .os e=e,5(os< !#o .e st!+s y otro .e ,oc4s, e# Xe#. Fra,ewor4 2. Para esto #ecesitas co#tar co# !# 5royecto e# Xe#. Fra,ewor4 2B si #o (o tie#es sig!e estos 5asos< escargar Xe#. Fra,ewor4 2. 0ste ,a#!a( 7 es ,!y +!e#o, si# e,+argo c!a#.o ((egas a $nit #esting #o f!#cio#a. Para U#it 6esti#g, !sar este t!toria(?. $*ora #ecesita,os !# 5royecto co# e( c!a( rea(i8ar (as 5r!e+as, 5or s!erte #!estros a,igos .e XF #os (a *a# .e=a.o fci( y c!e#ta# co# !# e=e,5(o 9

7 ? 9

*tt5<//8f2.rea.t*e.ocs.org/e#/(atest/!ser-g!i.e/s4e(eto#-a55(icatio#.*t,( *tt5<//fra,ewor4.8e#..co,/,a#!a(/2.0/e#/!ser-g!i.e/!#it-testi#g.*t,( *tt5<//8f2.rea.t*e.ocs.org/e#/(atest/!ser-g!i.e/,o.!(es.*t,(

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( E8

,!y +!e#o. 0s *ora .e (os e=e,5(os< Stub en OAF 0# Al, m-Controller-Al, mController.!h! crear e( sig!ie#te ,7to.o.
public function do;omethin*Nction((name=G2adaG) D && 'o somethin ( return (nameL E

Stub #os 5er,ite es5ecificar !#a i#sta#cia .e (a c(ase Al, mController (a c!a( Aa a ser co.ifica.a 5ara retor#ar !# Aa(or co#oci.o a( ,7to.o do%omethin(Action, 5ara %!e c!a#.o se *aga# 5r!e+as y se co#ti#>e .esarro((a#.o e# este ,7to.o, sie,5re se te#ga !#a res5!esta co#oci.a 5ara (os 6est. 0# test.controller.Al, mControler&est.!h! crear (a sig!ie#te f!#ci"#.
public function test;tub() D &)) ) *rear un +tub para el controlador ,lbum( ) En lu ar de llamar a una clase est-tica se llama al mtodo )& (stub = (this,#*etJocO(GNlbumPAontrollerPNlbumAontrollerG, arra=(Gdo;omethin*NctionG))L && *onfi urar el stub( (stub,#expects((this,#an=()) ,#method(Gdo;omethin*NctionG) ,#+ill((this,#returnNr*ument(/))L &)) ) Llamando al mtodo /stub01do+omethin () 2ue devolver) 3al o3( )& (this,#assert"Quals(Gal*oG, (stub,#do;omethin*Nction(Gal*oG))L E

etMoc.()

Problemas encontrados5 $this->getMock() $( i.e#tificar o .efi#ir correcta,e#te (a c(ase .e Xe#. 5ara %!e f!#cio#e (etMoc/ co# XF2, se .e+e .e es5ecificar (a c(ase co,o Al, m-Controller-Al, mController, y #o co,o Al, mController.

->method() 0# !# ,7to.o e# XF sie,5re .e+e e3istir e( Action a( fi#a( .e( #o,+re .e(
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( EK

,7to.o, 5ero c!a#.o se !sa, se o+Aia (a 5a(a+ra Action. Para e( )aso .e method)0nom,re1eMetodo0* se .e+e i#.icar e( #o,+re rea( nom,re1eMetodoAction, 5or%!e es a*1 .o#.e se tie#e error co# XF2. $ock en OAF Ta,os a 5ro+ar %!e (a c(ase Al, m&a,le i#teract>e co# (a c(ase &a,le2ate'a3 .e (a for,a a.ec!a.a. )a+e se:a(ar %!e (a c(ase &a,le2ate'a3 est ,as %!e co,5ro+a.o s! f!#cio#a,ie#to, 5ero so(o es 5or c!estio#es .e 5r!e+a.
public function testRetchNll<eturnsNllNlbums() D && ,rray de 'atos en 4ila (vac5o) (result;et = ne+ <esult;et()L &)) ) *rear un moc. para la clase 6end7'b78able9ate:ay 2ue es un objeto 2ue ) representa a una tabla en la ;ase de 'atos( ) Para ellos solo vamos a usar el mtodo <select= )& (mocO8ableBate+a= = (this,#*etJocO(GSendPDbP8ableBate+a=P8ableBate+a=G, arra=(GselectG), arra=(), GG, false)L &&confi urar Moc. con el metodo <+elect= (mocO8ableBate+a=,#expects((this,#once()) ,#method(GselectG) ,#+ith() && retorna valore de ,rray de 'atos en 4ila ( vacio ) ,#+ill((this,#returnCalue((result;et))L &)) ) Llamamos a ) ,lbum8able ) le pasamos )& (album8able = la clase ,lbum8able por2ue 2ueremos probar 2ue la *lase tiene un mtodo 2ue usa la clase 8able9ate:ay# por eso todo la respuesta de /moc.8able9ate:ay ne+ Nlbum8able((mocO8ableBate+a=)L

&)) ) ,serci!n ) ,2u5 debemos de observar 2ue la clase ,lbum8able tiene un mtodo ) 2ue se llama <fetch,ll()= el cual lo >nico 2ue hace es llamar ) a /this01table9ate:ay01select() Lo cual lo convierte en una ) prueba de 'oble test )& (this,#assert;ame((result;et, (album8able,#fetchNll())L E

Fi#a(,e#te te#e,os %!e te#er c!i.a.o a( !ti(i8ar double test 5or%!e esta,os 5ro+a#.o e( SU6 e# !#a co#fig!raci"# .ifere#te .e (a %!e se !ti(i8ar e# 5ro.!cci"#. $s1 %!e rea(,e#te .e+e,os te#er 5or (o ,e#os !#a 5r!e+a %!e Aerifica %!e f!#cio#a rea(,e#te si# e( double test.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( EL

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

EC

QCmo crear aplicaciones 4eb PHP con EuropioEn!ineR

EuropioEn!ine es un motor para aplicaciones 4eb modulares desarrolladas en PHP y ,ue re,uieran de bases de datos $yS*L para persistencia de ob+etos. 2 di erencia de un ArameNork0 EuropioEn!ine Kal ser un motor de So tNare y no un ArameNorkK0 no re,uiere aprender una sinta9is particular ni nada parecido5 solo necesitas pro!ramar en len!ua+e PHP puro.

Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)


0!ge#ia es 2r,uitecta de So tNare, docente i#str!ctora .e tec#o(og1as /L2$P (GNU/&i#!3, $5ac*e, 'ySK&, Pyt*o# y PMP) y 2!ile coach (U6N) es5ecia(i8a.a e# Scr!, y eVtre,e Progra,,i#g. 'ie,+ro .e (a Aree So tNare Aoundation e i#tegra#te .e( e%!i5o .e Debian Hackers.
4ebs5 )!rsos .e 5rogra,aci"# a ista#cia< www.c!rsos.e5rogra,acio#a.ista#cia.co, We+ 5erso#a(< www.e!ge#ia+a*it.co, Redes sociales5 6witter / -.e#ti.ca< 6eu!eniabahit

,e.ia.os .e( a:o 200P, co,e#c7 a .esarro((ar -si# 5e#sar(o #i 5rete#.er(o-, !# Fra,ewor4 e# PMP %!e -a( ig!a( %!e c!a(%!ier Fra,ewor4 .esco#oci.o 5or ,i e# a%!e( ,o,e#to-, 5or !# (a.o, (e eAitara a (os 5rogra,a.ores .e ,i e%!i5o e( .esarro((o .e f!#cio#a(i.a.es y/o tareas .e 5rogra,aci"# re5etitiAas y 5or otro, #os 5er,itiera ace(erar (os 5rocesos .e .esarro((o< 5!es (a eco#o,1a esta+a atraAesa#.o !#a crisis y #os Ae1a,os o+(iga.os a as!,ir ,ayor ca#ti.a. .e 5royectos .e (os %!e rea(,e#te 5o.1a,os afro#tar.

$s1 s!rge 0!ro5io e# s!s i#icios, 5ero +a=o e( #o,+re .e XS-PMPFra,ewor4. $:os .es5!7s y Ae#.i.a (a e,5resa %!e (i.era+a 5or a%!e( e#to#ces, XS-PMPFra,ewor4 %!e." e# e( o(Ai.o, res!rgie#.o reci7# a fi#es .e 2010 co,o 0!ro5io< ya #o te#1a as5ecto .e Fra,ewor4 y co,e#8a+a a 5arecerse ca.a Ae8 ,s a !# %oftware Engine (,otor .e Software).

P)P

$ fi#es .e 2012, ,e 5ro5!se ter,i#ar .e co#Aertir(o e# !# -erdadero motor de So tNare, ya %!e Ae#1a tra+a=a#.o Hs!ti(,e#teI e# e((o, .es.e e( ,es .e =!(io. 0( 5asa.o 7 .e fe+rero .e 201E, e( 5royecto se *i8o rea(i.a.< (a Aersi"# E.0 a(fa 7E esta+a .is5o#i+(e 5ara so(o !#os .1as .es5!7s, (a#8ar Aarias Aersio#es *asta ((egar a (a -ersin >.; beta F de EuropioEn!ine, e# (a %!e #os e#focare,os e# este art1c!(o.

&as caracter1sticas co,5(etas .e 0!ro5io0#gi#e as1 co,o e( ,a#!a( .e !so y s! .oc!,e#taci"#, 5!e.es o+te#er(o i#gresa#.o e# e( sitio We+ oficia(, www.e!ro5io.org. &a i.ea a*ora, es H5o#er e# ,arc*a e( ,otorI 5ara e#te#.er co,o se 5!e.e .esarro((ar !#a a5(icaci"# i,5(e,e#ta#.o este ,otor.

EuropioEngine ha sido pensado para desarrollar Software de alta envergadura ! no sirve para desarrollar sitios We+ ni +lo$s.

Instalaci'n y Configuraci'n
&o 5ri,ero %!e te#e,os %!e *acer es .escargar (a Aersi"# E.0 +eta 2 .e 0!ro5io0#gi#e<
!$ +*et http:--+++.europio.or*-do+nloads-"uropio"n*ine_0_/_beta_&.tar.*z

U#a Ae8 .escarga.o, Aa,os a .esco,5ri,ir(o<


!$ tar ,xz7f "uropio"n*ine_0_/_beta_&.tar.*z

$*ora, Aa,os a crear (a +ase .e .atos %!e !ti(i8ar #!estra a5(icaci"#<


!$ m=sQl ,u root ,p mys"l# A<"N8" DN8N9N;" europioen*ineL PQ

U#a Ae8 crea.a (a +ase .e .atos, Aa,os a rec!rrir a( CL# de EuropioEn!ine 5ara crear (a ta+(a .e !s!arios y co#fig!rar a( a.,i#istra.or ge#era( .e( siste,a<
!$ cd "uropio"n*ine-core-cli !$ .-europio ,,user,setup europioen*ine

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( E=

user-setup #os 5e.ir i#gresar< No,+re .e !s!ario 5ara e( #!eAo a.,i#istra.or )o#trase:a 5ara ese !s!ario Fi#a(,e#te, 'ySK& #os 5e.ir (a c(aAe .e( !s!ario root

Euro,ioEngine CLI es un con.unto de Shell Scri,ts que ,ueden locali$arse en el directorio Euro,ioEngineIcoreIcli

$*ora, te#.re,os %!e rea(i8ar (as co#fig!racio#es +sicas 5ara %!e #!estra a5(icaci"#, f!#cio#e .e for,a correcta. Para e((o, e( 5ri,er 5aso es co5iar e( arc*iAo settin(s.!h!.dist co,o settin(s.!h! (no recomiendo renombrarlo, si#o co#serAar !#a co5ia .e( arc*iAo .e .istri+!ci"#)<
!$%uro&io%ngine$core$cli$ cd ..-..!$%uro&io%ngine$ cp settin*s.php.dist settin*s.php

$+ri,os e( #!eAo arc*iAo settin(s.!h! y ,o.ifica,os e( Aa(or .e (as sig!ie#tes co#sta#tes<


const D9_T1;8 = "localhost"L const D9_U;"< = "root"L const D9_2NJ" = "europioen*ine"L # ,2u5# escribe la clave del root de My+?L o del usuario My+?L 2ue hayas indicado const D9_!N;; = "p+d"L # ,se >rate de indicar el path absoluto hasta la carpeta EuropioEn ine # @otar 2ue ambas rutas 'E;E@ finaliAar con una & const N!!_D3< = "-home-tu,usuario-"uropio"n*ine-"L const ;8N83A_D3< = "-home-tu,usuario-"uropio"n*ine-static-"L const D"RNU48_C3"V = "-users-user-listar"L

G!ar.a,os (os ca,+ios y so(o #os resta co#fig!rar !# Tirt!a(Most 5ara #!estra a5(icaci"#. Pri,ero, Aa,os a crear !#a car5eta 5ara g!ar.ar (os logs .e $5ac*e 5ara esta a5(icaci"# y %!e #os sea ,!c*o ,s si,5(e co#ocer (os errores %!e, eAe#t!a(,e#te, 5!e.a ge#erar<
!$%uro&io%ngine$ mOdir ..-lo*s

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( E>

9 a*ora s1, crea,os #!estro Tirt!a( Most<


!' cd -etc-apache&-sites,a7ailable # notar 2ue la ruta anterior puede cambiar de acuerdo a cada distribuci!n $etc$a&ache($sites)availa*le' touch europioen*ine.local

$+ri,os e( arc*iAo y co5ia,os e( sig!ie#te c".igo<


WCirtualTost I:'/# ;er7er2ame europioen*ine.local # Modificar tu0usuario por el indicado (o toda la ruta se >n el caso) Document<oot -home-tu,usuario-"uropio"n*ine "rror4o* -home-tu,usuario-lo*s-europio_errors.lo* Austom4o* -home-tu,usuario-lo*s-europio_access.lo* combined WDirector= -# 1ptions ,3ndexes Nllo+17erride Nll W-Director=# W-CirtualTost#

G!ar.a,os e( arc*iAo y *a+i(ita,os e( Tirt!a(Most<


$etc$a&ache($sites)availa*le' a&ensite europioen*ine.local

2ei#icia,os $5ac*e<
$etc$a&ache($sites)availa*le' ser7ice apache& restart

$grega,os e( host<
$etc$a&ache($sites)availa*le' echo "$&@././.$ europioen*ine.local" ## -etc-hosts

0!ro5io0#gi#e (a 5artir .e (a Aersi"# E.0 +eta 1), trae i#cor5ora.o !# ,".!(o .e !s!arios (!# se#ci((o $;' %!e 5o.r1a ree,5(a8arse si as1 se .esea). Si %!ieres, 5!e.es 5ro+ar este ,".!(o i#.ica#.o (a sig!ie#te U2& e# t! #aAega.or We+<
http:--europioen*ine.local-

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 01

6e e#Aiar .irecta,e#te a( for,!(ario 5ara i#iciar sesi"#<

Para modificar los estilos del formulario edita el archi+o Euro,ioEngineIstaticIcssIlogin(css( Sino3 ,ara crear tu ,ro,io tem,late 3 reem,la$a el archi+o Euro,ioEngineIstaticIhtmlIlogin(html Estos archi+os est&ticos3 est&n all 3 solo a modo de e.em,lo a fin de que utili$ar Euro,ioEngine no sea demasiado com,licado(

Creando nuestro ,rimer m'dulo


0# 5ri#ci5io se .e+e te#er 5rese#te %!e 0!ro5io0#gi#e ,a#e=a ar,uitecturas $VC estrictas. 0sto sig#ifica %!e #o e3iste for,a .e 5o.er !ti(i8ar e( ,otor si (a ar%!itect!ra .e t! a5(icaci"# y estr!ct!ra .e .irectorios, #o es (a correcta. P!es e( ruteador .e 0!ro5io0#gi#e te .irigir i#.efecti+(e,e#te a (a Aista 5or .efecto (es5ecifica.a e# (a co#sta#te 1EFA45&678E9 .e( settin(s, c!a#.o #o 5!e.a e#co#trar e( rec!rso so(icita.o. 0#to#ces, to.os (os ,".!(os .e t! a5(icaci"#, .e+e# a(,ace#arse s1 o s1, e# (a car5eta appmodules .e E ro!ioEn(ine. Necesitars c!,5(ir co# !#a ar%!itect!ra 'T) estricta< 1 car5eta 5or ,".!(o )a.a ,".!(o, co# E s!+.irectorios< models, #ie's y controllers

Por e=e,5(o<
XYY appmodules XYY conta*ilidad ZYY controllers ZYY models

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0A

XYY 7ie+s

&a for,a ,s se#ci((a .e crear !# #!eAo ,".!(o, es a traA7s .e( )&- .e 0!ro5io0#gi#e<
!$%uro&io%ngine$core$cli$ .-europio ,c nombredelmodulo

Por e=e,5(o<
!$%uro&io%ngine$core$cli$ .-europio ,c contabilidad

...crear (a estr!ct!ra .e .irectorios ,ostra.a a#terior,e#te.

Un mdulo es aquella porcin de un sistema in#orm"tico que de #orma individual, podr)a considerarse una aplicacin independiente con posibilidad de ser implementada en diversos programas sin requerir modificaciones.
0# 'T), !# ,".!(o (a5(icaci"# i#ter#a .e( 5rogra,a) se e#c!e#tra .iAi.i.o e# E seccio#es< ,o.e(os, Aistas y co#tro(a.ores.

U# ,o.e(o, agr!5ar a%!e((as c(ases (.efi#icio#es .e o+=etos) %!e 5erte#e8ca# a !# ,is,o ti5o. Por e=e,5(o, si se t!Aiese# (os o+=etos Us!ario ,s Us!ario$.,i#istra.or *ere.a.o .e( 5ri,ero, a,+as c(ases se agr!5ar1a# e# e( ,o.e(o 5ri#ci5a( ((a,a.o !s!ario. 0s .ecir, %!e todas las posibles de iniciones para un mismo tipo de ob+eto0 se a!rupan en un modelo. $!#%!e a Aeces, esta reg(a .e+e ser rota a fi# .e sa(Aag!ar.ar (a ,e=or reso(!ci"# .e re%!eri,ie#tos. $ (a Ae8, ca.a ,o.e(o, te#.r s! co#tro(a.or corres5o#.ie#te, s!s GU- y (a ("gica 5ara 5rocesar(a ((a Aista).

EuropioEn!ine !ti(i8a .ic*o 5atr"# ar%!itect"#ico ('T)) .e for,a estricta. Se .e+e ser co#scie#te .e %!e 'T) es !# 5atr"# ar%!itect"#ico y #o, !#o .e .ise:o. 6e#er +ie# 5rese#te esta ra.ica( .ifere#cia, faci(itar (a i,5(e,e#taci"# .e EuropioEn!ine e# t! a5(icaci"#.

2e5(icar .ic*o 5atr"# .e#tro .e ca.a ,".!(o es s!,a,e#te se#ci((o. Se 5!e.e !ti(i8ar EuropioEn!ine CL# 5ara crear los archi-os y estructura de cada modelo0 -ista y controlador<
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0E

!$%uro&io%ngine$core$cli$ .-europio )f contabilidad Ractura

0( )&- .e 0!ro5io0#gi#e 5ro.!cir (os sig!ie#tes arc*iAos<


contabilidad ZYY controllers [ XYY factura.php ZYY models [ XYY factura.php XYY 7ie+s XYY factura.php

Si o+serAa,os e( c".igo .e( ,o.e(o Fact ra, 5o.re,os o+serAar (o sig!ie#te<


class Ractura e+tends ,tandard-*.ect D public function __construct() D $this)#factura_id = 0; # a2u5 se definen el resto de las propiedades E E

Por .efecto, to.o o+=eto *ere.ar .e StandardOb ect %!ie# otorgar a ca.a !#o .e s!s H*i=osI, tres ,7to.os est#.ar, a sa+er<
save() get() destroy() Buarda un nue7o objeto u objeto existente <ecupera un objeto existente si la 3D existe Destru=e un objeto existente si la 3D existe

0s .ecir, %!e co# res5ecto a (os ,o.e(os, (o ,1#i,o #ecesario ser< 1. 6er,i#ar .e .efi#ir s!s 5ro5ie.a.esB 2. 'a5ear e( ,o.e(o y crear s! ta+(a corres5o#.ie#te.

De iniendo las propiedades5


class Ractura e+tends ,tandard-*.ect D public function __construct() D (this,#factura_id = /L (this,#fecha = GGL (this,#numeracion = /L E

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 00

$apeando el modelo y creando su tabla5


!$%uro&io%ngine$core$cli$ m=sQl ,u root ,p m=sQl# use europioen*ineL m=sQl# A<"N8" 8N94" factura ( m=sQl# factura_id 328($$) 218 2U44 NU81_32A<"J"28 !<3JN<\ ]"\, m=sQl# fecha DN8" 218 2U44, m=sQl# numeracion 328(') 218 2U44 m=sQl# ) "2B32"=3nnoD9L m=sQl# PQ

%ontar con un *R; que provea a los modelos una independencia a+soluta con respecto a la +ase de datos para poder manipular un o+(eto persistente, es una decisin acertada puesto que permite poder pro$ramar una aplicacin <==> orientada a o+(etos, manipulando solo o+(etos en ve/ de manipular datos. Esto hace a la aplicacin mucho m"s #"cil de mantener ! evolucionar, !a que nunca estar" atada al diseo de una +ase de datos.
Si# e,+argo, !ti(i8ar !# N2' 5ara ,a5ear !# o+=eto %!e #o es ge#7rico a fi# .e crear s! estr!ct!ra .e .atos, es ta# 5oco 5ro(i=o co,o i#co#Ae#ie#te< 5!es !# N2' #o tie#e (a ca5aci.a. *!,a#a 5ara o5ti,i8ar !#a estr!ct!ra .e .atos sie#.o %!e i#.efecti+(e,e#te se #ecesitar (a i#terAe#ci"# *!,a#a. 9a sea 7sta, 5ara rea(i8ar !# ,a5eo ,a#!a( co,o 5ara 5ara i#.icar .e#tro .e( co#str!ctor (o e# !# ,7to.o .ise:a.o a( fi#) (as caracter1sticas y re%!eri,ie#tos .e ca.a 5ro5ie.a., e#s!cia#.o as1 (os ,o.e(os ,e.ia#te e( agrega.o .e anti&patrones e# (a .efi#ici"# .e atri+!tos.

?os objetos no gen ricos, siempre !E"E# ser mapeados por un humano, para $aranti/ar@ a3 un diseo ptimo de su estructura de datos6 +3 un diseo de o+(etos puros, li+res de anti-patrones.
0# 5ro .e a!to,ati8ar (os 5rocesos y tareas .e 5rogra,aci"#, (a ,ayor1a .e (os N2' y .e (os 'rameworks .is5o#i+(es e# e( ,arca.o, o+(iga# a .efi#ir (as 5ro5ie.a.es .e !# o+=eto, e#s!cia#.o (os ,7to.os co#str!ctores o (as c(ases co# e( agrega.o .e a#tiXE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 08

5atro#es i,5o#ie#.o, .e esta for,a, !# co#ce5to e%!iAoca.o .e (a 5rogra,aci"# orie#ta.a a o+=etos. Pero to.os estos co#ce5tos so# te#i.os e# c!e#ta 5or 0!ro5io0#gi#e.

EuropioEn$ine ha sido conce+ido +a(o la premisa de que a aquellos pro$ramadores que lo implementen, les apasiona pro$ramar ! no +uscan codear menos, sino por el contrario, solo +uscan optimi/ar sus aplicaciones para hacerlas m"s ro+ustas, #"ciles de mantener ! de evolucionar.
Por (o ta#to, !#a Ae8 .is5o#i+(e (a estr!ct!ra .e .atos corres5o#.ie#te, .is5o#.rs .e ,7to.os get(), save() y destroy() *ere.a.os y si# #ecesi.a. .e .efi#ir(os, 5ara to.os t!s o+=etos. Si# e,+argo, c!a#.o se trate .e o+=etos #o ge#7ricos co,o es e( caso .e a%!e((os *ere.a.os .e StandardObject, .e+ers .ise:ar s! estr!ct!ra .e .atos .e for,a ,a#!a(. )o# e( resto .e o+=etos ge#7ricos, 5o.rs !ti(i8ar e( )&- 5ara crear(as ,e.ia#te e( N2'.

Para crear (a estr!ct!ra .e .atos .e o+=etos *ere.a.os .e StandardObject, 5!e.es rec!rrir a( cap%tulo V## .e( (i+ro 7eor%a sint1cticoK!ramatical de Ob+etos, .o#.e e35(ico .eta((a.a,e#te c",o rea(i8ar e( .ise:o .e !#a estr!ct!ra .e .atos 5ara ca.a o+=eto a( %!e se .esee *acer 5ersistir e# e( siste,a. P!e.es o+te#er !#a copia impresa del libro o s! -ersin di!ital !ratuita, i#gresa#.o e#< *tt5<//www.+!+o4.es/(i+ros/2192??

0# e( ,is,o (i+ro, ta,+i7# 5o.rs e#co#trar i#for,aci"# %!e te ay!.e a co,5re#.er ,e=or, (os ob+etos de los ,ue dispone EuropioEn!ine< %tandardO,:ect (o+=eto est#.ar) %eriali;edO,:ect (o+=eto est#.ar Hfree8a.oI) 5o(icalConnector (co#ector ("gico re(acio#a() M lti!lierO,:ect (o+=eto re(acio#a( si,5(e -o ,!(ti5(ica.or-) CollectorO,:ect (o+=eto co(ector)

Com,letando las +istas y los controladores


&os co#tro(a.ores crea.os 5or e( )&- .e 0!ro5io0#gi#e, 5osee# 5re.efi#i.os U rec!rsos est#.ar<

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0K

agregar() editar()

Juestra la BU3 del formulario para crear un nue7o objeto llama directamente a la vista Juestra la BU3 del formulario para modificar un objeto existente Primero recurre al mtodo et() del objeto Lue o# le entre a dicha informaci!n a la vista Buarda un nue7o objeto creado desde a*re*ar o modificado desde editar Modifica las propiedades del objeto (re2uiere 2ue se complete) $ecurre al mtodo save() del objeto $ediri e al usuario al recurso listar Juestra la coleccin de todos los objetos creados $ecurre al objeto enrico *ollector"bject Le entre a la colecci!n de objetos a la vista Destru=e un objeto $ecurre al mtodo destroy() del objeto $ediri e al usuario al recurso listar

guardar()

listar()

eliminar()

0( >#ico rec!rso .e( co#tro(a.or %!e e# 5ri#ci5io, #ecesitar .e i#terAe#ci"# *!,a#a 5ara co,5(etar a%!e((as 5ro5ie.a.es %!e ser# ,o.ifica.as, ser guardar()<
public function *uardar() D (id = (isset((_!1;8FGidGH)) M (_!1;8FGidGH : /L (this,#model,#factura_id = (idL # se deben modificar todas las propiedades del modelo (this,#model,#sa7e()L T88!Telper::*o("-contabilidad-factura-listar")L E

U# e=e,5(o, 5o.r1a ser e( sig!ie#te<


public function *uardar() D (id = (isset((_!1;8FGidGH)) M (_!1;8FGidGH : /L (this,#model,#factura_id = (idL $this)#model)#fecha = $_/-,01'fecha'2; $this)#model)#numeracion = $_/-,01'numeracion'2; (this,#model,#sa7e()L T88!Telper::*o("-contabilidad-factura-listar")L E

Por fa+or3 notar que cualquier saneamiento o acci'n ,ara asegurar los datos reci-idos desde un formulario o 2RI3 de-er& ser reali$a en el controlador3 ya sea de forma directa o mediante un )el,er(

&os ,7to.os .e (a Aista, *a# si.o .efi#i.os 5or .efecto ,e.ia#te e( )&- .e 0!ro5io0#gi#e<

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0L

class RacturaCie+ D public function a*re*ar() D (str = file_*et_contents( ,03045_647 8 9html$conta*ilidad$factura_agregar8html9)L print 8emplate(GN*re*ar RacturaG),#sho+((str)L E public function editar((obj=arra=()) D (str = file_*et_contents( ,03045_647 8 9html$conta*ilidad$factura_editar8html9)L (html = 8emplate((str),#render((obj)L print 8emplate(G"ditar RacturaG),#sho+((html)L E public function listar((coleccion=arra=()) D (str = file_*et_contents( ,03045_647 8 9html$conta*ilidad$factura_listar8html9)L (html = 8emplate((str),#render_re*ex(G43;8ND1G, (coleccion)L print 8emplate(G4istado de RacturaG),#sho+((html)L E E

Por .efecto, 0!ro5io0#gi#e *a .efi#i.o E r!tas 5ara > archi-os H7$L ,ue deben ser creados. Po.rs crear estos arc*iAos .irecta,e#te e# (a r!ta s!geri.a 5or EuropioEn!ine o ,o.ificar .ic*as r!tas y crear (os arc*iAos e# !# .irectorio .ifere#te.

U#a Ae8 co,5(eta.os (os arc*iAos M6'&, ya te#.rs t! a5(icaci"# (ista 5ara ser 5ro+a.a<
http:--europioen*ine.local-contabilidad-factura-listar

)a-ilitando la API
0s 5osi+(e *a+i(itar !# serAicio we+ RES7@&SO3 5ara (os rec!rsos 5>+(icos .e c!a(%!iera .e t!s ,o.e(os. Ma+i(itare,os e( rec!rso (istar 5ara e( ,o.e(o Fact!ra. $+re e( arc*iAo ..E ro!ioEn(ine.settin(s.!h! y +!sca e( array <allo'ed6reso rces. $grega !#a c(aAe ((a,a.a fact ra c!yo Aa(or sea !# array co# e( e(e,e#to listar<
(allo+ed_resources = arra=( 9factura9 =# array('listar'), )L

ara ha+ilitar recursos p+licos en la A 7, solo de+es a$re$ar al arra!, una clave con el nom+re del modelo 2en minsculas3 ! el valor asociado, ser" un arra! simple, donde
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0C

cada elemento de Aste, ser" el nom+re de los recursos p+licos que se deseen ha+ilitar.
U#a Ae8 *a+i(ita.o e( rec!rso, se .e+er i#.icar a( co#tro(a.or .e .ic*o ca,+io. 6o.o co#tro(a.or *ere.a.o .e Controller, 5osee .os 5ro5ie.a.es< <a!i y <a!idata. &a 5ri,era retor#a &r e si e( rec!rso est sie#.o ((a,a.o 5or (a $P- y (a seg!#.a, co# Aa(or N455 5or .efecto, a(,ace#ar e( o (os o+=etos so(icita.os 5ara ser co.ifica.os e# for,ato LSNN y retor#a.os 5or e( serAi.or a( c(ie#te .e (a $P-.

U# rec!rso co# $P- *a+i(ita.a, a#tes .e e#tregar (os .atos a (a Aista .e+er Aerificar #o estar sie#.o ((a,a.o 5or (a $P-. Si #o es ((a,a.o 5or (a $P-, e#trega (os .atos a (a Aista. )aso co#trario, se (i,ita a a(,ace#ar .ic*os .atos e# (a 5ro5ie.a. <a!idata<
public function listar() D (collection = Aollector1bject::*et(GRacturaG)L (list = (collection,#collectionL if(:$this)#a&i) { $this)#vie;)#listar($list); } else { $this)#a&idata = $list; } E

)o# so(o ese 5e%!e:o ca,+io, tu 2P# pCblica ya se encuentra habilitada y dispones de un Web Service RES7. &a U2& .e t! $P- 5>+(ica sie,5re ser (a ,is,a %!e (a .e t! rec!rso, 5ero a#te5o#ie#.o a!i. a( #o,+re .e( ,".!(o<
http:--europioen*ine.local-a&i$contabilidad-factura-listar

Euro,ioEngine ,ara )ac*ers


0#te#.er e( f!#cio#a,ie#to i#ter#o .e 0!ro5io0#gi#e ay!.ar a rea(i8ar (as ,o.ificacio#es #ecesarias a( #>c(eo .e( ,otor, a.a5tar(o a re%!eri,ie#tos es5ec1ficos o si,5(e,e#te, a o5ti,i8ar(o, ,e=orar(o y/o a *acer(o ,s ro+!sto y 5ote#te.

Sobre el proceso de arran,ue del motor5 1. &a a5(icaci"# arra#ca co# (a 5etici"# M66P .e( !s!ario, esta#.o e# ,a#os .e $5ac*e a traA7s .e( arc*iAo .htaccess (oca(i8a.o e# (a ra18.

2. 6o.as (as 5eticio#es se reci+e# e# a!!6en(ine.!h! (e3ce5to a%!e((as a arc*iAos estticos .e#tro .e( .irectorio static) %!ie# rea(i8a (o sig!ie#te< i,5orta (os arc*iAos 5ri#ci5a(es .e( #>c(eo (a%!e((os %!e agr!5a# (as
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0=

accio#es 5ara ((eAar a ca+o !#a .eter,i#a.a tarea) e#cie#.e e( ,otor 'T) (FrontController::start)*)

E. K!ie# rea(,e#te *ar Harra#carI a( ,otor 'T), es e( FrontController (core.m#c6en(ine.front6controller.!h!) %!e rec!rrir a A!!licationHandler (m#c6en(ine.a!!handler.!h!) 5ara a#a(i8ar (a U2-B

@. A!!licationHandler o+tie#e e( #o,+re .e( ,".!(o, .e( ,o.e(o y .e( rec!rsoB a.e,s, co,5r!e+a si .ic*o rec!rso est sie#.o so(icita.o o #o 5or (a $P- y si se *a 5asa.o !# arg!,e#to e# (a U2-, (o re(eAa. 6o.os estos .atos so# rec!5era.os 5or FrontController, %!ie# se e#cargar .e s!,i#istrar .ic*a i#for,aci"# a( co#tro(a.or 5ro5ietario .e( rec!rso so(icita.o.

U. $%!1, co,ie#8a a act!ar e( co#tro(a.or .e !s!ario (es .ecir, e( co#tro(a.or crea.o 5or e( !s!ario 5ara !# ,o.e(o .eter,i#a.o). ic*o co#tro(a.or -%!e so(o .efi#e rec!rsos si *ere.a .e Controller (m#c6en(ine.controller.!h!) -caso co#trario .e+er .efi#ir !# co#str!ctor sig!ie#.o co,o ,o.e(o e( co#str!ctor .e Controller) se actiAa .e for,a a!to,tica a traA7s .e( co#str!ctor *ere.a.o .e 7ste.

P. 0( co#str!ctor *ere.a.o .e Controller, Aerifica %!e e( rec!rso e3ista y 5!e.a ser ((a,a.o (caso co#trario, re.irige a (a Aista 5or .efecto).

7. &!ego, rea(i8a 5reAia,e#te !#a i#sta#cia .e( ,o.e(o y otra .e (a Aista y rea(i8a !#a ((a,a.a .e retor#o a( rec!rso so(icita.o. $ 5artir .e a((1, i#terAie#e e( rec!rso .e !s!ario (es .ecir, ,7to.o .efi#i.o 5or e( !s!ario e# e( co#tro(a.or .e !s!ario).

Sobre la automati(acin de modelos y los actores de herencia real5 &a a!to,ati8aci"# .e ,o.e(os es e# rea(i.a. !#a re(aci"# .e *ere#cia rea(< to.os (os o+=etos, sea# c!(es sea#, so# s!+ti5os .e !# o+=eto. 0!ro5io0#gi#e #o co#si.era e( co#ce5to .e H,o.e(o ge#7ricoI, H'o.e(I o H ata'o.e(I, si#o %!e c!,5(e co# !#a orie#taci"# a o+=etos a+so(!ta y s!,a,e#te estricta ya %!e #o a#a(i8a ,o.e(os orie#ta.os a .atos, si#o o+=etos re(acio#a.os ,e.ia#te !# >#ico co#te#e.or. U# o+=eto a#tes .e ser HN+=ectoVI es 5ri,era,e#te HN+=etoI. 9 7ste, se e#c!e#tra re5rese#ta.o 5or %tandardO,:ect (core.orm6en(ine.o,:ects.standardo,:ect.!h!).

%tandardO,:ect -co,o ta(- es a+stracto (so(o 5!e.e *ere.arse .e 7( ya %!e e# s1 ,is,o, #o c!e#ta co# !#a .efi#ici"# 5recisa. No es ,s %!e (a a+stracci"# .e !# o+=eto c!a(%!iera).
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 0>

efi#e (os E ,7to.os est#.ar sa#e)*, (et)* y destro3)*. &os ,is,os, !ti(i8a# (os ,7to.os )2U .e !# N2' 5ara co,!#icarse co# (a +ase .e .atos.

0( N2' (orm6en(ine.orm.orm.!h!) se ay!.a .e !# (elper (orm6en(ine.orm.hel!er.!h!) 5ara crear (os )ueries y o+te#er otros .atos #ecesarios 5ara e=ec!tar (as co#s!(tas. 0( (elper o+tie#e to.a (a i#for,aci"# #ecesaria 5ara (a creaci"# .e )ueries y co#fig!raci"# .e .atos, .e( a#(isis rea(i8a.o 5or e( ORMHandler (orm6en(ine.orm.handler.!h!). Fi#a(,e#te, e( N2' se co,!#icar co# (a +ase .e .atos ,e.ia#te !#a ca5a .e a+stracci"# %!e !ti(i8a (a $P- 'ySK&i ( orm6en(ine.m3s=lila3er.!h!) e35(ica.a e# e( e=e,5(ar Nro. 0 .e este ,is,o *aga+ine.

$.e,s .e %tandardO,:ect se 5roAee otra a+stracci"#< %eriali;edO,:ect (.e #iAe( e35eri,e#ta(). S! f!#cio#a,ie#to es e3acto a( .e %tandardO,:ect 5ero co# 7(, se +!sca Hco#ge(arI !# o+=eto *aci7#.o(o i#,!ta+(e fre#te a ca,+ios e# (as re(acio#es .e .e5e#.e#cia. 0sto sig#ifica %!e a nivel ob,eto es relacional pero a nivel datos no lo es .

%eriali;edO,:ect (orm6en(ine.o,:ects.seriali;edo,:ect.!h!) tie#e s! 5ro5io N2' (orm6en(ine.sorm.sorm.!h!) e( c!a( tra+a=a .e for,a si,i(ar a( N2' .e %tandrdO,:ect 5ero 5resci#.e .e !# ,a#e=a.or ( (andler) ya %!e .ic*os o+=etos #o re%!iere# .e !# a#(isis, si#o %!e so# .irecta,e#te co#ge(a.os y a(,ace#a.os.

Ntros tres o+=etos ge#7ricos (#o a+stractos) se e#c!e#tra# .is5o#i+(es< CollectorO,:ect (orm6en(ine.o,:ects.collectoro,:ect.!h!)< !# singleton co(ector %!e .e for,a iteratiAa rec!5era to.os (os o+=etos crea.os 5erte#ecie#tes a !# ,is,o co#te#e.or. No re%!iere .e !# N2' y so(o se ay!.a .e !# (elper .efi#i.o e# e( ,is,o arc*iAo.

M lti!lierO,:ect (orm6en(ine.o,:ects.m lti!liero,:ect.!h!)< se e#carga .e crear re(acio#es e#tre - ob,eto ./0 y 1 ob,etos .20 id3nticos (,is,a - ). 6a,+i7# c!e#ta co# s! 5ro5io N2' ( orm6en(ine.morm.morm.!h!) %!ie# sig!e (os ,is,os 5rocesos %!e e( N2' .e %tandardO,:ect.

5o(icalConnector (orm6en(ine.o,:ects.lo(icalconector.!h!)< !# co#ector ("gico re(acio#a( %!e se e#carga .e crear re(acio#es e#tre - ob,eto ./0 y 1 ob,etos .20 de identidad 4nica (.isti#ta - ). 6a,+i7# c!e#ta co# s! 5ro5io N2' (orm6en(ine.corm.corm.!h!) %!ie# sig!e (os ,is,os 5rocesos %!e (os a#teriores.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 81

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

8A
MA/2AL #E PERL

$anual de Perl <Parte ##=

En el art%culo anterior -imos una introduccin a Perl. 2hora pro undi(aremos un poco m1s con los operadores y las estructuras de control.

Escrito por: $ar%a &os' $ontes D%a( ($rc*era & Progra,a.ora)


0st!.ia#te .e Gra.o -#ge#ier1a e# 6ec#o(og1a .e (a i#for,aci"#. 67c#ico e# i#for,tica .e gesti"#. 'o#itora FPN. oce#te .e 5rogra,aci"# Pyt*o# y Scratc* 5ara #i:os .e P-12 a:os. $ctiAista .e( software (i+re y c!(t!ra (i+re.
4ebs5 ;(og< *tt5<//arc*#i#fa.+(ogs5ot.co,.es/ Redes sociales5 6witter< 6$$ontesDia(

s i,5orta#te %!e te#ga,os i#sta(a.o e( i#t7r5rete %!e #or,a(,e#te se i#c(!ye e# to.as (as .istri+!cio#es y se i#sta(a 5or .efecto, 5ero si 5or a(g># ,otiAo #o (o te#e,os i#sta(a.o 5o.e,os e#co#trar to.as (as Aersio#es .is5o#i+(es 5ara to.os (os siste,as e# www.c5a#.org10 0# #!estro 5ri,er 5rogra,a .e HMo(a ,!#.oI, 5o.e,os co,5ro+ar %!e !ti(i8a,os 5!#to y co,a (S), 5ara se5arar (as i#str!ccio#es. 9, si %!ere,os rea(i8ar co,e#tarios e# #!estro 5rogra,a, !ti(i8are,os (T).
#Escribimos en la pantalla print "Tola mundo"L

%i,os de 5,eradores
Per( so5orta !#a gra# ca#ti.a. .e o5era.ores, (a ,ayor1a .e e((os *ere.a.os .e( (e#g!a=e ) y co#serAa# e( ,is,o !so %!e e# e( resto .e (os (e#g!a=es.

10 *tt5<//www.c5a#.org

Operadores 2ritm'ticos > " "" . . J K >> S!,a 2esta '!(ti5(icaci"# 035o#e#te iAisi"# )o#cate#aci"# .e .os o ,s ca.e#as 'o.!(o o 2esi.!o 2e5etici"# .e caracteres $!toi#cre,e#to $!to.ecre,e#to <n m ? <n m > <n m@A <n m ? <n m - <n m@A <n m ? <n m " BA <n m ? BA !rint CD ele#ado a <n m es :C+ )D""<n m*+ C-nCA <n m ? <n m . EA <cad@ ? C5a f nciFn cho! )*CA <cadD ? Cnos sir#e !ara = itarCA <cadG ? Cel Hltimo carIcter de na cadenaCA <frase ? <cad@ . C C . <cadD . C C . <cadGA <n m ? <n m@ J DA !rint CLC K BA M im!rime: LLLLL <i?0A <:?0A !rint <i>>A Mim!rime 0 3 s ma @ a <i !rint >><:A Ms ma @ a <: e im!rime @ <i?BA <:?BA !rint <i--A Mim!rime B 3 resta @ a <i !rint --<:A Mresta @ a <: e im!rime 4

--

Operadores relacionales 3um'rico -g!a(.a. ifere#cia -#ferior S!5erior -#ferior o ig!a( S!5erior o ig!a( ?? N? O P O? ?P Cadena de caracteres e= ne lt (t le (e

Operador cmp Se !ti(i8a 5ara co,5arar ca.e#as .e caracteres< 2etor#a 0 si (as ca.e#as so# ig!a(esB 1 si (a ca.e#a .e (a .erec*a se e#c!e#tra a( co,ie#8o .e (a .e (a i8%!ier.aB -1 e# e( caso co#trario<
G!erlG cmp G!erlG # devuelve B G!erl me encanta G cmp G!erlG # devuelve C GJe encanta !erlG cmp G!erlG # devuelve 0C G!erlG cmp G!=thonG # devuelve 0C

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8E

Operador !" -#.ica (a 5rese#cia .e !# 5atr"# .e co,5araci"# .e#tro .e !#a Aaria+(e %!e co#tie#e !#a ca.e#a .e caracteres<
if ((asi*naturas =^-!ro*ramacin-) D_E #verifica si 3 Pro ramaci!n3 est- dentro de /asi naturas

Operador#$" Terifica (a #o e3iste#cia .e( 5atr"# .e +>s%!e.a e# !#a ca.e#a .e caracteres<


if ((asi*naturas `^-Jedicina-) D _E #verifica 2ue 3Medicina3 no est- dentro de /asi naturas

Operadores l!icos QQ RR N and or not <n m QQ <n m@ <cad RR <cad@ N<cad

0stos o5era.ores so# ,!y !sa.os a( ,o,e#to .e eAa(!ar accio#es 5ara co#tro(ar e( f(!=o .e #!estro 5rogra,a, 5or e=e,5(o<
open(R34","Aurriculum.txt") or die("2o se puedo abrir el documento")L

6a,+i7# se !sa# ,!c*o 5ara co,5ro+ar Aaria+(es<


if(`(7ariable)D print Gtienes Que poner un 7alorGL E

Operadores de asi!nacin E9presin ? >? -? "? ""? .? <n m@?<n mD?<n mGA <n m@>?GA <n m@-?GA <n m@"?DA <n m@""?GA <n m@.?G><n mDA E,ui-alencia <n m@?<n mDA <n mD?<n mGA <n m@?<n m@ >GA <n m@?<n m@ -GA <n m@?<n m@ "DA <n m@?<n m@""GA <n m@?<n m@.)G><n mD*

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 80

J? .? PP? OO? Q? T? R?

<n m@J?EA <cad.?SholaSA <n m@PP?@A <n m@OO?<n mDA <n m@Q?)<n mG>?G*A <n m@T?DA <n m@R?<n mGA

<n m@?<n m@ JEA <cad?<cad.SholaSA <n m@?<n m@PP@A <n m@?<n m@OO<n mDA <n mG?<n mG>GA <n m@?<n m@ Q <n mGA <n m@?<n m@TDA <n m@?<n m@ R <n mGA

Operadores a ni-el de bits Q R T U OO PP $#. +it a +it e#tre .os o5era#.os Nr +it a +it e#tre .os o5era#.os Nr e3c(!siAo +it a +it e#tre (os .os o5era#.os )o,5(e,e#to a !#o .e +its.-#Aierte to.os (os +its .e( o5era#.o es5(a8a,ie#to a (a i8%!ier.a .e( 5ri,er o5era#.o ta#tas Aeces co,o i#.i%!e e( seg!#.o es5(a8a,ie#to a (a .erec*a .e( 5ri,er o5era#.o ta#tas Aeces co,o i#.i%!e e( seg!#.o

Estructuras de control(
Para 5o.er co#tro(ar e( .esarro((o .e !# 5rogra,a #ecesita,os i#str!ccio#es .e co#tro(. Ystas 5er,ite# .eci.ir si se e=ec!ta o #o !# +(o%!e .e i#str!ccio#es, si se *ace .e for,a re5etitiAa *asta %!e se .7 !#a .eter,i#a.a co#.ici"#. is5o#e,os .e (as sig!ie#tes<

i y unless5
if (condicin$) D bloQue$L

E elsif (condicin&) D bloQue&L E else D bloQue0L E

Si se c!,5(e co#.ici"#1, e=ec!ta +(o%!e1, si#o, se eAa(>a (a co#.ici"#2 y, si es cierta, se e=ec!ta +(o%!e2. 0# caso co#trario co#trario, se e=ec!ta +(o%!eE. )",o 5o.e,os Aer, si #ecesita,os e#(a8ar Aarios if, 5o.e,os !ti(i8ar e(sif.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 88

unless (condicin$) D bloQue$L E elsif (condicin&) D bloQue&L E else D bloQue0L E

Si co#.ici"#1 es fa(sa, se e=ec!ta +(o%!e1. 0( resto so# e%!iAa(e#tes a s! sig#ifica.o co# if.

Un ejemplo simple: -#tro.!ci,os !# #>,ero< Si es ,e#or %!e 0 ,!estra HZ0IB si es ,e#or %!e U ,!estra HZUIB si es ,ayor o ig!a( a U ,!estra H[\UI<

print "3ntroduce un namero:Pn"L m= (numero = W;8D32#L print "Utilizando ifPn"L if ( (numero W= / ) D print "W=/Pn"L E elsif ( (numero W : ) D print "W:Pn"L E else D print "=#:Pn"L E print "Utilizando unless Pn"L unless ( (numero # / ) D print "W=/Pn"L E else D unless ((numero W:) D print "=#:Pn"L E else D print "W:Pn"L E E print "Nbadiendo un if al final. ;i es `=/, muestra el mensajePn"L print ""s distinto de /Pn" if ((numero`=/)L

Nhile y until5

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8K

+hile (condicin) D bloQueL E until (condicin) D bloQueL E

'e.ia#te estas i#str!ccio#es 5o.e,os e=ec!tar !# +(o%!e ,ie#tras se c!,5(a (a co#.ici"# (i#str!cci"# w*i(e) o *asta %!e se c!,5(a (i#str!cci"# !#ti().

'o.ifica,os e( e=e,5(o a#terior, 5er,itie#.o i#tro.!cir #>,eros *asta %!e se i#tro.!8ca 0<
m= (numero = $L print ""mpezamos con +hile:Pn"L +hile ((numero `= G/G ) D print "3ntroduce un namero:Pn"L (numero = W;8D32#L if ( (numero W= / ) D print "W=/Pn"L E elsif ( (numero W : ) D print "W:Pn"L E else D print "=#:Pn"L E E (numero=$L print ""mpezamos con untilPn"L until ((numero == / ) D print "3ntroduce un namero:Pn"L (numero = W;8D32#L if ( (numero W= / ) D print "W=/Pn"L E elsif ( (numero W : ) D print "W:Pn"L E else D print "=#:Pn"L E E

or5
for (inicioLcondicinLfin) D bloQueL

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8L

0# este +!c(e, inicio ser (a e35resi"# .e i#icia(i8aci"#, condici5n %!e .e+e c!,5(irse 5ara %!e e=ec!te e( +(o%!e y fin, (a e35resi"# %!e act!a(i8a (a Aaria+(e .e co#tro(.

Por e=e,5(o, !# 5rogra,a %!e escri+e (os #>,eros 5ares .e( 0 a( 10<

print "4os pares del / al $/:Pn"L for ((i=/L (iW$$L (i=(i+&)D print "(iPn"L E

oreach5
foreach (7ariable (clista) D bloQueL E

<#aria,le Aa to,a#.o, !#o a !#o, to.os (os Aa(ores .e Vlista y e=ec!ta blo)ue e# ca.a asig#aci"#. 0s e%!iAa(e#te a for. )!a#.o %!ere,os recorrer (istas, es ,s e(ega#te !ti(i8ar foreach.

U# e=e,5(o .e !so .e foreac*<


m= csemana = ("lunes","martes","miKrcoles","jue7es","7iernes","s bado","domin*o")L print "Pn<ecorremos la lista:Pn"L foreach (nombre (csemana) D print "(nombre "L foreach ((nombre) D -lunes- 66 do D print "l Pn"LlastLEL -martes- 66 do D print "m Pn" LlastLEL -miKrcoles- 66 do D print "x Pn"LlastLEL -jue7es- 66 do D print "j Pn"LlastLEL -7iernes- 66 do D print "7 Pn"LlastLEL -s bado- 66 do D print "s Pn"LlastLEL -domin*o- 66 do D print "d Pn"LlastLEL E E

0( seg!#.o foreach *ace (a f!#ci"# .e !# if a#i.a.o.


XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8C

!oto5
label: ... *oto labelL

0sta i#str!cci"# ro,5e (a sec!e#cia .e (a e=ec!ci"# y sa(ta *asta (a eti%!eta label. &as eti%!etas se .efi#e# co# !# #o,+re, seg!i.o .e .os 5!#tos (<). No es reco,e#.a+(e (a !ti(i8aci"# .e estos sa(tos. last0 ne9t5 0stas i#str!ccio#es se !ti(i8a# 5ara co#tro(ar (a e=ec!ci"# .e +!c(es. &a i#str!cci"# last ter,i#a (a e=ec!ci"# .e( +!c(e. &a i#str!cci"# neKt sa(ta e( cic(o act!a(. 0=e,5(o< e (os 10 5ri,eros #>,eros, i,5ri,ir (os 5ri,os, si# i,5ri,ir e( U<

for (m= (i=$L (iW=$/L (i++) D m= (primo = $L next if ((i==:)L for (m= (j=&L (jW(iL(j++) D if ( (i d (j == /) D (primo=/L lastL E E print "(i es primo Pn" if ((primo)L E

Enlaces de inter's5 *tt5<//www.5er(.co,/ *tt5<//www.c5a#.org/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8=

Para poder desarrollar aplicaciones y sitios Neb con H7$LU es importante saber acceder y actuali(ar el contenido0 la estructura y el estilo de documentos <continuacin del art%culo en la edicin anterior=

Escrito por: Ser!io #n ante $ontero (-#ge#iero .e Software)


-#ge#iero -#for,tico co# est!.ios .e $aster de Direccin Estrat'!ica en 7#. -#ge#iero .e software e# 7aller 7echnolo!ies0 actiAista, co#tri+!i.or y co#s!(tor .e 5royectos ALOSS, ,ie,+ro .e 2PESOL y escritor .e art1c!(os y (i+ros t7c#icos .e 5rogra,aci"#.
Per iles5 *tt5<//a+o!t.,e/#eosergio 6witter< 6neoser!io

'

!y a5arte .e( tra+a=o %!e se 5!e.e *acer ya co# (os #o.os e3iste#tes, as1 co,o co# s!s 5ro5ie.a.es y ,7to.os, ta,+i7# 5!e.e# crearse #!eAos #o.os e i#tro.!cir(os e# c!a(%!ier 5arte .e( .oc!,e#to, se 5!e.e# re,oAer, c(o#ar y ree,5(a8ar. Tea,os %!e *acer e# ca.a !#o .e (os casos.

Recuerda que ,ara ,ro-ar c'digo ,uedes usar htt,<II.sfiddle(net3 htt,<II.s-in(com o incluso htt,<IIda--let(comI(

create%lement() Per,ite (a creaci"# .e !# #!eAo e(e,e#to co# e( #o,+re es5ec1fico .e eti%!eta<


&& Para crear un elemento de p-rrafo parrafo = document.create"lement(GpG)L && Para crear un elemento de divisi!n di7ision = document.create"lement(Gdi7G)L

createElement? @ solo ,uede ser e.ecutado con document3 y de-e ser almacenado en una +aria-le3 ,ara
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( 8>

MA/2AL #E #5M

Conociendo a DO$5 Parte ##

,osteriormente ser insertado en el documento(

create&e't(ode() Per,ite (a creaci"# .e !# #!eAo #o.o .e( ti5o te3toB se (e 5asa e( te3to co,o arg!,e#to<
texto = document.create8ext2ode(eTacOers and De7elopers Ja*azinef)L

0sta f!#ci"# #o ace5ta te3to e# for,ato M6'&, so(a,e#te se 5!e.e !sar te3to 5(a#o.

append)hild() U#a Ae8 %!e *e,os crea.o e(e,e#tos, .e+e,os i#sertar(os e# e( .oc!,e#to, 5ara e((o 5o.e,os !sar a!!endChild)*, e( c!( i#gresa !# *i=o a( fi#a( .e (a (ista .e *i=os .e !# #o.o. $%!1 !# e=e,5(o .e co,o !sar(o<
W`D1A8\!" html# Whtml# Whead# Wtitle#"jemploW-title# Wscript t=pe="text-ja7ascript"# function probando()D parrafo = document.create"lement(GpG)L texto = document.create8ext2ode(GTacOers and De7elopersG)L parrafo.appendAhild(texto)L document.*et"lement9=3d(GsaludoG).a&&end5hild(&arrafo); EL W-script# W-head# Wbod=# Wsection id="saludo"# Wp#"ste es un ejemploW-p# W-section# Wh$ onAlicO=Gprobando()G#Alic aQug para probar. ;g, dale clic aunQue no parezca un enlaceW-h$# W-bod=# W-html#

insert*e+ore() 0s si,i(ar a a!!endChild)* e3ce5to 5or e( or.e# .e i#serci"# ya %!e co# esta f!#ci"# se (e 5!e.e es5ecificar e( e(e,e#to %!e se 5osicio#ar (!ego .e( #!eAo e(e,e#to, es .ecir a#tes .e( #o.o es5ecifica.o<
W`D1A8\!" html# Whtml#

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( K1

Whead# Wtitle#"jemploW-title# Wscript t=pe="text-ja7ascript"# function probando()D parrafo = document.create"lement(GpG)L texto = document.create8ext2ode(GTacOers and De7elopersG)L parrafo.appendAhild(texto)L anterior = document.*et"lement9=3d(GprimerG)L document.*et"lement9=3d(GsaludoG).insert<efore(&arrafo, anterior)L EL W-script# W-head# Wbod=# Wsection id="saludo"# Wp id="primer"#"ste es un ejemploW-p# W-section# Wh$ onAlicO=Gprobando()G#Alic aQug para probar. ;g, dale clic aunQue no parezca un enlaceW-h$# W-bod=# W-html#

clone(ode() Per,ite co5iar !# #o.o .e .os ,a#eras %!e 5o.r1a,os ((a,ar 5arcia( y co,5(eta (i#c(!ye#.o a s!s res5ectiAos *i=os)<
&&copia parcial# 2uiere decir 2ue solo copiara la divisi!n sin hijos di7ision = document.*et"lement9=3d(Gdi7ision$G).clone2ode(false)L &&copia completa# copiara la division incluyendo todos sus hijos di7ision = document.*et"lement9=3d(Gdi7ision$G).clone2ode(true)L

e ,a#era 5re.eter,i#a.a (a f!#ci"# *ace co5ias 5arcia(es y !#a Ae8 co5ia.os (os e(e,e#tos ya se 5!e.e# i#sertar e# e( (!gar .o#.e %!era,os.

remo,e)hild() Per,ite re,oAer #o.os *i=os<


W`D1A8\!" html# Whtml# Whead# Wtitle#"jemploW-title# Wscript t=pe="text-ja7ascript"# function probando()D primer = document.*et"lement9=3d(GprimerG)L document.*et"lement9=3d(GsaludoG).remove5hild(&rimer)L EL W-script# W-head# Wbod=# Wsection id="saludo"# Wp id="primer"#"ste es un ejemploW-p# Wp id="se*undo"#"ste es un se*undo parrafoW-p#

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( KA

W-section# Wh$ onAlicO=Gprobando()G#Alic aQug para probar. ;g, dale clic aunQue no parezca un enlaceW-h$# W-bod=# W-html#

$( e=ec!tar e( e=e,5(o, e( 5rrafo H0ste es !# e=e,5(oI .e+e .esa5arecer.

replace)hild() 2ee,5(a8a !# #o.o a#tig!o 5or !#o #!eAo<


W`D1A8\!" html# Whtml# Whead# Wtitle#"jemploW-title# Wscript t=pe="text-ja7ascript"# function probando()D texto = document.create8ext2ode(GTacOers and De7elopersG)L reemplazo = document.create"lement(GpG).appendAhild(texto)L primer = document.*et"lement9=3d(GprimerG)L seccion = document.*et"lement9=3d(GsaludoG)L seccion.re&lace5hild(reem&la=o, &rimer)L EL W-script# W-head# Wbod=# Wsection id="saludo"# Wp id="primer"#"ste es un ejemploW-p# Wp id="se*undo"#"ste es un se*undo parrafoW-p# W-section# Wh$ onAlicO=Gprobando()G#Alic aQug para probar. ;g, dale clic aunQue no parezca un enlaceW-h$# W-bod=# W-html#

9 5or >(ti,o a%!1 !# e=e,5(o co,+i#a#.o a(g!#os ,7to.os a5re#.i.os a#terior,e#te<


W`D1A8\!" html# Whtml# Whead# Wtitle#Areando contenidoW-title# Wscript t=pe="text-ja7ascript"# function creando()D &&creando el contenido titulo = document.create8ext2ode(G8ituloG)L texto = document.create8ext2ode(GTacOers and De7elopersG)L autor = document.create8ext2ode(Gpor: ;er*io 3nfanteG)L &&creando los elementos y ponindoles el contenido titulo_html = document.create"lement(Gh$G)L titulo_html.appendAhild(titulo)L texto_html = document.create"lement(GpG)L

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( KE

texto_html.appendAhild(texto)L autor_html = document.create"lement(Gh&G)L autor_html.appendAhild(autor)L &&insertando los elementos saludo = document.*et"lement9=3d(GsaludoG)L saludo.appendAhild(titulo_html)L saludo.appendAhild(autor_html)L saludo.appendAhild(texto_html)L EL W-script# W-head# Wbod=# Wsection id="saludo"# W-section# Wh$ onAlicO=Gcreando()G#Alic aQug para probar. ;g, dale clic aunQue no parezca un enlaceW-h$# W-bod=# W-html#

)o,o *a+r# 5o.i.o .arse c!e#ta, a( (eer e# estas .os 5artes .e( art1c!(o 6Conociendo a "7*8, es .e ,!c*a ay!.a e#te#.er co,o f!#cio#a e( N' 5ara ,a#i5!(ar s! co,5orta,ie#to y as1 ser e3itosos a( *acer .esarro((o we+. U#a co,5(eta .escri5ci"# .e( N' 5!e.e ser reAisa.a e# e( 'o8i((a eAe(o5er Networ411.

11 *tt5s<//.eAe(o5er.,o8i((a.org/e#-US/.ocs/ N'

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( K0

)ac*ers & #e+elo,ers Maga$ine U AVo 13 /Pmero 8

K8
MA/2AL #E ARC) LI/2Z

P1sate a /3?@Linu9 con 2rch5 Pacman0 el !estor de pa,uetes

2l!o ,ue debemos conocer de una distribucin /3?@Linu9 es cmo se !estiona la pa,ueter%a. QCmo podemos instalar0 desinstalar o -er in ormacin sobre los pa,uetes instaladosR

Escrito por: $ar%a &os' $ontes D%a( ($rc*era & Progra,a.ora)


0st!.ia#te .e Gra.o -#ge#ier1a e# 6ec#o(og1a .e (a i#for,aci"#. 67c#ico e# i#for,tica .e gesti"#. 'o#itora FPN. oce#te .e 5rogra,aci"# Pyt*o# y Scratc* 5ara #i:os .e P-12 a:os. $ctiAista .e( software (i+re y c!(t!ra (i+re.
4ebs5 ;(og< *tt5<//arc*#i#fa.+(ogs5ot.co,.es/ Redes sociales5 6witter< 6$$ontesDia(

ste gestor .e 5a%!etes est escrito e# ). Uti(i8a arc*iAos e,5a%!eta.os e# tar y co,5ri,i.os e# g8i5 o 38 5ara to.os (os 5a%!etes. )ca.a !#o co#tie#e (os +i#arios co,5i(a.os. &os 5a%!etes so# .escarga.os a traA7s .e F6P, M66P o arc*iAos (oca(es, .e5e#.ie#.o .e c",o est7 co#fig!ra.o ca.a re5ositorio. P!e.e act!a(i8ar e( siste,a ,e.ia#te !# so(o co,a#.o. No s"(o es !ti(i8a.o 5or $rc* (a!#%!e #aci" 5ara ser e( gestor .e esta .istri+!ci"#), ta,+i7# se !ti(i8a e# )*a4ra, estro, 'a#=aro y e(i &i#!3. Fr!ga(Ware !ti(i8a !# fork .e 5ac,a#. &a co#fig!raci"# .e 5ac,a# se e#c!e#tra e# e( arc*iAo .etc.!acman.conf. 0# este arc*iAo 5o.e,os esta+(ecer (as o5cio#es es5ecia(es y es5ecificar (os re5ositorios 5ara 5ac,a#.

Princi,ales comandos de ,acman


Po.e,os .iAi.ir(os e# tres +(o%!es< -#sta(aci"#, esi#sta(aci"# y )o#s!(tas< #nstalacin5

(sudo pacman ,; lista_de_paQuetes (sudo pacman ,< lista_de_paQuetes (sudo pacman ,<s lista_de_paQuetes (sudo pacman ,;=u (sudo pacman ,;=u lista_de_paQuetes (sudo pacman ,;+ lista_de_paQuetes (sudo pacman ,U -ruta-nombrepaQuete

., 3nstala la lista de paQuetes. ., "limina la lista de paQuetes. ., "limina la lista de paQuetes = sus dependencias. ., ;incroniza = actualiza todos los paQuetes. ., Nctualiza el sistema e instala la lista de paQuetes. ., Descar*a la lista de paQuetes sin instalarlos. ., 3nstala un paQuete local.

(sudo pacman ,U http:--+.ejemplo.com-rep-paQuete$ ., 3nstala un paQuete remoto. (sudo pacman ,;f ., Ruerza la instalacin del paQuete.

Desinstalacin5
(sudo pacman ,< lista_de_paQuetes (sudo pacman ,<s lista_de_paQuetes ., Desinstala la lista de paQuetes. ., Desinstala la lista de paQuetes = sus dependencias.

(sudo pacman ,<sc lista_de_paQuetes ., Desinstala la lista de paQuetes, sus dependencias = aQuellos paQuetes Que dependan de al*uno de la lista *enerada. (sudo pacman ,<n lista_de_paQuetes ., !acman sal7a al*unos archi7os de los paQuetes al ser desinstalados si han sido modificados por el usuario. Aon esta opcin e7itamos Que se *eneren.

#nstalacin@desinstalacin5
(sudo pacman ,F;>U><Hd ., ;e saltan los controles de dependencia de 7ersin. 4os nombres de paQuetes se si*uen comprobando. ., !ara saltar todas las comprobaciones de dependencia.

(sudo pacman ,F;>U><Hdd

Las actuali$aciones ,arciales no est&n so,ortadas( /o utili$ar ,acman SSy listaY,aquetes3 ni instalar ,aquetes si se ha hecho un ,acman SSy y no se ha actuali$ado el sistema (

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( KK

Consultas5
(pacman ,;s cadena_$ cadena&... ., 9uscar paQuetes en la base de datos. (pacman ,h ., Juestra una lista de todos los paQuetes instalados en el sistema.

(pacman ,hs cadena_$ cadena&... ., 9uscar paQuetes dentro de los paQuetes instalados. (pacman ,F;>hHi paQuete (pacman ,hii paQuete ., Juestra informacin sobre determinado paQuete. ., Juestra informacin sobre un paQuete instalado = lista de archi7os de copia de se*uridad = sus estados. ., !ara obtener la lista de archi7os instalados por un paQuete. ., !ara obtener el nombre del paQuete Que instalo el archi7o. ., !ara obtener una lista de todos los paQuetes instalados como dependencias no reQueridas.

(pacman ,hl paQuete (pacman ,ho -ruta-archi7o (pacman ,hdt

Lim,ie$a de la cach"
Seg># Aa,os act!a(i8a#.o/i#sta(a#.o 5a%!etes, 7stos se Aa# a(,ace#a#.o e# (a cac*7 .e 5ac,a#. Ysta Aa crecie#.o, .e=a#.o (a 5artici"# ."#.e se e#c!e#tre .#ar ,o#ta.o si# es5acio, .a.o %!e (os 5a%!etes .escarga.os se e#c!e#tra# .#ar.cache.!acman.!/(9 Pac,a# #os ofrece !# co,a#.o 5ara e(i,i#ar (os 5a%!etes a#tig!os g!ar.a.os e# (a cac*7<
(sudo pacman ,;c .,9orra todos los paQuetes anti*uos *uardados en la cache pacman. Jantiene la 7ersin actual instalada = elimina todos los Que no estKn instalados.

(sudo pacman ,;cc .,9orra todos los paQuetes *uardados en la cache pacman.

Para !# trata,ie#to .e (a cac*7 ,s se(ectiAo, 5o.e,os !ti(i8ar !accache, %!e for,a 5arte .e( 5a%!ete !acman-contri,. Pri,ero i#sta(a,os !acman-contri,<
(sudo pacman ,; pacman,contrib

$*ora 5o.e,os !ti(i8ar e( co,a#.o<

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( KL

(sudo paccache ,r7

%!e e(i,i#ar to.os (os 5a%!etes .e (a cac*7, 5ero ,a#te#.r (as tres >(ti,as Aersio#es (este es e( Aa(or 5or .efecto, co# e( 5ar,etro -4 5o.e,os ,o.ifica(o).

/o elimines toda la cach"3 mant"n al menos dos +ersiones ,ara ,oder reali$ar un do;ndgrade 3 en caso de que sea necesario(

S cri,ts y conse.os ,ara el mantenimiento


es5!7s .e act!a(i8ar 5ac,a#, es co#Ae#ie#te act!a(i8ar (a +ase .e .atos y o5ti,i8ar(a. Para e((o 5o.e,os e=ec!tar<
(sudo pacman,db,up*rade 66 sudo pacman,optimize

U#a .e (as cosas %!e s!e(e 5asar a( .esi#sta(ar a5(icacio#es o a( act!a(i8ar e( siste,a, es %!e Aar1e# (as .e5e#.e#cias o %!e.e# .e5e#.e#cias e# #!estro siste,a %!e ya #o est# sie#.o !ti(i8a.as 5or #i#g># 5a%!ete. $ estos 5a%!etes se (es ((a,a H*!7rfa#osI< F!ero# i#sta(a.os 5or%!e otro 5a%!ete (os re%!er1a 5ero ya #o so# #ecesarios. Para e(i,i#ar (os 5a%!etes *!7rfa#os, 5o.e,os !ti(i8ar e( sig!ie#te co,a#.o<
(sudo pacman ,<s ((pacman ,htdQ)

Po.e,os crear !# a(ias e# #!estro U..,ashrc o a:a.ir !#a f!#ci"# e# e( ,is,o 5ara (a e(i,i#aci"# .e (os 5a%!etes *!7rfa#os<

Opcin G5
alias huerfanos="sudo pacman ,<s ((pacman ,htdQ)"

Opcin F5
huerfanos() D if F ` ,n ((pacman ,hdt) HL then echo "2o ha= nada Que hacer." else sudo pacman ,<s ((pacman ,hdtQ) fi

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( KC

$*ora s"(o .e+e,os e=ec!tar<


( huerfanos

)",o *e,os !ti(i8a.o s!.o ta#to 5ara e( a(ias c",o 5ara (a f!#ci"#, #o es #ecesario e=ec!tar(o co,o root ya %!e #os 5e.ir (a c(aAe c!#.o sea #ecesario.

Las de,endencias o,cionales3 si las instalamos con la o,ci'n --asde!3 ,acman las tratar& como ,aquetes hu"rfanos( Si +amos a instalar de,endencias o,cionales3 no de-emos utili$ar esa o,ci'n( Con+iene re+isar la lista de ,aquetes generada antes de confirmar su eliminaci'n(

Para i.e#tificar (os arc*iAos %!e te#e,os e# e( siste,a %!e #o 5erte#ece# a #i#g># 5a%!ete, 5o.e,os crear e( script . sr.local.,in.!acman-diso'ned, co# e( sig!ie#te co#te#i.o<
#D&bin&sh tmp=(D8J!D3<,-tmpE-pacman,diso+ned,(U3D,(( db=(tmp-db fs=(tmp-fs mOdir "(tmp" trap Grm ,rf "(tmp"G "i38 pacman ,hlQ > sort ,u # "(db" find -bin -etc -lib -sbin -usr-bin -usr-shareP ` ,name lost+found P P( ,t=pe d ,printf Gdp-PnG ,o ,print P) > sort # "(fs" comm ,&0 "(fs" "(db"

&o *ace,os e=ec!ta+(e<


( sudo chmod +x -usr-local-bin-pacman,diso+ned

Po.e,os ge#erar !#a (ista co# estos arc*iAos as1<


( sudo pacman,diso+ned # lista.txt

$#tes .e 5roce.er a s! e(i,i#aci"#, .e+ere,os Aerificar a %!7 corres5o#.e#, 5!es 5!e.e# ser arc*iAos .e co#fig!raci"# 5erso#a(i8a.os, logs, etc. 0# e( caso .e %!e %!era,os .e=ar (a i#sta(aci"# (i,5ia, s"(o co# e( gr!5o +ase, 5o.e,os
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( K=

!ti(i8ar e( sig!ie#te co,a#.o<


(sudo pacman ,<s ((comm ,&0 W(pacman ,heQ>sort) W((for i in ((pacman ,hQ* base)L do pactree ,ul (iL done)>sort ,u>cut ,d G G ,f $))

$(go %!e 5!e.e ser#os ,!y >ti( 5ara *acer co5ias .e seg!ri.a., es co#ocer %!7 arc*iAos .e co#fig!raci"# *e,os ,o.ifica.o. $s1 #o es #ecesario *acer !# backup .e to.a (a car5eta .etc, ta# s"(o .e a%!e((os %!e #os i#terese.

Para sa+er %!7 arc*iAos .e co#fig!raci"# *e,os ,o.ifica.o, 5o.e,os crear !# script ((a,a.o . sr.local.,in.!acman-chan(ed-files, co# e( sig!ie#te co#te#i.o<
#D&bin&bash for pacOa*e in -7ar-lib-pacman-local-IL do sed G-jd9NA]U!d(-,-jd-`dG (pacOa*e-files > tail ,n+& > *rep ,7 Gj(G > +hile read file hashL do F "((md:sum -(file > (read hash fileL echo (hash))" `= "(hash" H 66 echo ((basename (pacOa*e) -(file done done

&o *ace,os e=ec!ta+(e<


(sudo chmod +x -usr-local-bin-pacman,chan*ed,files

e+e,os e=ec!tar(o co# 5er,isos .e a.,i#istra.or. )a.a Ae8 %!e act!a(ice,os e( siste,a, si se *a# crea.o o ,o.ifica.o (os serAicios .e s3stemd, .e+e,os recargar (a (ista .e !#i.a.es .e serAicio. 0sto 5o.e,os a!to,ati8ar(o .e (a sig!ie#te ,a#era< )rea,os (a !#i.a. .e serAicio . sr.local.li,.s3stemd.s3stem.reload-daemon.ser#ice y a:a.i,os<
FUnitH Description=<ecar*a la lista de unidades de ser7icio cu ndo se modifican. F;er7iceH 8=pe=oneshot "xec;tart=-usr-bin-s=stemctl ,,s=stem daemon,reload <emainNfter"xit=no

)rea,os . sr.local.li,.s3stemd.s3stem.daemon-reload.!ath
FUnitH

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( K>

Description=<ecar*a la lista de unidades de ser7icio cu ndo se modifican. F!athH !athAhan*ed=-usr-lib-s=stemd-s=stem !athAhan*ed=-usr-local-lib-s=stemd-s=stem Unit=daemon,reload.ser7ice F3nstallH Vanted9==multi,user.tar*et

Para i#iciar(a<
(sudo s=stemctl start daemon,reload.path (sudo s=stemctl enable daemon,reload.path

U#a Ae8 Aistos (os co,a#.os 5ara 5ac,a#, .e+e,os te#er e# c!e#ta !#a serie .e cosas< G.K $rc*(i#!3 es :olling :elease. 0sto %!iere .ecir %!e *ay act!a(i8acio#es a .iario. 0# c!a#to !# 5a%!ete es (o s!ficie#te,e#te esta+(e, 5asa a (os re5ositorios. 0# e( caso .e +i+(iotecas, to.os (os 5a%!etes asocia.os so# reco,5i(a.os. 0sta caracter1stica *ace %!e #o 5o.a,os rea(i8ar act!a(i8acio#es 5arcia(es ( M!acman -%3 Olista de !a= etesP). Si es #ecesario si#cro#i8ar (a +ase .e .atos a#tes .e i#sta(ar, se .e+e act!a(i8ar e( siste,a. Para #o e%!iAocar#os, sie,5re %!e #ecesite,os rea(i8ar !#a si#cro#i8aci"# .e 5a%!etes, es ,e=or *acer !# !acman -%3 . F.K a.o %!e es !#a .istri+!ci"# %!e se act!a(i8a ,!y r5i.a,e#te, a Aeces 5!e.e# s!rgir i#co#Ae#ie#tes. No es reco,e#.a+(e rea(i8ar act!a(i8acio#es .e( siste,a si se #ecesitas te#er e( siste,a esta+(e. 0s .ecir, es ,e=or act!a(i8ar c!#.o se te#ga tie,5o (i+re. >.K 0s co#Ae#ie#te #o e(i,i#ar (a cac*7 .e 5ac,a# #a.a ,s act!a(i8ar. Si #ecesita,os *acer !# do'n(rade, #o 5o.re,os *acer(o a 5artir .e (a cac*7. Se 5o.r1a *acer a 5artir .e (as i,ge#es %!e *ay e# (a $rc* 2o((+ac4 'ac*i#e12. $># as1, #o es +!e#a 5rctica e(i,i#ar co,5(eta,e#te (a cac*7. H.K 0Aitar (a !ti(i8aci"# .e( co,a#.o --force (!acman -%f Olista de !a= etesP). No !ti(i8ar(o #!#ca e# act!a(i8acio#es co,5(etas .e( siste,a ( !acman -%3 f). Si e# !#a act!a(i8aci"# co,5(eta 5ac,a# .a error, es co#Ae#ie#te reAisar (as News1E. 0# e( caso .e #ecesitar a(g># ti5o .e i#terAe#ci"# 5or 5arte .e( !s!ario, se 5!+(icar a((1 (a so(!ci"#. U.K )",o co#se=o ge#era(, #o act!a(i8ar e( siste,a si# a#tes *a+er reAisa.o (as News.

12 *tt5<//ar,.4o##ic*i.co,/ 1E *tt5s<//www.arc*(i#!3.org/#ews/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L1

Bac*u, autom&tico de la -ase de datos de Pacman


&a +ase .e .atos .e 5ac,a# se e#c!e#tra e# .#ar.li,.!acman.local. 0s !#a +!e#a i.ea te#er !#a co5ia .e seg!ri.a. .e (a ,is,a. Si 5or a(g># ,otiAo se corro,5e, 5o.re,os resta!rar(a. U# ,7to.o %!e 5er,ite *acer(o a!to,tica,e#te, es crear !# serAicio 5ara s3stemd %!e se e#carg!e .e rea(i8ar (a co5ia ca.a Ae8 %!e se ,o.ifi%!e (a +ase .e .atos.

&os scripts .e s3stemd se s!e(e# crear e# . sr.li,.s3stemd.scri!ts (5ara (os 5a%!etes i#sta(a.os) o e# . sr.local.li,.s3temd.scri!ts (5ara (os crea.os 5or e( !s!ario). )o,o estos arc*iAos (os Aa,os a crear #osotros, Aa,os a crear (a r!ta 5ara a(,ace#ar (os arc*iAos<
(sudo mOdir ,p -usr-local-lib-s=stemd-scripts (sudo mOdir ,p -usr-local-lib-s=stemd-s=stem

$*ora crea,os e( script . sr.local.li,.s3stemd.scri!ts.!a/,a/6scri!t y (e a:a.i,os e( sig!ie#te c".igo<


#D&bin&bash declare ,r paObaO="-paObaO.bz&" tar ,cjf "(paObaO" "-7ar-lib-pacman-local"

0# (a Aaria+(e !a/,a/ es5ecifica,os ."#.e %!ere,os g!ar.ar (a co5ia .e seg!ri.a.. e+e,os .ar(e 5er,isos .e e=ec!ci"#<
(sudo chmod +x -usr-local-lib-s=stemd-scripts-paObaO_script

)rea,os e( serAicio< . sr.local.li,.s3stemd.s3stem.!a/,a/.ser#ice y (e a:a.i,os<


FUnitH Description=9acO up pacman database F;er7iceH 8=pe=oneshot "xec;tart=-bin-bash -usr-local-lib-s=stemd-scripts-paObaO_script <emainNfter"xit=no

9 5or >(ti,o, crea,os e( serAicio . sr.local.li,.s3stemd.s3stem.!a/,a/.!ath, %!e estar Aigi(a#.o (a car5eta .#ar.li,.!acman.local, %!e es ."#.e est (a +ase .e .atos<
FUnitH

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( LA

Description=9acO up pacman database F!athH !athAhan*ed=-7ar-lib-pacman-local Unit=paObaO.ser7ice F3nstallH Vanted9==multi,user.tar*et

$*ora, 5ara i#iciar e( serAicio<


(sudo s=stemctl start paObaO.path

Para *a+i(itar e( i#icio e# ca.a arra#%!e<


(sudo s=stemctl enable paObaO.path

Configurando ,acman
0( co,5orta,ie#to .e 5ac,a# y (os re5ositorios se e#c!e#tra e# e( arc*iAo .etc.!acman.conf. 0ste arc*iAo est .iAi.o e# .os 5artes< o5cio#es ge#era(es y re5ositorios. Tea,os a(g!#as .irectiAas i#teresa#tes<
>old/?g = paQuete$ paQuete& _ ., ;i se intenta desinstalar al*an paQuete pertenicente a la lista indicada, pide confirmacin. ,ync@irst = paQuete$ paQuete& _ ., 4ista de paQuetes Que se deben actualizar primero, antes de actualizar el sistema completo. !or defecto se encuentra pacman, es posible Que Queramos abadir =aourt = pacOa*e,Quer=. 4gnore/?g = paQuete$ paQuete& _ ., 2o actualiza la lista de paQuetes indicada. 4gnoreArou& = *rupo$ *rupo& _ ., 2o actualiza la lista de *rupos indicada.

BoC&grade = archi7o$ archi7o& _ ., Nl actualizar el paQuete, no reescribe ni crea los .pacne+ correspondientes a esos archi7os. Ta= Que tener en cuenta Que no se ha de especificar la ruta anteponiendo -, por ejemplo, para no actualizar -etc-fstab, deberemos poner etc-fstab. Bo%+tract = archi7o$ archi7o& _ ., Nl actualizar, estos archi7os no son sobreescritos. ;e crea en la ruta de cada uno un archi7o con el mismo nombre Que el ori*inal = con la extensin .pacne+. Dfer5ommand = -ruta-commando du pacman por otro. ., !ermite cambiar el *estor de descar*as de

$*ora Aea,os e( for,ato 5ara (os re5ositorios<


XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( LE

Fre&o)nameH ,igEevel = !acOa*eD<eQuired>1pcional>2e7erE ,erver = ;er7er2ame 4nclude = 3nclude!ath

Pri,ero, .e+e,os es5ecificar e( #o,+re, e# este caso, re!o-name. 0# %er#er es5ecifica,os e( serAi.or. Si es !# re5ositorio %!e est e# Aarios serAi.ores, 5o.e,os es5ecificar e( arc*iAo .o#.e est# estos serAi.ores ,e.ia#te (a c(!s!(a 8ncl de. )o# (a c(!s!(a %i(5e#el esta+(ece,os c",o se gestio#ar (a fir,a .e 5a%!etes<
/ac?age7e"uired: 4os paQuetes han de estar firmados. /ac?age-&cional: ;i los paQuetes est n firmados, se comprueba la firma, si Ksta falla, no se instala. ;i no existe firma, no se considera error = se instala. /ac?ageBever: 2o se comprueba la firma de paQuetes.

e+e,os te#er e# c!e#ta %!e e( or.e# .e (os re5ositorios i,5orta. 0( 5a%!ete a i#sta(ar se +!scar e# (os ,is,os 5or or.e# .e a5arici"# e# 5ac,a#. es.e e( 5ri,er re5ositorio %!e (o co#te#ga, ser .es.e e( %!e act!a(ice o i#sta(e e( 5a%!ete. Si e# !# re5ositorio 5osterior, e( 5a%!ete se e#c!e#tra co# !#a Aersi"# s!5erior, #o se act!a(i8ar.

Enlaces de inter's5 *tt5s<//wi4i.arc*(i#!3.org/i#.e3.5*5/Pac,a# *tt5s<//www.arc*(i#!3.org/5ac,a#/5ac,a#.?.*t,(

MAR[A !5S\ M5/%ES #[AD %E I/BI%A A PAR%ICIPAR #EL PR5MEC%5 ESCI#A#A/IA( Pulsa so-re la imagen ,ara informarte o +isita los enlaces que figuran a continuaci'n(

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L0

E9plorando $osh

La e9periencia con ssh sobre redes m-iles puede ser dolorosa. Con $osh podemos ol-idarnos de -er con cierta rustracin el mensa+e VWrite failed: Broken pipeW cada -e( ,ue nuestro port1til -a Xa dormirX0 cuando se presenta una intermitencia en la red o simplemente0 cambiamos de red.

Escrito por: Eli(abeth Ram%re( (-#ge#iera 0(ectr"#ica)


esarro((a.ora .e Software e# (as -#.!strias We+, 6e(eco,!#icacio#es y 0#trete#i,ie#to. 0s5ecia(ista e# Siste,as .e -#for,aci"#, co# 7#fasis e# 2ea(-6i,e ;i((i#g. 'ie,+ro .e -000 Sig#a( Processi#g Society, New 9or4 Sectio#. HWa#tre5re#e!rI.
4ebs5 $+o!t.'e< *tt5<//a+o!t.,e/e(i8a+et*r Redes sociales5 6witter< 6eramirem

'

os* (a+reAiat!ra .e mobile shell) .eriAa s! #o,+re .e %!i8s s! caracter1stica ,as #ota+(e y es e( so5orte .e roaming y co#e3io#es i#ter,ite#tes, 5ro+(e,as i#tr1#secos a re.es i#a(,+ricas y ,"Ai(es. 0sto sig#ifica %!e 'os* ,a#te#.r HAiAaI !#a sesi"# seg!ra, esta+(eci.a co# !# serAi.or re,oto a>#, si se 5ier.e (a co#e3i"# a (a re.. &o a#terior se tra.!ce e# %!e (a sesi"# es resta+(eci.a c!a#.o (a co#e3i"# es rec!5era.aB si# e,+argo, ,ie#tras (a co#e3i"# a (a re. se e#c!e#tre ca1.a, #o se 5ro.!ce# ecos (oca(es, co,o 5o.r1a es5erarse. 0#tre otras caracter1sticas sec!#.arias, 'os* es ,!y c!i.a.oso co# (os co,5orta,ie#tos e3tra:os %!e se 5rese#ta# e# (os e,!(a.ores .e ter,i#a( c!a#.o se i#gresa# sec!e#cias .e caracteres U#ico.e o -SN 2022, %!e 5!e.e# +(o%!ear(a.

78* B=BB locCin$ escape sequences oh #l!in$ spa$uettin monster please Cill me no1. Revisor de U8ED7E le!endo el paper de ;osh.
'os* est escrito e# )]] y Software &i+re, .istri+!i.o +a=o (ice#cia GP& A E.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L8

SS)

FC'mo funciona MoshH


0# (os (a+oratorios .e )o,5!ter Scie#ce e -#te(ige#cia $rtificia( .e( '-6, *a# i.ea.o !# #!eAo 5rotoco(o ((a,a.o SSP (%tate %yncroni+ation Protocol), e( c!a( o5era so+re U P, e# (!gar .e o5erar so+re 6)P co,o (o *ace SSM. Para a%!e((os %!e (o .esco#o8ca#, 6)P es !# 5rotoco(o orie#ta.o a (a co#e3i"#, es .ecir, (a co#e3i"# .e+e ser esta+(eci.a e#tre a,+as 5artes a#tes .e e,5e8ar a tra#s,itir 5a%!etes, .e ,a#era o5!esta a U P, %!e es #o-orie#ta.o a (a co#e3i"# y e( f(!=o .e .atagra,as 5!e.e tra#sc!rrir si# %!e se *aya esta+(eci.o (a co#e3i"#. 0s 5recisa,e#te esta caracter1stica (a %!e 5er,ite a 'os* ,i#i,i8ar (a so+recarga .e .atos so+re e( ca#a( y f!#cio#ar e# ,o.o 5re.ictiAo, te#ie#.o a s! Ae8 ,eca#is,os 5ara reor.e#ar y ,a#e=ar 5a%!etes re5eti.os. 0# e( f!#cio#a,ie#to f!#.a,e#ta( .e ss*, a( esta+(ecer !#a sesi"#, e( echo o efecto .e ca.a eAe#to .e( tec(a.o e# (a ter,i#a(, es ge#era.o 5or e( serAi.or. )a.a e#tra.a .e( tec(a.o Aia=a *asta e( serAi.or .e ss* y regresa a( ter,i#a(. 0# e( caso .e 'os*, e( c(ie#te ge#era !# echo (oca( .e ,a#era 5re.ictiAa 5ara ca.a e#tra.a. 0ste ,o.o 5re.ictiAo 5er,ite %!e e( ,os*-c(ie#t 5re.iga e( efecto e# e( ter,i#a( .e ca.a e#tra.a .e( tec(a.o y (o a5(i%!e i#,e.iata,e#te, e# (!gar .e ir *asta e( serAi.or y .e ta( ,a#era %!e c!a#.o (a co,!#icaci"# e#tre e( c(ie#te y e( serAi.or tie#e !#a a(ta (ate#cia o #o es tra#s,iti.a .e ,a#era !#ifor,e, es tra#s5are#te 5ara e( !s!ario, co#((eAa#.o a (a .is,i#!ci"# .e errores .e tec(ea.o. 'os* est *a+i(ita.o 5ara rec!5erar (a sesi"# a!to,tica,e#te, 5!es 5er,ite a(,ace#ar e( esta.o ,s recie#te .e (a ter,i#a( e# e( #o.o (oca( y re,oto .e (a co#e3i"#. 'os* co#f1a e# (a *istoria .e e#tra.as y e( co#te#i.o .e (a Ae#ta#a .e( ter,i#a( c!a#.o (a re. es i#ter,ite#te, 5ara rea(i8ar es5ec!(acio#es so+re e( efecto .e ca.a e#tra.a e# (a ter,i#a( e# .ic*os casos.

La ,rue-a
U#a .e (as .esAe#ta=as (a t1t!(o 5erso#a() .e ,os*, es %!e .e+e ser i#sta(a.o ta#to e# e( c(ie#te co,o e# e( serAi.or. Para Aa(i.ar e( f!#cio#a,ie#to .e ,os*, se !saro# .os i#sta#cias .e !# serAicio We+ %!e 5roAee *erra,ie#tas .e f(e3i+(es 1@ .e cloud computing co# U+!#t! SerAer 12.0@. Para rea(i8ar .ic*a 5r!e+a, .e+i" agregarse !#a reg(a )!sto, U P e# Sec!rity Gro!5s, %!e 5er,ita co#e3io#es e#tra#tes a( ra#go .e 5!ertos P0000 ^ P1000, e# (a i#sta#cia .e( serAi.or.

&os 5asos .e i#sta(aci"# e=ec!ta.os f!ero# (os sig!ie#tes 1U<


( ( ( ( sudo sudo sudo sudo apt,*et install p=thon,soft+are,properties add,apt,repositor= ppa:Oeith+-mosh apt,*et update apt,*et install mosh

e( (a.o .e( serAi.or, 'os* se a!te#tica ,e.ia#te ss*, a+re !# listener e# !# 5!erto
1@ N.2< e( #o,+re co,ercia( .e .ic*o serAicio *a si.o e(i,i#a.o 5or ser 5riAatiAo (o5era co# Software #o-(i+re) y co#te#er restriccio#es (ega(es %!e .ific!(ta# s! 5!+(icaci"# e# !# ,e.io .e co,!#icaci"#. 1U &os .eta((es .e i#sta(aci"# 5ara ,>(ti5(es siste,as o5eratiAos se e#c!e#tra# e# *tt5<//,os*.,it.e.!/Fgetti#g

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( LK

U P y ge#era !#a ((aAe a(eatoria $0S-12? co,5arti.a, (a c!a( ser !sa.a 5or e( c(ie#te 5ara a!te#ticarse.
ubuntucip,$/,xxx,xx,xxx:^( mosh,ser7er J1;T A122"A8 5///$ li@$&Cd]]UT+NR'RS3Q3f+ ubuntucip,$/,xxx,xx,xxx:^( mosh,ser7er (mosh $.&.0) Aop=ri*ht &/$& ]eith Vinstein Wmosh,de7elcmit.edu# 4icense B!470+: B2U B!4 7ersion 0 or later Whttp:--*nu.or*-licenses-*pl.html#. 8his is free soft+are: =ou are free to chan*e and redistribute it. 8here is 21 VN<<N28\, to the extent permitted b= la+. Fmosh,ser7er detached, pid = %&:/H ubuntucip,$/,xxx,xx,xxx:^(

e( (a.o .e( c(ie#te, e35orta,os (a ((aAe ge#era.a y es5ecifica,os (a .irecci"# -P .e( serAi.or y 5!erto .e( (iste#er .e ,os*.
( export J1;T_]"\=li@$&Cd]]UT+NR'RS3Q3f+ ( mosh,client $&.0%:.5@.'?/ 5///$ Velcome to Ubuntu $&./%.$ 48; (B2U-4inux 0.&./,0$,7irtual i5'5) ubuntucip,$&,0%:,5@,'?/:^(

Se rea(i8aro# +sica,e#te E 5r!e+as< &a 5ri,era co#sisti" e# .esco#ectar (a re. Wi-Fi y Ao(Aer(a a co#ectar tra#sc!rri.o !# tie,5o. &a seg!#.a co#sisti" e# e#Aiar Ha .or,irI e( e%!i5o e# e( %!e se e#c!e#tra e( c(ie#te co# (a sesi"# .e ,os* esta+(eci.a. &a tercera 5r!e+a co#sisti" e# ca,+iar .e !#a re. Wi-Fi a !#a re. @G. 'ie#tras !#a sesi"# ss* se cierra e# (as tres 5r!e+as, Aoi(_ (a sesi"# ,os* 5er,a#ece AiAa.

Conclusi'n
&a se#saci"# %!e .a 'os* a( !s!ario, es %!e se est tra+a=a#.o e# !# e%!i5o (oca(. U#a 5r!e+a i#teresa#te ser1a !ti(i8ar 'os* so+re !#a re. ,!y .egra.a.a y o+serAar (os tie,5os .e res5!esta .e (os echoes, sig#ificatiAa,e#te ,as cortos %!e a( !sar ss*, a( estar o5era#.o so+re U P. Para co#ocer (a i#for,aci"# .e( 5royecto e# .eta((e, Aisitar *tt5<//,os*.,it.e.!

Se es5era %!e e# !# f!t!ro, ,os* so5orte -PAP.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( LL

Se menciona mucho el termino 1!il y metodolo!%as 1!iles en los Cltimos tiemposS es importante entender la esencia del mismo.

Escrito por: Ser!io #n ante $ontero (-#ge#iero .e Software)


-#ge#iero -#for,tico co# est!.ios .e $aster de Direccin Estrat'!ica en 7#. -#ge#iero .e software e# 7aller 7echnolo!ies0 actiAista, co#tri+!i.or y co#s!(tor .e 5royectos ALOSS, ,ie,+ro .e 2PESOL y escritor .e art1c!(os y (i+ros t7c#icos .e 5rogra,aci"#.
Per iles5 *tt5<//a+o!t.,e/#eosergio 6witter< 6neoser!io

a.a 5o#e ,as fe(i8 a !# c(ie#te, %!e e( software %!e *a e#carga.o, est7 f!#cio#a#.oB %!e to.o e( .i#ero y rec!rsos i#Aerti.os, .e# fr!to y %!e 5!e.a eAi.e#ciar .irecta,e#te e( 5ro.!cto .e( tra+a=o. 0sto es +sica,e#te (o %!e +!sca e( agi(is,o, *acer a( c(ie#te fe(i8, e# e( ,e#or tie,5o 5osi+(e. Po#g,o#os e# e( 8a5ato .e( c(ie#teB o(Ai.e,os %!e esta,os .e.ica.os a co#str!ir softwareB i,agi#e,os %!e es #!estro .i#ero y co#trata,os a !# e%!i5o 5ara ((eAar a ca+o e( 5royecto< `%!7 #os .ar1a co#fia#8a e# e( e%!i5oa `,!c*a .oc!,e#taci"#, 5(a#es y re5ortesa o `Software %!e f!#cio#a y %!e Aa crecie#.o e# f!#cio#a(i.a.es, se,a#a a se,a#aa )!a#.o se e,5ie8a a Aer e( .esarro((o .e software .es.e (a 5ers5ectiAa .e( c(ie#te, es c!a#.o rea(,e#te e,5ie8a# a 5asar cosas +!e#as. Para 5o.er e#te#.er ,e=or a( agi(is,o Aea,os (a 5arte ,s i,5orta#te .e( ,a#ifiesto gi(1P fir,a.o *ace 12 a:os, e( 17 .e fe+rero .e( 2001, 5or 17 .esarro((a.ores .e software %!e se re!#iero# 5ara 5artici5ar .e !#a co#Ae#ci"# so+re (os ,7to.os (igeros .e .esarro((o.

$ndividuos e interacciones so+re procesos ! herramientas


1P *tt5<//agi(e,a#ifesto.org/iso/es/

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( LC

#ESARR5LL5 RGIL

2!ilismo en palabras simples

Software funcionando so+re documentacin e5tensiva %olaboracin con el cliente so+re ne$ociacin contractual &espuesta ante el cambio so+re se$uir un plan
0stos (i#ea,ie#tos se co,5(e,e#ta# co# (os .oce 5ri#ci5ios .e (as ,eto.o(og1as gi(es.17

Lo -ueno
e (os 5royectos e# (os c!a(es *e 5o.i.o 5artici5ar y a5(icar (as ,eto.o(og1as gi(es, *e 5o.i.o resa(tar (as sig!ie#tes ra8o#es 5or (as c!(es ser gi(< 1. En ocarse en lo ,ue es realmente importante y poster!ar lo ,ue no5 e( agi(is,o te *ace .e=ar .e (a.o a%!e((as actiAi.a.es %!e #o Aa# a co#tri+!ir a e#tregar software f!#cio#a#.o e# e( ,e#or tie,5o, te *ace 5e#sar e# %!7 es (o %!e Aa a *acer a( c(ie#te fe(i8. 2. Di-idir !randes problemas inmane+ables en problemas pe,ue8os 1ciles de solucionar, i#c(!ye#.o !#a ,e=ora e# e( tie,5o 5ara so(!cio#ar 5ro+(e,as. 0# re(aci"# a (a ra8"# a#terior, si !#o se e#foca e# (o %!e rea(,e#te i,5orta, !# 5ro+(e,a 5e%!e:o 5!e.e ser .iAi.i.o e# 5artes .e ac!er.o a s! i,5orta#cia. E. Estar se!uro de ,ue realmente unciona lo ,ue estas entre!ando al cliente5 a( ser e#tregas e# corto tie,5o y 5e#sa#.o e# %!e .e+e ser (o ,as i,5orta#te 5ara e( c(ie#te, i#c(!so si ((ega a fa((ar (o %!e e#tregas o #o se a.a5ta a (o %!e e( c(ie#te .esea, es r5i.o corregir(o, 5!esto %!e e( c(ie#te te .a (a retroa(i,e#taci"# 5ara *acer(o. &os 5ro+(e,as a5arece# ,s r5i.o y o+Aia,e#te (as so(!cio#es. @. Dis rutar del poder de la retroalimentacin, a( ser 5erio.os cortos e#foca.os a e#tregar Aersio#es f!#cio#a(es .e( software, (os co,e#tarios, o5i#io#es y .efectos %!e #ota e( e%!i5o, c(ie#te y !s!arios ((ega# ,!y r5i.o. 0sto 5er,ite a=!star a (as #ecesi.a.es .e( caso. U. Vol-erse medible5 e( c(ie#te se .a c!e#ta co,o est sie#.o !ti(i8a.o s! .i#ero, .e (a ca(i.a. .e( tra+a=o, .e( cro#ogra,a 5(a#ifica.o y .e ,a#e=ar (as e35ectatiAas. P. Vol-erse le9ible al cambio5 e# !# 5royecto 5!e.e# 5asar ,!c*as cosas %!e #os o+(iga# a *acer ca,+ios, es i,5orta#te te#er (a Ae#ta=a .e ca,+iar (os 5(a#es c!a#.o sea# #ecesarios y a.a5tarse a( co#te3to .e( 5royecto.

La ad+ertencia
$ 5esar .e to.as (as ra8o#es +!e#as, (as c!a(es ,!c*os .e (os %!e 5ractica# (as ,eto.o(og1as gi(es 5!e.e# corro+orar, #o a to.os (es g!sta esta for,a .e tra+a=o, 5or (a ,is,a ra8"# %!e ,!c*as 5erso#as #o co,e# sa(!.a+(e,e#te o *ace# e=ercicios.
17 *tt5<//www.agi(e,a#ifesto.org/5ri#ci5(es.*t,(

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L=

0( e#tregar Aa(or ca.a se,a#a, es !#a actiAi.a. %!e re%!iere .e tra#s5are#cia e# e( 5roceso .e co#str!cci"#B #o *ay (!gar 5ara oc!(tar cosas< o se e#trega a(go .e Aa(or o #o se e#trega, es ta# si,5(e co,o eso. Si# e,+argo si te g!sta (a tra#s5are#cia, te a5asio#as 5or *acer !# tra+a=o .e a(ta ca(i.a. y to,as (a .ecisi"# .e e=ec!tar y tra+a=ar, (as ,eto.o(og1as gi(es f!#cio#ar# co,o !#a reco,5e#sa y *asta !#a ,a#era .iAerti.a .e co#str!ir software. No *ay o+(igaci"# 5or *acer e#tregas ca.a se,a#a si 5ie#sas %!e 5!e.e ser estresa#te. '!c*os e%!i5os gi(es e,5ie8a# a e#tregar ca.a .os se,a#as o i#c(!so tres se,a#as, #o (o to,es (itera(,e#te, es so(o !# .ecir 5ara *acerte e#te#.er (o +e#eficioso %!e 5!e.e ser e#tregar Aersio#es f!#cio#a(es .e software a( c(ie#te, o+te#er retroa(i,e#taci"# y ca,+iar (os 5(a#es si so# #ecesarios.

La ,rioridad mas alta es satisfacer al cliente a tra+"s de la entrega ,ronta y continua de soft;are Ptil(

La confusi'n
e+i.o a( 73ito %!e tie#e# (as ,eto.o(og1as gi(es, *ay ciertas accio#es %!e *a# *ec*o %!e (os esc75ticos (e te#ga# ,!c*a resiste#cia y co# ,!c*a ra8"# se 5!e.e# e#co#trar *ec*os co,o (os sig!ie#tes< Las empresas si!uen -i-iendo el proceso en cascada5 a.a5tarse a( agi(is,o es !# ca,+io %!e i#c(!ye ta,+i7# (a ,a#era .e 5e#sar y (a c!(t!ra organi+acional. Aalsas e9pectati-as causadas por creer ,ue es la bala de plata (a %!e so(!cio#a to.os (os 5ro+(e,as, (a %!e #!#ca fa((ar. Considerar a las metodolo!%as 1!iles como un proceso y 5o#er ese 5roceso y (a e(ecci"# .e (as ,e=ores *erra,ie#tas so+re (as #ecesi.a.es .e( e%!i5o (Aa e# co#tra .e (a 5ri,era 5arte .e( ,a#ifiesto gi(). Las certi icaciones ,ue pretenden hacer creer ,ue obteni'ndose ya se con-ierten autom1ticamente en agilistas e9pertos5 *ay !# #egocio ,!y gra#.e co# e( t7r,i#o scrum master y c!rsos so+re eso. Las malas capacitaciones y entrenamientos .a.as 5or aca.7,icos %!e i#te#ta# co#ocer (os .eta((es .e (as ,eto.o(og1as gi(es 5ero %!e =a,s *a# *ec*o software. Las implementaciones estrictas de las metodolo!%as, 5or%!e (as co#si.era# c",o a(go ,!y cere,o#ia(, .e=a#.o .e (a.o (o 5rag,tico. ?sar postKit en un pi(arra y 5e#sar %!e co# i,5(e,e#tar eso ya so# gi(es y est# 5re5ara.os 5ara ,e=orar e( 5roceso. La mala asociacin del termino 1!il co# Scr!,, Sa#+a#, eVtre,e Progra,,i#g %!e so# so(o for,as .e tra+a=o, crea#.o i#c(!so fa#atis,o 5or e((os, 5e#sa#.o %!e seg!ir s!s 5rocesos a( 5ie .e (a (etra ya so# agilistas.
XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( L>

Creer ,ue 1!il si!ni ica no documentar. Haber con-ertido al a!ilismo en una especie de reli!in , 5ro,oAie#.o e( fa#atis,o y +!sca#.o atacar y .iscre5ar co# to.o (o .e,s. Con undir a los clientes con terminolo!%as 1!iles y 5rete#.er %!e e#tie#.a# estos t7r,i#os y for8ar(os a ser s!5!esta,e#te gi(es.

e+i.o a estas ra8o#es y a(g!#as otras ,s, se est *a+(a#.o .e (a era .e( postK a!ilismo. $(g!#os .e (os art1c!(os y 5rese#tacio#es ,s resa(ta#tes a( res5ecto so# (as 5!+(ica.as 5or ;avier <ar+=s< >a agilidad esta muriendo9 2ienvenido el postagilismo1?, (a .e ?srael /lc=+ar co# e( t1t!(o "esmitificando el agilismo-@ y (a .e *iguel Angel <arcia: /gile ha muerto9 BViva post&agileC2D

La ,lanificaci'n
P(a#ificar !# 5royecto gi( #o .ifiere ,!c*o .e te#er !#a (ista .e cosas 5or *acer y tareas, a to.o esto se (e ((a,a &ista .e *istorias e *istorias .e !s!ario. &a (ista .e *istorias es (a (ista .e cosas 5or *acer e# e( 5royecto. )o#tie#e to.as (as caracter1sticas %!e e( c(ie#te %!iere Aer e# s! softwareB est or.e#a.a .e ac!er.o a (a 5riori.a. .e #ecesi.a.es .e( c(ie#te y Aa(i.a.a 5or e( e%!i5o .e .esarro((oB es (a +ase .e( 5(a# .e 5royecto. &a iteraci"# es !# 5erio.o .e !#a a .os se,a#as .o#.e se to,a# (as caracter1sticas ,s i,5orta#tes 5ara e( c(ie#te y se tra#sfor,a# e# rea(i.a.. 0so 5er,ite .eter,i#ar (a Ae(oci.a. .e .esarro((o (ca#ti.a. .e caracter1sticas 5or ca.a iteraci"#). $s1 se Aa co#ocie#.o ,e=or e( e%!i5o y 5!e.e ir ,e=ora#.o s! .ese,5e:o. )!a#.o #o %!e.a tie,5o 5ara ter,i#ar (as tareas e# ca.a iteraci"#, se *ace# ,e#os tareas, sie,5re e# or.e# .e i,5orta#cia y c!a#.o (as cosas Aa# rea(,e#te ,a(, se ca,+ia e( 5(a#, 5!es (a 5(a#ificaci"# es f(e3i+(e. No *ay 5(a#ificaci"# ,gica .es.e e( 5ri#ci5io %!e 5er,ita %!e s!ce.a# ,i(agros e# e( ca,i#o y se te#ga e( software >ti( y (isto 5ara f!#cio#ar. 0# e( agi(is,o #o se #ecesita# ,i(agros, ya %!e to.o es *o#esto co# (os c(ie#tes .es.e e( 5ri#ci5io. -,agi#e,os (o sig!ie#te< e+e,os co#tratar a !#a 5erso#a 5ara %!e (i,5ie (as Ae#ta#as .e #!estra casa, `crees %!e .e+er1a,os co#si.erar e( tra+a=o *ec*oa c!a#.o esta 5erso#a #os 5rese#te< Nos ,!estra !# re5orte .e co,o 5(a#ea (i,5iar (as Ae#ta#as. Tie#e co# !# e(a+ora.o ,a5a .e r!ta .e co,o (i,5iara. )rea !# e(a+ora.o 5(a# .e 5r!e+as 5ara sa+er %!e (as Ae#ta#as est# (i,5ias.

e #i#g!#a ,a#era esta 5erso#a reci+ir1a !# 5ago, *asta %!e (as Ae#ta#as est7# (i,5ias. 0# (as ,eto.o(og1as gi(es, s!ce.e a(go si,i(ar, e#tregar !#a caracter1stica a( c(ie#te
1? *tt5<//www.=aAiergar8as.co,/2012/0U/5ostagi(is,o.*t,( 19 *tt5<//far,er.eA.co,/s(i.es/2012/.es,itifica#.o-agi(e/i#.e3.*t,( 20 *tt5<//,ag,a3.org/2012/0@/1P/5ost-agi(e.*t,(

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( C1

sig#ifica *acer to.o (o #ecesario 5ara 5ro.!cir esa caracter1stica y %!e sea >ti( (a#a(i8ar, 5ro+ar, .ise:ar, co#str!ir, .oc!,e#tar y to.o (o .e,s). 0sto #o sig#ifica %!e #ecesaria,e#te to.o est7 e# (a 5ri,era Aersi"#, 5ero s1 %!e se 5o#ga to.o e( esf!er8o co,o si se t!Aiera %!e *acer.

El soft;are funcionando y Ptil es la ,rinci,al forma de medir el "Jito

La +erdad
)!a#.o se tra+a=a co# ,eto.o(og1as gi(es *ay Aer.a.es co# (as %!e se Aa# a to5ar y es i,5orta#te res5etar(as< Es imposible captar todos los re,uerimientos del cliente al principio del proyecto5 #o *ay %!e te#er ,ie.o .e e,5e8ar e( 5royecto si# sa+er to.o (o %!e Aie#e ,as a.e(a#te. &os re%!eri,ie#tos seg!ir# esco#.i.os *asta %!e se i#icie e( 5royecto. Los re,uerimientos ,ue identi icaste siempre -an a cambiar , #o *ay %!e te#er ,ie.o a( ca,+io, ac75ta(o y a.a5ta e( 5(a# c!a#.o sea #ecesario. Siempre habr1 mas cosas ,ue hacer ,ue el dinero y tiempo disponible5 #o te estreses c!a#.o (a (ista .e cosas 5or *acer e3ce.e (os rec!rsos, es #or,a(, s"(o *a8 (as cosas %!e rea(,e#te 5!e.as, or.e#a 5or 5riori.a. (a (ista y .e=a (as cosas ,e#os i,5orta#tes 5ara e( fi#a(. 3o e9iste una sola orma de hacer las cosas5 #o te estreses 5or e(egir (a ,e=or ,eto.o(og1a. -,agi#a a Scr!,, VP, Sa#+a#, &ea#, e#tre otras, co,o si f!era# sa+ores .e *e(a.os, sie,5re *a+r a(g!ie# %!e .ir %!e ese sa+or es ,e=or %!e otro, 5ero #o es cierto, .e5e#.e .e (os g!stos, 5refere#cias y #ecesi.a.es. No e3iste ,eto.o(og1a %!e te .e to.o (o %!e #ecesitas. )a.a 5royecto es .ifere#te, 5!e.es co,+i#ar(as, a5(icar 5ri#ci5ios y 5rcticas e i#c(!so crear t! 5ro5ia ,eto.o(og1a.

?as metodolo$)a "$iles est"n orientadas a hacer a las personas 2clientes ! desarrolladores3 #elices.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( CA

#e estudiante a ,rogramador
Por Yecely D%a( (bsi(Aercor5)
9ece(y es 'aestra e# -#te(ige#cia $rtificia( y esarro((a.ora We+. $ficio#a.a .e (a 6ec#o(og1a, Ti.eo=!egos y (a We+. $#siosa .e a5re#.er, co#tri+!ir y 5rogra,ar to.as s!s i.eas. $,a (o %!e *ace y e( c".igo es s! Ai.a. *tt5<//si(Aercor5.wor.5ress.co,/

E#2CACIQ/

ace algunas semanas reci- +arios correos con temas similares] ,uedes llamarlo coincidencia o que se acerc' fin de semestre ,ara aquellos que estudian3 lo cu&l me record' aquella eta,a en la que lucha-a contra los algoritmos y clases a-urridas3 donde me ,regunta-a constantemente< S 9Festo ser& ,ara miH:( %al +e$ esto3 te em,iece a sonar familiar(((
$(g!#as 5erso#as ,e *a# 5reg!#ta.o< - H`%!7 #ecesito 5ara ser !# +!e# 5rogra,a.ora `e# %!7 ,o,e#to se Ao(Aer to.o ,s se#ci((oaI. So(o 5!e.o .ecir(es %!e (a 5rogra,aci"# 5!e.e ser !# 5roceso (argo 5ero %!e c!a#.o (ogras co,5re#.er (a ("gica .e( .esarro((o, !# ,!#.o #!eAo ((ega a ti. So(o 5!e.o .ecirte< H#o .eses5eresB se 5acie#teB (eeB a5re#.e y #o te 5resio#esI. 6o.os te#e,os !# 5roceso .e a5re#.i8a=e .ifere#te y 5ara a(g!#as 5erso#as 5!e.e ser se#ci((o 5ero 5ara otros 5!e.e re%!erir ,ayor esf!er8o. So(o #o o(Ai.es %!e esta carrera es para a,uel ,ue perse-era y no se da por -encido.

2prendiendo en l%nea5 Si eres !#a 5erso#a a!to.i.acta, te .e=o (a (ista .e a(g!#os e#(aces .o#.e 5o.rs e#co#trar i#for,aci"# .e .ifere#tes (e#g!a=es .e 5rogra,aci"# as1 co,o rec!rsos %!e te ay!.ar# a t! a!to-a5re#.i8a=e. Codeacademy5 0s (a ,a#era ,s se#ci((a %!e *e e#co#tra.o .e a5re#.er (e#g!a=es co,o =K!ery, M6'&, )SS, Pyt*o#, 2!+y, e#tre otros. )o# !#a co#so(a i#teractiAa e i#str!ccio#es 5aso a 5aso se te e35(ica# ca.a !#o .e (os (e#g!a=es a#tes ,e#cio#a.os. .
*tt5<//co.eaca.e,y.co,

CoderNall5 0#co#traras tips .e .iAersas tec#o(og1as, e35(ica.os .e ,a#era se#ci((a y co#creta 5or .esarro((a.ores e35eri,e#ta.os.
*tt5<//co.erwa((.co,

.odo es mu! di#)cil antes de ser sencillo -.homas Fuller


&a Ae#ta=a es %!e act!a(,e#te e3iste# rec!rsos e# (a re. 5ara to.os (os g!stos, es .ecir .es.e Ai.eot!toria(es *asta foros, co,!#i.a.es, (i+ros e(ectr"#icos y reAistas, e#tre otros rec!rsos. 6! .eci.es c",o y ."#.e te sie#tes ,s c",o.o 5ara a5re#.er.

Coursera5 &a U#iAersi.a. .e Sta#for. ofrece c(ases tota(,e#te grat!itas 5or (os ,e=ores cate.rticos, co# !# 5(a# .e est!.ios +ie# 5(a#tea.o y a5oya.o .e Ai.eos, e=ercicios y e3,e#es. Po.rs HasistirI a c(ases co,o ;ase .e atos, -#tro.!cci"# a (a -#te(ige#cia $rtificia(, $#(isis .e atos, )ri5tograf1a, e#tre otros. 6e# e# c!e#ta %!e se re%!iere !# a(to co#oci,ie#to .e( i.io,a i#g(7s, 5ara 5o.er o+te#er !# ,e=or 5roAec*o .e (os c!rsos %!e to,es. *tt5s<//www.co!rsera.org/co!rses PFP ?ni-ersity5 )o# !# e#fo%!e .e a5re#.i8a=e co(ectiAo, si# restriccio#es y grat!ito 5o.rs a5re#.er .iAersos te,as #o >#ica,e#te .e 5rogra,aci"#. )a+e .estacar %!e te#.rs retroa(i,e#taci"# co#str!ctiAa .e t!s aAa#ces. *tt5s<//525!.org/es

)o,o estos sitios *ay ,!c*os ,sB 7stos, so# a%!e((os e# (os %!e *e a5re#.i.o te,as .e i#ter7s y %!e co#si.ero .e i,5orta#cia.

XE1A0 )#Maga$ine(org U Creati+e Commons Atri-uci'n /oComercial Com,artirIgual 0(1 2n,orted

P&g( CE

. .c. . cmc,. .c .cmdnmc,. .cmc .cn77d7nmmc,. .cmndnc .cmn777d77nnmmc,. .cmmn7d7nc, cmmnn777d77777nnmmc,. .cmmnn777d77nmc cmmnn77777d777777nnmmc, LLLcmmnn77777d777nmc, kcmmnn777777d77777nnmmmLLcmmnn777777d7777nmmc kcmmmnn777777d777nnmmmLdmmnn777777d7777nnmmc kcmd7d7d7d7d7LdLdLdLdLdLdLddd77d7777nnnmmc .,mmcccccmmdLLccmcmccmccmcmmLLdd777nnnmmcLc,. .,cmmmmmm77ddLLcc7m777777777m7mccLLdd77nnmcLdmmmc, .,cmmnn77777ddLLcc77777ddddddd7777mmccLLddmmcLddnnnnmc, .,cmnn77d7d7d7ddLLcmm7777ddLILILdd7777mmmcLLdmLdd7d7d7d7mmc,. ,cmnn77d7d7d7d7d7d7dLLcc7777ddLILILILdd7777mccLLmddd7d7d7d7d7d7nnmc, k kcmnn77d7d7d7ddLLcm77777ddLLILLdd777mmmmcLLdmLdd7d7d7d7mmcG G kcmmnn77777ddLLccm7777ddddddd7777mmccLLddmmcLddnnnnmcG kcmmmmmm77ddLLccm7777777777mmmccLLddmmnmmcLdmmmcG kmmcccccmmdLLcmccmcmcmccmccLLdd77777nmmcLcG ,cmd7d7d7d7d7LdLdLdLdLdLdLdLd77d77777nnmmc .cmmnn7777777d7777nnmmdmmnn7777777d7777nnmmc .cmmnn777777d777777nnmmGkcmmnn777777d777nnmmc cmmnn77777d777777nnmmcG:d::kcmmnn7777d777nmcG cmmnn777d77777nnmmcGk:::dd:::Gkcmmnn77d77mmc kcmn777d77nnmmcG k:LddL:G kcm77d7mcG kcmn7d7nnmcG kLdLG kcndnc kcmdmmcG LdL. kcmc cmcG kLdL kc kcG LdL. G , k kLdL d, LdL. kLddddddd, kLdL kddddddddd, LdL. ::, kLdL ::d, LdL ::dd, LdL ::Ldd .LdL ::LLdd LdLG k::Ldd .LdL ::LLdd LdLG k::Ldd .LdL ::LLdd LdLG k::Ldd .LdL ::LLdd LdLG k::Ldd .LdL ::LLdd LdLG k::Ldd .LdL ::Ldd, LdLG k::Ldd .LdL ::Ldd LdLG k::dd .LdL ::dd LdLG k:Ld .LdL :Ld .LdLG :Ld .LddL k:d .LddLG k::ddLG 0he first 6affodil of ,&ring por ,usie -viatt http:--+++.diOu.dO-hjemmesider-studerende-thorsbro-;usie17iatt.html

?Z %u $ona eJclusi+a
Para ,u-licar tu mensa.e en la Dona 263 en+ anos un eSmail contactoThdmaga$ine(org3 indicando Dona26 En el asunto del mensa.e(

)#

Mensa.es de /uestros Lectores


Edison Moreno ?Ecuador@< Estimadas3 +i su re+ista ELBIS 70 y es muy interesante lo que ,u-lican3 no se si sir+a de ayuda] ,ero se ,uede usar los feeds ,ara informar cuando salga una re+ista3 ,uede ser ,or e.m,lo que en un -log se coloque la salida de la re+ista( y esto llegar& al reader que tengan las ,ersonas3 en mi caso uso el google reader y es muy -ueno( &espuesta' 0ola Edison9 ;uchas $racias por tu mensa(e G3 El pro+lema que tenemos en la actualidad, es que somos pocos ! estamos tra+a(ando al m"5imo. Ha no nos queda espacio de tiempo para poder asumir una responsa+ilidad m"s. Es por eso, que estamos necesitando del aporte voluntario de la comunidad 2!a sea en dinero o tra+a(o3, como para poder cumplir con todo lo que nos piden. Do podemos con todo9 ero i$ual mil $racias por la su$erencia. H si quieres sumarte a cola+orar de #orma voluntaria, eres +ienvenido9 G3 An'nimo ?PerP@< )ola3 soy un estudiante de Ingenier a de Sistemas( Reci"n estoy leyendo sus re+istas y me ,arecen muy interesantes( Me encant' la +e$ que incluyeron so-re la herramienta PseInt ,ara los que somos nue+os en la ,rogramaci'n( Ser a Ptil ,ara los no+atos como yo que incluyan una secci'n en la re+ista en donde traten temas no tan com,licados ni tan a+an$ados Z# ( Sigan as con la re+ista3 hacen un -uen tra-a.o( PerP &espuesta' ,racias, de hecho ha! al$unos art)culos que han sido orientados a novatos pero tomaremos en cuenta tu opinin para ver si podemos implementar una seccin especial.

Encuesta + a %;itter<
F%e ,arecen muy a+an$ados los art culos ,u-licados hasta ahoraH ?Res,onder en< htt,<II-it(lyIZ0st%^@ AE Res,uestas hasta el E0I1EIE1A0 <
Ted+m no,3 estan -uenos3 ,ero no creo sean a+an$ados ?ahora3 no son introductorios ]S@ T.ac*grisE Mo creo que est&n -ien ]@ Me gustaron los de Arch3 yo que uso esa distro ,odr an agregar algPn otro <# TtheYL>Ah est&n ,erfectos as como est&n3 muy -&sicos seria redundar con el material que hay ,or toda la red T.ats*aneda me ,arecen geniales ademas eJ,lican muy -ien me gustan como estan asi eJitos saludos desde Ccs B$la Tleoncio*of creo que los articulos cada +e$ se estan ,oniendo me.ores TRootGeiller no3 el ni+el est& muy -ien3 la metodolog a ,ara eJ,licar es muy clara( T#iego2G /o,3 ,ara mi est&n -ien3 ,uede ser que muchos lectores son ;indo;s o tienen ,oca eJ,eriencia en linuJ( Tgacane,a S 3 son a+an$ados desde mi ,unto de +ista( Podrian incluir algunos -asicos .unto con esos al mismo tiem,o@ Ticaro,erseo no estar a mal algo mas _-&sico_ TmrYmcun no3 son .usto lo que necesito (((( hay mucho material -&sico dando +eltas T.osemi$amora Para m s ( Pero en +e$ de ,edirlos m&s -&sicos3 ,refiero a+an$ar yo ]S@ Tmagooracss suena mal decir que noH una re+ista de llena de articulos -&sicos no necesita el ni+el del staff actual(

Anuncios< 9Gente que -usca gente:


4ranco 9Bagnado: ?eJS conductor de ,rograma de % B de la Re,( Argentina@< Bengo a ,u-licar un 9llamado a la solidaridad:( 2n .o+en de la ciudad de Posadas ?Misiones3 Argentina@3 reclama en %;itter3 encontrar a 9Mu.er LinuJera: ?H@ -a.o el hashtag 7Mo`uiero2naMu.erLinuJera ( `uien ,osea informaci'n3 contactar con el interesado T.a+ierEKarg( Muchas gracias3 4ranco ?el mentor de Guillermo 9Arduino:3 el que encontr' a ^arinaaaaaaaa6666 htt,<IIyoutu(-eI>ZAI*ECG.#c@

aGRACIAS P5R LEER/5S6


PR5#2CI#5 E/ L A REPbBLIC A ARGE/%I/A 3 P5R )AC^ERS #E %5#5 EL M2/#53 PARA PR54ESI5/ALES #E %5#5 EL PLA/E%A(

También podría gustarte