Reflexions de cap d’any des de Shanghai
Vull aprofitar aquestes últimes hores d’any que encara queden per escriure al blog. Una activitat que certament fa temps de la que no he disfrutat. He escrit diversos articles des de força llocs del món però he de dir que aquest és el primer cop que disposo d’unes vistes tan excepcionals, la veritat és que mai m’hagués imaginat tenir una paret de vidre just davant meu des d’una planta 27 i sense cap obstacle que m’impedeixi la vista des del peu de la perla d’orient fins a la punta de l’antena de la TV de Shanghai. Tot un luxe disfrutar d’aquesta tarda assolellada després d’haver aterrat a la ciutat més moderna de la Xina entre pluja i neu fa només dos dies.
Si en alguna cosa m’està recordant aquesta ciutat és al que poc a poc es va convertint la meva vida. Es podria definir en algo així com deixar que el desordre de les coses flueixi entre uns grans i clars objectius. Sota meu hi ha un carrer amb quatre carrils per banda i periòdicament vas veient com hi ha un cotxe que al mig de la recta decideix fer un canvi de sentit, al fer la maniobra ocupa uns tres carrils, automàticament veus com els cotxes que venien de cara redueixen, altres es devien i alguns simplement piten mentre mantenen la marxa forçant a que la maniobra de canvi de sentit es faci amb la màxima cel·leritat. Possiblement tot plegat ús fa pensar en que hi ha molts accidents però la veritat és que no n’he vist ni un.
Aquest any la meva vida ha canviat molt en alguns aspectes, m’he casat, tot un gran pas per mi. Però la veritat això no ha canviat massa la meva relació de parella. He aprofitat per viatjar aprofitant el viatge de noces (Japó i Maldives), les vacances d’estiu (Menorca) i ara les vacances de cap d’any (Shanghai). Aquestes activitats m’han permès coneixer moltíssimes coses noves, persones, formes de fer i de viure. Però el 2012 també ha estat excepcional en els temes professionals, no només perquè he pogut participar en projectes realment excepcionals, conferències, trobades, reunions, etc. Tot això m’ha permès creixer i compartir els meus dies amb equips de persones fantàstics. A més aquests tres últims mesos he re-obert una nova etapa de la meva vida deixant el projecte de Vision Robotics. De nou torno a pilotar els meus projectes personals, feia temps que no disfrutava d’això.
Sovint els canvis ens fan por, però fa un temps vaig aprendre que la por mai és al desconegut sinó a perdre el conegut. Ens aferrem a les persones i les coses que tenim i quan aquestes ens deixen això ens fa por. Llavors és quan sota el meu punt de vista hem d’obrir el nostre cor i la nostre ment a la fè, per ser més concrets, a la fè en nosaltres mateixos i les nostres capacitats, sobretot en la capacitat de ser flexibles i oberts a les noves possibilitats de les que estem envoltats i que sovint ens neguem a veure. Estic convensut de que és vital i estratègic saber quina és la passió que ens fa moure a cada un de nosaltres, sovint saber això facilita saber què volem i ajuda a assolir nous objectius. És evident que no podem controlar tot el que ens afecte però si que podem controlar com vivim tot el que ens afecta.
Fa uns quants anys l’Ernest em parlava que fixar totes les forces en un objectiu pot ser contraproduent perquè durant el camí no sóm capaços d’obrir els ulls i la ment al que ens envolta. Això ens pot portar a ignorar noves i millors possibilitats per nosaltres mateixos. Interioritzar aquesta idea no és senzill i menys quan ets una persona a la que li agrada tan el que fa com jo, perquè això fa que tinguis tendència a ignorar tot el que no forma part del que t’agrada. O el que és pitjor, a fugir de certes etiquetes simplement perquè ens disgusten les seves connotacions. Tots sabem que les etiquetes són injustes i incertes però en canvi sovint necessitem etiquetar les coses tan per dir que ens agraden com que no ens agraden. No seré jo qui digui que estic per sobre d’aquesta costum però adonar-se de que tinc aquest comportament m’ajuda a obviar-lo i obrir-me a noves propostes que fins ara hagués refusat.
Afegir també que hem sento afortunat per tantes i tantes raons que no hi hauria prou temps per enumerar-les totes, per tant vull dir GRÀCIES. Gràices a tot i a tothom, als que m’estimen i als que m’odien, o fins hi tot gràcies als que m’ignoren. Perquè tots ells són grans mestres que em donen lliçons cada dia, lliçons per identificar el que vull tenir aprop i del que vull tenir lluny. La vida és una experiència fantàstica que si sabem mantenir una actitut oberta el fluir del dia a dia ens pot portar per rius d’experiències cada cop més caudalosos per això jo només intento aportar-hi tota la bondat i amor que tinc. A cada interacció que tinc amb la vida, ja sigui dins o fora de mi. Només sembro el millor que puc oferir en cada instant, no cal esperar res a canvi. Tot i que a aquestes altures de la meva vida ús puc dir que ja he descobert un SECRET, tot acaba tornant.
Així doncs vull acomiadar l’any des de l’orient llunyà dient a tot el món GRÀCIES, ús ESTIMO AMB TOT EL MEU COR I TOTES LES MEVES FORCES.
Negociación = Recursos + Tiempo + Flexibilidad
Recuerda en cualquier negociación lo que estamos buscando siempre es el punto de equilibrio entre los recursos percibidos, el tiempo invertido y la flexibilidad disponible.
timegrep: Very useful grep tool
Specially when you have to look up inside Postfix logs or Syslog in general it could be the swiss knife tool you need: timegrep.
You have to know that the tool is developed using Python. And is very easy to upgrade or fork the code.
Some recommendations about RESTful API design
I want to recommend to you to watch the YouTube video called RESTful API design of Brian Mulloy. In this post I make an small abstract of the most important ideas of the video, of course from my point of view:
- Use concrete plural nouns when you are defining resources.
- Resource URL has to be focused in access collection of elements and specific element. Example:
- /clients – get all clients
- /clients/23 – get the client with ID 23
- Map HTTP methods to maintein elements (CRUD):
- POST – CREATE
- GET – READ
- PUT – UPDATE
- DELETE – DELETE
- Workaround, if your REST client doesn’t support HTTP methods, use a parameter called ‘method’ could be a good idea. For example, when you have to use a method HTTP PUT it could be changed by method HTTP GET and the parameter ‘method=put’ in the URL.
- Sweep complexity behind the ‘?’. Use URL parameters to filter or put some optional information to your request.
- How to manage errors:
- Use HTTP response codes to refer error codes. You can find a list of HTTP response codes in Wikipedia.
JSON response example can be like this:<br><pre>{ 'message':'problem description', 'more_info':'http://api.domain.tld/errors/12345' }</pre><br>
Workaround, if REST client doesn’t know how to capture HTTP error codes and raise up an error losing the control of the client, you can use HTTP response code 200 and put ‘response_code’ field in JSON response object. It’s a good idea use this feature as optional across URL parameter ‘supress_response_code=true’.
Versioning the API. Use a literal ‘v’ followed by an integer number before the resource reference in the URL. It could be the most simple and powerful solution in this case. Example: /v1/clients/
The selection of what information will be returned in the response can be defined in the URL parameters, like in this example: /clients/23?fields=name,address,city
Pagination of the response. Use the parameters ‘limit’ and ‘offset’, keep simple. Example: ?limit=10&offset=0
Format of the answer, in this case I’m not completely agree with Brian. I prefer to use HTTP header ‘Accept’ than his proposal. Anyway both ideas are:
- Use HTTP header ‘Accept’ with proper format request in the answer, for example, ‘Accept: application/json’ when you want a JSON response.
- or, use extension ‘.json’ in URL request to get the response in JSON format.
- Use Javascript format for date and time information, when you are formatting JSON objects.
Sometimes APIs need to share actions. Then we can’t define an action with a noun, in this case use verb. Is common to need actions like: convert, translate, calculate, etc.
Searching, there are two cases:
- Search inside a resource, in this case use parameters to apply filters.
- Search across multiple resource, here is useful to create the resource ‘search’.
- Count elements inside a resource, simply add ‘/count’ after the resource. Example: /clients/count
- As far as you can use a single base URL for all API resources, something like this: ‘http://api.domain.tld’.
- Authentication, simply use OAuth 2.0
To keep your API KISS usually it’s a good idea develop SDK in several languages, where you can put more high level features than in API.
Inside an application each resource has its own API but it’s not a good idea publish it to the world, maybe use a virtual API in a layer above it’s more secure and powerful.
Changing Ubuntu CLI language
My mother tongue is Catalan and of course I speak and understand Spanish very well, but when I’m using a Linux CLI it’s impossible to be agile if the interface is not in English. Then when I need to change Ubuntu interface to English I modify the file /etc/default/locale:
LANG=en_US.UTF-8 LANGUAGE="en_US:en"
Avui el blog fa 12 anys
Avui el blog ha arribat a la nova fita dels 12 anys. Cal dir que ja fa anys que pobret esta tocat ja que les obligacions impedeixen trobar temps pels hobbies; tot i amb això, pel que a mi respecte el considero més viu que mai. La raó és ben senzilla tinc més d’un instint al dia d’escriure coses que finalment no s’acaba podent materialitzar degut a la quantitat de temps que cal dedicar a cada entrada.
Així doncs, amb els meus millors desitjos i esforços continuaré treballant i esforçant-me dia a dia per canviar aquesta dinàmica, gràcies a tots els que em seguiu.