24 horas al día, 7 días a la semana, 365 días al año*, esto es Planeta GNOME Chile

September 14, 2014

Sun 2014/Sep/14

You can try to disguise it in any way you want, but at the end of the day what we have is a boys' club that suddenly cannot invest all of its money into toys for the boys' amusement but now also needs to spend it leveling the field for the girls to be able to play too. Less money for the toys the boys like, surely that upsets them -- after all, boys were having so much fun so far and now that fun is being taken away.

The fact that the fun in this case happens to be of a socially necessary technological nature (a free desktop, a free software stack, whatever you want to call it) doesn't make this any different. If you are objecting to OPW and your argument is that it hinders the technological advance of the GNOME project, well, admit it -- isn't the fact that you enjoy technology at heart (ie, you are the one having fun) one of the main reasons you're saying this?

Male-chauvinism can take a thousand forms, and many of those forms are so well hidden and ingrained into our culture that they are terribly difficult to see, specially if you're a man and not the target of it. Once we are confronted with any of these forms, this might even give us a terrible headache -- we are in front of something we didn't even know it existed -- and it can take a tremendous effort to accept they're here. But, frankly, that effort is long due and many of us will refuse to be around those not wanting to make it.

September 10, 2014

Evince Highlighting support

So this is a quick update on Giselle post on SoC. (see here) There you could see a screencast of highlighting working but with a big lag. It turns out that the lag was related to a memory leak on the cache engine that only was triggered when doing the "animation" in the drag-and-drop of the highlighting annotation. Giselle luckily fixed this already, and I managed to spend some time adding new API to poppler to render the annotation directly, without need of reloading the page as we were force to before. Thus, we get an even smoother animation, as you can see here.

August 18, 2014

Busy and Productive Weekend


I planned to have a quite Saturday, but after check my email in the morning, I found a possible security issue reported for Monkey (1.5 onwards), it may lead to a DDoS based on the new optional FDT feature, so it was time to research and release a fix as soon as possible.

So Monkey v1.5.3 was released which include the fix for the problem reported, i also take the opportunity to include other patchs sent by the reporter, so the goal was accomplished: act transparent and quick.

Duda I/O

Also during the week i have been working in a new look & feel for Duda I/O project, you cannot imagine how hard is to create an image for a Software that don’t have a UI (yet). So the project just got 3 major things:

New logo

Duda I/O is a Stack, for hence from my perspective I think this represents it nature and simplicity:

not sure if people would love it but I am sure it will fit very well on Project T-shirts and Stickers :)

New Web Site

As the new logo arrived, was a good time to complete the new responsive web site:

Disclaimer: I bought a bootstrap template and did the adjustments, i am not a designer.

compared to the previous project site this is a major upgrade.

Google Summer of Code

We are in the pencils down phase of the Google Summer of Code program, that means most of our students are doing their final adjustments on their projects as the final evaluations may start this evening, all of them have done a very good job, they deserve the credit. More news about cool stuff that was made will be public in the incoming days.

It’s a good jurney, life is moving a lot in a positive way, in all aspects…

June 04, 2014

Monkey & Yocto Project

Now it’s official, Monkey is a participant organization of Yocto Project.

Participate in Yocto Project is not just about software recipes, it’s about a compromise to contribute to make Embedded Linux environment compliant, and as an Open Source organization there is a huge responsibility into push forward stable and innovative technology, so for us this is really good news, make strong relationships is critical to align objectives and goals.

You can read more details about this in the Monkey Blog Post here.



May 27, 2014

Monkey v1.5: Organization, Performance and Embedded

On last Sunday 25th, Monkey v1.5 was released and many things are ongoing like license changes, performance improvements, Yocto Project support and much more. For more details i invite you to read the official blog post:  

May 23, 2014

Sat 2014/May/24

I am a GNOME developer and I do not share Philip Van Hoof's views. He doesn't represent me.

April 24, 2014

Writing Servers with focus and integration

I always believed that integration and focus are a success key for any kind of thing on this life. When talking about technology and servers specifically, integration may be a fundamental part to achieve different goals like good performance. Years ago was very valuable to have a software that can work on multiple Operating Systems, but there is a point that if you want to increase your performance limits you need to look forward for integration.

In the last years, Linux have become the best choice for Servers, it’s well known that every big company trust in Linux and also commit to their development: Redhat, Oracle, Google, HP, IBM and many many others. So we can say that Linux is doing pretty well on professional Hardware, but what about user-space software ?.

If we look in the HTTP Servers (or Web Servers) context, we will find that most used solutions are made to support different platforms and on specific build-time for a specific Operating System, different approaches are used to work better, in servers performance and resources consumption are critical, and when moving those solution to Embedded even more, so every taken decision may sacrifice something, we do in OS portability.

Monkey HTTP Server and Duda I/O are written with focus on the Linux Kernel, every Unix operating system despite their POSIX API, provides extra system calls that aims to extend functionality and offer features. Of course this kind of integration have a cost which is basically: do not be portable to other Operating System, so depending of your human resources you need to decide how to invest better: we do in focus and integration, and it works great.

As a reference i would like to mention which specific features we use and i hope people who write servers or any kind of networking application would take this in count. Of course  these are dependent of specific Linux Kernel versions:

Linux 3.14

  • TCP AutoCorking: let Kernel do smart buffering when sending outgoing data, the old fashion way is to do manual Cork over sockets (more).

Linux 3.9

  • SO_REUSEPORT: be able to reuse port-addresses, e.g: multiple threads under same process can bind the same port and let the Kernel distribute load across them (more).

Linux 3.7

  • TCP FastOpen: Reduce the number of round-trip required in a TCP conversation (more).

Also other very helpful interfaces exists such as accept4(2), sendfile(2), epoll(7) and splice(2), these are not the only ones but that should be considered when writing a Server for Linux.

We are in good times where performance matters and make a good design to make distribute load across multi-core architectures is fun and challenging. Again, if you write with focus and integration will be a win:win relationship between your network server and the HW behind it.

April 11, 2014

Fri 2014/Apr/11

Igalia has opened internship positions for students, to work in tasks around WebKitGTK+. This is a great opportunity for you to become acquaintance with the WebKit project, GNOME, their communities, and also to learn about our company.

Many Igalians started their journey in the company by doing an internship during their study years and eventually came back to join us full-time, so if you are interested to join us at some point but are still in the middle of your studies, this is a great opportunity to get us to know you and have a wonderful summer.

More details in the official announcement. Applications are due on May 8th. Do not hesitate to apply!

March 25, 2014

Tue 2014/Mar/25

Today I've released GNOME Web 3.12. This release is fantastic — the result of a collective effort of GNOME developers, designers, contributors, and of the excellence that WebKitGTK+ 2.4 provides. I've usually felt pretty excited with Web releases —result perhaps of Stockholm syndrome, you'd say— but, quite frankly, I believe that anyone who has tried Web during this development cycle will agree with me that we're reaching a milestone in user-experience and maturity of the project that is far beyond anything we've done in the past. That's why I feel particularly proud of our achievements and confident that you'll love Web, too. But enough with the preamble, let's see what's new in this release.

  • One process per tab, for improved stability and responsiveness: Ever since Web started using WebKit2, we've had an architecture that allowed us to split the application into different processes. One of these processes, the so-called Web process is the one in charge of handling the web content, and is split from the Epiphany process. The advantage of this model is that, shall the web content or bugs in the JavaScript engine cause a crash, the UI will not be affected. Unfortunately, up to Web 3.10, this one web process was shared among all tabs and windows, so that a crash caused by one page would lose you all the pages in the browser.

    But since Web 3.12, and thanks to the impressive effort of the WebKit team that Carlos has led, we've moved to a different process model. One process per tab means that every tab in the browser will have its own web process, so that no unresponsive or crashing tab will have an impact on the rest of the browser. This feature is configurable, for those who might want to opt out.

  • A new and modern location/title headerbar: With the last release we started leaning in a bold direction by displaying only the location entry and getting rid of the title bar. Not everyone was immediately pleased with this choice, as for some people being able to see the page title is also important. After several rounds of design discussion, and thanks to the tireless Yosef, we finally merged a major change to the UI, which now includes a headerbar that displays the page title and location, and turns into the location entry on click or whenever the page is loading. The result is beautiful, see it by yourself!

  • The overview has been turned into an HTML page: Loren did a great job transforming the existing GtkIconView/GtkListStore- based overview into a dynamic HTML page. The advantages of this, besides serving of a good test case for UI/Web process communication and letting us getting rid of thousands of lines of code, is that the overview becomes an easily themable and animatable HTML document. Thanks to this, in no time Jakub came up with a beautiful style:

  • Most dialogs have been cleaned up and revamped: This was a result of the work started by Jon during the WebKitGTK+ hackfest. History, passwords, cookies, and other dialogs have a new face, and they all look pretty much as you'd expect from a GNOME 3.12 application.

    New history dialog

  • The incognito mode has also received a facelift: Thanks to Jon, instead of using the dark theme variant, we now have proper theming for incognito windows.

    New incognito window theming

  • Now you can configure your search engine from the preferences: Despite the popularity that DuckDuckGo has among our users, there are still people who would rather use a different search engine. Michael Catanzaro has contributed with an addition to the preferences dialog that allows users to choose the search engine they prefer, without having to resort to change their gsettings manually.

  • Many other UI improvements: including several fixes to the Downloads bar, beautiful tabs, and improved style of our about: pages.

  • And more! the gnome-shell search provider now runs in its own process, HTTPS is used by default during searches from the location entry, the user manual has been updated, and many, many, many bugs fixes, code cleanups, and other minor improvements have been made all over the place!

As you can see, Web is shinning. But this wouldn't have been possible without the effort of all the people I have mentioned already and many more. Without your patience, contributions, and above all, love for GNOME and Web, this release wouldn't be half as good as it is. Thank you all!

And to our loyal users, all that is left to say is that you can rest assured that all of this will be soon knocking at your door, when the GNOME 3.12 release sees the day later this week. We hope you'll enjoy Web and GNOME as much as we enjoyed working on it!

March 24, 2014

Mon 2014/Mar/24

Saying that external contributions to GTK+ are not so welcome is drawing a slightly short-sighted conclusion out of more complex dynamics, as the ones that govern GTK+ development, or any complex free software project, for that matter. Nonetheless, it rises an interesting question.

The truth of the matter is that dozens of patches to GTK+ get submitted in a daily basis, the GTK+ team is rather small, and it's pretty easy for maintainers to overlook some of these contributions.

But why then is it so that GNOME developers have an easier time at getting their patches in, as Olivier points out? The simplest answer to this is that, unsurprisingly, GNOME developers are hanging around in the same communication channels as GTK+ developers, usually communicate with each other in a daily basis, even if they're not working exactly in the same codebase. This closeness makes any direct request for feedback to patches pretty straightforward. Sometimes just asking for a quick review in IRC gets your patch approved in a couple of minutes.

With this in mind, it is easy to see that anyone who considers themselves to external to GNOME will probably have a harder time getting their patches in. A humble suggestion? Hang around IRC, make yourself familiar with the people who might be able to review your patches, and don't hesitate to ask for feedback to them, specially if you think that your patches are simple to review (as the ones Olivier references). This might not work 100% of the time, but surely, not only your contributions will find an easier way in, but also you'll be helping to avoid filling bugzilla with unreviewed patches.

In a larger scale the conclusion that close communication, in the context of a software project, can improve the development process is a rather obvious one. I think one needs to keep this in mind when dealing with projects whose communication channels are open to everyone.

March 18, 2014

GIT blame me: Never miss EPOLLRDHUP again

since some time ago when using a specific Duda I/O feature to connect backend servers using a custom web service, some inconsistency existed if those backends closed the connection, for some reason this ended up into the web service missing the connection close event.

This problem was detected months ago but it was not easy to determinate the root cause, it affected MariaDB/MySQL package and custom web services that use the stack event loop to be notified on sockets connected to third party servers. Last night doing some example code for a different thing the problem could be reproduced, and the steps were very simple:

  • create a TCP socket
  • make it asynchronous
  • run a connect(2) to a specific backend
  • register the socket file descriptor into the events loop interface
  • shutdown the backend server

and when a connection close notification should arrive, that never happened. This ended up in an inconsistency of a zombie TCP socket without events notifications on it. Looking around and tracing Monkey HTTP Server found the following difference:

  • when registering a new socket in the events interface, the following flags are always associated to a socket: EPOLLERR, EPOLLHUP and EPOLLRDHUP.
  • when someone change the socket direction (read to write, write to read), all flags are overwritten but on this time just EPOLLERR and EPOLLHUP were used, EPOLLRDHUP was missing!

Googling around i found this relevant comment:

A socket listening for epoll events will typically receive an EPOLLRDHUP (in addition to EPOLLIN) event flag upon the remote peer calling close or shutdown(SHUT_WR). This does not neccessarily mean the socket is dead. Subsequent calls to recv() will return any unread data on the socket and eventually “0″ will be returned to indicate EOF. It may even be possible to send data back if the remote peer only did a half-close of its socket.

The one notable exception is if the remote peer is using the SO_LINGER option enabled on its socket with a linger value of “0″. The result of closing such a socket may result in a TCP RST getting sent instead of a FIN. From what I’ve read, a connection reset event will generate either a EPOLLHUP or EPOLLERR. (I haven’t had time to confirm, but it makes sense).

There is some documentation to suggest there are older Linux implementations that don’t support EPOLLRDHUP, as such EPOLLHUP gets generated instead.

After apply the following fix, the issue have gone:

Now wondering when (and who) introduced the problem:

$ git blame src/mk_epoll.c -L362,+1
  10c3eb27 (Eduardo Silva 2011-09-15...) = EPOLLERR | EPOLLHUP;


Git blame me and lesson learned… never miss EPOLLRDHUP again.

Note: the fix have been backported to Duda-Stable-Branch 1 (DST-1), so people developing services only need to update their stable stack version.

March 14, 2014

Cargador de signo de exclamación en Atari – Decodificado

El famoso signo de exclamación

Cuando los computadores Atari recién llegaron a Chile, practicamente todos los juegos que se podían encontrar en cassette usaban el famoso cargador del signo de exclamación.  Se iniciaba la carga de cassete encendiendo el computador con las teclas OPTION + START presionadas, sonaba un beep, se presionaba una tecla y después de unos 10 segundos sonaban unos 6 “pitos” y aparecía un signo de exclamación en la parte inferior derecha de la pantalla, luego pasaban unos 10 segundos más y comenzaba a sonar la carga del juego en sí, a veces amenizada por alguna simple pantalla de presentación.

Si algo fallaba durante la carga, se debía comenzar desde cero, por lo que toda la ansiedad acumulada durante los varios minutos de carga se veía absolutamente recompensada cuando finalmente aparecía el juego en pantalla.  Posteriormente aparecieron mejores sistemas de carga aplicando “turbo” (mayor bitrate) y un mecanismo de recuperación de errores que permitía continuar la carga desde el punto de falla y así no comenzar todo desde cero.  Estos sistemas de carga avanzados merecen un artículo propio, lo que vamos a ver acá es el cargador original del signo de exclamación.

Básicamente estos sistemas de carga funcionaban así: Al iniciar el sistema, la tecla OPTION presionada indicaba al sistema operativo del ATARI que desconectara la ROM del lenguaje BASIC (su espacio era ocupado por muchos juegos), y la tecla START indicaba que se quería hacer un boot desde cassette.  Cuando el usuario presionaba una tecla después del beep, el sistema operativo del ATARI cargaba un archivo y lo ejecutaba.  En el caso de practicamente todos los juegos, este archivo era un cargador un poco más inteligente que se encargaba de cargar el juego en un formato más flexible (XEX).  Si vieramos la cinta como un esquema, sería así:

| ------- CARGADOR EN FORMATO BOOT DE ATARI -------|---------- JUEGO EN FORMATO XEX ----------|
| CARRIER - BLK1 - BLK2 - BLK3 - BLK4 - BLK5 - EOF | CARRIER - BLK1 - BLK2 - ... - BLKn - EOF |

Siempre quise saber exactamente qué hacía el código de este cargador tan simple, y por qué era tan grande (unos 640 bytes). Gracias al usuario AsCrNet de AtariWare que me envió un dump del cargador pude finalmente decodificarlo y ver qué hacía.

Formato XEX

Para que sea más fácil entender el cargador conviene entender primero cuál era el formato del archivo que procesaba el cargador, el formato “del juego”.  Este formato es conocido con el nombre XEX y tiene más o menos la siguiente estructura

|---------------- Archivo en formato XEX ------------- ...
|------ ENCABEZADO ------ | DATA |------ ENCABEZADO -- ...

Un archivo XEX son varios bloques de datos.  Cada bloque comienza opcionalmente con un marcador con la secuencia FF FF (hexadecimal), luego viene la dirección de inicio expresada como 2 bytes (INIL INIH) y la dirección de término expresada también como 2 bytes (ENDL ENDH).  Estos 6 bytes son la cabecera del bloque, luego vienen los datos propiamente tal.  Por ejemplo si el juego tiene dos bloques, uno desde 32768 hasta 40959 y otro desde 3072 a 4096 veríamos la siguiente secuencia hexadecimal

|---------------------------- Archivo en formato XEX ----------------------------|
|--------------- BLOQUE 1 ----------------|------------- BLOQUE 2 ---------------|
|--- ENCABEZADO ---|-------DATOS----------|--- ENCABEZADO --|-------DATOS--------|
|FF FF 00 80 FF 99 | 16384 bytes de datos |FF FF 00 0C FF 0F| 1024 bytes de datos|

Después de cargar cada bloque, el cargador ejecuta una llamada a la dirección apuntada por el par de direcciones 738 y 739 ($02E2, $02E3).  Si el cargador quisiese ejecutar un código durante la carga, por ejemplo para mostrar una presentación, debía poner un bloque que escribiera en esas direcciones.  Supongamos que el código que muestra la presentación está en la direcció $0A3B, entonces aparecería un bloque así:

FF FF E2 02 E3 02 3B 0A

Cuando se llega al final de la carga, se transfiere el control al código apuntado por las direcciones 736 y 737 ($02E0, $02E1) utilizando el mismo esquema recién explicado.

El cargador

El cargador tiene el formato de BOOT propio de Atari, obviamente ya que de otro modo el sistema no lo podría ejecutar.  El sistema de BOOT de Atari comienza con 6 bytes para definir el número de bloques de datos, la dirección de inicio de carga y la dirección de ejecución.  En este cargador vienen los valores (hex) : 20  05  00 07 20 07 que son interpretados como : 5 bloques cargados a partir de $0700, inicio de ejecución en $0720. Por qué suenan 6 bloques de carga y acá dice que son 5? Porque son 5 de datos y el 6to es el EOF (End of File).

Si bien la dirección de ejecución es $0720, el sistema operativo de Atari primero ejecuta lo que está a continuación de este encabezado, en este caso es lo que está en $0706.  Y ahí comienzan las sorpresas!!!

Lo primero que me llamó la atención es que eset vil cargador está protegido.  Si uno trata de ver el código directamente, no se puede a menos que se vaya revisando la ejecución paso a paso.  Lo primero que hace el cargador es automodificarse para comenzar a ejecutarse en una dirección diferente a la que viene cargada originalmente. De la siguiente forma (ordenado por legibilidad):

706  32 244   8  JSR STOPANDPATCH ; $8F4


8f4  32 207   8 JSR MOTOROFF
8f7  32 213   8 JSR PATCHJSR
8fa  96         RTS

8cf 169  60     LDA #60
8d1 141   2 211 STA 54018
8d4 96          RTS

8d5 169  32     LDA #32   ; JSR
8d7 141   9   7 STA $709
8da 169 157     LDA #157  ; $9D
8dc 141  10   7 STA $70A
8df 169   8     LDA #8    ; $08
8e1 141  11   7 STA #70B
8e4  96         RTS

Cuando se ejecuta PATCHJSR se modifica el código que se ejecutará justo después de volver via RTS en $8D4, para que salte a $089D, y qué encontramos ahí? La rutina que desprotege el resto del código invirtiendo todos los bits mediante XOR #$FF, una ténica que podríamos considerar milenaria.

A partir de ese momento, el código queda legible completamente.

No voy a analizar el detalle del cargador, pero sí me interesa destacar las siguientes curiosidades:

  • No logré identificar la parte en donde se pone el signo de interrogación en la pantalla.  Sólo veo la impresión de un caracter que limpia la pantalla.  Será el signo de exclamación un bug del sistema operativo del Atari?
  • El código de carga XEX en este cargador es HO-RRI-BLE.  Esto se debe principalmene a que está mezclada la llamada a las rutinas del sistema operativo para cargar datos desde cassette, con la interpretación de los encabezados XEX. En comparación, cargadores más modernos como CAIN (ahem!) usan una abstracción tipo stream, en donde los bytes se procesan uno a uno y la carga física de los bloques se procesa en forma independiente, como si se tratara de un sistema opaco subyacente (le puse color ah).  En todo caso, se entiende que sea así, hay que pensar que ese código debe ser de principios de los ’80, cuando muchos de nosotros no sabíamos ni ir a comprar el pan.
  • Si la carga falla en algún momento, se invoca a la rutina del sistema operativo que imprime BOOT ERROR.  Por algún motivo, en los computadores que conocí esto nunca fue así, y el sistema simplemente se colgaba.  Es probable que la dirección de rutina haya sido válida sólo para equipos antiguos (400/800) y no para sistemas operativos más modernos (XL/XE).
  • Se nota que el código fue parchado a nivel binario, ya que usaron NOP en varias partes, desactivando código.
  • Derivado de lo anterior, hay muchos accesos de 16 bit a direcciones que están en la página cero, en donde se pueden usar instrucciones especiales que direccionan con sólo 8 bits (ej, 133, 2 en vez de 141, 2, 0).
  • Si hay un cartridge insertado, aparece un mensaje en pantalla que lo advierte.  Este mensaje nunca lo había visto, y es muy probable de que hasta el momento nadie lo haya visto tampoco!  Les adjunto una captura al final de este artículo foryourpleasure.

Para quién quiera ver el detalle de cargador, les dejo los siguientes archivos en una carpeta de DropBox:

  • casboot.asm : Archivo de texto con el código del cargador. Lo decodifiqué a mano, por lo que el código no es compatible con ningún assembler.
  • dump.c : Programa en C para hacer un dump del código que me envió AsCrNet.  Al cambiar UNPROTECT a 1, se aplica el XOR #$255 para desproteger el código
  • casboot.atr : Imagen de disco que contiene un pequeño programa en BASIC que hice para saber cómo se vería el mensaje del cartridge insertado (cartmsg.bas)

PD1 : La imagen del cargador que encabeza este artículo es un fake.  Fue lo más rápido que pude hacer.

PD2 : Por algún motivo se borró la mitad de este artículo mientras lo estaba creando. Lo tuve que hacer de nuevo. NOT FUN.

PD3 : Ningún juego fue dañado durante la creación de este artículo.

ACTUALIZACIÓN: Gracias a los aportes de Guillermo Fuenzalida y ArCrNet finalmente fue resuelto el enigma del signo de exclamación.  Cuando el cargador imprime el caracter de limpiar pantalla, lo hace con el siguiente código:

765 169 125     LDA #125   ; CLEAR SCREEN
767 32  164 246 JSR PRINT  ; $F6A4

Sin embargo la rutina del SO para imprimir en $F6A4 sólo es válida para la ROM de la generación Atari 400/800, porque en la ROM de los Atari XL/XE se encuentra en otro lugar.  Según Mapping the XL/XE:

Many 400/800 programs made direct jumps to keyboard ‘get’ and ‘put’ routines rather than through the proper vectors, which makes them incompatible with XL/XE machines. The get routines in the XL/XE begin at 62026 ($F24A). This was 63038 ($F63E) in the 800. The put routines begin at 62128 ($F2B0). or 63140 ($F6A4) in the 800. If you have a program which won’t work on your XL/XE, try finding if it uses these locations and change them.

Por lo tanto, el famoso caracter “!” de este cargador aparece debido a un bug sin mayores consecuencias.  Para comprobarlo, modifiqué la llamada a $F6A4 y la cambié por $F2B0 y efectivamente, se limpia la pantalla y no aparece el caracter “!”.  Lo mismo demostró ArCrNet usando el cargador en un emulador con la ROM del 400/800, nada de signo de exclamación.

Cartridge insertado

Mensaje que aparece si hay un cartridge insertado


October 30, 2013

Anotaciones PDF en Poppler GLib

El fin de pasada estuve con el ánimo de terminar el soporte de anotationes en documentos PDF en Poppler GLib.

Para aquellos que no lo sepan, Poppler es la biblioteca utilizada por Evince (y por extensión Documents [vaya nombre]) para desplegar el contenido de documentos PDF. Cualquier mejora visual o de rendimiento en Poppler se ve automáticamente reflejado en Evince.

Partí por restructurar poppler-glib-demo para que fuera más sencillo agregar y probar múltiples tipos de anotaciones (el código estaba muy ligado a las anotaciones de texto, aquellas que parecen notas amarillas Post-it). Después de revisar el código fuente de anotaciones de Poppler, decidí implementar las anotaciones de líneas (sólo las simples), luego cuadrados y círculos; y, finalmente, marcado de texto (resaltado, subrayado, subrayado ondulado, tachado).

Aquí un video que muestra el progreso hasta el momento.

En el código de la demostración, yo no dibujo directamente en una superficie cairo, sino que añado la anotación a la página, la actualizo según el movimiento del puntero mientras está el botón presionado y le pido a Poppler que despligue el PDF resultante. Lo bueno de este enfoque es que se ve el resultado final del documento PDF mientras es modificado interactivamente. Lo malo es el potencial costo en rendimiento en aquellos documentos donde Poppler es lento de desplegar.

Si ya tienes compilado Evince con lo típico de jhbuild, entonces basta seguir unos simples pasos para probarlo:

$ cd /to/your/jhbuild/checkout
$ git clone
$ cd poppler
$ git checkout annot-demo-fixes
$ jhbuild make
$ jhbuild shell poppler/glib/demo/poppler-glib-demo <pdf-document>

Los futuros pasos son: mejoras las anotaciones en Evince, editar y mover anotaciones, añadir más tipos de anotaciones y pulir.

Mi motivación para hacerlo es que Evince es una aplicación crítica para mí. Leo muchos documentos PDF y también produzco algunos. Para anotar documentos he estado usando ezPDF Pro (para Android), conveniente pero no es Software Libre y no me sirve en el escritorio, donde paso la mayor parte del tiempo. El visor de Mendeley es lo más cercano a mis necesidades, pero tampoco es Software Libre. Scholiar (un derivado de Xournal) es bueno para anotar en documentos, pero guarda realmente las anotaciones como tales en los documentos PDF, sino que las funde con el resto del contenido (me imagino como formar de suplir las carencias de Poppler GLib). Así que espero tener otro fin de semana similar para terminar lo que falta.

April 16, 2013

Building evince with jhbuild under a fresh install of Ubuntu 12.04

In the last year or so, Jhbuild has received a lot of  love and know it is much easier to use (for the first time) than it used to, but how much? Since Google Summer of Code is coming, I wondered whether was easy for a person with no experience building GNOME to build Evince. It turns out it is not that trivial, although it is quite better than the first time I managed to compile Evince using jhbuild.  Since the Jhbuild manual seems to be still a little outdated, I publish here the steps I needed, on a fresh install of Ubuntu 12.04.

  1. Install all the things jhbuild won't install for you. 
    $sudo apt-get install build-essential
    $sudo apt-get install git
    $sudo apt-get install gettext xsltproc docbook-xml docbook-xsl
    $sudo apt-get install apt-file autopoint
  2. Install jhbuild from git (if you have previously installed from apt-get, use apt-get remove jhbuild to remove it)
    $git clone git://
    $cd jhbuild
    $make install
    $echo PATH=$PATH:~/.local/bin >> ~/.bashrc
  3. Prepare your first .jhbuildrc config file.
    $cp examples/sample.jhbuildrc ~/.jhbuildrc
  4. Edit ~/.jhbuildrc file
    • Search for the line starting with "prefix" and change the directory to a writable one (the default /opt/gnome is not writable by default on ubuntu it seems)
    • For evince, you need to add the following lines to ~/.jhbuildrc
      module_autogenargs['evince'] = autogenargs + ' --enable-debug --disable-nautilus'
  5. Install dependencies using the new "sysdeps" command of jhbuild
    $jhbuild sysdeps --install
  6. Building evince
    $jhbuild build evince --ignore-suggests --nodeps
NOTE: For the time being, this will give you an error because jhbuild won't compile libsecret when compiling using --ignore-suggests. See this bug for more info. If it fails for you with a LIBSECRET not found error, then start a shell, do
$jhbuild buildone libsecret

and then resume the compilation of evince. If you want, you could do, at this stage
$jhbuild buildone evince
to trigger just the compilation of evince and NONE of its dependencies.
We use --ignore-suggests to ignore compiling a lot of modules that are not really important for developping with evince.
If everything goes right, you should have evince 3.8 compiled. If you want master, you need to choose the "gnome-suites-core-3.10" moduleset

April 09, 2013

Apache2 + SSL en ambiente de pruebas

Tiempo atrás escribí este documento (para cuando era Apache1.3), ahora lo actualicé para Apache2 en Debian7. Si a alguien le interesa se los comparto Apache2_SSL.

March 19, 2013

Aclaraciones sobre el acceso a mi colección de videos y música simplificado

Con la publicación de mi artículo sobre cómo simplifiqué el acceso a mi colección de videos y música, tuve varias conversaciones con personas que habían hecho algo similar, y como en los asados, cada uno tiene su propia y “mejor” forma de hacer las cosas.

Para los amigos que aun están en la etapa de ver cómo hacerlo, quiero hacer algunas aclaraciones para ayudarlos a entender mi experiencia y el por qué de algunas decisiones que tomé en la implementación.

Creo que lo primero que conviene saber es qué es lo que ya había probado (y no era suficiente).  Por ejemplo muchas de las soluciones que me indicaron del tipo “pero es más fácil si …” eran justamente lo que tenía como punto de partida, y quería mejorar.

Implementación original

Incialmente tenía un Zotac Mag con XBMC conectado a uno de los televisores.  Este equipo tenía parte de mi contenido en su disco duro, y el resto lo leía desde una biblioteca compartida en otro PC via red.  Este es el equivalente a tener por ejemplo un computador con una biblioteca de iTunes compartida y un AppleTV o un Mac Mini conectado al televisor actuando como reproductor.

Esta solución tiene varios problemas para mis necesidades personales:  Uno es que necesitas tener al menos un equipo siempre encendido, en este caso el que comparte la biblioteca (sea iTunes u otro), y si es un Apple, necesitas además tener un reproductor Apple por cada televisor.  Si no es Apple, pues es lo mismo que ya tenía con el Zotac Mag.  Por otra parte, el contenido del disco del Zotac Mag no podía ser compartido fácilmente.

Mientras tanto, el segundo televisor no tenía nada conectado, y la única forma de acceder al contenido era sacando el disco USB con mi biblioteca para conectarlo directamente al PC.  Engorroso si son las 2AM o estás compartiendo un buen momento con otra persona. Ni hablar si eso implicaba copiar archivos o que el televisor no pudiera reproducir los archivos.

Pensé en algún momento conseguir otro equipo como reproductor, pero en el camino y por otros motivos, me hice de un GoogleTV y un AndroidTV, ambos con capacidad de reproducir contenido via DLNA.

Entra el NAS

Para eliminar el equipo que siempre está encendido, fue donde recurrí al NAS.  También es un equipo que siempre está encendido pero tiene ventajas bien interesantes:  Su consumo de energía es mínimo, es un server puro (no hay capacidad ociosa), y ocupa tan poco espacio que es como si no existiera.

Aca pueden ver una foto del NAS, y para apreciar su reducido tamaño, le puse encima un DigiPass, que es del porte de un llavero.


NAS junto a un DigiPass

Tener el NAS es como si mi biblioteca estuviera simplemente “en la red” de mi casa.  Es tan pequeño que el router motorola de VTR parece una torre al lado de él.  Lo único molesto es su led rojo cuando está encendido, pero se nota sólo si la pieza en donde está tiene todo apagado.  Tampoco tiene ventiladores, por lo que es absolutamente silencioso.

Los reproductores

Para la reproducción de video, independiente de que ocupara XBMC, un computador con VLC, un televisor Smart, GoogleTV, Android TV, etc, el denominador común siempre terminó siendo DLNA.  Es más, en el televisor Smart sólo enchufas el NAS y te aparece lo que muestra la foto de abajo.

NAS en LG Smart TV

NAS en LG Smart TV

Una de las críticas a mi implementación era que era “muy hacker”.  Pero las “hackers” de mi casa no tienen mayor problema presionando el botón “input” para seleccionar el NAS.

Acá hay una captura de lo que se ve cuando selecciono el NAS en el televisor.

Selección de videos del NAS en LG SmartTV

Selección de videos del NAS en LG SmartTV

Por el lado del televisor “no smart”, este ya se encontraba conectado a un GoogleTV. Lo único que me costó fue decidir qué aplicación usar para acceder al NAS, y justamente escribir este artículo es para ahorrarles ese tiempo. Basta instalar MediaHouse desde Google Play, seleccionar el NAS y listo, verán las mismas carpetas que se ven en la foto.


El no poder reproducir el contenido por encontrarse en un formato no procesable por los reproductores es algo que sólo se puede evitar conectando un computador con XBMC o VLC al televisor, en donde la disponibilidad de codecs es infinita.  Pero eso es volver al punto de inicio, cuando ya tenía el Zotac Mag con XMBC.  Lo mismo sería conectar un Mac Mini o un AppleTV, es volver al punto de inicio del que quería escapar.

La transcodificación tiene sus pro y sus contras. El principal contra es que es un proceso lento, dependiendo del computador puede tomar unos 10 minutos por hora de video.

A su favor tiene varias cosas, sobre todo considerando que el video se transcodifica sólo una vez. Vamos viendo:

  • El archivo resultante generalmente es más pequeño que el original, dependiendo del bitrate seleccionado.  Por ejemplo muchos DVD’s de 4.7GB terminan convertidos en archivos de 500MB con la misma calidad aparente.
  • Se puede integrar en un solo archivo el video con sus subtítulos, nada de andar con los archivos sueltos por ahí
  • Muchos de los videos en HD que pululan en la red ya están en el formato correcto (MKV/H.264), no hay que transcodificarlos
  • El archivo SIEMPRE funcionará en todos los dispositivos.  Aquí your mileage may vary porque depende de tus dispositivos.
  • En mi caso, la mayoría del contenido que estoy moviendo al NAS lo tengo originalmente en DVD, por lo que la transcodificación es INELUDIBLE.  Por otro lado, la ganancia en espacio físico es altísima, ya que el CD/DVD se puede descartar una vez transcodificado.

Lo que no se vió

Hay una parte del proceso que quizás confundió a algunos que lo encontraron “muy hacker” y fue la actualización del firmware para instalar Snake OS.

En la realidad, los “complejos” pasos fueron:

  • Conectar el NAS a la red
  • Encenderlo
  • Abrir la página web de administración (como si fuera un router)
  • Seleccionar el archivo con SnakeOS y darle Aceptar
  • Esperar a que terminara la instalación y posterior reinicio.
Video en 1080p corriendo sobre LG SmartTV conectado al NAS

Video en 1080p corriendo sobre LG SmartTV conectado al NAS

Los costos

La parte de costos no es menos importante.  No me gusta llenarme de equipos con capacidades que no voy a usar, y si puedo reutilizar algo que ya tengo, mejor aún.  Por otro lado me si voy a gastar en algo, tiene que ser proporcional al uso que le voy a dar.  Como a veces le digo a mis amigos, para qué quiero un auto caro si pasará casi todo el tiempo estacionado.

Esto era lo que ya tenía antes de comenzar esta implementación:

  • 1 Televisor con soporte de DLNA
  • 1 Televisor sin soporte de DLNA
  • 1 Google TV enchufado al televisor sin DLNA
  • 1 Disco duro de 500GB que me sobró cuando le cambié el disco al Mac Mini
  • 1 Red Wifi :-P

Estos fueron mis costos en hardware:

  • 1 NAS : USD$40
  • 1 Adaptador para el enchufe : USD$1

Total : USD$41 (unos CLP$20.500)

Mis costos en horas hombre (aproximado):

  • Actualización del Firmware : 5 minutos considerando lo que tuve que leer

También hay costos del “noviciado” y que se evitarán con este par de artículos sobre el tema. No tengo estimaciones ni tampoco interesa mucho, porque no tendrán que pasar por eso nuevamente:

  • Reformatear disco NTFS a EXT
  • Buscar solución al problema de Mac OSX con versiones antiguas de SMB
  • Probar el codec que funcionara mejor, junto a su configuración

A modo de comparación de costos, aquí están los costos calculados de las alternativas “más fáciles”, pero que tenían el pequeño inconveniente de ser iguales a mi problema original, el que ya tenía solucionado:

Alternativa 1:

Time Capsule + 1 Mac Mini por cada televisor, o sea 2 Mac Mini

  • 2 Mac Mini = 2 * CLP$384.000 = CLP$768.000
  • 1 Time Capsule para alojar la biblitoeca (2TB) = CLP$192.000

Costo total sólo en hardware : CLP$960.000

Una diferencia de un 4.800% con el costo de mi implementación.

Alternativa 2:

1 Mac Mini + 1 Apple TV por cada televisor, es decir, 2 Apple TV

  • 2 Apple TV = 2* CLP$76.000 = CLP$152.000
  • 1 Mac Mini  = $384.000

Costo total sólo en hardware : CLP$536.000

Una diferencia aproximadamente de 2.600% con el costo de mi implementación.

Además hay que agregar que con un sistema basado en Apple no podría acceder al contenido desde los 2 computadores con Linux que además se usan en la casa, ni los Android’s.

En mi caso personal también podría descontar el Mac Mini, porque hay uno.  Pero ni loco lo dejaría encendido 24×7.  Aún así la implementación sería un 700% más cara que lo que conseguí finalmente.

February 03, 2013

Add Color to your Life, Add color to your Terminal OSX

Trabajar con un terminal en Linux es muy agradable dado a que es muy fácil diferenciar los archivos de las carpetas por sus colores, pero a la hora de abrir un Terminal en OS-X nos damos cuenta que esos colores no existen por lo que se hace fundamental agregar colores para hacer mas agradable el trabajo.
Terminal sin Colores

Lo siguiente es abrir el Terminal y escribir lo siguiente:

sudo nano bash_profile
A continuación copiamos y pegamos el siguiente texto:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
Luego para guardar los cambios Ctrl + O 

Reiniciamos el Terminal y vemos los cambios.

Ahora para entender un poco la asignación de colores en:

export LSCOLORS=GxFxCxDxBxegedabagaced
Asignación de colores:
a black
b red
c green
d brown
e blue
f magenta
g cyan
h light grey
A bold black, usually shows up as dark grey
B bold red
C bold green
D bold brown, usually shows up as yellow
E bold blue
F bold magenta
G bold cyan
H bold light grey; looks like bright white
x default foreground or background

Y el orden de los atributos:
1. directory
2. symbolic link
3. socket
4. pipe
5. executable
6. block special
7. character special
8. executable with setuid bit set
9. executable with setgid bit set
10. directory writable to others, with sticky bit
11. directory writable to others, without sticky bit

Si quieres personalizar los colores, por Ej: que tus directorios sean de color Azul, es tan solo reemplazar   el primer carácter por E.

export LSCOLORS=ExFxCxDxBxegedabagaced
Guardamos Ctrl + O, reiniciamos el terminal y veremos los cambios efectuados.
Terminal con los directorios de color Azul.

De esa manera puedes agregar y personalizar colores de un Terminal en OSX.

December 27, 2012



testing gnome-blog

testing gnome-blog with gtk3 and gsettings.

gnome-blog home


Portando gnome-blog a gtk3.

Como muchas otras aplicaciones, ésta también necesita ser migrada a GTK3. Y como en otras migraciones, también es necesario portar de gconf a gsettings. Es el caso de gnome-blog, que necesita de tal tarea. El bug es éste.

He realizado ya los cambios principales y la prueba es éste post (que espero que aparezca :D ).

Los cambios hechos son:

+ paso de pygtk a pygobject.

+ paso de gconf a gsettings. (creación de su esquema y eliminación de gconf)

+ pruebas con MetaWeblog Protocol. (el resto de los protocolos hay que testearlos)


+ Drag and Drop para las imágenes.

+ Pruebas en otros equipos.

Unas pruebas… (

Screenshot from 2012-12-27 15:52:27 Screenshot from 2012-12-27 15:54:49


aaaa aaaaaa aaaaaa aaaaaaaa

December 03, 2012

Día GNOME 2012

El pasado Sábado 27 de octubre, se llevó a cabo el Día GNOME 2012 en la ciudad de Curicó, Chile.

La asistencia fue espectacular y gracias al auspicio de la GNOME Foundation se pudo seguir con la costumbre de entregar a cada uno de los asistentes un pequeño almuerzo y así poder compartir entre todos los asistentes y continuar con el espíritu del Software Libre.

November 18, 2012

Tiling rendering in Evince

One of the oldest bug in evince is the ability to zoom-in a large scales, like 1600% or more. This happens because the Cache that render the pages can only render full pages and rendering full pages at large scales eats a lot of memory. So some days ago I started to work on making the cache in evince "tile" aware, that is, to render only portions of a full page. I am happy to say that a preliminary result can be found in
my evince repo in github ( in the wip/tiling_manager branch. Right now a lot of things still don't work, but tile rendering in single and continuous mode are working (not in dual mode yet)...

In the video above, you can see evince rendering a page using 256 tiles. The red tiles only appear while there is no rendered tile, and are just there to test the code.

Note that the rendering 256 tiles is quite slow because Poppler will reparse the pdf file each time we render a tile... So why bother? In fact, the video is only for ilustration, ideally evince will use tiles of the size of the screen or around that size, so you only get to see a few tiles at a time. The main advantage of this code is that now we can easily implement larger zoom modes. The next picture shows Evince running the Pdf 1.7 reference document at 1600% using 256 tiles for each page. Memory used by evince is around 150 M with this.

Unfortunately, there are a lot of things that still don't work...selections, dual_page mode, and other... Also since this is a main refactor/rework of the Cache code, it will need a lot of testing and review before it gets merged into master (as new code it is likely to have more bugs and we don't want to evince to be unstable) ... but we are right in the begining of the 3.7 cycle, so I hope I can get this merged into evince 3.8.

February 10, 2012

That's why Windows Movie Maker is so popular

Bajar videos de Youtube en Linux, a pesar de haber miles y miles de aplicaciones, no encuentro absolutamente ninguna que me caliente lo suficiente (sic) como para usarla por un tiempo. Use abby en Ubuntu 11.04, pero debido a un grave problema mental de la aplicacion, dejo de funcionar para bajar videos de Youtube (LP #784724).

Despues de estar casi dos horas cepillando para poder bajar y convertir en MP4 dije el tipico "stop". Mas bien fue un "estas puro hueveando"

Volvamos a la consola. Necesitan cclive y umph.. No saquen ninguno de los repositorios de su distro, por que ambos estan quebrados. CClive desde fuente y Umph tambien.

En el caso de umph van a necesitar algunas bibliotecas de Perl (Getopt::ArgvFile, XML::DOM y Umph::Prompt, conseguibles en su CPAN favorito). Ambos deben andar.

Y, la receta magica. Yo al menos soy fan del canal de videos de ScienceOnline, sobre todo por que gastar 5 minutos en aprender algo, no es perder el tiempo ;-) Asi que para bajar el feed entero... (si, completo)

$ umph -a -t u ScienceOnline | cclive

Antes, claro, dense una vuelta para ver los formatos soportados. Usen esto para mostrar los soportados del video:

$ cclive --query-formats
fmt05_240p|fmt18_360p|fmt34_360p|fmt35_480p|fmt43_360p|fmt44_480p :

El formato de mas de la derecha es 480p.

Ahora, corrigiendo el primer llamado...

$ umph -a -t u ScienceOnline | cclive -f fmt44_480p

La hombria no me llego a tanto como para convertirlos a MP4 dentro de la misma linea.

Bitch-ass motherfucking update!

$ umph -a -t u ScienceOnline | cclive -f fmt44_480p --exec "ffmpeg -i '%f' '%f.mp4'"

No es la gran cosa, pero siento que esto se esta convirtiendo cada vez mas en rocket science.
A todo esto, algun editor de video en Linux similar a WMM? Openshot me sirve, pero agregar un texto SIN TENER QUE USAR EL MALDITO BLENDER...digamos que no es de mi agrado.

February 02, 2012

Just something that I may not forget

Handbrake-CLI. You're awesome.

--start-at duration:150 --stop-at duration:300

O bien

--start-at frame:2000 --stop-at frame:5000

Y mi receta personal:

HandBrakeCLI -e x264  -b 2500  -a 1 -E faac -B 160 -R Auto -5 -2  -D 0.0 \
-f mp4 -m -x rc-lookahead=50:ref=1:bframes=0:subme=6:trellis=0 \
-i inputfile.fmt -o file.avi

December 28, 2011

This is the most strange ransom note I've ever done...

Disculpen que mande este post desde Paranal, pero desafortunadamente (duh) no estoy en Santiago para hacer efectivo esto de forma inmediata.

Exhibit A : Nerdom

Bueh, para los que no estan enterados, me llego de sorpresa (si, claro) una PS3 Slim 160 GB. Algo mas que agregar a mi nerdom.

La cosa es la siguiente : ya tengo (mas de una). Asi que mi decision es rematarla. Podria cobrar lo que sale una de esas nueva (esta esta en near-perfect-mint status, o sea, salio de la caja un par de veces), o bien cambiarla por algun item/itemes de similar equivalencia monetaria.

Los interesados, email a <bidps3 at> dando su oferta. O en el quebrado sistema de comments que tengo en la pagina.

Y apurense, ya hay interesados...

I saved it from his cold dead hands

November 17, 2011

Expolibre 2011

Como ya es tradicional, GNOME se hará presente en este importante evento de la región del Maule.

El sitio del evento es :

October 12, 2011

About a trip to Canada, or Montreal Summit

So in the last two weeks I have been for the first time in Canada. I was first some days at the Banff Centre, which is awesome, and spent last weekend in Montreal for the GNOME Montreal Summit.

This was my first international GNOME (no)conference, and it was great to finally meet people like Colin, Owen, Ryan, Cosimo, Karen, etc.

I discussed and asked a lot of questions to Ryan, Cosimo and Colin about some ideas of the future of Evince related technologies. For instance, we agreed with Cosimo that it probably makes sense to have a evince-based plugin for your browser (finally!!) because it could be better for the workflow where you don't
want to download the document (and you don't need to). I also asked Ryan and Colin for ways of making evince safer by splitting the rendering code into a sandboxed process. And I asked many other things with cosimo about evince, gtk, css.

I also participated in some sessions like the jhbuild session, the GSoC session, and I even organized a short session about online metadata for our desktop. Although not many people were excited about my ideas, it was nevertheless great to have the feedback of many talented hackers in GNOME.

I also discussed with Andreas the idea of getting some cool Laptop Skins with GNOME designs, so hopefully he will get some cool designs soon, and with Marina I discussed about Women outreach and how the gnome-chile community is working to promote GNOME and all these programs.

Overall, it was really great for me to meet all the prople, and I thank all the people i met for all their feedback, surely I have now a lot of ideas about how to improve evince... if only i would have more time. The GNOME Foundation for sponsornig my trip and to an anonymous friend for letting me crash at his couch on Montreal.

Time to go into the plain.... some 10 hours ahead to be back in a sunny Santiago again

October 06, 2011

El mundo sin Steve Jobs

Y llegó el día que no queríamos que llegara, se ha ido Steve Jobs. Para muchos es un genio, y para otros un tirano, lo que no queda en duda es su aporte a la vida moderna: Tienes que vivir en una caverna para poder decir que la influencia de Steve no afecta tu vida diaria.

Puede no ser el inventor de muchas cosas, pero esas invenciones probablemente estarían perdidas en un laboratorio o hubiesen sido una curiosidad tecnológica sin la visión y el liderazgo de Steve. Se necesita alguien que sea capaz de alinear a los expertos técnicos y comerciales – muchas veces rock stars que son muy difíciles de manejar – sólo así puedes sacar adelante productos y conceptos como los que hoy atribuimos a Steve.

A modo de homenaje, recordemos cómo era o sería el mundo sin Steve Jobs.

  • Antes de Apple los computadores estaban destinados a hacer cálculos balísticos o financieros, costaban una fortuna y se necesitaban expertos para manejarlos.  La gente normal “no necesitaba computadores”, ya que no había nada que hacer con ellos.  Steve Jobs creía que lo computadores podían darle poder a la gente normal, y afortunadamente fue capaz de convencer al genio de Steve Wozniak de que esa idea tenía sentido.
  • Antes de Apple los computadores se manejaban con comandos crípticos, todo se realizaba por medio del texto, tanto las instrucciones que se le daban al computador, como la propia respuesta del computador a esas instrucciones.  Steve conoció en los laboratorios de Xerox el concepto de la interfaz gráfica y el ratón, el problema era hacer que esa tecnología funcionara en las limitadas capacidades de los computadores personales que Apple podía producir, a un costo razonable.

Procesador de Texto WordStar sobre CP/M

  • Antes de Apple la música digital sólo se podía obtener de forma ilegal.  Los músicos estaban condenados a ser pirateados o seguir siendo abusados por los sellos discográficos.  iTunes demostró que había un mercado para la distribución de música en formato digital, y que la red no servía sólo para piratear.  En poco tiempo se convirtió en el primer canal de distribución de la música, dejando atrás a los medios tradicionales.
  • Antes de Apple tenías que seleccionar qué musica llevabas contigo, a menos que quisieras andar con un bolsito en tu mochila.  Apple logró poner horas y horas de música en tu bolsillo, incluso en el bolsillo más pequeño de tu pantalón con el iPod Nano.  Como si esto fuera poco, incorporó una sencilla interfaz de usuario basada en una ruedita tactil desde donde puedes realizar todas las operaciones que necesita el dispositivo.
  • Antes de Apple la producción musical estaba estrictamente reservada a grandes estudios, con equipos carísimos basados en hardware.  Si bien Apple no inventó el concepto, ni la tecnología directamente, tenía un computador y un sistema operativo suficientemente fiable y poderoso para que empresas como Digidesign creyeran en que los computadores podían ayudar a tareas de edición, grabación, mezcla y postproducción musical.  Gracias a esta simbiosis, hoy puedes tener un estudio musical en tu casa.

Reproductor de MP3 RIO

  • Antes de Apple los teléfonos inteligentes tenían muchos botones, carecían de aplicaciones y servían para ver planillas de cálculo o leer correos electrónicos.  Se manejaban con un lapiz y su interfaz de usuario imitaba a la interfaz de un sistema de escritorio, con menú de inicio incluido.  Hoy todo smartphone trata de imitar al iPhone de Apple de alguna forma, ya sea por su pantalla táctil, su único botón o su interfaz gráfica basada en lanzadores de aplicaciones que corren a pantalla completa.
  • Antes de Apple los desarrolladores de software necesitaban una fuerte inversión para llevar sus productos al mercado, si es que lograban obtener algo de notoriedad.  Por otra parte los usuarios tenían que salir a buscar el software “a la calle”, sin que nadie asegurara la calidad del software disponible.  Junto con el iPhone, no sólo se creó un sistema operativo que hoy es un referente respecto al software base y ambiente que se debe proveer a los desarrolladores, sino que también achicó la brecha existente entre éstos y sus usuarios.  El AppStore hizo millonarios a muchos, permitió que la distribución de las aplicaciones se democratizara, y al mismo tiempo permitió que los usuarios lograran tener acceso a software de calidad en un solo lugar.  Hoy todas las compañías tratan de tener su propio AppStore.

IPaq - Smartphone de HP

  • Antes de Apple la televisión sólo servía para… ver televisión.  Aunque nunca ha sido un éxito, el AppleTV abrió las puertas para ver la televisión de otra forma.  AppleTV convirtió a los televisores en un dispositivo más conectado a Internet.  Pese a sus problemas de comercialización, y desencanto en la propia compañía, hoy los SmartTV son un lejano descendiente de este concepto.
  • Antes de Apple los tablets eran unos computadores que no tenían mayor gracia que permitir tomar notas con un lapiz stylus.  Se trataba de notebooks con un teclado escondido, en donde el sistema operativo y su interfaz eran iguales a lo que podemos encontrar en los escritorios.  El iPad de Apple demostró que esa dirección estaba equivocada, y no se trataba simplemente de un notebook (o netbook) sin teclado, sino que se trataba de un computador con raza propia.  Eliminó el stylus, y adaptó la interfaz de usuario para ser usada sólo con los dedos.  Al igual que con el iPhone, hoy todos los tablets se quieren parecer al iPad, pero ninguno cuenta con el nivel de terminación y el ecosistema de aplicaciones que distingue al iPad.

Sketch de Mickey Mouse

  • Antes de Apple el navegador más usado en el mundo era el nefasto Internet Explorer.  Si bien Mozilla logró que los más techies impulsaran una alternativa de calidad en el mundo de los navegadores, fue Apple quien tomó KHTML (KDE) y lo convirtió en una competencia en el mundo del usuario común y corriente al incorporarlo en sus productos estrella a través de Safari.  Con esta incorporación se le terminó la excusa a los desarrolladores de que sólo valía la pena probar que sus creaciones sólo funcionaran en Internet Explorer.
  • Antes de Apple, el sistema operativo Unix era sólo para privilegiados expertos.  Aunque en Linux se han hecho intentos por llevar esta tecnología a los usuarios “de a pie”, fue Mac OSX el que logró construir todo lo que hacía falta para llevar este sistema al público. Sus distintas tecnologías que agregan valor a Unix y lo convierten en un producto de lujo, han sido imitadas tanto por Linux como por Windows con años de retraso.
  • Antes de Pixar – otra de las empresas con el sello de Steve – se necesitaban grandes ejércitos de dibujantes para crear películas animadas.  Steve ayudó a John Lasseter a convertir el sueño del cine animado por computadores en una realidad.  Lasseter despreciado por Disney y más tarde abandonado por George Lucas tuvo la suerte de encontrar en Steve a alguien quien creía que el mundo del cine podía ser distinto, así nació Toy Story y el cine cambió para siempre.

Seguramente se me quedaron cosas en el tintero, pero con lo expuesto ya es suficiente para entender el peso de Steve Jobs en nuestra vida, de alguna forma trajo el futuro a nuestro presente.

Te extrañaremos Steve.


September 30, 2011

Encuentro Linux y Dia GNOME 2011

Después de un largo tiempo sin postear en mi querido y olvidado Blog, Este año se realiza el Encuentro Linux 2011 el día 20 y 21 de octubre en la universidad Austral de Chile en Puerto Montt. Este evento esta organizado por el grupo de usuario de Linux Puerto Montt GULIPM y la Escuela de Ingeniería en Computación que también se suma en esta organización. Ademas que hay que mencionar que el Este Encuentro Linux cuenta con una frase que salio de un concurso abierto.

"Naciendo Libres, Aprendiendo en Comunidad"

Sin duda al igual que en anteriores Encuentros tenemos expositores de Gran trayectoria en el mundo del Pinguino Toda la Información la puedes obtener en

Dia GNOME 2011

Como ya es tradición el Día GNOME se realizara dentro del macro del Encuentro Linux el Día 22 de Octubre para asistir tan solo te tienes que registrar en Ahora si quieres difundir el Día GNOME puedes usar los banners disponibles.

Siéntete Libre de poder usar, modificar o difundir este evento en tu Blog, wiki, Twitter, Facebook etc. Puedes encontrar el SVG. Aqui Nos vemos en Octubre en Puerto Montt.