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

May 05, 2016

I got a C.H.I.P! (9USD Computer)

Some weeks ago I attended the Embedded Linux Conference in San Diego, I’ve participate from the Showcase demonstrating Fluent Bit and a non-longer-secret-project that runs on top of it, more news in the incoming weeks.

The guys from NextThing Co were around giving for free C.H.I.Ps, for who’s not aware about what it is, the C.H.I.P is a 9USD ARM Embedded Computer, it’s pretty neat!

As soon you power up the device through the micro-USB, you can access the serial console and start playing with it; it comes with Debian 8, Wifi (AP mode supported), 512 MB Ram, 1GHz Processor, 4GB storage…within others (and for 9 dollars!). Definitely you should consider to get one!

I am putting my hands on to make packages now for Fluent Bit and Monkey HTTP Server

February 08, 2016

Mon 2016/Feb/08

About a year ago, Igalia was approached by the people working on printing-related technologies in HP to see whether we could give them a hand in their ongoing effort to improve the printing experience in the web. They had been working for a while in extensions for popular web browsers that would allow users, for example, to distill a web page from cruft and ads and format its relevant contents in a way that would be pleasant to read in print. While these extensions were working fine, they were interested in exploring the possibility of adding this feature to popular browsers, so that users wouldn't need to be bothered with installing extensions to have an improved printing experience.

That's how Alex, Martin, and me spent a few months exploring the Chromium project and its printing architecture. Soon enough we found out that the Chromium developers had been working already on a feature that would allow pages to be removed from cruft and presented in a sort of reader mode, at least in mobile versions of the browser. This is achieved through a module called dom distiller, which basically has the ability to traverse the DOM tree of a web page and return a clean DOM tree with only the important contents of the page. This module is based on the algorithms and heuristics in a project called boilerpipe with some of it also coming from the now popular Readability. Our goal, then, was to integrate the DOM distiller with the modules in Chromium that take care of generating the document that is then sent to both the print preview and the printing service, as well as making this feature available in the printing UI.

After a couple of months of work and thanks to the kind code reviews of the folks at Google, we got the feature landed in Chromium's repository. For a while, though, it remained hidden behind a runtime flag, as the Chromium team needed to make sure that things would work well enough in all fronts before making it available to all users. Fast-forward to last week, when I found out by chance that the runtime flag has been flipped and the Simplify page printing option has been available in Chromium and Chrome for a while now, and it has even reached the stable releases. The reader mode feature in Chromium seems to remain hidden behind a runtime flag, I think, which is interesting considering that this was the original motivation behind the dom distiller.

As a side note, it is worth mentioning that the collaboration with HP was pretty neat and it's a good example of the ways in which Igalia can help organizations to improve the web experience of users. From the standards that define the web to the browsers that people use in their everyday life, there are plenty of areas in which work needs to be done to make the web a more pleasant place, for web developers and users alike. If your organization relies on the web to reach its users, or to enable them to make use of your technologies, chances are that there are areas in which their experience can be improved and that's one of the things we love doing.

February 04, 2016

Thu 2016/Feb/04

We've opened a few positions for developers in the fields of multimedia, networking, and compilers. I could say a lot about why working in Igalia is way different to working on your average tech-company or start-up, but I think the way it's summarized in the announcements is pretty good. Have a look at them if you are curious and don't hesitate to apply!

Puente Johnson de noche

Puente Johnson Puente Johnson de noche. Victoria, British Columbia, Canadá.

January 08, 2016

CMake: override subdirectory options

Last year I moved Monkey build system to CMake and when I started Fluent Bit I did it in the same way, a great experience.

Due to the nature of the projects mentioned where they can be build as libraries, I found that overriding the sub directories options was not too straightforward: if I have a project A with some options they should be listed like this in the CMakeLists.txt file:

option(WITH_FEATURE_AA  "Enable feature AA"   ON)
option(WITH_FEATURE_BB  "Enable feature BB"   OFF)

Now if I started a project B and I have included project A in a subdirectory, the files hierarchy should be:


When building project_B based on it CMakeLists.txt rules, I may want to override some default options values of project_A, documentation is a bit confusing and you are likely to waste time trying to determinate why you cannot override the values, the guilty is the CMake Cache. As a workaround I found that building a simple macro in project_B/CMakeLists.txt solves the problem without complexity:

macro(SET_OPTION option value)
  set(${option} ${value} CACHE "" INTERNAL FORCE)

# Let's override the values

# Now join the subdirectory

If you want to see a working code example, checkout the following GIT repository:

December 20, 2015

Fluent Bit: data from embedded/IoT matters

It’s not a surprise that year over year the number of connected embedded devices is growing exponentially; from one side many Hardware challenges are being addressed properly, we can find cheap devices that provides low power consumption with good connectivity, improved processors and flexible architectures in general. These are enough reasons to encourage the creation of innovative solutions for different markets such as automotive, medical and home automation within many.

When creating software on top of these new hardware, we often needs to address the next layer of challenges, one of them is data. The operating system and the set of applications that runs on your device often generate events that helps to troubleshoot of monitor general statuses, so collecting this information is a must.

There is one concept that is changing over the years, sometimes data is commonly known as logs, but logs are not longer considered a register as a set of bytes in the file system, logs are now a stream of events that usually can be collected through a serial or network interface.

Early this year at Treasure Data, we started researching the best ways to address all concerns described above for Embedded Software, for short how to solve data collection. I have to recall that data usually comes in different formats, while the Kernel writes to it Kernel messages interface, others applications writes to syslog or push some message to some network service.

Treasure Data solved data collection for servers with the creation of Fluentd, but this tool may not be applicable as a solution for all Embedded devices because of design and resources required, but there is a lot of acquired experience that can be used as the foundation for a new specialized solution, that’s why Fluent Bit have been created.

Along this year, the project have been growing and it’s becoming a great solution for data collection and data routing in general, the following table describe the usual scenarios on how Fluent Bit can collect data:

modes description
library Fluent Bit can be build as a shared or static library that can be used by your own program. So you invoke it API and ingest data to it.
metrics generator Fluent Bit auto-generate data from it built-in input metrics: CPU, Memory and Kernel log messages.
remote service This mode means that Fluent Bit runs as a service in a separate hardware and your embedded applications can send data to it.

In a more descriptive way, Fluent Bit provides input types for data, the current ones available as of v0.5 release are:

Input Plugin Description
CPU Calculate CPU usage in the system
Memory (metric) Gather memory usage in the system
Kernel log messages Gather Kernel logs from the Kernel messages interface
Serial Read data from the serial interface
STDIN Read data from the standard input interface
MQTT Listen for MQTT messages over the network.
XBee Listen for messages over a XBee Radio device.

Once the data is collected, it should go somewhere, that’s when the output plugins provide different options.

Output Plugin Description
Fluentd Fluentd is a famous open source data collector for servers, it provides an extensive list of interfaces for collecting and routing data to third party services.
Elastic Search Elastic Search is an open source database to search & analyze Data in Real Time.
Treasure Data Treasure Data provides an Analytics Cloud service for Big Data.
STDOUT Print event records to the standard output.

The project has reach a good level, flexible enough to behave as a puzzle in terms of which features to include and which not, it allows you to collect and route events easily across the network.

As this year I had the opportunity to attend and speak at a few conferences, I had learn from very experienced Embedded Engineers and end-users who shared their concerns and ideas on how data should be collected, this have been very useful to define current roadmap and general features available today.

Fluent Bit is Open Source and licensed under the terms of Apache License v2, feel free to contribute through our public repository on, or if you just want to get in touch, join our Slack team at

As said, embedded/IoT data matters, and Fluent Bit take cares of it, spread the word!

November 17, 2015

November Updates

It have been a long time since my last post, it’s a really busy year at work with enjoyable things to do!, but of course nothing is an excuse to stop sharing updates.

This year I have been working in several areas which includes software development, community strategies and spreading the word at several conferences. I think it have been the perfect mix of things to learn and improve. All of this consumes a lot of time, hopefully my wife and kids are very supportive on all of this, the balance is very important to keep everyone healthy.

Below you will find a short update for:

  • Fluent Bit
  • Conferences and Fluentd
  • Monkey & Duda I/O

Fluent Bit

As I always say, data collection is hard and when dealing with small devices there are not too many good options around. As I introduced previously, I continue working on the Fluent Bit project, which is a data collection tool for Embedded Linux. In the last months many improvements and additions have been made such as co-routines support, abstracted network I/O layer, fully support for Fluentd and Treasure Data cloud service, library mode (C, C++), packaging, etc.

The project is growing and it have reach a stability point where it can be used safety, as of today a general overview of the architecture is the following:


Now I am focusing into add fully internal routing capabilities and the option to use file system buffers to provide reliable mechanisms when network operations are not available for cases where the system faces some power outage.

This is a really interesting project, if it got your attention you are welcome to join us!.

Conferences and Fluentd

Spread the word about what do we do at Treasure Data is very important, even more why we do it. Collecting data is pretty hard when it comes from multiples sources, performance is a consistent pain in the processing and that’s the reason why we need specialized tools to solve that problem: Fluentd.


During this year, I have been lucky enough to receive enough trust from the organization of several Conferences where I was given the opportunity to present different topics about Data collection, which include to describe generic problems in production environments, workarounds and possible solutions like Fluent as an enterprise open source to address this problematic.

After apply to several conferences as a speaker and with the valuable support of Treasure Data, I was able to represent our mission at LinuxCon/CloudOpen Tokyo, FISL16 Brazil, LinuxCon/CloudOpen Dublin, EmbeddedLinux Conf Dublin, LinuxCon/CloudOpen Seattle and StartechConf Chile.

Learning is a continuous cycle of every life experience and I can tell you that attending conferences have been very challenging for me. As most of you know my native language is Spanish so speaking in English in public required to pay attention to improve how to express ideas, concepts and use the right vocabulary, I made many mistakes, my English is far to be perfect but I am improving. Effectively I am removing the word basically from my dictionary, I found that I used that word too many times!.

I would say that giving a talk, it’s just a fraction of what you can take of the full conference experience, I try to understand why the attendees are there, I have been able to learn about current market needs and what other people is doing and what common problems they have. In my personal life I do not often talk to strange people, I had to fix that, attending a conference requires to approach people, introduce your self, know them and learn about their experiences. When doing Networking at a conference and get back home, it’s not just about to count the number of business cards you get, more important is to grab others experiences and how that knowledge can help to set right directions to your company or personal life, and this works on two-ways, your other end will learn a lot from you, share experiences is the key.

What I have learn

  • Fluentd is widely used!, I met several users in different countries and I have get very important feedback about their use case.
  • Traveling to a different country with a serious different time zone can affect you a lot. What worked for me was to travel with enough time to adjust my internal clock. Since I start traveling I adjust my food schedule, always start thinking as you are in your destiny. If in the target country it’s already breakfast time, go for it, drink a lot of water, force your self to behave internally as you live there.
  • If your target country time is opposite to where you come from, go out: walk, visit some place, stay awake, don’t stay at the hotel, don’t take a nap.
  • I discovered that when I start talking at a conference, it takes me between 8-10 minutes to get relaxed and be more fluent in English, of course that time it’s far to be ideal, I am working on that.
  • If your presentation have demos and you have to open your Terminal, NEVER EVER use a terminal with dark background, projectors and general illumination will not help your attendees to read what you are writing. Instead try to use a white background with big black letters, forget about your fancy text colors, nobody cares, what really matters is that people can read and understand what you are doing.

To keep in mind

A conference is good or bad based on the speakers and it message, if a conference have a good list of speakers and topics associated, they will attract more attendees. As a speaker, always make sure to keep in mind that attendees go to your session because of your message, not for your background, let’s put our ego’s behind. If we focus 100% on the message, our content and session flow will be better. People love to learn from our experience and stories, just make sure that most of what you share will re-enforce the message.

Monkey & Duda I/O

I continue working on Monkey HTTP Server, during this year I have slowly migrated the core architecture to prepare it for the incoming HTTP2 protocol support, the previous design was not flexible enough for that, now all pieces are in place.

I am happy that Treasure Data fully support this, Monkey it’s a fundamental piece of Fluent Bit, some months ago they supported a contest for the new logo we have:


Yeah, it changed a lot, some people complained but now Monkey is more robust, fully armed with features and more extensible. I think this one represent better it reality.

Monkey adoption continue growing in the Embedded Linux world, mostly for ARM and MIPS based architectures.

About Duda I/O which is a web services framework written on top of Monkey is used in production a lot, and in the last months after the new Monkey architecture was in place, I started migrating the code base to the new model, it’s still work in process so I expect to have some news before the end of the year.

July 10, 2015

Fri 2015/Jul/10

It's summer! That means that, if you are a student, you could be one of our summer interns in Igalia this season. We have two positions available: the first related to WebKit work and the second to web development. Both positions can be filled in either of our locations in Galicia or you can work remotely from wherever you prefer (plenty of us work remotely, so you'll have to communicate with some of us via jabber and email anyway).

Have a look at the announcement in our web page for more details, and don't hesitate to contact me if you have any doubt about the internships!

April 28, 2015

Tue 2015/Apr/28

A follow up to my last post. As I was writing it, someone was packaging Linux 4.0 for Debian. I fetched it from the experimental distribution today and all what was broken with the X1 Carbon now works (that is, the bluetooth keyboard, trackpad button events, and 3G/4G USB modem networking). The WEP128 authentication still doesn't work but you shouldn't be using it anyway because aircrack and so on and so on.

So there you have it, just upgrade your kernel and enjoy a functional laptop. I will still take the opportunity to public shame Lenovo for the annoying noise coming out of the speakers every once in a while. Bad Lenovo, very bad.

April 21, 2015

Tue 2015/Apr/21

Igalia got me a Lenovo X1 Carbon, third generation. I decided to install Debian on it without really considering that the imminent release of Debian Jessie would get in the way. After a few weeks of tinkering, these are a few notes on what works (with a little help) and what doesn't (yet).

What works (with a little help):

  • Graphics acceleration: Initially X was using llvmpipe and software rasterization. This laptop has Intel Broadwell graphics and the support for it has not been without issues recently. I installed libdrm-intel1, xserver-xorg-video-intel, and the 3.19 kernel from experimental, and that fixed it.

  • I also got a OneLink Pro Dock, which I use to connect to two external displays to the laptop. For whatever reason, these were not detected properly with Jessie's 3.16 kernel. Upgrading to 3.19 fixed this too. I should have used the preinstalled Windows to upgrade its firmware, by the way, but by the time I realized, the Windows partitions were long gone.

  • But upgrading to 3.19 broke both wireless and bluetooth, as with this kernel version newer binary firmware blobs are needed. These are not yet packaged in Debian, but until then you can fetch them from the web. The files needed are ibt-hw-37.8.10-fw- for bluetooth and iwlwifi-7265-12.ucode for the wireless. There is a bug about it in the Debian bugtracker somewhere.

  • Intel's Rapid Start Technology. Just follow Matthew Garrett's advice and create a large enough partition with the appropriate type.

What doesn't work yet:

  • My Bluetooth keyboard. There are disconnects at random intervals that make it pretty much useless. This is reported in the Debian bugtracker but there have not been any responses yet. I packaged the latest BlueZ release and installed it locally, but that didn't really help, so I'm guessing that the issue is in the kernel. It is possible that my package is broken, though, as I had to rebase some Debian patches and remove others. As a side note, I had forgotten how nice quilt can be for this.

  • The trackpad buttons. Some people suggest switching the driver but then Synaptics won't work. So there's that. I think that the 4.0 kernel has the fixes needed, but last I checked there was no package yet and I don't feel like compiling a kernel. Compiling browsers the whole day is already enough for me, so I'll wait.

  • Using a Nokia N9 as a USB mobile broadband modem or the integrated Sierra 4G modem. The former works in my Fedora laptop, and in Debian both seem to be detected correctly, but journalctl reports some oddities, like:

    Apr 20 21:27:11 patanjali ModemManager[560]: <info>  ModemManager (version 1.4.4) starting in system bus...
    Apr 20 21:27:13 patanjali ModemManager[560]: <warn>  Couldn't find support for device at '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3.1/3-3.1.3': not supported by any plugin
    Apr 20 21:27:13 patanjali ModemManager[560]: <warn>  Couldn't find support for device at '/sys/devices/pci0000:00/0000:00:19.0': not supported by any plugin
    Apr 20 21:27:13 patanjali ModemManager[560]: <warn>  Couldn't find support for device at '/sys/devices/pci0000:00/0000:00:1c.1/0000:04:00.0': not supported by any plugin
    Apr 20 21:27:20 patanjali ModemManager[560]: <info>  Creating modem with plugin 'Generic' and '2' ports
    Apr 20 21:27:20 patanjali ModemManager[560]: <info>  Modem for device at '/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4' successfully created
    Apr 20 21:27:20 patanjali ModemManager[560]: <warn>  Modem couldn't be initialized: couldn't load current capabilities: Failed to determine modem capabilities.
    Apr 21 10:01:15 patanjali ModemManager[560]: <info>  (net/usb0): released by modem /sys/devices/pci0000:00/0000:00:14.0/usb2/2-4
    Apr 21 10:01:15 patanjali ModemManager[560]: <info>  (tty/ttyACM0): released by modem /sys/devices/pci0000:00/0000:00:14.0/usb2/2-4
    Apr 21 10:01:30 patanjali ModemManager[560]: <info>  Creating modem with plugin 'Generic' and '2' ports
    Apr 21 10:01:30 patanjali ModemManager[560]: <info>  Modem for device at '/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4' successfully created
    Apr 21 10:01:30 patanjali ModemManager[560]: <warn>  Modem couldn't be initialized: couldn't load current capabilities: Failed to determine modem capabilities.

    I upgraded to experimental's ModemManager, without any improvement. Haven't yet figured out what could this be, although I only used NetworkManager to try to connect.

  • The (terrible) WEP128 authentication in the Nokia N9 wireless hotspot application. As neither the USB modem nor the 4G one are working yet, using the wireless hotspot is the only alternative for the afternoons outside my home office. Not sure why it won't connect (again, only tested with NetworkManager), but at this point I'm starting to be more pragmatic about being able to use this laptop at all. Leaving the hotspot open was the only alternative. I know.

I know I should be a good citizen and add at least some of this information to ThinkWiki, but hey, at least I wrote it down somewhere.

April 16, 2015

Three months at Treasure Data

Almost three months ago, I started a new Open Source Adventure and I called it adventure because I had to take decisions where different variables to evaluate were involved like: family, stability, country, long-term-plans, etc.

So how things are going now?, I would say pretty well!, there is a lot of fun things to do, I feel more happy contributing than just calling working. One thing that I am very pleasant about Treasure Data is about the work environment, despites I am a remote worker (I work from Costa Rica), I had the opportunity to visit the HQ offices in Mountain View a couple of times and I can say that people is very friendly.


The company philosophy is pretty simple: “be humble, honest, open and committed to the key values at Treasure Data”, and that is not just words, I often have a good eye and I can re-affirm that those values are really present on all areas and from people collaborating in different roles. In my opinion and based on my short-life experience outside of the IT world, this lead to the strong Japanese culture inside Treasure Data. For those who don’t know, TD is an American company founded by 3 Japanese people, it first office opened in Mountain View-California, which is the current Head Quarters, then it succeeded very quickly and opened the second one in Tokyo.

If sometime, you as and occidental, have the opportunity to practice some real Asian discipline (like martial arts), you will realize that one of the core principles is self-discipline, be humble and honest to everyone, that’s the way to learn, train and grow as a person, and having those principles inside a work environment is very grateful, at least for me.

Now talking about technical things, I am really happy to have the opportunity to collaborate with ideas and propose execution plans to align company’s mission to expand to emergent markets, on my specific case, I am talking about Open Source and Embedded initiatives . I would say that the major accomplishments as of today, which are the first steps for the long-term plans that I was lucky enough to participate are:

  • Treasure Data becomes an official member of the Linux Foundation [1] [2]
  • Fluentd becomes a Yocto Project participant organization.
  • Started a new project called Fluent-Bit to cover data collection needs on Embedded Linux environments.
  • Creating presence on Open Source events as attendee and speaker.
  • Many others!

I am glad to be around supportive people, Fluentd team do an excellent job on expanding the project scope and leading it development, it clearly becomes a reliable and fast performance Data Collection tool than can be integrated with third party services easily. On the other side, the management is always looking for ways to help us to succeed, a really grateful experience.

Finally, I am happy to announce that Treasure Data will support the development of Monkey Project, I will try to write more details about that in the incoming weeks :)

March 05, 2015

Y finalmente ha llegado

Para los que creían que nunca sucedería :-)
daniel@daniel-vaio:~$ lsb_release -d
Description: Ubuntu Vivid Vervet (development branch)
daniel@daniel-vaio:~$ systemctl status | head
● daniel-vaio
State: running
Jobs: 0 queued
Failed: 0 units
Since: Wed 2015-03-04 18:55:00 CLST; 3h 8min ago
CGroup: /
├─1 /sbin/init splash
│ ├─avahi-daemon.service
│ │ ├─690 avahi-daemon: running [daniel-vaio.local
daniel@daniel-vaio:~$ dpkg -l upstart systemd
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
ii systemd 219-4ubuntu1 amd64 system and service manager
ii ubuntu-minimal 1.331 amd64 Minimal core of Ubuntu
un upstart <none> <none> (no description available)

February 20, 2015

Inkscape Multiple Pages

Actualmente me encuentro trabajando en el diseño del Annual Report para Software Freedom Conservancy, luego de presentar el Mockup he decidido realizar el Informe en su totalidad con Inkscape y no con Scribus que para mucho es la herramienta ideal para este tipo de Publicación.

 Mockup Annual Report

Para lograr mi independencia de Scribus, existe una extensión para Inkscape denominada Inkscape Pages, el cual contiene las siguientes características:
  • Insertar páginas.
  • Insertar márgenes de la página.
  • Utilizar una página maestra.
  • Mover Objetos de una página a otra.
  • Reorganizar páginas.
  • Quitar páginas.
  • La exportación a PDF. (Single .pdf)
  • Navegar a través de páginas. 
  • etc ...
Para Instalar esta extensión primero tienes que descargar:


Luego descomprimir e Instalar:

tar -zxvf inkscape-pages-1.1.tar.gz
cd inkscape-pages-1.1
sudo ./install en
(Si quieres la Extensión en español tan solo reemplaza en por es)
Reiniciar Inkscape luego verificar la instalación en Extensions - Pages 

Inkscape 0.91 - Pages

Ahora con Pages Instalado y tras realizar unas pruebas, he detectado el requerimiento de pdftk a la hora de exportar el documento a PDF.

para ello:

sudo apt-get install pdftk
Ahora se me hace mas fácil poder continuar con lo diseñado en el mockup y mantenerme en la aplicación en vez de traspasar el layout a Scribus, además espero utilizar esta misma extensión para el GNOME Annual Report 2014.

February 13, 2015

Add Locations to GNOME Weather

Al ver que GNOME Weather no mostraba todas las locaciones que estaba buscando, decidí meter mano y agregar a mi Ciudad Natal (Calama), por lo que decidí escribir este mini tutorial en caso que quieras agregar una locación que no aparezca por defecto.

OS: Ubuntu 14:10

Lo primero sera editar el archivo Locations.xml para agregar nuestro lugar.
Puedes usar tu editor favorito en este caso usaremos gedit.

sudo gedit /usr/share/libgweather/Locations.xml 

Tome como referencia Antofagasta que es la ciudad mas próxima que aparece por defecto y ahora agregamos los siguientes datos.

Calama-22.4667 -68.9333
  • name Agregamos el nombre de nuestra locación.
  • coordinates Agregamos las coordenadas de nuestra locación.

Aeropuerto de CalamaSCCF -22.4897 -68.9036   
  • name Agregamos el nombre del aeropuerto. 
  • code ID Aeropuerto.
  • coordinates Agregamos las coordenadas del aeropuerto. 

Y con esto Reboot y listo! nuestra locación ya aparece en GNOME Weather.

Ahora si quieres le puedes agregar una extensión, en mi caso instalé OpenWeather.

Con GNOME Shell Extension Preferences puedes editar diferentes unidades para: Temperatura, Velocidad del Viento, presión Atmosférica, etc.

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.

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