<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jon Segador</title>
	<atom:link href="http://jonsegador.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonsegador.com</link>
	<description>Desarrollador web y android, con todo lo que ello implica</description>
	<lastBuildDate>Mon, 23 Jan 2012 19:24:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Como sería mi empresa/startup casi perfecta, en mi rol de programador</title>
		<link>http://jonsegador.com/2012/01/como-seria-mi-empresa-startup-casi-perfecta-en-mi-rol-de-programador/</link>
		<comments>http://jonsegador.com/2012/01/como-seria-mi-empresa-startup-casi-perfecta-en-mi-rol-de-programador/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 08:30:41 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Opinión personal]]></category>
		<category><![CDATA[empresa]]></category>
		<category><![CDATA[programador]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[trabajar]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=650</guid>
		<description><![CDATA[&#8220;En mi rol de programador&#8221;. Considero esta frase el punto clave de este post. No sé si desde el punto de vista empresarial, económico, etc. es o no viable poder facilitar estas &#8220;ventajas&#8221; a los programadores de la empresa/startup. Antes de nada quería destacar que esto no es una crítica a ninguna empresa en la [...]]]></description>
			<content:encoded><![CDATA[<p><strong>&#8220;En mi rol de programador&#8221;</strong>. Considero esta frase el <strong>punto clave de este post</strong>. No sé si desde el punto de vista empresarial, económico, etc. es o no viable poder facilitar estas &#8220;ventajas&#8221; a los programadores de la empresa/startup. Antes de nada quería destacar que esto <strong>no es una crítica a ninguna empresa en la que yo haya trabajado.</strong></p>
<p>De hecho, en mi actual empresa se cumplen algunos de estos puntos y, aunque no todos, cumple con creces otras muchas cosas muy importantes que no se nombran en este post, acercándose mucho a una empresa casi perfecta. <strong>Solamente es una opinión personal y, seguramente, superficial.</strong></p>
<p><strong>1) Horario flexible.</strong> Pero de los de verdad. Yo soy el primero que sé que tengo horario flexible pero, en la práctica, es un horario que te marcas tu mismo los primeros días de empezar a trabajar y lo sigues semana tras semana. Mientras hagas 8 horas, podrías entrar a la hora que quisieras y acabar en consecuencia. Eres libre de hacer jornada continua, partida, entrar a las 7 de la mañana o a las 11, etc.</p>
<p><strong>2) Estar informado de todos los proyectos de la empresa.</strong> Como <em>&#8220;CEO&#8221;</em>, haría una reunión o informaría vía email a todos los empleados de la empresa (tengan o no relación con el proyecto en cuestión) para que sepan qué nuevos proyectos vamos a llevar o estamos llevando a cabo.</p>
<p><strong>3) Reunión mensual de como van las cosas.</strong> Conocer las estadísticas de la web, cuanto vende, que acciones se pueden llevar a cabo para mejorar o dar a conocer más el proyecto, etc. Absolutamente todos los integrantes de una empresa tienen ideas de como mejorar y tienen su opinión personal de como les gustaría que fuese el proyecto. Junto con el punto 2, creo que es una muy buena forma de estar integrado y sentirse parte de la empresa y de los proyectos.</p>
<p><strong>4) Ser responsable de proyectos.</strong> Es difícil sentirse parte de un proyecto que no sabes perfectamente como funciona o sin saber a donde se quiere llegar con él. Debe ser frustrante intervenir en muchos proyectos para hacer correcciones o mejoras menores, siendo parte de todos los proyectos y en ninguno a la vez, además de correr serio peligro de convertirte en un aburrido &#8220;pica-teclas&#8221;.<br />
Sueles tocar código que no has escrito tú y no sabes por qué se hizo así. Si ese proyecto lo conoces, sabes por qué se hizo así, sabes donde tocar exactamente, etc. Ser responsable del proyecto también debería implicar consultar estadísticas, ventas, si las nuevas funcionalidades desarrolladas funcionan o no, etc. Tampoco hace falta conocerlo todo al detalle, para eso existe el jefe de proyecto (si no lo es el propio programador).</p>
<p><strong>5) Tareas a una semana vista.</strong> Personalmente, no me gusta poner tiempo a una tarea y tener que acabarla en las horas estipuladas. Y a veces no estipuladas por ti mismo o por otro programador. <strong>Yo marcaría el lunes una serie de tareas que hay que desarrollar y tu mismo te organizas el tiempo para tenerlas acabadas el viernes.</strong> Es evidente que siempre surgen imprevistos o unas tareas tienen más prioridad que otras pero eso debe formar parte de como te organices la semana. El viernes deben estar acabadas y, en caso contrario, saber exactamente que ha ocurrido para que no sea así.</p>
<p><strong>6) Unas horas a la semana</strong> (una tarde, 2-3 horas, etc.) <strong>probar cosas nuevas que nos interesen y puedan ser de utilidad a la empresa.</strong> Por ejemplo, no puedes dedicar ese tiempo a coser ganchillo <img src='http://jonsegador.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Podrías probar un nuevo framework, aprender otro lenguaje de programación, investigar acciones SEO, etc. En definitiva, algo en lo que tu mismo estés interesado y que la empresa lo pueda aprovechar. Estaría muy bien sacar tiempo una vez al mes para que cada uno enseñe a los demás lo que ha aprendido.</p>
<p><strong>7) Acudir <em>&#8220;gratis&#8221;</em> a formaciones y eventos.</strong> Algunos eventos o formaciones son en días laborales y, aunque te gustaría ir, tendrías que pedir vacaciones. Si este tipo de eventos tienen relación con la actividad de la empresa, deberías de poder ir sin &#8220;gastar&#8221; días de vacaciones. <strong>Te beneficias tanto tú como la empresa al poder poner en práctica lo aprendido.</strong></p>
<p><strong>8 ) Poder comunicar a la empresa una idea propia con la intención de desarrollarla.</strong> Siendo muy importante compensar al trabajador si finalmente se decide que es viable y se va a llevar a cabo. Creo que todos los trabajadores tienen ideas de proyectos pero no la capacidad de llevarlos a cabo. No sabes diseñar, no sabes programar, no sabes como venderlo, etc. <strong>Una persona individual está limitado a sus propios conocimientos.</strong> Digo que es importante la compensación porque la frustración de que la empresa lleve un idea tuya a cabo, funcione y no veas ningún tipo de compensación, debe ser enorme.</p>
<p>Seguro que me dejo algo en el tintero pero estos 8 puntos son básicamente como sería mi empresa/startup perfecta. Me gustaría destacar que <strong>no hablo en ningún momento del sueldo</strong>. Puede que este tema esté más relacionado con el post que escribí sobre &#8220;<a href="http://jonsegador.com/2011/07/%C2%BFcuanto-merece-ganar-y-cuanto-gana-un-programador-inquieto/">¿Cuánto merece ganar y cuanto gana un programador “inquieto”?</a>&#8220;. Es evidente que cada cual tiene sus necesidades (hipotecas, préstamos, alquiler, etc.) y hay un mínimo al que hay que llegar.</p>
<p>Llevarse bien con los compañeros también es esencial pero como he dicho, este post es bastante superficial y nada <em>&#8220;emocional&#8221;</em>. <strong>Siendo, con total seguridad, los puntos emocionales los más importantes para estar a gusto en nuestro puesto de trabajo.</strong></p>
<p>Pd: ¿Te gustaría trabajar en un sitio así? ¿Añadirías algún punto o tienes algo que comentar? Se agradecen comentarios! <img src='http://jonsegador.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2012/01/como-seria-mi-empresa-startup-casi-perfecta-en-mi-rol-de-programador/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aplicación Cercanías Renfe para Android liberada como open source</title>
		<link>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/</link>
		<comments>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 09:55:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[código abierto]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[renfe]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=645</guid>
		<description><![CDATA[Como anunciaba en el post anterior (Me han suspendido la aplicación de Cercanías Renfe para Android) he liberado el código fuente de la aplicación Cercanías Renfe para dispositivos Android. Así mismo, también se puede descargar el fichero .apk de la aplicación e instalarla directamente es vuestros móviles, tablets, etc. Descárgar la aplicación (fichero .apk) Explorar [...]]]></description>
			<content:encoded><![CDATA[<p>Como anunciaba en el post anterior (<a href="http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/">Me han suspendido la aplicación de Cercanías Renfe para Android</a>) he <strong>liberado el código fuente</strong> de la aplicación Cercanías Renfe para dispositivos Android.</p>
<p>Así mismo, también se puede <strong>descargar el fichero .apk de la aplicación</strong> e instalarla directamente es vuestros móviles, tablets, etc.</p>
<ul>
<li><a href="http://jonsegador.com/cercanias/app/Renfe.apk">Descárgar la aplicación (fichero .apk)</a></li>
<li><a href="https://github.com/jonseg/cercanias-renfe-android">Explorar el código fuente (Github)</a></li>
</ul>
<p>El <strong>único requisito</strong> para utilizar el código fuente y crear tu propia aplicación, es que sea <strong>liberada como código abierto</strong>. Nada más.</p>
<p>El código no está excesivamente documentado, quizás haga un tutorial en mi blog explicando paso a paso como funciona la aplicación.</p>
<p>Una vez más, gracias a todos por los ánimos y el apoyo recibido. <strong>¡GRACIAS!</strong></p>
<p>Pd.: Si decides crear tu propia aplicación o reutilizar el código, deja un comentario!</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2012/01/aplicacion-cercanias-renfe-para-android-liberada-como-open-source/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Me han suspendido la aplicación de Cercanías Renfe para Android</title>
		<link>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/</link>
		<comments>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 15:03:09 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Opinión personal]]></category>
		<category><![CDATA[Proyectos propios]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[renfe]]></category>
		<category><![CDATA[suspendida]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=619</guid>
		<description><![CDATA[2 años, 100.730 instalaciones totales y 51.896 instalaciones activas. Eso es lo que ha durado mi aplicación de Cercanías Renfe para Android. Ayer, día 3 de enero, recibo un email de Google informándome de que &#8220;mi aplicación vulnera los derechos de propiedad industrial de RENFE-Operadora&#8221; y había sido suspendida. Concretamente por la utilización inconsentida de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>2 años, 100.730 instalaciones totales y 51.896 instalaciones activas.</strong> Eso es lo que ha durado mi <a href="http://jonsegador.com/2010/01/horarios-de-trenes-de-cercanias-renfe-en-tu-movil-android/">aplicación de Cercanías Renfe para Android</a>.</p>
<p>Ayer, día 3 de enero, recibo un email de Google informándome de que &#8220;mi aplicación vulnera los derechos de propiedad industrial de RENFE-Operadora&#8221; y había sido suspendida. Concretamente por la utilización inconsentida de sus signos distintivos, lo que constituye un acto de competencia desleal.</p>
<p><strong>¿Competencia desleal?</strong> Es cierto que utilizo el logotipo de Cercanías como imagen de la aplicación, pero de ahí a ser competencia desleal&#8230; Como bien dijo <a href="http://twitter.com/#!/nacmartin/status/154304390474383360">@nacmartin</a> en Twitter: &#8220;Serías competencia si tuvieras tu propia red ferroviaria.&#8221;</p>
<p>El email que recibo proviene de Google pero, no sé si por error, puedo leer el mensaje que el abogado de Renfe (se le puede encontrar fácilmente en Linkedin) envía a Google y es ahí donde puedo leer lo de competencia desleal (ya que Google ni lo menciona). <strong>El mensaje que envía es un copy&#038;paste</strong> clarísimo, con tres párrafos donde se repite lo mismo con diferentes palabras.</p>
<p>No me gusta que <strong>Google haya suspendido la aplicación sin yo poder defenderme</strong> de ninguna manera. Si es por utilizar el logotipo de Cercanías, podría haber modificado la aplicación y subir otro logo, por ejemplo el de un tren parado en mitad de la vía (sería una buena representación de los trenes de Cercanías de Renfe).</p>
<p>No puedo modificar la aplicación ni tampoco realizar ninguna acción sobre ella: descargar el código, descripciones, etc.</p>
<p><a href="http://jonsegador.com/wp-content/renfe-android.png"><img src="http://jonsegador.com/wp-content/renfe-android.png" alt="" title="renfe-android" width="400" height="40" class="aligncenter size-medium wp-image-621" /></a></p>
<p>El mensaje del abogado se envió el 29 de diciembre de 2011 y el día 3 ya estaba suspendida. Bastante rápidos para lo que les interesa.</p>
<p>La decisión que he tomado es <strong>liberar el código y subir el apk de la aplicación a mi blog para su libre descarga</strong>. No tengo intención de seguir beneficiando a Renfe con la aplicación y además de manera gratuita (<strong>no he ganado un solo céntimo con la aplicación, era totalmente gratuita y sin publicidad</strong>). No dejaré de preocuparme por ella y la iré actualizando (se que existe alguna forma para que las actualizaciones se descarguen desde mi blog, como dice <a href="http://twitter.com/#!/biriru/status/154337908399149057">@biriru</a>)</p>
<p>Gracias a todos por los mensajes y las palabras de ánimo que me habéis dejado en Twitter, la verdad que me han desbordado y no puedo contestar a todos. <strong>¡GRACIAS!</strong></p>
<p>Aquí algunos twits que me han parecido interesantes:</p>
<p><strong>Santi Núñez</strong> <a href="http://twitter.com/#!/snunsan">@snunsan</a><br />
Incapaz de crear app mínimamte seria, @Renfe denuncia la app #Android de @jonseg por &#8220;compentencia desleal&#8221; y Google la suspende #hazteFan</p>
<p><strong>aurelio hernández</strong> <a href="http://twitter.com/#!/ahdezsanchez">@ahdezsanchez</a><br />
Renfe se supera. No solo tienen la web más vergonzosa que se recuerda, sino que hace que retiren apps independientes, como la de @jonseg</p>
<p><strong>Dani Rubio</strong> <a href="http://twitter.com/#!/vegaquark">@vegaquark</a><br />
@jonseg Suele pasar que las empresas que desconocen el terreno meten la pata&#8230; Es como los famosos en twitter&#8230;</p>
<p><strong>Rubén Hidalgo</strong> <a href="http://twitter.com/#!/rhidalgo">@rhidalgo</a><br />
@jonseg 100veces mas practica tu app,al final estas facilitando el uso a las personas que lo utilizamos,cansado de #renfe #renfelibreAndroid</p>
<p><strong>papakorkel</strong> <a href="http://twitter.com/#!/papakorkel">@papakorkel</a><br />
@jonseg ¿Desleal porque no es puta mierda como su página web?</p>
<p><strong>Josean Bilbao</strong> <a href="http://twitter.com/#!/joseanbilbao">@joseanbilbao</a><br />
@jonseg otra muestra más de su incompetencia, en lugar de acercarse al talento y colaborar, lo eliminan. #fail #renfe</p>
<p><strong>Albert Mata</strong> <a href="http://twitter.com/#!/almata">@almata</a><br />
@jonseg yo creía que en Android había libertad y no eran como los malísimos de Apple y no pasaban esas cosas&#8230;</p>
<p><strong>rnesto G. Aroca</strong> <a href="http://twitter.com/#!/ErneX">@ErneX</a><br />
@snunsan @Renfe @jonseg Renfe como siempre, cubriéndose de gloria. Son unos incapaces.</p>
<p><strong>Salvador López</strong> <a href="http://twitter.com/#!/salvad0rlopez">@salvad0rlopez</a><br />
@jonseg yo uso tu app , una lastima que te la quiten del market ya que es fantastica, espero que sigas desarrollandola. <img src='http://jonsegador.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Javier Eguiluz</strong> <a href="http://twitter.com/#!/javiereguiluz">@javiereguiluz</a><br />
@jonseg Ánimo Jon! El único consuelo es que Renfe reconoce que no puede ganarte, así que trata de eliminarte <img src='http://jonsegador.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  #android #renfe</p>
<p><strong>Victor</strong> <a href="http://twitter.com/#!/vdesigner_es">@vdesigner_es</a><br />
Bravo por los señores de @renfe obligando a Google a eliminar la única app 100% funcional sobre sus propios servicios #BravoRenfe</p>
<p><strong>A todos los RT, menciones y palabras de ánimo, solo puedo decir: ¡GRACIAS!</strong></p>
<p>&#8212;&#8212;-</p>
<p><strong>Actualización 10 enero 2012</strong>: Ya está disponible el código fuente en github y puedes descargar el fichero .apk de la aplicación si echas un vistazo a la columna derecha del blog.</p>
<p><del datetime="2012-01-10T08:52:22+00:00"><strong>Actualización 4 enero 2012</strong>: Ahora mismo no tengo acceso a la última versión del código de la aplicación. En cuanto pueda (a partir del día 8 de enero) subiré el código a Github y publicaré el .apk en el blog.</del></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2012/01/me-han-suspendido-la-aplicacion-de-cercanias-renfe-para-android/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Atajos de teclado útiles en Netbeans para PHP</title>
		<link>http://jonsegador.com/2011/11/atajos-teclado-utiles-netbeans-php/</link>
		<comments>http://jonsegador.com/2011/11/atajos-teclado-utiles-netbeans-php/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 17:57:54 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[atajos]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpdoc]]></category>
		<category><![CDATA[productividad]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[teclado]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=594</guid>
		<description><![CDATA[Netbeans es mi IDE de desarrollo favorito cuando estoy programando en PHP. Podemos mejorar nuestra productividad utilizando Netbeans haciendo uso de sus numerosos atajos de teclado que nos facilitará el trabajo. Aunque sé que hay bastantes más (y por supuesto para otros lenguajes), voy a intentar enumerar los más útiles que conozco. Si vosotros conocéis [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Netbeans</strong> es mi IDE de desarrollo favorito cuando estoy programando en PHP. Podemos <strong>mejorar nuestra productividad</strong> utilizando Netbeans haciendo uso de sus numerosos atajos de teclado que nos facilitará el trabajo. Aunque sé que hay bastantes más (y por supuesto para otros lenguajes), voy a intentar enumerar los más útiles que conozco. Si vosotros conocéis alguno más, no dudéis en escribir un comentario y lo añadiré al post.</p>
<ul>
<li><strong>[CTRL] + [SPACE]</strong> : Completa el código que estamos escribiendo. Por ejemplo, si queremos escribir LocateRegistry solamente escribimos Loc y presionamos el atajo para que nos sugiera la palabra completa. Si presionamos dos veces el atajo, muestra todas las opciones que comiencen con los caracteres escritos.</li>
<li><strong>[ALT] + [INSERT]</strong> : Agrega constructores, métodos accesores, propiedaes, overrides, etc..</li>
<li><strong>[ALT] + [ENTER]</strong> : Se usa sobre el texto subrayado para ver la sugerencia que nos hace el IDE cuando hay algún error de sintaxis o se necesita realizar algun import o surround</li>
<li><strong>[CTRL] + [R]</strong>: Si lo hacemos sobre el identificador, renombra todas las ocurrencias.</li>
<li>Generador de documentación <strong>PHPDoc</strong>: Si posicionamos el cursor en la línea anterior donde empieza la declaración de la función, escribimos <strong>/**</strong> y pulsamos [ENTER], automáticamente se nos generará la documentación PHPDoc de esa función.</li>
<li><strong>[ALT]+[SHIFT]+F</strong> : Tabula el código automáticamente.</li>
<li><strong>[SHIFT]+[ESC]</strong> : Maximiza o minimiza la ventana donde tecleamos el codigo.</li>
<li><strong>[CTRL]+B</strong> ó <strong>[CTRL]+(click)</strong> : Nos abre el archivo donde se encuentra la declaración de la variable/funcion/clase.</li>
<li><strong>[CTRL]+[TAB]</strong> : Lista de los archivos que tenemos abierto para cambiar de uno a otro rápidamente.</li>
<li><strong>[CTRL]+[SHIFT]+UP</strong> ó <strong>[CTRL]+[SHIFT]+DOWN</strong> : Copia la linea en la que estamos en la fila superior o inferior.</li>
<li><strong>[ALT]+[SHIFT]+UP</strong> ó <strong>[ALT]+[SHIFT]+DOWN</strong> : Moveremos la línea en la que nos encontramos hacia arriba o hacia abajo.</li>
<li><strong>[CTRL]+E</strong> : Borra la línea en la que estamos.</li>
<li><strong>[CTRL]+[SHIFT]+C</strong> : Comenta la línea actual. Si hacemos una selección, comentará todo el código seleccionado.</li>
<li><strong>[CTRL]+R</strong> : Renombramos una variable/función/clase y hace el cambio automáticamente en el resto del código (MUY útil).</li>
</ul>
<p>Vamos a ver a continuación unos atajos para escribir código mucho más rápido con <a href="http://jonsegador.com/tag/netbeans/">Netbeans</a>. Tan solo tendremos que escribir la primera palabra que se indica y pulsar la tecla del tabulador.</p>
<ul>
<li><strong>fore + [TAB]</strong> : Genera un bucle foreach típico.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>forek + [TAB]</strong> : Nos generará un bucle foreach, extrayendo también la clave del array.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>if + [TAB]</strong> : Autocompleta el código de un bloque if.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>swi + [TAB]</strong> : Genera un bloque switch.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$categoriesLlistat</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #000088;">$value</span><span style="color: #339933;">:</span>
&nbsp;
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
&nbsp;
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>while + [TAB]</strong> : Escribirá automáticamente un bucle while.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>my_fa + [TAB]</strong> : Genera un bucle while, extrayendo los datos de una consulta mysql en forma de array.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>my_fo + [TAB]</strong> : Genera un bucle while, extrayendo los datos de una consulta mysql en forma de objeto.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_object</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li><strong>my_fr + [TAB]</strong> : Genera un bucle while, extrayendo los datos de una consulta mysql en forma de filas.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_row</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
</ul>
<p>También se pueden generar atajos de código definidos por nosotros mismos. Ese es un tema que da para otro post <img src='http://jonsegador.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/11/atajos-teclado-utiles-netbeans-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Desarrollo Android: Obtener número de teléfono desde la aplicación</title>
		<link>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/</link>
		<comments>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 17:40:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[getLine1Number]]></category>
		<category><![CDATA[manifest]]></category>
		<category><![CDATA[read_phone_state]]></category>
		<category><![CDATA[teléfono]]></category>
		<category><![CDATA[TelephonyManager]]></category>
		<category><![CDATA[telephony_service]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=584</guid>
		<description><![CDATA[Con este simple código, podremos obtener el número de teléfono donde se está ejecutando la aplicación android. Antes de nada, debemos añadir permisos al archivo manifest.xml: &#60;uses-permission android:name=&#34;android.permission.READ_PHONE_STATE&#34; /&#62; Y, a continuación, la función que nos devolverá el número de teléfono del teléfono donde se está ejecutando nuestra aplicación: private String getPhoneNumber&#40;&#41;&#123; TelephonyManager mTelephonyManager; mTelephonyManager [...]]]></description>
			<content:encoded><![CDATA[<p>Con este simple código, podremos <strong>obtener el número de teléfono</strong> donde se está ejecutando la <strong>aplicación android</strong>.</p>
<p>Antes de nada, debemos añadir <strong>permisos al archivo manifest.xml</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>uses<span style="color: #339933;">-</span>permission android<span style="color: #339933;">:</span>name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;android.permission.READ_PHONE_STATE&quot;</span> <span style="color: #339933;">/&gt;</span></pre></div></div>

<p>Y, a continuación, la función que nos <strong>devolverá el número de teléfono</strong> del teléfono donde se está ejecutando nuestra aplicación:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> getPhoneNumber<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  TelephonyManager mTelephonyManager<span style="color: #339933;">;</span>
  mTelephonyManager <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>TelephonyManager<span style="color: #009900;">&#41;</span> getSystemService<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span>.<span style="color: #006633;">TELEPHONY_SERVICE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #000000; font-weight: bold;">return</span> mTelephonyManager.<span style="color: #006633;">getLine1Number</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/11/android-obtener-numero-telefono-desde-aplicacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redireccionar a página de mantenimiento con htaccess, manteniendo los estilos css y las imágenes</title>
		<link>http://jonsegador.com/2011/11/redireccionar-pagina-mantenimiento-htaccess-manteniendo-estilos-css-imagenes/</link>
		<comments>http://jonsegador.com/2011/11/redireccionar-pagina-mantenimiento-htaccess-manteniendo-estilos-css-imagenes/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 19:29:44 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[302]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[imágenes]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[mantenimiento]]></category>
		<category><![CDATA[redirect]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=575</guid>
		<description><![CDATA[Si vamos a realizar cambios en nuestra web y se tratan de cambios que pueden afectar al funcionamiento de la página (cambios en la base de datos, cambio de funcionalidades, etc), lo ideal es redirigir a una página de mantenimiento para informar a los usuarios mientras se realizan los cambios. En este caso lo vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Si vamos a realizar cambios en nuestra web y se tratan de cambios que pueden afectar al funcionamiento de la página (cambios en la base de datos, cambio de funcionalidades, etc), lo ideal es redirigir a una <strong>página de mantenimiento</strong> para informar a los usuarios mientras se realizan los cambios. En este caso lo vamos a hacer editando el archivo <strong>.htaccess</strong> y dando <strong>permiso a nuestra ip para acceder</strong> a la web normalmente y poder ver los cambios. El resto de usuarios verán la página de mantenimiento a la que les redirigiremos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="dos" style="font-family:monospace;">&lt;IfModule mod_rewrite.c&gt;
 RewriteEngine on
 RewriteCond <span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REMOTE_ADDR<span style="color: #66cc66;">&#125;</span> !^<span style="color: #cc66cc;">999</span>\.999\.999\.999
 RewriteCond <span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REQUEST_URI<span style="color: #66cc66;">&#125;</span> !/mantenimiento.html$ <span style="color: #66cc66;">&#91;</span>NC<span style="color: #66cc66;">&#93;</span>
 RewriteRule .* /mantenimiento.html <span style="color: #66cc66;">&#91;</span>R=<span style="color: #cc66cc;">302</span>,L<span style="color: #66cc66;">&#93;</span>
&lt;/IfModule&gt;</pre></td></tr></table></div>

<p>En la línea 3, cambiaremos la ip por la nuestra propia para poder acceder normalmente.<br />
La línea 4 indica que no redirija si ya estamos en la página de mantenimiento (para evitar un bucle infinito).<br />
Y en la línea 5 indicamos la ruta de la propia página de mantenimiento con una redirección 302 (<strong>redirección temporal</strong>).</p>
<p>Hasta aquí todo bien. El problema es que desde la página de mantenimiento no podemos acceder a las <strong>imágenes o estilos css</strong> porque también se ejecuta la redirección. Para evitar esto, añadiremos una línea más al código anterior:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="dos" style="font-family:monospace;">&lt;IfModule mod_rewrite.c&gt;
 RewriteEngine on
 RewriteCond <span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REMOTE_ADDR<span style="color: #66cc66;">&#125;</span> !^<span style="color: #cc66cc;">999</span>\.999\.999\.999
 RewriteCond <span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REQUEST_URI<span style="color: #66cc66;">&#125;</span> !/mantenimiento.html$ <span style="color: #66cc66;">&#91;</span>NC<span style="color: #66cc66;">&#93;</span>
 RewriteCond <span style="color: #33cc33;">%</span><span style="color: #66cc66;">&#123;</span>REQUEST_URI<span style="color: #66cc66;">&#125;</span> !\.<span style="color: #66cc66;">&#40;</span>jpe?g?|png|gif|css<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#91;</span>NC<span style="color: #66cc66;">&#93;</span>
 RewriteRule .* /mantenimiento.html <span style="color: #66cc66;">&#91;</span>R=<span style="color: #cc66cc;">302</span>,L<span style="color: #66cc66;">&#93;</span>
&lt;/IfModule&gt;</pre></td></tr></table></div>

<p>Ahora todo debería funcionar correctamente. Cuando hayamos terminado de hacer los cambios, solo tendremos que comentar las líneas anteriores.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/11/redireccionar-pagina-mantenimiento-htaccess-manteniendo-estilos-css-imagenes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Funciones anónimas (closures) en PHP 5.3</title>
		<link>http://jonsegador.com/2011/11/funciones-anonimas-closures-en-php-5-3/</link>
		<comments>http://jonsegador.com/2011/11/funciones-anonimas-closures-en-php-5-3/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 17:50:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[closures]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[funciones anónimas]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=567</guid>
		<description><![CDATA[Según la documentación oficial de PHP, las funciones anónimas (o closures) permiten la creación de funciones que no tienen un nombre especificado. Ejemplo sencillo de lo que quiere decir: $saludo = function&#40;$nombre&#41; &#123; printf&#40;&#34;Hola %s\r\n&#34;, $nombre&#41;; &#125;; &#160; $saludo&#40;'Mundo'&#41;; $saludo&#40;'PHP'&#41;; Pero en este ejemplo vamos a ir un poco más allá. Imaginemos que tenemos este [...]]]></description>
			<content:encoded><![CDATA[<p>Según la <a href="http://php.net/manual/es/functions.anonymous.php">documentación oficial de PHP</a>, las <strong>funciones anónimas</strong> (o <strong>closures</strong>) permiten la creación de funciones que no tienen un nombre especificado.</p>
<p>Ejemplo sencillo de lo que quiere decir:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$saludo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$nombre</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hola <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nombre</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$saludo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Mundo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$saludo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'PHP'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Pero en este ejemplo vamos a ir un poco más allá.<br />
Imaginemos que tenemos este array:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$usuarios</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
             <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'nombre'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Jon'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cumple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1984-02-17'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
             <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'nombre'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Luis'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cumple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1985-07-07'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
             <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'nombre'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Antonio'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cumple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1974-11-17'</span><span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Si quisiéramos obtener los ids de cada usuario, haríamos algo parecido a esto:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$ids</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuarios</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$usuario</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$ids</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$usuario</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pero hay una forma mucho más elegante de hacerlo <strong>utilizando las funciones anónimas</strong> que nos proporciona PHP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$ids</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_map</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuario</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$usuario</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$usuarios</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Mucho más limpio y elegante&#8230; Vamos a rizar más el rizo. Ahora queremos obtener los usuario que hayan nacido a partir de 1980. Normalmente haríamos algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$usuarios_filtrados</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$fecha_inicial</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'1980-01-01'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuarios</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$usuario</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuario</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cumple'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #000088;">$fecha_inicial</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$usuarios_filtrados</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$usuario</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En esta ocasión lo haremos utilizando de nuevo las <strong>funciones anónimas o closures</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$fecha_inicial</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'1980-01-01'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$usuarios_filtrados</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_filter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuarios</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuario</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$fecha_inicial</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$usuario</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cumple'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #000088;">$fecha_inicial</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Y esto solo son algunos ejemplos. Las herramientas las tenemos ahí, depende de nosotros si las utilizamos o no <img src='http://jonsegador.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/11/funciones-anonimas-closures-en-php-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desloguear (logout) a un usuario mediante programación en Symfony2</title>
		<link>http://jonsegador.com/2011/10/desloguear-a-un-usuario-mediante-programacion-en-symfony2/</link>
		<comments>http://jonsegador.com/2011/10/desloguear-a-un-usuario-mediante-programacion-en-symfony2/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 10:01:10 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Symfony2]]></category>
		<category><![CDATA[logout]]></category>
		<category><![CDATA[redirect]]></category>
		<category><![CDATA[RedirectResponse]]></category>
		<category><![CDATA[setFlash]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=562</guid>
		<description><![CDATA[¿Cómo se puede desloguear un usuario sin tener que acceder a la ruta correspondiente del logout? Para algunas funcionalidades que queramos añadir a nuestro proyecto, es posible que necesitemos desloguear al usuario. Un ejemplo podría ser el caso de desactivar/borrar su cuenta, pero puede que haya más (todo depende de nuestra imaginación ). Vamos a [...]]]></description>
			<content:encoded><![CDATA[<p>¿Cómo se puede <strong>desloguear un usuario sin tener que acceder a la ruta correspondiente del logout</strong>? Para algunas funcionalidades que queramos añadir a nuestro proyecto, es posible que necesitemos desloguear al usuario. Un ejemplo podría ser el caso de desactivar/borrar su cuenta, pero puede que haya más (todo depende de nuestra imaginación <img src='http://jonsegador.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Vamos a ver como hacerlo con <strong>Symfony2</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;request&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">invalidate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;security.context&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setToken</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Como extra, podemos informar al usuario mediante un mensaje flash y le redirigimos a la página que queramos:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;session&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'message.success'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> RedirectResponse<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">generateUrl</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homepage'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Evidentemente, la página a la que vamos a redirigir tiene que poder ser vista por usuarios anónimos (no debe necesitar autentificación).</p>
<p>Pd.: Ya escribí como <a href="http://jonsegador.com/2011/07/instalar-symfony2-desde-cero/"><strong>Instalar Symfony2 desde cero</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/10/desloguear-a-un-usuario-mediante-programacion-en-symfony2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Me voy a vivir y trabajar a Barcelona</title>
		<link>http://jonsegador.com/2011/09/me-voy-a-vivir-y-trabajar-a-barcelona/</link>
		<comments>http://jonsegador.com/2011/09/me-voy-a-vivir-y-trabajar-a-barcelona/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 09:19:34 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Opinión personal]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=525</guid>
		<description><![CDATA[Así, como lo lees. Llevo unos años pensando en la posibilidad de ir a trabajar fuera (incluso me había planteado salir fuera de España) pero una cosa es pensarlo y otra es hacerlo. Me motiva el poder probar suerte en otra ciudad, independizarme, otro ambiente&#8230; un cambio de aires. Creo que es una buena experiencia [...]]]></description>
			<content:encoded><![CDATA[<p>Así, como lo lees. Llevo unos años pensando en la posibilidad de ir a trabajar fuera (incluso me había planteado salir fuera de España) pero una cosa es pensarlo y otra es hacerlo. Me motiva el poder probar suerte en otra ciudad, independizarme, otro ambiente&#8230; un cambio de aires. Creo que es una buena experiencia que me gustaría vivir, y que mejor momento que ahora que no tengo ni hipotecas ni hijos ni ningún gasto importante. <strong>No me gustaría plantarme con 40 años y pensar que no aproveché la ocasión y que ya no podré volver a hacerlo.</strong> Como apunte decir que no es Barcelona capital, cosa que prefiero, para evitar así los agobios, tráfico, etc.</p>
<p>Como decía antes, una cosa es pensarlo y otra es hacerlo: buscar trabajo, echar curriculumns, ir hasta esa ciudad a hacer entrevistas, etc. Al final, por una cosa o por otra, la posibilidad de &#8220;emigrar&#8221; a otra ciudad solo existía en mi mente en forma de &#8220;intenciones&#8221; o engordaba mi enorme lista de &#8220;cosas por hacer&#8221;. La situación cambia cuando es la empresa la que directamente contacta contigo interesándose por ti. Después de hablar con ellos, darle muchas vueltas a la cabeza, inseguridades, etc. veo que es una oportunidad que no puedo dejar escapar. <strong>Además de que es una buena empresa, con experiencia en el sector y con proyectos interesantes.</strong> Así que finalmente voy hasta allí el fin de semana a hacer la entrevista personal y después de pasar la entrevista más larga que he hecho nunca, me comunican que quieren contar conmigo. He de decir que aunque la entrevista fue larga, no se me hizo pesada y solo fui consciente de su duración cuando salí por la puerta de la oficina. La verdad que tienen un ambiente envidiable, con buenos profesionales y me trataron genial. Así es imposible decir que no. Incluso antes de ser nada fijo y ni siquiera haber hecho la entrevista, el trato que me han dado ha sido impresionante y se han preocupado mucho por mi. ¿Qué más se puede pedir? Mil gracias a todo el equipo de <a href="http://www.perception.es/">Perception</a>.</p>
<p>Otro de los objetivos del cambio es <strong>poder asistir a todas las conferencias, reuniones, etc. de desarrolladores que pueda</strong> para aprender todo lo posible, hacer contactos, conocer a otros programadores, etc. En Bilbao no hay mucha variedad a parte del recientemente creado <a href="http://webdevbilbao.com/">WebDevBilbao</a>. Quiero escuchar las experiencias de otros programadores, asistir a charlas, conocer otros métodos de trabajo, proyectos, etc.</p>
<p>Por otra parte, me da mucha pena dejar <strong>BlackSlot</strong>. No tenía ninguna intención de irme a no ser que encontrase una oportunidad como esta. Me han tratado muy bien, me lo he pasado genial y he aprendido mucho de todos ellos. No puedo hacer otra cosa que darles las gracias por el tiempo que he pasado con ellos. No tengo dudas de que cualquier proyecto o web que haga la pondré en sus manos, ya que es una de las <a href="http://blackslot.com/">empresas de hosting con los mejores profesionales</a> que se pueden encontrar. No es peloteo, es la verdad.</p>
<p>Evidentemente también me da pena dejar mi casa, mi madre, mis amigos, la ciudad&#8230; Tener Asturias aún más lejos también es un handicap importante para mi, ya que es el único lugar donde consigo desconectar totalmente. La intención es volver de fin de semana una vez al mes o, si no es posible, dos veces cada tres meses (más o menos).</p>
<p>Uno de los motivos por los que escribo este post es para que cualquiera que sienta la inquietud de probar suerte en otra ciudad, pueda leer mi experiencia. Intentaré escribir sobre el proceso de cambio y sobre cualquier dificultad o trámite que tenga que pasar y pueda ser de ayuda para alguien.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/09/me-voy-a-vivir-y-trabajar-a-barcelona/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Error svn: Directory .svn containing working copy admin area is missing</title>
		<link>http://jonsegador.com/2011/09/error-svn-directory-svn-containing-working-copy-admin-area-is-missing/</link>
		<comments>http://jonsegador.com/2011/09/error-svn-directory-svn-containing-working-copy-admin-area-is-missing/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 08:05:19 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[control de versiones]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://jonsegador.com/?p=520</guid>
		<description><![CDATA[El motivo por el que nos puede aparecer este error (utilizando el sistema de control de versiones svn) al intentar hacer un commit, es porque hemos borrado (o ha desaparecido misteriosamente ) la carpeta .svn de alguno de los directorios del proyecto. svn: Directory .svn containing working copy admin area is missing Hay dos soluciones: [...]]]></description>
			<content:encoded><![CDATA[<p>El motivo por el que nos puede aparecer este error (utilizando el <strong>sistema de control de versiones svn</strong>) al intentar hacer un <strong>commit</strong>, es porque hemos borrado (o ha desaparecido misteriosamente <img src='http://jonsegador.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) la carpeta <strong>.svn</strong> de alguno de los directorios del proyecto.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">svn: Directory .svn containing working <span style="color: #b1b100; font-weight: bold;">copy</span> admin area is missing</pre></div></div>

<p>Hay dos soluciones:</p>
<p><strong>1) Descargarnos de nuevo el proyecto completo (checkout).</strong></p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">svn co http://servidorsvn/proyecto/trunk proyecto</pre></div></div>

<p><strong>2)</strong> Si la carpeta .svn ha desaparecido solamente de uno de los directorios del proyecto, <strong>podemos bajarnos solo esa carpeta y mover el archivo .svn a nuestro proyecto</strong> (a la carpeta a la que falta el .svn).</p>
<p>En este ejemplo, se ha borrado la carpeta .svn del directorio css.</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">svn co http://servidorsvn/proyecto/trunk/css css_copia</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">mv css_copia/.svn /ruta_al_proyecto/proyecto/css/</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">rm -rf css_copia</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jonsegador.com/2011/09/error-svn-directory-svn-containing-working-copy-admin-area-is-missing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

