CouchDB: fixar el límit màxim de revisions per document
Per defecte i fins que no es fa una compactació de la base de dades CouchDB permet fins a 1000 revisions d’un document, cosa que sovint no acostuma a ser necessari. Així doncs, si volem canviar aquesta paràmetre finalment a la versió 0.11 ja el podem canviar.
Set _revs_limit of a particular database:
curl -X PUT -d "1500" http://localhost:5984/test/_revs_limit #=> {"ok":true}
Read _revs_limit of a particular database:
curl -X GET http://localhost:5984/test/_revs_limit #=> 1500
informació original de: accessing database specific options.
Agraiments: gràcies @marcos 😉
Formats gràfics CIF
CIF (Common Intermediate Format), també conegut com FCIF (Full Common Intermediate Format), és un format usat per estandaritzar les resolucions horitzontals i verticals en pixels de les senyals de video (seqüències YCbCr), aquest nomenclatura es va proposar a l’estàndard H.261.
CIF es va dissenyar per convertir de forma senzilla els estàndards PAL o NTSC. CIF defineix una seqüència de video amb una resolució de 352×288 com PAL, amb un framerate de 30000/1001 (uns 29.97fps) frames com NTSC, amb un codi de color YCbCr 4:2:0.
SQCIF | 128 × 96 | SubQuarterCIF (subQCIF) |
QCIF | 176×144 in PAL 176×120 in NTSC |
Quarter CIF, la meitat de la resolució H i V, o sigui, 1/4 de la imatge original |
SIF(525) NTSC | 352×288 PAL 352×240 NTSC |
Source Input Format |
CIF/SIF(625) | 352×288 in PAL 352×240 in NTSC |
|
D1/4SIF(525) | 704×576 (TV PAL) 704×480 (TV NTSC) 720×576 (DVD-Video PAL) 720×480 (DVD-Video NTSC) |
Full size, estàndard NTSC i PAL |
2CIF | 704×288 in PAL 704×240 in NTSC |
2 Common Intermediate Format |
DCIF | 528×384 in PAL 528×320 in NTSC |
Double CIF, té un aspect ratio molt proper al 4:3, millor quailtat que 2CIF i CIF amb el mateix bitrate |
4CIF/4SIF(625) | 704×576 in PAL 704×480 in NTSC |
|
16CIF | 1408 × 1152 |
Les resolucions xCIF no són quadrades, tenen un ratio de ~1.222:1. O sigui, que una televisió analògica té un ratió de 1.2:1 segons defineix l’estàndard de sistemes de 525 linies (CCIR 601). En les pantalles d’ordinador o de televisió digital es treballa amb blocs de pixels quadrats, o sigui, que les trames xCIF ha de ser re-escalades horitzontalment un ~109% per aconseguir un ratio de 4:3, o sigui, el que equivaldria a 384×288 pixels quadrats.
Les mides d’imatges CIF han estat especialment escollides per ser multiples del que s’anomenen macroblocs (corresponent a 16x16pixels). Per exemple, una imatge CIF de mida 352×288 correspon a 22×18 macroblocs.
Informació extreta de la Wikipedia i de diversos forums dispersos per internet.
Jornades #decharlas sobre #symfony
Com deia a l’anterior article, el dilluns i dimarts vaig ser per la zona de Castelló per assistir amb el Benja a les jornades de Symfony organitzades per la Universitat de Jaume I de Castelló. Doncs bé, comentar que les jornades em van sorprendre molt positivament, realment hi havia gent amb força o fins hi tot molt nivell en la materia i això sempre és d’agraïr en aquest tipus d’events.
El programa de les xerrades era molt interessant i tret d’algunes xerrades puntuals totes eren del màxim interés per mi. Com molts esteu cansats de sentir jo no sóc programador, però en aquesta vida he picat força codi i concretament amb Symfony vaig començar-ho a fer en la versió 0.6.4, o sigui, molt abans que fos estable. Però de la mà de l’Oriol M. varem fer un projecte amb uns quants megues de codi font per fer recàrregues de mòbil a una cadena de botigues de fotografia, un dels codis dels que estic més orgullós.
Tornant a les jornades, volia destacar el meu ranking particular de ponents, es tracta d’un petit TOP 3 que des de la meva més extrema modèstia preten classificar en base a uns criteris totalment subjectius les persones que van saber transmetre els valors més importants que jo busco en una xerrada:
- Javier Eguíluz (Symfony 2) – a destacar la gran capacitat d’enfocar la conferència cap als items més importants a resaltar, sense oblidar els detalls rellevants en cada moment, tot això sense perdre un fil conductor clar en tota la xarrada. També s’ha de dir que el tema li donava molt de joc per fer embadalir a l’audiència; però va saber com treure-li el suc i tenir-nos a tots ben enganxats malgrat estar molt cansats després de dos dies de conferències sense parar, aquesta va ser l’última conferència.
- José Antonio Pío (Vistas y sfForm) – cal deixar-ho clar, una màquina té tota la pinta de ser un programador com la copa d’un pi i els típics defectes i virtuts de ser un professor (ho és?). Malgrat sembla que és molt bo i sap explicar-se la densitat del seu contingut i complexitat del mateix, feien complex seguir-lo tota l’estona ja que exigia molt a la concentració. Cosa gens senzilla en una marató de conferències com el que ens ocupa.
- Jordi Llonch (Plugins) – aquest representant de les nostres terres diria que també ha fet una molt bona feina explicant-nos la potència dels plug-ins de Symfony, potser a nivell personal no m’ha aportat tan com les altres dues xerrades però la qualitat de les transparències, l’oratòria i la bona organització dels continguts diria que l’han convertit en una referència de com fer les coses, sota el meu punt de vista, és clar.
Comentar que la resta de ponències també han estat molt bé, obviament algunes amb més qualitat que d’altres i amb temes que per mi tenien un major interés que altres. Però en conjunt dono una nota altíssima al contingut de les xerrades. Pel que fa a la organització i les instal·lacions un 9, més que res per donar-los marge a millorar. Impresionant el complexe universitari, res a envejar a d’altres que he vist.
Abans de tancar aquest article tan poc ortodoxe per descriure les jornades comentar en forma de punts algunes notes mentals que me n’he emportat:
- Hauria de posar-me amb Doctrine, però al coneixer Propel mai trobo el moment.
- Mirar-me a fons referències sobre integració continua amb PHP i eines de gestió de projectes
- Dona gust adonar-se que moltes pràctiques que has adoptat unilateralment també es comparteixen en la comunitat: temes d’sfForm, vistes, pugins, web escalables, cloud computing, etc.
- Pel que fa al tema de la web escalable, m’agradaria agafar els ‘slides’ del ponent Asier Marqués i fer el meu propi screencast del tema, comparteixo quasi tot el que va dir a la conferència però em quedo amb les ganes d’aportar-hi el meu granet de sorra.
- Mirar-me el tema d’ESI que ja l’havia oblidat.
- MongoDB, com dic cada dia… una passada! i si a sobre es soporta a Doctrine això ja no té preu. Interessant el tema de Mondongo.
- i l’estrella de tot plegat!!!! Symofny2… estic impacient!!!!
UPDATE: presentacions de les jornades.
Video del meu 30è aniversari, potser una mica tard?
Dilluns i dimarts he estat per Vinaròs després de molt de temps de no estar per la zona. Desrpés de 3 anys d’esperar va ser el moment perquè m’entreguessin el video que em van fer per felicitar-me el 30è aniversari, o sigui, el que correspon a l’any 2007. Com que el video s’ho val el penjo a Youtube perquè el pogueu veure.
Part 1:
Part 2:
Per cert, aquesta part del video és només de la gent de Vinaròs, els altres videos que m’han comentat que m’havien fet altres persones encara no els he vist, cosa que ja té delicte 😉
dbus+python: emetent i rebent senyals
Feia massa temps que no jugava amb DBUS i les he passat una mica negres aquesta tarda intentant recordar com funcionava tot plegat. La qüestió de base és molt senzilla, com que el codi parla per si mateix. Simplement adjuntaré els dos codis.
Receptor de senyals DBUS, rep la senyal amb format ‘string’ i la mostra:
#!/usr/bin/env python
#--encoding: UTF-8--
"""
entra en un loop esperant senyals emeses a:
dbus_interface = cat.oriolrius.prova
object_path = "/cat/oriolrius/prova/senyal"
amb nom de senyal: 'estat'
quan es rep la senyal la mostrem
"""
import gobject
import dbus
import dbus.mainloop.glib
def mostra(m):
print m
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(
mostra,
path="/cat/oriolrius/prova/senyal",
dbus_interface="cat.oriolrius.prova",
signal_name = "estat"
)
loop = gobject.MainLoop()
loop.run()
Emisor de senyals DBUS, envia una senyal de tipus ‘string’ amb el contingut ‘hola’:
#!/usr/bin/env python
#--encoding: UTF-8--
"""
Emet una senyal a dbus, al bus 'session' amb destí:
dbus_interface = cat.oriolrius.prova
object_path = "/cat/oriolrius/prova/senyal"
amb nom de senyal: 'estat'
"""
import gobject
import dbus
from dbus.service import signal,Object
import dbus.mainloop.glib
class EmetSenyal(Object):
def __init__(self, conn, object_path='/'):
Object.__init__(self, conn, object_path)
@signal('cat.oriolrius.prova')
def estat(self,m):
global loop
print("senyal emesa: %s" % m)
gobject.timeout_add(2000, loop.quit)
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
bus = dbus.SessionBus()
o = EmetSenyal(bus,object_path='/cat/oriolrius/prova/senyal')
o.estat('hola')
loop.run()
Usant el ‘dbus-monitor’ es pot veure la traça del missatge:
signal sender=:1.634 -> dest=(null destination) serial=2 path=/cat/oriolrius/prova/senyal; interface=cat.oriolrius.prova; member=estat
string "hola"
Cheetah – the python powered template engine
Un article ‘fast-n-dirty’ sobre potser la millor llibreria que he trobat per treballar amb templates i python: Cheetah. Es tracta de poder generar fitxers de texte de forma senzilla: fitxers de configuració, pàgines web, emails, etc. a partir de plantilles. Realment útil en molts entorns.
Les funcionalitats (copy-paste de la web):
- is supported by every major Python web framework.
- is fully documented and is supported by an active user community.
- can output/generate any text-based format.
- compiles templates into optimized, yet readable, Python code.
- blends the power and flexibility of Python with a simple template language that non-programmers can understand.
- gives template authors full access to any Python data structure, module, function, object, or method in their templates. Meanwhile, it provides a way for administrators to selectively restrict access to Python when needed.
- makes code reuse easy by providing an object-oriented interface to templates that is accessible from Python code or other Cheetah templates. One template can subclass another and selectively reimplement sections of it. Cheetah templates can be subclasses of any Python class and vice-versa.
- provides a simple, yet powerful, caching mechanism that can dramatically improve the performance of a dynamic website.
- encourages clean separation of content, graphic design, and program code. This leads to highly modular, flexible, and reusable site architectures, shorter development time, and HTML and program code that is easier to understand and maintain. It is particularly well suited for team efforts.
- can be used to generate static html via its command-line tool.
a qui va orientat (copy-paste de la web):
- for programmers to create reusable components and functions that are accessible and understandable to designers.
- for designers to mark out placeholders for content and dynamic components in their templates.
- for designers to soft-code aspects of their design that are either repeated in several places or are subject to change.
- for designers to reuse and extend existing templates and thus minimize duplication of effort and code.
- and, of course, for content writers to use the templates that designers have created.