Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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
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
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.
&
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(
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.
*tt5<//www.5yt*o#.org/.eA/5e5s/5e5-E120/
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.
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'
P&g( C
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.
P&g( =
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.
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(...
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.
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.
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/
P&g( A1
( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$0-/$-1pen23,4inux,x'5,&.$./.tar.zip
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
9 (os .e E2<
( +*et ,c http:--+++.openni.or*-+p,content-uploads-&/$&-$&-238",9in,4inux,x'5, 7$.:.&.&$.tar.zip
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.
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 <)
P&g( AE
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.
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
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#
P&g( A8
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.
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<
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
P&g( AL
AC
MA/2AL #E MBC
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.
# (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#.
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);
P&g( A=
E E
&os rec!rsos editar)*, eliminar)* y #er)* s!e(e# reci+ir (a 5ar,etro (arg!,e#to reci+i.o .es.e FrontController).
P&g( A>
# 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):
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
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
P&g( EE
E0
P)P I %##
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.
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
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.
P&g( EL
EC
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.
,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 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
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
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
P&g( E>
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-
P&g( 01
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(
Por e=e,5(o<
XYY appmodules XYY conta*ilidad ZYY controllers ZYY models
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
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
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.
P&g( 00
%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)
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
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<
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
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.
P&g( 81
8A
MA/2AL #E PERL
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.
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
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
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
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*
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
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.
P&g( 88
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
P&g( 8K
'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
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.
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
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=
'
!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(
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
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#
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.
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#
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'
P&g( K0
K8
MA/2AL #E ARC) LI/2Z
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
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#.
(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.
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 (
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.
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
P&g( KL
%!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(
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
P&g( KC
)",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"
$#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=
$(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
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
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/
P&g( L1
&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
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
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
P&g( LA
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
P&g( LE
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.
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(
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.
'
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.
P&g( L8
SS)
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.
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
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.!
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.
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.
P&g( LC
#ESARR5LL5 RGIL
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,(
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,(
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.
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.
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,
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.
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(
)#
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(