Avui faig 4 anys
Què jove, energic i vigorós que et sents quan fas 4 anys… si nois ja fa 4 anys del fatídic accident. Així doncs continuo celebrant els meus aniversaris avui dia 7 i demà passat dia 9.
Per cert, aquest cap de setmana per primer cop en la meva vida em van fer una festa sorpresa els meus amics. Realment va ser molt emocionant i tan aviat com en tingui els documents gràfics els penjaré perquè pogueu veure la cara de mussol que em va quedar. Així doncs, a veure si els fotografs de la festa em fan arribar el material.
Moltes gràcies mussols realment va ser genial i ho vaig passar molt bé. Tot i que he de dir que avui encara en pateixo les conseqüències sobretot de son perquè quasi tot el cap de setmana sense dormir. Gràcies pardals!
Arreglat el formulari de contacte del blog
Fa molt de temps que no funcionava correctament el formulari de contacte. Ja havia intentat arreglar-lo alguna que altre vegada sense massa sort. Però diria que per fi esta tot ok. Si el voleu provar està aquí.
pfSense: patch pel DynDNS quan la interficie WAN no té la IP pública
Si pel motiu que sigui, teniu un pfSense que amb el servei de Dynamic DNS i la vostre interficie WAN no té la IP pública amb la que voleu actualitzar el servei d’IP dinàmica que useu aquí trobareu la solució. Això pot passar per diversos motius:
- Hi ha més d’una WAN
- La WAN té una IP privada que enllaça amb el router
- Accés a internet a través d’una VPN
- etc
Doncs bé, concretament en el meu cas tinc dues sortides WAN i per si fos poc la que té IP dinàmica no té la IP asignada pel proveidor sinó una IP privada. Així doncs, buscant pels foros de pfSense he trobat aquesta solució al problema.
Es tracta de modificar el fitxer /etc/inc/dyndns.class. Primer de tot afegim aquest nou mètode (funció) a la classe:
/* Private function for getting real IP */
/* Author: Tri Tu */
function _checkip() {
log_error("DynDns: Running _checkip() for real WAN IP");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://checkip.dyndns.com');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch);
curl_close($ch);
list($part1, $part2) = split(': ', $data, 2);
list($ip, $junk) = split('<', $part2);
return $ip;
}
Després dins del mateix fitxer busquem tots els llocs on apareix:
$wan_ip = get_current_wan_address();
i ho canviem per:
$wan_ip = $this->_checkip();
Si ús fixeu, el tema és tan senzill com dir-li a la classe que per saber quina és la seva IP de WAN ha de cridar la funció anterior, aquesta funció connecta a la típica web que retorna la IP que tenim i a partir d’aquí capturem aquesta IP i l’assignem a la variable que s’usar per saber si ha canviat la nostre IP.
Ja tinc la meva compte de Jaiku
Ahir em vaig crear la meva compte de Jaiku, la veritat és que no sé si duraré gaire com a usauri del servei. Per diversos motius, però bàsicament per dos. Primer perquè s’ha de tenir molta paciència per anar reportant què fas manualment. El segon, perquè on jo buscava la utilitat més gran és en la sindicació d’activitats automàtica: last.fm, trac, bookmarks, etc. és tan i tan lent que el temps real és una utopia. No m’esperava que fos res de l’altre món el sistema de polling contra els RSS que hi he afegit però tampoc m’esperava un desastre tan gran.
Realment una de les coses que em feia molta il·lusió és que s’anés guardant les cançons que vaig escoltant per last.fm a mesura que anava passant el temps, així tenia una línia de temps amb la música que escolto. El mateix em passa amb els bookmarks. Fins hi tot podria veure quin tipus de música escolto segons el que faig. Però pel que he vist això només fa polling unes 3 o 4 vegades al dia. De forma que tota la informació que volia publicar es perd.
Per altre banda, ja fa molt de temps que sóc usuari del servei Plazes del que trobo un error garrafal que no estigui integrat amb Jaiku. Ja que seria molt còmode anar reportant la meva posició a partir d’un servei com aquest. Malgrat això també he de dir que en gran part Plazes és un servei molt verd i que sota el meu punt de vista haurà de millorar molt a nivell de clients d’aplicació perquè tingui sentit. O sigui, que si no hi ha més tipus de clients i més diversos per usar hi ha moltíssims moments enque és impossible reportar on sóm. Tot i que la idea la trobo boníssima li falta molt per ser útil. També s’ha de dir que des de l’inici han avançat molt en el tema dels mapes i d’altres similars, ara ho tenen tot molt ben integrat amb google maps.
Un altre servei en el que m’he donat d’alta és el imified, realment crec que és un servei indispensable si penseu usar Jaiku o twitter des de tot arreu. Bàsicament és un gateway que permet unir el client d’IM (en el meu cas GTalk) amb d’altres serveis com per exemple, fer de client de Jaiku, twitter, convertir URLs llargues en curtes, un ToDo online, sistema recordatori, google calendar, etc. realment té molts widgets de connexió contre moltíssims serveis als quals es pot accedir de forma còmode i molt ràpida a través del IM. Bàsicament això em permet enviar novetats a Jaiku a través de la BlackBerry pel client de GTalk que hi tinc instal·lat. Ah! també permet rebre les novetats dels nostres amics de Jaiku i twitter, és clar. És tan senzill com tenir un buddy més entre els nostres contactes i al més pur estil bot d’IRC de tota la vida accedim als serveis.
Però altre cop hi trobo un problema d’integració en tot plegat, aquest cop entre imified i Plazes. Seria genial poder reportar la meva posició geogràfica a Plazes a través de imified i si això després ja es connectes a Jaiku, com comentava abans seria perfecte. Però totes aquestes eines sota el meu punt de vista estan massa verdes per funcionar de forma interactiva i integrada entre elles. Esperem que això sigui una d’aquelles coses que cura el temps.
Per cert, també m’he fet una compte a twitter i l’he importada des de Jaiku, però com ja comentava el polling contra els RSS des de Jaiku és molt lent i realment és un desastre la integració d’ambdues eines. La compte de twitter me l’he fet més que res perquè és el servei que tothom usa, més que Jaiku, però he de dir-vos que és realment simple, poc elavorat i poc potent. A més de moment no acabo de veure en el meu cas quina gràcia té seguir les evolucions de la gent que coneixo si són les persones amb qui em relaciono al dia a dia. Obviament per aplicacions com la del birdwatching que vaig comentar la potència és brutal tan de twitter com de Jaiku.
Beagle++ el beagle de sempre però amb capacitat semàntica
És curiós però fa unes setmanes li donava voltes al cap si valia o no la pena seguir tenint el Beagle consumint recursos a la meva màquina. No perquè no sigui un bon indexador, sinó perquè no tinc la costum d’usar-lo i no el faig servir mai. Així doncs una de dues o l’acabo treient o m’acostumo a usar-lo. La qüestió és que tot navegant fa uns dies vaig trobar el Beagle++ aquest projecte encara en una fase força inicial afegeix capacitats semàntiques al Beagle de sempre. Què carai vol dir això doncs, que per exemple si busquem Spain no només ens donarà resultats de documents relacionats amb la paraula sinó amb paraules derivades també, per exemple, València, Madrid, etc.
Com que el millor exemple sempre és veure-ho funcionar:
Python trick: error Address already in use
Quan treballem amb sockets en python sovint al publicar un port si matem el procés que publicava el port encara que sigui de forma correcte ens trobem que al llençar-lo de nou, o sigui, a l’intentar publicar altre cop el procés aquest dona error un error que diu algo així com Address already in use. O sigui, que el sistema operatiu es pensa que el port encara esta sent publicat pel procés que ja em matat. Si fem un netstat veiem que el port no hi és, però encanvi fins al cap d’una estoneta (alguns segons o minuts) no hi ha manera de poder usar de nou aquest port.
Doncs bé, un petit truquillo perquè això no passi i el poguem usar a l’instant és fer això després de crear l’objecte de la classe socket:
# creació de l'objecte
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# afegim noves propietats a l'objecte
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)