HDMagazineNro6 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 52

Staff

Eugenia Bahit
Arquitecta GLAMP & Agile Coach
Indira Burga
Ingeniera de Sistemas
Mara Jos Montes !a"
#cnica en Inform$tica de Gesti%n
Milagros Infante Montero
Est& Ingeniera de Sistemas
Sergio Infante Montero
Ingeniero de Soft'are
(ac)ers & !e*elo+ers Maga"ine se distri,u-e ,a.o una licencia Creati *e Commons Atri ,uci %n
/oComerci al Com+arti rI gual 0& 1 2n+orted& Eres li,re de co+iar3 distri,uir - com+artir este material&
45EE AS I/ 45EE!6M7
AO ----------- 0
NMERO -------- 6
FECHA: 2013-04-22
:4A5A;/<
HD
Hackers &
DEVELOPERS
+ Maga"ine digital de distri,uci%n
mensual so,re Soft'are Li,re3 (ac)ing - Programaci%n
+ara +rofesionales del sector de #ecnologas de la Informaci%n
Hacker es alguien que disfruta
jugando con la inteligencia
Richard Stallman
Free Software, Free Society
(Pg. 97), GNU Press 2010-2012
En esta edici%n=
!istri,u-endo tus a+licaciones P-thon en P-PI&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&>
Manual de Perl ?Parte I@A&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B1
Equi+os Cgiles= Parte II&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& BD
Permiso denegado&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& E1
P$sate a G/2FLinuG con ArchLinuG= /Gi/HIP(PIMaria!B&&&&&&&&&&&&&&&&&&ED
5efactoring= otra +r$ctica de la Programaci%n eHtrema&&&&&&&&&&&&&&&&&&&&&&0B
Configurando GitJe, en 2,untu Ser*er &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&0K
!ra'&io= diagramas +ara tus +ro-ectos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&>0
Automati"ando tus a+licaciones con Cron&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&>L
M LAS SECCI6/ES !E SIEMP5E=
ASCII Art&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P$g& DB
Este mes= 4ara%n +or JGS
Nona 27&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P$g& DE
La comunidad de nuestros lectores - lectoras
(ac)ers & !e*elo+ers Maga"ine3 es
una iniciati*a sin fines de lucro
destinada al fomento - difusi%n de
las tecnologas li,res +resentes o
futuras3 ,a.o una clara %+tica
docente - altruista3 que resulte de
inters tcnico -Fo cientfico a
+rofesionales del sector de
#ecnologas de la Informaci%n&
(ac)ers & !e*elo+ers Maga"ine se
sostiene econ%micamente con el
a+o-o de la comunidad3 no
reci,iendo su,*enci%n alguna de
ninguna em+resa3 organi"aci%n u
organismo de Go,ierno&
/ecesitamos de tu a+o-o +ara
+oder mantener este +ro-ecto&
A-Odanos a continuar
con este +ro-ecto
Puedes hacer un donati*o ahora3
de B13 BD3 ED3 D13 B11 o BD1 2S!
+ara a-udar a que (ac)ers &
!e*elo+ers Maga"ine +ueda seguir
+u,lic$ndose de forma gratuita3
todos los meses& Puedes donar con
Pa-Pal o #ar.eta de Crdito a tra*s
del siguiente enlace=
'''&hdmaga"ine&orgFdonar
C6/ #2 !6/ACI;/ !E 2S! BD1
5ECIBES !E 5EGAL63
2/A 42/!A !E
/E6P5E/E PA5A #2
65!E/A!65 P65#C#I L
@AL2A!A E/ 2S! ED&P
?6rigen= Estados 2nidosA
Hackers &
DEVELOPERS
+
(ac)ers & !e*elo+ers Maga"ine es +osi,le gracias al com+romiso de=
Responsable de Proyecto
Eugenia Bahit
Responsables de Comunicacin
Indira Burga ?Atenci%n al LectorA P Milagros Infante (if!si"#)
Sta
Eu!enia "ahit
$r%!itecta G&$'P & $gi(e )oac*
www.e!ge#ia+a*it.co,
#ndira "ur!a
-#ge#iera .e Siste,as
a+o!t.,e/i#.ira+,
$ila!ros #nante $ontero
0st!.ia#te .e -#ge#ier1a e# Siste,as
www.,i(a(e.#et
$ar%a &os' $ontes D%a(
23c#ica e# -#for,tica .e Gesti"#
arc*#i#fa.+(ogs4ot.co,.es
Ser!io #nante $ontero
-#ge#iero .e Software
#eosergio.#et
Diusin
(ac)ers & !e*elo+ers Maga"ine agradece a los +ortales que nos a-udan con la difusi%n del +ro-ecto=
www..e+ia#*ac5ers.#et www..esarro((owe+.co, www..es.e(i#!6.#et
EPmail de Contacto=
contactoQhdmaga"ine&org
Je, 6ficial= '''&hdmaga"ine&org
Cuenta #'itter 6ficial= Q(ac)!e*Maga"ine
P
M
#
(
6
/
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
>
Distribuyendo tus
aplicaciones Python
en PyP#
Si desarrollaste un mdulo o aplicacin Python)
distribuirlo en el Python Package Index *PyP#+ y
de,arlo disponible a solo un -pip install. de cual/uier
usuario) es una tarea sumamente sencilla /ue en unos
pocos minutos puedes aprender0 Ent'rate cmo
distribuirlas leyendo este art%culo0
Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)
0!ge#ia es 1r/uitecta de Sot2are, docente i#str!ctora .e tec#o(og1as
3L1$P (GNU/&i#!6, $4ac*e, 'yS7&, Pyt*o# y P8P) y 1!ile coach (U2N)
es4ecia(i9a.a e# Scr!, y e:tre,e Progra,,i#g. 'ie,+ro .e (a 4ree
Sot2are 4oundation e i#tegra#te .e( e%!i4o .e Debian Hackers.
5ebs6
)!rsos .e 4rogra,aci"# a ista#cia; www.c!rsos.e4rogra,acio#a.ista#cia.co,
<e+ 4erso#a(; www.e!ge#ia+a*it.co,
Redes sociales6
2witter / -.e#ti.ca; 7eu!eniabahit
( Python Package Index, ,s co#oci.o 4or s!s sig(as PyP#, es e( re4ositorio oficia(
.e a4(icacio#es .esarro((a.as e# Pyt*o#, %!e 4er,ite a 4rogra,a.ores .e to.o e(
,!#.o .istri+!ir s!s creacio#es .e for,a eficie#te y ,!y si,4(e. 0
&as a4(icacio#es .is4o#i+(es e# *tt4;//4y4i.4yt*o#.org, 4!e.e# ser i#sta(a.as 4or (os
!s!arios, ,e.ia#te !# si,4(e pip install nombre-del-paquete y 4ara %!e 4!e.as
.istri+!ir t!s a4(icacio#es a tra=3s .e PyP-, so(o es #ecesario 4re4arar(as seg!ie#.o
!#os 4ocos 4asos co,o =ere,os a co#ti#!aci"#.
Pre+arar tu a+l i caci %n
&o ,s i,4orta#te es co#tar co# !#a car4eta 4ara a(o>ar (os ,".!(os y 4a%!etes .e (a
a4(icaci"#. 0sta car4eta, co#tar co# a(g!#os arc*i=os est#.ar 4ara s! .istri+!ci"#. U#a
estr!ct!ra .e arc*i=os y .irectorios a4ro4ia.a, 4o.r1a ser co,o (a sig!ie#te;
MiAplicacion/ Directorio de la aplicacin
|_ paquete_1/ Paquete (parte de la app)
| |_ __init__.py
| |_
|_ paquete_2/
| |_ __init__.py
| |_
|_ docs/ Documentacin
| |_
|_ tests/ est !nitarios
| |_
|_ README.txt Descripcin de la aplicacin
|_ LICENSE.txt "opia de la licencia #ttp$//%%%.&nu.or&/licenses/&pl.t't
|_ MANIFEST.in (ista de arc#i)os que *ormar+n parte del paquete
|_ setup.py Arc#i)o de instalacin
El archi8o RE1D$E0t9t
0# 4ri#ci4io, ac(arar %!e (a e6te#si"# t!t se !ti(i9a e# (os 4a%!etes 4ara otorgar
co,4ati+i(i.a. co# siste,as o4erati=os 4ri=ati=os #o +asa.os e# ?#i6, 4ero e# siste,as
GNU/&i#!6, .ic*a e6te#si"#, carece .e sig#ifica.o. Si# e,+argo, es !# est#.ar a (a *ora
.e .istri+!ir 4a%!etes Pyt*o# a tra=3s .e PyP-.
0# este arc*i=o se 4!e.e co(ocar c!a(%!ier i#for,aci"# re(ati=a a (a a4(icaci"#,
4reg!#tas frec!e#tes, ,o.os .e !so e i,4(e,e#taci"#, etc. &a ,is,a ser a%!e((a %!e
PyP-, ,!estre e# (a 4gi#a .e( 4a%!ete;
0ste arc*i=o, as1 co,o (a .oc!,e#taci"# %!e se i#c(!ya e# .ocs/?.t6t 4!e.e escri+irse
a4(ica#.o e( for,ato reST.
U#a g!1a r4i.a .e reST 4!e.e o+te#erse e#;
*tt4;//.oc!ti(s.so!rceforge.#et/.ocs/!ser/rst/%!ic5start.*t,(
El archi8o L#CE:SE0t9t
@sica,e#te se trata .e !#a co4ia .e( te6to .e (a (ice#cia co# (a %!e se .istri+!ye e(
Software o 4a%!ete. Para .istri+!ir e( 4a%!ete co,o Software &i+re, reco,ie#.o !ti(i9ar
(a (ice#cia GP& e# s! =ersi"# A.0 c!yo te6to co,4(eto 4!e.e o+te#erse e#
*tt4;//www.g#!.org/(ice#ses/g4(.t6t
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& D
Becor.a. %!e (a (ice#cia 3PL 8 ;0<, es (a reco,e#.a.a 4or (a Free Software
Foundation
1
4ara (a .istri+!ci"# .e Sot2are Libre, sea 3ste .e !so co,ercia( o #o.
El archi8o $1:#4ES=0in
Cste, es e( %!e a(,ace#a e( (ista.o .e arc*i=os %!e co,4o#e# e( 4a%!ete. 0( (ista.o .e
arc*i=os 4!e.e co(ocarse Da ,a#oE (es .ecir, arc*i=o 4or arc*i=o) o se 4!e.e# !ti(i9ar
i#str!ccio#es co,o in"lude expresin.
Para !# 4a%!ete co# (a sig!ie#te estr!ct!ra;
Pyt#onPrintr/
|_ printr/
| |_ __init__.py ,, mdulo que contiene la *uncin printr()
|_ docs/
|_ tests/
|_ README.txt
|_ LICENSE.txt
|_ MANIFEST.in
|_ setup.py
0( arc*i=o MAN#FE$%in 4o.r1a =erse co,o e( sig!ie#te;
include docs/-.t't
include -.t't
include printr/-.py
$(g!#as i#str!ccio#es frec!e#tes %!e 4o.r1a# i#.icarse e# !# arc*i=o MAN#FE$%in, so#;
include
Archivos a incluir en el paquete
exclude
Archivos a ignorar en el paquete
recursive-include
Incluye archivos de forma recursiva
recursive-exclude
Ignora archivos de forma recursiva
Ftras i#str!ccio#es co,o &lobal-in"lude, &lobal-e!"lude, &ra't y prune ta,+i3# se
e#c!e#tra# .is4o#i+(es.
1 *tt4;//www.fsf.org/
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 9
El archi8o setup0py
0ste es e( arc*i=o c(a=e. )o#te#.r to.a (a i#for,aci"# so+re e( 4a%!ete %!e .eseas
.istri+!ir.
U# e>e,4(o .e for,ato .e arc*i=o setupp( se =er co,o e( sig!ie#te;
*rom distutils.core import setup
setup(
name./Pyt#onPrintr/0 # No!re de l" "pp #C"elC"se$
)ersion./1.2/0 # %ersi&n
aut#or./3u&enia 4a#it/0 # No!re del Autor
aut#or_email./e5a#it6mem5er.*s*.or&/0 # E-"il del "utor
pac7a&es.8/printr/90 # '"(uetes " incluir
url./#ttp$//%%%.pyt#on,printr.or&/0 # )RL de l" "pp
license./:P( )2.1/0 # Licenci"
# Descripcin corta
description./Module t#at allo%s to emulate t#e print_r() P;P *unction/0
lon&_description.open(<=3ADM3.t't<).read()0 # Descripci&n l"r*"
# Seleccin de categoras que pueden encontrarse en:
# https://pypi.python.org/pypi?:action=list_classifiers
classi*iers.8
/De)elopment >tatus $$ ? , Production/>ta5le/0
/3n)ironment $$ "onsole/0
/@ntended Audience $$ De)elopers/0
/(icense $$ A>@ Appro)ed $$ :B! :eneral Pu5lic (icense )2 (:P()2)/0
/Batural (an&ua&e $$ 3n&lis#/0
/Aperatin& >ystem $$ A> @ndependent/0
/Pro&rammin& (an&ua&e $$ Pyt#on $$ 2.C/0
/Pro&rammin& (an&ua&e $$ Pyt#on $$ 2 $$ Anly/0
/opic $$ >o*t%are De)elopment/0
/opic $$ >o*t%are De)elopment $$ (i5raries $$ Pyt#on Modules/
9
)
)a.a !#o .e (os 4ar,etros %!e se 4asa# a (a f!#ci"# setup)*, so# o4cio#a(es. Si#
e,+argo, (os tres 4ri,eros (name, +ersion y aut,or) sie,4re .e+er1a# estar 4rese#tes.
!i stri ,u-endo l a a+l i caci %n
Ga *e,os 4re4ara.o to.os (os arc*i=os. 0s *ora .e .istri+!ir (a a4(icaci"#. Para e((o, (o
4ri,ero %!e *are,os es registrar #!estro 4royecto e# e( PyP-. Para e((o, .es.e (a
ter,i#a(, #a=ega,os *asta e( .irectorio .e (a a4(icaci"# y e>ec!ta,os;
pyt#on setup.py re&ister
&a 4ri,era =e9 %!e registre,os #!estro 4royecto, a#tes .e co,4(etar (a acci"# #os
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& L
4reg!#tar si .esea,os crear !#a c!e#ta o !ti(i9ar !#a e6iste#te, ,ostra#.o e(
sig!ie#te ,e#H;
runnin& re&ister
De need to 7no% %#o you are0 so please c#oose eit#er$
1. use your e'istin& lo&in0
2. re&ister as a ne% user0
2. #a)e t#e ser)er &enerate a ne% pass%ord *or you (and email it to you)0 or
E. quit
Four selection 8de*ault 19$
Si #o .is4o#es .e !#a c!e#ta e# PyP-, (a o4ci"# 2 ser (a ,s a4ro4ia.a. 0(igie#.o .ic*a
o4ci"#, te 4e.ir i#gresar !# e-,ai(, e(egir y co#fir,ar !#a co#traseIa a(fa#!,3rica %!e
co#te#ga a( ,e#os !#a (etra ,ayHsc!(a.
U#a =e9 a4ortes .ic*os .atos, te 4reg!#tar si .eseas g!ar.ar (os ,is,os 4ara %!e #o
te (os 4i.a #!e=a,e#te e# e( f!t!ro.
A!@E5#E/CI A= La contraseSa ser$ almacenada en teGto +lano& 2tili"ar esta funci%n con suma +recauci%n&
0# caso .e ace4tar esta o4ci"#, t!s .atos ser# g!ar.a.os e# e( arc*i=o ~/.pypirc co#
e( sig!ie#te for,ato;
8distutils9
inde',ser)ers .
pypi
8pypi9
username$tu_usuario
pass%ord$tu_cla)e
Este archi*o3 es +osi,le crearlo de forma manual&
Fi#a(i9a.o e( registro .e (a c!e#ta, distutil co#ti#!ar registra#.o e( 4royecto;
runnin& re&ister
runnin& c#ec7
=e&isterin& Pyt#onPrintr to #ttp$//pypi.pyt#on.or&/pypi
Server response #+,,$- ./
U#a =e9 fi#a(i9a.o, creare,os e( tarball .e .istri+!ci"# y (o s!+ire,os a PyP- e# !# so(o
4aso;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& U
pyt#on setup.py sdist ,,*ormat.&Gtar upload
$( fi#a(i9ar, !# .irectorio dist ser crea.o e# (a car4eta .e (a a4(icaci"# i#c(!ye#.o e(
tar&-;
eu&enia6cococ#a,&nucita$H/%e5proIects/Pyt#onPrintrJ tree
.
dist KLL
M pyprintr-,.0.t"r.*1 NLL
KLL docs
M NLL #o%to.t't
KLL printr
M NLL __init__.py
KLL tests
KLL (@"3B>3.t't
MANIFEST KLL -- archivo creado por el sdist
KLL MAB@O3>.in
KLL =3ADM3.t't
NLL setup.py
G esto, es to.o (o %!e #ecesita,os 4ara .istri+!ir #!estra a4(icaci"#.
I nstar tu a+l i caci %n
Para =is!a(i9ar t! a4(icaci"# e# e( re4ositorio PyP-, .e+ers i#gresar e#;
,ttps:..p(pip(t,onor&.p(pi.NombreDeTuApp &!ego, 4ara %!e otros !s!arios 4!e.a#
i#sta(ar(a, .e+er# e>ec!tar;
sudo pip inst"ll nom5re,de,tu,app
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& K
P
E
5
L
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
B1
$anual de Perl
*Parte #V+
En esta entre!a os hablar' del >mbito l'9ico y
espacio de nombres de las 8ariables0 1dem>s)
8eremos cmo se crean subrutinas) as% como el paso
de par>metros por 8alor y reerencia0
Escrito por: $ar%a &os' $ontes D%a( ($rc*era & Progra,a.ora)
0st!.ia#te .e Gra.o -#ge#ier1a e# 2ec#o(og1a .e (a i#for,aci"#. 23c#ico
e# i#for,tica .e gesti"#. 'o#itora FPF. oce#te .e 4rogra,aci"#
Pyt*o# y Scratc* 4ara #iIos .e J-12 aIos. $cti=ista .e( software (i+re y
c!(t!ra (i+re.
5ebs6
@(og; *tt4;//+(og.arc*#i#fa.org/
Redes sociales6
2witter; 7$$ontesDia(
a *e,os =isto (as estr!ct!ras +sicas y c",o se .efi#e# y !ti(i9a# (os .ifere#tes
ti4os .e .atos e# Per(. $*ora =ere,os c",o se .efi#e# y !ti(i9a# (as s!+r!ti#as
(ta,+i3# ((a,a.as f!#cio#es o 4roce.i,ie#tos). Pero a#tes .e esto, =ea,os
c",o f!#cio#a e( ,+ito (36ico .e (as =aria+(es e# este (e#g!a>e.
G
is4o#e,os .e =arios ,3to.os 4ara .ec(arar (as =aria+(es;
#Variale gloal! independientemente de d"nde se defina.
J)aria5le . 1P
##s una variale con $mito en el loque en el que se cre".
#%i hay loques en el interior del mismo! ser&a accesile tami'n desde ellos.
my J)aria5le . 1P
#(uarda el valor de la variale gloal y lo sustituye por el nuevo valor que le
#demos. )na ve* terminada la e+ecuci"n del loque! se restaura su valor.
#%"lo es aplicale a variales gloales.
local J)aria5le . 1P
Para e=itar errores, !#a +!e#a 4rctica es !ti(i9ar e( 4rag,a strict
2
. 0#tre otras cosas,
f!er9a a .ec(arar (as =aria+(es co# my. Para .ec(arar =aria+(es g(o+a(es, .e+e,os !ti(i9ar
our. Kea,os co# !# e>e,4(o;
2 *tt4;//4er(.oc.4er(.org/strict.*t,(
#,/usr/in/perl
use strictP
#-eclaramos las variales gloales
our J&lo5al_de_paqueteP
#Iniciali*amos las variales
J&lo5al_de_paquete . 11P
my J)ar_5loque . 11P
#%i descomentamos! da error! no se puede utili*ar as& sin declarar con our
#.gloal = /01
#%in our! estar$ disponile pero deemos utili*ar siempre el nomre completo:
Jmain$$&lo5al . 11P
#2os da error! ya que .gloal no ha sido declarada con our. 3ara utili*arla!
#con su nomre completo
#local .gloal = /01
local Jmain$$&lo5al . 11P
0# Per( 4o.e,os agr!4ar (as .ec(aracio#es .e =aria+(es ,e.ia#te (os 4a%!etes. &o %!e
se *ace es %!e se asocia# (as =aria+(es a( #o,+re .e( 4a%!ete %!e se .efi#i"
a#terior,e#te. Se !ti(i9a e( 4a%!ete main .e for,a i,4(1cita. 0sto %!iere .ecir %!e
to.as (as =aria+(es .ec(ara.as e# e( e>e,4(o a#terior 4erte#ecer1a# a( 4a%!ete main. $
esto es (o %!e se co#oce co,o es4acio .e #o,+res.
0# c!a#to a( ,+ito, .e+e,os te#er e# c!e#ta %!e (as =aria+(es g(o+a(es so# accesi+(es
.es.e c!a(%!ier 4arte .e( c".igo, sie,4re %!e !ti(ice,os s! #o,+re co,4(eto.
#,/usr/in/perl
# %in utili*aci"n de strict1
pac7a&e &lo5alP
#Iniciali*amos las variales
J&lo5al_de_paquete . 11P
pac7a&e mainP
##s una operaci"n de asignaci"n! no de declaraci"n! por el anterior uso de our
J&lo5al_de_paquete . QP
print J&lo5al_de_paqueteP
#imprime: 4
pac7a&e &lo5alP
print J&lo5al_de_paqueteP
#imprime: /01
)",o 4o.e,os =er co# e( e>e,4(o a#terior, e( *ec*o .e #o !ti(i9ar strict 4!e.e
4ro=ocar errores. )!a#.o acce.e,os a /&lobal0de0paquete, 4or .efecto Per(, e# caso .e
#o e6istir, (a .ec(ara co,o =aria+(e g(o+a( .e ese 4a%!ete. Si #!estra i#te#ci"# era esa,
#o 4asa #a.a, 4ero si e# rea(i.a. %!er1a,os acce.er a (a =aria+(e g(o+a(...
0# e( caso .e *a+er !ti(i9a.o strict, e( script a#terior *a+r1a .a.o !# error. )o# stri"t
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& BB
esta,os o+(iga.os a .ec(arar (as =aria+(es g(o+a(es co# our 4ara %!e #o #ecesite,os
!ti(i9ar s! #o,+re co,4(eto.
&as =aria+(es .efi#i.as co# my so# =aria+(es (oca(es a( +(o%!e e# %!e so# .ec(ara.as. Por
s!4!esto, si *ay +(o%!es .e#tro .e 3ste, se 4o.r acce.er a e((a .es.e esos +(o%!es.
Su,ruti nas
$ (a *ora .e escri+ir 4rogra,as, es #ecesario (a !ti(i9aci"# .e s!+r!ti#as 4ara 4o.er
a4(icar (a t3c#ica .e D.i=i.e y =e#cersE. U#a s!+r!ti#a (ta,+i3# ((a,a.as
4roce.i,ie#tos o f!#cio#es) es !# s!+4rogra,a %!e se refere#cia co# !# #o,+re y
4!e.e ser ((a,a.o .es.e otra 4arte .e( 4rogra,a 4ri#ci4a( (as =eces %!e #ecesite,os.
S! si#ta6is e# Per( es;
su5 nom5re_su5rutina R
5loque_a_eIecutarP
8return e'presinP9
S
$( ((a,ar a !#a s!+r!ti#a, 4o.e,os e#=iar(e 4ar,etros. Cstos, a .ifere#cia .e otros
(e#g!a>es, so# .i#,icos y #o *e,os .e es4ecificar(os e# (a .efi#ici"#.
0# (a s!+r!ti#a, (a =aria+(e es4ecia( 10 es %!ie# co#te#.r (a (ista .e 4ar,etros %!e (e
*a# si.o 4asa.os. Para acce.er a ca.a !#o .e e((os, 4o.e,os !ti(i9ar /02034 /025344
/02n3
Por .efecto, (as s!+r!ti#as .e=!e(=e# e( H(ti,o =a(or .e (a H(ti,a e64resi"# %!e *aya e#
(a ,is,a, si #o se es4ecifica #a.a co# return.
is4o#e,os .e =arios ,3to.os 4ara ((a,ar a !#a s!+r!ti#a;
#5lama a la surutina con los actuales valores de 6_! equivale a 7 surutina 86_91
T su5rutinaP
# %i no se pasan par$metros en los par'ntesis! se env&a una lista nula.
T su5rutina (8par+metro10par+metro2...9)P
su5rutina (8par+metro10par+metro2...9)P
##quivale a surutina 891
su5rutina 8par+metro10par+metro2...9P
#,/usr/in/perl
use strictP
#2o hay prototipo! podemos pasar cualquier n:mero de par$metros.
su5 *actorial R
my (Jn) . 6_P
my Jresul . 1P
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& BE
return Jresult i* ( Jn U 1 )P
Jresult . 1P
*or (my Ji.1PJi U. JnP JiVV) R Jresul-.JiP S
return JresulP
S
#;ami'n podr&amos definirla de forma recursiva
#<ay prototipo! for*amos a que se pase un escalar.
su5 *actorial2 (J)R
my (Jnum) . 6_P
return 1 i* ( Jnum U1 )P
return 1 i* ( Jnum .. 1 || Jnum .. 1 )P
return Jnum - *actorial (Jnum ,1)P
S
*or (my Ji.1PJiU?PJiVV) R
print /Wn JiX ./0 T*actorial(Ji)P
S
Para 4o.er ,o.ificar e( =a(or .e (os 4ar,etros, es .ecir, 4aso 4or refere#cia, .e+e,os
.efi#ir (as =aria+(es %!e co#te#.r# (os arg!,e#tos 4rece.i.as .e !# asterisco y co#
lo"al;
su5 su5rutina R
local (-ar&10-ar&2) . 6_P

S
U# e>e,4(o co# !#a s!+r!ti#a %!e i#terca,+ia e( =a(or .e (os arg!,e#tos;
#,/usr/in/perl
use strictP
my (J'0Jy).(102)P
#Intercamia el valor de dos variales
##specificamos que se han de pasar dos variales por referencia
su5 s%ap (--)R
local (-'0 -y) . 6_P
my Jau' P
Jau'.J'P
J'.JyP
Jy.Jau'P
return 6_P
S
##ste e+emplo tami'n funciona! llamaremos a la funci"n con la variale!
#no con la referencia.
su5 s%ap2 (--)R
my Jau'P
Jau'.J_819P
J_819.J_819P
J_819.Jau'P
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& B0
retrun 6_P
S
s%ap(-'0 -y)P
print /WnBum1$ J'0 Bum2$ Jy/P
#Imprime: 2um/: =! 2um=: />
#volvemos a intercamiar las variales! aunque no hemos pasado
#las variales por referencia.
s%ap2(J'0Jy)P
print /WnBum1$ J'0 num2$ Jy/P
)",o *e,os 4o.i.o =er, e# (a s!+r!ti#a s6ap7, a!#%!e #o 4asa,os (as =aria+(es 4or
refere#cia, se *a# i#terca,+ia.o s!s =a(ores. 0# Per(, e# rea(i.a., to.os (os 4ar,etros
se 4asa# 4or refere#cia.
Para 4re=e#ir errores, es co#=e#ie#te #o !ti(i9ar .irecta,e#te (as =aria+(es 4or .efecto
( $_[] ). )!a#.o #ecesite,os !ti(i9ar 4ar,etros, es +!e#a i.ea !ti(i9ar sie,4re
=aria+(es (oca(es. Para (os 4ar,etros 4asa.os 4or refere#cia, (as .efi#ire,os co#
locl y, 4ara (os 4ar,etros 4or =a(or, (o *are,os co# my.
Enlaces de inter's6
*tt4;//www.4er(.co,/
*tt4;//www.c4a#.org/
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& B>
A
G
I
L
E
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
BD
E/uipos ?!iles6
Parte ##
Es muy @til saber como es un t%pico e/uipo >!il) como
puedes ormar uno y /ue necesitas saber antes de
empe(ar con el traba,o0
Escrito por: Ser!io #nante $ontero (-#ge#iero .e Software)
-#ge#iero -#for,tico co# est!.ios .e $aster de Direccin Estrat'!ica
en =#. -#ge#iero .e software e# =aller =echnolo!ies) acti=ista,
co#tri+!i.or y co#s!(tor .e 4royectos 4LOSS, ,ie,+ro .e 1PESOL y
escritor .e art1c!(os y (i+ros t3c#icos .e 4rogra,aci"#.
Periles6
*tt4;//a+o!t.,e/#eosergio
2witter; 7neoser!io
as ,eto.o(og1as gi(es co,o ta( #o tie#e# ro(es for,a(es, s"(o se tie#e a(go
rea(,e#te c(aro; *ay 4erso#as %!e tie#e# #ecesi.a.es, .e (as c!(es se o+tie#e#
(os re%!isitos .e (o %!e se co#str!ir (c(ie#tes) y 4erso#as %!e 4!e.e# co#str!ir (a
so(!ci"# a esas #ecesi.a.es (.esarro((a.ores).
&
En trminos simples tenemos a los que deciden qu se va a
construir y a los que deciden cmo se construir.
Por (o ta#to si a4arece (a 4reg!#ta; L."#.e est# (os 4rogra,a.ores, testers y
a#a(istasM, (a res4!esta corta es; sig!e# esta#.o a*1.
0( agi(is,o #o +!sca .esc!+rir %!i3#es i#ter4reta# (os ro(es, #i e( ro( ,gico %!e to.o (o
4!e.e si#o, se e#foca e# %!e (os ro(es sea# rea(,e#te (os a4ro4ia.os 4ara (a so(!ci"#.
El cl i ente $gi l
El cliente gil es la fuente principal de la verdad
2o.os (os re%!eri,ie#tos =ie#e# .e( c(ie#te gi(. C( co#oce e( f(!>o .e (a i#for,aci"#, es
(a f!e#te .e (as #ecesi.a.es 4or reso(=er y co,o es .e es4erarse es 4ara %!ie# se est
co#str!ye#.o e( software.
0st fa,i(iari9a.o co# e( #egocio y es a( %!e (e i,4orta .e =er.a. %!e e( software
c!,4(a co# s! f!#ci"#N 3( 4ro=ee (os (i#ea,ie#tos a( e%!i4o so+re e( giro .e( #egocio,
res!e(=e 4reg!#tas y o+=ia,e#te 4ro4orcio#a retroa(i,e#taci"# .e i#for,aci"#, a (a
=e9 %!e .efi#e 4riori.a.es .es.e e( 4!#to .e =ista .e( #egocio y .eci.e %!3 se
co#str!ye y c!#.o.
2o.as estas res4o#sa+i(i.a.es .e( c(ie#te #o =a# so(asN es !# 4roceso .e co(a+oraci"#
co# e( e%!i4o .e .esarro((o, %!e e#tie#.e %!e *ay ra9o#es t3c#icas 4ara te#er %!e
4riori9ar a(g!#as tareas y f!#cio#a(i.a.es a#tes %!e otras.
0stos c(ie#tes tie#e# e( tra+a>o .e .eci.ir (os tie,4os .e e#trega y 4ro4orcio#ar e(
fi#a#cia,ie#to 4ara e,4e9ar co# e( 4royecto.
-.ea(,e#te e( c(ie#te .e+e tra+a>ar a tie,4o co,4(eto co# e( e%!i4o .e .esarro((o 4ara
*acer %!e (as cosas f!#cio#e#, 4or e>e,4(o e# (as 4ri,eras =ersio#es .e (a ,eto.o(og1a
:P, se s!ger1a %!e e( c(ie#te oc!4e e( ,is,o es4acio f1sico %!e e( e%!i4o.
En Scrum al cliente se le conoce como el dueSo del +roducto&
Si# e,+argo es 4osi+(e %!e #o se 4!e.a o+te#er esa e6c(!si=i.a. a tie,4o co,4(etoN
si# e,+argo a 4esar .e ese 4osi+(e co#tratie,4o, e( co,4ro,iso %!e se .e+e te#er co#
e( c(ie#te .e+e ser f!erte 4ara %!e e( e%!i4o sea ca4a9 .e to,ar .ecisio#es co# e(
co#se#ti,ie#to y e( co#oci,ie#to co,4(eto .e( c(ie#te 4ara e( 36ito .e( 4royecto.
Un cliente involucrado significa un proyecto exitoso.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& B9
El equi +o de desarrol l o
0
Becor.a#.o %!e a(g!#a =e9 *e,os =isto o (e1.o estos ro(es; a#a(istas .e #egocios,
gestores o gere#tes .e 4royecto, a.,i#istra.ores .e +ases .e .atos, e=a(!a.ores,
.iseIa.ores, 4rogra,a.ores, .oc!,e#ta.ores, e#tre otros %!e sig!e# esta#.o
4rese#te. P!es e( e%!i4o .e .esarro((o gi( es +sica,e#te !# gr!4o ,!(ti.isci4(i#ario
.e 4erso#as %!e *ace# rea(i.a. (os re%!eri,ie#tos .e (os c(ie#tes, so(!cio#a# !#a
#ecesi.a., si# i,4ortar ta#to %!e ro( estricto c!,4(a#.
0# (a teor1a y (o i.ea( se .ice %!e so# a!to-orga#i9a.os y *asta e# cierto gra.o (o so# e#
(a 4rctica, si# e,+argo *ay a(g!#os ro(es %!e #ecesita# ser c(arifica.os 4ara %!e #o se
=!e(=a co#f!so y e=itar %!e se co#=ierta e# !# e%!i4o .e irres4o#sa+(es.
El analista >!il
)!a#.o !# re%!eri,ie#to ((ega 4ara ser .esarro((a.o, a(g!ie# tie#e %!e as!,ir (a (a+or
.e i#=o(!crarse y co,!#icarse co# e( c(ie#te, 4ara aseg!rarse .e *a+er e#te#.i.o (a
#ecesi.a. a reso(=er. 0sa (a+or es (a .e( a#a(ista gi(.
$y!.a a( c(ie#te a escri+ir *istorias .e !s!ario, crea +os%!e>os, 4rototi4os y !sa to.as
s!s *a+i(i.a.es 4ara ay!.ar a e#te#.er (a ese#cia .e (a *istoria .e !s!ario.
S! (a+or es ,!y i,4orta#te, e#tie#.e e( (e#g!a>e .e( c(ie#te y e( (e#g!a>e .e( e%!i4o
t3c#ico.
El pro!ramador >!il
0ste es e( ro( %!e escri+e c".igo y se to,a e# serio s! tra+a>o, 4or%!e (o *ace sie,4re
4e#sa#.o e# (a ,e>ora co#ti#!a y e# (a ,e>ora .e (a ca(i.a. .e( 4ro.!cto, a!to,ati9a
4r!e+as y *ace !so .e (as +!e#as 4rcticas .e .esarro((o, esta co#sta#te,e#te
*acie#.o ,e>oras a( software.
2ra+a>a ta,+i3# ,!y cerca .e( c(ie#te y .e to.os (os .e,s e# e( e%!i4o 4ara
aseg!rarse .e %!e to.o f!#cio#e, e#trega#.o co#sta#te,e#te >!#tos, software
f!#cio#a( %!e res!e(=e #ecesi.a.es .e( c(ie#te.
El e8aluador >!il
&os e=a(!a.ores gi(es se *ace# cargo .e 4re=e#ir errores e# e( 4ro.!cto %!e se =a a
e#tregar. 0s 4or e((o %!e 4artici4a# .es.e e( 4ri#ci4io .e( 4royecto, aseg!ra#.o e( 36ito
.e (a re(aci"# e#tre (a *istoria .e !s!ario y (a f!#cio#a(i.a. e#trega.a.
0st# 4or to.o e( 4royecto. 0sto se .e+e a %!e e# !# 4royecto gi( to.o #ecesita
4ro+arse y a.e,s, ay!.a ta,+i3# ca4t!ra#.o re%!eri,ie#tos .e (os c(ie#tes a tra=3s
.e 4r!e+as.
A N.B; 4or fa=or, #"tese %!e (os ro(es i#.ica.os 4or e( a!tor e# este a4arta.o, so# !s!a(,e#te =is!a(i9a.os a( tra+a>ar co#
,eto.o(og1as co,o Oa#+a# o e# orga#i9acio#es gi(es ,s (igeras %!e #o se e#c!e#tra# arraiga.as a !#a ,eto.o(og1a 4!#t!a(.
Si# e,+argo, e# (a !ti(i9aci"# .e ,eto.o(og1as gi(es ,e#os (igeras co,o e:tre,e Progra,,i#g, si +ie# #o se es4ecifica# #i se
.efi#e# ro(es, 4o.r1a# res!(tar co#trarios a a(g!#os .e s!s 4ri#ci4ios ,ie#tras %!e e# otras ,eto.o(og1as co,o Scr!,,
.irecta,e#te re4rese#tar1a# ro(es o4!estos a (os 4ro4!estos 4or (a ,is,a.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& BL
&os e=a(!a.ores gi(es ay!.a# a (os 4rogra,a.ores a a!to,ati9ar 4r!e+as y e#co#trar
.efectos e# e( corto 4(a9o, 4ara e=itar %!e se ge#ere# gra#.es gastos .e
,a#te#i,ie#to y so4orte.
2ie#e (a =isi"# co,4(eta .e (o %!e .e+e ser e=a(!a.o (4r!e+as .e carga, esf!er9o,
esca(a+i(i.a., !sa+i(i.a. y to.o (o %!e 4!e.a ser e=a(!a.o).
El !estor de proyecto >!il
0ste ro( co#oce e( ca,i#o 4ara %!e e( e%!i4o te#ga 36ito, se e#carga .e re,o=er
c!a(%!ier i,4e.i,e#to o 4ro+(e,a %!e .ific!(te e( tra+a>o .e( e%!i4o.
0st co#sta#te,e#te 4(a#ea#.o y re4(a#ea#.o, a>!sta#.o (as cosas c!a#.o sea#
#ecesarias, 4rese#ta (os re4ortes a (os %!e fi#a#cia# e( 4royecto, ref!er9a (as re(acio#es
e#tre (as 4erso#as .e( e%!i4o y 4rotege a( e%!i4o c!a#.o es #ecesario.
U# +!e# gestor .e 4royecto, #o (e .ice a( e%!i4o %!3 *acer ya %!e #o es #ecesario
*acer(o y a.e,s crea e( a,+ie#te 4ara %!e e( e%!i4o sea i#.e4e#.ie#te y co#ti#He
e#trega#.o =a(or a( c(ie#te.
El diseAador BC >!il
&a e64erie#cia .e( !s!ario es !# 4!#to f!#.a,e#ta( 4ara e( 36ito .e !# softwareN (a
(a+or .e este .iseIa.or es estar e#foca.o e# crear i#terfaces f!#cio#a(es, !sa+(es y
orie#ta.as 100P a( !s!ario y s! co#te6to.
e+e e#co#trar y !sar to.os (os ,e.ios 4osi+(es 4ara e#te#.er a( !s!ario .e( software,
y co(a+orar co# e( resto .e( e%!i4o 4ara e#co#trar (a ,e>or i#terfa9.
$fort!#a.a,e#te, ,!c*as .e (as 4rcticas !sa.as 4or (os e64ertos e# !sa+i(i.a. =ie#e#
.eri=a.as .e( es41rit! gi(, co,o e#focarse e# e( =a(or, (a retroa(i,e#taci"# r4i.a y
+!scar ,e>orar co#sta#te,e#te.
&os .iseIa.ores U: #o te,e# .iseIar i#terfaces .e ,a#era i#cre,e#ta( e iterati=aN
te#er a !# .iseIa.or U: e# !# e%!i4o es +asta#te i,4orta#te, ya %!e ay!.a a %!e
f(!ya# (as i.eas co#sta#te,e#te, sie,4re 4e#sa#.o e# e( !s!ario fi#a(.
Los dem>s
06iste# ro(es co,o (os a.,i#istra.ores .e +ases .e .atos, .oc!,e#ta.ores,
a.,i#istra.ores .e siste,as, ar%!itectos .e software, coor.i#a.ores, e#tre#a.ores,
e#tre otros. 0((os ta,+i3# for,a# 4arte .e( e%!i4o y .e+e# ser trata.os 4or ig!a( co,o
to.os (os .e,s.
Scrum tiene un rol llamado Scrum Master que es una es+ecie de entrenador - un su+er gestor de +ro-ecto todo
en uno
&os e%!i4os e64eri,e#ta.os #o #ecesita# ya .e e#tre#a.ores .e.ica.os a( e%!i4o,
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& BU
4ero (os #!e=os e%!i4os .efi#iti=a,e#te e#co#trar# +e#eficio e# te#er a !#o.
En un equipo gil es normal que una persona pueda tener
varios roles, ya que no son excluyentes entre si.
Conse. os +ara formar tu equi +o $gi l
@!sca a (os ge#era(istas, a%!e((os 4rogra,a.ores %!e #o te#ga# ,ie.o a tocar
c!a(%!ier 4arte .e( 4royecto. No te#.rs 4ro+(e,as co# e((os ya %!e te#.r# !#a
=isi"# g(o+a( so+re e( 4royecto y #o te#.r# 4ro+(e,as co# i#ter4retar .i=ersos
ro(es.
Perso#as %!e se sie#ta# c",o.as co# e( ca,+io, a%!e((os %!e #o tie#e#
4ro+(e,as e# a4re#.er #!e=as tec#o(og1as y se a.a4ta# r4i.a,e#te a !#a. U#
4royecto ca,+ia to.o e( tie,4oN =er a( ca,+io #o co,o !# 4ro+(e,a, si#o co,o
!#a o4ort!#i.a..
Perso#as %!e se4a# .e>ar s!s egos af!era, 4or e( +ie# .e( 4royectoN 4erso#as %!e
4!e.a# e#te#.er y a4ro=ec*ar e( co#oci,ie#to .e otros y co,4artir i#for,aci"#N
4erso#as %!e .isfr!te# .e a4re#.er y crecer e# e%!i4o.
Se aprende a hacer un equipo gil, participando de uno o
intentando formar uno. La teora es insuficiente; la prctica
clarificar los conceptos.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& BK
G
/
2

F

L
I
/
2
H
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
E1
3:BDLinu9 para pro!ramadores6
Permiso dene!ado
Change Mode) m>s conocido por su abre8iatura c!mo")
es el comando de 3:BDLinu9 /ue permite modiicar
los permisos de acceso tanto a archi8os como a
directorios0 En m>s de una oportunidad te habr>s
encontrado e,ecutando el comando c!mo" se!uido de
EEE como ar!umento para solucionar el error
-Permiso dene!ado.0 Sin embar!o) la mayor%a de las
8eces) esa) no siempre es la solucin correcta0
Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)
0!ge#ia es 1r/uitecta de Sot2are, docente i#str!ctora .e tec#o(og1as
3L1$P (GNU/&i#!6, $4ac*e, 'yS7&, Pyt*o# y P8P) y 1!ile coach (U2N)
es4ecia(i9a.a e# Scr!, y e:tre,e Progra,,i#g. 'ie,+ro .e (a 4ree
Sot2are 4oundation e i#tegra#te .e( e%!i4o .e Debian Hackers.
5ebs6
)!rsos .e 4rogra,aci"# a ista#cia; www.c!rsos.e4rogra,acio#a.ista#cia.co,
<e+ 4erso#a(; www.e!ge#ia+a*it.co,
Redes sociales6
2witter / -.e#ti.ca; 7eu!eniabahit
a.a =e9 %!e !# a(!,#o e>ec!ta !# ls -l y =eo %!e ca,+i" (os 4er,isos .e to.o
!# .irectorio <e+ a 777, e# ,i ca+e9a a4arece (a i,age# .e Bruce Dikinson
grita#.o Six, six, six, the nuber o! the beast". )(aro %!e JJJ #o es (o ,is,o %!e
777, 4ero para el sistema de archi8os en 3:BDLinu9 el EEE es -.efi#iti=a,e#te-, el
n@mero de la bestia Qcr3e,eR
)
Na.a ,s frec!e#te 4ara !# 4rogra,a.or, %!e e>ec!tar s! a4(icaci"# <e+ e# e(
#a=ega.or y =er e( error DPer,iso .e#ega.oE. Pero e( ,is,o, #o #ecesaria,e#te se
4ro.!ce 4or%!e !# arc*i=o o .irectorio te#ga 4er,isos .ifere#tes a 777. Si# e,+argo,
(a 4ri,era Dso(!ci"#E %!e e( 4rogra,a.or s!e(e e#co#trar, es ca,+iar (os 4er,isos
asig#a#.o a(go ta# De#.e,o#ia.a,e#teE 4e(igroso co,o 777.
$sig#ar a !# arc*i=o o .irectorio 4er,isos 777, sig#ifica asig#ar 4er,isos .e (ect!ra,
escrit!ra y e>ec!ci"# so+re ese arc*i=o o .irectorio, 4ara c!a(%!ier !s!ario, sea o #o e(
4ro4ietario. Pero estos #H,eros, #o so# #H,eros a( a9ar, #i ,!c*o ,e#os se #ecesita
a#.ar ,e,ori9a#.o #H,eros .e A cifras 4ara e#te#.er estos 4er,isos e# GNU/&i#!6.
Si,4(e,e#te, se trata .e co,4re#.er c",o f!#cio#a e( siste,a .e 4er,isos.
)!a#.o *ace,os !# (ista.o .e arc*i=os y .irectorios, a (a i9%!ier.a .e ca.a arc*i=o
(co,o 4ri,era co(!,#a) =e,os !#a s!cesi"# .e 10 .e caracteres;
-r2-r2-r-- 1 eu&enia eu&enia 1YZ mar 2Q 12$?E A&enda 2112.ods
dr2xr2xr-x 2 eu&enia eu&enia E01Z ene ? 1Y$EQ certi*icados
lr2xr2xr2x 1 root root E? no) Q 1Y$EQ proIects ,[ /#ome/eu&enia/proIects
$ (a =e9, (a tercera co(!,#a, ,!estra e( #o,+re .e( 4ro4ietario .e( arc*i=o
(ge#era(,e#te, !s!ario %!e cre" e( arc*i=o o .irectorio, o !s!ario %!e *a si.o asig#a.o
co,o D.!eIoE 4or e( crea.or .e( arc*i=o);
,r%,r%,r,, 1 eu*eni" eu&enia 1YZ mar 2Q 12$?E A&enda 2112.ods
dr%'r%'r,' 2 eu*eni" eu&enia E01Z ene ? 1Y$EQ certi*icados
lr%'r%'r%' 1 root root E? no) Q 1Y$EQ proIects ,[ /#ome/eu&enia/proIects
&a c!arta co(!,#a i#.ica e( gr!4o a( c!( e( arc*i=o o .irectorio 4erte#ece;
,r%,r%,r,, 1 eu&enia eu*eni" 1YZ mar 2Q 12$?E A&enda 2112.ods
dr%'r%'r,' 2 eu&enia eu*eni" E01Z ene ? 1Y$EQ certi*icados
lr%'r%'r%' 1 root root E? no) Q 1Y$EQ proIects ,[ /#ome/eu&enia/proIects
Ko(=ie#.o a (a 4ri,era co(!,#a ((a %!e ,!estra (a s!cesi"# .e 10 caracteres), se
s!+.i=i.e (a!#%!e i,agi#aria,e#te) e# S +(o%!es. 0( 4ri,ero, .e !# so(o caracter y (os A
resta#tes, .e A caracteres ca.a !#o;
- r2- r2- r-- 1 eu&enia eu&enia 1YZ mar 2Q 12$?E A&enda 2112.ods
d r2x r2x r-x 2 eu&enia eu&enia E01Z ene ? 1Y$EQ certi*icados
l r2x r2x r2x 1 root root E? no) Q 1Y$EQ proIects ,[ /#ome/eu&en...
0( primer blo/ue .e !# caracter, i#.ica si,4(e,e#te e( tipo .e e(e,e#to .e( c!( se
trata;
- Arc#i)o
d Directorio
l 3nlace sim5lico
&os A caracteres .e ca.a !#o .e (os blo/ues restantes, i#.ica# (os permisos .e acceso;
r (read) (ectura
2 (%rite) 3scritura
x (e\ecution) 3Iecucin
- sin permiso
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& EB
0sos +(o%!es .e 4er,isos, corres4o#.e# a( 4ro4ietario, a( gr!4o y a c!a(%!ier otro
!s!ario res4ecti=a,e#te;
propiet"rio *rupo otros
, r%, r%, r,, 1 eu&enia eu&enia 1YZ mar 2Q 12$?E A&enda 2112.ods
d r%' r%' r,' 2 eu&enia eu&enia E01Z ene ? 1Y$EQ certi*icados
l r%' r%' r%' 1 root root E? no) Q 1Y$EQ proIects ,[ /#o...
Si to,a,os e( 4ri,er arc*i=o, esta,os .icie#.o %!e;
r2- 3l propietario tiene permisos de lectura y escritura pero no de eIecucin
r2- 3l &rupo tiene permisos de lectura y escritura pero no de eIecucin
r-- Atros usuarios solo tienen permisos de lectura
0# ca,+io, e( tercer arc*i=o (e#(ace si,+"(ico) tie#e 4er,isos .e (ect!ra, escrit!ra y
e>ec!ci"# 4ara e( 4ro4ietario, e( gr!4o y 4ara c!a(%!ier otro !s!ario;
Propietario$ r%' (read0 %rite0 e'ecute)
:rupo$ r%' (read0 %rite0 e'ecute)
Atros$ r%' (read0 %rite0 e'ecute)
&as (etras %!e re4rese#ta# ca.a !#o .e (os 4er,isos, se e#c!e#tra# asocia.as a !#
#H,ero;
r read lectura 3
2 %rite escritura +
x e'ecute eIecucin 4
5egla +ara memori"ar la asociaci%n de nOmeros - letrasF+ermisos= Cuanto ma-or es el nOmero3 menor es
el +ermi so&
)a.a +(o%!e .e A (etras, es re4rese#ta.o 4or (a s!,a .e (os #H,eros .e ca.a (etra. 0s
.ecir %!e s!,a#.o (os 4er,isos .e ca.a +(o%!e, se o+tie#e e( D#H,ero fi#a(E .e
4er,iso;
r,,r,,r,, 8E9 8E9 8E9 333
,%,,%,,%, 829 829 829 +++
r%,r%,r%, 8EV29 8EV29 8EV29 555
r%,r,,r,, 8EV29 8E9 8E9 533
r%'r%,r,, 8EV2V19 8EV29 8E9 653
$#tes .e ,o.ificar (os 4er,isos .e !# arc*i=o o .irectorio, se .e+e 4e#sar 4re=ia,e#te
e# %!3 #ecesi.a.es te#.r ca.a !#o .e (os +(o%!es. Por e>e,4(o;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& EE
Propietario$ permisos a5solutos r%' . E V 2 V 1 . 6
:rupo$ permisos de lectura y escritura r%, . E V 2 V 1 . 5
Atros$ permisos de lectura r,, . E V 1 V 1 . 3
U# error frec!e#te, es asig#ar 4er,isos a+so(!tos (777) 4ara %!e !# !s!ario e#
4artic!(ar, .isti#to a( 4ro4ietario, 4!e.a te#er !# acceso co,4(eto a( arc*i=o;
J ls ,l
,r%,r%,r,, 1 eu&enia de)elopers 1YZ mar 2Q 12$?E arc#i)o.*oo
7 c8od 666 "rc8ivo.9oo
J ls ,l
-r2xr2xr2x 1 eu&enia de)elopers 1YZ mar 2Q 12$?E arc#i)o.*oo
Pero e# e( caso a#terior, si so(o se %!iere %!e, 4or e>e,4(o, e( !s!ario D8uanE te#ga !#
acceso co,4(eto, se .e+e ca,+iar e( 4ro4ietario .e( arc*i=o y #o (os 4er,isos;
J ls ,l
,r%,r%,r,, 1 eu&enia de)elopers 1YZ mar 2Q 12$?E arc#i)o.*oo
7 c8o2n :u"n "rc8ivo.9oo
J ls ,l
,r%,r%,r,, 1 :u"n de)elopers 1YZ mar 2Q 12$?E arc#i)o.*oo
e esta for,a, e( !s!ario 8uan 4or ser 4ro4ietario .e( arc*i=o, te#.r acceso 4ara (eer(o
y escri+ir(o y e( !s!ario eu&enia, 4or 4erte#ecer a( gr!4o de+elopers, te#.r e( ,is,o
acceso a( ig!a( %!e c!a(%!ier otro !s!ario .e( gr!4o de+elopers. &a a(ter#ati=a, ta,+i3#
4o.r1a *a+er si.o i#cor4orar a( !s!ario 8uan a( gr!4o de+elopers 4ero ya #os estar1a,os
ye#.o .e( te,a.
Si e# ca,+io, so(o se %!isiera %!e (os !s!arios 8uan y eu&enia t!=iese# acceso a( arc*i=o,
4ero so(o 8uan 4!.iese escri+ir e# 3(, se co(oca co,o 4ro4ietario a 8uan y co,o gr!4o,
!#o a( %!e so(o 4erte#e9ca e( !s!ario eu&enia y (!ego, se ,o.ifica# (os 4er,isos 4ara
.ic*o gr!4o;
J ls ,l
,r%,r%,r,, 1 eu&enia de)elopers 1YZ mar 2Q 12$?E arc#i)o.*oo
7 c8o2n :u"n-*rupo;eu*eni" "rc8ivo.9oo
J ls ,l
,r%,r%,r,, 1 Iuan &rupo_eu&enia 1YZ mar 2Q 12$?E arc#i)o.*oo
# c8od 53, "rc8ivo.9oo
J ls ,l
,r%,r,,r,, 1 Iuan &rupo_eu&enia 1YZ mar 2Q 12$?E arc#i)o.*oo
Pero e( ca,+io .e 4ro4ie.a., no debe aplicarse a usuarios como 4or e>e,4(o, e(
!s!ario .e $4ac*e ###-"t. )!a#.o a este !s!ario se (e otorga (a 4ro4ie.a. .e !#
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& E0
arc*i=o, .e+e e#te#.erse %!e se est otorgando la propiedad a cualquier persona que
acceda a dicho archivo ediante !pache. Por e>e,4(o, si se tratara .e( arc*i=o
'oo,tml a( c!a( se acce.e ,e.ia#te ,ttp:..666e!ampleor&.'oo,tml4 c!a(%!ier
4erso#a %!e acce.iera a .ic*a UB&, ser co#si.era.a 4ro4ietaria .e ese arc*i=o, ya %!e
e( ,is,o, ser e>ec!ta.o 4or e( !s!ario 666-data.
Siem+re ha- que tener en cuenta que adem$s del sO+er usuario3 el +ro+ietario de un archi*o es quien +uede
reali"ar cam,ios so,re ste3 como +or e.em+lo3 cam,iar la +ro+iedad del mismo o modificar sus +ermisos de
acceso&
0#to#ces F/u' hacer si se necesita /ue el usuario ###-"t ten!a un acceso especial
a determinados archi8osG
0# 4ri#ci4io, a( !s!ario 666-data se (o .e+e co#si.erar e# e( tercer gr!4o .e Dc!a(%!ier
otro !s!arioE. 7!e e( !s!ario 666-data sea e( !s!ario .e $4ac*e, #o sig#ifica %!e so(o
$4ac*e !ti(i9ar .ic*o !s!ario. -#.irecta,e#te, c!a(%!ier 4erso#a %!e rea(ice !#a
4etici"# a( ser=i.or, (o estar *acie#.o e# #o,+re .e( !s!ario 666-data.
&!ego, *ay %!e a#a(i9ar co# ca!te(a, %!3 #ecesi.a.es rea(es te#.r este !s!ario. Por
.efecto, (a H#ica #ecesi.a. rea( .e (os arc*i=os acce.i.os 4or e( !s!ario 666-data es (a
.e (ect!ra. Para (os .irectorios, se s!,a (a .e e>ec!ci"# a fi# .e %!e se 4!e.a i#gresar
e# e((os. Por (o ta#to, un directorio 2eb deber%a tener los si!uientes permisos;
Pro4ietario; (ect!ra, escrit!ra y e>ec!ci"#; S T 2 T 1 U 7
Gr!4o; #o so# #ecesarios 4er,isos; 0 (a!#%!e !#a +!e#a 4rctica, es asig#ar (os
,is,os 4er,isos a( gr!4o %!e a( resto .e (os !s!arios)
Besto .e (os !s!arios (i#c(!ye a www-.ata); (ect!ra y e>ec!ci"#; S T 1 U V
c#mod 6,< directorio_%e5 # ?pci"n /: (rupo sin permisos
c#mod 6<< directorio_%e5 # ?pci"n =: (rupo mismos permisos que el resto de usuarios
&!ego, (os arc*i=os te#.r# (os ,is,os 4er,isos %!e e( .irectorio, ,e#os e( .e
e>ec!ci"# 4ara e( resto .e !s!arios;
c#mod 6,3 arc#i)o_%e5 # ?pci"n /: (rupo sin permisos
c#mod 633 arc#i)o_%e5 # ?pci"n =: (rupo mismos permisos que el resto de usuarios
Asignando !" a los directorios y !# a los arc$ivos,
%&ermiso 'enegado( sera un error que )ams de*eras
volver a ver.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& E>
A
5
C
(

L
I
/
2
H
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
ED
P>sate a 3:BDLinu9
con 1rchLinu96
:3i:C+PHP+$ariaD"
En est' art%culo 8amos a instalar un LE$P
*Linu9+:3i:C+$ariaD"+PHP+0 Para el ser8idor 5eb)
utili(aremos una t'cnica de en,aulado) /ue nos
permitir> aumentar la se!uridad0
Escrito por: $ar%a &os' $ontes D%a( ($rc*era & Progra,a.ora)
0st!.ia#te .e Gra.o -#ge#ier1a e# 2ec#o(og1a .e (a i#for,aci"#. 23c#ico
e# i#for,tica .e gesti"#. 'o#itora FPF. oce#te .e 4rogra,aci"#
Pyt*o# y Scratc* 4ara #iIos .e J-12 aIos. $cti=ista .e( software (i+re y
c!(t!ra (i+re.
5ebs6
@(og; *tt4;//arc*#i#fa.+(ogs4ot.co,.es/
Redes sociales6
2witter; 7$$ontesDia(
GiN: es !# ser=i.or 822P (i+re, .e c".igo a+ierto, .e a(to re#.i,ie#to y 4!e.e
ser !ti(i9a.o 4ara act!ar ta#to co,o 4ro6y 822P re=erso co,o 4ro6y
-'$P/PFPA. N
Igor Sysoe# co,e#9" s! .esarro((o e# 2002 4ara so(=e#tar !# 4ro+(e,a ((a,a.o )10O
S
.
0s co#oci.o 4or s! a(to re#.i,ie#to, esta+i(i.a., !#a co#fig!raci"# se#ci((a y !#
co#s!,o +a>o .e rec!rsos.
Ka,os a i#sta(ar (os 4a%!etes #ecesarios;
] pacman ,>yu n&in' p#p,*pm mariad5 mariad5,clients
En. aul ando /Gi /H
Para aIa.ir seg!ri.a., e( ser=i.or we+ (o =a,os a e#>a!(ar. &o 4ri,ero %!e #ecesita,os
es crear (a estr!ct!ra .e car4etas, 4or e>e,4(o .sr+.n&in!;
S *tt4;//www.5ege(.co,/c105.*t,(
] m7dir ,p /sr)/n&in'/de)
] m7dir ,p /sr)/n&in'/etc/n&in'/
] m7dir ,p /sr)/n&in'/usr/Rli50s5inS
] m7dir ,p /sr)/n&in'/usr/s#are/n&in'
] m7dir ,p /sr)/n&in'/)ar/Rlo&0li5S/n&in'
] m7dir ,p /sr)/n&in'/sr)/#tml/
] m7dir ,p /sr)/n&in'/Rrun0tmpS
] cd /sr)/n&in'/
] ln ,s usr/li5 li5
Si #!estro siste,a es 9HIJIK;
] ln ,s usr/li5 li5^E
] cd usr
] ln ,s li5 li5^E
e+e,os crear a(g!#os .is4ositi=os %!e !ti(i9a NGiN:. Para e((o, e>ec!tare,os (o
sig!ie#te;
] m7nod ,m 1^^^ /sr)/n&in'/de)/null c 1 2
] m7nod ,m 1^^^ /sr)/n&in'/de)/random c 1 Y
] m7nod ,m 1EEE /sr)/n&in'/de)/urandom c 1 Q
$*ora .e+e,os co4iar (os arc*i=os;
] cp ,r /usr/s#are/n&in'/- /sr)/n&in'/usr/s#are/n&in'
] cp ,r /usr/s#are/n&in'/#tml/- /sr)/n&in'/sr)/#tml
] cp /usr/s5in/n&in' /sr)/n&in'/usr/s5in/
] cp ,rp /)ar/li5/n&in' /sr)/n&in'/)ar/li5/
] touc# /sr)/n&in'/etc/s#ells
] touc# /sr)/n&in'/run/n&in'.pid
es4!3s .e esto, .e+e,os co4iar (as +i+(iotecas #ecesarias 4ara %!e 4!e.a e>ec!tarse
NGiN:;
] cp /li5/ld,linu'- /sr)/n&in'/li5
] cp J(ldd /usr/s5in/n&in' |&rep /usr/li5|sed ,r <s/(.V) (W/.-) (.-)/W2/<)
/sr)/n&in'/usr/li5
] cp /usr/li5/li5nss_- /sr)/n&in'/usr/li5
] cp ,r*)( /etc/
Rser)ices0localtime0nss%itc#.con*0nscd.con*0protocols0#osts0ld.so.cac#e0ld.so.con*0
resol).con*0#ost.con*0n&in'S /sr)/n&in'/etc
$*ora, =a,os a crear (os !s!arios #ecesarios 4ara 4o.er e>ec!tar e( ser=i.or e# e(
c!root;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& E9
] ec#o ,e /#ttp$'$22$ Wnno5ody$'$QQ$/ [ /sr)/n&in'/etc/&roup
] ec#o ,e /#ttp$'$22$22$#ttp$/$/5in/*alse Wnno5ody$'$QQ$QQ$no5ody$/$/5in/*alse/
[ /sr)/n&in'/etc/pass%d
] ec#o ,e /#ttp$$$Wnno5ody$$$/ [ /sr)/n&in'/etc/&s#ado%
0# e( caso .e %!erer !ti(i9ar !# 4!erto *asta e( 102S, .e+ere,os e>ec!tar;
] setcap <cap_net_5ind_ser)ice.Vep< /sr)/n&in'/usr/s5in/n&in'
Ga s"(o fa(ta esta+(ecer (os 4er,isos corres4o#.ie#tes 4ara %!e 4!e.a e>ec!tarse y
,o#tar (os .is4ositi=os;
] c#mod Vr% /sr)/n&in'/tmp
] c#mod Vr% /sr)/n&in'/run
] c#o%n #ttp$lo& /sr)/n&in'/)ar/lo&/n&in'
] mount ,t tmp*s none /sr)/n&in'/run ,o <noe'ec0siGe.1M<
] mount ,t tmp*s none /sr)/n&in'/tmp ,o <noe'ec0siGe.111M<
U#a =e9 *ec*o esto, =a,os a crear (a !#i.a. .e ser=icio %!e se e#cargar .e (e=a#tar
NGiN:. Para e((o, 4ri,ero crea,os (a car4eta 4ara a(o>ar (os ser=icios (oca(es (si #o est
ya crea.a);
] m7dir ,p /usr/local/li5/systemd/system
)rea,os e( arc*i=o .usr.lo"al.lib.s(stemd.s(stem.n&in!-8ailser+i"e y (e aIa.i,os;
8!nit9
Description.A #i&# per*ormance %e5 ser)er and a re)erse pro'y ser)er
A*ter.syslo&.tar&et net%or7.tar&et

8>er)ice9
ype.*or7in&
P@DOile./sr)/n&in'/run/n&in'.pid
3'ec>tartPre./usr/5in/c#root ,,userspec.#ttp$#ttp /sr)/n&in' /usr/s5in/n&in' ,t ,q
,& <pid /run/n&in'.pidP daemon onP master_process onP<

3'ec>tart./usr/5in/c#root ,,userspec.#ttp$#ttp /sr)/n&in' /usr/s5in/n&in' ,&
<pid /run/n&in'.pidP daemon onP master_process onP<

3'ec=eload./usr/5in/c#root ,,userspec.#ttp$#ttp /sr)/n&in' /usr/s5in/n&in' ,& <pid
/run/n&in'.pidP daemon onP master_process onP< ,s reload
3'ec>top./usr/5in/c#root ,,userspec.#ttp$#ttp /sr)/n&in&' /usr/s5in/n&in' ,&
<pid /run/n&in'.pidP< ,s quit

8@nstall9
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& EL
Danted4y.multi,user.tar&et
P!es ya te#e,os #!estro ser=i.or we+ i#sta(a.o. -#icia,os e( ser=icio;
] systemctl start n&in',Iail.ser)ice
G co,4ro+a,os %!e to.o est correcto acce.ie#.o a *tt4;//(oca(*ost.
Para %!e se i#icie e# ca.a arra#%!e;
] systemctl ena5le n&in',Iail.ser)ice
e+e,os te#er e# c!e#ta %!e, a( i#sta(ar as1, a!#%!e act!a(ice,os e( siste,a, #o se
act!a(i9ar (a >a!(a. e+ere,os =o(=er a co4iar (os arc*i=os, ta#to .e( 4ro4io NGiN:,
co,o .e (as +i+(iotecas.
Confi gurando +h+P f+m
Ga te#e,os e( ser=i.or we+ corrie#.o. $*ora =a,os a co#fig!rar e( p,p-'pm, co# e( %!e
.are,os so4orte P8P a NGiN:.
Para e((o e.ita,os e( arc*i=o .et".p,p.p,p-'pm"on' y (oca(i9a,os (as (1#eas;
Plisten . 12C.1.1.1$Q111
listen . /run/p#p,*pm/p#p,*pm.soc7
G (as ca,+ia,os 4or;
Plisten . 12C.1.1.1$Q111
listen . /run/p#p,*pm/p#p,*pm.soc7
es4!3s +!sca,os (a e#tra.a ",root, .e>#.o(a as1;
c#root . /sr)/n&in'/
&e=a#ta,os e( ser=icio;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& EU
] systemctl start p#p,*pm.ser)ice
Para *a+i(itar(o e# e( arra#%!e;
] systemctl ena5le p#p,*pm.ser)ice
0.ita,os e( arc*i=o .e co#fig!raci"# .e NGiN:, .sr+.n&in!.et".n&in!.n&in!"on' y (o
.e>a,os as1;
ser)er R
...
location / R
root /sr)/#tml/P
inde' inde'.#tml inde'.#tm inde'.p#pP
S
...
location H W.p#pJ R
root /sr)/#tmlP
9"stc*i;p"ss 4+6.,.,.4-=,,,>
*astc&i_inde' inde'.p#pP
9"stc*i;p"r" '?';ADMIN;%AL)E open;!"sedir@ABsrvB8tlA>
include 9"stc*i.con9>
S
...
S
Para 4ro+ar %!e to.o =a correcta,e#te, crea,os !# arc*i=o e# .sr+.n&in!.sr+.,tml,
((a,a.o inde!p,p co# e( sig!ie#te co#te#i.o;
U_p#p
p#pin*o()P
_[
$*ora, tras rei#iciar NGiN:, a( acce.er a *tt4;//(oca(*ost/i#.e6.4*4, .e+e ,ostrar#os (a
i#for,aci"# acerca .e #!estra =ersi"# .e .e P8P.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& EK
Confi guraci %n de Mari a!B
$ariaD"
L
es un ser8idor de base de datos deri8ado de $ySML
I
) con licencia 3PL0
Posee (as ,is,as "r.e#es, i#terfaces, $P-s y +i+(iotecas, 4or (o %!e s! co,4ati+i(i.a.
co# 'yS7&W es a(t1si,a.
)!a#.o Frac(eW co,4r" S!# 'ircrosyste,s, se cre" este !ork 4ara aseg!rar %!e
4er,a#ec1a !#a =ersi"# GP&. 0ste 4royecto est .esarro((a.o 4or 'ic*ae( <i.e#i!s
7
,
f!#.a.or .e 'yS7&W.
Ga te#e,os e( so4orte P8P y e( ser=i.or we+ corrie#.o. Ka,os a (e=a#tar (a +ase .e
.atos 'aria@.
Pri,ero, 4ara %!e est3# .is4o#i+(es (as e6te#sio#es .e P8P 4ara e( acceso a 'aria@,
creare,os e( arc*i=o .et".p,p."on'd.mariadbini co# e( sig!ie#te co#te#i.o;
e'tension.pdo_mysql.so
e'tension.mysqli.so
e'tension.mysql.so
Bei#icia,os e( ser=i.or we+ y p,p-'pm;
] systemctl restart p#p,*pm.ser)ice n&in',Iail.ser)ice
$*ora .e+e,os co#fig!rar (a @@. Para e((o !ti(i9are,os (os sig!ie#tes co,a#.os;
] systemctl start mysqld.ser)ice
] mysql_secure_installation
Bei#icia,os (a @@ y *a+i(ita,os s! arra#%!e e# e( i#icio;
] systemctl restart mysqld.ser)ice
] systemctl ena5le mysqld.ser)ice
Por s!4!esto, si %!ere,os, 4o.e,os correr (a +ase .e .atos e# !#a >a!(a, !ti(i9a#.o !#
,3to.o si,i(ar a( %!e *e,os e,4(ea.o 4ara e#>a!(ar NGiN:.
0#(aces .e i#ter3s; *tt4s;//wi5i.arc*(i#!6.org/i#.e6.4*4/Ngi#6
V *tt4s;//,aria.+.org/
J *tt4;//www.,ys%(.co,/
7 *tt4;//es.wi5i4e.ia.org/wi5i/'ic*ae(X<i.e#i!s
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 01
E
H
#
5
E
M
E

P
5
6
G
5
A
M
M
I
/
G
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
0B
"efactoring# otra
pr>ctica de la
Pro!ramacin eCtrema
En ediciones anteriores estu8imos hablando de =DD)
sus beneicios y orma de implementarlo0 En esta
edicin) nos concentraremos en el "efactoring6 otra
de las pr>cticas t'cnicas su!eridas por eCtreme
Pro!rammin!0
Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)
0!ge#ia es 1r/uitecta de Sot2are, docente i#str!ctora .e tec#o(og1as
3L1$P (GNU/&i#!6, $4ac*e, 'yS7&, Pyt*o# y P8P) y 1!ile coach (U2N)
es4ecia(i9a.a e# Scr!, y e:tre,e Progra,,i#g. 'ie,+ro .e (a 4ree
Sot2are 4oundation e i#tegra#te .e( e%!i4o .e Debian Hackers.
5ebs6
)!rsos .e 4rogra,aci"# a ista#cia; www.c!rsos.e4rogra,acio#a.ista#cia.co,
<e+ 4erso#a(; www.e!ge#ia+a*it.co,
Redes sociales6
2witter / -.e#ti.ca; 7eu!eniabahit
e!actoring, es !#a .e (as 4rcticas t3c#icas s!geri.as 4or :P
Y
%!e co#siste e#
,e>orar e( c".igo f!e#te .e !#a a4(icaci"#, si# %!e .ic*as ,o.ificacio#es, afecte#
e( co,4orta,ie#to e6ter#o .e( siste,a. $
)!a#.o se 4rogra,a co# 2
9
se *ace i,4osi+(e e=itar re!actori%ar e( c".igo f!e#te ya
%!e .e (os 4ro4ios test .eri=a esta #ecesi.a.. Si# e,+argo, (as t3c#icas .e $e!actoring
4!e.e# i,4(e,e#tarse co,o !#a +!e#a 4rctica .e 4rogra,aci"# a!#%!e #o se
4rogra,e co# 2.
06iste# .ifere#tes ti4os .e re!actori%aciones %!e 4!e.e# ser #ecesarias i,4(e,e#tar a(
c".igo .e #!estra a4(icaci"#. )a.a ti4o, re4rese#ta !#a t3c#ica .ifere#te .e
re!actori%aci&n. Por e>e,4(o, e(i,i#ar c".igo re.!#.a#te re%!iere .e !#a t3c#ica
.ifere#te a .i=i.ir (os a(gorit,os .e !# ,3to.o 4ara crear ,3to.os .eri=a.os.
Y 06tre,e Progra,,i#g
9 2est ri=e# e=e(o4,e#t (esarro((o g!ia.o 4or 4r!e+as)
2n +ro,l ema no es un error& & &
$#tes .e co#ti#!ar, *a+r1a %!e .ifere#ciar e( t3r,i#o D4ro+(e,aE .e (a 4a(a+ra DerrorE,
4ara #o ge#erar co#f!sio#es.
0( error e# s1, es !#a fa((a e# e( c".igo f!e#te %!e i,4i.e e( correcto co,4orta,ie#to
.e( siste,a. 'ie#tras %!e e( 4ro+(e,a, 4!e.e .efi#irse co,o Da(go %!e *!e(e ,a( e# e(
c".igo f!e#teE
10
4ero si# e,+argo, #o i,4i.e e( correcto f!#cio#a,ie#to .e (a
a4(icaci"#.
&os 4ro+(e,as %!e se 4!e.e# 4rese#tar e# e( c".igo f!e#te .e !#a a4(icaci"#,
.e4e#.e# .e ,!c*1si,os factores y e# gra# 4arte .e (os casos, e#c!e#tra# !#a re(aci"#
.irecta co# e( 4ara.ig,a .e 4rogra,aci"# e,4(ea.o as1 co,o e# e( (e#g!a>e %!e se
!ti(ice.
Si se i#te#tara a+arcar to.os (os 4ro+(e,as 4osi+(es, (a (ista 4o.r1a tor#arse i#fi#ita,
te.iosa y *asta i#Hti( o i#c(!so co#f!sa. 0s 4or e((o, %!e so(o a+arcare,os (os 4ro+(e,as
,s frec!e#tes %!e 4!e.a# co#si.erarse ge#era(es co# i#.e4e#.e#cia .e( (e#g!a>e e#
%!e se 4rogra,e. 2ratar3 .e i#c(!ir e>e,4(os ta#to e# Pyt*o# co,o e# P8P 4ara *acer
e( te,a ,s ge#era(.
La regl a
0# e( ,!#.o .e( $e!actoring, *acie#.o !#a a#a(og1a co# e( +3is+o(, s!e(e !ti(i9arse (a
reg(a $%res Strikes
11
y &refactori'a(). 0sta reg(a 4!e.e tra.!cirse co,o;
La primera ve+ que $agas algo, solo $a+lo. La segunda ve+
que $agas algo similar, notars que ests duplicando c,digo,
pero lo $ars de todas formas. La tercera ve+ que te enfrentes
al mismo caso, refactori+a.
)!a#.o se est 4rogra,a#.o !#a a4(icaci"# co# 2, co,o *e,os =isto e# e.icio#es
a#teriores, e( 4roceso .e .esarro((o se est .i=i.ie#.o e# .os accio#es co#cretas;
4rogra,ar y re!actori%ar. 0sto es, a ,e.i.a %!e =a,os crea#.o #!e=os ,3to.os, =a,os
re!actori%ando e( c".igo 4ara e(i,i#ar re.!#.a#cias y e# .efi#iti=a, *acer e( c".igo -.e(
test- ,s (egi+(e y as1 o+te#er !# ,e>or re#.i,ie#to. Pero #o esta,os refactori9a#.o e(
SU2 co#sta#te,e#te (a!#%!e s1 (o re!actori%aos), 4!esto %!e 3ste, tie#e !# ,o,e#to
y (!gar 4ara ser re!actori%ado.
10 Oe#t @ec5, !#o .e (os crea.ores .e e:tre,e Progra,,i#g, es %!ie# i#tro.!>o e( t3r,i#o D+a. s,e((sE (,a(os o(ores) 4ara
referirse .e ,a#era g(o+a(, a a%!e((as e64resio#es y a(gorit,os 4oco c(aros %!e ge#era# co#f!si"# e# e( c".igo f!e#te .e !#
siste,a, tor##.o(o ,s co,4(e>o .e (o %!e .e+er1a ser.
11 0# e( +3is+o(, !# stri5e es !#a a#otaci"# #egati=a 4ara e( +atea.or ofe#si=o, c!a#.o (a 4e(ota #o es (a#9a.a *acia e( .ia,a#te.
$( tercer stri5e a#ota.o, ter,i#a e( t!r#o .e( +atea.or.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 0E
&a re!actori%aci&n .e( SU2, i,4(ica %!e (o 4ri,ero %!e .e+e,os *acer es c!,4(ir e(
o+>eti=o (4rogra,ar a%!e((o %!e se #ecesita) y (!ego, re!actori%ar e( c".igo .e( SU2
c!a#.o;
Se agreg!e !# #!e=o ,3to.oN
Se corri>a !# bugN
Se *aga !#a re=isi"# .e c".igoN
Pero sie,4re, res4eta#.o (a reg(a .e D(os tres strikesE. U#a =e9 i.e#tifica.o e( ,o,e#to,
so(o ser c!esti"# .e i.e#tificar e( 4ro+(e,a a fi# .e 4o.er e(egir (a so(!ci"# i#.ica.a.
2na sol uci %n a cada +ro,l ema
)o,o co,e#ta,os a#terior,e#te, #o *are,os !#a e6te#sa (ista .e 4ro+(e,as, si#o
%!e #os ce#trare,os e# 4ro+(e,as ge#era(es. '!c*as .e (as so(!cio#es s!geri.as e#
este art1c!(o, 4!e.e# *a((arse e# So!rce'a5i#g.co,
12
, sitio .o#.e se 4!e.e e#co#trar
!#a co,4(eta c(asificaci"# .e 4ro+(e,as
1A
y s!s res4ecti=as so(!cio#es
1S
.
P56BLEMA= @ari a,l es de uso tem+oral mal i m+l ementadas
0# 4ri#ci4io, .efi#ire,os a (as =aria+(es .e !so te,4ora(, co,o a%!e((as =aria+(es %!e
so# asig#a.as e# e( ,+ito (oca( .e !# ,3to.o .e c(ase y so# #ecesarias
te,4ora(,e#te, so(o e# ese ,3to.o, si# ser ((a,a.as o re%!eri.as 4or otros ,3to.os.
Por fa*or3 notar que cuando se ha,la de mtodos de clase3 el significado +odra a+licarse tam,in a funciones -
+rocedimientos&
Ge#era(,e#te re4rese#ta# !# 4ro+(e,a e# tres casos, (os c!(es =ere,os a
co#ti#!aci"#.
Caso N6 Variables de uso temporal /ue deinen una accin concreta6
# @"digo 3<3
J)ar . (Ja - J5 ) / (int)JcP
12 *tt4;//so!rce,a5i#g.co,/refactori#g . N"tese %!e a(g!#as .e (as t3c#icas e64!estas e# e( sitio <e+ referi.o, #o se ,e#cio#a#
e# este c!rso, 4or co#si.erar(as 4oco a4ro4ia.as. 0sto es .e+i.o a %!e a(g!#as 4rcticas so# ,s es4ec1ficas .e (e#g!a>es co,o
Za=a, ,ie#tras %!e a otras, (as co#si.ero co#trarias a (as +!e#as 4rcticas .e (a 4rogra,aci"# orie#ta.a a o+>etos y 4or (o ta#to,
co#tra4ro.!ce#tes.
1A D@a. S,e((s i# )o.eE *tt4;//so!rce,a5i#g.co,/refactori#g/+a.-s,e((s-i#-co.e
1S ifere#tes t3c#icas .e refactori9aci"#; *tt4;//so!rce,a5i#g.co,/refactori#g
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 00
# @"digo 3ython
)ar . (a - 5) / int(c)
0# e( e>e,4(o a#terior, =e,os !#a =aria+(e .e !so te,4ora(, %!e .efi#e !#a acci"#
co#creta; .i=i.ir e( 4ro.!cto .e .os factores. 0sto re4rese#ta !# 4ro+(e,a, ya %!e (as
accio#es so# res4o#sa+i(i.a. .e (os ,3to.os y #o .e (as =aria+(es. 0# estos casos, (a
so(!ci"#, es tra#sferir (a res4o#sa+i(i.a. .e (a acci"# a !# ,3to.o;
# @"digo 3<3
J)ar . di)idir(Ja0 J50 Jc)P
*unction di)idir(Ja0 J50 Jc) R
return (Ja - J5 ) / (int)JcP
S
# @"digo 3ython
)ar . di)idir(a0 50 c)
de* di)idir(a0 50 c)$
return (a - 5) / int(c)
Las *aria,les de uso tem+oral que definen un *alor directo= V*ar W BDX o +or el retorno de la llamada a una
funci%n= V*ar W strlen?V*aria,leAX no necesitan transferir su res+onsa,ilidad a otro mtodo&
Caso O0 Variables de uso temporal son re/ueridas por m>s de un m'todo6
# @"digo 3<3
*unction metodo_a() R
Ja . 1?P
J5 . 111P
Jc . 2P
J)ar . sel*$$di)idir(Ja0 J50 Jc)P
// continuar...
S
pri)ate static *unction di)idir(Ja0 J50 Jc) R
return (Ja - J5 ) / JcP
S
# @"digo 3ython
de* metodo_a(sel*)$
a . 1?
5 . 111
c . 2
)ar . sel*._di)idir(a0 50 c)
# continua...
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 0>
de* _di)idir(sel*0 a0 50 c)$
return (a - 5) / c
0# e( e>e,4(o, a#terior, (as =aria+(es te,4ora(es /a, /b y /", so# re%!eri.as 4or .os
,3to.os y se est# .efi#ie#.o co,o ta(es e# !# ,3to.o, #ecesita#.o ser 4asa.as co,o
4ar,etros. $%!1, (a so(!ci"#, ser co#=ertir (as =aria+(es te,4ora(es, e# 4ro4ie.a.es .e
c(ase;
# @"digo 3<3
*unction metodo_a() R
sel*$$Ja . 1?P
sel*$$J5 . 111P
sel*$$Jc . 2P
J)ar . sel*$$di)idir()P
// continuar...
S
pri)ate static *unction di)idir() R
return (sel*$$Ja - sel*$$J5 ) / sel*$$JcP
S
# @"digo 3ython
de* metodo_a(sel*)$
sel*.a . 1?
sel*.5 . 111
sel*.c . 2
)ar . sel*._di)idir()
# continua...
de* _di)idir(sel*)$
return (sel*.a - sel*.5) / sel*.c
Caso ;0 Variables de uso temporal /ue reasi!nan par>metros6
# @"digo 3<3
*unction *oo(Ja) R
Ja . strtoupper(Ja)P
// continuar ...
S
# @"digo 3ython
de* *oo(a)$
a . a.upper()
# continua...
0# casos co,o 3ste, (a co#f!si"# 4!e.e ser gra#.e; !# 4ar,etro es !# 4ar,etro y !#a
=aria+(e te,4ora(, !#a =aria+(e te,4ora(. 0s e#to#ces, c!a#.o =aria+(es te,4ora(es #o
.e+e# te#er e( ,is,o #o,+re %!e (os 4ar,etros;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 0D
# @"digo 3<3
*unction *oo(Ja) R
J5 . strtoupper(Ja)P
// continuar ...
S
# @"digo 3ython
de* *oo(a)$
5 . a.upper()
# continua...
P56BLEMA= Mtodos que reci ,en +ar$metros
$%!1 .e+e *acerse !#a #ota+(e .isti#ci"# e#tre 4ar,etros, =aria+(es .e !so te,4ora( y
4ro4ie.a.es .e c(ase. G esta .isti#ci"#, est .a.a 4or (a fi#a(i.a. .e ca.a !#a;
&as =aria+(es .e !so te,4ora(, co,o *e,os =isto a#tes, est# .esti#a.as a
.efi#ir !# =a(or co#creto a( c!a( se *ar refere#cia so(o e# e( ,+ito .o#.e se
*aya .efi#i.o.
&as 4ro4ie.a.es .e c(ase, so# caracter1sticas i#*ere#tes a( o+>eto a (as c!a(es se
*ar refere#cia .es.e .i=ersos ,+itos.
G fi#a(,e#te, (os 4ar,etros, ser# =a(ores a.icio#a(es, %!e #o 4!e.e# ser
co#si.era.os 4ro4ie.a.es .e( o+>eto 4ero %!e si# e,+argo, so# re%!eri.os 4ara
%!e !#a acci"#, 4or e>e,4(o, ,o.ifi%!e (as 4ro4ie.a.es .e !# o+>eto.
Kea,os a(g!#os casos .e ,a( !so .e 4ar,etros;
/A
3ar$metros cuya :nica finalidad es modificar de forma directa
el valor de una o m$s propiedades
A/
class Producto R
*unction __construct(Jnom5re0 Jprecio0 J5arcode) R
Jt#is,[nom5re . Jnom5reP
Jt#is,[precio . JprecioP
Jt#is,[5arcode . J5arcodeP
S
S
Jnom5re . <A&ua mineral<P
Jprecio . ?.C?P
J5arcode . ^?E2Q2222E221P
Jproducto . ne% Producto(Jnom5re0 Jprecio0 J5arcode)P
/A
B'todos que solo recurren a sus par$metros actuando como funciones
A/
class !suario(o5Iect)$
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 09
de* )alidar_usuario(sel*0 username0 pass%d)$
i* username .. <pepe< and pass%d .. <122<$
return rue
)o,o reg(a ge#era(, (os 4ar,etros .e+e# ser e=ita.os to.a =e9 %!e sea 4osi+(e,
ree,4(a9#.o(os 4or 4ro4ie.a.es .e c(ase. $ #o ser %!e !#a 4ro4ie.a. .e+a
co,4o#erse .e !# o+>eto, (os =a(ores .e (a ,is,a .e+er# ser ,o.ifica.os .e for,a
.irecta e=ita#.o 4ara e((o e( !so .e 4ar,etros;
/A
3ar$metros cuya :nica finalidad es modificar de forma directa
el valor de una o m$s propiedades
A/
class Producto R
*unction __construct() R
Jt#is,[nom5re . <<P
Jt#is,[precio . <<P
Jt#is,[5arcode . <<P
S
S
Jproducto . ne% Producto()P
Jproducto,[nom5re . <A&ua mineral<P
Jproducto,[precio . ?.C?P
Jproducto,[5arcode . ^?E2Q2222E221P
/A
B'todos que solo recurren a sus par$metros actuando como funciones
A/
class !suario(o5Iect)$
de* )alidar_usuario(sel*)$
i* sel*.username .. <pepe< and sel*.pass%d .. <122<$
return rue
P56BLEMA= EG+resi ones eGtensas
'!c*as =eces, 4o.re,os e#co#trar#os co# e64resio#es %!e .e+i.o a s! e6te#si"#, se
*ace# .if1ci(es .e (eer e i#.!ce# a !#a gra# co#f!si"#;
# @"digo 3<3
return ((in_array(<a5c<0 Jarray) || in_array(<5cd<0 Jarray)) TT (in_array(<cde<0
Jarray) || in_array(<de*<0 Jarray))) _ <AZ< $ <3==A=<P
# @"digo 3ython
return <AZ< i* ((<a5c< in lista or <5cd< in lista) and (<cde< in lista or <de*< in
lista)) else <3==A=<
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 0L
)!a#.o esta,os e# 4rese#cia .e e64resio#es ta# e6te#sas, (o ,e>or es -a%!1 s1- !ti(i9ar
=aria+(es .e !so te,4ora( 4ara si,4(ificar .ic*as e64resio#es;
# @"digo 3<3
Ja . in_array(<a5c<0 Jarray)P
J5 . in_array(<5cd<0 Jarray)P
Jc . in_array(<cde<0 Jarray)P
Jd . in_array(<de*<0 Jarray)P
Ja5 . (Ja || J5)P
Jcd . (Jc || Jd)P
return (Ja5 TT Jcd) _ <AZ< $ <3==A=<P
# @"digo 3ython
a . <a5c< in lista
5 . <5cd< in lista
c . <cde< in lista
d . <de*< in lista
a5 . a or 5
cd . c or d
return <AZ< i* a5 and cd else <3==A=<
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& 0U
S
C
@

Y

G
I
#
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
0K
Coni!urando 3it5eb
en Bbuntu Ser8er
3it2eb es una 3B# /ue te permite poder !estionar
todos los repositorios de !it en tu ser8idor y la
8enta,a /ue yo le encuentro es sobre todo para
onitorear los a8ances de los proyectos /ue
!estionamos desde cual/uier lu!ar0
Escrito por: #ndira "ur!a (-#ge#iera .e Siste,as)
-#.ira es #n!0 de Sistemas .e PerH. Gestora .e Proyectos .e .esarro((o
.e software, pro!ramadora PHP, a#a(ista, #!e=a a,a#te .e (as
metodolo!%as ?!iles. $*ora e#=!e(ta e# !#a #!e=a a=e#t!ra; s! 4ro4ia
e,4resa [#C Pro,ects[ .e.ica.a a( .esarro((o .e Software.
5ebs6
$+o!t.,e; *tt4;//a+o!t.,e/i#.ira+,
Redes sociales6
2witter; 7indirabm
itwe+ es !# scri4t e# )G-, %!e #os 4er,ite gestio#ar =is!a(,e#te (os ca,+ios e#
#!estros 4royectos 4!.ie#.o =er co#te#i.o .e (os registros, ra,as es4ecificas,
.ifere#cias a4(ica.as e# (os ca,+ios, e#tre otras. 2a,+i3# te 4er,ite .escargar
(a =ersi"# .e !# arc*i=o o (a =ersi"# .e !# 4royecto.
G
Por s!4!esto e6iste# ,!c*as GU- e# e( ,erca.o -so+re to.o, =ersio#es .e escritorio-N
so# ,!y +!e#as y ofrece# ,ayor =arie.a. 4ara e( .esarro((a.or, 4ero si# e,+argo,
a4recio git'eb 4!es 4!e.o onitorear .es.e ,i ce(!(ar, %!e (os ca,+ios %!e se
.e+iero# s!+ir, ya est# e>ec!ta.os.
$*ora si ,a#os a (a o+ra;
# Instalaci"n y primeros pasos
root6de)$H] apt,&et install &it%e5
root6de)$H] cd /)ar/%%%
#n esta ruta tenemos que crear una carpeta gitCe
root6de)$/)ar/%%%] m7dir &it%e5
&os arc*i=os .e gitwe+ s!e(e# estar e# .usr.s,are.&it6eb y (os #ecesita,os e# e(
.irectorio .+ar.666.&it6eb. Para e((o, creare,os !# =1#c!(o si,+"(ico
root6de)$/)ar/%%%] cd &it%e5
root6de)$/)ar/%%%/&it%e5] ln ,s /usr/s#are/&it%e5/- .
root6de)$/)ar/%%%] ls ,l
$*ora 4o.e,os =er co,o (os arc*i=os est# linkeados a (os otros;
$*ora te#e,os %!e *acer %!e gitwe+ a4!#te a #!estros re4ositorios %!e est#
(oca(i9a.os e# .,ome.&it.de+
root6de)$H] nano /etc/&it%e5.con*
Dempla*ar .pro+ectroot = >/var/cache/git>1 por .pro+ectroot = >/home/git/dev>1
)rea,os !# Kirt!a( 8ost;
root6de)$H] nano /etc/apac#e2/con*.d/&it%e5
o#.e se .e+e co4iar esto;
=e%rite3n&ine on
=e%rite=ule `8a,GA,a1,Q_W,9VW.&it/_(W_.-)_J /&it%e5.c&ibR=3c!3>_!=@S 8(0P9
Alias /&it%e5 /usr/s#are/&it%e5
UDirectory /usr/s#are/&it%e5[
Aptions @nde'es Oollo%>ymlin7s 3'ec":@
Directory@nde' /c&i,5in/&it%e5.c&i
Allo%A)erride Bone
U/Directory[
G rei#icia,os $4ac*e;
root6de)$H] /etc/init.d/apac#e2 restart
Si a4arece e( sig!ie#te error;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >1
8a+i(ita,os e( ,".!(o re6rite .e $4ac*e;
root6de)$H] a2enmod re%rite
$*ora e#tre,os a *tt4;//192.1JY.1.9/gitwe+
)o,o =er# ya i#sta(a,os e( git'eb y 4o.e,os =er #!estro re4ositorio.
&a i#terfa9 #o es #a.a a,iga+(e, 4ero 4o.e,os rec!rrir a( te,a .e git'eb a(o>a.o e#
*tt4;//5oga5!re.git*!+.io/gitwe+-t*e,e/
root6de)$/usr/s#are/&it%e5/static] &it clone &it$//&it#u5.com/7o&a7ure/&it%e5,t#eme
root6de)$/usr/s#are/&it%e5/static] cd ..
root6de)$/usr/s#are/&it%e5] cp ,= static/ static_ori&inal/
root6de)$/usr/s#are/&it%e5] rm ,= static/-
root6de)$/usr/s#are/&it%e5/static] ln ,s &it%e5,t#eme/&it%e5.css &it%e5.css
root6de)$/usr/s#are/&it%e5/static] ln ,s &it%e5,t#eme/&it%e5.Is &it%e5.Is
root6de)$/usr/s#are/&it%e5/static] ln ,s &it%e5,t#eme/&it,lo&o.pn& &it,lo&o.pn&
root6de)$/usr/s#are/&it%e5/static] ln ,s &it%e5,t#eme/&it,*a)icon.pn&
0ste seria e( res!(ta.o;
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >B
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >E
(
E
5
5
A
M
I
E
/
#
A
S
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
>0
Dra20io6 dia!ramas
para tus proyectos
1 todo desarrollador siempre le 8a a ser de !ran
utilidad contar con herramientas /ue le permitan
dibu,ar dia!ramas *de todo tipo+ de acuerdo a lo /ue
necesite0 Dra20io es una !ran herramienta /ue
ayudar> a /ue esta tarea no se torne tediosa ni
aburrida) sino por el contrario) >cil y simple0
Escrito por: $ila!ros 1lessandra #nante $ontero (0st. -#g. -#for,tica)
Estudiante de #n!enier%a #norm>tica. 'ie,+ro .e 1PESOL
($sociaci"# Per!a#a .e Software &i+re) y .e (a co,!#i.a. .e software
(i+re Lumenhack. 'ie,+ro .e( e%!i4o .e tra.!cci"# a( es4aIo( .e
3:O$E. $4asio#a.a 4or e( .esarro((o .e software, tec#o(og1a y
ga.gets. efe#sora .e tec#o(og1as +asa.as e# software (i+re y .e
c".igo a+ierto.
5ebs6
@(og; www.,i(a(e.#et
Redes sociales6
2witter / -.e#ti.ca; 7milale
o.os (os .esarro((a.ores #ecesita# .e !#a *erra,ie#ta %!e (es 4er,ita .i+!>ar
.iagra,as 4ara .isti#tos casos segH# sea (a #ecesi.a., co,o 4or e>e,4(o, c!a#.o
se trata .e .iagra,as U'&, .iagra,as .e f(!>o, .iagra,as @P'N, ockups, e#tre
,!c*os ,s. Pero e( *ec*o .e e(egir (a *erra,ie#ta i#.ica.a ta,+i3# se =!e(=e !#a
4reoc!4aci"# y es 4or esto %!e co#tar co# !#a a(ter#ati=a online .e !so fci( y se#ci((o
es ge#ia( y 3ste es e( caso .e raw.io.
2
raw.io es !#a a4(icaci"# 4ara rea(i9ar .iagra,as e# (1#ea %!e f!#cio#a e# to.o (!gar y
est co#str!i.a 4ara (a =e(oci.a., co#fia+i(i.a. y si,4(ici.a.. Usa (a (i+rer1a .e
Za=aScri4t m!9rap,N c!e#ta co# !#a a,4(ia ga,a .e co#fig!raci"# =is!a( a( ig!a( %!e !#a
a4(icaci"# we+ co# !#a gra# =arie.a. .e o4cio#es co,o !#a (arga co(ecci"# .e ico#os,
co(a+oraci"# e# tie,4o rea( y 4osi+i(i.a. .e co,4artir 'idgets e,+e+i.os.
Bes4ecto a s!s i#tegracio#es ,H(ti4(es, .raw.io o4cio#a(,e#te se i#tegra 4or co,4(eto
co# Goog(e\ ri=e !ti(i9a#.o e( a(,ace#a,ie#to e# (a #!+e .e (a c!e#ta .e Goog(e\.
raw.io es (i+re .e (ice#ciar c!a(%!ier #H,ero .e !s!arios e# c!a(%!ier e#tor#o y se
+e#eficia .e !# 4orta( .e a4oyo co,!#itario.
Caracter sti cas
raw.io 4!e.e te#er !s!arios i(i,ita.os co,o ta,+i3# .i+!>os i(i,ita.osN c!e#ta co#
!#a a,4(ia ga,a .e (i+rer1as .e for,asN 4!e.e e64ortar a PNG/ZPG/:'&/SKGN tie#e
i#tegraci"# co# Goog(e\ ri=e y co(a+oraci"# e# tie,4o rea(N 4!e.e ser !sa.o e#
c!a(%!ier #a=ega.or co# 82'& V, co#ta#.o co# so4orte 4ara #a=ega.ores 4ri=ati=osN
c!e#ta a.e,s, co# (a 4osi+i(i.a. .e e,+e+er 'idgets y so+reto.o es .e !so grat!ito.
$( i#gresar a .raw.io
1V
e#co#trare,os !#a i#terfa9 +asta#te si,4(e 4ara e,4e9ar a
.i+!>ar. Po.e,os co,e#9ar 4ro+a#.o (a a4(icaci"# 4ara rea(i9ar !# ockup +sico;
2a,+i3# c!e#ta co# 4(a#ti((as %!e 4!e.e# ,o.ificarse segH# (o %!e se .esea;
1V *tt4s;//www..raw.io/
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >>
2a,+i3# 4o.r1a,os rea(i9ar !# .iagra,a U'&;
es4!3s .e te#er (isto e( .i+!>o g!ar.a,os e( arc*i=o co# !ml, ta,+i3# 4o.e,os
e64ortar(o e# .isti#tos for,atos y (!ego 4o.er *acer !so .e e((os e# to.o (!gar %!e
.esee,os e i#c(!so e,+e+er(o, ya %!e a( 4resio#ar e# (a o4ci"# #os .a e( c".igo 4ara
4o.er (ograr(o.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >D
0( ,o.e(o .e #egocio .e .raw.io es .arse a co#ocer ,e.ia#te esta *erra,ie#ta ya %!e
e((os cree# fir,e,e#te e# %!e si #o co#f1a# e# e( ,o.e(o #o (o !ti(i9ar1a# #!#ca,
e#to#ces es (a ,a#era .e *acer(e ,ar5eti#g, 4er,itie#.o %!e (os !s!arios 4!e.a# te#er
i#teracci"# co# este.
Si ests i#teresa.o e# co(a+orar co# e( 4royecto o %!i9s te#er co#=ersacio#es co#
ge#te i#=o(!cra.a, 4!e.es e#trar a (os foros
1J
y 4o#erte e# co,!#icaci"# co# e((os e
i#c(!so 4or (as re.es socia(es %!e a4arece# e# (a 4gi#a 4ri#ci4a( .e .raw.io.
'ra-.io es una aplicaci,n genial que te permite reali+ar los
diagramas que necesites en el proceso de desarrollo de
soft-are y entre sus venta)as principales est la facilidad de
poder reali+ar diagramas de manera sencilla y rpida.
1J *tt4s;//>gra4*.fres*.es5.co,/s!44ort/.isc!ssio#s
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >9
G
/
2

F

L
I
/
2
H
(ac)ers & !e*elo+ers Maga"ine R ASo 13 /Omero 9
>L
3:BDLinu9 para pro!ramadores6
1utomati(ando tus
aplicaciones con Cron
1 la hora de resol8er determinados re/uerimientos
de Sot2are es muy posible /ue la solucin ideal
impli/ue la e,ecucin de ciertas tareas de orma
autom>tica y esto) solo ser> posible !racias Cron0
Escrito por: Eu!enia "ahit ($r%!itecta G&$'P & $gi(e )oac*)
0!ge#ia es 1r/uitecta de Sot2are, docente i#str!ctora .e tec#o(og1as
3L1$P (GNU/&i#!6, $4ac*e, 'yS7&, Pyt*o# y P8P) y 1!ile coach (U2N)
es4ecia(i9a.a e# Scr!, y e:tre,e Progra,,i#g. 'ie,+ro .e (a 4ree
Sot2are 4oundation e i#tegra#te .e( e%!i4o .e Debian Hackers.
5ebs6
)!rsos .e 4rogra,aci"# a ista#cia; www.c!rsos.e4rogra,acio#a.ista#cia.co,
<e+ 4erso#a(; www.e!ge#ia+a*it.co,
Redes sociales6
2witter / -.e#ti.ca; 7eu!eniabahit
ro# es e( a.,i#istra.or .e 4rocesos e# seg!#.o 4(a#o .e (os siste,as o4erati=os
GNU/&i#!6, 4er,itie#.o .efi#ir e# !# arc*i=o "rontab, (a e>ec!ci"# .e co,a#.os
y/o scripts a i#ter=a(os reg!(ares .e tie,4o. )
Para 8isuali(ar las tareas e9istentes, +asta co# e>ec!tar "rontab co# e( 4ar,etro -l,
co,o se ,!estra a co#ti#!aci"#;
user6#ost$HJ cronta5 ,l
0( arc*i=o "rontab 4osee !#a si#ta6is ,!y estricta e# (a c!a(, ca.a tarea .e+e
es4ecificarse e# !#a (1#ea. $ (a =e9, ca.a (1#ea .e+er co#tar co# (a sig!ie#te estr!ct!ra;
# 3ara programar la e+ecuci"n de un script
periodicidad /ruta/al/script
# 3ara programar la e+ecuci"n de un comando
periodicidad comando
&a 4erio.ici.a. .e e>ec!ci"# 4!e.e i#.icarse co# a(g!#o .e (os i#ter=a(os
4reesta+(eci.os;
Cd"ily /#ome/eu&enia/proIects/myapp/5in/5ac7up_d5.s#
0#tre (os i#ter=a(os 4reesta+(eci.os, 4o.e,os e#co#trar;
Cye"rly >e eIecuta una )eG al ado0 a las 1 #s del 1 de enero
Alias$ 6annually
Cont8ly >e eIecuta una )eG al mes0 a las 1 #s del primer dea de cada mes
C2eeDly >e eIecuta una )eG a la semana0 a las 1 #s del primer dea de la
semana (domin&o)
Cd"ily >e eIecuta una )eG al dea0 a las 1 #s
Alias$ 6midni&#t
C8ourly >e eIecuta una )eG por #ora
Si# e,+argo, (a f(e6i+i(i.a. .e cron es ,!y a,4(ia y #os 4er,ite ser ,s es4ec1ficos a(
i#.icar !# i#ter=a(o, !ti(i9a#.o (a si#ta6is;
MIN)T. ?.RA DIA-DEL-MES MES DIA-DE-LA-SEMANA tarea
-onde cada valor ser$ reempla*o por$
M@B!A$ !n entero entre 1 y ?Q
;A=A$ !n entero entre 1 y 22
D@A,D3(,M3>$ !n entero entre 1 y 21
M3>$ !n entero entre 1 y 12
D@A,D3,(A,>3MABA$ !n entero entre 1 y C donde 1 y C representan al dea domin&o
)!a#.o #o se .esea i#.icar !# =a(or es4ec1fico, se .e+er !ti(i9ar e( asterisco;
, , < 0 E tar ,cG* /sr)/5ac7up/eu&enia.tar.&G /#ome/eu&enia
5o anterior puede entenderse como:
Minuto$ 1
;ora$ 1
Dea del mes$ ?
Mes$ 2 (marGo)
Dea de la semana$ - (sin especi*icar)
area$ tar ,cG* /sr)/5ac7up/eu&enia.tar.&G /#ome/eu&enia
0s .ecir %!e to.os (os V .e ,ar9o a (as 0 *oras, se *ar !#a co4ia .e res4a(.o .e (a hoe
.e ,i !s!ario.
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >U
)(aro %!e e# =e9 .e (a e>ec!ci"# .e !# co,a#.o, 4o.r1a tratarse .e (a e>ec!ci"# .e !#
script. 0# ese caso, e( script .e+e c!i.ar .e indicar en la primera l%nea) el binario con el
cual debe e,ecutarse. Por e>e,4(o;
EA%<:
]X/5in/5as#
3#D5:
]X/usr/5in/perl
3<3:
]X/usr/5in/p#p
3F;<?2:
]X/usr/5in/pyt#on
G ta,+i3#, .e+e te#er permisos de e,ecucin;
c#mod V' /ruta/al/script
Para a!re!ar tareas a( arc*i=o "rontab, se .e+e e>ec!tar e( sig!ie#te co,a#.o;
cront"! -u usuario -e
3or e+emplo! para agregar tareas al cronta del usuario +uan:
root6#ost$H] cronta5 ,u Iuan ,e
0( 4ar,etro -u ser o4cio#a( si (o %!e se .esea es agregar !#a tarea a( "rontab .e(
!s!ario %!e est e>ec!ta#.o .ic*o co,a#.o;
eu*eni"6#ots$HJ cront"! -e
Agregar$ una tarea al cronta del usuario eugenia
Si no tienes un editor de teGto +or defecto3 la +rimera *e" que e.ecutes "rontab -e te +edir$ que eli.as el editor
+redeterminado&
Pero a%!1, #o ter,i#a to.o. Cron, ta,+i3# 4er,ite es4ecificar i#ter=a(os ,!c*o ,s
co,4(e>os y es4ec1ficos y 4ara e((o, .is4o#e .e (os sig!ie#tes o4era.ores;
B S"lt" l" unid"d especi9ic"d"
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& >K
1 EB5 - - - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del directorio /srv/CCC/myapp/temp/ cada 6 horas
EB4, - - - - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del mismo directorio pero lo hace cada 10 minutos
F L" co"F perite especi9ic"r un" list" precis"
1 1 10?01? - - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del mismo directorio los d&as /! G y /G de cada mes
a las 0 horas
1 2 - 20Q - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del mismo directorio! todos los d&as a las =:00 a.m.
#n los meses de mar*o y septiemre
- El *ui&n edioF perite especi9ic"r un r"n*o
E? ^ 11,1? - - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del mismo directorio entre los d&as / y G de cada
mes a las H:IG a.m.
1 1 - Q,12 - rm ,r /sr)/%%%/myapp/temp/-
#limina todos los archivos del mismo directorio! todos los d&as a las 0 horas
entre los meses de septiemre y diciemre
Cron #o 4er,ite e>ec!tar .e for,a .irecta, a4(icacio#es a tra=3s .e e#tor#o grfico. Por
e>e,4(o, si to.os (os .1as a (as 17;00 *s. %!isieras e>ec!tar e( #a=ega.or Firefo6, (a
sig!ie#te i#str!cci"#, :O uncionar>;
1 1C - - - *ire*o' # No funcionar
Para /ue uncione, se .e+e agregar (a i#str!cci"# D$%&'A()*+0* 4rece.ie#.o a(
co,a#.o, co,o se ,!estra a co#ti#!aci"#;
1 1C - - - DIS'LAG@A-,A *ire*o'
TE1B0 (!Maga"ine&org R Creati*e Commons Atri,uci%n /oComercial Com+artirIgual 0&1 2n+orted
P$g& D1
_..,/\0 | [...U | 0\/,.._
_.,/f\'0 <\P [...U P\< 0'\f/,._
_.<f\. <\'. <\0[...U0\< .'\< .\f._
.<\ f\0 <\' <\ ... \< '\< 0\< \<.
.'\\\\'0 <\ <\' <\ . \< '\< \< 0'\\\\'.
.< <\. <\ <\' <\ \< '\< \< .\< <.
.'\\\\\\\\\\\\\0 f\'. <\'0 .\. 0'\< .'\< 0\\\\\\\\\\\\\'.
/ f\ \\ <\\//`WW\\< \\ \f W
/\\\\\\\\\\\\\\\\\\\ \\ <\WW_//\< \\ \\\\\\\\\\\\\\\\\\\W
/ \_.\\___\\<.<\\___\\._\ W
|\\\\\\\\\\\\\\\\\\\.< <.\\\\\\\\\\\\\\\\\\\|
| / W |
|\\\\\\\\\\\\\\\\\/ ..$$$$. .$$$$.. W\\\\\\\\\\\\\\\\\|
| / .< < < <. W |
/\\\\\\\\\\\\\\\\| _.,/fff/,. .,/fff/,._ |\\\\\\\\\\\\\\\\W
| ....P <._(<)_.<W /<._(<)_.< P.... |
|\\\\\\\\\\\.<.,0 | | | | 0,.<.\\\\\\\\\\\|
| |P ( | | ) P| |
|\\\\\\\\\\\|P f0 / .W 0< P|\\\\\\\\\\\|
| PP<,, ( _ _ ) ,,<PP |
|\\\\\\\\\\\\W< o f/f,f/f o </\\\\\\\\\\\\|
| <,g,<| $ $ |<,(,< |
|\\\\\\\\\\\\\\(_)\W __ __ /\(_)\\\\\\\\\\\\\\|
| W .,< f<f <,. / |
|\\\\\\\\\\\\\\\\\\\\W f,$/////////$,f /\\\\\\\\\\\\\\\\\\\\|
| W f,.....,< / |
|\\\\\\\\\\\\\\\\\\\\\\<. .<\\\\\\\\\\\\\\\\\\\\\\|
W fP,._ _.,Pf /
W\\\\\\\\\\\\\\\\\\\\\\\| fSSSSSf |\\\\\\\\\\\\\\\\\\\\\\\/
<. | RRRRR | .<
<.\\\g:>\\\\\\\\\\\\\| SSSS |\\\\\\\\\\\\\\\\\\\.<
W | RRR | /
<\\\\\\\\\\\\\\\\\| SS |\\\\\\\\\\\\\\\\\<
W | ( | /
<\\\\\\\\\\\\\\\| |\\\\\\\\\\\\\\\<
W | | /
W\\\\\\\\\\\\\| |\\\\\\\\\\\\\/
| | | |
|\\\\\\\\\\\\\| |\\\\\\\\\\\\\|
| | | |
|\\\\\\\\\\\\\| |\\\\\\\\\\\\\|
W | | /
<\\\\\\\\\\\\| |\\\\\\\\\\\\<
f,.________/ W________.,f
'8"ro"8 #F"r"&n$
por ,o- str. /,0s1
666as"ii-art"om
Para +u,licar tu mensa.e en la Nona 273 en*anos un ePmail contactoQhdmaga"ine&org3
indicando Nona27 En el asunto del mensa.e&
Carta de un Lector
(ol a 7 3 mu- ,uen d a = A mi nom,re es Mi chel 3 so- un
estudi ante de i ngeni er a en si stemas de MGi co&
+rimero que nada3 me gustara felicitar a todo su gran equi+o de
hac)ers - +rogramadores3 -a que son gente mu- talentosa ?&&&A
me decid a escri,irles -a que me qued mu- +icado con la
re*ista nOmero D que sacaron3 es+ecialmente en la +arte de
Milagros Infante3 -o so- nue*o con +-thon3 recin comien"o a
+rogramar - me gust% +-thon como +rimer lengua.e&
he comen"ado con todo lo ,$sico3 desde o+eraciones con if3 for3
'hile3 etc&3 - la *erdad que me ha encantado +-thon3 +ero no so-
mu- ,ueno encontrando ,uen material +ara a+render a
+rogramar me.or3 so,re todo manuales en es+aSol3
sinceramente agradecera muchsimo que +udieran
recomendarme manuales3 *ideos o cualquier material +ara
a+render acerca de +-thon&
de ante mano muchas gracias +or tomarse la molestia de leer
este correo3 es+ero una res+uesta =A
- de nue*o felicitarlas +or el gran tra,a.o que han lle*ado aca,o
con su re*ista =A
5es+uesta de Mi l agros I nfante Montero=
(ola Michel= Saludos desde PerZ3 es genial que quieras entrar en el
mundo dr P-thon +orque creeme que no te arre+entiras& Como te
das cuenta en internet ha- miles de +$ginas con muchsima
informaci%n3 +ero +ara que em+ieces de la me.or manera3
a+rendiendo correctamente - so,retodo teniendole mucho gusto3
te recomiendo los siguientes enlaces= [1\ Aqu +uedes encontrar
muchos ,uenos li,ros de P-thon3 [B\ este es el tutorial escrito +or
Eugenia Bahit en Maestros del Je,3 [E\ aqu tienes un li,ro escrito
tam,in +or Eugenia - aqu [0\ un tutorial tam,in ,ueno de
MundoGee)& Es+ero todos te sean de mucha utilidad3 esto- segura
de que si3 so,retodo ser$n la me.or manera +ara que em+ieces en
este mara*illoso mundo - que adem$s tengas los me.ores ha++-
codings con P-thon& ]oF
[1\ htt+=FF+-thon&org&arF+-arFA+rendiendoP-thon
[B\ htt+=FF'''&maestrosdel'e,&comFeditorialFguiaP+-thonF
[E\ htt+=FFcursos&eugenia,ahit&comFstaticF+dfFmaterialPsinP+ersonali"arP+-thon&+df
[0\ htt+=FFmundogee)&netFtutorialP+-thonF
Mensa.es de Lectores
Br -an 5odr gue"
Me gust% su re*ista& #iene muchos temas interesantes tanto +ara
no*atos como +ara usuarios no*atos& @o- a escri,ir un artculo
so,re ustedes en mi ,log ?htt+=FFordenadores&eninternet&esA&
espuesta de H!"# ./racias 0ryan1
Juan Pa,l o Mart ne" !el ,u. i o
Bueno3 so- admirador de ustedes3 me descargo todas sus
ediciones - me encantan7 M les queria dar la idea3 de al igual que
crearon la ca+a de a,straccion segura con m-sqli +udieran crear
una con mongod,3 +ara ?o,*iamenteA conectarse a esta ,ase de
datos& Lo que -o me refiero seria3 crear una forma segura de
conectarse usando esto=
htt+=FF'''&+h+&netFmanualFesF,oo)&mongo&+h+
espuesta de H!"# /racias por tu mensa)e, 2uan &a*lo1 3
tienes nuestra promesa de que pu*licaremos algo al respecto 45
^G5ACIAS P65 LEE5/6S7
P56!2CI!6 E/ LA 5EP_BLICA A5GE/#I /A3 P65 (AC`E5S !E #6!6 EL M2/!63 PA5A P564ESI6/ALES !E #6!6 EL PLA/E#A&
BP #u "ona eGclusi*a

You might also like