<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1892078772494901178</id><updated>2024-12-19T00:28:06.540-03:00</updated><title type='text'>Perl, SysAdmin y demás cosas de computación</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://properl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-567334757262402612</id><published>2015-02-03T01:55:00.002-03:00</published><updated>2015-02-03T02:01:24.497-03:00</updated><title type='text'>Perl es divertido</title><content type='html'>Se me ocurrió buscar si se podía usar utf8 en el nombre de las subs en perl. Resulta que sí.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
use strict; use warnings;&lt;br /&gt;
use feature &#39;say&#39;;&lt;br /&gt;
use utf8;&lt;br /&gt;
&lt;br /&gt;
sub ña() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; say &quot;Soy una eñe&quot;;&lt;br /&gt;
}&lt;br /&gt;
sub ᐁ() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; say &quot;Soy un triángulo&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ña;&lt;br /&gt;
ᐁ;&lt;/blockquote&gt;
Resulta en:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Soy una eñe&lt;br /&gt;
Soy un triángulo&lt;/blockquote&gt;
&lt;br /&gt;
Es tarde, pero se pueden hacer miles de dibujitos con estos caracteres. Perl siempre tuvo eso de poder hacer pavadas como esas (perl golf, dark perl) así que no es nada nuevo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVFg8uk2tfTnGK0N59PPBuiFqVTgkJpmsbu1PLePDWAmPeSH984nS3zXHPWH5ZnqBjr6ctUlgXcV4gyL277Uv-QmOAt1aQPpgcx4cxCdaOW9Z33wjImzwPNXZt3Im9EKeFqPNPGZjlzaLZ/s1600/PC225057.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVFg8uk2tfTnGK0N59PPBuiFqVTgkJpmsbu1PLePDWAmPeSH984nS3zXHPWH5ZnqBjr6ctUlgXcV4gyL277Uv-QmOAt1aQPpgcx4cxCdaOW9Z33wjImzwPNXZt3Im9EKeFqPNPGZjlzaLZ/s1600/PC225057.JPG&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Les dejo un gato, que mira lo que hice y se pregunta porqué hago esto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/567334757262402612/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2015/02/perl-es-divertido.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/567334757262402612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/567334757262402612'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2015/02/perl-es-divertido.html' title='Perl es divertido'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVFg8uk2tfTnGK0N59PPBuiFqVTgkJpmsbu1PLePDWAmPeSH984nS3zXHPWH5ZnqBjr6ctUlgXcV4gyL277Uv-QmOAt1aQPpgcx4cxCdaOW9Z33wjImzwPNXZt3Im9EKeFqPNPGZjlzaLZ/s72-c/PC225057.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-6984106494941234197</id><published>2015-01-04T09:50:00.002-03:00</published><updated>2015-01-04T09:50:15.268-03:00</updated><title type='text'>Aventuras con mi teclado nuevo II</title><content type='html'>Sigo con &lt;a href=&quot;http://properl.blogspot.com.ar/2015/01/aventuras-con-mi-teclado-nuevo-i.html&quot;&gt;mi teclado nuevo&lt;/a&gt;. Resulta que el teclado de mi notebook está en español &quot;latam&quot; y este nuevo está en &quot;es&quot;. Quiero que cada uno esté en el idioma que le corresponde. Sí, así de cabeza dura soy.&lt;br /&gt;
&lt;br /&gt;
Para eso se usa &quot;setxkbmap&quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;setxkbmap -device 3 latam&lt;br /&gt;
&amp;nbsp;setxkbmap -device 11 es&lt;/blockquote&gt;
&lt;br /&gt;
¿Cual es cual? Ese número de device se encuentra con xinput:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;
&amp;nbsp; xinput -list &lt;br /&gt;⎡ Virtual core pointer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=2&amp;nbsp;&amp;nbsp;&amp;nbsp; [master pointer&amp;nbsp; (3)]&lt;br /&gt;⎜&amp;nbsp;&amp;nbsp; ↳ Virtual core XTEST pointer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=4&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; pointer&amp;nbsp; (2)]&lt;br /&gt;⎜&amp;nbsp;&amp;nbsp; ↳ SynPS/2 Synaptics TouchPad&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=14&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; pointer&amp;nbsp; (2)]&lt;br /&gt;⎣ Virtual core keyboard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=3&amp;nbsp;&amp;nbsp;&amp;nbsp; [master keyboard (2)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ Virtual core XTEST keyboard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=5&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ Power Button&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=6&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ Video Bus&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=7&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ Power Button&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=8&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ Sleep Button&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=9&amp;nbsp;&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ WebCam SCB-1900N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=10&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ SINO WEALTH USB KEYBOARD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=11&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ SINO WEALTH USB KEYBOARD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=12&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ↳ AT Translated Set 2 keyboard&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id=13&amp;nbsp;&amp;nbsp; [slave&amp;nbsp; keyboard (3)]&lt;/blockquote&gt;
&lt;br /&gt;
Hermoso. Salvo que es bastante molesto, porque uno está acostumbrado a encontrar el acento o los corchetes en un lugar. Así que no sé qué voy a hacer.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/6984106494941234197/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2015/01/aventuras-con-mi-teclado-nuevo-ii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/6984106494941234197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/6984106494941234197'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2015/01/aventuras-con-mi-teclado-nuevo-ii.html' title='Aventuras con mi teclado nuevo II'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-3675267583971762387</id><published>2015-01-04T09:42:00.005-03:00</published><updated>2015-01-04T09:44:30.127-03:00</updated><title type='text'>Aventuras con mi teclado nuevo I</title><content type='html'>Me compré un teclado (simil) mecánico, con backlight (luz de fondo). Para prenderlo o apagarlo se aprieta &quot;Scroll lock&quot;.&lt;br /&gt;
&lt;br /&gt;
NOTA: Extrañamente esa tecla está escrita con &quot;Bloq Num&quot;, y hay otra tecla con
 lo mismo en el pad numérico. &quot;Block Num&quot; y &quot;Scroll Lock&quot; no es lo 
mismo.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Pero cuando uno lo enchufa a una computadora que tiene linux, ¡la luz no se prende! Investigué un poco pero no pude encontrar &lt;i&gt;porqué&lt;/i&gt;. Sólo encontré que hay una forma de prender los leds de un teclado con un comando: uno puede prender de a uno o todos a la vez:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# Prende el led 1. No se sabe qué led es. ¿Cambiará de teclado en teclado?&lt;br /&gt;
# En el mío no cambia nada, pero sería así:&lt;br /&gt;
xset led 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Para apagarlo.&lt;br /&gt;
xset -led 1&lt;br /&gt;
&lt;br /&gt;
# Para prender todo&lt;br /&gt;
xset led&lt;br /&gt;
&lt;br /&gt;
# Para apagar todo&lt;br /&gt;
xset -led&lt;/blockquote&gt;
&lt;br /&gt;
&amp;nbsp;Este teclado tiene solo un led, el de 3 (Scroll Lock). Como también se puede apagar y prender con el nombre de la tecla, hago eso.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
xset -led named &quot;Scroll Lock&quot;&lt;br /&gt;
xset led&amp;nbsp; named &quot;Scroll Lock&quot;&lt;/blockquote&gt;
&lt;br /&gt;
Sin embargo ahora tengo un comando, pero yo quiero poder apretar Scroll Lock y que se prenda y apague. En KDE se puede configurar que al apretar una tecla ejecute algo, asì que hice un script para que cambie el estado del led según esté.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
#/bin/bash&lt;br /&gt;
# Este script prende o apaga (debería llamarse &quot;lapegue&quot;) la luz del&lt;br /&gt;
# fondo del teclado &quot;Dragon gaming keyboard&quot; que me compré en enero/15.&lt;br /&gt;
# Es un teclado pseudo-mecánico.&lt;br /&gt;
&lt;br /&gt;
# Para debug (al principio costó que funcionara con la tecla Bloq Num)&lt;br /&gt;
# exec 1&amp;gt;&amp;gt; /tmp/qq&lt;br /&gt;
# exec 2&amp;gt;&amp;gt; /tmp/qq&lt;br /&gt;
# 0 si lo encontró, 1 si no lo encontró.&lt;br /&gt;
xset q | grep &quot;Scroll Lock: on&quot;&amp;nbsp; &lt;br /&gt;
OUT=$?&lt;br /&gt;
# echo $OUT&lt;br /&gt;
&lt;br /&gt;
if ( [ $OUT -eq 0 ] )&lt;br /&gt;
then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Está prendido.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; xset -led named &quot;Scroll Lock&quot;&lt;br /&gt;
else &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Apagado.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; xset led named &quot;Scroll Lock&quot;&lt;br /&gt;
fi&lt;/blockquote&gt;
&lt;br /&gt;
xset es el comando que da información sobre el estado de los leds:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp; xset q&lt;br /&gt;
Keyboard Control:&lt;br /&gt;
&amp;nbsp; auto repeat:&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp; key click percent:&amp;nbsp; 100&amp;nbsp;&amp;nbsp;&amp;nbsp; LED mask:&amp;nbsp; 0000003c&lt;br /&gt;
&amp;nbsp; XKB indicators:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 00: Caps Lock:&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 01: Num Lock:&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 02: Scroll Lock: on &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 03: Compose:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 04: Kana:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 05: Sleep:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 06: Suspend:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 07: Mute:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 08: Misc:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 09: Mail:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 10: Charging:&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 11: Shift Lock:&amp;nbsp; off&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 12: Group 2:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; off&amp;nbsp;&amp;nbsp;&amp;nbsp; 13: Mouse Keys:&amp;nbsp; off&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
[...]&lt;/blockquote&gt;
&lt;br /&gt;
Si dice &quot;Scroll Lock: on&quot; quiere decir que la luz está prendida.&lt;br /&gt;
&lt;br /&gt;
Finalmente, lo agregamos a la configuración de KDE. Primero ir a System Settings -&amp;gt; Shortcut and Gestures -&amp;gt; Custom Shorcuts. Luego crear una nueva entrada (yo le puse &quot;keyboard_backlight&quot;)&amp;nbsp; con Edit -&amp;gt; New -&amp;gt; Global -&amp;gt; Command/URL y poner ahí el nombre del script de más arriba.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/3675267583971762387/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2015/01/aventuras-con-mi-teclado-nuevo-i.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/3675267583971762387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/3675267583971762387'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2015/01/aventuras-con-mi-teclado-nuevo-i.html' title='Aventuras con mi teclado nuevo I'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-2893704968451560192</id><published>2014-08-10T11:05:00.000-03:00</published><updated>2014-08-10T11:08:09.610-03:00</updated><title type='text'>Tip: Cómo agregar texto a una imagen con ImageMagick</title><content type='html'>Hola!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Necesito agregar la fecha a una imagen. Algún día les contaré qué estoy haciendo :P&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGpWVHRUMfnJRREA6mzgfHca1IhwH6wB7T6yUcWQ-Qj0yo9LWfndES3mh13IBW6g_sSR1E7Zk7FFI9H-youD6OeMTSyBXAThmk7JisNFpKYW9OKg7hMqlsjVKeUNP5y6ir8itDsbFclb7g/s1600/Computer_color_spectrum.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGpWVHRUMfnJRREA6mzgfHca1IhwH6wB7T6yUcWQ-Qj0yo9LWfndES3mh13IBW6g_sSR1E7Zk7FFI9H-youD6OeMTSyBXAThmk7JisNFpKYW9OKg7hMqlsjVKeUNP5y6ir8itDsbFclb7g/s1600/Computer_color_spectrum.jpg&quot; height=&quot;220&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Tengo esta imagen, saca de &lt;a href=&quot;http://thehumbleyogini.blogspot.com.ar/2009/04/color-of-my-world.html&quot; target=&quot;_blank&quot;&gt;The Humble Yogini - Observations from the realm of Samsara&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y con este comando, ¡pasen y vean! , le agregamos tóscamente la fecha:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;/usr/bin/convert \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Computer_color_spectrum.jpg \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -pointsize 38 -font URW-Bookman-L-Light \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -annotate +80+100 &quot;$(date --rfc-3339=date)&quot;&amp;nbsp; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;  /tmp/colores.gif&lt;/blockquote&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Y quedó así:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Etud2zB89F2kJ9z8HyYQMIjtPVE7HIjmgHwHy1UHBsdp882EGGEQ6yB85ya4U6ptyvW-yRUBC0i7wuu7CHOkPSs-vmrNC4mT9Jr_7wi3uwT_uxxcKJBp9rl-AvTGAlwj9RyugmPVamv3/s1600/colores.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Etud2zB89F2kJ9z8HyYQMIjtPVE7HIjmgHwHy1UHBsdp882EGGEQ6yB85ya4U6ptyvW-yRUBC0i7wuu7CHOkPSs-vmrNC4mT9Jr_7wi3uwT_uxxcKJBp9rl-AvTGAlwj9RyugmPVamv3/s1600/colores.gif&quot; height=&quot;220&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tada!&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
&amp;nbsp;-- Diego. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/2893704968451560192/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/08/tip-como-agregar-texto-una-imagen-con.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/2893704968451560192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/2893704968451560192'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/08/tip-como-agregar-texto-una-imagen-con.html' title='Tip: Cómo agregar texto a una imagen con ImageMagick'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGpWVHRUMfnJRREA6mzgfHca1IhwH6wB7T6yUcWQ-Qj0yo9LWfndES3mh13IBW6g_sSR1E7Zk7FFI9H-youD6OeMTSyBXAThmk7JisNFpKYW9OKg7hMqlsjVKeUNP5y6ir8itDsbFclb7g/s72-c/Computer_color_spectrum.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-5704137508195926573</id><published>2014-08-09T22:10:00.002-03:00</published><updated>2014-08-10T08:47:57.961-03:00</updated><title type='text'>Cómo sacar algunos sigils ($@%&amp;), parte 4</title><content type='html'>Esto es... no sé qué es. Es una chanchada. Es otro forma de sacar sigils. No creo que deba usarse, pero acá está:&lt;br /&gt;
&lt;br /&gt;
Cuando uno usa objetos en perl (sean hechos con Moo(se) o de cualquier otra forma) (pero hay que usar Moo(se) :) ), hace algo así:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
use MiClase;&lt;br /&gt;
my $objeto = MiClase-&amp;gt;new();&lt;/blockquote&gt;
&lt;br /&gt;
Y después usamos los atributos y métodos de $objeto. Supongamos que sirve para guardar frases célebres:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
use Quote;&lt;br /&gt;
my $q = Quote-&amp;gt;new();&lt;br /&gt;
$q-&amp;gt;set_phrase(&quot;&lt;span class=&quot;_5yl5&quot; data-reactid=&quot;.3s.$mid=11407627228140=2ed73f72b3ef0b40546.2:0.0.0.0.0&quot;&gt;&lt;span class=&quot;null&quot;&gt;Un problema imaginario es la raíz de &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; todo pensamiento negativo&quot;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
print &quot;La frase es: &quot; . $q-&amp;gt;get_phrase . &quot;\n&quot;;&lt;/blockquote&gt;
&lt;br /&gt;
Con esto podemos tener (instanciar) un montón de objetos &quot;Quote&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
my $q = Quote-&amp;gt;new();&lt;br /&gt;
my $otra_q = Quote-&amp;gt;new()&lt;br /&gt;
my $otro = Quote-&amp;gt;new()&lt;/blockquote&gt;
Pero también podríamos evitar los sigils, no instanciando (creando) un objeto, sino usando la clase. Esto es horrible, y no debe hacerse, pero WTH, lo hago igual :)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;use Quote;&lt;br /&gt;
Quote-&amp;gt;set_phrase(&quot;&lt;span class=&quot;_5yl5&quot; data-reactid=&quot;.3s.$mid=11407627228140=2ed73f72b3ef0b40546.2:0.0.0.0.0&quot;&gt;&lt;span class=&quot;null&quot;&gt;Un problema imaginario es la raíz de &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; todo pensamiento negativo&lt;/span&gt;&lt;/span&gt;&quot;);&lt;br /&gt;
print Quote-&amp;gt;get_phrase() . &quot;\n&quot;;&lt;/blockquote&gt;
&amp;nbsp;Este es el código de Quote.pm&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
package Quote;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
our $self;&lt;br /&gt;
&lt;br /&gt;
# Cuando se llama a la clase directamente, el primer argumento &lt;br /&gt;
# es justamente el nombre de la clase. No nos interesa.&lt;br /&gt;
sub set_phrase {&lt;br /&gt;
&amp;nbsp; my $class = shift;&lt;br /&gt;
&amp;nbsp; my $phrase = shift;&lt;br /&gt;
&amp;nbsp; $self-&amp;gt;{phrase} = $phrase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub get_phrase {&lt;br /&gt;
&amp;nbsp; my $class = shift;&lt;br /&gt;
&amp;nbsp; return $self-&amp;gt;{phrase};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja4kmxUq3iTevnr6lBb1M5Or54OexqnlUHKxHhI2zWnZZLs8RtfxUPD9f6MUdI95D_ebDHiH4sERd-wk8w48qaQMlLGBwgdZtw2g3vfJmBVsV2LWSzgbIWxCdvkhbMr3NtOF5J2Ut6vjiV/s1600/P8120699.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja4kmxUq3iTevnr6lBb1M5Or54OexqnlUHKxHhI2zWnZZLs8RtfxUPD9f6MUdI95D_ebDHiH4sERd-wk8w48qaQMlLGBwgdZtw2g3vfJmBVsV2LWSzgbIWxCdvkhbMr3NtOF5J2Ut6vjiV/s1600/P8120699.JPG&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;1;&lt;/blockquote&gt;
Sinceramente, no sé cuán horrible es esto. Qué efectos secundarios tendrá. Le encontré por lo menos una, que es que la clase/objeto es global. Osea, si le ponés un valor a la frase, lo va a tener dentro de toda sub. Supongo que hay alguna forma de cambiarlo. Les dejo un gato:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/5704137508195926573/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/08/como-sacar-algunos-sigils-parte-4.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5704137508195926573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5704137508195926573'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/08/como-sacar-algunos-sigils-parte-4.html' title='Cómo sacar algunos sigils ($@%&amp;), parte 4'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja4kmxUq3iTevnr6lBb1M5Or54OexqnlUHKxHhI2zWnZZLs8RtfxUPD9f6MUdI95D_ebDHiH4sERd-wk8w48qaQMlLGBwgdZtw2g3vfJmBVsV2LWSzgbIWxCdvkhbMr3NtOF5J2Ut6vjiV/s72-c/P8120699.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8728674669210488575</id><published>2014-08-03T20:09:00.000-03:00</published><updated>2014-08-03T20:15:59.091-03:00</updated><title type='text'>Pequeño ejemplo de crear archivos ical con Perl</title><content type='html'>¡Hola de nuevo!&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Estuve trabajando en un programa que en una parte guarda eventos en un archivo ical. Me costó un poco encontrar un buen módulo. El mejor y más sencillo es Tie::iCal, aunque verán que tiene un bug al final.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;sub guardar_evento {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # segundos: tiempo que falta para el final del evento&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # contenido: la descripción del evento (ej &quot;Reunión con Pepe&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($segundos, $contenido) = @_;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my %my_events;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $calfile = &quot;/.mycalendar.ics&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tie %my_events, &#39;Tie::iCal&#39;, $calfile or die &quot;Failed to tie file!\n&quot;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Summary no puede tener enter, así que lo cambio por \n&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $contenido =~ s/\n/\\n/gs;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Cada evento es una entrada, y c/u tiene un UID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $uid = time();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $my_events{$uid} = [&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;VEVENT&#39;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;SUMMARY&#39; =&amp;gt; $contenido,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;DTSTART&#39; =&amp;gt; secs_to_ical_date(0),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;DTEND&#39;&amp;nbsp;&amp;nbsp; =&amp;gt; secs_to_ical_date($segundos),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; untie %my_events;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;# Esta func agrega $secs segundos a la fecha/hora actual&lt;br /&gt;# y lo devuevle en el formato para iCal&lt;br /&gt;sub secs_to_ical_date {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($secs) = @_;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Usamos Time::Piece, que viene con Perl y nos lo hace más facil&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $now = mk_time_piece_now();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $now += $secs;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $date = $now-&amp;gt;strftime( &quot;%Y%m%d&quot; )&amp;nbsp; . &quot;T&quot; . &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $now-&amp;gt;strftime( &quot;%H%M00&quot; ) . &quot;Z&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $date;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub mk_time_piece_now {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Esto pasa porque el objeto Time::Piece que resulta de&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # localtime tiene mal el timezone. Así que lo hago string,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # y lo vuelvo a hacer objeto. Grrrr.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $now&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = localtime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $now_string = $now-&amp;gt;strftime(&quot;%d-%m-%Y %H:%M&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $now&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = Time::Piece-&amp;gt;strptime($now_string,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;%d-%m-%Y %H:%M&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $now;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pero resulta que el archivo iCal queda mal hecho, así que este pedazo de código lo arregla. Reporté el bug &lt;a href=&quot;https://rt.cpan.org/Public/Bug/Display.html?id=97459&quot; target=&quot;_blank&quot;&gt;acá&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;open( my $ical, &quot;&amp;lt;&quot;, &quot;.mycalendar.ics&quot;) or die $!;&lt;br /&gt;&lt;br /&gt;my $head = &quot;&quot;;&lt;br /&gt;foreach my $n (1, 2, 3) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $temp = &amp;lt;$ical&amp;gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $head = $head . $temp;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;my $body = &quot;&quot;;&lt;br /&gt;while ( &amp;lt;$ical&amp;gt; ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if ( /BEGIN:VCALENDAR/ );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if ( /VERSION:/ );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if ( /PRODID:/ );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; next if ( /END:VCALENDAR/ );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $body = $body . $_;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;my $foot = &quot;END:VCALENDAR\n&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;# Y escribirlo a un archivo.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;use File::Slurp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;write_file( &quot;.mycalendar_fixed.ics&quot;, $head . $body . $foot );&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-O-zRuJhKKZIf7s6ruwDaBoeGjmM8TF8SpCQIBj7b8wxDqdiXJ7S-d9Jla9ST6YphTlnTlfMDraohRFcCvq2Jlws0ZSPV699UZJx0UvITtIdgnfqHNkMNf34mHnj-tyVvDx-3q6UzGjTK/s1600/conejo.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-O-zRuJhKKZIf7s6ruwDaBoeGjmM8TF8SpCQIBj7b8wxDqdiXJ7S-d9Jla9ST6YphTlnTlfMDraohRFcCvq2Jlws0ZSPV699UZJx0UvITtIdgnfqHNkMNf34mHnj-tyVvDx-3q6UzGjTK/s1600/conejo.jpg&quot; /&gt;&lt;/a&gt;Dos bugs. No está nada bien :(&lt;br /&gt;
&lt;br /&gt;
Les dejo un conejo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
-- Diego&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8728674669210488575/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/08/pequeno-ejemplo-de-crear-archivos-ical.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8728674669210488575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8728674669210488575'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/08/pequeno-ejemplo-de-crear-archivos-ical.html' title='Pequeño ejemplo de crear archivos ical con Perl'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-O-zRuJhKKZIf7s6ruwDaBoeGjmM8TF8SpCQIBj7b8wxDqdiXJ7S-d9Jla9ST6YphTlnTlfMDraohRFcCvq2Jlws0ZSPV699UZJx0UvITtIdgnfqHNkMNf34mHnj-tyVvDx-3q6UzGjTK/s72-c/conejo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8877809761936632043</id><published>2014-08-03T19:44:00.002-03:00</published><updated>2014-08-03T19:45:32.323-03:00</updated><title type='text'>Slides sobre Moose, la implementación moderna de  OO de perl</title><content type='html'>estoy con fiaca de escribir :P&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;userContent&quot;&gt;&lt;a href=&quot;http://www.houseabsolute.com/presentations/intro-moose-class/&quot; target=&quot;_blank&quot;&gt;Diapositivas, o tutorial&lt;/a&gt; con pocas letras  sobre el sistema de OO de perl (el nuevo), con todos los roles, mixins y magia que hay en el mundo de la programación OO.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les dejo un camello:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNum4Wi-NT8oZWjbQ0R7Fnk1poQZ6awg9d8Jcp6I78Igt15hlP5mgdi-3BY4BR5ghA6ayY8YFhyphenhyphenY6rP3ALhvr_m6w7lAo7sw-lj8k_TUbrdy9qJxWtOJM6USY_AoJmv1JKdSJaUSKaXqs/s1600/Camello1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNum4Wi-NT8oZWjbQ0R7Fnk1poQZ6awg9d8Jcp6I78Igt15hlP5mgdi-3BY4BR5ghA6ayY8YFhyphenhyphenY6rP3ALhvr_m6w7lAo7sw-lj8k_TUbrdy9qJxWtOJM6USY_AoJmv1JKdSJaUSKaXqs/s1600/Camello1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Algo más quería postear, pero no me acuerdo...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8877809761936632043/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/08/slides-sobre-moose-la-implementacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8877809761936632043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8877809761936632043'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/08/slides-sobre-moose-la-implementacion.html' title='Slides sobre Moose, la implementación moderna de  OO de perl'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNum4Wi-NT8oZWjbQ0R7Fnk1poQZ6awg9d8Jcp6I78Igt15hlP5mgdi-3BY4BR5ghA6ayY8YFhyphenhyphenY6rP3ALhvr_m6w7lAo7sw-lj8k_TUbrdy9qJxWtOJM6USY_AoJmv1JKdSJaUSKaXqs/s72-c/Camello1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8656565485172357169</id><published>2014-07-11T15:54:00.002-03:00</published><updated>2014-07-11T15:54:52.477-03:00</updated><title type='text'>Como pasar un color a transparente en una imagen</title><content type='html'>Acabo de sorpenderme de los sencillo que es esto. Había abierto el gimp, pero ImageMagick la rompe.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
convert image.png -transparent &amp;lt;color&amp;gt; nueva_img.png&lt;/blockquote&gt;
donde &amp;lt;color&amp;gt; es un color, justamente. Yo lo probré con white, y funcionó. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8656565485172357169/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/07/como-pasar-un-color-transparente-en-una.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8656565485172357169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8656565485172357169'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/07/como-pasar-un-color-transparente-en-una.html' title='Como pasar un color a transparente en una imagen'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8526536135300934002</id><published>2014-06-14T14:22:00.005-03:00</published><updated>2014-06-16T22:28:17.653-03:00</updated><title type='text'>Cómo ver algunos partidos sin flash</title><content type='html'>Nota posteriror: Estoy funciona, salvo que por lo menos en mi caso, la conexión a el sitio web que da el streaming de video se vuelve *muy* lenta cuando hay un partido, así que no lo puedo ver. Sin embargo, queda acá por si alguien quiere mirar otros programas, o tiene una mejor conexión .&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hola,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ayer estuve viendo cómo ver los partidos del mundial por canal 7 (y mirá que no dije ATC) sin usar el navegador. En linux, el plugin de flash funciona lento, así que quería verlo con un programa específico para mirar videos, como mplayer o vlc.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Resulta que para usan un protocolo llamado &quot;HDS&quot;. Les contaría de qué se trata, pero no tengo ganas. En definitiva, hay que usar el script AdobeHDS.php que se puede bajar &lt;a href=&quot;https://raw.githubusercontent.com/K-S-V/Scripts/master/AdobeHDS.php&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;acá&lt;/a&gt;. El script necesita la URL del archivo &quot;manifest&quot;, que es el que describe de dónde bajar el &lt;i&gt;stream&lt;/i&gt; de video, y el contenido del encabezado &quot;Referrer&quot; del pedido HTTP. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Para encontrar la URL y el valor del encabezado, yo usé firefox, así:&amp;nbsp; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Abrir &lt;a href=&quot;http://www.tvpublica.com.ar/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;el sitio web&lt;/a&gt; donde está la señal del canal para ver.&lt;/li&gt;
&lt;li&gt;Abrir la pantalla de información sobre el tráfico de red, yendo a Tools -&amp;gt; Web Developer -&amp;gt; Network, o apretando Ctrl + Shift + Q.&lt;/li&gt;
&lt;li&gt;En el navegador, poner a ejecutar el &lt;i&gt;stream&lt;/i&gt; de video. &lt;/li&gt;
&lt;li&gt;Hacer click con el botón derecho sobre la línea del archivo &quot;manifest&quot;. Elegir &quot;Copy URL&quot;. En la imagen, la línea correspondiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1oXyo0BE-1EUpixn1BLAwbNQO02L_Wg-MBGssDf3IX6AipVh10l5nmGD7P_devkLDMW8zUB0xQyQ4PrSUy-8E5T1TZ1ORC61Fx2nbgC4OLUxxVqREgoYOnW7QlBC4_OkbfwhQPVkJOvHN/s1600/net.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1oXyo0BE-1EUpixn1BLAwbNQO02L_Wg-MBGssDf3IX6AipVh10l5nmGD7P_devkLDMW8zUB0xQyQ4PrSUy-8E5T1TZ1ORC61Fx2nbgC4OLUxxVqREgoYOnW7QlBC4_OkbfwhQPVkJOvHN/s1600/net.png&quot; height=&quot;241&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Hacer click con el mouse sobre esa misma línea. Aparecerá un panel a la derecha:&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhofHjZBF6a9G3qhNIZmO2WKjCptJCrCNRIO9qh4E5dVkABD5q_R1htpCqDxRPYpWtj1oGnbCVt9WRlppUhsvQIwgHLLn6HLQWjWyqKtnwiTpbQwS9YiQz8NddjNhyjFBP8S2whkYl7fDuF/s1600/net.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhofHjZBF6a9G3qhNIZmO2WKjCptJCrCNRIO9qh4E5dVkABD5q_R1htpCqDxRPYpWtj1oGnbCVt9WRlppUhsvQIwgHLLn6HLQWjWyqKtnwiTpbQwS9YiQz8NddjNhyjFBP8S2whkYl7fDuF/s1600/net.png&quot; height=&quot;244&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Buscar en ese panel, bajo el título &quot;Request headers&quot;, la línea que dice &quot;Referrer&quot;, y copiar la URL que le corresponde.&lt;/li&gt;
&lt;li&gt;Ejecutar AdobeHDS:php con los dos parámetros tal que guarde el video en un archivo:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;php AdobeHDS.php --manifest URL_del_manifest --referrer URL_de_Referrer --outfile partido.flv&amp;nbsp;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;En otra terminal, ejecutar mplayer o el visor de videos que uno quiera. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Eso es todo. Tiene, sin embargo, algunas contras.&lt;br /&gt;
&lt;br /&gt;
Primero, hay que elegir a mano la calidad. Si se elige una más alta de la se puede, el video se va a cortar, porque mplayer va a llegar al fin del archivo. Osea, mplayer le va a &quot;ganar&quot; a AdobeHDS.php. Con volver a ejecutar todo es suficiente, pero bien puede pasar. &lt;br /&gt;
&lt;br /&gt;
El protocolo HDS está pensado para enviar video en tiempo real, evitando el &lt;i&gt;buffering&lt;/i&gt;. Esta solución lo usa (el &lt;i&gt;cache&lt;/i&gt; de mplayer), así que el video tiene una demora de unos segundos. Osea, que puede pasar que el vecino grite &quot;¡Gol!&quot; y el video empiece a mostrar la jugada. A mi me parece muy conveniente, así puedo distraerme de partidos aburridos y alguien me avisa cuando está por pasar algo interesante. Pero seguramente sea una contra para mucha gente.&lt;br /&gt;
&lt;br /&gt;
Saludos&lt;br /&gt;
&amp;nbsp;-- Diego.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;!-- Blogger automated replacement: &quot;https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F3.bp.blogspot.com%2F-Zx5RAQuAMKc%2FU5x7rClmSYI%2FAAAAAAAAATc%2FCRC0QdqrSgU%2Fs1600%2Fnet.png&amp;amp;container=blogger&amp;amp;gadget=a&amp;amp;rewriteMime=image%2F*&quot; with &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1oXyo0BE-1EUpixn1BLAwbNQO02L_Wg-MBGssDf3IX6AipVh10l5nmGD7P_devkLDMW8zUB0xQyQ4PrSUy-8E5T1TZ1ORC61Fx2nbgC4OLUxxVqREgoYOnW7QlBC4_OkbfwhQPVkJOvHN/s1600/net.png&quot; --&gt;&lt;!-- Blogger automated replacement: &quot;https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F4.bp.blogspot.com%2F-T7B5TFj_VSo%2FU5x_qJChtHI%2FAAAAAAAAATo%2Fo-Rh47zOihw%2Fs1600%2Fnet.png&amp;amp;container=blogger&amp;amp;gadget=a&amp;amp;rewriteMime=image%2F*&quot; with &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhofHjZBF6a9G3qhNIZmO2WKjCptJCrCNRIO9qh4E5dVkABD5q_R1htpCqDxRPYpWtj1oGnbCVt9WRlppUhsvQIwgHLLn6HLQWjWyqKtnwiTpbQwS9YiQz8NddjNhyjFBP8S2whkYl7fDuF/s1600/net.png&quot; --&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8526536135300934002/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/06/como-ver-algunos-partidos-sin-flash.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8526536135300934002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8526536135300934002'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/06/como-ver-algunos-partidos-sin-flash.html' title='Cómo ver algunos partidos sin flash'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1oXyo0BE-1EUpixn1BLAwbNQO02L_Wg-MBGssDf3IX6AipVh10l5nmGD7P_devkLDMW8zUB0xQyQ4PrSUy-8E5T1TZ1ORC61Fx2nbgC4OLUxxVqREgoYOnW7QlBC4_OkbfwhQPVkJOvHN/s72-c/net.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-4771904558420549512</id><published>2014-05-26T00:04:00.003-03:00</published><updated>2014-05-26T00:21:44.261-03:00</updated><title type='text'>Cómo sacar algunos sigils ($@%&amp;), parte 3</title><content type='html'>Algunas ideas que se me ocurrieron a partir de las dos entradas anteriores:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Podemos hacer que al declarar las variables en BEGIN, ya que estamos, le agreguemos un default.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
BEGIN {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;espia&quot; =&amp;gt; &quot;James Bond&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;jefe&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; &quot;M5&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;familia_que_ignora_la_verdad&quot;&amp;nbsp; =&amp;gt; &quot;No tiene&quot;;&lt;br /&gt;
}&lt;/blockquote&gt;
Solo hay que cambiar un poco el corazón de todo esto:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
# Esta es la subrutina que genera las demas.&lt;br /&gt;
sub var ($;$) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; say &quot;Creando $_[0]... Hecho!&quot; if $debug;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $p = &quot;main&quot;; # El namespace esta fijo en &quot;main&quot;. TODO.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Si la sub que queremos que exista se llamara &quot;espia&quot; esto de abajo &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # sería: *main::espia = sub ... &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # El segundo argumento, si hay, es el default de la &quot;variable&quot; / sub.&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no strict &#39;refs&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *{&quot;${p}::${_[0]}&quot;} = sub (;$) :lvalue {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; state $internal = &quot;**internal**&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $_[0] ) { $internal = $_[0]; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $internal;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;amp;{&quot;${p}::${_[0]}&quot;} = &quot;$_[1]&quot; if $_[1];&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use strict;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;También podríamos poner otras opciones en las definiciones:&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
BEGIN {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;nombre&quot; =&amp;gt; &quot;NN&quot;, validate =&amp;gt; { $_[0] !~ /admin|root/i };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;jefe&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; &quot;M5&quot;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validate =&amp;gt; { $_[0] != nombre };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;edad&quot; =&amp;gt; 1, max =&amp;gt; 18;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;También podríamos poner otros nombres en vez de var, con otros restrains: &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
BEGIN {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;nombre&quot; =&amp;gt; &quot;NN&quot;, validate =&amp;gt; { $_[0] !~ /admin|root/i };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool &quot;es_jefe&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; &quot;true&quot;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validate =&amp;gt; { ... };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int &quot;edad&quot; =&amp;gt; 1, max =&amp;gt; 18;&lt;br /&gt;
}&lt;/blockquote&gt;
&amp;nbsp;Ya estoy delirando, porque para eso debe haber varios módulos hechos por gente que sabe más que yo :) Pero este, &quot;casero&quot;, tiene muy pocas líneas de código.&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
&amp;nbsp;-- Diego.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/4771904558420549512/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/05/como-sacar-algunos-sigils-parte-3.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4771904558420549512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4771904558420549512'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/05/como-sacar-algunos-sigils-parte-3.html' title='Cómo sacar algunos sigils ($@%&amp;), parte 3'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-3469438454730711834</id><published>2014-05-25T21:29:00.000-03:00</published><updated>2014-05-26T00:19:58.202-03:00</updated><title type='text'>Cómo sacar algunos sigils ($@%&amp;), parte 2</title><content type='html'>Buenas! &lt;a href=&quot;http://properl.blogspot.com.ar/2014/05/autoload-y-como-sacar-algunos-sigils.html&quot;&gt;En la entrada anterior &lt;/a&gt;habíamos llegado a poder escribir una variable sin sigil, así:&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;boo = &quot;Cuidado!!&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;print boo . &quot;, te vas&amp;nbsp; a caer de las escaleras!\n&quot;;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
(estas &quot;variables&quot; en realidad son subrutinas, pero nadie tiene porqué saberlo :D Vamos a llamarlas variables igual, o a lo sumo &quot;nuestras variables especiales&quot;, porque les tenemos mucho cariño).&lt;br /&gt;
&lt;br /&gt;
Hay que declarar cada una de las variables como una subrutina. Un montón de copiar y pegar de código, repetido y dificil de mantener. Y ¡ay! si tenés que hacer algún cambio.&lt;br /&gt;
&lt;br /&gt;
¿Se puede hacer más dinámico? No perfectamente como yo hubiera querido, pero zafa bastante bien.&lt;br /&gt;
&lt;br /&gt;
Necesitamos primero definir cada variable con &quot;var&quot;. Var no es más que una subrutina, que va a generar nuestra &quot;variable especial&quot;.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;var &quot;espia&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;var &quot;amante_de_espia&quot;; &lt;/span&gt;&lt;/blockquote&gt;
y luego podemos usarlas:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
espia = &quot;James Bond&quot;;&lt;br /&gt;
amante_de_espia = &quot;Mariam D&#39;Abo&quot;; &lt;br /&gt;
say &quot;Mi nombre es &quot; . espia &quot;, y me acuesto con &quot; . amante_de_espia;&lt;/blockquote&gt;
Ningún sigil. ¡Genial!&amp;nbsp; ¿Cómo se hace? Es medio complicado, pero acá va:&lt;br /&gt;
&lt;br /&gt;
&quot;espia&quot; y &quot;amante_de_espia&quot; son en realidad funciones (lo vimos en la primera parte), asi que &quot;var&quot; tiene que crearlas al vuelo. Para eso tiene que ponerlas en el &lt;b&gt;mismo&lt;/b&gt; namespace, osea, al mismo nivel que el programa principal.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
sub var ($) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $p = &quot;main&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no strict &#39;refs&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *{&quot;${p}::${_[0]}&quot;} = sub (;$) :lvalue {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; state $internal = &quot;**internal**&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $_[0] ) { $internal = $_[0]; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $internal;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use strict;&lt;br /&gt;
}&lt;/blockquote&gt;
La parte horrible de esto, como se ve, es la cuarta linea.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
*{&quot;${p}::${_[0]}&quot;}&lt;/blockquote&gt;
$p es &quot;main&quot; (linea 2) y ${_[0]} es $_[0] escrito minuciosamente. Sí escribimos: var &quot;espia&quot;, $_[0] es &quot;espia&quot;. Osea, que queda:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
*main::espia&lt;/blockquote&gt;
Que quiere decir que vamos a manejar el nombre &quot;espia&quot;, en el namespace &quot;main&quot;, exactamente donde nuestro programa lo va a ir a buscar.. Vamos bien.&lt;br /&gt;
&lt;br /&gt;
La línea completa es así:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
*main::espia = sub (;$) :lvalue {&lt;/blockquote&gt;
Que dice que nuestro nombre &quot;espía&quot; va a ser una función, igual que la que que vimos en la entrada anterior. Ese es todo el truco para insertarla en el espacio de nombres correcto.&lt;br /&gt;
&lt;br /&gt;
Lo último que hace falta, que arruina un poco las cosas, es que el compilador, cuando revisa todo el script, encuentra que &#39;espia = &quot;James Bond&quot;&#39; no es nada: no es una variable porque no tiene sigil, y no es una función, porque todavía no se ejecutó lo de arriba que hace que exista. Lo mejor que puede encontrar es que pongamos la definición en un bloque BEGIN:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;BEGIN { var &quot;espia&quot;; }&lt;/blockquote&gt;
De esa manera, perl lo ejecuta primero, creando nuestras variables especiales para cuando las vaya a ejecutar. Y ¡ojo! También puede ser un buen lugar para declarar varias variables así:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
BEGIN {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;espia&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;jefe&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &quot;familia_que_ignora_la_verdad&quot;;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
Creo que voy a hacer una tercera parte. Quedaron ideas :)&lt;br /&gt;
&lt;br /&gt;
Saludos!&lt;br /&gt;
&amp;nbsp;-- Diego.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/3469438454730711834/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/05/autoload-y-como-sacar-algunos-sigils_25.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/3469438454730711834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/3469438454730711834'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/05/autoload-y-como-sacar-algunos-sigils_25.html' title='Cómo sacar algunos sigils ($@%&amp;), parte 2'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-7584344167419432506</id><published>2014-05-25T11:58:00.000-03:00</published><updated>2014-05-29T22:00:03.404-03:00</updated><title type='text'>Cómo sacar algunos sigils ($@%&amp;), parte 1</title><content type='html'>Estuve jugando a sacarle los sigils (los símbolos que indican si las variables son strings, listas o hashes (&lt;i&gt;diccionarios&lt;/i&gt; en python))&lt;br /&gt;
&lt;br /&gt;
Lo primero que podemos hacer es definir de antemano una función con un prototipo &quot;;$&quot;, que quiere decir que la función recibe como argumento un escalar, opcionalmente. Osea, que se puede ejecutar &quot;boo&quot; o &quot;boo($persona)&quot;.&lt;br /&gt;
&lt;blockquote&gt;
#!/usr/bin/perl &lt;br /&gt;
use strict;&lt;br /&gt;
use warnings; &lt;br /&gt;
&lt;br /&gt;
sub boo(;$) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;Boo!&quot;;&lt;br /&gt;
}&lt;/blockquote&gt;
Luego, para ejecutarlo, solo tenemos que llamar a la función, sin siquiera paréntesis:&lt;br /&gt;
&lt;blockquote&gt;
#!/usr/bin/perl &lt;br /&gt;
use strict;&lt;br /&gt;
use warnings; &lt;br /&gt;
&lt;br /&gt;
sub boo(;$) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;Boo!&quot;;&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;b&gt;boo; &lt;/b&gt;&lt;/blockquote&gt;
Y eso nos imprime por pantalla &quot;Boo!&quot;, como se espera.&amp;nbsp; Hagamos una mejora: si uno le da un argumento a &quot;boo&quot;, entonces que lo guarde; si no, que lo devuelva.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use 5.010;&lt;br /&gt;
&lt;br /&gt;
sub boo(;$) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; state $susto = &quot;Default Boo&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $_[0] ) { $susto = $_[0]; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $susto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say &quot;En la oscuridad, llego a la esquina y... &quot; . &lt;b&gt;boo&lt;/b&gt; . &quot;!&quot;;&lt;br /&gt;
&lt;b&gt;boo &quot;Cuidado&quot;;&lt;/b&gt;&lt;br /&gt;
say &quot;En la oscuridad, llego a la esquina y... &quot; . &lt;b&gt;boo&lt;/b&gt; . &quot;!&quot;;&lt;/blockquote&gt;
Ahora tiene un poco más de pinta de variable sin sigil. Pero ¡pidamos más! ¿Podremos asignar un valor a &quot;boo&quot; con un igual, como en (casi) cualquier lenguaje de programación? Por supuesto! Si le ponemos el atributo &quot;lvalue&quot; a boo.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use 5.010;&lt;br /&gt;
&lt;br /&gt;
sub boo(;$)&lt;span style=&quot;color: blue;&quot;&gt; :&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;lvalue&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; state $susto = &quot;Default Boo&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $_[0] ) { $susto = $_[0]; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $susto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say &quot;En la oscuridad, llego a la esquina y... &quot; . boo . &quot;!&quot;;&lt;br /&gt;
boo &quot;Cuidado&quot;;&lt;br /&gt;
say &quot;En la oscuridad, llego a la esquina y... &quot; . boo . &quot;!&quot;;&lt;br /&gt;
&lt;b&gt;boo = &quot;AAAAAAAAAAH!&quot;;&lt;/b&gt;&lt;br /&gt;
say &quot;En la oscuridad, llego a la esquina y... &quot; . &lt;b&gt;boo&lt;/b&gt; . &quot;!&quot;;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Sigo con un intento, por ahora fallido, de hacer esto aún más general, &lt;a href=&quot;http://properl.blogspot.com.ar/2014/05/autoload-y-como-sacar-algunos-sigils_25.html&quot;&gt;en la segunda parte&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;-- Diego.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/7584344167419432506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2014/05/autoload-y-como-sacar-algunos-sigils.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7584344167419432506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7584344167419432506'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2014/05/autoload-y-como-sacar-algunos-sigils.html' title='Cómo sacar algunos sigils ($@%&amp;), parte 1'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-5928915732775210069</id><published>2013-03-17T19:42:00.000-03:00</published><updated>2014-05-25T10:47:35.598-03:00</updated><title type='text'>Text::Fuzzy</title><content type='html'>&lt;a href=&quot;http://oylenshpeegul.typepad.com/blog/2013/03/perl-developer-modules-on-cpan.html&quot;&gt;Acá&lt;/a&gt; hay un mini ejemplo de cómo usar Text::Fuzzy:

&lt;br /&gt;
&lt;blockquote&gt;
#!/usr/bin/env perl&lt;br /&gt;use v5.16; &lt;br /&gt;use warnings; &lt;br /&gt;use Text::Fuzzy; &lt;br /&gt;&lt;br /&gt;my $tf = Text::Fuzzy-&amp;gt;new(&quot;latitude&quot;); &lt;br /&gt;say &quot;Levenshtein edit distance is &quot;, $tf-&amp;gt;distance(&quot;altitude&quot;); &lt;br /&gt;$tf-&amp;gt;transpositions_ok(1); &lt;br /&gt;say &quot;Damerau-Levenshtein edit distance is &quot;, $tf-&amp;gt;distance(&quot;altitude&quot;);&lt;/blockquote&gt;
</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/5928915732775210069/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2013/03/textfuzzy.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5928915732775210069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5928915732775210069'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2013/03/textfuzzy.html' title='Text::Fuzzy'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-5739120890007582325</id><published>2012-10-09T19:02:00.002-03:00</published><updated>2012-10-09T19:03:01.242-03:00</updated><title type='text'>Tutorial de PDL::Graphics::Gnuplot</title><content type='html'>Me encontré con un video de youtube donde explican cómo usar PDL::Graphics::Gnuplot. Interesante!! 15 minutos.

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/hUXDQL3rZ_0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/5739120890007582325/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/10/me-encontre-con-un-video-de-youtube.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5739120890007582325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/5739120890007582325'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/10/me-encontre-con-un-video-de-youtube.html' title='Tutorial de PDL::Graphics::Gnuplot'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/hUXDQL3rZ_0/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-4913317849114335640</id><published>2012-09-23T18:24:00.002-03:00</published><updated>2012-09-23T18:24:14.030-03:00</updated><title type='text'>Creciendo con Mojolicious</title><content type='html'>Una vez que nuestro proyecto con Mojolicious va creciendo, esto de tenerlo en un solo archivo se vuelve incómodo. Para separar los templates del código, ejecutamos:

&lt;blockquote&gt;./myapp inflate&lt;/blockquote&gt;

Esto creará un directorio &quot;templates&quot; y pondrá los templates en el lugar indicado. A partir de ahí se pueden seguir agregando templates y haciéndo referencia a ellos como siempre:

&lt;blockquote&gt;$self-&gt;render(&#39;login&#39;);&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/4913317849114335640/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/09/creciendo-con-mojolicious.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4913317849114335640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4913317849114335640'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/09/creciendo-con-mojolicious.html' title='Creciendo con Mojolicious'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8205855608450605232</id><published>2012-08-10T18:26:00.001-03:00</published><updated>2012-08-10T18:57:37.048-03:00</updated><title type='text'>Como instalar perl+mojolicious sin root</title><content type='html'>Quiero empezar un proyecto nuevo, y quiero que el proyecto viva completamente en un directorio. Asi, cuando quiera ponerlo en producción, puedo copiar todo el directorio y listo. Vamos a ver si podemos hacer eso ( o terminaré con algo tipo PAR o FatApp ) pero el primer paso es instalar un nuevo perl y un nuevo Mojolicious en mi $HOME.

NOTA: Todos estos pasos se van a hacer como usuario, NO como root.

Primero instalaremos perlbrew:
&lt;blockquote&gt;curl -kL http://install.perlbrew.pl | bash&lt;/blockquote&gt;

Luego editarmos el archivo .bashrc y agregamos lo siguiente:

&lt;blockquote&gt;source ~/perl5/perlbrew/etc/bashrc&lt;/blockquote&gt;

Salimos de la sesión y volvemos a entrar, o ejecutamos &quot;bash&quot; para que se apliquen los cambios.

Instamos la última versión de perl
&lt;blockquote&gt;perlbrew install perl-5.16.0&lt;/blockquote&gt;

La ponemos como default
&lt;blockquote&gt;perlbrew switch perl-5.16.0&lt;/blockquote&gt;

Opcionalmente podemos instalar cpanm, que es una versión menos verborrágica de cpan. Si no lo instalamos, cambiar cpanm por cpan en todo este tutorial

&lt;blockquote&gt;cpan App::cpanminus&lt;/blockquote&gt;

Y ahora, instalar Mojolicious
&lt;blockquote&gt;cpanm Mojolicious&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8205855608450605232/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/08/como-instalar-perlmojolicious-sin-root.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8205855608450605232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8205855608450605232'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/08/como-instalar-perlmojolicious-sin-root.html' title='Como instalar perl+mojolicious sin root'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8058769427449542095</id><published>2012-08-06T19:45:00.001-03:00</published><updated>2014-12-10T21:28:21.664-03:00</updated><title type='text'>Cubism: time series con js</title><content type='html'>&lt;a href=&quot;http://square.github.com/cubism/&quot;&gt;http://square.github.com/cubism/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8058769427449542095/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/08/cubism-time-series-con-js.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8058769427449542095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8058769427449542095'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/08/cubism-time-series-con-js.html' title='Cubism: time series con js'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-2407124509571983677</id><published>2012-07-25T15:30:00.000-03:00</published><updated>2012-07-25T15:31:25.395-03:00</updated><title type='text'>use FindBin;</title><content type='html'>Hola

   Encontré este módulo útil que viene con perl (osea, no hay que bajarlo aparte, ya está instalado) llamado FindBin. Sirve para saber dónde está instalado el script que estamos ejecutando.

   Por ejemplo, si queremos distribuir un programa que tiene un /bin con el script y un /lib con los modulos que usa ese script, podríamos poner en el script:

&lt;blockquote&gt;use lib &#39;../lib&#39; &lt;/blockquote&gt;

   Pero eso funciona solo si ejecutamos el script desde el /bin. 

&lt;blockquote&gt;
cd /opt/donde_instalamos_el_programa/bin&lt;/blockquote&gt;
&lt;blockquote&gt;./programa.pl
&lt;/blockquote&gt;

   Si queremos que el programa se pueda ejecutar desde cualquier lado (como cualquier programa) se usa FindBin:

&lt;blockquote&gt;
use FindBin;&lt;/blockquote&gt;
&lt;blockquote&gt;use lib &quot;$FindBin::Bin/../lib&quot;;
&lt;/blockquote&gt;

    Espero que les sea útil!</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/2407124509571983677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/use-findbin.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/2407124509571983677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/2407124509571983677'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/use-findbin.html' title='use FindBin;'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-9121305447546769688</id><published>2012-07-18T12:15:00.001-03:00</published><updated>2012-07-18T12:15:32.219-03:00</updated><title type='text'>Consistent Ring Hashing</title><content type='html'>&lt;a href=&quot;http://www.tomkleinpeter.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/&quot;&gt;Acá&lt;/a&gt; hay un artículo donde se entiende qué es &quot;Consistent Hashing&quot; o &quot;Consistent Ring Hashing&quot;. 

Básicamente es una forma de saber en qué servidor puede estar un objeto de cache, mejor que hacer Numero de servidor % cantidad de servidores.</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/9121305447546769688/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/consistent-ring-hashing.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/9121305447546769688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/9121305447546769688'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/consistent-ring-hashing.html' title='Consistent Ring Hashing'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8739336873896793495</id><published>2012-07-15T22:58:00.002-03:00</published><updated>2012-07-15T22:58:59.077-03:00</updated><title type='text'>Fatpacker</title><content type='html'>Otro bookmark: App:FatPacker mete las dependencias dentro de tu script. Todavía no vi cuán distinto es a PAR.</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8739336873896793495/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/fatpacker.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8739336873896793495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8739336873896793495'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/fatpacker.html' title='Fatpacker'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-7823590867597259965</id><published>2012-07-14T14:45:00.000-03:00</published><updated>2012-07-14T14:45:15.775-03:00</updated><title type='text'>Datatables: tablas para jquery</title><content type='html'>Bookmark para http://datatables.net/ , js para hacer tablas con una cantidad de plugins y extras.</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/7823590867597259965/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/datatables-tablas-para-jquery.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7823590867597259965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7823590867597259965'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/datatables-tablas-para-jquery.html' title='Datatables: tablas para jquery'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-7185420328898062448</id><published>2012-07-13T18:32:00.000-03:00</published><updated>2012-07-13T18:32:39.344-03:00</updated><title type='text'>Mike Friedman: Building Scalable, Distributed Job Queues with Redis and Redis::Client</title><content type='html'>Siguiendo con los videos de YAPC::NA, un poco de Redis y perl.

&lt;iframe width=&quot;420&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/ztyyn7hmcJo&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/7185420328898062448/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/mike-friedman-building-scalable.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7185420328898062448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/7185420328898062448'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/mike-friedman-building-scalable.html' title='Mike Friedman: Building Scalable, Distributed Job Queues with Redis and Redis::Client'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/ztyyn7hmcJo/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8003901486449493312</id><published>2012-07-12T12:43:00.001-03:00</published><updated>2012-07-12T12:43:20.550-03:00</updated><title type='text'>Jugando con tecnologías web</title><content type='html'>&lt;a href=&quot;http://blogs.perl.org/users/joel_berger/2012/07/having-fun-with-some-modern-web-technologies.html&quot;&gt;Acá&lt;/a&gt; hay un artículo de una persona que está haciendo un CMS con perl y un montón de javascript. Queda acá para que me acuerde de HumaneJS y PageDown.</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8003901486449493312/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/jugando-con-tecnologias-web.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8003901486449493312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8003901486449493312'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/jugando-con-tecnologias-web.html' title='Jugando con tecnologías web'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-8871792254513432615</id><published>2012-07-08T18:53:00.003-03:00</published><updated>2012-07-08T18:54:51.413-03:00</updated><title type='text'>Codificación de headers MIME</title><content type='html'>Estaba mejorando mi programa que me canta los emails nuevos (por si me quiero desenchufar un poco, pero igual estoy esperando un email importante) y me encontré con que algunos asuntos están codificados con tipo:

&lt;blockquote&gt;
Re: [CaFe-pm] =?utf-8?q?Blogs_en_Espa=C3=B1ol?=
&lt;/blockquote&gt;

Rápidamente encontré un link donde dice qué módulo (estándard de perl desde 5.8 -- osea, desde hace mil años ) usar para descodificar:

&lt;blockquote&gt;
use Encode qw/decode/;&lt;br&gt;
$utf8 = decode(&#39;MIME-Header&#39;, &quot;Re: [CaFe-pm] =?utf-8?q?Blogs_en_Espa=C3=B1ol?=&quot;);
&lt;/blockquote&gt;

Devuelve &quot;Re: [CaFe-pm] Blogs en Español&quot; como debe ser.</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/8871792254513432615/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/estaba-mejorando-mi-programa-que-me.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8871792254513432615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/8871792254513432615'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/estaba-mejorando-mi-programa-que-me.html' title='Codificación de headers MIME'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1892078772494901178.post-4167751235026282836</id><published>2012-07-08T17:13:00.000-03:00</published><updated>2012-07-08T17:13:23.543-03:00</updated><title type='text'>Estadísticas con PDL</title><content type='html'>Muy interesante presentación sobre estadísticas y minería de datos con PDL.

&lt;iframe width=&quot;420&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/DFX_cNB97yQ&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://properl.blogspot.com/feeds/4167751235026282836/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://properl.blogspot.com/2012/07/estadisticas-con-pdl.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4167751235026282836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1892078772494901178/posts/default/4167751235026282836'/><link rel='alternate' type='text/html' href='http://properl.blogspot.com/2012/07/estadisticas-con-pdl.html' title='Estadísticas con PDL'/><author><name>dvadell</name><uri>http://www.blogger.com/profile/01480156890734558699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/DFX_cNB97yQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>