Está en la página 1de 63

AO 0 NMERO 1 2012-12-03

HD DEVELOPERS +
Hackers &
Magazine digital de distribucin mensual sobre Software Libre, Hacking y Programacin

#0
#1
4"obra5

Staff
"elia "intas )liana "araballo )lizabet. +amirez )ugenia /a.it %ndira /urga Laura Mora Mar0a 1ose Montes Milagros %nfante Sorey 2arcia 3ecely Diaz
Licenciada en %nform6tica %ngeniera de Sistemas %ngeniera )lectrnica #r7uitecta 2L#MP & #gile "oac. %ngeniera de Sistemas #dm' de +edes y Sistemas 8ec' en %nform6tica de 2estin )st' %ngenier0a de Sistemas #r7uitecta de Software Maestra en %nteligencia #rtificial

Hackers & Develo ers Magazine se distribuye ba!o una licencia "reative "ommons #tribucin $o"omercial "om artir%gual &'( )res libre de co iar, distribuir y com artir este material' *+)) #S %$ *+))D,M-

HD DEVELOPERS +
Acerca de
Hackers & Develo ers es un Magazine digital de distribucin libre y gratuita, sobre Software Libre, .acking y rogramacin' Se distribuye mensualmente ba!o una licencia "reative "ommons'

Hackers &

#1
Richard Stallman Free Software, Free Society Pg. 97, GNU Press 2010-2012

... Hacker es alguien que disfruta jugando con la inteligencia..

Este mes en Hackers & Developers...


P6sate a 2$9:Linu; con #rc. Linu;< Parte %''''''''''''''''''''''''''''''''''''''''''& 2uifi'net< la red abierta libre y neutral'''''''''''''''''''''''''''''''''''''''''''''''=( La im ortancia del s.ell, vi y rege;'''''''''''''''''''''''''''''''''''''''''''''''''''''=> Los im resionantes arc.ivos 'P, ? l=(n de 2$,M)'''''''''''''''''''''''''''''=@ 2oogle Ma s #P%< Primeros Pasos'''''''''''''''''''''''''''''''''''''''''''''''''''''''AB 8H+))'1S Cva a .acer todo eso or miD'''''''''''''''''''''''''''''''''''''''''''''''&A #r7uitectos y diseEadores, los roles o cionales''''''''''''''''''''''''''''''''''&F Programador< Si' DiseEador< G$i de riesgos-'''''''''''''''''''''''''''''''''''''''>A PSe%nt< 9na %nvitacin ara entrar en el maravilloso mundo de la rogramacin''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' >> CHuI son los $ames acesD''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''>J Manual de MK"< L=M *ront"ontroller'''''''''''''''''''''''''''''''''''''''''''''''''''B> 9-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' F&

Env a t! art c!lo


CHuieres colaborar con HD MagazineD Puedes enviarnos tu art0culo a colaboraN.dmagazine'org

"# D$lo en p%&l$co


CHuieres enviar un comentario ara 7ue se ubli7ue en la zona 9-D )scr0benos a< lectoresN.dmagazine'org , ublica tu mensa!e en 8witter con el .as.tag OHDMagazine

ASCII ART !"# $#!% &C'(r)* (+ ,-.-/$' >> Pg. 48


uJ$$$$$$',J <$$h. .,J+. ,J$$$$$$$"z$F,J$$??$$h- =<$$C$$$>-.zJ"J?? $$ccc,. .r$$$$$$$$$$$$$$$$$F "?$$$hJ$$$$$'zJ$$$P" ,$z$$P$$F$hu J$h?$$$$$$$$$$$$$$$$$$$. ``$$$$$$$$$$$"" ,J$x$$$<$$L$$$N .P$$$$F""" ' `"??$$$h?$$$ucd$$$$$$$$$hcr$P"J?$$P""??$Lc$F J$JF `?$C`?$$$$$$"$"$$$$$$P",JP" `$$$F ?$F `?h..`"?$$$$$$$F" .,zP $$$$ cc u .. `$$P `"""" J$$" -c " $$$F ?F ,$ z$$$,ccu.,. `?$h ,J$'. $ . ,$$F ;h ????$$$$$$$$$$$u "h. p" u$" JF = " ;PP" `? <$hcr. `"""????$$r `;d" ,$" `" JP" $r $$$$$$$$$$hccccc ,P",, ,P" J$$$ .P" ? """""""???" ,p" """ J$$P" >' `c hcc,,. -=="F " uF `= `?$$$$-<$$h j' .,J$$$ .'" `\. ""?h.`$$$C " z$$$P" $$" " . .`"""""" ,cL..,,,cc,h `"$h,`$$$$$F ?$C `$$$$$$$$""<$ "?hu`"?$$F $$h. `???" .. ? "?hu cccccccccd$$$$$$$$ "?h."$$$$$$$$$$????" `?hu` zccccccd$$$$$$u `"h,"?$$$$$$$$$??"" `?h.' .;ccccd$$$$$c "$h."$$$$$$$$$$$$c "$h.?$$$??????"" .,zcccccccccccu. `?$u ,cc$$$$$$$$$c ,cc$$$P",cd$$$$$$$$$$$$P"""".zc$$$,?$h $$$$$$$$$$$$. ,J$$$$P",cd$$$$$$$$??"".,ccd$$$$$$$$$$$ $$h`"""""".,,,,, h ;J$$$P",c$$$$$$?"",ccc$$$$$$$$$$$$$$$$$$$ $$$ $$$$$$$$$$$$ `$ x$$?",d$$$$?",cd$$$$$$$$$$$$$$$$$P". . .`;$$',$$$$$$$$$$$F;, ?h.__,zc$$??",cd$$$$$$$$$$$$$$$$$P" zc<$$'$F',J$$F,cccccccccccc J$$$u `"""""",zc$$$$$$$$$$$$$$$$$P"",;J$r"" ",uccd$$$F J$$$$$$$$$$P J$$$$$h `$$$$$$$$$$$$$$$$$??",zc $$F .uJ$$$$$$$$$P'..""""""""""",$$$$$$$$ "?$$$$$$$??""",cr$$??""'c$$$$$$$$$$$$P" <$$$$$$$$$$",J$$$$$$$P" `"`?? ??" `"?$$$$$$$$$",ccc,.```"???".,c,""?CLz> "??""' J$$$$$$$$$$" ?????????"

'ont(ctanos
CHuieres enviarnos un comentario en PrivadoD )nv0anos un ePmail a< contactoN.dmagazine'org

Ha) !n donat$vo
CHuieres a oyarnos econmicamenteD )nv0anos un ePmail a< donacionesN.dmagazine'org

*erc+and$s$n,
Kisita nuestro Qeb Store y a yanos econmicamente ad7uiriendo merc.andising de Hackers & Develo ers .tt <::store'.dmagazine'org

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

P(sate a ./"0L$n!1 con Arc+ L$n!12 Parte 3

Arc+ L$n!12 la d$str$&!c$4n $deal para pr$nc$p$antes 5 e1pertos 6!e 6!$eran moldear s! s$stema a part$r de !na &ase m n$ma 5... 78!9 adoren la l nea de comandos# En esta pr$mera entre,a: *ar a ;os9 nos ense<a como dar n!estros pr$meros pasos.

Escrito por: *ar a ;os9 *ontes D a) (Archera & Python)


Estudiante de Grado 3n,en$er a en =ecnolo, a de la $n>ormac$4n. T cnico en in!orm"tica de #esti$n. %onitora &P'. Docente de pro,ramac$4n P5t+on 5 Scratc+ (ara nios de )*1+ aos. Acti,ista de- so!t.are -i/re y cu-tura -i/re.
?e&s2 0-o#1 htt(122archnin!a./-o#s(ot.com.es2 Redes soc$ales2 T.itter1 @**ontesD$a)

rch no se /asa en nin#una otra distri/uci$n GN3245N36, (ero se ins(ira en -a sim(-icidad de 7-ac8.are, 9ru: y 07;. &ue creada (or <udd =inet en +001 y su (rimer -an>amiento !ue e- 11 de mar>o +00+. A (artir de +00?, e- (royecto es diri#ido (or Aaron Gri!!in. 4os cincos (rinci(ios @ue constituyen -a !i-oso!Aa de Arch son1 1. S$mpl$c$dad2 7e re!iere a una estructura /ase sin a#re#ados @ue (ermite ausuario mo-dear e- sistema de acuerdo a sus necesidades. +. Prec$s$4n del c4d$,o por enc$ma de la comod$dad2 Es decir, -a e-e#ancia y eminima-ismo de/er"n (ermanecer siem(re a -a m":ima (rioridad. B. 'entrado en el !s!ar$o2 Tiene como o/Ceto ser c$moda y d"ndo-e e- com(-eto contro- y res(onsa/i-idad so/re e- sistema. D. A&$erto2 3ti-i>a herramientas sim(-es, @ue son se-eccionadas o construidas con !i-oso!Aa de c$di#o a/ierto. E. L$&re1 Pro(orciona -a -i/ertad de tomar cua-@uier decisi$n so/re e- sistema.

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

2$9:L%$9R

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

keep it short and simple!


3na caracterAstica im(ortante es @ue se trata de un Rolling Release. FEso @u si#ni!icaG Hue no hay ,ersiones, adem"s, (odemos actua-i>ar e- sistema con un s$-o comando.

%nstalacin de #rc. Linu;< Parte =


4o (rimero @ue de/emos hacer es descar#ar -a -tima ima#en de Arch en1 htt(s122....arch-inu:.or#2do.n-oad2 9on esta ima#en (odemos #ra/ar un 9; o ;=;, usar-a montada como ima#en 57', o (asar-a a un dis(ositi,o 370. Para (asar-a a un dis(ositi,o 370, (odemos uti-i>ar e- comando dd1
# dd if=archlinux.iso of=/dev/sdx

7iendo 0d#10!dx nuestro dis(ositi,o. 9uidado en este (aso, (ues -a unidad destino (erder" -os datos. No se hace so/re una (artici$n ( 0d#10!dxy), sino so/re e- dis(ositi,o com(-eto. Antes de -an>ar e- comando, de/emos ase#urarnos @ue est desmontado. A- iniciar nos encontramos con un men. 4as dos (rimeras o(ciones son (ara iniciar -a insta-aci$n (0oot Arch4inu:). 3na inicia Arch de B+ /its (i)I))J -a si#uiente inicia Arch (ara sistemas de )D /its (:I)K)D). En caso de @ue nuestro e@ui(o no so(orte )D /its, no a(arecer" -a o(ci$n.

"omenzamos<
1. 'on>$,!rac$4n del teclado. E- tec-ado (or de!ecto ,iene con!i#urado en in#- s. Para (oner-o en Es(ao-1
# loadkeys es

B. 'onectar la red E- demonio dhcpd se inicia autom"ticamente, con -o @ue, si nuestra cone:i$n es (or ca/-e, de/erAa estar con!i#urada. En caso de @ue nuestro router no dis(on#a de ;L9P, de/eremos asi#nar -a 5P de !orma manua-1 Nomenc-atura1 E- nom/re de -a inter!a> es, norma-mente, et+0. 7i hay m"s de una tarCeta de red, se#uir"n -a secuencia, (or eCem(-o et+1 , et+B... Acti,amos -a inter!a> de red, -e asi#namos -a direcci$n 5P y aadimos -a (uerta de en-ace (Gate.ay). Por eCem(-o, nuestra inter!a> es et+0, nuestra 5P ser" 1M+.1)I.0.+ y nuestra (uerta de en-ace 1M+.1)I.0.11
# ip link set eth0 up # ip addr add 192.168.0.2/255.255.255.0 dev eth0
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

# ip route add default via 192.168.0.1

Nos !a-ta de!inir -os ser,idores de ;N7. Para e--o editamos e- !ichero 0#"c0r#!'21.c'-3
# nano /etc/resolv.conf

y -os aadimos1
nameserver 8.8.8.8 nameserver 8.8.4.4

En e- caso de @ue nuestra cone:i$n de/a ser .i!i (ha/r" @ue con!i#urar des(u s otra ,e>, (uedes o/,iar este (aso si no es necesario), (ara conocer e- nom/re de -a inter!a> creada, uti-i>aremos1
# iwconfig

7i, (or eCem(-o, -a inter!a> creada es Elan0, dado @ue tenemos netc!# dis(oni/-e en -a ima#en, (ara con!i#urar -a red uti-i>aremos .i!i*menu1
# wifi-menu wlan0

-. Preparar el d$sco d!ro En GN324inu:, -os discos duros se re(resentan con un archi,o. E- (rimer disco duro 5;E (master (rimario) es 0d#10hd), e- esc-a,o (rimario es 0d#10hd( y asA sucesi,amente. 4os discos 7975 $ 7ATA si#uen -a misma con,enci$n, s$-o @ue en !orma de 0d#10!dX. 4a (artici$n de disco es donde e- sistema de archi,os ser" creado y donde insta-aremos Arch. 9omo mAnimo se recomienda dos (articiones una (ara -a raA> de- sistema de archi,os (2) y otra (ara e- "rea de intercam/io (s.a(). Para rea-i>ar -a (artici$n dis(onemos de ,arias herramientas1 c3d/!4 ((articiones %0N), c5d/!4 ((articiones GPT) y p)r"#d. 9&;57O, 9G;57O.* 7on editores de (articiones. 7u inter!a> est" en -Anea de comandos y se maneCa con -as !-echas de- tec-ado y con -a tec-a Enter. Po he creado tres1 una (ara -a raA> ( 2 ), otra de intercam/io (s.a() y otra (ara -os datos (2home). 7u(oniendo @ue nuestro disco sea e- 0d#10!d)1
# cfdisk /dev/sda (/ !ew-" #rimary-" $%&' -"'eginning-"(ype-"8) (swap !ew-" #rimary-" *&' -"'eginning-"(ype-"8$ (/home !ew-" #rimary-" +esto del disco -"'eginning-"(ype-"8)

Nos (osicionamos so/re sda1 (2) y marcamos 0oota/-e (ara @ue se (ueda iniciar desde e--a. E-e#imos Qrite, nos (edir" con!irmaci$n, escri/imos RyesS y (resionamos ENTEN &ormateamos -as (articiones, acti,amos s.a( y de!inimos -os (untos de montaCe de
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

nuestro sistema1
# # # # # # mkfs.ext4/dev/sda* mkfs.ext4 /dev/sda) mkswap /dev/sda$ swapon /dev/sda$ mount /dev/sda* /mnt mkdir /mnt/home ,, mount /dev/sda) /mnt/home

C. 3nstalar del s$stema &ase


# pacstrap /mnt -ase -ase-devel

7i dis(onemos de cone:i$n ca/-eada


# pacstrap /mnt ifplugd

7i nuestra cone:i$n es .i!i1


# pacstrap /mnt wireless.tools wpa.supplicant wpa.actiond dialog

=amos a insta-ar tam/i n una uti-idad (ara #enerar mirrors actua-i>ados (ara e- #estor de (a@uetes1
# pacstrap /mnt reflector

Generamos e- archi,o de edici$n de (untos de montaCe, 0#"c03!")(


# genfsta- -/ /mnt "" /mnt/etc/fsta-

D. 'on>$,!rar el s$stema &ase Pa tenemos insta-ado nuestro sistema /ase. Ahora ,amos a entrar en # arch-chroot / mnt

;e!inimos e- nom/re de nuestra m"@uina (h'!"-)$#), en mi caso, arc+n$n>a1


# echo archninfa " /etc/ hostname

Para con!i#urar e- idioma, (rimero de/emos editar 0#"c02'c)2#.5#-1


# nano /etc/locale.gen

P descomentamos -a -Anea corres(ondiente a nuestro idioma, @uitando -a T. Para es(aode Es(aa1


es.01./(2-8 /(2-8

;es(u s de se-eccionar e- idioma, eCecutamos1


# locale-gen # echo 34!&=5es.01./(285 " /etc/locale.conf # echo 36.(780=es.01./(28 "" /etc/locale.conf

%a(a de- tec-ado1


# echo 90:84#=es " /etc/vconsole.conf

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

Para -a Uona horaria, (odemos ,er -as dis(oni/-es con1


# ls /usr/share/;oneinfo

7i @ueremos ,er -as su/>onas, (or eCem(-o, de Euro(a1


# ls /usr/share/;oneinfo/0urope/

Para se-eccionar una, (or eCem(-o Es(aa1


# ln -s /usr/share/;oneinfo/0urope/8adrid /etc/localtime

Arch uti-i>a e- re-oC 3T9 (or de!ecto. 7i nuestro sistema ,a a con,i,ir con otros, -a con!i#uraci$n de/e ser -a misma en todos. Para esta/-ecer Arch como -oca-time (si Arch ,a a ser nuestro sistema (rinci(a-, se aconseCa con!i#urar como 3T9 e- resto de sistemas)1
# hwclock --systohc --utc

Esta/-ecemos -a contrasea de root (e- usuario administrador de- sistema)


# passwd

En un sistema mu-tiusuario, no es aconseCa/-e uti-i>ar -a cuenta root (ara todo. 7u uti-i>aci$n de/e @uedar reser,ada a tareas administrati,as. Para crear nuestro usuario, dis(onemos de dos m todos, )ddu!#r (interacti,o) y u!#r)dd. 9reemos un usuario, (or eCem(-o, n$n>a, con #ru(o (rinci(a- !sers1
# useradd -m -g users -s /-in/-ash # passwd ninfa ninfa

Ahora con!i#uramos -a -ista de ser,idores (ara e- #estor de (a@uetes1


# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.-ackup # echo <reflector -l *% --sort age --save 2etc2cron.dai-y2re!-ector T chmod V: 2etc2cron.dai-y2re!-ector T 2etc2cron.dai-y2re!-ector /etc/pacman.d/mirrorlist<"

F. 'on>$,!rar la red ;is(onemos de ,arios (er!i-es de eCem(-o (ara con!i#urar nuestra red en 0#"c0-#"6'r4.d0#x)$p2#!01 et+ernetHd+cp1 (ara redes ca/-eadas con routers @ue dis(on#an de so(orte ;L9P. et+ernetHstat$c1 (ara redes ca/-eadas con 5P est"tica. E$relessHEep1 (ara .i!i con se#uridad QEP. E$relessHEpa1 (ara .i!i con se#uridad QPA.

En mi caso, -a red es .i!i, -a inter!a> es Elan0, e- nom/re de -a red es /!estraRed, con


AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

se#uridad ?PA, c-a,e /!estra'lave y (or DH'P. E- (er!i- se --amar" m$red


# cp /etc/network.d/examples/wireless-wpa /etc/network.d/mired

Editamos e- archi,o y esta/-ecemos nuestros datos, @uedando de !orma simi-ar a1


6=!!06(7=!=<wireless< >016+7#(7=!=<4 simple ?#4 encrypted wireless connection< 7!(0+2460=<wlan0< 106/+7(:=<wpa< 0117>=<NuestraRed< ## /ncomment if the supplied 0117> is hexadecimal #0117>.(:#0=<hex< 90:=<NuestraClave< 7#=<dhcp< # /ncomment this if your ssid is hidden #@7>>0!=yes

Para acti,ar -a cone:i$n autom"tica1


# systemctl ena-le net-auto-wireless.service

7i nuestra red es ca/-eada1


# systemctl ena-le net-auto-wired.service

G. 3nstalar ,r!& J,estor de arran6!eK


# pacman -1 gru---ios os-pro-er # gru--install --target=i)8A-pc --recheck /dev/sda

Para e,itar @ue a(are>ca en e- inicio un error (or !a-ta de- archi,o de idioma es(ao- (an no inc-uido)1
# # # # mkdir -p /-oot/gru-/locale cp /usr/share/locale/enBCDuot/36.80114&01/gru-.mo /-oot/gru-/locale/es.mo export 34!&=es.01./(2-8 mkinitcpio -p linux

Generaremos e- men de arran@ue1


# gru--mkconfig -o /-oot/gru-/gru-.cfg

I. Re$n$c$ar el e6!$po Antes de reiniciar, acti,aremos e- daemon cron1


# systemctl ena-le cronie.service

7a-imos de- entorno chroot, desmontamos y reiniciamos1


# exit # umount /mnt/home ,, umount /mnt # re-oot

'oncl!s$4n

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

9$mo en todo sistema, -os (asos a se#uir son1 1. 9on!i#uraci$n de- tec-ado en e- insta-ador (si no -o hace (or de!ecto) +. 9on!i#uraci$n de -a red (en otros no serAa necesario, (ero (ara Arch es im(rescindi/-e) B. 7e-ecci$n y (re(araci$n de- disco duro. D. 5nsta-aci$n /ase (en a-#unos sistemas (ueden inc-uir hasta -os escritorios, a@uA es -o mAnimo (ara (oder em(e>ar a !uncionar) E. 9on!i#uraci$n de sistema (idioma, >ona horaria, esta/-ecimiento de -a c-a,e de root, creaci$n de- (rimer usuario...) ). 5nsta-aci$n de un #estor de arran@ue. ?. Neinicio. A (artir de a@uA, ya tenemos un sistema !unciona-. En e- (r$:imo artAcu-o con!i#uraremos !ud', e- arran@ue #r"!ico e insta-aremos un escritorio. Re>erenc$as
httpsE//wiki.archlinux.org/index.php/'eginners<.&uide httpsE//wiki.archlinux.org/index.php/!etcfg httpsE//wiki.archlinux.org/index.php/1ystemd httpsE//wiki.archlinux.org/index.php/&+/'$ httpsE//wiki.archlinux.org/index.php/#artitioning

'

"

'

D+M es una tecnolog0a 7ue controla y restringe lo 7ue uedes .acer con los medios y dis ositivos digitales de tu ro iedad' Desde la *ree Software *oundation, a travIs de Defective /y Design, estamos traba!ando !untos ara eliminar el D+M como una amenaza a la innovacin en los medios de comunicacin, la rivacidad de los lectores y la libertad de los usuarios' $, S)#S +)HS$ D) 89S P+,P%,S D%SP,S%8%K,S' %$*T+M#8) )$<

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

10

.!$>$.net2 la red a&$erta l$&re 5 ne!tral

Las telecom!n$cac$ones en n!estro pa s est(n controladas por ,randes empresas monopol$stas: los !s!ar$os Jso&retodo de las )onas r!ralesK +artos del mal serv$c$o dec$d$eron desple,ar ellos m$smos s! prop$a red de telecom!n$cac$ones.

Escrito por: La!ra *ora (Administradora de Nedes y 7istemas GN324inu:)


La!ra es administradora de Redes 5 S$stemas ./"0L$n!1 en 9ata-ua. Tiene una -ar#a trayectoria en -a consu-torAa de so-uciones te-em"ticas openso!rce (ara mo,imientos socia-es. 4a /ase de sus (royectos es e- empoderam$ento tecnol4,$co de -as (ersonas.
?e&s2 0-o#1 htt(122/-ac8ho-d.nuse(as.com2 Qe/1 htt(122de-anit.net Redes soc$ales2 T.itter 2 5denti.ca1 @Mlack+oldN

asi (arece im(osi/-e hasta donde est" --e#ando este (royecto, (ero -o @ue (odemos ,er hasta ahora es s$-o e- comien>o de -o @ue (uede --e#ar a ser einternet de- !uturo. Todo em(e>$ en +00D, cuando un hom/re @ue ,i,Aa en ecam(o y tra/aCa/a en -a ciudad @uerAa hacer una cosa tan sim(-e como conectarse a internet desde su casa, (ero a- ,i,ir en un entorno rura-, dicha em(resa no era tan senci--a. 9ontact$ con e- 57P de -a >ona y ste se ne#$ a o!recer-e una so-uci$n ,ia/-e, /"sicamente, traer-e una cone:i$n a internet en su casa no era renta/-e. 9omo su ,ecino2hermano sA tenAa cone:i$n decidieron hacer un en-ace .i!i con un materiacarAsimo @ue ha/Aa traAdo Namon Noca de uno de sus ,iaCes comercia-es a Estados 3nidos y com(artir -a cone:i$n a internet entre hermanos. Esta (ro/-em"tica era #enera-i>ada en toda -a comarca y -a ,o> em(e>$ a correr como eaireW

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

+)D)S

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

11

2uifi< J aEos des uIs


Actua-mente esta red ha ido creciendo y dis(one de m"s de 1I.?00 nodos o(erati,os y un nmero inca-cu-a/-e de usuarios, siendo -a red .i!i ciudadana mas #rande de- mundo.

Esto -e ha otor#ado a- (royecto de #ui!i.net numera/-es reconocimientos como e(remio de te-ecomunicaciones de -a Genera-itat de 9ata-ua en e- +00?, en +00I e59T+00I -o nom/r$ como miem/ro de -a E!ropean /etEork o> L$v$n, La&s y -os dos -timos aos est" tra/aCando conCuntamente con -a 3ni$n Euro(ea con -os (royectos 'O/O3/E y M!M (donde entre otras cosas, se estudia como tendrAa @ue ser -a conecti,idad a XinternetX en Euro(a de cara a- !uturo). 9ontinuamente e- (royecto est" siendo nom/rado en medios de radio y te-edi!usi$n y (rensa escrita, adem"s de -os (e@ueos reconocimientos territoria-es donde se e:(ande.

BuB: Bottom Up Broadband, no esperes a que la fibra llegue a tu casa, organzate con tus vecinos, trala luego busca donde conectarla!

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1B

En -os -timos aos -os usuarios de esta red decidieron ir a mas y (ro/ar otro ti(o de tecno-o#Aas, siendo ahora una de -as m"s no,edosas, -a de -a !i/ra $(tica, @ue (ermite en-aces entre (untos mucho m"s esta/-es y a mucha mas a-ta ,e-ocidad (ermitiendo asA interconectar >onas a-eCadas #eo#r"!icamente. Pero dicha meCora im(-ica a-#unas di!icu-tades de #esti$n y tam/i n de costes.

E- a!"n de esta tecno-o#Aa em(e>$ hace ya D aos (,erano de- +00I) en Gur/, -a misma (o/-aci$n a -a @ue nos re!erAamos a- (rinci(io de este artAcu-o. Entre ,arios ,ecinos a-eCados entre e--os, decidieron com(rar + @ui-$metros de !i/ra $(tica y conectar sus %asAas. 4a (ro/-em"tica (ero esta/a (or d$nde (asa/an e- ca/-eJ mirando e- (aisaCe -o tu,ieron c-aro1 durante -a dictadura !ran@uista a-#uien (-ant$ en sus cam(os unos (ostes @ue o!recAan ser,icio te-e!$nico (y no mucho mas), adem"s de @ue eran un estor/o amomento de -a/rar -os cam(os, asA @ue estudiaron -e#a-mente -a (osi/i-idad de tender 73 !i/ra $(tica (or dichos (ostes @ue !Asicamente esta/an en 737 terrenos. 4a -ey esta/a a su !a,or, asA @ue -o nico @ue tenAan @ue hacer era hacer una noti!icaci$n con!orme e--os (como o(erador de te-ecomunicaciones re#istrado en -a 9%T en e- +00M) i/an a (asar un ca/-e (or sus (ostes (remarcar, unos (ostes ahora (ro(iedad de una em(resa (ri,ada, insta-ados hace muchos aos (or una entidad (/-ica y (a#ados con edinero de todos). Por su(uesto esto no #ust$ nada a -a em(resa (ro(ietaria e hi>o -o (osi/-e (ara (oder denunciar-os y (arar-es -os (ies, (ero sin :ito.

"uifi!net est# registrado desde $%%& como operador de 'elecomunicaciones en la (omisi)n del *ercado de 'elecomunicaciones +(*',
3na ,e> conectados, tenAan una intranet con una ,e-ocidad im(actante (121G/(s), (ero se#uAan sa-iendo (or cone:iones A;74 de muy /aCa ca-idad, asA @ue /uscaron -a !orma (ara conectar un tramo de esta !i/ra a -a !i/ra $(tica (/-ica @ue (asa/a (or -a carretera de- -ado y @ue Custo ha/Aan aca/ado de re!ormarJ inicia-mente todo eran (e#as e im(osi/-es, hasta @ue amena>aron en cortar -os B carri-es de -a carretera -os !ines de semana, asA -os @ue i/an a es@uiar, (odrAan (asar, (ero tendrAan @ue (asar (or e- arc n, re(resentaci$n de -a !rustraci$n @ue sentAan -os ha/itantes de a@ue--a tran@ui-a >ona rura- con e- tema de -as te-ecomunicaciones. A -os (ocos dAas (!ina-es de- otoo de- +00M), (udieron conectar su !i/ra a -a carretera y asA --e#ar a 0arce-ona donde est"n com(rando un Gi#a/it sAncrono a un (ro,eedor mayorista y -o est"n re(artiendo entre -os usuarios #racias a -as asociaciones y em(resas re#istradas como o(eradores de te-ecomunicaciones (microo(eradores).

4as historias de -a !i/ra $(tica si#uen, (ero -o deCaremos m"s ade-ante (ara otro artAcu-o m"s t cnico 1)

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1-

La red y las comunidades wireless


Tras estas historias de insta-aciones de !i/ra $(tica, @ue de momento son una minorAa, est" tam/i n otra (arte t cnicamente im(actante y /onita de- (royecto, -a de -a comunidad .ire-ess, toda esta #ente @ue de !orma a-truista, comercia- o coo(erati,ista, (oco a (oco han ido teCiendo una red ma--ada de m"s de 1?.I00 (untos re(artidos (or toda -a PenAnsu-a 5/ rica.

3n usuario si @uiere conectarse a -a red de #ui!i, -o @ue tiene @ue hacer es marcar su (unto en -a ("#ina .e/, esco#er d$nde se ,a a conectar, com(rar e- hard.are necesario (ara conectarse, descar#arse e- !ichero de con!i#uraci$n y conectarse a -a red. A (artir de ahA acceder a todos -os ser,icios @ue te o!rece esta red. Pre,iamente en -a >ona tiene @ue ha/er una mAnima in!raestructura. A- momento de dar de a-ta tu nodo en -a .e/ (ero, a- i#ua- @ue cuando insta-as un so!t.are, de/es ace(tar unos t rminos de uso, -a 6'4N (e- (rocomn de -a Ned, A/ierta, 4i/re y Neutra-), en -os cua-es se dictan -as normas /"sicas de !uncionamiento y uso de -a red en -as cua-es se /asan en1

1. Es a&$erta (or@ue se o!rece de !orma uni,ersa- a -a (artici(aci$n de todos sin nin#n ti(o de e:c-usi$n o discriminaci$n y (or@ue se in!orma en todo momento acerca de c$mo !unciona -a red y sus com(onentes, -o @ue (ermite @ue cua-@uiera (ueda meCorar-a. B. Es l$&re (or@ue todos (ueden hacer -o @ue @uieran y dis!rutar de -as -i/ertades ta- y como se (re, n en -a re!erencia de -os (rinci(ios #enera-es (a(artado 5.), todo esto inde(endientemente de su ni,e- de (artici(aci$n en -a red y sin im(oner t rminos y condiciones @ue contradi#an este acuerdo de !orma uni-atera-. -. Es ne!tral (or@ue -a red es inde(endiente de -os contenidos, no -os condiciona y, asA, (ueden circu-ar -i/rementeJ -os usuarios (ueden acceder y (roducir contenidos inde(endientemente de sus (osi/i-idades !inancieras o condiciones socia-es. 9uando se incor(oran contenidos a -a red en #ui!i.net se hace con e- !in de estimu-ar su a(arici$n, #estionar meCor -a red o sim(-emente como eCercicio de incor(orar contenidos, (ero en nin#n caso con e- o/Ceti,o de sustituir o /-o@uear otros contenidos.

7i tras esto an no tienes su!iciente, (uedes contri/uir en e- (royecto ayudando a otros a conectarse a -a red, a meCorar -as herramientas de -os administradores y -os usuarios (se necesitan de,e-o(ersW), di!undi ndo-o, etc.

Ponte en contacto con -a comunidadWY1Z


P1Q

L$sta de correo2 htt(s122-ists.#ui!i.net Ooros2 htt(122#ui!i.net2!orum

3R'2 irc.#ui!i.net T#ui!i

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1C

'!ando se t$ene !na ,ran >am$l$ar$dad con s$stemas &asados en Rn$1: la tr$pleta S+ell+V$+Re,e1 proporc$ona !n 3DE s$n pretens$ones. Al pr$nc$p$o p!ede ser !n poco con>!so para los desarrolladores en len,!aSes de alto n$vel de a&stracc$4n: pero el dom$n$o de estas +erram$entas no toma m!c+o t$empo 5 perm$te aprovec+ar al m(1$mo los comandos del s$stema operat$vo.

Escrito por: El$)a&et+ Ram$re) (5n#eniera E-ectr$nica)


Desarrolladora de so>tEare, &ormer Lead o! En#ineerin# en Gi!tLit (7ocia- Gi!tin# A((), O!ndadora de Van$lla (0i--in# and Ne,enue %ana#ement AP5s). %iem/ro de 5EEE 7i#na- Processin# 7ociety, Ne. Por8 7ection. RQantre(reneurS.
?e&s2 A/out me1 htt(122a/out.me2e-i>a/ethr =ani--a1 htt(122....,ani--aa((.co Redes soc$ales2 =E$tter2 @eram$rem

(esar de -a #ran (o(u-aridad de -en#uaCes modernos, como Nu/y y Python, dea-to ni,e- de a/stracci$n de -a m"@uina y de- sistema o(erati,o @ue dichos -en#uaCes (ermiten y de su -en#uaCe natura- @ue hace m"s !"ci- su uso, -os desarro--adores de so!t.are no de/en desconocer -as ,entaCas de estar re-ati,amente m"s cerca de -a m"@uina. E:isten herramientas @ue se inte#ran de manera trans(arente en sistemas o(erati,os /asados en [ni:, @ue si /ien no est"n orientadas a- desarro--o de a(-icaciones con inter!aces de usuario so!isticadas, (ermiten rea-i>ar desde -a eCecuci$n de tareas /"sicas, a ni,e-es a,an>ados de automati>aci$n y o(eraci$n. ;ado esto, e- shell scripting no ha (asado de moda.

)l s.ell
Primero @ue todo, (ara a@ue--os -ectores @ue -o desconocen1 F@u es e- she--G E- she-- es
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

SH)LL S"+%P8%$2

La $mportanc$a del s+ell: v$ 5 re,e1

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1D

una herramienta de comunicaci$n (rimaria con e- sistema o(erati,o a tra, s de -a -Anea de comandos. A- iniciar una sesi$n en e- sistema o(erati,o, e- she-- es car#ado en -a termina- de dicha sesi$n. E:isten ,arios ti(os de she--1 The 0ourne 7he--, e- ori#ina- sh escrito (or 7te(hen 0ourneJ e- 9 7he--, conocido como csh, cuya sinta:is se asimi-a mas a- -en#uaCe 9, haci ndo-o mas uni!orme con e- sistema o(erati,oJ e- Oorn 7he--, o ksh, e- cua- inc-uye !unciona-idades de 52' mas a,an>adas. 3n scri(t en she-- es un archi,o @ue contiene un conCunto de comandos (ara ser eCecutados (or e- she-- de manera secuencia-. E- inmenso (oder de she-- radica en tener todos -os comandos de- sistema o(erati,o dis(oni/-es de manera nati,a en tu (ro#rama. 4a mayorAa de -os comandos de- sistema o(erati,os est"n escritos en 9, asA @ue ha/-ando en t rminos de desem(eo, e- she-- es ini#ua-a/-e. Para i-ustrar -as ,entaCas de- she-- en e- desem(eo de ciertas acti,idades de (rocesamiento de datos, (ensemos en nuestro to(*E de comandos !a,oritos en [ni:. %i to(*E (ersona-mente es1 grep, find, host 2 dig, ps, touch. Ahora ha#amos e- eCercicio de encontrar e- e@ui,a-ente de estos comandos en a-#n -en#uaCe moderno. ESemplo2 0uscar en e- -o# de- daemon dhcpd -a MAC address de- host @ue rea-i>a una so-icitud de asi#naci$n de direcci$n 5P din"mica. 9omando a uti-i>ar1 grep.[ 1. En she-7inta:is.
grep F-a-cd>02&@h7iG3lmn=opD+1s/HvwxIJ F-4 numJ F-' numJ F-6FnumJJ F-e patternJ F-f fileJ F---inary-files=valueJ F--colorF=whenJJ F-colourF=whenJJ F--contextF=numJJ F--la-elJ F--line--ufferedJ F--nullJ FpatternJ Ffile KJ

ECem(-o.
output=Lgrep -io 5>@6#+0M/01(.NB(FO-Pa-fJBQ$BREB BQ%BRFO-Pa-fJBQ*BR5 S/>ocuments/dhcpd.logL

+. En ru/y 7inta:is.
enum.grep(pattern QT o-U T -lock R

ECem(-o.
open(0!HF<@=80<JV</>ocuments/dhcpd.log< do TfT f.grep(/>@6#+0M/01(.N(FO-Pa-fJQ$RE Q%RFO-Pa-fJQ$R/ puts line end end do TlineT

B. En (ython 7inta:is.
[ #re( como ,er/o en -a ,ida diaria1 #re( !or my 8eys, #re( !or my soc8s.
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1F

re.findall(patternW stringW flags=O

ECem(-o.
import os.path import re f = open(os.path.Uoin(os.path.expanduser(<S< W<>ocuments/dhcpd.log< W <r< .read( pattern = r<(>@6#+0M/01(.N (FO-Pa-fJQ$RE Q%RFO-Pa-fJQ$R< print re.findall(patternW fW re.7&!=+06410

En este (unto, es(ero @ue -os -ectores hayan entendido e- ar#umento @ue se (-antea. 4as im(-ementaciones de -os comandos de- sistema o(erati,o en di!erentes -en#uaCes modernos, son ,ersiones muy -imitadas y carecen de -os modi!icadores y desem(eo @ue (osee e- she--. Norma-mente cada -en#uaCe (ermite hacer --amadas a -os comandos deshe--, mediante a-#n m todo (backticks en Nu/y, os.system en Python), (ero con a-#unas -imitaciones y menor desem(eo.

Pi es, una de las me!ores contribuciones al s.ell


E- conce(to de pipelines en e- sistema o(erati,o, !ue creado (or ;ou#-as %c--roy. 0"sicamente, -os (i(e-ines re(resentan -a com/inaci$n de m-ti(-es comandos en una so-a -Anea, en donde -a sa-ida de- comando m"s a -a i>@uierda es -a entrada (ara ecomando m"s a -a derecha. 4a cone:i$n entre -os (rocesos eCecutados (or cada comando es rea-i>ada a tra, s de un pipe. 4a (otencia de -os (i(es radica en @ue todos -os (rocesos en e- (i(e-ine se eCecutan en (ara-e-o, aun@ue su sinta:is sea seria-. 9omo dato curioso, -os (i(es !ueron im(-ementados (or e- #enio Oen Thomson, en una so-a noche.

-e put pipes into U./0, he put this notation into shell, all in one night! *cllro refiri1ndose a 'homson!
%ediante -a com/inaci$n de comandos y (i(es en e- she--, se (ueden eCecutar tareas com(-eCas, de manera muy sim(-e. Por eCem(-o, determinar e- nmero de cone:iones a(uerto I0, es tan sim(-e como -a si#uiente -Anea1
netstat -an T grep E8O T wc -l

;e i#ua- manera @ue otros comandos, -as im(-ementaciones de (i(es en -en#uaCes modernos, consisten en m$du-os @ue a su ,e> usan e- she--, ta- como -a im(-ementaci$n de Python, (i(esJ rest"ndo-es asA desem(eo.

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1G

)l im o ular vi
4os usuarios de Sublime --aman RdinosauriosS a -os usuarios de vi. 4os usuarios de Emacs dicen de ,i @ue es e- editor moda- de- (ur#atorio. Hui>"s e- hecho @ue hace m"s im(o(u-ar a ,i, es @ue sea un editor moda-, es decir, @ue !uncione en dos modos de o(eraci$n1 e- modo command y e- modo insert. E- cam/io entre modos de o(eraci$n es /astante mo-esto (ara -os desarro--adores en 5;Es modernos. ;esde -ue#o, esto es un incon,eniente menor, des(u s de @ue se -o#ran asimi-ar en esu/consciente -os modos de o(eraci$n. En a-#unos casos, des(u s de usar (or mucho tiem(o ,i, escri/ir un documento en un (rocesador de te:to con,enciona- (uede ser con!uso, a- tratar de tec-ear do/-e d (ara /orrar una -inea. 4a mayor ,entaCa de ,i, es(ecA!icamente (ara desarro--o en she-- scri(tin#, es @ue (ermite acceder a- she-- sin a/andonar e- editor, -o cua- (ro(orciona una inte#raci$n uni!orme entre sistema o(erati,o, int r(rete de comandos y editor de te:to. E- editor ,i se inte#ra !"ci-mente con -os !i-ename .i-dcards de- sistema o(erati,o, -o @ue otros -en#uaCes modernos no hacen de una manera tan trans(arente. Por eCem(-o, #uardar una (arte de un archi,o /aCo un nom/re di!erente a- archi,o en uso, es senci--o usando -a notaci$n EnWmw filename.
E*W*Ow Smcastd.sh

E- modo command (ermite eCecutar un #ran nmero de !unciona-idades @ue se inte#ran con e- she--, entre -os m"s ti-es (odemos encontrar1 1. 9oncatenar una (arte de- archi,o en uso a otro archi,o Notaci$n EnWmw "" filename
E*W*Ow "" keep.alive.sh

+. 0orrar un ran#o de -Aneas @ue conten#an una e:(resi$n re#u-ar. E:ce-ente (ara /orrar -Aneas escritas (ara hacer debug. Notaci$n Eg/regex/d
Eg/logBs7!2=/d

B. 5nsertar en e- archi,o en uso -a sa-ida de un comando de- she--. Notaci$n ErX command command
ErX command ls -t

4a mayorAa de -os editores modernos, (ermiten a-#unas !unciona-idades simi-ares a -as @ue se encuentran en e- modo command de ,i (y sin cam/iar de modo), (ara /s@ueda y reem(-a>o, na,e#aci$n a tra, s de archi,os, etcJ mediante e- uso de shortcuts en etec-ado. 7in em/ar#o, -as -imitaciones !rente a ,i son e,identes y e- es!uer>o (ara a(render -a notaci$n en e- modo command de ,i o a(render -os shortcuts de otros editores, es (r"cticamente e- mismo.
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1I

Las otentes e; resiones regulares


3na ,e> m"s, (ara a@ue--os -ectores @ue descono>can e- tema, una e:(resi$n re#u-ar (o regex) es un strin# @ue contiene una com/inaci$n de caracteres norma-es y caracteres es(ecia-es. 4os caracteres, o metacaracteres, hacen match con ideas, como cantidad, ti(o, u/icaci$nJ entre otros. 4os caracteres norma-es hacen match con e--os mismos. Todo esto (ara encontrar (atrones @ue (ermitan -a mani(u-aci$n de te:to y datos. En -as dos secciones anteriores, se o/ser,a un tema recurrente y son -as e:(resiones re#u-ares, (ara detectar o /uscar (atrones es(ecA!icos durante e- (rocesamiento de te:to o -a eCecuci$n de un comando @ue reci/e como ar#umento una e:(resi$n re#u-ar. \stas (otencian e- uso de muchos de -os comandos de- she-- y (ermiten na,e#ar y sacar (artido de -as !unciona-idades de ,i. %uchos sistemas de tasaci$n de e,entos, @ue re@uieren (rocesamiento de e,entos en tiem(o rea-, uti-i>an e:(resiones re#u-ares (ara determinar e- ori#en y e- destino de un EDR (E,ent ;etai- Necord), (ara a(-icar una tari!a y determinar e- costo de- e,ento, en com/inaci$n con un a-#oritmo de binary search, (ara encontrar de manera e!iciente e- (atr$n ori#en*destino @ue coincida con e- e,ento reci/ido.

La me!or e; resin regular


F -SJ . Esta e:(resi$n hace match con cua-@uier car"cter A7955 desde es(acio hasta circun!-eCo, es decir, todos -os caracteres im(rimi/-es. ;e esta manera, es (osi/-e rea-i>ar -a ,a-idaci$n de un ar#umento en muy (ocos caracteres.

"onclusin
En a-#n momento de su ,ida, cua-@uier desarro--ador (odr" sentirse a#radecido de sa/er she--, ,i y re#e:. 7i /ien stos no !orman un 5;E (ara -en#uaCes modernos, dichas herramientas son muy ti-es (ara reso-,er (ro/-emas rea-es, @ue re@uieran e- rescate de -a (otencia de- sistema o(erati,o. E- she--, ,i y re#e: no son -os m"s a(tos (ara construir un sitio .e/ o una a(-icaci$n m$,i-. Pero (ara -a creaci$n de daemons, e- an"-isis de (rocesos y datos y hacer bootstrap de im"#enes en sistemas o(erati,os em/e/idos, son una e:ce-ente o(ci$n. Actua-mente e:isten a-#unas iniciati,as de emu-aci$n de- she-- en otros -en#uaCes. E(royecto nsh, es un (royecto e:(erimenta- @ue (retende emu-ar e- she-- en node.Cs. Para m"s in!ormaci$n, ,isitar (o hacer !or8W) htt(s122#ithu/.com2A,ian&-u2nsh
E S P A ' 3 O P " M L 3 ' 3 = A R 3 O

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

1L

S$ eres de las personas a las 6!e les ,!sta trad!c$r o 6!$)(s trad!c$r es t! +o&&5 >orever alone Jcomo el m$oK p!edes +acer 6!e esto sea !n &ene>$c$o a los dem(s al part$c$par en !n pro5ecto de so>tEare l$&re contr$&!5endo con la local$)ac$4n 5 trad!cc$4n del m$smo. Enc!entra a6! c4mo poder +acerlo en *ald$tas *ent$ras 5 en el e6!$po de trad!cc$4n al espa<ol de ./O*E. Veremos tam&$9n lo $mpres$onante 5 ,en$al del rol 6!e c!mplen los arc+$vos .PO en el proceso de trad!cc$4n.

Escrito por: *$la,ros Alessandra 3n>ante *ontero (Est. 5n#. 5n!orm"tica)


Est!d$ante de 3n,en$er a 3n>orm(t$ca. %iem/ro de APESOL (Asociaci$n Peruana de 7o!t.are 4i/re) y de -a comunidad de so!t.are -i/re L!men+ack. %iem/ro de- e@ui(o de traducci$n aes(ao- de ./O*E. A(asionada (or e- desarro--o de so!t.are, tecno-o#Aa y #ad#ets. ;e!ensora de tecno-o#Aas /asadas en so!t.are -i/re y de c$di#o a/ierto.
?e&s2 0-o#1 ....mi-a-e.net Redes soc$ales2 T.itter 2 5denti.ca1 @m$lale

i sa/es otro idioma (a(arte de tu -en#ua materna), si te #ustan -as traducciones (ya sea (or ho//y o (ro!esi$n) y -o m"s im(ortante si deseas co-a/orar en un (royecto de so!t.are -i/re rea-, hay muchas maneras de @ue e:(-otes esto en un /ene!icio (ara -os dem"sJ e:isten muchas comunidades, (royectos y m"s en -os cua-es contri/uir es un ,erdadero (-acer. En esta ocasi$n -es dir como (oder em(e>ar a traducir (ara GN'%E y -a #ran im(ortancia @ue -os archi,os .P' tienen en este (roceso. Para em(e>ar de/es suscri/irte a -a ("#ina de %a-ditas %entirasY0Z y -ue#o en,iar un correo e-ectr$nico a -a -ista (en este caso es -a -ista a- es(ao-)1 #nome*es* -ist]#nome.or# donde de/es (resentarte y decir @ue deseas co-a/orar con -os m$du-os.
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

S,* 8Q#+) L%/+) P 2$,M)

Los $mpres$onantes arc+$vos .PO T l10n de ./O*E

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

B0

;anie- %ustie-esY1Z, e- coordinador de- e@ui(o, te dar" -a /ien,enida e indicaciones c-aras @ue necesitas se#uir (ara !ormar (arte de- #ru(o y @ue te asi#ne e- m$du-o de- @ue te har"s car#o en e- !uturo. Por eCem(-o, e- m$du-o @ue ten#o asi#nado ahora es e- de &unciones de #numeric Y+Z, a@uA en -a ("#ina se encuentra en deta--e -os (orcentaCes de a,ance y e- hist$rico de acciones anteriores. 3no de/e in#resar con su cuenta, adescar#ar e- archi,o .(o de -a ("#ina (se #uarda directamente) y tra/aCamos con un editor de archi,o de traducci$n, #enera-mente es Gtrans-atorYBZ.

9sando 2translator
Gtrans-ator se encar#a de -os archi,os P' #ette:t. 9uenta con muchas !unciones como /uscar, reem(-a>ar, memoria de traducciones, ta/-a de mensaCes, una !"ci- na,e#aci$n, etc. A- iniciar e- (ro#rama de/emos hacer -as con!i#uracionesYDZ res(ecti,as. 4ue#o em(e>amos a traducir. \ste, cuenta con dos di,isiones (rinci(a-es1 en -a (rimera se encuentra e- te:to ori#ina- (en in#- s en este caso) y de/aCo, -a traducci$n rea-i>ada *o (or rea-i>ar*. 4os iconos de Gtrans-ator si#ni!ican -o si#uiente1 Prohi/ido1 -a cadena est" sin traducir. Ad,ertencia1 -a cadena es di!usa (esto @uiere decir @ue -a cadena esta/a traducida, (ero @ue ha cam/iado a-#o en e- c$di#o, (or -o @ue es (osi/-e @ue -a traducci$n haya @ue cam/iar-a.

;e/aCo, (odemos ,er tam/i n -os deta--es de- traductor y de- m$du-o, e- (er!i- es1 mi-a-e (mi nic8name) y -os dem"s datos de- archi,o .(o con e- @ue est"s tra/aCando, -a cadena @ue este se-eccionada (e- nmero y estado) y -a in!ormaci$n de -as dem"s cadenas1 enmero tota-, -as traducidas, -as di!usas y -as @ue est"n sin traducir.

4ue#o de terminada -a traducci$n, a- re#resar a -a ("#ina de %a-ditas %entiras y dem$du-o donde est"s tra/aCando, en -a (arte de Acci$n nue,a, (rimero se reser,a eAB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

B1

m$du-o, asA -os dem"s sa/r"n @ue ya a-#uien est" tra/aCando en e- m$du-o. 7ino, (odrAa ha/er un con!-icto a- hacer un do/-e es!uer>oJ des(u s de esto ya su/imos -a traducci$n nue,a, adCuntamos e- archi,o y a- en,iar-o en -a -ista de correos se reci/e un e*maiindicando @ue un nue,o commit se rea-i>$. Podemos ,er a@uA un eCem(-o de c$mo en -a secci$n de Acciones a(arecen -as -timas, -a reser,a y -a traducci$n su/ida a- re(ositorio con sus commits res(ecti,os.

2os escritores hacen la literatura nacional los traductores hacen la literatura universal! 3ose 4aramago!

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BB

#rc.ivos ' o
4os archi,os .(o (GetTe:t Porta/-e '/Cects), son archi,os de te:to (-ano en -os @ue se a-macenan cadenas de caracteres, cada una contiene e- mensaCe ori#ina- y -ue#o -a traducci$n. GetTe:t es un sistema de -oca-i>aci$n (-10n) e internaciona-i>aci$n (i1In) usado comnmente (ara escri/ir (ro#ramas mu-ti-in#^es. 7e trata de un sistema uni!icado (te:to ori#ina- y traducci$n) (or -o @ue -os archi,os resu-tantes sue-en ser i#ua-esJ contienen e- c$di#o !uente y -ue#o se o/tienen -os archi,os /inarios com(i-ados.

Los arc.ivos P,, P,8 y M,


Para mantener -as actua-i>aciones a- dAa, de/emos traducir -os archi,os .(o, (ero ahora ,eremos en deta--e @ue son -os archi,os .(ot y .mo tam/i n im(ortantes.YEZ P'T (Porta/-e '/Cect Tem(-ate)1 4a (-anti--a de o/Ceto (orta/-e es un archi,o @ue o/tienes cuando e:traes te:tos de -a a(-icaci$n, es e- archi,o @ue uno en,Aa a -os traductores. P' (Porta/-e '/Cect)1 Es e- archi,o @ue reci/es de ,ue-ta de -os traductores, es un archi,o de te:to @ue inc-uye -os te:tos ori#ina-es y -as traducciones. %' (%achine '/Cect)1 5nc-uye e- mismo e:acto contenido @ue e- archi,o P', se di!erencian en e- !ormato, so-o @ue e- P' es !"ci- (ara -a -ectura humana en cam/io e- %' est" com(i-ado y es !"ci- (ara @ue -a com(utadora -o entiendaJ eser,idor .e/ usar" e- archi,o %' (ara mostrar -as traducciones.

, eracin del gette;t


4a o(eraci$n rea-i>ada es -a si#uiente Y)Z1

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

B-

Pro,ramac$4n2 E- c$di#o !uente se modi!ica (rimero a usar --amadas #ette:t de GN3. Esto es, (ara -a mayorAa de -en#uaCes de (ro#ramaci$n, rea-i>ados (or cadenas en,ue-tas @ue e- usuario ,er" en -a !unci$n #ette:t. Para ahorrar tiem(o escri/iendo y reducir e- desorden de c$di#o, esta !unci$n es usua-mente asi#nada a K, e- c$di#o 91
printf(gettext(Y8y name is Zs. Bn[ W my.name \

ser"1
printf(.(Y8y name is Zs. Bn[ W my.name \

4os comentarios (inician con 222) co-ocados directamente antes de -as cadenas y est"n marcadas como su#erencias (ara -os traductores (or (ro#ramas de ayuda. _#ette:t_ uti-i>a -as cadenas dadas como c-a,es (ara /uscar traducciones a-ternati,as y de,o-,er" -a cadena ori#ina- cuando no haya traducci$n dis(oni/-e. _:#ette:t_ se eCecuta en -as !uentes (ara (roducir un archi,o .(ot o (-anti--a, @ue contiene una -ista de todas -as cadenas traduci/-es e:traAdas de -as !uentes. Por eCem(-o, un archi,o de entrada con un comentario (uede -ucir asA1
/// (+4>/6(=+01E #or favor deUar Zs como est]W porDue es necesario para el programa. /// &racias por contri-uir en este proyecto.

printf(.(58y name is Zs.\n5 W my.name \

:#ette:t se eCecuta usando este comando1


xgettext ^add-comments=/

E- archi,o .(ot resu-tante a(arecer" asA, con e- comentario1


#. (+4>/6(=+01E #or favor deUar Zs como est]W porDue es necesario para el programa. #. &racias por contri-uir en este proyecto. #E src/name.cE)A

msgid 58y name is Zs.Bn5 msgstr 55

=rad!cc$4n2 E- traductor deri,a un archi,o .(o de -a (-anti--a usando e- (ro#rama de ms#init. 4ue#o re--ena -as traducciones, ms#init inicia-i>a -as traducciones, (or eCem(-o (ara una traducci$n a- es(ao- e- comando a eCecutar ser" (E- c$di#o de- -en#uaCe a uti-i>ar se encuentra en e- -istado Y?Z)1
msginit --locale=es ^input=name.pot

7e crear" e- es.(o. E- traductor -ue#o edita e- archi,o resu-tante, hecho a mano o con una herramienta de traducci$n con su modo de edici$n (ara archi,os .(o. 3na entrada editada -ucir" asA1
#E src/name.cE)A msgid 58y name is Zs.Bn5 msgstr Y8i nom-re es Zs.Bn[

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BC

&ina-mente -os archi,os .(o est"n com(i-ados en e- archi,o /inario .mo con ms#!mt. ESec!c$4n2 E- usuario esta/-ece -a ,aria/-e de- entorno 49K%E77AGE7 y e- (ro#rama mostrar" cadenas en e- -en#uaCe se-eccionado si hay un archi,o .mo (ara esto.

3 ara terminar'''
4os archi,os .(o cum(-en una !unci$n muy im(ortante (ara e- (roceso de -oca-i>aci$n y traducci$n, es #enia- ,er cuanto tra/aCo hay detr"s de %a-ditas %entiras, -a a(-icaci$n .e/ @ue #estiona -a -oca-i>aci$n de GN'%E. 7i te #usta este mundo no dudes en animarte en ser (arte de- e@ui(o y adem"s de sa/er @ue tu contri/uci$n ayudar" a @ue e(royecto --e#ue cada ,e> m"s -eCos.

+eferencias & Links


Y0Z %a-ditas %entiras `htt(122-10n.#nome.or#2a/out2a Y9onsu-ta1 1+ de No,iem/re de +01+Z Y1Z htt(122-10n.#nome.or#2teams2es2 Y+Z htt(122-10n.#nome.or#2,ertimus2#numeric2master2(o*!unctions2es YBZ Gtrans-ator `htt(122(roCects.#nome.or#2#trans-ator2a Y9onsu-ta1 1E de No,iem/re de +01+Z YDZ htt(122mrui>.o(enminds.c-2/-o#2inde:.(h(2+00M20+20E2con!i#uracion*de*#trans-ator*1MB*en*u/untu2 YEZ Archi,os P', P'T y %' `htt(122....ican-oca-i>e.com2site2tutoria-s2ho.*to*trans-ate*.ith*#ette:t*(o*and*(ot* !i-es2a Y9onsu-ta1 1I de No,iem/re de +01+Z Y)Z htt(122en..i8i(edia.or#2.i8i2Gette:ta Y9onsu-ta1 +1 de No,iem/re de +01+Z Y?Z htt(122....#nu.or#2so!t.are2#ette:t2manua-2#ette:t.htm-T4an#ua#e*9odes

'

"

'

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BD

.oo,le es por e1celenc$a la empresa p$onera en los s$stemas de &%s6!eda 5 serv$c$os de 3nternet: con !na >$loso> a de $nnovac$4n e $mpacto en s!s serv$c$os como Ad?ords: AdSense 5 *aps por menc$onar al,!nos. En este art c!lo me en>ocar9 a la AP3 vers$4n - de .oo,le *aps.

Escrito por: Uecel5 D a) (%.5.A. & ;esarro--adora Qe/)


Pece-y es *aestra en 3ntel$,enc$a Art$>$c$al y Desarrolladora ?e&. A!icionada de -a Tecno-o#Aa, =ideoCue#os y -a Qe/. Ansiosa de a(render, contri/uir y (ro#ramar todas sus ideas. Ama -o @ue hace y e- c$di#o es su ,ida.
?e&s2 0-o#1 htt(122si-,ercor(..ord(ress.com Redes soc$ales2 T.itter1 @s$lvercorp

e ha con,ertido en una de -as AP5s m"s uti-i>adas de/ido a sus meCoras y ser,icios @ue /rinda, en esta -tima ,ersi$n tam/i n (uede ser usada en dis(ositi,os m$,i-es y a@ue--os @ue inc-uyan un na,e#ador Qe/ con im(-ementaci$n de <a,ascri(t, (ara a@ue--os @ue no son com(ati/-es -a AP5 (ro(orciona im"#enes de ma(a en !ormatos PNG, <PG y G5&. Puedes usar-a en tus sitios Qe/ comercia-es y sin "nimo de -ucro, en sus (o-Aticas se menciona @ue no (uede uti-i>arse (ara identi!icar -u#ares con acti,idades i-e#a-es ni (ara identi!icar in!ormaci$n (ri,ada re-acionada con (ersonas. Actua-mente es #ratuita si -a uti-i>amos en sitios Qe/ con un m":imo de +E,000 car#as de ma(as diariamente y un m":imo de +,E00 car#as diarias de ma(as en caso de @ue hayamos modi!icado e- esti-oJ si re/asamos estos -Amites de uso de/eremos ad@uirir una -icencia Premier. 7i consideras @ue tu sitio so/re(asa este -imite de/erAas reconsiderar ad@uirir -a -icencia $ uti-i>ar otros ser,icios como '(en 7treet %a(, '(en 4ayers, %a(Huest, entre otros. Para este caso me en!ocar a -a ,ersi$n #ratuita y te mostrar como uti-i>ar-a, modi!icar su esti-o y a#re#ar marcadoresJ antes @ue nada te menciono a-#unos as(ectos /"sicos
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

2,,2L) M#PS

.oo,le *aps AP32 Pr$meros Pasos

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BF

@ue de/es conocer. 3na AP5 (de- in#- s A((-icacion Pro#rammin# 5nter!ace) es un conCunto de m todos @ue /rindan una -i/rerAa (ara ser usada (or a(-icaciones e:ternas, es decir, una inter!a> de comunicaci$n. Entre -as ,entaCas de usar una AP5 es -a inte#raci$n de un ser,icio Qe/ en nuestros desarro--os, -a mayorAa tiene m todos ro/ustos, y nos (ermite o-,idarnos de im(-ementar desde cero a-#una !unci$n @ue ya nos (ro(orciona. 7in em/ar#o, de/emos tomar en cuenta @ue (or ser una a(-icaci$n de terceros de(endemos de otras (ersonas, (or -o @ue si hay cam/io en sus !unciones, dis(oni/i-idad y hasta costos nos ,eremos en -a necesidad de rea-i>ar actua-i>aciones o en todo caso /uscar otra o(ci$n. 4os e-ementos /"sicos @ue de/emos tener en cuenta a- usar -a AP5 son1 A#re#ar e- c$di#o <a,ascri(t de -a AP5 Es(eci!icar en @ue contenedor ser" des(-e#ado nuestro ma(a 5ndicar -a -on#itud y -atitud de- -u#ar donde deseamos (osicionarnos 9on!i#urar e- ti(o de ma(a, es decir si ser" de ti(o Noadma(, 7ate--ite, Ly/rid $ Terrain. P (or -timo una !unci$n @ue inicia-ice e- des(-ie#ue de- ma(a.

Lay m"s caracterAsticas y e-ementos @ue (odemos inc-uir (ara @ue tu im(-ementaci$n sea tan com(-eta como tu re@uieras.

Mi rimer ma a
Es momento de conocer -a AP5 y @ue meCor !orma @ue (racticando y ,isua-i>ando tu tra/aCo, ima#ino te (re#untar"s F@ue necesitoG, nicamente tu editor !a,orito (7u/-ime Te:t, Note(adVV, 9oda, etc), un na,e#ador Qe/ (9hrome,&ire!o:, 7a!ari, etc) donde ,isua-i>ar"s tus a,ances, y muchas #anas de a(renderJ intentar ser -o m"s c-ara (osi/-e y (uedas ,er -as ,entaCas @ue tiene Goo#-e %a(s, e- como y donde -o im(-ementes re@uerir" de tu ima#inaci$n. 7in m"s @ue decir, crea una ("#ina y #u"rda-a, en mi caso -o --amar estructura /"sica de e--a de/e ser -a si#uiente1 inde:.htm-, -a

_X>=6(:#0 html" _html" _head" _title"8i primer mapa_/title" _style type=5text/css5" html Q heightE *OOZ R -ody Q heightE *OOZ\ R #contenedor.mapa Q marginE auto O auto O\ R /N6ontenedorN/ _/style" _/head" _-ody" _p"/tili;ando la 4#7 de &oogle 8aps_/p"

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BG

_/-ody" _/html"

;e/ido @ue -a AP5 est" desarro--ada en <a,ascri(t usaremos -a eti@ueta `scri(ta`2scri(ta (ara inc-uir e- c$di#o necesario (ara nuestra a(-icaci$n, como es -a inte#raci$n de -a AP5 a nuestro (royecto (or -o @ue a#re#amos -a si#uiente -Anea1
_script type=5text/Uavascript5 src=5httpsE//maps.google.com/maps/api/Us` sensor=set.to.true.or.false5"_/script"

Puedes de!inir e- sensor en true si -a a(-icaci$n ser" -a @ue determine -a u/icaci$n deusuario o alse en caso contrarioJ (ara este eCem(-o -o deCaremos con un ,a-or de !a-se. Es momento de de!inir -as caracterAsticas de nuestro ma(a, como te mencion a- ser <a,ascri(t iniciaremos e- c$di#o de -a si#uiente manera1
_script type=5text/Uavascript5" function iniciali;ar8apa( Q var coordenadas = new google.maps.3at3ng($4.A)4%O4W -*O4.%%$a84 \ var opciones = Q ;oomE %W centerE coordenadasW map(ype7dE google.maps.8ap(ype7d.+=4>84# R var mapa = new google.maps.8ap(document.get0lement'y7d(5contenedor.mapa5 W opciones \ R _/script"

4a ,aria/-e coordenadas tiene -os ,a-ores de -on#itud y -atitud corres(ondientes a -a (osici$n en e- ma(a, e- o/Ceto opc$ones indica @ue rea-i>ar" un >oom de E, -o centrar" en esas coordenadas y e- ma(a ser" de ti(o N'A;%APJ si @uisieras se-eccionar otro ti(o, (or eCem(-o 7ate--ite so-o de/er"s cam/iar -a instrucci$n a #oo#-e.ma(s.%a(Ty(e5d.7ATE445TE. P (or -timo creamos e- o/Ceto ma(a indicando @ue ser" inicia-i>ado y des(-e#ado en ee-emento XcontenedorKma(aX, asA como hacer -a --amada de inicia-i>ar%a(a en e- e,ento on-oad de tu `/odya, es decir1
_X>=6(:#0 html" _html" _head" _title"8i primer mapa_/title" _style type=5text/css5" html Q heightE *OOZ R -ody Q heightE *OOZ\ R #contenedor.mapa Q marginE auto O auto O\ R /N6ontenedorN/ _/style" _script type=5text/Uavascript5 src=5httpsE//maps.google.com/maps/api/Us`sensor=false5"_/script" _script type=5text/Uavascript5" function iniciali;ar8apa( Q /N #rimer par]metro corresponde a latitud y el segundo a la longitud N/ var coordenadas = new google.maps.3at3ng($4.A)4%O4W -*O4.%%$a84 \ var opciones = Q ;oomE %W /N0l ;oom puede iniciar en * N/ centerE coordenadasW map(ype7dE google.maps.8ap(ype7d.+=4>84# AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1 R var mapa = new google.maps.8ap(document.get0lement'y7d(5contenedor.mapa5 W opciones \

BI

R _/script" _/head"

_/html"

_-ody onload=5iniciali;ar8apa( 5" _p"/tili;ando la 4#7 de &oogle 8aps_/p" _div id=5contenedor.mapa5 style=5widthE*OOZ\ heightE*OOZ5"_/div" _/-ody"

54in requerimientos o dise6o la programaci)n es el arte de agregar errores a un archivo de te7to vaco5 8 2ouis 4r gle

C"mo obtener las coordenadasD


En e- eCem(-o anterior estoy a(untando hacia % :ico, (ero @ue (asa si tu deseas cam/iar -a u/icaci$n, so-o si#ue estos senci--os (asos (ara o/tener -a -on#itud y -atitud. 1. Entra a Goo#-e %a(s +. En su /uscador escri/e e- -u#ar @ue tu desees, (ara e- eCem(-o /uscar coordenadas de Noma. -as

B. 3na ,e> @ue tienes e- resu-tado y se te (resenta en e- -ado derecho de -a ("#ina (,er si#uiente !i#ura) da c-ic en e- icono de X-in8X.

D. 9o(ia y (e#a en tu editor, -a direcci$n @ue te a(arece ( htt(122ma(s.#oo#-e.com2ma(sG


@broma&h-ben&s--bB-.F-CD01:H10B.DDBGIC&ss(nb+1.DB1)ME,DB.+I)1BB&hnearbNome,VPro,inceVo!VNome,V4a>io, V5ta-y&tbm&>b10)

E. 9omo (uedes ,er tienes muchos datos en esa 3N4, nicamente es ti- (ara nosotros -o @ue se encuentra des(u s de- cam(o s-- @ue he marcado en ne#ritas y hasta antes de
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

BL

&ss(n. ). 9o(ia esas coordenadas y sustitye-as (si asA -o deseas) (or -as @ue yo in#res de % :ico. ?. Actua-i>a y ,e -a nue,a u/icaci$n. Lasta a@uA ya tienes tu (rimer ma(a y sus o(ciones, si#amos con -a creaci$n de marcadores.

C"mo agregar marcadores al ma aD


4a im(-ementaci$n (uedes hacer-a tan com(-eta como tu desees y una o(ci$n m"s @ue tienes es a#re#ar e-ementos a tu ma(a como son -os marcadores, (o-i-Aneas, ,entanas de in!ormaci$n, cArcu-os, etc. 4os marcadores (ueden mostrar e- icono @ue tu -e asi#nes o en caso contrario easi#nado (or de!ecto, -a instrucci$n es google.maps.Marker siendo (osi/-e con!i#urar su (osici$n, icono, tAtu-o, animaci$n y -a (ro(iedad de Xdra##a/-eXJ -o si#uiente ser" aadir en tu c$di#o des(u s de @ue creaste tu ma(a (,er ma(a) un marcador sim(-e (or -o @ue crearemos e- si#uiente o/Ceto1
var marcador = new google.maps.8arker(Q positionE coordenadasW titleE 58i primer marcador5 R \ marcador.set8ap(mapa \

Estamos indicando @ue se (osicionar" en -as coordenadas @ue esta/-eciste y como tAtu-o X%i (rimer marcadorX, -a -tima -Anea se encar#a de aadir e- marcador a tu ma(a. FP c$mo cam/iamos e- iconoG tiene una (ro(iedad denominada XiconX y de/es indicar -a ruta donde se encuentra tu ima#en, (or eCem(-o si est" situada en tu car(eta im"#enes y se --ama $/7c'-'.p-5 de/er"s de!inir-o asA1
var marcador = new google.maps.8arker(Q positionE coordenadasW titleE 58i primer marcador5W iconE <imagenes/mi7cono.png< R \ marcador.set8ap(mapa \

E- si#uiente !ra#mento de c$di#o tiene + nue,as (ro(iedades (dra##a/-e y animation), -a (rimera se asi#na en true y a- dar-e c-ic a tu icono (odr"s situar-o en cua-@uier -u#ar de tu ma(a y -a se#unda o(ci$n rea-i>a e- e!ecto de caer desde -a (arte su(erior de tu ma(a.
var marcador = new google.maps.8arker(Q positionE coordenadasW titleE 58i primer marcador5W iconE <imagenes/mi7cono.png<W
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-0

dragga-leE trueW animationE google.maps.4nimation.>+=# R \ marcador.set8ap(mapa \

"ambiando la a ariencia de nuestro ma a


7i deseas (ersona-i>ar an m"s -a a(ariencia de tu ma(a Goo#-e te /rinda una herramienta --amada R7ty-ed %a( Qi>ardS donde ,isua-mente (odemos cam/iar -a con!i#uraci$n y esti-i>ar-o como @ueramos, nicamente entra a -a ("#ina y ,er"s una (anta--a como -a si#uiente1

7u ,entaCa (rinci(a- es @ue tu ma(a -o (odr"s (ersona-i>ar de una manera senci--a, a continuaci$n te e:(-icar como rea-i>ar-o. 1. En -a (rimera o(ci$n ,er"s -a (ro(iedad de Oeat!red t5pe, es decir, todos -os recursos @ue (odr"s ,isua-i>ar en tu ma(a como son escue-as, hos(ita-es, etcJ de/es tener en cuenta @ue estas o(ciones so-o !uncionan (ara a-#unos (aAses. +. 4a o(ci$n si#uiente denominada Element t5pe tiene e- su/conCunto de recursos a(-ica/-es a- ma(a. B. En St5lers (uedes Cu#ar con -os ,a-ores re!erentes a- co-or, #ama de co-ores, saturaci$n, etc. D. En cuanto termines de asi#nar a cada o(ci$n sus ,a-ores y te encuentres satis!echo de tu ma(a es momento de crear e- archi,o <7on. ;e -ado derecho en -a (arte in!erior ,er"s un /ot$n --amado VS+oE ;sonW, a- dar c-ic des(-e#ar" datos simi-ares a -os si#uientes1
F Q 5element(ype5E 5geometry5W 5stylers5E F Q 5hue5E 5#OOaaff5 RW Q 5saturation5E *) Q 5lightness5E $$ RW Q 5gamma5E O.aP RW Q 5weight5E O.% RW Q 5visi-ility5E 5simplified5 R J R J

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-1

E. En tu !unci$n ana-i>ar%a(a() (e#a e- c$di#o @ue #eneraste y a#re#a -a si#uiente -Anea1


var estilo = new google.maps.1tyled8ap(ype(mi0stiloW QnameE Y1tyled 8ap[R \

). A#re#a a tus o(ciones e- ,a-or ma(Ty(e9ontro-'(tions y e- esti-o.


8ap(ype6ontrol=ptionsE Q map(ype7dsE Fgoogle.maps.8ap(ype7d.+=4>84#W <estilo<J R

?. Posicionate des(u s de -a -Anea donde creas tu ma(a (,ar ma(a) y escri/e


mapa.map(ypes.set(<estilo<W estilo \ /N4signando el estiloN/ mapa.set8ap(ype7d(<estilo< \

E- c$di#o !ina- de este artAcu-o de/e ser simi-ar a- @ue te (resento a continuaci$n1
_X>=6(:#0 html" _html" _head" _title"8i primer mapa_/title" _script type=5text/Uavascript5 src=5httpsE//maps.google.com/maps/api/Us`sensor=false5"_/script" _style type=5text/css5" html Q heightE *OOZ R -ody Q heightE *OOZ\ R #contenedor.mapa Q marginE auto O auto O\ R _/style" _/head" _script type=5text/Uavascript5" function iniciali;ar8apa( Q /N #rimer par]metro corresponde a latitud y el segundo a la longitud N/ var coordenadas = new google.maps.3at3ng($4.A)4%O4W -*O4.%%$a84 \ var mi0stilo = F Q 5element(ype5E 5geometry5W 5stylers5E F Q 5hue5E 5#OOaaff5 RW Q 5saturation5E *) RW Q 5lightness5E $$ RW Q 5gamma5E O.aP RW Q 5weight5E O.% RW Q 5visi-ility5E 5simplified5 R J R J\ var estilo = new google.maps.1tyled8ap(ype(mi0stiloW QnameE <1tyled 8ap<R \ var opciones = Q ;oomE %W /N0l ;oom puede iniciar en * N/ centerE coordenadasW 8ap(ype6ontrol=ptionsE Q map(ype7dsE Fgoogle.maps.8ap(ype7d.+=4>84#W <estilo<J R R var mapa = new google.maps.8ap(document.get0lement'y7d(5contenedor.mapa5 W opciones \ /N4signando el estiloN/ mapa.map(ypes.set(<estilo<W estilo \ mapa.set8ap(ype7d(<estilo< \ var marcador = new google.maps.8arker(Q AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1 positionE coordenadasW titleE 58i primer marcador5W iconE <imagenes/mi7cono.png<W dragga-leE trueW animationE google.maps.4nimation.>+=#

-B

R \

marcador.set8ap(mapa \ R _/script" _-ody onload=5iniciali;ar8apa( 5" _p"/tili;ando la 4#7 de &oogle 8aps_/p" _div id=5contenedor.mapa5 style=5widthE*OOZ\ heightE*OOZ5"_/div" _/-ody"

_/html"

E- c$di#o anterior asA como e- icono (odr"s encontrar-o en mi cuenta de GitLu/, en un si#uiente artAcu-o ,eremos como crear marcadores m-ti(-es, (o-A#onos, cArcu-os, etc.

=HREE.;S Xva a +acer todo eso por m$Y

En esta ocas$4n +aremos el $ntento de !n pse!doH t!tor$al s%per &(s$co: v$endo paso a paso lo l$ndo de =HREE.;S. X8!9 es estoY Es !na &$&l$oteca 6!e nos perm$te a&straernos &astante &$en de los $nconven$entes a la +ora de S!,ar con -D en n!estros browsers.

Escrito por: 'el$a '$ntas (4icenciada en 5n!orm"tica)


L$cenc$ada en 3n>orm(t$ca (3NP7<0), actua-mente rea-i>ando Doctorado en 3n,en$er a so/re Procesamiento de 5m"#enes (3N7), ;ocente (3NP7<0), 5ntento de sysadmin (99) y code mon8ey e- resto de -as horas 1). Pythonera (or de!ecto con a-armantes inc-inaciones hacia Pro-o# y otras hereCAas.
?e&s2 0-o#1 htt(122yetanother-o#..ord(ress.com2 Redes soc$ales2 T.itter 2 5denti.ca1 @R=O*cel$a

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

1#K#S"+%P8

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

--

hree.Cs, como nos dice -a .i8i Y1Z es una /i/-ioteca conce/ida con e- !in de crear y ,isua-i>ar #r"!icos B; en nuestros na,e#adores. Three.Cs (uede interactuar tran@ui-amente con e-ementos de LT%4E, 7=G o Qe/G4. E- c$di#o Cunto con e:ce-entes eCem(-os, est" dis(oni/-e en !it"ub Y+Z. Esto, sumado a un mAnimo2moderado conocimiento de cuestiones #r"!icas nos (ermitir" crear a(-icaciones (desde ,isua-i>aciones cientA!icas hasta Cue#os) muy !"ci-mente.

)ncendiendo Motores U
En nuestro e:(erimento ,amos a @uerer tener unas cuantas cosas1 Escena, un -u#ar donde (oner todos nuestros e-ementos (c"mara y o/Cetos centre otros yuyosd1). Render# e- @ue #enera -a ima#en desde e- mode-o @ue -e damos. Cmara# (ara hacer-o senci--o, (ensemos @ue nos muestra si#i-osamente a nuestros o/Cetos desde una cierta (osici$n. Luces, (ara dar-e una i-uminaci$n determinada a nuestra escena. 3n objeto# a- cua- mirar detenidamente 1)

)scena, "6mara y +ender


Ahora (asemos -o comentado anteriormente a c$di#o, con -a ayuda de nuestra /i/-ioteca m"#ica. Antes @ue nada tenemos @ue traernos un container a @uien -e ,amos a Renchu!arS nuestro render de -a si#uiente manera1
container = document.get0lement'y7d(<container< \ // creamos nuestra escena scene = new T R!!.1cene( \ // creamos la camara indicando por parametros el ]ngulo de la vista // entre otros y le damos su posicion en el eUe ; camera = new T R!!.#erspective6amera(4%W window.inner?idth / window.inner@eightW *W *OOOO \ camera.position.; = %OO\ scene.add(camera \ // creamos nuestro render ?e-&3 y se lo agregamos a nuestro container renderer = new T R!!.?e-&3+enderer( \ renderer.set1i;e(window.inner?idthW window.inner@eight \ container.append6hild(renderer.dom0lement \

Por -o @ue a -a hora de di/uCar en -a (anta--a de/eremos --amar a nuestro renderer de -a


1 NdN1 -a e:(resi$n Rentre otros yuyosS es un ar#entinismo uti-i>ado (ara e:(resar @ue -o @ue antedicho, !orma (arte no e:c-usi,a ni e:c-uyente, de un todo m"s am(-io y a/arcador. E- t rmino RyuyoS se uti-i>a en ,arias re#iones de Am rica de- 7ur (Ar#entina, 9hi-e, Para#uay, 3ru#uay y 0o-i,ia), (ara re!erirse a -a Rhier/a ma-aS, una (-anta her/"cea @ue crece es(ont"neamente di!icu-tando e- /uen desarro--o de -os cu-ti,os.

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-C

si#uiente manera1
renderer.render(sceneW camera \

,b!etos y Luces
Ahora @ue ya tenemos nuestra c"mara, escena y render (asemos a co-ocar un o/CetoW
// creamos una simple esfera con un radio = *OO con segmentos y // anillos = *A var sphere8aterial = new T R!!.8esh#hong8aterial(Qam-ientE OxOOOOOOW colorE OxffffffW specularE Ox%%%%%%W shininessE *OR \ var"sphere = new"T R!!.8esh(new"(@+00.1phere&eometry(*OOW *AW *A W sphere8aterial \ // : no se olviden de agregarlo a la escena scene.add(sphere \

A continuaci$n, @uerremos asi#nar-e un materia- a nuestro o/Ceto. FHu si#ni!ica estoG Es -a a(ariencia @ue deseamos @ue ten#a nuestra es!era. E:(-icar e- Modelo de reflexin de Phong supera el fin de este artculo pero pueden ver de que se trata en nuestra querida Wiki [3] y si intentan implementarlo por su cuenta podrn apreciar el trabajo que THREE.JS hizo por ustedes : Ahora ,eamos otra cuesti$n @ue trata $"REE.%S de !orma muy a#rada/-e .. -a i-uminaci$n. Podemos crear distintos ti(os de -uces, (osicionar-as y re#u-ar su intensidad muy !"ci-mente.
pointlight = new T R!!.#oint3ight(Ox222222 \ am-ientlight = new T R!!.4m-ient3ight(Ox*O*O*O \ // este * nos da la intensidad. 1i se desea Due sea m]s leve -asta con // colocar O.% directlight = new T R!!.>irectional3ight(Ox222222W * \ // aDub definimos de donde proviene la lu; directlight.position.set(*W *W O .normali;e( \ // : como siempre de-emos agregar las luces a la escena scene.add(pointlight \ scene.add(am-ientlight \ scene.add(directlight \

7i deseamos @ue uno de nuestros o/Cetos RemitaS -u> (odemos hacer -o si#uiente1
// 6reamos nuestra esfera como lo vimos anteriormente lightmesh = new T R!!.8esh(new T R!!.1phere&eometry(*OW *AW 8 W new T R!!.8esh#hong8aterial( QcolorE Ox2244OOR \ // 4 nuestra nueva esfera le asignamos la posicicn de lu; Due generamos // renglones atr]s. lightmesh.position = pointlight.position\ // : la agregamos a la escena scene.add(lightmesh \
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-D

#nimaciones
En nuestro eCem(-o @ueremos co-ocar -a es!era en una (osici$n y -a se#unda es!era @ue i-umina, #ire a-rededor de e--a con una cierta $r/ita. Pueden ,er un (e@ueo ,Adeo de como se ,erAa en htt(122....youtu/e.com2.atchG,bUB.*-4eetm.. Para animar cua-@uier o/Ceto, sim(-emente tenemos @ue modi!icar su (osici$n cada ,e> @ue ,ayamos a di/uCar-o. Por -o @ue a nuestra (e@uea es!era -e diremos @ue se modi!i@ue (antes de --amar a nuestra !uncion render) con1
var timer = speed N #ate.now( \ lightmesh.position.x = *OOO N $ath.cos(timer \ lightmesh.position.; = *OOO N $ath.sin(timer \

4a ,aria/-e speed nos (ermitir" ace-erar o disminuir -a ,e-ocidad de nuestra (e@uea es!era. E- eCem(-o com(-eto -o (ueden encontrar en htt(s122#ithu/.com2ce-iacintas2Qe/G4* 7tu!!2/-o/2master2TLNEE<7*E:am(-es2eCem(-os2miPrimerQe/#-.htm-. En ste, (odr"n o/ser,ar /otones (ara cam/iar -a (osici$n de a-#una de -as -uces, -a ,e-ocidad y cam/ios de -a (osici$n de -a c"mara con mo,imientos de- mouse. =a-e re(etir y machacar @ue en e- re(ositorio de $"REE.%S encontrar"n muchAsimos m"s eCem(-os y en su ("#ina, un (e@ueo tutoria- y su documentaci$n.

+eferencias & Links


Y1Z Qi8i(edia TLNEE.<7 YBZ %ode-o de Ne!-e:i$n de Phon# Y+Z Ne(ositorio TLNEE.<7 YDZ =ideo de- ECem(-o YEZ 9odi#o &uente de- ECem(-o
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-F

La neces$dad de ,enerar !n ne,oc$o renta&le a part$r de la constr!cc$4n de So>tEare: +a llevado a casas de So>tEare 5 (reas de s$stemas de empresas de todos los t$pos: a sacr$>$car partes 5 roles del proceso So>tEare 6!e VparecenW Ja s! cr$ter$oK no aportar en la mater$al$)ac$4n del prod!cto So>tEare. Es as como +o5 vemos m!c+os pro5ectos en los c!ales se om$ten pr(ct$cas de Ar6!$tect!ra 5 D$se<o de So>tEare: pero lo m(s preoc!pante es 6!e en al,!nos casos no es por elecc$4n s$no por desconoc$m$ento acerca de las responsa&$l$dades de estos roles 5 de los &ene>$c$os de contar con ellos dentro del proceso So>tEare.

Escrito por: Sore5 .arc a (Es(ecia-ista en ;esarro--o de 7o!t.are)


Ar6!$tecta de So>tEare y docente uni,ersitaria. O!ndadora de la com!n$dad Avanet y miem/ro de 3EEE S!&secc$4n *edell n. L der de $nvest$,ac$4n 5 desarrollo (ara movilidad y retail en L$neaDataScan.
?e&s2 0-o#1 htt(122/-o#.sorey#arcia.me Redes soc$ales2 T.itter 2 5denti.ca1 @sore5,arc$a 4in8ed5n1 htt(122co.-in8edin.com2in2sorey#arcia

uchos (royectos hoy en dAa se a!rontan sin ar@uitectos y2o diseadores de 7o!t.are, o /ien, sin (ersonas @ue a (esar de no tener asi#nado e- ro- e:(-Acito, cuenten con -as ha/i-idades @ue re@uieren @uienes eCecutan sus tareas. 4os ro-es @ue ya se asumen en -a construcci$n de 7o!t.are sin mayor (ro/-ema son1 los clientes# los gerentes de proyectos# los analistas de re&uisitos y los programadores , en a-#unos casos con /uena suerte, se in,o-ucran adem"s a -os testers o (ro/adores y a -os
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

2)S8%T$ D) P+,3)" 8,S

Ar6!$tectos 5 d$se<adores: los roles opc$onales

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-G

usuarios. 3no dirAa @ue es un /uen a,ance, (ero a -a ,e> @ue desp!9s de todo el t$empo $nvert$do por parte de las or,an$)ac$ones en $ntentar +acer $n,en$er a de So>tEare: tam&$9n es !n ,ran atraso: en mayor medida (or @ue en muchos de -os casos, su omisi$n se /asa en desconocer cua-es son -as res(onsa/i-idades y /ene!icios de contar con @uien eCer>a esos ro-es dentro de -os (royectos y no en una e-ecci$n consciente. ;esde hace a-#n tiem(o he sostenido con a-#unos de mis co-e#as ar@uitectos y diseadores ,arias con,ersaciones acerca de- moti,o (or e- cua- ocurre esta situaci$n, en -a @ue ar@uitectos y2o diseadores de 7o!t.are se con,ierten en roles opc$onales, -os se#undos m"s @ue -os (rimeros. 4a conc-usi$n m"s sim(-e es @ue si e:isten serios (ro/-emas en -os ro-es m"s comunes y conocidos, como e- de- (ro#ramador, -os m"s XdesconocidosX e,identemente tienen m"s (ro/-emas, sin em/ar#o el desconoc$m$ento no es n$ m!c+o menos la meSor de las e1c!sas y, e- (rinci(a- (ro/-ema es e- mismo1 -a !a-ta de madure> de -a (ro!esi$n en muchos -u#ares de- mundo. 3na de -as causas de- (ro/-ema se encuentra en -as mismas uni,ersidades, @ue en ocasiones ni mencionan estos ro-es y mucho menos !orman (ersonas con -as ha/i-idades necesarias (ara eCercer-os y, es @ue i#ua- uno se (re#untarAa 'cu(ntos docentes tienen el conocimiento su iciente para ense)ar dise)o de So t*are +til empresarialmente y no simplemente te,rico- . bien# 'est(n los estudiantes universitarios de pregrado preparados para entender el valor de estas disciplinas o ser/a tiempo perdidoPor otro -ado es necesario entender @ue -as ha/i-idades de un ar@uitecto o diseador est"n -eCos de tener @ue ,er -a metodo-o#Aa @ue se eCecuta. 7i /ien, en unas u otras -a documentaci$n de este ti(o de eCercicios es menor o mayor, tomarse e- tiem(o de abstraer las necesidades de usuarios y negocios# identi icar una o varias soluciones previas antes de dar inicio a la construcci,n e incluso detallar a&uellas &ue resulten cr/ticas o tengan un desarrollo comple0o# son a-#unas de esas (r"cticas @ue (odrAan /ene!iciar en mucho -os (royectos, (ero a- ser desconocidas -os son tam/i n todos sus (osi/-es /ene!icios. "no de los errores t p$cos en las empresas emp$e)a por pensar 6!e el desarrollador 6!e m(s t$empo lleva en la compa< a es 6!$en de&e eSercer el rol de ar6!$tecto. Para muchos de nosotros es c-aro @ue -as ha/i-idades (ara rea-i>ar este ti(o de acti,idades no necesariamente est"n (resentes (or tener ha/i-idades (ara -a (ro#ramaci$n, aun@ue se haya (ro#ramado muchos aos o aun@ue se sea muy h"/i- en e--o. A-#unos (ro#ramadores no ad@uieren -as ha/i-idades re@ueridas como son el lidera1go# la visi,n de negocio# la negociaci,n de con lictos# las habilidades de comunicaci,n y una muy importante y b(sica# la abstracci,n, @ue si /ien est" im(-Acita en -as -a/ores de un (ro#ramador, cuando se trata de entender -os deta--es de -os escenarios de ne#ocio (ara encontrar e- !oco de un (ro/-ema, identi!icar -as (artes m"s re-e,antes y (ensar en -a so-uci$n sin tener necesariamente @ue entrar en -a construcci$n de -a misma, son +a&$l$dades 6!e re6!$eren de e1per$enc$a 5 mad!re) pro>es$onal. E- ro- de- diseador si /ien ,a a un ni,e- de deta--e mayor @ue e- de ar@uitecto, es i#ua-mente im(ortante y, en esa medida de/e ser eCercido coherentemente y (or -a (ersona indicada, (uesto @ue este (ersonaCe se con,ierte en e- centro de #ran nmero de acti,idades. E- diseador es -a (ersona encar#ada de com(render en deta--e cada uno de -os re@uisitos y de acuerdo a -os -ineamientos esta/-ecidos (or e- ar@uitecto, (-antear de !orma deta--ada como se reso-,er"n e im(-ementar"n cada una de -as !unciona-idades
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-I

de- sistema. Adem"s, de/e estar en ca(acidad de discre(ar *si se diera -a situaci$n* -as indicaciones de- ar@uitecto y demostrar t cnicamente @ue una so-uci$n no es correcta o en cua-@uier caso, hacer (rue/as de conce(to (ara ,a-idar a-#una indicaci$n ar@uitect$nica de -a cua- desconoce su e!ecto. En esta medida e- diseador termina con,irti ndose en muchos casos en e- -Ader t cnico y #ran a(oyo de -os (ro/adores, (uesto @ue es @uien tiene !unciona- y t cnicamente econte:to de- (royecto en su mente y @uien -o re!-eCa en -a documentaci$n @ue decida construirse. AsA (ues, si /ien necesitamos a-#uien con -as mismas caracterAsticas @ue un ar@uitecto, es m(s >(c$l llevar pa!lat$namente a !n &!en: d$sc$pl$nado 5 e1per$mentado pro,ramador a eSercer este rol 5 c!lt$var s! e1per$enc$a: para ser poster$ormente !n &!en ar6!$tecto.

2os arquitectos dise6adores de 4oft9are, como el buen vino, toman tiempo en madurar!

De similitudes con las edificaciones


4a in#enierAa de 7o!t.are ha nacido de -a necesidad y e:i#encia a -os in#enieros de 7o!t.are de construir sistemas con (rocesos simi-ares a -os de una !a/rica o ta- cuacomo se construyen -as edi!icaciones. 4a so-icitud no es m"s @ue e- --e#ar a ser mas e:actos, (roducir m"s e-ementos en serie y e@ui,ocarse mucho menos de -o @ue ,enimos e@ui,oc"ndonos de acuerdo a- (o(u-ar C"A.S Report de Standish !roup.
1LLC E:itoso Parcia-mente E:itoso &a--ido 1)e EBe B1e 1LLF +?e BBe D0e 1LLI +)e D)e +Ie B000 +Ie DMe +Be B00B BDe E1e 1Ee B00C +Me EBe 1Ie B00F BEe D)e 1Me B00L B+e DDe +De

9a/e ac-arar @ue en -a ta/-a anterior, con -a c-asi!icaci$n (royectos Re:itososS, Standish !roup se re!iere a a@ue--os @ue !ueron terminados a tiem(o y con e- (resu(uesto es(erado. %eCorar estas ci!ras es acad mica y em(resaria-mente un reto, e,identemente m"s @ue (or so-o meCorar -as ci!ras, (or e,itar -os e!ectos econ$micos @ue #eneran -os atrasos y e- uso desmedido de recursos. Pues /ien, actua-mente es c-aro (ara -a mayorAa de nosotros, @ue hacer 7o!t.are no se (arece mucho a ser una !"/rica o construir un edi!icio, de/ido a @ue a di!erencia de estos escenarios, la ma5or parte de la mater$a pr$ma se &asa en las +a&$l$dades +!manas de los $nvol!crados: 6!e est(n leSos de poder ser med$das 5 estandar$)adas: y @ue son susce(ti/-es a cosas tan sim(-es como e- humor, e- c-ima, e- entorno o -as re-aciones entre -os inte#rantes de- e@ui(o. 7in em/ar#o, a-#unas com(araciones c-a,es con estos escenarios ayudan a --e,ar !"ci-mente -os temas de ar@uitectura y diseo a -as mentes de @uienes reci n comien>an, o a Custi!icar-o !rente a @uienes no tienen -a ca(acidad de entender-o. Es c-aro i#ua-, @ue no de/en (erderse de ,ista -as serias di!erencias, una de
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

-L

e--as /astante #r"!ica y senci--a de entender, es como un ar@uitecto de edi!icaciones (uede determinar (or eCem(-o cuantos -adri--os, acero y cemento (odrAa tomar a un a-/ai- construir una (ared y como un ar@uitecto de 7o!t.are Cam"s estar" en (osi/i-idad de determinar cuantas -Aneas de c$di#o tomar" a un (ro#ramador construir un com(onente de 7o!t.are. Ahora /ien, si#uiendo con -as com(araciones en -as @ue sA ayuda esta/-ecer (untos comunes entre -a construcci$n de edi!icaciones y -a construcci$n de 7o!t.are, uno de -os (untos m"s im(ortantes es e- mode-amiento o -os (-anos @ue se construyen. Pocos de nosotros ima#inarAamos una cuadri--a de a-/ai-es construyendo un edi!icio de E0 (isos sin @ue antes un ar@uitecto, un to($#ra!o, un de-ineante de ar@uitectura y @uien sa/e cuantos ro-es m"s, se hu/iesen tomado e- tra/aCo de estudiar e- terreno, hacer ma@uetas y (-anos deta--ados, sin em/ar#o, es /astante comn ,er (royectos de 7o!t.are #randes y (e@ueos @ue !ueron ana-i>ados, no diseados, construidos y (ro/ados (or una cuadri--a de (ro#ramadores Cunior, /ien sea (or costos, (or desconocimiento o (or sim(-e irres(onsa/i-idad. 7in em/ar#o, (ocos se a-arman ante dichas situaciones. No entrar a deta--ar -os (untos acerca de si se#n e- tamao de -a edi!icaci$n esto (odrAa hacerse sin (ro/-emas, so-o -es deCar un eCercicio (r"ctico1 -a (r$:ima ,e> @ue ad@uieran un mue/-e con instrucciones de Rh"#a-o usted mismoS intente hacer-o sin mirar un so-o instante e- (e@ueo manua- de instrucciones @ue -e adCuntan y -ue#o tras(orte dicho escenario a -os dueos de -os (roductos de 7o!t.are #randes y (e@ueos @ue !ina-mente son sus c-ientes, ta- cua- como usted se sienta, asA Rde/erAanS sentirse e--os, aun@ue (ara su tran@ui-idad y mi -"stima, e--os no son muy conscientes de @ue a-#uien sin un (-an est" tratando de construir un (roducto @ue har" una -a/or im(ortante en su ne#ocio. 9ontinuando con e- tema de- mode-amiento, hay ,arias (ro(uestas. No soy yo @uien ,a a decir-es si considera a-#una m"s adecuada @ue otra, s$n em&ar,o s$ !sted cons$dera los deseos de s!s !s!ar$os como !n la&er$nto osc!ro 5 compleSo: m n$mamente de&er a e6!$parse en la avent!ra con !n mapa 5 var$os e1pertos en e1plorac$4n. Persona-mente considero @ue e- mode-amiento de 7o!t.are es una de esas acti,idades @ue sin madurar -o su!iciente, !ue y es su/estimada hoy en dAa, la $dea de poder d$&!Sar t!s $deas en !n len,!aSe com%n 6!e ent$endan los d$>erentes part$c$pantes de !n pro5ecto: no es en a&sol!to desca&ellada. 7in em/ar#o dos cosas satani>an -os /uenos es!uer>os rea-i>ados a- res(ecto1 -a e:trema com(-eCidad de (royectos desarro--ados /aCo N3P o -a ri#ide> de- mode-o en cascada, e:i#iendo @ue todo e- diseo !uese terminado antes de em(e>ar a construir sin estar (re(arados (ara -os cam/ios, tema @ue es meCor cu/ierto (or -as metodo-o#Aas "#i-es, -as cua-es -astimosamente son tomadas (or muchos irres(onsa/-emente, como e:cusa (ara omitir muchas (r"cticas (ositi,as de(roceso 7o!t.are, situaci$n @ue (ara nada se (arece a -as ,erdaderas (ro(uestas de @uienes e,an#e-i>an con res(ecto a e--as. Es e- momento de entender @ue tomarse e- 7o!t.are c$mo un de(orte no -e hace /ien a nin#n (royecto y @ue es meCor rea-i>ar /uenos (roductos a sim(-emente sentarse a re>ar (or @ue nin#una de nuestras edi!icaciones (entendidas como nuestros (roductos de 7o!t.are) se des(-ome a-#una ,e> y (rodu>ca una cat"stro!e. Por otro -ado, haciendo a-usi$n nue,amente a- tema de -as ha/i-idades de ar@uitectos y diseadores en esta com(araci$n con -as edi!icaciones, -es deCo una re!-e:i$n de un !oro
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

C0

en -a Z33 'on>erenc$a 3&eroamer$cana de 3n,en$er a de Re6!$s$tos 5 Am&$entes de So>tEare @ue -o i-ustra (er!ectamente, a(e-ando a- hecho de @ue muchos, adem"s @uieran !ormarse como ar@uitectos con so-o -ectura y au-as de c-ase1

!!!es f#cil pensar en que un :rquitecto de edificaciones puede ser bueno sin tener que haber pegado ;am#s un ladrillo sobre otro, pero no podemos pensar lo mismo de un :rquitecto de 4oft9are que no ha a programado ;am#s< IDEAS 09

De modelos de negocio
Lasta este momento he a/ordado e- tema de -a carencia o ausencia de -os ro-es de ar@uitecto y diseador desde e- desconocimiento, (ero (ara !ina-i>ar me #ustarAa deCar-es otro escenario X8!9 tal s$ la dec$s$4n de no contar con estos roles es !na dec$s$4n consc$enteY 7i uno ana-i>a o ,i,e -os escenarios en -os @ue sA se eCecutan -os (rocesos contando con ar@uitectos e:(ertos y diseadores h"/i-es, termina (or conc-uir ,arias cosas, entre e--as @ue en este escenario se necesitan muchos menos (ro#ramadores e:(erimentados y en consecuencia @ue se (uede ad@uirir !uera -a/ora- m"s econ$mica. 4a ra>$n es senci--a, (ara eso se eCecutaron -as tareas de ar@uitectura y diseo deta--ado. Este escenario (uede incomodar /astante a -os (ro#ramadores m"s creati,os y h"/i-es, uno (uede o/ser,ar c-aramente -a desa>$n de un (ro#ramador @ue tra/aCa si#uiendo -as directrices de un ar@uitecto y diseador, su -i/ertad y creati,idad c-aramente se ,en coartadas a- --e,ar un (roceso @ue -o o/-i#a a se#uir con suma (recisi$n -as indicaciones de a-#uien m"s, sin em/ar#o a ni,e- de em(resa es un e:ce-ente mode-o, (ues -as ha/i-idades de -os (ro#ramadores no tienen @ue ser tantas, ya @ue se -imitan a se#uir instrucciones. 4os (ro#ramadores m"s h"/i-es y creati,os, @ue son tA(icamente -a e:ce(ci$n y no -a re#-a, son en!ocados a se#uir creciendo como diseadores y ar@uitectos y o/tienen mayores remuneraciones econ$micas. Entre tanto, -a em(resa contrata (ro#ramadores @ue en ocasiones (ueden ser inc-uso estudiantes, ya @ue se ,an a -imitar e:c-usi,amente a (ro#ramar y su carencia de ha/i-idades en e- tema ser" #uiada y su(er,isada (or ar@uitectos, diseadores y -Aderes t cnicos. En e- ne#ocio o(uesto, a@ue--as casas de 7o!t.are @ue tra/aCan sin diseadores y ar@uitectos asi#nados a -os (royectos, se tendr" @ue tener e:ce-entes desarro--adores @ue adem"s de ser /astante inde(endientes y disci(-inados, sean h"/i-es (ara determinar -a so-uci$n a cua-@uiera de -os (ro/-emas @ue se (resenten, adem"s de (oder ana-i>ar (ro/-emas, determinar -as so-uciones, comunicar-as a- c-iente y (or su(uesto documentar-as e im(-ementar-as. En este escenario se cuenta (or eCem(-o con a-#n #ru(o #enera- de es(ecia-istas o ar@uitectos @ue a(oyen -os (royectos a- inicio o cuando
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

C1

estos entran en di!icu-tades. Parece un escenario tan ,"-ido como e- anterior, (ero en este caso adem"s de @ue -os (ro#ramadores de/en tener sa-arios su(eriores, de/en tener m-ti(-es ha/i-idades (ara eCercer sus m-ti(-es res(onsa/i-idades y conse#uir de esos, no est" nada !"ci- hoy (or hoy. Ahora /ien, a/o#ando siem(re (or -a tica so/re e- tema, Xson los cl$entes consc$entes de 6!e el modelo de ne,oc$o 6!e dec$de la casa de So>tEare 6!e contrata $nc$de en la manten$&$l$dad de los prod!ctos 6!e le constr!5enY 7i una (ersona tiene demasiadas acti,idades de di!erentes ro-es, con se,era di!icu-tad entrar" a rea-i>ar todos -os arte!actos (ro(uestos (or a-#unas metodo-o#Aas, caso contrario a si tienes una (ersona con un ro- asi#nado cuya -a/or y !oco se centra en de-imitar e- camino a otros, e,identemente muchos m"s arte!actos ser"n #enerados. '/,iamente, m"s arte!actos #enerados ser"n m"s cosas @ue mantener en e- !uturo, (ero X6!$9n no +a esc!c+ado al,!na ve) a !n ,r!po de desarrolladores s!,er$r reconstr!$r !n So>tEare 6!e tom4 a<os en ser esta&$l$)ado: solo por6!e no lo ent$endenY 4a decisi$n es so/re e- !uturo y como !ina-mente se trata de un ser,icio, (a#ar o no (a#ar (or -a #eneraci$n de arte!actos es decisi$n e:c-usi,a de -os c-ientes. 4o @ue de/e ser c-aro es @ue -os (rinci(ios de- mode-amiento en nin#n momento dicen @ue de/an construirse cientos de dia#ramas (or @ue sA, de hecho uno de/erAa construir e:(resamente -o @ue necesita (ara @ue e:ista una com(rensi$n su!iciente (ara -os (artici(antes de- (royecto. %i (ensamiento /astante (ersona- es @ue en el momento 6!e s$entes 6!e est(s constr!5endo !n arte>acto c!al6!$era: %n$camente por se,!$r !na metodolo, a o por !na $nd$cac$4n de la empresa: pero ese arte>acto no te aporta a&sol!tamente nada: entonces vas por el cam$no e6!$vocado. Pero e-e#ir omitir -a construcci$n de -os mismos so-o (or no sa/er hacer-os o desconocer -o @ue comunican, (uede sim(-emente estar #enerando una omisi$n @ue con se#uridad no se (a#ar" en e(resente, sino en e- !uturo (or (arte de -os c-ientes cuando sus (royectos ten#an (ro/-emas de manteni/i-idad. 4os escenarios est"n (-anteados. 7on decisiones tanto de -os (ro,eedores de so-uciones como de -os desarro--adores in,o-ucrados en e- (royecto e- eCecutar o no -a/ores de ar@uitectura y diseo y (-antear su im(ortancia a -os c-ientes (ara @ue decidan si desean o no (a#ar (or e--as, (ero como -es (-ante en mi (rimer artAcu-o en e- nmero anterior de nuestra re,ista, @ui>" es e- momento de @ue -as dem"s (ersonas sean educadas en -os menesteres de construir 7o!t.are y @ue entiendan de ,erdad como -os a!ectan -as decisiones t cnicas con res(ecto a -as (r"cticas eCercidas y no eCercidas (or -os in#enieros de 7o!t.are, (or omisi$n o estrate#ia de ne#ocio.
E S P A ' 3 O P " M L 3 ' 3 = A R 3 O

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CB

Pro,ramador2 S$. D$se<ador2 7/$ de r$es,os#

La Ser,a pop!lar d$ce2 V)apatero a t!s )apatosW: pero al,!nos ,erentes de so>tEare olv$dan la neces$dad de tener roles espec$al$)ados 5 lo 6!e este pe6!e<o desc!$do p!ede ca!sar en la eSec!c$4n de !n pro5ecto.

Escrito por: El$ana 'ara&allo (5n#. de sistemas)


3n,en$era de desarrollo sen$or y m$em&ro act$vo de AVA/E=. A(asionada (or todo -o re-acionado con -a in#enierAa de so!t.are y -os (rocesos de ca-idad (ara desarro--o. 7iem(re a/ierta a a(render y a com(artir -o @ue -os aos de desarro--o me han enseado.
Redes soc$ales2 T.itter 2 5denti.ca1 @el$anaca 4in8ed5n1 htt(122co.-in8edin.com2in2e-ianacara/a--oa

ace un tiem(o atr"s tu,e @ue en!rentarme a -a (eor (esadi--a de casi todos -os (ro#ramadores @ue cono>co1 Tener @ue aCustar un 977 y or#ani>ar ,isua-mente -a (-anti--a acorde a un moc8u( entre#ado. %i (rimera reacci$n !ue a,isar-e a mi Ce!e @ue mis ha/i-idades est ticas se resumAan a (re#untar-e a mi hiCa si -a ro(a @ue tenAa (uesta com/ina/a y (or m"s de @ue ro#u @ue no me asi#nara esa tarea, i#ua- tu,e @ue hacer-a Rde -a meCor manera (osi/-eS. FPor @u se nos har" tan com(-icada -a tarea de hacer una inter!a> medianamente (resenta/-eG Para mA -a res(uesta es senci--a1 somos (ro#ramadores, no diseadores #r"!icos. ;e -as cosas @ue recuerdo @ue me ensearon en -a uni,ersidad es @ue -a (anta--a !-uye de arri/a hacia a/aCo y de i>@uierda a derechaJ nada m"s. Eso de (oner co-ores @ue com/inen y @ue sea ,isua-mente a#rada/-e es muchas ,eces una tarea tit"nica (ara -a @ue no !uimos !ormados. Todos soamos con --e#ar a un (royecto donde e- diseador #r"!ico ya hi>o -as (-anti--as y nosotros sim(-emente nos dedicamos a co-ocar -os contro-es y a hacer nuestra ma#ia. Es de conocimiento R(o(u-arS @ue -os in#enieros de sistemas so-emos sa/er Rde todo un (ocoS, (ero esto hace re!erencia es(ecA!icamente a- 8no. ho. de- ne#ocio es(ecA!ico
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

%8 & S,"%)D#D

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

C-

(ara e- @ue estamos desarro--ando so!t.are1 si no conocemos c$mo !uncionan -as cosas actua-mente muy (osi/-emente e- (roducto !ina- ser" de!ectuoso o Rinti-S (ara ec-iente. 'tra cosa muy di!erente, es @ue se (retenda @ue cu/ramos todos -os ro-es de un (royecto. 7on muchas -as an cdotas acerca de ser -os RtoderosS, ya sea (or !a-ta de (resu(uesto o (or@ue e- (royecto es tan (e@ueo @ue no amerita tanto (ersonain,o-ucrado, (ero es ac" donde se encontrar"n -a mayorAa !a-encias1 en -as "reas donde somos menos !uertes. A -o -ar#o de -os (royectos donde he estado, he notado @ue cuando a un (ro#ramador se -e asi#na una tarea @ue no es de su com(etencia, o sin -a su!iciente (re(araci$n (ara -a misma, -os resu-tados @ue se o/tienen son medianamente ace(ta/-es y (or -o #eneranecesitan re*(roceso en un determinado momento. A-#unos de -os casos m"s comunes son1 cuando nos (onen a hacer e- mode-o de -a /ase de datos y nuestra e:(eriencia con e--as no ,a m"s a--" de -o ,isto en -a 3ni,ersidad, donde -a norma-i>aci$n, nom/rado, re-aciones y dem"s tendr"n #randes ,acAos y a ,eces terminan en un sa-(ic$n de reta>os. 9uando nos (onen a disear una ar@uitectura y a duras (enas hemos -eAdo a- res(ecto, o/teniendo como resu-tado (atrones de desarro--o desaCustados o e- uso de ca(as innecesarias, ,o-,i ndose un c$di#o com(-icado de mantener. AsA hay muchas m"s ma-as e:(eriencias en desarro--o, en donde se hace e,idente @ue si no se tienen c-aras -as com(etencias de -a (ersona encar#ada de -a tarea, se (uede incurrir en re*(rocesos y2o so/recostos @ue (udieron ser e,itados desde e- comien>o. En muchas casas de so!t.are, es(ecia-mente -as (e@ueas y m"s nue,as, -a !a-ta de (resu(uesto y2o (ersona- es(ecia-i>ado (ara cada uno de -os ro-es, haciendo @ue estas (ersonas @ue no est"n (re(aradas #eneren un (roducto de ca-idad Race(ta/-eS. Pa s , muchos me dir"n @ue e- c-iente (ondr" (eros (or e- so/recosto de- (royecto a- (a#ar (ersonas Radiciona-esS, (ero es im(ortante @ue ten#an en cuenta @ue a medida @ue ,an creciendo, se hace necesario de!inir -os ro-es y tener e- (ersona- ca(acitado (ara emismo. 3na /uena o(ci$n @ue he ,isto en ,arias em(resas es @ue esco#en a -os Cunior y -os ,an encaminando (or e- "rea donde muestran !orta-e>as, de modo @ue ,an haciendo RcarreraS y a- ca/o de un tiem(o se (uede --e#ar a tener e- (ersona- id$neo (ara cada rode un (royecto. 4a es(ecia-i>aci$n de -as tareas es a-#o !undamenta- en e- desarro--o de so!t.are desde mi (unto de ,ista, (ues (ermite a -as (ersonas estar concentradas en hacer /ien -o @ue rea-mente sa/en, en -u#ar de tratar de a(render de manera e:(ress y ,Aa Goo#-ef acerca de "reas donde no son !uertes. 3n /uen #erente es ca(a> de identi!icar y (otenciar -as a(titudes de -as (ersonas @ue est"n en su e@ui(o, de modo @ue se sientan moti,ados, ti-es, y so/retodo, haciendo cosas (ara -as @ue son rea-mente /uenos. 7i a-#uien de- e@ui(o muestra inter s en a-#una otra "rea, es im(ortante (oder (ro(iciar ees(acio (ara @ue (ueda a(render y com(-ementar sus conocimientos, (or@ue tam(oco es (ro(icio @ue se ,aya sintiendo RestancadaS en determinado (roceso. %i in,itaci$n es a -as em(resas a tener siem(re en cuenta -os ro-es de!inidos (ara cada una de -as tareas de- (royecto y asi#nar-e e- (ersona- id$neo a -as mismas (ara #aranti>ar su :ito en -a eCecuci$n. 7i (or a-#una ra>$n esto no es (osi/-e, sea (or !a-ta de (ersonas con -as com(etencias necesarias o a-#una otra ra>$n, ten#a (resente @ue de/e dar un tiem(o (rudencia- (ara @ue a(renda -o su!iciente so/re esta nue,a com(etencia y es(ecia-mente, no es(ere @ue e- tra/aCo sea e:ce-ente a- (rimer intento, (or@ue (ro/a/-emente reci/ir" -a crAtica @ue reci/i$ mi Ce!e cuando e- c-iente ,io -as
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CC

(-anti--as @ue yo ha/Aa hecho1 REsto !ue hecho (or un nio de (reesco-arS, -o @ue hi>o @ue terminara mi corta carrera en e- diseo #r"!ico.

*!c+as personas 6!e rec$9n $n$c$an en el arte de pro,ramar se pre,!ntan como 5 por donde empe)ar: s$ el len,!aSe 6!e esco,$eron estar( &$en o mal 5 erradamente m!c+as veces se preoc!pan m(s por aprender !na +erram$enta 6!e por la l4,$ca de pro,ramac$4n J6!e es lo realmente $mportanteK: veremos como PSe3nt es !na ,ran a5!da al $n$c$ar en este marav$lloso m!ndo 5 c!ales son al,!nos p!ntos esenc$ales a tomar en c!enta s$ 6!$eres empe)ar a VcodearW.

Escrito por: *$la,ros Alessandra 3n>ante *ontero (Est. 5n#. 5n!orm"tica)


Est!d$ante de 3n,en$er a 3n>orm(t$ca. %iem/ro de APESOL (Asociaci$n Peruana de 7o!t.are 4i/re) y de -a comunidad de so!t.are -i/re L!men+ack. %iem/ro de- e@ui(o de traducci$n aes(ao- de ./O*E. A(asionada (or e- desarro--o de so!t.are, tecno-o#Aa y #ad#ets. ;e!ensora de tecno-o#Aas /asadas en so!t.are -i/re y de c$di#o a/ierto.
?e&s2 0-o#1 ....mi-a-e.net Redes soc$ales2 T.itter 2 5denti.ca1 @m$lale

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

P+,2+#M#"%T$ ? PS)9D, "TD%2,

PSe3nt2 "na 3nv$tac$4n para entrar en el marav$lloso m!ndo de la pro,ramac$4n

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CD

- entrar en e- mara,i--oso mundo de -a (ro#ramaci$n -as (ersonas sue-en tener ciertos miedos, so/retodo cuando (iensan si e- -en#uaCe con e- @ue se inician ser" e- m"s adecuado, o @ue hu/iera (asado si esco#Aan otro, (ero sin considerar -o m"s im(ortante @ue es a(render -a -$#ica de (ro#ramaci$n ya @ue asA se -es har" m"s !"ci- usar cua-@uier herramienta a- ya tener -as nociones de como RcodearS. 4a -$#ica de (ro#ramaci$n es -a /ase so/re -a cua- se sustenta -a (ro#ramaci$n, cuando a-#uien em(ie>a a codear de/e en!rentarse a dos #randes (re#untas1 8!9 (rocesos rea-i>ar (ara reso-,er e- (ro/-ema y e- c4mo escri/ir e- c$di#o ((rocesos de- 6!9). E- (seudoc$di#o es una descri(ci$n de un a-#oritmo de (ro#ramaci$n @ue com/ina -as con,enciones de un -en#uaCe ,erdadero y un idioma (es(ao-, in#-es, etc) ya @ue est" diseado (ara -a -ectura humana sin considerar c$di#o es(ecA!ico, es m"s !"ci- de entender @ue e- c$di#o con,enciona- ya @ue descri/e -os (rocesos @ue un (ro#rama contendr" de manera senci--a. E:isten ,arias herramientas @ue (ueden ayudar a a(render -a -$#ica de (ro#ramaci$n, en (articu-ar uno de -os 5;E @ue me #usta es P7e5nt (Pseudo 5nt r(rete), est" /aCo -icencia (/-ica #enera- de GN3, orientado a (ersonas @ue reci n em(ie>an a (ro#ramar, su :ito es ta- @ue a !echa 1E de No,iem/re de- +01+ !i#ura dentro de -os +0 (royectos con mayor nmero de descar#as en 7ource&or#eJ (ara o/tener-o so-o necesitas entrar a -a ("#ina o!icia-Y0Z y en -a secci$n ;escar#asY1Z se encuentra toda -a documentaci$n necesaria (ara -a insta-aci$n.

(ualquier tonto puede escribir c)digo que un ordenador entiende! 2os buenos programadores escriben c)digo que los humanos pueden ententer! *artin =o9ler

CPor7uI PS e%ntD
P7e5nt es una herramienta @ue ayuda a entender m"s so/re e- (seudoc$di#o ya @ue (resenta herramientas de edici$n como autocom(-etado, ayudas, (-anti--as, co-oreado de sinta:is, indentado inte-i#ente, #eneraci$n de dia#ramas de !-uCo, eCecuci$n de (ro#ramas escritos (aso a (aso deta--ando (rocesos de (rue/a y erroresJ a (arte de todo esto e- (-us es @ue es mu-ti(-ata!orma y tota-mente -i/re y #ratuito.

#lgoritmos en Pseudocdigo
Genera-mente todo a-#oritmo escrito en (seudoc$di#o si#ue una estructura1 e- uso de (a-a/ras c-a,es (Proceso, &inProceso, 7i, 7ino, &in7i, Para, &inPara, etc) y una secuencia de instrucciones. A@uA tenemos un eCem(-o /"sico (ara una suma de nmeros e identi!icar si este resu-tado es (ar o im(ar1

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CF

%r&ces&"1uma!umeros.#ar7mpar //6a-ecera del algoritmo //6uerpo del algoritmo !scri'ir Y7ntrodu;ca primer numeroE[\ //0scri-ir muestra valores (eer"numeroO*\ //3eer ingresa informacicn !scri'ir Y7ntrodu;ca segundo numeroE[\ (eer"numeroO$\ suma_-numero* V numero$\ //4signacicn (almacena valor en la varia-le !scri'ir"Y3a suma esE [Wsuma\ //6ondicional 1i para sa-er si es par o impar )i suma Z $ = O !nt&nces !scri'ir Y3a suma es un valor par[\ )in& !scri'ir Y3a suma es un valor impar[\ *in)i *in%r&ces&

P asA de una manera senci--a (odemos hacer muchas m"s acciones @ue e- (seudoc$di#o nos (ermite, como -a>os de re(etir, mientras, (ara, etc de acuerdo e- (ro/-ema @ue deseemos reso-,erJ -os o(eradores usados son -os si#uientes1

Diagramas de flu!o
Es -a re(resentaci$n #r"!ica de- a-#oritmo o (roceso, en P7e5nt tam/i n (odremos o/tener e- dia#rama de nuestro a-#oritmo en (seudoc$di#o, se trata de decir -o mismo
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CG

(ero de una manera #r"!ica y m"s entendi/-e ya @ue (ermite ,isua-i>ar e- camino @ue si#ue -a so-uci$n de- (ro/-ema, a@uA (odemos ,er -os sAm/o-os usados en este ti(o de dia#ramas.

P7e5nt o!rece muchas !unciona-idadesY+Z y de esta manera te (ermitir" rea-i>ar eCem(-os YBZ c-aros y senci--os (ara com(render todo -o @ue necesitas sa/er desde e- ni,e- /"sico y con,ertirte en un muy /uen (ro#ramador (ara tener un Rha((y hac8in#S.

(ode is poetr
7i estas em(e>ando o @uieres em(e>ar en este arte (de -a (ro#ramaci$n) es im(ortante @ue (rimero -e des mucha im(ortancia a -a -$#ica, siendo coherente con tus ideas y ra>onamientosJ y -ue#o /us@ues e- -en#uaCe indicado (ara ti. Necesitas de (aciencia (mucha) (ara (oder /uscar una so-uci$n a -os (ro/-emas @ue desees reso-,er y (iensa en -o #rati!icante @ue ser" -ue#o cuando -o hayas conse#uido, -a (erse,erancia es muy im(ortante (ara (oder com/atir -os /-o@ueos, desconocimientos y dem"s @ue a- !inanos --e,ar"n a ser /uenos en -o @ue hacemosJ de/emos (ensar en todas -as (osi/-es so-uciones ya @ue mientras de m"s (untos o -ados -o miremos aumentamos -a (osi/i-idad de o/tener -a meCor so-uci$n. Necuerdo cuando em(e>a/a y me dieron un #ran conseCo, e- a(render (racticando (no hay meCor !orma @ue esa). =er"s @ue des(u s de un tiem(o dis!rutar"s mucho de R@uedarte (e#adoS horas de horas en e- c$di#o hasta @ue !uncione. 01101000 01100001 01110000 01110000 01111001 0100000 01100011 01101111 01100100 01101001 01101110 01100111WWW
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CI

+eferencias & Links


Y0Z P7e5nt Qe/ o!icia- Yen -AneaZ1 `htt(122(seint.source!or#e.net2a Y9onsu-ta1 1I de No,iem/re de +01+Z Y1Z P7e5nt * ;escar#as Yen -AneaZ1 `htt(122(seint.source!or#e.net2inde:.(h(G(a#ebdescar#as.(h(a Y9onsu-ta1 1I de No,iem/re de +01+Z Y+Z P7e5nt =ideos e im"#enes YEn -AneaZ1 `htt(122(seint.source!or#e.net2inde:.(h(G(a#ebima#enes.(h(a Y9onsu-ta1 1I de No,iem/re de +01+Z YBZ ECem(-o usando P7e5nt YEn -AneaZ1 `htt(122/-i(.t,2neoser#io2(ro#rama*(i-oto*!undamentos*de*(ro#ramaci e9Be0Bn*D1)+)1Ba Y9onsu-ta1 +1 de No,iem/re de +01+Z

X8!9 son los /amespacesY

Desde 6!e empe)4 esta cas$ revol!c$4n de creac$4n de l$&rer as: pl!,$ns 5 !so de componentes de terceros: 6!e de>$n$t$vamente nos a5!dan a m$t$,ar todo ese t$empo de desarrollo Hcas$ s$empreH: con ello nos v$no el ,ran pro&lema2 los nom&res de clases: constantes: >!nc$ones. U s$ n!estra creat$v$dad no nos da&a para m(s 5 term$namos v$s$onando !n nom&re como [!ser\ o [&d\ 5 5a +a& a s$do declarado: nos top(&amos con !n [name coll$s$on\. Para esto PHP D.- nos traSo !na sol!c$4n2 [namespaces.

Escrito por: 3nd$ra M!r,a (5n#eniera de 7istemas)


5ndira es 3n,. de S$stemas de Per. Gestora de Proyectos de desarro--o de so!t.are, pro,ramadora PHP, ana-ista, nue,a amante de -as metodolo, as ],$les. Ahora en,ue-ta en una nue,a a,entura1 su (ro(ia em(resa X3' ProSectsX dedicada a- desarro--o de 7o!t.are.
?e&s2 A/out.me1 htt(122a/out.me2indira/m Redes soc$ales2 T.itter1 @$nd$ra&m

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

PHP

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

CL

hora, ha/-ando de rea-idades, -os names(aces no son cosa nue,a. Pa -os tenAan im(-ementados <a,a, Nu/y o Python. La/-emos un (oco de historia1 Antes de -os names(aces, -a nica so-uci$n conocida era tener c-ass2!unction, es asA @ue (or eCem(-o con Uend tenAas nom/res de c-ases como este1
Iend.6ode&enerator.#hp.>oc-lock.(ag.3icense

9omo (ueden darse cuenta -os nom/res de c-ases termina/an siendo muy #randes, -o @ue nos deCa/a una estructura (oco or#ani>ada y -im(ia y (or su(uesto, a m"s #rande tu (royecto, e- nom/re (odrAa terminar siendo una ,erdadera oraci$n.

>s una manera de encapsular elementos! 4e puede ver como un concepto abstracto en muchos aspectos! ?or e;emplo, en cualquier sistema operativo los directorios sirven para agrupar archivos relacionados, act@an como espacios de nombres para los archivos que ha en ellos!$

Demos los rimeros asos


Para un meCor entendimiento re(rodu>camos un name collision.
/N N 0ste es un reDuerimiento de compra de un artbculo de oficina. N/ class reDuerimiento( Q private ddescripcion = 5#apeles de %cm x$mm5\ pu-lic function get>esc( Q return dthis-"descripcion\ R pu-lic function set>esc(ddesc Q dthis-"descripcion = ddesc\ R R /N N 0ste es un reDuerimiento de documentos a llevar para ingresar a un N concierto. N/ class reDuerimiento( Q private ddescripcion = 53levar documento de identidad5\ pu-lic function get>esc( Q return dthis-"descripcion\ R + htt(122....(h(.net2manua-2es2-an#ua#e.names(aces.(h(

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

D0

pu-lic function set>esc(ddesc Q dthis-"descripcion = ddesc\ R R

Estos son dos conce(tos distintos y (ara (oder se(arar-os tenemos @ue de!inir su names(ace, asA @ue, manos a -a o/ra1
namespace 6ompras\ class +eDuerimiento( Q

private ddescripcion = 5#apeles de %cm x$mm5\ pu-lic function get>esc( Q return dthis-"descripcion\ R pu-lic function set>esc(ddesc Q dthis-"descripcion = ddesc\ R R namespace 6oncierto\ class +eDuerimiento(

private ddescripcion = 53levar documento de identidad5\ pu-lic function get>esc( Q return dthis-"descripcion\ R pu-lic function set>esc(ddesc Q dthis-"descripcion = ddesc\ R R

Es asA @ue hemos (odido de!inir dos namespaces. Es im(ortante ac-arar @ue (ara e!ectos de eCem(-o se han (uesto dos namespace en un mismo documento.

.o es recomendable definir mas de un namespace en un mismo archivo!

C"omo entenderloD
A@uA a#re#aremos un eCem(-o (ara e:(-icar e- !uncionamiento de -os namespaces y -os B ti(os de re!erencias @ue e:isten1

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

D1

9omo (odr"n ,er en -a ima#en, en -a (arte i>@uierda tenemos -a estructura de un (ro#rama (ara medir e- "rea. Por su(uesto, hay un "rea (ara es(acio, (-aneta y (aAs. 7in em/ar#o, nosotros nos u/icamos en -a !-echa 23dR: 4lecha con la leyenda 5A&u/67, en -a c-ase "rea de- (-aneta. ;esde a@uA, ,eremos como se hace re!erencia a un nom/re de c-ase @ue esta dado (or B !ormas di!erentes1 /o c!al$>$cado 9omo ,en, ste no tiene (re!iCo y en e- c$di#o @ue se (uede ,er en -a (arte media de -a ima#en, ya cuenta con su names(ace. '!al$>$cado Esta es otra !orma sin em/ar#o se usa un (re!iCo. 'ompletamente c!al$>$cado Este uti-i>a e- o(erador de (re!iCo #-o/a-.

C"omo usarloD
Ahora mostraremos B di!erentes !ormas de in,ocar a un names(ace. ;i#amos @ue (ara acceder necesitamos un contro-ador. Entonces --amaremos a- names(ace decontro-ador. =eamos -as di!erentes !ormas de in,ocar. J1K 9omo ,emos, se ha (re!iCado e- nom/re de -a c-ase con e- names(ace. Adem"s, tener en cuenta @ue e- names(ace de/e ser dec-arado a- inicio de- archi,o, antes @ue cua-@uier
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DB

otro c$di#o, con e:ce(ci$n de -a (a-a/ra c-a,e dec-are.


namespace 6ontroller\ reDuire.once <compras/+eDuerimiento.php<\ dreD = new B6omprasB+eDuerimiento( \ var.dump(dreD-"get>esc( \

JBK 3na caracterAstica muy im(ortante de -os names(aces es e- de im(ortar, esto es simi-ar a -a ca(acidad de -os sistemas de archi,os /asados en [ni:, de crear en-aces sim/$-icos a un archi,o o directorio B. Para e--o usamos -a (a-a/ra !se. Esto nos ayudar" cuando ten#amos muchos o/Cetos u/icados en un mismo names(ace.
namespace 6ontroller\ reDuire.once 5compras/+eDuerimiento.php5\ use BcomprasB+eDuerimiento\ dreD = new +eDuerimiento( \ var.dump(dreD-"get>esc(

J-K Esta tam/i n cuenta con un al$as, @ue nos ser,ir" (ara cuando en un archi,o e:istan ,arios ni,e-es de names(aces.
namespace 6ontroller\ reDuire.once 5compras/+eDuerimiento.php5\ use BcomprasB+eDuerimiento as +eDue\ dreD = new +eDue( \ var.dump(dreD-"get>esc(

#lgunos ti s<
4os names(ace se (ueden de!inir con su/ni,e-es, (or eCem(-o1
namespace #royectoB!ivelB1u-!ivel\

3na /uena (r"ctica con -as names(aces de PLP (ara cua-i!icar-os en e- c$di#o, es usar re!erencias a/so-utas, en -u#ar de re-ati,as. Ni -as !unciones ni -as constantes se (ueden im(ortar mediante -a sentencia !se. Lay @ue tener cuidado con -os nom/res a -os names(aces dado @ue no se (ueden usar (a-a/ras reser,adas
namespace #roUect/4-stract/2actory

;es(u s de ha/er a(rendido so/re -os names(aces, ha#amos un resumen de sus /ene!icios1
B

Em(a@uetar di!erentes !unciona-idades o -i/rerAas @ue (uedan tener c-ases con nom/res redundantes, -o hace mas modu-ar.

htt(122....(h(.net2manua-2es2-an#ua#e.names(aces.(h(

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

D-

Posi/i-idad de usar un names(ace de!inido con -a (a-a/ra reser,ada !se, (ara !unciones en un mismo names(ace, adem"s de -a uti-i>aci$n de- al$as. &aci-itar -a dominaci$n y -a identi!icaci$n de c-ases.

Ahora ya sa/emos @u es un names(ace. ; mos-e una oCeada a a-#unos de -os !rame.or8s @ue ya -o tienen im(-ementado. S5m>on5 BC2 Este (uede ser uno, o uno de -os m"s anti#uos !rame.or8s (h(, @ue im(-ement$ e- uso de names(aces. ^end OrameEork B.0D2 Este RGo-iatS de -as -i/rerAas en su ,ersi$n +.0 ya cuenta con names(aces. U33 OrameEorkF2 Tiene im(-ementado -os names(aces (ara c-ases, contro-adores y m$du-os.

D E )

htt(122sym!ony.com2 htt(122!rame.or8.>end.com2 htt(122....yii!rame.or8.com2

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DC

Desde esta se,!nda ed$c$4n de Hackers & Developers *a,a)$ne: damos $n$c$o al *an!al de *V' en P5t+on 5 PHP. 'ada mes: !na n!eva entre,a del man!al: a&arcando en detalle: el desarrollo de apl$cac$ones ?e& mod!lares con el patr4n ar6!$tect4n$co modeloH v$staHcontrolador. En esta pr$mera entre,a: +aremos !na $ntrod!cc$4n a *V' 5 +a&laremos so&re el Oront'ontroller2 el patr4n de d$se<o: 6!e nos perm$t$r( !t$l$)ar !na ar6!$tect!ra *V' en s$stemas mod!lares.

Escrito por: E!,en$a Ma+$t (Ar@uitecta G4A%P & A#i-e 9oach)


Eu#enia es Ar6!$tecta de So>tEare, docente instructora de tecno-o#Aas .LA*P (GN324inu:, A(ache, %y7H4, Python y PLP) y A,$le coac+ (3TN) es(ecia-i>ada en 7crum y e6treme Pro#rammin#. %iem/ro de -a Oree So>tEare Oo!ndat$on e inte#rante de- e@ui(o de De&$an Hackers.
?e&s2 ....cursosde(ro#ramacionadistancia.com ....eu#enia/ahit.com Redes soc$ales2 T.itter 2 5denti.ca1 @e!,en$a&a+$t

&

ront9ontro--er es e- patr4n de d$se<o re@uerido (ara tra/aCar con *V', en ar6!$tect!ras mod!lares, ya @ue e- mismo, (ermite maneCar desde un nico archi,o, -as (eticiones de- usuario, ana-i>ar-as e in,ocar a- contro-ador res(onsa/-e de (ro,eer -a in!ormaci$n so-icitada a- usuario. Pero antes de ir de --eno aFr'-"C'-"r'22#r, haremos una /re,e introducci$n so/re e- Patr$n Ar@uitect$nico (ma--amado R(atr$n de de diseoS), %=9.

)ntendiendo el Patrn #r7uitectnico modeloPvistaP controlador


E- (atr$n %=9 de/e ser entendido desde dos $(ticas di!erentes1 -a de- desarro--ador y -a
AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

#+H9%8)" 89+#

*an!al de *V'2 J1K Oront'ontroller

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DD

de- usuario. ;esde e- (unto de ,ista de- desarro--ador, %=9 nos (ermite mantener indi,idua-i>adas, -as Rres(onsa/i-idadesS dentro de un sistema, (ermiti ndonos di!erenciar y ais-ar e- diseo de- sistema (o/Cetos @ue com(onen -os Rmode-osS), de -a inter!a> #r"!ica de- usuario (G35) y su corres(ondiente -$#ica de ne#ocios (,istas), uti-i>ando como Rconector intermediarioS un o/Ceto contro-ador. E- orden mode-o*,ista*contro-ador, es e- @ue e- (ro#ramador de/e se#uir en e- (roceso de desarro--o de- sistema. 7in em/ar#o, desde e- (unto de ,ista de- usuario, todo comien>a en e- contro-ador. =eamos c$mo1 A ni,e- !unciona-, en %=9 todo se inicia con una so-icitud de- usuario ((etici$n)J ;icha so-icitud (a-#o @ue e- usuario @uiere hacer con res(ecto a- sistema), es re(resentada mediante -a estructura de -a 3N5J En una ar@uitectura modu-ar, -a estructura de -a 3N5, #uardar" -a !orma1 (dominio)2modu-o2mode-o2recursoY2ar#umentosZ siendo modu-o, mode-o y recurso datos o/-i#atorios y ar#umentos, o(ciona-es. ;e esta !orma, si un usuario @uisiera a#re#ar una nue,a nota de cr dito y e- mode-o (o/Ceto) Rcom(ro/anteS, (erteneciese a- m$du-o de conta/i-idad, dicha (etici$n serAa rea-i>a a tra, s de -a si#uiente 3N51 htt(122mym,ca((.net2conta/i-idad2com(ro/ante2a#re#ar 9uando -a so-icitud de- usuario es en,iada, sta es reci/ida (or e- contro-ador demode-o, @uien se comunica con ste so-icit"ndo-e -a in!ormaci$n necesariaJ 3na ,e> @ue e- mode-o retorna -a in!ormaci$n a- contro-ador, ste -e entre#a dicha in!ormaci$n a -a ,ista de- mode-o, @uien ser" -a encar#ada de (rocesar -a in!ormaci$n reci/ida, co-ocar-a en -a G35 y mostr"rse-a a- usuario.

=eamos un eCem(-o1
+"$,#!(,-"/m.a///m&dul&/m&dels/vidri&./h/ class Hidrio Q function ..construct( Q dthis-"vidrio.id = O\ dthis-"color = <<\ R function save( Q # &uarda un nuevo o-Ueto u o-Ueto existente R function get( Q # +ecupera un o-Ueto R function destroy( Q # >estruye un o-Ueto R R

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DF

+"$,#!(,-"/m.a///m&dul&/m&dels/vidri&./. class Hidrio(o-Uect E def ..init..(self E self.vidrio.id = O self.color = << def save(self E 555&uarda un nuevo o-Ueto u o-Ueto existente555 pass def get(self E 555+ecupera un o-Ueto555 pass def destroy(self E 555>estruye un o-Ueto555 pass +"012"3/ara"% %4-"/m.a///static/html/ver5vidri&.html _h*"Hidrio 6vidri&5id7_/h*" _p"Hidrio de color 6c&l&r7._/p" +"82)T9-"/m.a///m&dul&/views/vidri&./h/ class HidrioHiew Q function ver(do-Ueto=!/33 Q settype(do-UetoW <array< \ dcomodines = array.keys(do-Ueto \ foreach(dcomodines as ,dcomodin Q dcomodin = 5BQdcomodinBR5\ R dvalores = array.values(do-Ueto \ dtemplate = file.get.contents(5/myapp/static/html/ver.vidrio.html5 \ print str.replace(dcomodinesW dvaloresW dtemplate \ R R

+"012"3/ara"%.th&n4-"/m.a///static/html/ver5vidri&.html _h*"Hidrio :vidri&5id_/h*" _p"Hidrio de color :c&l&r._/p" +"82)T9-"/m.a///m&dul&/views/vidri&./. class HidrioHiew(o-Uect E def ver(selfW o-Ueto E with open(5/myapp/static/html/ver.vidrio.html5W 5r5 as archivoE template = archivo.read( return (emplate(template .safe.su-stitute(vars(o-Ueto

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DG

+"C,NTR,(9#,R-"/m.a///m&dul&/c&ntr&llers/vidri&./h/ class Hidrio6ontroller Q function ver(did=O Q dvidrio = new Hidrio( \ dvidrio-"vidrio.id = did\ dvidrio-"get( \ dview = new HidrioHiew( \ dview-"ver(dvidrio \ R R

+"C,NTR,(9#,R-"/m.a///m&dul&/c&ntr&llers/vidri&./. class Hidrio6ontroller(o-Uect E def ver(selfW id=O E vidrio = Hidrio( vidrio.vidrio.id = id vidrio.get( view = HidrioHiew( self.output = view.ver(vidrio

7i e- usuario @uisiera ,er e- ,idrio con id 1E, su so-icitud serAa en,iada a tra, s de1 htt(122mym,ca((.net2modu-o2,idrio2,er21E y -a misma, serAa tramitada (or =idrio9ontro--er, (ero Xc4mo lle,ar( la sol$c$t!d a V$dr$o'ontrollerY Para res(onder a esta (re#unta, tendremos 6!e +a&lar de Oront'ontroller.

+ecibiendo las solicitudes del usuario con *ront"ontroller desde P yt.on


En Python (/aCo e- su(uesto @ue tra/aCamos con Q7G5 /aCo A(ache ?) nuestra )pp2/c)"/'- ser" @uien ha#a -as ,eces de &ront9ontro--er. En (rimer -u#ar, de/er" ana-i>ar -a 3N5 a !in de o/tener e- m$du-o, mode-o, recurso y -os ar#umentos o(ciona-es @ue -e (ermitir"n conocer a @u contro-ador de/e in,ocar1
+"#ivid&"la"1R2"utili;and&"c&m&"se/arad&r"la"'arra"dia<&nal peticiones = environF<+0M/01(./+7<J.split(</< +"!limin&"el"/rimer"element&"/uest&"=ue"estar>"vac?& peticiones.pop(O +"Cuent&"las"/etici&nes@"/ara"sa'er"si"ha."&"n&"ar<ument&s ? 7i no sa/es como codear una Qe/ en Python RcrudoS (sin &rame.or8s) corriendo /aCo A(ache, te recomiendo -eer un artAcu-o @ue (u/-i@u en ;e/ian Lac8ers V"na ?e& en P5t+on so&re Apac+e en pasosW in#resando en htt(122....de/ianhac8ers.net2una*.e/*en*(ython*so/re*a(ache*sin* !rame.or8s*y*en*so-o*B*(asos

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DI

cantidad = len(peticiones +",'ten<&"el"mAdul&@"m&del&@"recurs&"3."ar<ument&s@"si"existen4 if cantidad == )E moduloW modeloW recurso = peticiones elif cantidad == 4E moduloW modeloW recursoW arg = peticiones

A continuaci$n, de/er" *uti-i>ando -os datos o/tenidos*, im(ortar e- m$du-o decontro-ador, instanciar-o y entre#ar-e -a in!ormaci$n necesaria (ara @ue ste acte1
+",'ten<&"el"n&m're"del"c&ntr&lad&r controller.name = <Zs6ontroller< Z modelo +"%ara"/&der"im/&rtar"el"c&ntr&lad&r@"de'&"a<re<ar"el"/ath"de"la"a/licaciAn from sys import path path.append(environF<16+7#(.2730!480<J.replace(<frontcontroller.py<W << +"2m/&rt&"el"mAdul&"del"c&ntr&lad&r exec <from Zs.controllers.Zs import Zs< Z (moduloW modeloW controller.name +"2nstanci&"al"c&ntr&lad&r"."le"env?&"el"recurs&"."ar<ument&s controller = locals( Fcontroller.nameJ(recursoW arg +"Ca/tur&"la"salida output = controller.output

&ina-mente, se --ama a startKres(onse() y se retorna -a sa-ida, norma-mente1


deB"a//licati&n3envir&n@"start5res/&nse4peticiones = environF<+0M/01(./+7<J.split(</< peticiones.pop(O cantidad = len(peticiones if cantidad == )E moduloW modeloW recurso = peticiones elif cantidad == 4E moduloW modeloW recursoW arg = peticiones controller.name = <Zs6ontroller< Z modelo.capitali;e( from sys import path path.append(environF<16+7#(.2730!480<J.replace(<frontcontroller.py<W << exec <from Zs.controllers.Zs import Zs< Z (moduloW modeloW controller.name controller = locals( Fcontroller.nameJ(recursoW arg output = controller.output start.response(<$OO =9<W F(<6ontent-(ype<W <text/html\ charset=utf-8< J return output

E- &ront9ontro--er, nos o/-i#ar" a @ue nuestros contro-adores, est n (re(arados (ara


AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

DL

reci/ir dos (ar"metros1 e- recurso ((ara hacer -a --amada din"mica a- m todo actuante) y e- ar#umento (@ue (ueda ser re@uerido (or a-#unos m todos)1
class Hidrio6ontroller(o-Uect E """"deB"55init553selB@"recurs&CDD@"ar<C04<etattr3selB@"recurs&43int3ar<44 def ver(selfW id=O E vidrio = Hidrio( vidrio.vidrio.id = id vidrio.get( view = HidrioHiew( self.output = view.ver(vidrio

+ecibiendo las solicitudes del usuario con *ront"ontroller desde PHP


En PLP, e- tra/aCo @ue de/emos deCar (re(arado (ara (oder actuar, re@uiere un mayor es!uer>o. En (rimer -u#ar, de/emos (re(arar a nuestro ser,idor, (ara tra/aCar con -as denominadas R&riend-y 3N4S (3N4 ami#a/-es). Esto re@uiere1 La/i-itar e- m$du-o r#6r/"# de A(ache (de/es con,ertirte en s(er usuario)1
a$enmod rewrite

%odi!icar -a directi,a A--o.',erride de nuestro =irtua-Lost1


4llow=verride 4ll

(7i uti-i>as e- 8/r"u)29'!" (or de!ecto, -oca-i>ar"s e- archi,o en 0#"c0)p)ch#:0!/"#!)1)/2)(2#0d#3)u2". Ten -a (recauci$n de modi!icar-o como s(er usuario. 4a directi,a ,22'6;1#rr/d# se encuentra dentro de- ta# </r#c"'r+) gNo o-,ides re$n$c$ar Apac+e (ara @ue -os cam/ios surCan e!ectoW s#r1/c# )p)ch#: r#!")r"

P !ina-mente, crear un archi,o .h")cc#!! en e- directorio raA> de -a a(-icaci$n (estar" en emismo directorio @ue !rontcontro--er.(h()
# 0ncender el motor de reescritura de las /+3 Rewrite!n<ine",n # 6rear una regla Due rediriUa todas las peticiones (excepto las reali;adas # al directorio static hacia el frontcontroller.php RewriteRule"E3Fstatic4"Br&ntc&ntr&ller./h/

3na ,e> R(re(arado e- terrenoS, estaremos en condiciones de crear nuestro &ront9ontro--er. A- i#ua- @ue en Python, e- (rimer (aso ser" ana-i>ar -a 3N5 a !in de o/tener e- m$du-o, emode-o, e- recurso y -os ar#umentos @ue o(ciona-mente, (odrAa estar en,iando eAB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

F0

usuario1
+"#ivid&"la"1R2"utili;and&"c&m&"se/arad&r"la"'arra"dia<&nal dpeticiones = explode(</<W d.10+H0+F<+0M/01(./+7<J \ +"Cuent&"las"/etici&nes@"/ara"sa'er"si"ha."&"n&"ar<ument&s dcantidad = count(dpeticiones \ +",'ten<&"el"mAdul&@"m&del&@"recurs&"3."ar<ument&s@"si"existen4 if(dcantidad == ) Q list(dmoduloW dmodeloW drecurso = dpeticiones\ R elseif(dcantidad == 4 Q list(dmoduloW dmodeloW drecursoW darg = dpeticiones\ R

4ue#o, con -os datos o/tenidos, est" en condiciones de im(ortar e- archi,o decontro-ador , instanciar-o y entre#ar-e -a in!ormaci$n necesaria (ara @ue ste acte1
+",'ten<&"el"n&m're"del"c&ntr&lad&r dcontroller.name = ucwords(dmodelo . 56ontroller5\ +"%ara"/&der"im/&rtar"el"c&ntr&lad&r@"de'&"a<re<ar"el"/ath"de"la"a/licaciAn ini.set(<include.path<W str.replace(<frontcontroller.php<W <<W d.10+H0+F<16+7#(.2730!480<J \ +"2m/&rt&"el"mAdul&"del"c&ntr&lad&r reDuire.once(5dmodulo/controllers/dmodelo.php5 \ +"2nstanci&"al"c&ntr&lad&r"."le"env?&"el"recurs&"."ar<ument&s dcontroller = new dcontroller.name(drecursoW darg \

&ina-mente, e- &ront9ontro--er de/er" auto*eCecutarse1


class"*r&ntC&ntr&ller"6 "/u'lic"static"Buncti&n"handler34"6 """"""""dpeticiones = explode(</<W d.10+H0+F<+0M/01(./+7<J \ dcantidad = count(dpeticiones \ if(dcantidad == ) Q list(dmoduloW dmodeloW drecurso = dpeticiones\ R elseif(dcantidad == 4 Q list(dmoduloW dmodeloW drecursoW darg = dpeticiones\ R dcontroller.name = ucwords(dmodelo . 56ontroller5\ ini.set(<include.path<W str.replace( <frontcontroller.php<W <<W d.10+H0+F<16+7#(.2730!480<J reDuire.once(5dmodulo/controllers/dmodelo.php5 \ dcontroller = new dcontroller.name(drecursoW darg \ R R *r&ntC&ntr&ller--handler34G

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

Hackers & Developers *a,a)$ne Ao 0, Nmero 1

F1

?or favor, notar que la directiva iniAset, debera estar en un archivo de configuraci)n +un settings!php, no, dentro del =ront(ontroller!
Nuestro &ront9ontro--er, ahora nos estar" o/-i#ando a (re(arar -os contro-adores de nuestros m$du-os, (ara reci/ir dos (ar"metros1 e- recurso ((ara hacer -a --amada din"mica a- m todo actuante) y e- ar#umento (@ue (ueda ser re@uerido (or a-#unos m todos)1
class Hidrio6ontroller Q """"Buncti&n"55c&nstruct3:recurs&CDD@":ar<C04"6 """"""""call5user5Bunc3arra.3:this@":recurs&4@":ar<4G """"7 function ver(did=O Q dvidrio = new Hidrio( \ dvidrio-"vidrio.id = did\ dvidrio-"get( \ dview = new HidrioHiew( \ dview-"ver(dvidrio \

R R

En -a si#uiente entre#a de %=9 en Python y PLP, nos ocu(aremos es(ecia-mente de -as ,istas.
E 7 P A 9 5 ' P 3 0 4 5 9 5 T A N 5 '

AB01B Hackers & Developers *a,a)$ne 9reati,e 9ommons Atri/uci$n No9omercia- 9om(artir5#ua- B.0. ....hdma#a>ine.or#

ASCII ART
Cobra
p'r Annimo

uJ$$$$$$',J <$$h. .,J+. ,J$$$$$$$"z$F,J$$??$$h- =<$$C$$$>-.zJ"J?? $$ccc,. .r$$$$$$$$$$$$$$$$$F "?$$$hJ$$$$$'zJ$$$P" ,$z$$P$$F$hu J$h?$$$$$$$$$$$$$$$$$$$. ``$$$$$$$$$$$"" ,J$x$$$<$$L$$$N .P$$$$F""" ' `"??$$$h?$$$ucd$$$$$$$$$hcr$P"J?$$P""??$Lc$F J$JF `?$C`?$$$$$$"$"$$$$$$P",JP" `$$$F ?$F `?h..`"?$$$$$$$F" .,zP $$$$ cc u .. `$$P `"""" J$$" -c " $$$F ?F ,$ z$$$,ccu.,. `?$h ,J$'. $ . ,$$F ;h ????$$$$$$$$$$$u "h. p" u$" JF = " ;PP" `? <$hcr. `"""????$$r `;d" ,$" `" JP" $r $$$$$$$$$$hccccc ,P",, ,P" J$$$ .P" ? """""""???" ,p" """ J$$P" >' `c hcc,,. -=="F " uF `= `?$$$$-<$$h j' .,J$$$ .'" `\. ""?h.`$$$C " z$$$P" $$" " . .`"""""" ,cL..,,,cc,h `"$h,`$$$$$F ?$C `$$$$$$$$""<$ "?hu`"?$$F $$h. `???" .. ? "?hu cccccccccd$$$$$$$$ "?h."$$$$$$$$$$????" `?hu` zccccccd$$$$$$u `"h,"?$$$$$$$$$??"" `?h.' .;ccccd$$$$$c "$h."$$$$$$$$$$$$c "$h.?$$$??????"" .,zcccccccccccu. `?$u ,cc$$$$$$$$$c ,cc$$$P",cd$$$$$$$$$$$$P"""".zc$$$,?$h $$$$$$$$$$$$. ,J$$$$P",cd$$$$$$$$??"".,ccd$$$$$$$$$$$ $$h`"""""".,,,,, h ;J$$$P",c$$$$$$?"",ccc$$$$$$$$$$$$$$$$$$$ $$$ $$$$$$$$$$$$ `$ x$$?",d$$$$?",cd$$$$$$$$$$$$$$$$$P". . .`;$$',$$$$$$$$$$$F;, ?h.__,zc$$??",cd$$$$$$$$$$$$$$$$$P" zc<$$'$F',J$$F,cccccccccccc J$$$u `"""""",zc$$$$$$$$$$$$$$$$$P"",;J$r"" ",uccd$$$F J$$$$$$$$$$P J$$$$$h `$$$$$$$$$$$$$$$$$??",zc $$F .uJ$$$$$$$$$P'..""""""""""",$$$$$$$$ "?$$$$$$$??""",cr$$??""'c$$$$$$$$$$$$P" <$$$$$$$$$$",J$$$$$$$P" `"`?? ??" `"?$$$$$$$$$",ccc,.```"???".,c,""?CLz> "??""' J$$$$$$$$$$" ?????????"

89 V,$# )R"L9S%K#

"#

Para p!&l$car en -a >ona "# en,Aanos tu mensaCe a contacto@+dma,a)$ne.or, o a tra, s de T.itter inc-uyendo e- hashta# o!icia- #HD*a,a)$ne.
Los - deseos c!mpl$dos por Hacklad$no2
V ctor JL$ma Per%K2 (...) %e (re#unta/a si (odrAan hacer un artAcu-o so/re e- Xmode-o ,ista contro-adorX orientado a -a (ro#ramaci$n .e/ (PLP y P'') . Ar$el Sc+erman JMs. As. Ar,ent$naK2 (...) EstarAa /ueno a-#n artAcu-o so/re %=9. @cr!)rov$ra2 (...) a-#o de #eo*-oca-i>acion. An4n$mo Jv$s$tanteB011@.....K2 Escri/o (ara !e-icitar-os (or su re,ista y contenido tan interesante, @uerAa tam/i n consu-tar si en cuanto a (ro#ramaci$n han considerado a-#o con <a,a (ara !uturas (u/-icaciones, ya @ue este -en#uaCe es muy uti-i>ado tam/i n. Nue,amente !e-icidades y muchas #racias (or su tra/aCo. Respuesta: nos encantar/a incorporar material sobre desarrollo de %ava en entornos !3=?:inux8 A+n no contamos con columnista para este lengua0e# pero estamos en busca de pro esionales &ue puedan hacer sus aportes. Esperamos contar pronto con una secci,n %ava8

HD Responde...
Ser,$o Lope) de A&ar$a2 5#ua- @ue ha/-ais de!rame.or8 (ara (h(, me #ustaria comentarais (ara distintos -en#uaCes de (ro#ramacion, (odria ser como una serie, cada semana uno, (or eCem(-o htm-E y cssB, (ero @ue -os ,a-oreis ,osotras, e- mas (o(u-ar, e- mas !aci- o intuiti,o, e- meCor, etc, #racias Respuesta: es muy buena idea8 9or el momento# los temas de la revista est(n en ocados al hacking y la programaci,n en relaci,n al So t*are :ibre y a+n no hemos contemplado expandirnos hacia el dise)o ;eb. Motivo por el cual# no contamos con columnista para temas de dise)o. 9ero con iamos en poder extender la tem(tica del Maga1ine# tambi<n hacia el dise)o ;eb# dentro de poco tiempo. V$cente Jdesde Al$cante: Espa<aK2 (...) me #ustarAa @ue me en,iaseis a-#n dato m"s o /i/-io#ra!Aa a -a @ue (oder acudir (ara ensearme -a (ro#ramaci$n en Python (...) (or u-timo, @ue en!o@ue (odrAa dar-e de sa-ida (ara un (osi/-e tra/aCo #racias a este -en#uaCe de (ro#ramaci$n. Respuesta: =n muy buen material 2libre7 para 9ython# es el libro >9ython para todos> de Raul !on1ale1 Du&ue &ue puedes obtener en http:??mundogeek.net?tutorial@python?7. Con respecto a tu segunda consulta# hoy en d/a# 9ython es un lengua0e &ue est( poni<ndose >de moda>. Compa)/as de la magnitud de !oogleA y CanonicalB# contratan pro esionales tanto para desarrollos ;eb@based como desktop# mientras &ue otras m(s pe&ue)as# apuntan m(s a 4rame*orks como D0ango o ;ebC9y. As/ &ue el mercado# en este sentido# es muy amplio D7

Se comenta en =E$tter...
@ral>rod2 e:ce-ente (rimera edici$n1 muy /uenos artAcu-os, /uena dia#ramaci$n y contenido ,ariado. &e-icitacionesWW @v$cman>c2 g7a-udos a todo e- e@ui(oW %e ha encantado ,uestra (u/-icaci$n, me encanta ,uestra iniciati,a. gEnhora/uena y "nimoW @moonsm!se2 %i m"s sincera enhora/uena a todas (or este (royecto. 7e#uid asA. Aca/o de descar#arme e- nmero 0 y ya soy !an ,uestro. @pron!er2 un sa-udo a ]indira/m y ]eu#enia/ahit, !e-icitaciones (or sus artAcu-os de PLP escritos (ara ]Lac8;e,%a#a>ine

D%*9$D)$

También podría gustarte