Author: Oriol Rius

AlexKing: subscric la seva teoria sobre els comentaris i els posts

Reading time: 1 – 2 minutes

Ja fa molt de temps que segueixo el blog de l’Alex King. De fet, és de les persones que més admiro com a programadors d’aplicacions, potser un gran exemple és que dels pocs programes que he comprat a la meva vida és el Tasks Pro, que obviament ha fet ell.

Doncs bé, l’altre dia va publicar un post amb una teoria boníssima, que subscric al 100%: la relació que hi ha entre la quantitat comentaris i els posts és inversament proporcional. O sigui, quan més articles publiquem al nostre blog menys comataris rebrem. Com ja deia abans fa temps que crec que això és totalment cert. És a dir, si jo publico cada dia 3, 4 o 5 articles rarament obtinc algún comentari d’algún article. Encanvi si em passo setmanes i setmanes sense escriure res els comentaris van augmentant.

El dolent del tema és que realment hauria d’escriure entre 5 i 10 artícles per publicar tot el que se’m passa pel cap o que trobo interesant per guardar al blog. Però per sort o per desgràcia la mandra, el temps i les ganes no m’ho permeten.

FireBug: complement del firefox perfecte pels programadors de webs

Reading time: 3 – 4 minutes

Pensava que la extenció web developer toolbar del firefox era la bomba, però avui l’Ernest m’ha obert els ulls. Realment el Firebug li dona mil patades. És realment impresionant. El meu no és programar web ni molt menys varallar-me sovint amb els CSS, JavaScript ni HTMLs. Però sovint quan programes aplicacions ASP una eina d’aquestes t’estalvia moltes hores de feina. Per exemple, el model de templates que usa symfony no seria precisament un model WYSIWYG. Així doncs, quan toca escriure codi pelat, el Firebug ens pot fer anar molt al gra. La veritat és que l’Oriol ho hagués agraït en algún moment en que depurava un codi JavaScript, oi Oriol?

firebug.gif

Les funcions del Firebug són tantes que fa fins hi tot mandre repassar-les, però en faré una breu llista a base de copy/paste:

  • Firebug is always just a keystroke away, but it never gets in your way. You can open Firebug in a separate window, or as a bar at the bottom of your browser. Firebug also gives you fine-grained control over which websites you want to enable it for.
  • Inspect and edit HTML Firebug makes it simple to find HTML elements buried deep in the page. Once you’ve found what you’re looking for, Firebug gives you a wealth of information, and lets you edit the HTML live.
  • Tweak CSS to perfection Firebug’s CSS tabs tell you everything you need to know about the styles in your web pages, and if you don’t like what it’s telling you, you can make changes and see them take effect instantly.
  • Visualize CSS metrics When your CSS boxes aren’t lining up correctly it can be difficult to understand why. Let Firebug be your eyes and it will measure and illustrate all the offsets, margins, borders, padding, and sizes for you.
  • Monitor network activity Your pages are taking a long time to load, but why? Did you go crazy and write too much JavaScript? Did you forget to compress your images? Are your ad partner’s servers taking a siesta? Firebug breaks it all down for you file-by-file.
  • Debug and profile JavaScript Firebug includes a powerful JavaScript debugger that lets you pause execution at any time and have look at the state of the world. If your code is a little sluggish, use the JavaScript profiler to measure performance and find bottlenecks fast.
  • Quickly find errors When things go wrong, Firebug lets you know immediately and gives you detailed and useful information about errors in JavaScript, CSS, and XML.
  • Explore the DOM The Document Object Model is a great big hierarchy of objects and functions just waiting to be tickled by JavaScript. Firebug helps you find DOM objects quickly and then edit them on the fly.
  • Execute JavaScript on the fly The command line is one of the oldest tools in the programming toolbox. Firebug gives you a good ol’ fashioned command line for JavaScript complete with very modern amenities.
  • Logging for JavaScript Having a fancy JavaScript debugger is great, but sometimes the fastest way to find bugs is just to dump as much information to the console as you can. Firebug gives you a set of powerful logging functions that help you get answers fast.

PHP: notes sobre arrays i tres classes (myCurl, barcodes, WSSoapClient)

Reading time: 2 – 3 minutes

A HowtoForge han publicat un howto (local) sobre com funcionen els arrays en PHP que esta molt bé. Realment el que més valoro són les notes sobre les funcions que menys s’acostumen a usar i per tant, les menys documentades o més mal documentades. Tot i que sovint quan les descobreixes ja no pots viure sense elles, funcions de búsqueda, de push, pop, var_dump per depurar, etc.

A més a través de phpClasses he trobat tres classes que els hi he de donar un bon cop d’ull ja que tenen molt bona pinta:

  • MyCurl This class provides an alternative implementation of the cURL extension functions in pure PHP. It automatically detects whether the cURL library is available. If it is not available, it defines several functions with the same names of the cURL extension that use the class to emulate part the original functionality. Currently it implements the functions: curl_init, curl_exec, curl_setopt and curl_close. Several of the most important options can be set with the curl_setopt function.
  • HTML Bar Codes This package can be used to display bar codes using only HTML with CSS styles. It takes a code to represent and generates CSS style definitions and HTML tags to render that code in an HTML page. There are two classes that can render bar codes using the Code39 and Interleave 2 of 5 standards respectively.
  • WSSoapClient This class can add WSSecurity authentication support to SOAP clients implemented with the PHP 5 SOAP extension. It extends the PHP 5 SOAP client support to add the necessary XML tags to the SOAP client requests in order to authenticate on behalf of a given user with a given password. This class was tested with Axis and WSS4J servers.

Nova organització dels correus (2a part)

Reading time: 2 – 3 minutes

Fa un parell de dies que aplico una idea que he tingut, a veure què ús sembla. És un complement de l’article “nova organització dels correus“. Consisteix en posar amb còpia oculta tots els correus que envio cap a mi mateix. Això s’encarrega el propi client de correu de fer-ho automàticament. Així tot el que envio em torna a la inbox llavors quan entra puc posar l’email a la carpeta: ThisYear, Process o Waiting for segons el que hagi de fer amb aquest email.

Si el col·loco a ThisYear el que faig és organitzar la carpeta en forma de thread mostrant el recipient i el from així tinc els correus agrupats per temes i a l’hora de buscar alguna cosa no he de buscar per separat el que jo vaig escriure del que em van escriure.

mailthreads.png

Obviament si l’arrossego a Process és que he de fer alguna tasca amb aquell email. Per exemple, potser m’han demanat una llista de preus i jo contesto que la tindran la setmana que ve perquè no se m’oblidi d’enviar-la col·loco el correu còpia del que he escrit a dins de Process i així sempre tinc present que he de fer aquesta tasca.

El comportament de la carpeta Waiting for és similar però alrevés, per exemple, si escric un correu demanant algo que m’han de retornar perquè no se m’oblidi que ho he demanat la còpia que m’arriba del correu que he escrit la col·loco a Waiting for.

Un cop em retornen l’email amb la informació que he demanat o me la fan arribar per qualsevol altre sistema llavors arrossego el correu cap a la carpeta ThisYear.

És un complement una mica engorrós però és interessant per tal de no oblidar les coses que ens han de retornar o que hem de fer/enviar i que després se’ns passen per alt.

Actualització 9/2/2007: Un altre avantatge de tenir còpia a la inbox del que s’envia és que així també tinc a la BlackBerry una còpia dels correus que envio no només dels que rebo i quan no estic a l’ordinador o a internet, els puc consultar, re-enviar, etc.

nota recordatori de tcpdump

Reading time: 16 – 27 minutes

Mai recordo la sintaxis per filtrar amb el tcpdump quan em fa falta, així doncs:

tcpdump -i eth0 -n tcp port 1500
tcpdump host 10.0.1.12
tcpdump icmp and host 10.0.1.12
tcpdump -i eth1 host 10.0.1.11 and host 10.0.1.12

Algunes expresions per l’ethereal/wireshark també usables amb el tcpdump, és clar:

ip.dst == 10.0.1.50 && frame.pkt_len > 400
ip.addr == 10.0.1.12 && icmp && frame.number > 15 && frame.number < 30
ip.addr == 10.0.1.12 && tcp.port == 23
host 10.0.1.12 and tcp port 23

Nova organització dels correus

Reading time: 4 – 6 minutes

carpetescorreu.png

Ja fa dies que volia reorganitzar-me els correus segons les teories del GTD. La idea bàsica és tenir sempre la INBOX completament buida. Per tal de tenir els correus sempre ben classificats. A la part dreta de l’article teniu un screenshot amb les carpetes de la compte oriol_@_oriol.joor.net que és la compte que agrupa les comptes de: joor.net, movilpoint.com, inforcomsoft.net i druvs-systems.com. Les funcions de les carpetes actuals:

  • Inbox: com sempre on entre els correus que no es classifiquen automàticament en cap carpeta. O sigui, correus que he de revisar tan aviat com sigui possible. Tots els correus que entren per aquesta carpeta i impliquen menys de dos minuts de feina o que estic capacitat per respondre al moment, ho he de fer. Després de llegir qualsevol correu de la carpeta ha d’anar a una altre carpeta.
  • Process: correus que venen d’inbox i sobre els que he de fer alguna acció. Per exemple, fer alguna cosa i després respondre (do it), tasques que no puc fer jo mateix i les he de delegar (delegate it), alguna tasca que no estic preparat per respondre o no tinc temps de fer-ho ara mateix (defer it). Els correus que entren en aquesta carpeta els marco altre cop com a no llegits i així d’un cop d’ull sé la quantitat de tasques que tinc en procés. D’aquest punt se’n poden derivar tasques cap al MonkeyGTD.
  • Waiting for: tasques que venen de la carpeta process o de la carpeta inbox. Bàsicament són tasqes que estan aturades per algún motiu. Per exemple, una tasca delegada (delegated) o diferida (deferred). Això va bé, perquè així no molesta a process i no hi perdo el temps tornant a mirar el que tinc a la carpeta process. Així el màxim que puc fer amb aquestes tasques és al final de la jornada o al principi, enviar recordatoris a qui pugui desenganxar la tasca.
  • Organize: emails que he de classificar manualment quan tingui una estona, a alguna carpeta de la compte d’arxius o qualsevol altre carpeta especial de projectes. Per exemple, els emails intercanviats per resoldre algún bug d’un aplicatiu, etc.
  • This Year: bàsicament és la típica col·lecció d’emails que tenim a la inbox. Així si em de buscar algo ho podem fer aquí.
  • imapfilter: correus que pertanyen a alguna llista de correu. Aquests correus es classifiquen cada 1h a través de l’aplicatiu imapfilter.
  • Junk: tots els correus marcats com a spam es posen en aquesta carpeta. Cada 1h es marquen com a llegits perquè no molestin (gràcies al programa imapfilter). Els correus més antics de 7 dies es guarden a Junk/archive, allà es guarden 90 dies. Els informes dels emails marcats com a spam es guarden a Junk/reports allà els informes més antics de 30 dies es borren. A les carpetes learn_ham i learn_spam hi arrossego els falços positius i els falços negatius respectivament, cada nit l’spamassassin els incorpora a la seva base de dades.

La resta de carpetes són les normals, on es guarda els correus enviats segons la compte que he usat per fer els enviaments, la carpeta dels drafts, la carpeta brossa i potser la única extranya seria la carpeta de la Daphne que és on guardo els correus que m’envia la Daphne. No té més història aquesta carpeta, diguem-li la carpeta especial i més prioritària 😉

Tot això ho complemento amb dues comptes de correu més archive i mailinglists. Ambdues IMAP, igual que la oriol_@_oriol.joor.net. Gràcies a l’imapfilter, en aquestes dues comptes s’hi van classificant els correus a arxivar i els correus que pertany a les llistes de correu a les que estic subscrit. Tot això em permet tenir la meva compte principal amb una mida raonable. El problema més greu és que fins ara la compte personal, tenia 4Gb i era molt pesada. Amb aquest esquema tinc repartit molt millor el pes de les comptes.

Una de les grans avantatges és que quan uso l’offlineimap que sincronitza la compte IMAP personal del servidor cap al portàtil es fa de forma molt més ràpida. Ja que no ha de passar per tantes carpetes com abans per mirar si tinc els mateixos correus al portàtil que al sevidor. Pel que fa a les altres dues comptes archive i mailinglists les sincronitzo només cada 1h i així no tinc sincronitzacions tan llargues i pesades per la xarxa.

La importància del ham per evitar l’spam

Reading time: 2 – 2 minutes

spamassassin.jpg

Sovint quan es monta un spamassassin per evitar que entri spam la gent es queixa perquè aquest deixa passar molts mails com a correus bons, però realment són spam. Doncs bé, llavors a la gent se li explica que s’ha d’ensenyar a l’spamassassin a que aprengui d’aquests errors ensenyant-li el que ha deixat passar i no havia d’haver deixat. O sigui, que aprengui els seus errors d’spam. Doncs bé aquestes últimes dues setmanes se’m colaben uns 10 o 15 missatges al dia com a correu bo i eren spam, encanvi tenia la base de dades de correus d’spam ben plena i no acabava d’entendre perquè passava això.

Doncs bé, als usuaris sempre se’ls explica que l’spamassassin no només ha d’aprendre què és spam (correu brossa) sinó també el ham (correu legítim) així millora l’ensenyament de l’anti-spam. Així doncs, resulta que la meva base de dades de ham era massa vella i no l’havia educada de feia massa temps, així doncs fa uns 3 dies li vaig fer aprendre uns 1000 correus legítims i com una seda. Els últims 3 dies potser només s’ha colat 1 o 2 correus, i me’n filtra quasi 200 diaris com a spam. Genial,eh!?

Moraleja no oblideu la importància del ham, a l’hora d’educar l’anti-spam. No només s’apren de l’spam. Jo crec que aquest exemple que he viscut li servirà com a bon exemple a seguir a molta gent, o això espero.

imapfilter: eina per filtrar emails via IMAP

Reading time: 1 – 2 minutes

IMAPFilter, una altre bona troballa d’en Marc. Realment interessant, permet classificar, filtrar, modificar flags, llençar busquedes, moure, borrar, etc. dels correus d’una compte IMAP remota. A més també ens permet jugar amb més d’una compte IMAP simultànea, per copiar/moure correus entre ambdues comptes. El llenguatge per programar els scripts amb IMAPfilter es basa en LUA, la qual cosa ens permet fer realment coses molt complexes i potents. Dubto que hagiu pensat alguna funció que no ús la deixi fer aquest programa.

A mesura que vagi creant scripts per les meves comptes de correu, ja penjaré els snippets de codi. Així serviran com a exemple, malgrat això la secció d’exemples de la web esta prou bé.

SOAP amb Symfony

Reading time: 2 – 3 minutes

symfony.gif

Fa uns mesos vaig implementar una aplicació amb força connexions SOAP tan a nivell de client, com de servidor contra aplicacions .NET i aplicacions SOAP fetes en Symfony mateix. Malgrat funcionen prou bé, he de reconeixer que la implementació SOAP de PHP fins a la versió 5.2.0 que és la última que he provat dona alguns problemes. Ja no quan es comunica amb .NET sinó quan parlo amb ella mateixa. Puc assegurar que no és culpa del codi, perquè l’estructura client servidor de la que parlo feia més de 200 transaccions diaries de les quals unes 10 o 20 fallaben, per errors de l’estil Error Fetching http headers. De fet, investigant vaig trobar algún que altre BUG intern de PHP que comentava el problema, però segons deien a PHP ja estava solucionat. Doncs a mi em continuaven donant. Finalment el que vaig fer per solucionar-ho va ser eliminar SOAP a tot arreu d’on vaig poder, ara mateix no tinc ni un error d’aquest estil i es continuen fent unes 200 transacions diaries o més.

Malgrat aquesta no massa bona experiència, continuo pensant que la idea és boníssima i que cal seguir treballant amb ella. Doncs bé, quan vaig implementar el servidor SOAP via Symfony no vaig trobar cap tipus de documentació que parles de com fer-ho bé. Així doncs vaig improvisar i vaig repartir el codi entre les actions i els templates amb tan bon criteri com vaig saber, tan per publicar el fitxer WSDL com per publicar el servei SOAP. Ara esta apunt de sortir la versió 1.0 de Symfony i curiosament també s’ha publicat un snippet on es parla de com publicar un servei SOAP desde Symfony. Així doncs, he de reconeixer que la implementació que es fa de la idea en aquest snippet és molt millor que la meva. Per tant, el recomano: Code Snippets: Soap server (local).

Snap: el complement d’escriptori ideal per l’asterisk

Reading time: 2 – 2 minutes

De fet, personalment no em fa gaire utilitat aquesta eina. Però no puc dir el mateix dels meus clients. Per fi, he trobat una eina econòmica que els permet interactuar amb l’asterisk de forma senzilla i fer les típices pijades que sempre em demanen quan els monto un asterisk, gràcies Marc pel descobriment. Snap és un programet per Windows que permet veure qui ens esta trucant a la pantalla del PC, buscar aquest número a l’agenda. Marca el número de telèfon que ens apareix al firefox mentre naveguem. Marca on volem trucar des d’una petita aplicació que ens surt a la pantalla. Invocar el CRM requerint la informació del client que ens esta trucant, o fins hi tot connectar-lo via AGI a funcions més avançades d’Asterisk. Però la cosa no s’acaba aquí, s’integra amb Outlook, permet tenir un registre de les trucades que fem i que rebem. Entre d’altres coses.

snap.png

El programa té dues versions la free i la pro, aquesta última costa uns ~30$ per usuari. El que ambdues tenen en comú és la integració amb Office, Outlook, firefox i thunderbird. La versió pro a més ens mostra una finstra flotant quan entre una trucada, permet connectivitat contra el CRM per trucades entrants i sortints, disposa d’un driver TAPI (TSP driver), a més d’una versió avançada de l’identificador de trucades i del buscador de números de teléfon.

Scroll to Top