Planeta GNOME Hispano
La actividad Hispana de GNOME 24 x 7

16 de mayo de 2013

Building LibreOffice

1. Get the code $ git clone git://anongit.freedesktop.org/libreoffice/core Grab a cup of coffee! Receiving objects: 100% (2851664/2851664), 917.96 MiB | 2.67 MiB/s, done. 2. in order to speed up the building process we highly recommend to install ccache and create some links to point g++ and gcc compilers to the ccache binary: sudo apt-get install [...]

15 de mayo de 2013

Wed 2013/May/15

03 de mayo de 2013

WebKit Contributors Meeting 2013

It turns out I’m writing this post at 6:00 AM in the morning from a hotel instead of doing it at a more reasonable time from my comfy home or a nice cafeteria in Staines. That’s already quite a new thing by itself, and the reason for that is not that I became crazy or something, but the fact that I’m completely jet-lagged in California right now in order to attend my second WebKit Contributors Meeting (my first time was in 2011), this time as part of the Samsung team in the UK R&D center, together with my mate Anton Obzhirov.

With regard to that, it has been a very interesting experience so far where I could meet new people I still haven’t had the chance to see in real life yet (e.g. my mates from other Samsung R&D centers or some guys from Apple I didn’t have the chance to meet in person before), as well as chat again with some friends and former mates that I haven’t seen for a while, such as Martin, Xan and Philippe from Igalia, Byungseon from LG, Nayan from Motorola or Gustavo from Collabora to mention some of them. It’s strange, and at the same time wonderful, how easily you can catch up on conversations with people that you barely see once a year (or even less) and mainly in conferences, and definitely one of my favourite parts of attending these kind of events, to be honest.

Also, from a less social point of view, I have to say I found very interesting the sessions I’ve attended so far, specially the one about “managing the differences between ports”, although the one about “build systems” was quite interesting too. Not sure how far we are yet in the WebKitGTK+ port from realistically switching to some kind of commonly agreed build system (cmake?), but at least it’s a good start to agree on the fact that it would be an interesting move and now that some people pushing for it.

My only regret about this first day is that I missed Hyatt‘s talk about pagination due to some health issues I’m experimenting while in California, mostly due to the extremely hot and dry weather (anything over 25 Celsius is “unbearable hot” for me), which is causing me a little bit of cough, sore throat and fever, all well mixed with the jet lag to make it a perfect “welcome pack” to the meeting. Fortunately, I got some “interesting” medicines that seem to have relieved a bit the pain and I could attend the rest of the sessions without much trouble, other than some occasional coughing. Not bad.

By the way, for those of you who were not lucky enough to attend the meeting but are anyway interested in the topics being discussed here, make sure you check the main TRAC page for the meeting, where you can also find transcripts for most of the sessions.

As for today, some more sessions will take place as well as a couple of hackathons so I expect it to be very interesting as well. Also I hope I can find some time too to work a bit on my patches to remove the nasty dependency on pango we have in WebKitGTK+ accessibility code, which is preventing us to have proper caret navigation in WebKit2GTK+ based browsers, as well as to discuss possible ways in which our lab could collaborate more actively upstream. Seems a promising day already!

Last (but not least), and in a completely unrelated and super-off-topic way, I would like to tell the world that I’m extremely happy for the fact that next week will be the end of my “lonely existence in the UK”, finally. After 4 months of living alone in Staines away from my family with just some flash trips from Friday to Sunday (every 2 weeks), I’m once and for all travelling on Thursday to my home town with a one way plane ticket to do some final arrangements, put everything (family included!) in the car and travel to Santander, where we’ll be taking a ferry that will take us to the Portsmouth (southern coast of England), from where we will just drive to Staines in order to start our new life, all together again.

It has been quite hard for us to live this way for so long, but I think in the end we managed to handle the situation quite well, and now it seems all our efforts are already paying off because things seem to be finally fitting in the right places: we have a lovely house in Staines, we have a place in a nearby public school for my oldest kid to start on September, most of the needed paperwork seems to be done and we already moved all our stuff from Spain (lots of toys!), which is now waiting to be used in our new place.

I really can’t wait to live again in the noisy and chaotic atmosphere that two kids can so easily create around them. Even if that means it will probably drive me crazy every now and then and that I won’t sleep that well sometimes.

Yes. Even considering that.

26 de abril de 2013

Fri 2013/Apr/26

  • Oh the WebKits! During the past few weeks, thanks to Igalia's collaboration with the good folks at Bloomberg, I have descended from the heights of Epiphany and WebKitGTK+ to the depths of WebCore, that obscure but cleverly assembled part of WebKit that magnificently takes care of the logic inherent to layouting, rendering, and the inner representation of HTML documents. A fascinating aspect of WebCore is that its architecture, completely decoupled from the actual implementation in the different WebKit ports, means that any change to its parts will affect all ports and browsers built upon this marvelous piece of engineering. Let me assure you, dear reader, the challenges this implies are comparable only to the joy it brings to this humble hacker, as the following will reveal!

    Among the many duties of WebCore lies controlling the logic behind user interaction with HTML documents — something that has changed considerably in recent years. While originally, most interactive editing in the web was limited to plain and boring web forms, in this brave new world of ours it is also possible to build complete HTML editors using nothing but HTML and JavaScript access to the DOM. Have you seen Wordpress' fantastic editor? Then you shall agree with me that this is an extremely powerful feature.

    But with great power comes great responsibility, as the old saying goes. And with great responsibility come bugs, says a more recent variation of the same maxim. And where bugs are to be found, relentless minds work tirelessly in order to ensure that your browsing experience never ceases to improve. This is one of the goals that Igalia, humbly but boldly, pursues with utmost seriousness. And so it has been that I, your humble servant, have spent countless hours mastering my way through the DOM and editing features of WebCore. Bugs have been fixed already — some affecting editing in Windows, others affecting editing in GNU/Linux, and others affecting all platforms equally. More will be fixed in the forthcoming weeks. I can only attempt to share my excitement through these words, for I am unable to express it in a way that would do it justice.

  • As a side note, I am a committer to the WebKit project for a little while now. This is pretty cool, as it means I get a direct chance to break your browser. Or unbreak it, shall it be the case. I try to lean towards the latter but trust me, it is not an easy task!

21 de abril de 2013

Robbed during a Delta flight

I have just realized I was robbed a couple of days ago. More specifically, somebody at either Delta or TSA stole a bunch of stuff from my suitcase when I flew from Portland to Madrid.

Of course they didn't pick up random stuff, they carefully chose the most expensive stuff I had in my luggage, including both clothing and consumer electronics.

The content of the suitcase was all messed up to the point I knew I had been robbed as soon as I opened it up earlier today.

Needless to say, Delta won't find anybody accountable for this robbery, and.. well, let's say I wouldn't even dream the TSA (or in other words the US Federal Government) taking responsibility for its staff actions either, or lack of them.

It is sad one cannot take a plane in a developed country and not get his stuff stolen, but what I find utterly despicable is that nobody will take responsibility for it. The system is so full of shit that whoever robbed my stuff won't get caught because nobody will even try to catch him. The obvious consequence, he's keep stealing with impunity.

TSA, I have a question for you. Completely out of curiosity, what's the purpose of all those CCTVs and security screenings if you aren't even able to stop airport staff (including TSA's) from robbing passengers? It's unbelievable we have to go through so many useless checkpoints when you seem to be unable to cope with something as simple as keeping offenders away from our luggage.

11 de abril de 2013

WebKitGTK+ 2.0.0

After more than two years of development the Igalia WebKit team is proud to announce WebKitGTK+ 2.0.0.

But what’s so special about WebKitGTK+ 2.0?

The WebKit2GTK+ API is now the default one. This means that it’s now considered stable from the API/ABI backwards compatibility point of view, and that the old WebKit1 API is in maintenance mode and kind of deprecated. We will maintain both APIs, but we don’t plan to work on WebKi1 other than fixing bugs.

We encourage everybody to port their existing WebKitGTK+ applications to WebKit2, although we know the WebKit2 GTK+ API is not ready for all applications yet. We will work on adding new API during next release cycle, so let us know if you are missing some API that prevents you from porting your project.

Epiphany, the GNOME Web browser, has been successfully ported to WebKit2 and uses it by default since GNOME 3.8.

What are the benefits of the WebKit2 GTK+ API?

We have talked several times about the advantages of the multi-process architecture of WebKit2, robustness, responsiveness, security, etc. All of the details of the multi-process separation are mostly transparent for the API users, bringing all those benefits for free to any application using WebKit2 GTK+. We have developed the API on top of this multi-process architecture, but also with the experience of several years developing and maintaining the WebKit1 GTK+ API, learning from the mistakes made in the past and keeping the good ideas. As a result, the WebKit2 API is very similar to the WebKi1 in some parts and quite different in others. We started from scratch with the following goals:

  • Simple and easy to use. Instead of porting the WebKit1 API to WebKit2, we decided to add new API on demand. We set some milestones based on porting real applications, adding new API required to port them. This also allowed us to design the API, not only thinking about what we want or need to expose, but also how the applications expect to use the API.
  • Consistency. We have tried hard to be consistent with the names of the functions, signals and properties exposed by the API.
  • Flexibility. When possible, the API allows to use your own implementation of some parts that can be adopted to different platforms. So, you can use your own file chooser, JavaScript dialogs, context menu, print dialog, etc.
  • It works by default. For all those features where a custom implementation can be used, there’s a default implementation in WebKit that just works by default.
  • Unit tests. We have enforced all new patches adding API to WebKit2 GTK+ to include also unit tests, so the whole API is covered by unit tests.

Let’s see the major changes and advantages of this new WebKi2 API.

WebKitWebView is a scrolling widget

For API users this means that WebKitWebView should not be added to a GtkScrolledWindow, the widget is scrollable by itself. Actually this is also the case of the WebKitWebView in WebKit1, but some hacks were introduced to allow the widget to be used inside a GtkScrolledWindow. This caused a lot of headaches due to the synchronization between the internal scrolling and the GTK+ scroll adjustments. So now the main scrollbars are also handled by the WebKitWebView which, among other things, fixed the problem of the double scrollbars in some web sites.

Double scrollbar issue

Embedded HTTP authentication dialog

The default implementation of the HTTP authentication embeds a dialog in the WebView instead of using a real GtkDialog. It’s also integrated with the keyring by default using libsecret.

HTTP authentication dialog

GTK+ 2 plugins (flash)

Plugins also run in a different process that is built with GTK+ 2 to support the most popular plugins like flash that still use GTK+ 2.

MiniBrowser showing a youtube video using flash plugin

Web Inspector

The Web Inspector works automatically in both docked and undocked states without requiring any API call.

Inspector docked

It also has support for remote inspecting.

Remote inspecting

Accelerated compositing

Accelerated compositing is always enabled in WebKit2.

Poster circle

Future plans

During the next release cycle we’ll work on fixing bugs and completing the API, see our RoadMap for further details, but we’ll also explore some other areas not directly related the the API:

  • Multiple web processes support
  • Sandboxing
  • Network Process

07 de abril de 2013

New laptop setup

I just bought a brand new Lenovo T430s with the following specs: Intel i7-3520M (2.9 Ghz), 16 GB RAM, 180GB SDD + 500GB HDD, Intel 4000, 14” Screen and so on. I wanted to have a dual OS configuration since the machine cames with Windows 7 Professional and even thought I don’t use it in a daily basis I still have to boot it when filling up taxes or playing some games. In this post I will explain all those non trivial steps to get an optimized system up and running.

Abriendo el portatil nuevo

Cleaning the Windows mess

One of the things that was not very nice when I first boot the laptop was discovering how the main drive (180GB) had only 110 GB free. Yes, that means the operating system and initial applications were filling 70GB of my precious SDD!!!  Time to do some cleanups

First, I removed a bunch of software crap that was installed by Lenovo & friends. Intel apps marketplace, Corel DVD player, Corel video editing and other pearls like this.

Then I copied the restore partition into another media. In my case, I used a spare 32GB micro SD which I plan to connect to a USB adapter so I can boot the computer with it. I also tried to copy this data into 3 DVDs just in case but unfortunatly Windows only lets you do a backup, not two. Absolutely stupid.

I installed the free software WinDirStat (which is similar to the GNOME baobab program) to learn what files and directories were eating all the space. A misterious hiberfil.sys in the root directory was taking a lot of space. Google told me this file is used for hibernating.

Then I disabled hibernating since that needs a lot of space and I don’t plan to hibernate in Windows. To do so  I opened the Start Menu, click on All Programs and Accessories, right click on Command Prompt, and click on Run as administrator. Then I run the following command:

powercfg -h off

That saved around 16GB!!

Next, I removed the page file since having 16 GB of RAM is quite enough these days for a sporadic use. For doing so this is the set of steps you need to accomplish:

  • Control Panel, System
  • Advanced System Settings
  • Advanced Tab
  • Settings button under Performance
  • Advanced Tab
  • Change button under Virtual Memory
  • On your SSD drive, change the option to “No Paging File”.
  • Click Set.
  • OK and reboot.

After the reboot I had another 10GB available.

So now I had only 30GB used and it was time to shrink the partition to make space for Linux. I tried to do so with Windows disk manager but it wouldn’t let me resize beyond 60GB (and I defrag this partition several times without success) and it also didn’t let me remove a 8GB “Hibernate” partition. So I tried EaseUS Partition Master 9.2.2 and it worked perfectly without any problems.

I also created a 50GB NTFS partition in my second drive (the hard drive) so I can install games and other programs in Windows.

Installing and configuring Fedora Linux

I tried booting a Live Image from a USB memory and it worked fine except for the installer application. I know Anaconda (the Fedora installer) has been rewritten from scratch and that has been the main reason for the big Fedora 18 delay and it’s also the main reason people are complaining about the installation of Fedora 18. I think the previous Anaconda was way more solid and stable but if we need a better and easier user experience some innovation need to happen and as always, the first release of a complete rewrite can be much  more polished. Let’s hope Fedora 19 does not have these problems.

Anyway, I copied a netinstall image on my USB memory and after fighting the partition step I finally managed to install the whole thing in less than an hour. The partition is just fine if you want just the defaut layout, which was not my case. In the SSD drive I created a small 500MB boot partition and I used all the other space (around 120GB) as the root partition (/) for Fedora. I left my 500GB hard drive untouched in the installation step.

Having a SSD primary hard drive is really nice, specially since it makes boot time really small :-) In order to keep its performance good as long as possible I activated the trim support and disabled storing modification times in the journal of the file system. This means adding noatime,nodiratime,discard to the options field of the /etc/fstab:

/dev/mapper/luks-23c07605-9f7e-406b-bc46-9ae15bd9b959	/		ext4    x-systemd.device-timeout=0,noatime,nodiratime,discard 1 1
UUID=8929f3e3-857c-45f9-92b8-cedfcf544774		/boot		ext4    noatime,nodiratime,discard        	1 2

The first thing I did after the initial boot was mounting several directories in RAM:

/dev/mapper/luks-23c07605-9f7e-406b-bc46-9ae15bd9b959	/		ext4    x-systemd.device-timeout=0,noatime,nodiratime,discard 1 1
UUID=8929f3e3-857c-45f9-92b8-cedfcf544774		/boot		ext4    noatime,nodiratime,discard        	1 2
tmpfs                                                   /tmp            tmpfs   defaults,noatime,nodiratime,mode=1777   0 0
tmpfs                                                   /var/spool      tmpfs   defaults,noatime,nodiratime,mode=1777   0 0
tmpfs                                                   /var/tmp        tmpfs   defaults,noatime,nodiratime,mode=1777   0 0

In order to make SELinux work with /var/spool I had to add the following command in the /etc/rc.local file:

cat /etc/rc.local 
#!/bin/sh

# For SELinux. 2013-04-27 (lgs)
/sbin/restorecon -R /var/spool

I also changed the default IO scheduler to the “deadline” scheduler but only in the primary drive. For this reason I did this change in the /etc/rc.local file and not in the kernel boot parameters.

cat /etc/rc.local 
#!/bin/sh

# For SELinux. 2013-04-27 (lgs)
/sbin/restorecon -R /var/spool

# IO deadline scheduler for ssd devices
echo deadline > /sys/block/sda/queue/scheduler

After that I partitioned the remaining space of the second hard drive. I created a 2GB swap partition. I know I will rarely need swap having 16GB of RAM but I followed Antonio’s advice because some programs still make use of swap and if there is no swap space they crash giving you very difficult to debug headaches. That left me with more than 400 GB on the second hard drive for Linux big files. This is how my final /etc/fstab looks like:

# The x-systemd.device-timeout=0 is for encrypted filesystems. See https://bugzilla.redhat.com/show_bug.cgi?id=861123
/dev/mapper/luks-23c07605-9f7e-406b-bc46-9ae15bd9b959	/		ext4    x-systemd.device-timeout=0,noatime,nodiratime,discard 1 1
UUID=8929f3e3-857c-45f9-92b8-cedfcf544774		/boot		ext4    noatime,nodiratime,discard        	1 2
UUID=26644947-8a4a-4fb4-a619-80f2f1693c57		/mnt/hdd	ext4	defaults				1 2
tmpfs							/tmp		tmpfs	defaults,noatime,nodiratime,mode=1777	0 0
tmpfs							/var/spool	tmpfs	defaults,noatime,nodiratime,mode=1777	0 0
tmpfs							/var/tmp	tmpfs	defaults,noatime,nodiratime,mode=1777	0 0
UUID=b7feeaef-260e-422f-9c4e-dc6cbaa07463		swap		swap	defaults				0 0

The next thing I did was symlinking the ~/.cache directory to /tmp which is mounted in RAM:

[lgs@t430s ~]$  ls -l .cache
lrwxrwxrwx. 1 lgs lgs 16 abr 28 10:33 .cache -> /tmp/lgs/.cache/

This was made so Chromium would not trash my precious SSD disk with its cache needs but there are a bunch of other programs that also use this .cache directory (tracker, shotwell, rhythmbox, etc.) so it’s even better. With Firefox is simpler since all you need to do is change the setting browser.cache.disk.parent_directory and point it to /tmp/lgs:

Firefox cache setting

But wait, there is a problem about linking ~/.cache into /tmp/lgs/.cache since the /tmp directory is mounted in RAM its contains disappear after a reboot. So I created a GNOME init script that create this directory when starting the GNOME session:

[lgs@t430s ~]$ cat .config/autostart/0001-mkdir.desktop 
[Desktop Entry]
Type=Application
Exec=/usr/bin/mkdir -p /tmp/lgs/.cache
Hidden=false
X-GNOME-Autostart-enabled=true
Name[es_ES]=001 Create cache in /tmp
Name=001 Create cache in /tmp
Comment[es_ES]=
Comment=

Note the name of the file (0001-mkdir.desktop). It is important since it needs to be executed very early in the startup session.

I also symlinked my multimedia directories into the second hard drive since they fill up my SSD drive very quickly:

[lgs@t430s ~]$ ls -l
lrwxrwxrwx.  1 lgs lgs      26 abr 28 10:57 Música -> /mnt/hdd/home/lgs/Música/
lrwxrwxrwx.  1 lgs lgs      26 abr 28 10:58 Vídeos -> /mnt/hdd/home/lgs/Vídeos/

Some other directories are very write intensive. I’m talking about the Downloads directory (heavily used by browsers and Bit Torrent clients) and the Mail directory (heavily used by offlineimap).

[lgs@t430s ~]$ ls -l
lrwxrwxrwx.  1 lgs lgs      28 abr 28 10:56 Descargas -> /mnt/hdd/home/lgs/Descargas/
lrwxrwxrwx   1 lgs lgs      23 abr 29 19:58 Mail -> /mnt/hdd/home/lgs/Mail/

I also symlinked the /var/log directory to the second hard drive in order to avoid writes in the SSD drive.

[lgs@t430s ~]$ ls /var/ -l
lrwxrwxrwx.  1 root root   17 abr 28 17:39 log -> /mnt/hdd/var/log/

Vista frontal

Some useful links:

30 de marzo de 2013

Las cinco mejores cosas de la República Checa

Hace ya más de un mes que hablé de las peores cosas de la República Checa, y ha llegado el turno de hablar de sus bondades, aunque me ha costado sacar las cinco, ya que cuatro estaban muy claras, pero me faltaba la quinta, de la que no estoy del todo convencido.

En fin, una vez más es mi opinión personal, aunque sé que varios puntos los comparten otros muchos expatriados (o inmigrantes, como le gusta decir a un amigo mío).

Pivo 

Que las disfruten.

Sigue leyendo...

Etiquetas: , ,

26 de marzo de 2013

GNU MAC Changer 1.6.0

It's been a long time since the last GNU MAC Changer release I published (8 years, 10 months, and 16 days ago to be precise), so most likely this new version will come as a surprise for most of you. What can I say in my defense? I guess I've been kinda busy lately :)

So, the main changes in this new release are:
 
  • Update: Updated the MAC/vendors list: Added +10800 new entries
  • Feature: Handling of the "BIA (burned-in-address) / locally-administered" bit
  • Feature: Original MAC addresses can be restored now
  • Bugfix: Random MAC addresses generation improvements
  • Bugfix: Error code wasn't always correct
  • Bugfix: Documentation fixes
 
Oh, by the way, the project's source code repository is located at GitHub now: https://github.com/alobbs/macchanger

23 de marzo de 2013

Multiple cursors, Emacs and me

It’s been 7 years already since I started using Emacs and, for some reason, I still haven’t found a text editor I do feel more comfortable with, and I Swear to Gods I’ve tried. I really did. And as proof, I can tell that those who know me a bit can really support this statement, no doubt about it ;)

The thing is that,  for some reason or another, whenever I tried a different editor, a fancy IDE or anything else, the result was always the same: I first realize of a new and very interesting feature X in the editor Y which makes me think for a while “hmmm… this could be the one”, then I start using that editor Y for a while, then I realize I’m not comfortable enough for many other things, then I realize I’m continuously alternating between that editor and Emacs and then… finally… I somehow manage to “port” that very nice feature X to Emacs and ditch editor Y to finally come back to the origin again.

And that has been the story of my (text editing) life so far. And, as you can see, I haven’t written a blog post about every single feature X I added to my Emacs. But this time is different.

Everything started, as usual, with me willing to try a new text editor, and this time I selected Sublime Text 2 as the one to check, mainly because I wanted to check myself whether of all the hype around it was justified or whether it was just… well… just hype.

And I have to say that I was really impressed by ST2: what I’ve seen is a very nice and modern editor which is blazingly fast and convenient to use, and which on top of that it comes with a lot of useful features and a nice configuration out-of-the box, which is also very easy to customize and extend if you want to. Up to that moment, everything seemed to suggest I could be really in front of a replacement for Emacs, but given my past experiences I still took this with a grain of salt (even if I could not hide my excitement either)…

If you don’t believe me, you should really checkout its website and, even better, the “Perfect Workflow in Sublime Text2″ tutorial and you will see yourself what I’m talking about.

However, not all were bells and whistles in my ST2 experience. There were drawbacks too, and the main ones I could see were that it was not an Open Source editor and that the bus-factor was really scary (only one developer, I think). And those two things together were a serious concern to me. But I tried it anyway, because it really feel like it could be a serious competitor for my Emacs, and I was willing to take the risk, just for the sake of checking it (and playing around with a new editor, which I confess is something I love doing every now and then in any case).

But yet again, the same pattern happened one more time: I found myself loving ST2 in many regards but alternating too often between it and Emacs since, even if ST2 was lovely for many things, there was nothing that was really convincing me of replacing my Emacs in favour of it. Well, almost nothing… because the “multiple cursors” feature in ST2 got my attention as not many text editor features got it in the last years.

So, the obvious step at this point, having already decided that I would be going back to Emacs again, would be to try to port this nice feature to Emacs, and then I found the awesome “Emacs Rocks!” site, where I found a demonstration of this sleek feature working inside Emacs. I´ll leave the link to the video here, so you can really see what all this is about:

As you can see, this feature is amazingly useful for many things of everyone’s life (well, maybe not really everyone’s, but almost!), as it’s incredibly helpful for things like massive “search & replace”, improving code structure (e.g. break a list of strings in one single line into multiple ones) and many other situations.

Others might disagree, of course, but for me there’s a “before” and an “after” I knew about this feature, and I don’t think I will be able to easily move now to an editor which doesn’t have something like this available in some way.

Should you want to try it out yourself, I recommend you to check out both episode 13 in “Emacs Rocks!” as well as the github repository where you’ll find the package for Emacs.

Guess this means I’ll stick to Emacs for some more time after all, even if I’m still not sure I will stick forever to it, since I can’t say either I’m 100% comfortable with it, just that it’s the best thing I’ve found so far. Yet I can’t avoid feeling that I still haven’t found what I’m looking for

19 de marzo de 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

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.

Transcodificación

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.

18 de marzo de 2013

17 de marzo de 2013

Cómo simplifiqué el acceso a mi colección de videos y música

Actualización: Agregué un artículo con algunas aclaraciones,  describiendo la lógica tras los componentes seleccionados y una comparación de costos con otras alternativas “más fáciles”


Hace unas semanas logré algo que me permitió ordenar todo el contenido de audio y video que he recolectado por años.  Como pasa en muchos hogares, la cantidad de contenido y dispositivos para almacenar y reproducir este contendio hace que todo se vuelva un caos.

El problema es que a la larga los videos y música comienzan a quedar repartidos por todos lados, y cuando quieres verlos te tienes que acordar en qué disco o computador se encuentra, copiarlo al computador o disco en donde lo quieres reproducir etc.  Un efecto colateral que se produce es que ya no sabes qué es lo que tienes, hay contenido que se va perdiendo entre tanta cosa y fácilmente alguna joyita pude quedar sepultada para siempre.

Por otra parte, no soy de los que les gusta ver videos en el computador.  Si tienes un televisor con una buena pantalla, y un buen sistema de sonido, es lo ideal para apreciar en toda su majestad un buen concierto o una buena película.  El computador para mí, queda relegado sólo a los “videos/cortos casuales”.  Entonces el criterio era bien simple: Necesitaba algo que pusiera a mi disposición todo el material audiovisual en mis (2) televisores.

Los reproductores

Uno de los televisores disponibles es un Samsung “no smart” que tiene una entrada de USB para conectar un disco duro o pendrive.  El otro televisor es un LG “smart” que tiene eso, además de conexión a internet y lo más importante en este caso: Soporte DLNA.  Qué significa? El soporte DLNA permite que un dispositivo pueda reproducir el contenido almacenado en otra parte, en terminos simples esto quiere decir que un televisor con soporte DLNA podrá reproducir contenido (audio/video) que se encuentre almacenado en otro dispositivo a través de la red (WiFi o Ethernet).

Para el televisor sin soporte DLNA tenía una carta bajo la manga:  Por mis desarrollos para Android/GoogleTV tenía a mi disposición un AndroidTV y un GoogleTV, cualquiera de los dos conectable al Samsung “no smart”.  Finalmente deje el GoogleTV conectado al Samsung “no smart” para darle soporte DLNA.

El servidor de contenido

Para almacenar y publicar el contenido contaba con un MiniPC Zotac, pero lo que no me gustaba es que de vez en cuando enciende su ventilador para disipar el calor. No es molesto de día, pero de noche se nota bastante. Por otra parte, encontraba que este computador estaba sobredimensionado para usarlo como un simple servidor, por ejemplo su chip de video nvidia estaría totalmente infrautilizado.

Conversando con mi amigo René Viancos (Renix) de Retronia.cl, quien había hecho algo similar, me recomendó un equipo ultra-económico y de bajo consumo: Se trata del NS-K330.  Es un mini computador basado en ARM que está diseñado para actuar como servidor de archivos compartidos via Samba, FTP, HTTP, servidor de impresión y un cliente BitTorrent integrado, para que las descargas no dependan de un computador encendido.  Lo mejor de todo: Se puede actualizar el firmware a SnakeOS, un Linux para ARM con soporte de DLNA en donde incluso puedes crear un chroot con Debian y tener acceso a toneladas de software.  Para simplificar la lectura, de aquí en adelante a este servidor le llamaremos NAS (Network Attached Storage)

Manos a la obra

Como pueden sospechar, el firmware original del NAS duró los pocos minutos que me tarde en comprobar que el hardware venía bien de fabrica.  Al actualizar el firmware sólo tuve que agregar MiniDLNA a lo que SnakeOS incluye por omisión.

El NAS viene sin disco, sólo puertos USB para conectar el disco que uno quiera.  Incialmente le puse uno de 500GB con NTFS, que posteriormente dejé como EXT3 por problemas que comentaré más adelante.  En este disco SnakeOS creó la partición /opt en donde instala el software adicional empaquetado como archivos opk.  Además, y dada mi dependencia con Midnight Commander (mc) para manipular archivos, instalé un chroot con debian en el mismo disco.

Por el lado de los televisores, el LG ya incluye soporte de DLNA por lo que el dispositivo aparece como si fuera una entrada adicional.  Al seleccionarlo se puede navegar por las carpetas y reproducir cualquier archivo ahí publicado.  En el caso del Samsung, éste fue conectado al GoogleTV y después de explorar varias aplicaciones me quedé con MediaHouse.

Problemas y su solución

En general todo el aparataje funciona bastante bien y obtuve lo que andaba buscando: Desde cualquiera de los dos televisores tengo acceso a toda la música y videos desde una única fuente.  Desde los computadores, tengo acceso al NAS via Samba (archivos compartidos de Windows) y ssh en caso de que requiera entrar a picar.

Me tope con 3 problemas que afortundamente pude solucionar.  Esta sección puede ahorrar muchos dolores de cabeza a quienes estén en la misma tarea.  Los problemas fueron:

  • Lentitud y mal soporte de NTFS en otros sistemas operativos
  • Problemas de acceso a las carpetas compartidas
  • Y lo peor: Problemas de soporte de formatos de video en los televisores.

Vamos a ver…

Sistema de archivos (NTFS vs EXT)

Lo primero que tuve que hacer fue copiar los archivos que tenía en mis computadores al disco del NAS.  Para no dar vueltas innecesarias por la red, formateé la unidad con NTFS en donde había “promesa” de ser soportado en los sistemas operativos que ocupo, que son Mac OSX y Linux.  Con Linux todo perfecto, acceso de escritura rápido y seguro como es habitual, pero en Mac OSX es un DESASTRE.  Tuve que instalar aplicaciones adicionales y peor aún, el disco comenzó a quedar más corrupto que Julio Pereira, y eso ya es mucho decir.  Por suerte los primeros archivos estaban respaldados asi que no perdí nada.

Ya que no podía confiar en OSX para escribir en ese disco, decidí conectarlo directamente al NAS y copiar los archivos via red.  Lo que comencé a percibir es que la escritura en NTFS en un equipo de poca potencia como el NAS es increíblemente lenta.  Finalmente me fui a la segura y dejé el disco con ext3, con eso el rendimiento se aceleró bastante aunque sin llegar a ser espectacular.  Dependiendo del volumen de lo que necesito copiar, lo copio via red al NAS o bien conecto el disco a un Linux y copio directamente con ese computador. Intentar EXT en OSX? No, gracias.

Acceso a archivos compartidos

Para acceder a los archivos compartidos se puede usar ssh/scp o bien el protocolo de compartición de archivos de Windows (SMB/Samba).  Ambos funcionaron impecable en Linux, gracias al soporte simplificado de ambos protocolos en Nautilus/GNOME. Copiar los archivos es algo tan simple como arrastrarlos de allá para acá como si fueran locales.

Por otro lado, el tan cacareado fácil de usar Mac OSX, dió algunos problemas.  Se resistía a conectarse al NAS dando un mensaje de error de que el servidor no está disponible. Cuento corto: Max OSX no soporta versiones antiguas del protocolo, por lo que el procedimiento que debo aplicar cada vez que inicio OSX es:

  1. Tratar de acceder a los archivos para que me tire el error
  2. En una consola, ejecutar el comando: sudo sysctl -w net.smb.fs.kern_deprecatePreXPServers=0



Formato de video / codecs

El principal problema que tuve con los formatos de video y sus codecs es que no todos están soportados en mis reproductores (LG y GoogleTV), por lo que tuve que buscar algo que funcionara bien en ambos.  Por otra parte, en algunos casos al adelantar el video éstos se quedaban pegados o en el caso de LG, arrojaba un error de que no podía reproducir el contenido.

Finalmente la combinación perfecta fue: Contenedor MKV, Video H.264, Audio AAC codificado por ffmpeg, Constant bitrate.  Para codificar los videos, después de probar varias aplicaciones me quedé con Handbrake.

Con esa combinación logré : Soporte de múltiples streams de Audio en un sólo archivo (ejemplo 2.0 y 5.1), incrustación de subtítulos en el mismo archivo, bajo bitrate y por lo tanto archivos pequeños.  La selección del codec de audio se debío a que el codec por omisión en OSX (CoreAudio) se desincronizaba en algunos videos.

Otras alternativas

Por supuesto que este artículo es mi caso particular, que soluciona los problemas que se presentan con mis equipos disponibles.  Como dicen por ahí your mileage may vary.

Como dato final, si es que quieren lograr algo similar, tienen múltiples alternativas, lo importante es que cuenten con soporte DLNA de alguna forma, ya sea integrado en el televisor o a través de alguna “cajita” adicional.  He visto que ya algunas tiendas venden equipos “AndroidTV” como el de Geniatech, la consola Playstation3 también soporta DLNA, etc.  También es opción usar XBMC ya sea conectado al televisor con un mini computador (como el Rapsberry Pi), o en un computador común y corriente.

 

16 de marzo de 2013

Lynckia: vídeo conferencias en HTML5 (look ma! no plugins)

Lynckia (plataforma de comunicaciones de código abierto) permite realizar comunicaciones en tiempo real desde tu navegador usando la tecnología WebRTC. Aunque hasta hace poco sólo el navegador Google Chrome disponía de una implementación avanzada de WebRTC, desde el 4 de Febrero de este año podemos usar también el navegador Firefox. El 6 de Marzo (es [...]

20 de febrero de 2013

New media controls in WebKitGtk+

So it looks like my patch for the rework of the WebKitGtk+ media controls was finally landed.

First I would like to thank Igalia for giving me some time to complete this task, which took some work and began at WebKitGtk+ hackfest some time ago with Žan Doberšek and Jon McCann.

Starting point was:

Starting point

As you can see the controls look like an old Gtk+ application without any theming. Jon suggested that we could began with mimicing Chromium controls as they look closer to any modern themed GNOME application and adapt them to use the GNOME symbolic icons and keep some other stuff like the volume bar, but of course making it look nicer.

What was done:

  • Adding the GNOME symbolic icon theme and a method to replace the normal stock icons, though we keep them as fallback.
  • Deep adaptation of Chromium CSS and C++ code to make it suit the GNOME requirements.
  • Some buttons fell off the design, like seeking backwards and forward.
  • Aligned the elements with the pixel ruler to make them as close to perfect as possible in all conditions (as some buttons are hidden in certain situations, like fullscreen, volume…).
  • Fixed a bug about the buffering ranges that was in trunk at that point, but was independent of the code I was cooking.
  • Removed as much of the C++ code as possible to deviate the drawing to CSS, which is more maintainable for design purposes. The only things that are still painted with C++ code are the slider tracks, which depend on parameters than cannot be specified in CSS, like the buffering ranges and the volume (which was not before, but I introduced for design coherence).
  • Removed the focus ring which was making the controls uglier.
  • Removed the dead code.
  • New baselines for the tests, including the pixel ones. Flagged also some tests that are (and will) not working in Chromium either.

I had a small issue with a Chromium guy landing a patch that forced me to change the display of some components from -webkit-box to -webkit-flex and of course, rebasing all related tests. This created a small delay in landing the patch, but it finally did as 143463.

And the result is the following:
New media controls

I don’t know about you guys, but I like it!

18 de febrero de 2013

Las 5 peores cosas de la República Checa

Como buen español que se precie no puedo dejar de criticar cosas, y ya puestos a criticar, vamos a criticar a mi país de acogida.

Eso sí, que nadie piense que soy un desagradecido: si vivo aquí es porque me compensa y lo bueno supera lo malo, pero no por ello voy a dejar de criticar lo que veo que está mal.
De hecho, ya estoy tardando en hacer una lista igual pero de las mejores 5 ó 10 cosas de la República Checa: próximamente en su blog amigo.

Czech flag 

Sigue leyendo...

Etiquetas: ,

10 de febrero de 2013

La revolución iraní: Cartas desde Irán

Este verano hablando de Irán con un amigo iraní que vive en Praga, y de cómo le estaba plantando cara a los Estados Unidos, éste me recomendó un documental cuyo nombre luego no pude recordar, aunque acabó enviándomelo en un mensaje. Yo defendía la postura de Irán contra el imperialismo estadounidense. Él, iraní de pasaporte, medio inglés medio estadounidense (mucha de su familia vive en los Estados Unidos) me criticaba la gran fachada de su país, sin llegar a entrar en el conflicto internacional actual.

En sus comentarios me pareció ver bastante afección por el sah, que según él declaró algo como: «si esto es lo que mi pueblo quiere, ellos creen que van a tener mejor vida con otro sistema, o debe ocurrir un milenio religioso, lo acepto tristemente y me voy porque amo a mi pueblo». También me comentaba cómo los radicales llegaron al poder, moviendo a las masas con mentiras sobre cómo mejorarían la vida de las personas en todos los aspectos (especialmente en el aspecto energético, ya que parece ser que la electricidad escaseaba).

Al final lo que ha tenido el pueblo iraní es un dictador tras otro, pero lo importante es que la gente se ha movilizado y aún con grandes dificultades está contando lo que pasa. El documental Cartas desde Irán merece la pena, aunque sólo hace referencia a hechos actuales.

[http://www.youtube.com/watch?v=bnsJs_vAXvU]

Sigue leyendo...

Etiquetas: , , ,

08 de febrero de 2013

Poniendo el foco sobre Webkit

En Bitergia estamos analizando los proyectos de software libre que creemos tienen un mayor impacto en la industria. Y uno de ellos es Webkit. Tras un primer informe general nos hemos centrado en la actividad en el proyecto que es revisada entre miembros del proyecto, los “commits reviewed” y utilizando esta información, hemos publicado un estudio de compañías. En función de los resultados ha sido entretenido ver como Google ya tiene más desarrolladores, y revisores, que ninguna otra compañía, incluyendo Apple. Como Apple sigue apostando fuerte con un equipo de más de cien personas. Y como compañías como Nokia, Blackberry (RIM) o Adobe también invierten muchos recursos en el proyecto.

Utilizamos ya la última versión de vizGrimoire para construir el informe, en la que he estado trabajando duro los últimos meses.

Me hace especial ilusión ver a la empresa gallega Igalia como la quinta empresa como contribuidores al proyecto. Hicieron una apuesta importante hace unos años y se comienzan a ver los resultados. Seguiremos informando sobre la evolución en Webkit … y en otros proyectos.

03 de febrero de 2013

Accessibility in [WebKit]GTK+

This past week I’ve spent some time explaining to my mates at Samsung the basics about how accessibility works and is implemented in WebKitGTK+. I realized, yet again, of how messy and confusing everything can be the first time you encounter these things. After all, WebKit is quite a complex project already and accessibility is not a simple matter either.

In order to help them better understand this topic, I wrote a summary to have as reference that explains in my own words which the main pieces of the whole puzzle are, and how they relate to one another. In my experience, it’s not always easy to understand the big picture quickly, and I think this kind of documentation can be quite useful for anyone willing to contribute to accessibility in WebKitGTK+. At least it would have been useful for me when I started working on this. I only regret not having written it before, but better late than never, right?

So let’s begin then. I will start by talking about accessibility-only stuff, which are basically common to any accessible application based in GTK+. Then I will explain the bits specific to WebKitGTK+ and how they fit in the picture.

Accessibility in GTK+ applications

The parts, or “actors”, involved in any GTK+ application from an accessibility point of view are:

  • Assistive Technologies (ATs)
  • AT-SPI (Assistive Technology Service Provider Interface)
  • ATK (Accessibility ToolKit)
  • ATK <-> AT-SPI bridge
  • GTK+
  • GTK’s Accessibility Implementation

Accessibility in GTK+ applications

Now let’s describe all those points, one by one:

Assistive Technologies (ATs):

ATs are applications whose main purpose is to facilitate access and/or interaction with certain bits of information interesting from an accessibility related point of view, exposed by other applications. This access/interaction can be primarily output based. For instance the Orca screen reader is an AT which provides access via text to speech and/or refreshable braille to on-screen information exposed by editors, browsers, mail agents and other applications.

Other ATs are primarily input based, allowing the user to interact with the exposed applications by executing certain actions over them (e.g. clicking on a exposed link), so it’s not just about “consuming” information. Normally, ATs are called the clients and the applications exposing information the servers, as in the end it’s actually an implementation of a typical client/server architecture.

AT-SPI (Assistive Technology Service Provider Interface):

Set of interfaces that Assistive Technologies (the clients) understand and use to inspect and interact with the accessible content exposed by applications in Linux environments. At some point, “someone” has to provide actual AT-SPI objects (linked together forming a AT-SPI hierarchy) implementing several of those interfaces (depending of the type of object) so ATs can “see them”.

This is the job of the AT-SPI registry, a daemon which takes care of maintaining a hierarchy of AT-SPI objects for every single accessible application in the system, in a centralized way, so ATs can interact with them. It is worth mentioning that the parent/children relationships in that hierarchy are modelled in terms of D-Bus, so different AT-SPI objects can belong to different processes.

ATK (Accessibility ToolKit):

The toolkit used by GTK+ applications to expose accessible representations of the toolkit’s objects, along with appropriate interfaces, on the side of the applications exposing content (the servers). This representation is an almost a 1:1 match with the objects and interfaces defined by AT-SPI (that is, almost).

The main difference when it comes to understanding its place in the puzzle is that AT-SPI is what clients (ATs) understand, and that is not process-bounded (see previous point). ATK, in contrast, is what servers implement to expose accessible information, and it is process-bounded. Thus the parent/children relationships in the ATK hierarchy are modelled by actual references (pointers) between objects living in the same process.

ATK <-> AT-SPI bridge:

The glue that makes sure there’s a mapping between the ATK hierarchy living in the server process and the AT-SPI hierarchy held by the AT-SPI registry. Such a bridge is implemented in terms of D-Bus too, as it needs to communicate with the registry whenever something needs to be updated there, as well as when the server needs to react to external actions coming from ATs (e.g. perform the default action for an object).

GTK+:

The widgets toolkit normally used by applications embedding WebKitGTK+. Explaining what GTK+ is beyond the scope of this post, so I will assume you already know what it is.

GTK’s Accessibility Implementation:

Provides ATK objects implementing different ATK interfaces for every widget from the GTK+ library, and uses the ATK <-> AT-SPI bridge to communicate with the AT-SPI registry. This means that if you use standard GTK+ widgets only, your application will be accessible out-of-the-box. On the contrary, should you use custom widgets, you’ll probably have to write custom ATK objects implementing the proper ATK interfaces to make them accessible too.

So that’s all so far, when it comes to GTK+ applications. Check the following diagram for a more detailed look at all these hierarchies for a hypothetical GTK+ application exposing information and a screen reader accessing it:

Accessibility in GTK+ applications: a specific exampleAs you can see, there’s an ATK tree matching the GTK+ hierarchy, and another AT-SPI tree matching the ATK one. Finally, the screen reader accesses the information through that AT-SPI tree, as explained above.

Accessibility in WebKitGTK+

Now that we already understand the basics of accessibility in GTK+ applications, let’s add the bits specifically related to WebKitGTK+. Namely:

  • WebCore’s Accessibility Objects
  • WebKitGTK+ (ATK) wrappers
  • WebKit2GTK+ specific details

Again, a picture is usually better than just text, so here you have one too:

Accessibility in WebKitGTK+

In order to clarify it a bit more before explaining each point, let’s just say that  you’ll have to look in the dashed box named WebCore accessibility world, where the hierarchy on the left (red & orange) represent the WebCore Accessibility objects, while the one on the right (the green one) represents the WebKitGTK+ ATK wrappers.

With this in mind, let’s examine these three points in more depth:

WebCore Accessibility objects:

Similar to GTK’s Accessibility Implementation, WebCore‘s accessibility objects are the implementation of an independent hierarchy exposing accessibility related information for objects present in a web page. As the mission of accessibility in WebKit is to expose information to users that are normally being rendered in the screen (as well as some other information that might be hidden to regular users), there is a tight relationship between this hierarchy and other ones in WebKit, such as the DOM tree and the Render Objects tree.

This layer is meant to be platform-agnostic, so you won’t find much WebKitGTK+ specific stuff here. Instead, you will find the implementation of the accessibility related specifications published by the W3C‘s Web Accessibility Initiative (WAI), such as WAI-ARIA.

WebKitGTK+ ATK wrappers:

An ATK-based implementation of an accessibility hierarchy where every ATK object will take care of wrapping the proper accessibility object from WebCore, as well as implementing the proper ATK interfaces depending on the situation (e.g. the role of the WebCore accessibility object, some properties coming from the associated Render Object…).

The ATK hierarchy created here is connected with the ATK hierarchy from the embedding application (normally a GTK+ app) by setting the root ATK object in this tree (normally representing DOM‘s root element) as the child of the leaf ATK object in the tree coming from the embedding application (normally the GtkWidget containing the WebView).

As is the case with any other regular GTK+ application, this ATK hierarchy will finally be seen by ATs thanks to the translation that the ATK <-> AT-SPI bridge will do for us, making the whole ATK tree from the WebKitGTK+ based application (from the top level GTK+ window down to the deepest accessibility object inside WebCore) available to the AT-SPI registry by means of D-Bus.

WebKit2GTK+ specific details:

I already talked about this in previous posts, so I will focus here just on commenting the main difference compared to the generic case for WebKitGTK+ described earlier (see previous diagram above):

WebKit2GTK+ implements a split-process model, where the  high level API belongs to one process (the UI process) while the core logic of the web engine lives in another one (the Web process).

From an accessibility point of view, this means that the full hierarchy of ATK objects we had before is also split in two parts: some accessibility objects are now in the UI process and the rest of them will be in the Web process.

To be more specific, we’ll find the following objects in each process:

As I explained previously, these two ATK hierarchies will be seen as a single accessibility hierarchy by ATs thanks to the “magic” of AtkPlug and AtkSocket classes, which takes care of exposing everything together in a single AT-SPI tree. And remember that such a tree is modelled by means of D-Bus, so it does not matter that things are actually in different processes.

Thus, since ATs just  understand AT-SPI, they will see The Right Thing ™ as in the previous case where we have one single process. See the following diagram for a more visual explanation of this:

Accessibility in WebKit2GTK+

Wrapping up

So that’s it. At the end the post turned out to be longer than what I was expecting, as my initial idea was to publish the stuff I wrote internally at Samsung this week, but ended up extending it quite a lot!

At least I hope this will be helpful for anyone willing to contribute to accessibility, either in WebKitGTK+ or in a more general way.

After all, most of the stuff I talked about here applies to  every accesible GTK+ application: Assistive Technologies (ATs)AT-SPIATK, the ATK <-> AT-SPI bridge

Last, I would like to thanks Joanmarie Diggs from Igalia for her help with this blog post. One certainly feels more confident writing a long article like this one about a very specific topic when you have one of the most experienced persons on the matter reviewing it!

28 de enero de 2013

Snippets in Tracker’s full text search results

After quite some time without touching Tracker code, last week I finally could get back to a branch that’s been sitting there for some time now. On fts4, sqlite requirements have been updated to >=3.7.9 so we can stop compiling our custom FTS module and start using what comes with libsqlite.

What does this mean? Internally there’s less code on our plate (and non-stale), and external content support in FTS tables brings us no performance nor file size decreases. plus we get all recent hot improvements in sqlite releases for free.

A bit more on the user point of view, a feature that became possible with this swich is the support for fts:snippet(), which you can use in SparQL queries to get snippets of the matched text:


$ tracker-sparql -q "select nie:url(?file) fts:snippet(?file) fts:rank(?file) where { ?file a nfo:Document ; fts:match 'reference' } order by desc (fts:rank(?file)) limit 3"
Results:
file:///home/carlos/Documents/Papers/pdf_reference_1-7.pdf, ...Reference Streams G8.1872911 Cross-Reference..., 46.0
file:///home/carlos/Downloads/addison.pdf, ...GLU are described in the OpenGL
Reference Manual. The more useful GLU..., 40.0
file:///home/carlos/Downloads/ThesisHo.pdf, ...A8 ]+ ) is also included for
reference. In the third experiment, we apply..., 40.0

So its easier to the eye, tracker-needle search tool now also shows snippets where available, providing a nice context for the matched content

tracker-needle

Remember that FTS searches apply to any property that’s specified by the ontology as tracker:fulltextIndexed, you can run this to find out:

tracker-sparql -q "select ?prop rdfs:label(?prop) tracker:weight(?prop) where { ?prop tracker:fulltextIndexed true }"

There’s also the possibility you had no idea what I’m talking about :) , If desktop semantic search still tickles your curiosity I’ll point you to the fine gathered documentation about Tracker.

This work was kindly sponsored by Lanedo.

13 de enero de 2013

Yith Library

In the last few months I’ve been working on a pet project with the help of Alejandro Blanco. We call it the Yith Library and it is a open source web password manager.

A Yithian is our beloved mascot

It all started as an experiment in our daytime job. Following the trail of our friends at Kaleidos we participated in the second PI Week back in July 2012. In this week we got a chance for doing things non related to our regular projects in order to foster innovation. Alex and me decided to work on a web password manager which was something we needed as an excuse to learn cool things like Ember.js, crypto javascript libraries, Pyramid, MongoDB and Oauth2 technologies among many things.

At the end of that week we got something working but too raw and clunky to use for anybody other than Alex or me. Since that day we have invested many hours from our free time and we now think it can be valuable to other people so that’s why I’m announcing it. No need to say it is far from being finished and we have plenty of ideas to keep it improving. But having an initial release and publishing it is something we really wanted to do for a long time.

Yith Library’s developers use it as our current password manager. We like dogfooding ourselves and that’s why we think it is ready to keep your secrets secure too. Give it a try and tell us what you think! We’d love to hear your feedback.

Now for the mandatory links:

12 de enero de 2013

My first week at SERI

So, after almost 3 months of “holidays”, I’ve finally started working on my new job this Tuesday in Samsung Electronics Research Institute UK (aka SERI), where I’ll join a team mainly working in A/V and DTV related stuff while, at the same time, I’ll keep contributing to WebKit and WebKitGTK+.

Samsung Smart TV Unveils New Smart HubAs you can imagine, being the first week means that I mostly spent my time learning a lot of stuff about my new job and the tools I’d be using, as well as setting up my development environment and getting to know my colleagues and the things we’ll be working on.

But for the time being I have to say that my first impression has already been very positive and that I’m enthusiastically looking at the future and what it’s going to be next. Surely it will be a very different experience compared to what I was used to, but in a way that’s precisely what I was looking for, and so that’s why I feel very optimistic and motivated about it.

Also, and besides work related stuff, being a new resident in the UK also means that I had to spend some time doing some additional things, such as creating a bank account, getting a UK-based SIM card and starting to look for a place that should become our permanent residence in 2-3 months time, once my wife and my children move as well to the UK (they’re still in Spain), hopefully before Easter. Fortunately, being a EU citizen simplifies a lot the whole thing of coming here to work, since I don’t need any VISA or the like. Just my Spanish ID and/or Passport are more than enough.

Anyway, I’ve just arrived in the UK on Monday and started working on Tuesday (yeah, I love having big margins) so still much to do left, but I’m already on my way so it’s a matter of time that we are settled here, and that we start living the “English adventure” all together again.

But in the meanwhile we’ll have to live with me visiting them every 2-3 weeks and the typical audio/video conference tools.

Can’t wait!

29 de diciembre de 2012

Frogr 0.8 released

During the last weeks, I decided to make the most of some spare time I had while still in “nowhere land” (see my previous post) and so I’ve been working in frogr to see if I could release the 0.8 version before the end of the year. In my mind it looked like kind of a nice and humble Christmas present to the world and, at the same time, a interesting way to spent this time I had between my depart from my previous job and the start of the new one.

And it turns out that, at the end, I didn’t manage to have as much spare time as I initially expected to have (I was pretty busy most of the time, actually), mainly due to many unrelated things I needed also to take care of, but in the end I still managed to steal some minutes here and there and I’m now proudly announcing that the new release is finally out.

But before going on, see the mandatory screenshot, as taken in my Fedora 18 machine:

As you can already spot in the screenshot, some changes are already quite visible, but some others are not, so let’s now comment on the most important ones, one by one…

Ported to GtkApplication and GMenu

It’s no secret that one of my favourite changes in this release is the integration with GNOME 3‘s “global menu” (aka the application menu), which makes frogr more beatifully integrated with the desktop than ever. However that came with a price: I needed to port frogr to GtkApplication first and then implement both the application menu and the menu bar using GMenu, which also made me raise the required version for GTK+ up to 3.4.

Sure I could have kept adding more ifdefs to the code to keep supporting previous GTK+ versions, but I also saw this as a good opportunity to clean up the code and get rid of so many conditional compilation units that were increasingly harder to maintain, and so I did it. As a plus, the OS X specific code has been reduced enormously as well, since GTK+ 3.4 integrates very well with OS X without having to do anything special, as I needed to do when I used GTK+ 2.24 for that port.

Loading and saving ‘projects’

This has been one of the features that several people have suggested in the past in different occasions, and so one of those I hope people will enjoy the most with this new release: the possibility to save the current session into a “project file”, so you can resume your work later.

How it works it’s actually pretty simple: when you save a session to a project, frogr will just serialize your current pictures, sets, groups and local tags to a json file (using json-glib) that you can use to restore the state later. It could be more sophisticated, but I think that it works reasonably well in the tests I did considering what it was designed for. In any case, please feel free to report bugs or feature requests to improve or fix things if needed.

Support for video uploads

Believe it or not, frogr has been almost ready to upload videos since some time ago, since for Flickr a video is just a “moving picture”, and it’s treated in exactly the same way than pictures when it comes to the upload API.

The only thing that was missing to remove that almost from here was to generate thumbnails for videos so they could get loaded into the UI. Not rocket science, sure, but something which needed doing and which was not a priority at all until now. And to be honest, it is not a priority yet anyway, but I felt like doing it this time once and for all, so from now on you can upload videos too.

Other features & bug fixes

Besides those three and perhaps more noticeable features, frogr 0.8 comes with several other new things, bug fixes, small changes and refinement that I hope will make this release more stable, useful and fun to use than ever.

Some examples of those other new things are, as taken from the NEWS file:

  • Handle and report errors in a better way (no more mysterious failures).
  • Perform after-upload operations (add to sets/groups, set license…) in parallel.
  • Avoid fetching sets/groups/tags when still not connected yet to Flickr.
  • Hide title bar when main window is maximized (see screenshot above).
  • Renamed the ‘Actions’ menu to ‘Edit’ and brought the ‘File’ menu back.
  • Allow sorting elements in the icon view by size.

Last, I’m also quite happy to tell that the OS X port of frogr has been finally migrated to GTK+ 3 in this release (at last!), and that the whole process of building it for that platform is now easier than ever, thanks to a specific Jhbuild moduleset I created for that purpose, following the lead of GEdit (thanks Nacho for the suggestion).

Check out the README file in the osx/ directory if you feel curious about the process or if you want to build it yourself. It shouldn’t take more than 2-3 commands in the terminal to get something like this running in your OS X machine:

Also, another advantage of having that moduleset created, is that now it’s trivial to properly document (by means of a shell script) the bundle file used to distribute frogr in OS X, instead of just providing an “opaque” pre-compiled bundle, as I used to do in an “unofficial way” with previous versions. Feel free to grab the bundle I’ve just created for this release from the GNOME FTP server.

So that’s it. I hope you enjoy using frogr 0.8 as much as I did writing it, and if you eventually find it useful too, then even better! As usual, check the website of the project for additional information or just to know how to install frogr on your system.

OpenStack Lab Resources

It's great how OpenStack automatizes many administrative (and why not, pretty boring) tasks that sysadmins had to perform a few years ago. It's way faster, more secure and easier to administer.

On the client side, it's also pretty convenient. A new VM can be instanced and booted within seconds from a Web interface or an (always cozy) terminal window.

However, even with those tools, there are still a few recurrent and time consuming tasks that we, at the Red Hat's OpenStack team, have to perform once and again while working on OpenStack. For instance, it's pretty common to deploy all the OpenStack services within a single VM running in our internal OpenStack Lab (kinda an "Inception" OpenStack instance).

Derek Higgins and I have written a few scripts to take care of this sort of tasks. It isn't rocked science, but they're definitely pretty handy for getting a full OpenStack cloud deployed within seconds (for testing and development purposes).

The scripts are available at GitHub (lab-resouces), just in case they might be useful for you guys.

26 de diciembre de 2012

WebKitGTK+ Hackfest 2012

This year again the WebKitGTK+ hackfest took place at the Igalia office in A Coruña, and this year again it’s been awesome.

My main goal for the hackfest was to implement an extension system for the web process in WebKit2, that would allow, among other things, to access the DOM, which is the major regression of the WebKit2 GTK+ API. The idea was to use the exactly same GObject DOM bindings API we are currently using in WebKit1, so I moved it to a convenient static library and installed the public headers in its own directory making it shareable between WebKit1 and WebKit2. Once GObject DOM bindings were accessible from WebKit2 I wrote a first patch to implement the web extension system providing a new API for extensions to access the DOM.

I also took advantage of the hackfest time, to re-take a task I had pending for some time, adding an API to WebKit2 to handle SSL errors. I didn’t have time to finish the API, but managed to write a first patch to set a policy for SSL errors. For now it only allows to ignore SSL errors and continue the load or make the load fail in case of SSL errors. The idea is to add a new policy to ask the user what to do.

Even though it was not part of my initial plans for the hackfest I ended up working on the document reading integration in Epiphany. I wrote an initial patch for Epiphany to load documents supported by Evince embedded in the window like a web view. There are still a lot of features to integrate like zooming, searching, printing, etc.

Epiphany showing a PDF document

I set a milestone to switch Epiphany to WebKit2 by default at the end of the hackfest, but I didn’t have time to fix all the regressions. We are a lot closer, though.

This event is impossible without the sponsors, thanks!

 

24 de diciembre de 2012

SNMP through SSH

Here is a quick example on how to map a local UDP port against a remote service using ssh and socat. Let's imagine you want to work with a remote SNMP agent (a switch, for instance) but you can only access it from a specific trusted IP (where sshd is running). It'd be trivial if it weren't becase of the triple mapping (UDP to TCP to UDP). Luckily enough, socat does handle those port forwards seamlessly . Check it out:

  1. Forward a TCP port of your local box against the server. The port number does not matter. I will use 12345 as an example:

    # In the client
    $ ssh -L 12345:localhost:12345 server
  2. Map the TCP port you've just opened against the remote UDP port of the switch. In this specific case, that would mean to forward TCP port 12345 to the UDP port 161 of the switch:

    # In the server
    $ socat -T10 TCP4-LISTEN:12345,fork UDP4:switch:161
  3. Likewise forward your local UDP port 161 to the -also local- TCP port 12345 in order to close the circle. In the case, since you'll be opening a system port, you'll have to execute socat with root privileges:

    # In the client
    $ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:12345
And, that's all. At this stage you should be able to access the remote SNMP agent from your cozy localhost:

$ snmpwalk -Os -c 'xxxxxxxx' -v2c localhost system
sysDescr.0 = STRING: Cisco IOS Software, s2t54 Software (s2t54-IPBASEK9-M), Version 12.2(50)SY, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2011 by Cisco Systems, Inc.
Compiled Fri 24-Jun-11 13:08 by prod_rel_team
sysObjectID.0 = OID: enterprises.9.1.400
[...]
 

22 de diciembre de 2012

La clase media

¡Eh, tú! Joven español de «clase media», mira a tu alrededor. Mira a tus padres, familiares y amigos de la llamada «clase media» de antaño, esos que hoy se gastan de 50 años para arriba. Míralos bien, estúdialos. Y ahora compara.

Compara... Compara lo que han conseguido en su vida. Han sido capaces de tener varios coches, el primero, quizá, cuando contaban con unos 25 años. Se independizaron y casaron también alrededor de los veintipocos años. Han sido capaces de pagar su casa que hoy tienen en propiedad, algunos hasta se cambiaron de casa varias veces. La mayoría tienen hijos y han sido capaces de darles una educación medianamente buena, muchas veces enviándoles a otras ciudades a estudiar, al extranjero, a clases particulares de inglés, de refuerzo de matemáticas, lengua, latín... Al mismo tiempo no han renunciado del todo a esas vacaciones, tanto individuales como con toda la familia en Peñíscola, Benicassim, Benidorm, hasta el extranjero... Y ahora, aunque mermada, a muchos les queda una buena pensión además de unos ahorros.

Sigue leyendo...

Etiquetas: , ,

11 de diciembre de 2012

Tue 2012/Dec/11

  • The WebKitGTK+ hackfest has been ongoing for the last three days in the Igalia offices in the not-that-rainy city of A Coruña. We're over twenty people here and we've been hacking, discussing, and ranting over whatnot -- all to make sure that your browsing experience in the forthcoming years will be better than it has ever been. Here's a brief summary of what's been going on hitherto:

    P1020822

    There is, of course, much more going on and it's hard to keep track of the activity of these brave and energetic hackers. Yours truly has had a hard time distracting them from their relentless hacking in order to compile this report -- rest assured that there is probably much more happening between these four walls than what you have just read here. Nevertheless, we all want to thank the GNOME Foundation and all the sponsors who have made this gathering possible.

03 de diciembre de 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.

Mon 2012/Dec/03

  • Igalia is looking for a Free Software enthusiast living in the San Francisco Bay Area to work with us in the role of Sales Engineer. If you're reading this, chances are that I don't need to tell you who we are, what we do, how we do it, and what our core values are, nevertheless, if you want to know more, please read the job opening in our webpage.

    If you have specific inquiries don't hesitate to contact any of us through the usual channels!

25 de noviembre de 2012

Las brigada de información y las cargas policiales

Un comentario en el caralibro me lleva a ver el documental de la petarda de Mercedes Milá Diario de, en el que se justificaban las cargas policiales en las manifestaciones y concentraciones. Antes de ver el vídeo del programa completo comenté en contra de la petarda de Mercedes Milá y de las cargas policiales, y el autor del comentario me encomendó a ver el vídeo antes de hablar. Bien por él, razón tenía.

Tras ver el vídeo no pude más que comentar lo siguiente (con pequeñas modificaciones):

  • Una, me reafirmo, Mercedes Milá es una petarda.
  • Dos: curioso, justo cuando dicen que su equipo está rodeado de gente encapuchada sólo se ven tres. (Si bien es cierto que sí enfocan a muchos encapuchados.)
  • Tres: la misma policía comenta que el 90% de la gente ni siquiera sabrá por qué se carga, y que los manifestantes son gente normal. Luego cargan contra todos.
  • Cuatro: la misma policía dice que los que revientan las manifestaciones son una treintena de encapuchados (curioso, como ellos cuando los fotografían) y son los que se apelotonan enfrente de las vallas de la policía, los que los insultan y los que agitan el ambiente. Dicen que por ellos se acaba cargando, ¿por qué, si la policía es tan lista y son tantos, no los rodean sólo a ellos y no cargan contra todos (que repito, ellos mismos dicen que los manifestantes son normales y no saben ni por qué se carga).
  • Cinco: me encanta que la petarda de Mercedes Milá diga 30 veces: «manifestación no autorizada».
  • Seis: todo muy limpio, sólo muestran a los radicales, no muestran casi ni una sola imagen de la policía dando hostias a tutiplén. Ni tampoco de las detenciones e identificaciones a mansalva. 

Un reportaje a la medida de la policía y del gobierno. Sí señor.

Etiquetas: , , ,

23 de noviembre de 2012

Compartir tu conexión a Internet a través de la tarjeta wifi

Como íbamos diciendo ayer Update [2012/12/10]: a raíz de este artículo, se han puesto en contacto desde el servicio TIC de la EHU para tratar de solucionar este problema entre todos los implicados. Mi labor ahora es recoger información: direcciones MAC, configuraciones de los portátiles, zonas de no cobertura o cobertura con problemas, para empezar [...]

19 de noviembre de 2012

Wikimedia logo family

TodayLast week I finally joined the Wikimedia Foundation, with my US visa renewed and all the bureaucratic requirements in place. I work at the Platform Engineering team, reporting to Sumana Harihareswara and having other (remote) neighbors like Guillaume PaumierChris McMachon and Andre Klapper (of GNOME & Maemo/MeeGo fame, what a coincidence!). I feel happy. I feel honored. I’m ready to do my best contributing to the Wikimedia (with m) movement, one of the most impressive collaborative projects nowadays.

Thousands of people are contributing content and funds to Wikipedia and related projects. What is less known is that the Wikimedia community manages a complex and diverse set of software tools and infrastructure, with dozens of projects written in PHP, Javascript, HTML/CSS, Python, Puppet and more. Above 5 million lines of code, all free software developed openly in a Gerrit instance and GitHub. My work as Technical Contributor Coordinator consists in increasing the awareness and engagement among software developers, testers, system administrators, doc writers and other potential technical contributors.

One way to do this is to reach out to existing developer communities, promoting our APIs and technologies in areas like CMS, mobile, analytics, server infrastructure, media, localization, UX, you name it. I’m also interested in exploring ways of collaboration with companies, universities and non-profit organizations.

But Wikimedia is also the perfect initiative to engage with the unusual suspects: women becoming tech savvy despite social pressure, young and old citizens of countries far from the tech hubs and, in general, regular people with little or no technical skills but with a big motivation in certain Wikimedia aspect. Wikipedia is changing little aspects of people’s lives. How far can we go in the technical side?

WikiLove

Sometimes you join a revolution too soon or too late, but my timing with Wikimedia has been about right: love at the first click about ten years ago, and an increasing involvement since then. The first day I clicked the “Edit” link in a wiki I couldn’t sleep. Literally: I went late to bed only to wake up a sleepless hour later in order to keep learning how that wiki worked. It was an empty TWiki instance and I had admin permissions, so there was plenty to learn.

Since that night I have been using, administering and contributing content to various wiki engines and communities. MediaWiki had become predominant in the past years, being part of my work for Maemo, MeeGo and the Qt Project. And there is also Espiral, my social pet project and my chance to learn the very basics of MediaWiki sysadmin.

My contributions to Wikimedia have been sporadic, diverse and incomplete:

The chronology continues and ends with my current task list. Feel free suggesting new items and different priorities. Most of my work needs to be done next to somebody else i.e. you (yes, you!). Questions? Feedback? Willing to get involved? Let me know.


Tagged: community, contribution, development, MediaWiki, open source, wiki, Wikimedia, Wikipedia, Wikisource

Moving On

Two months ago it was an important day for me. It was the day that I finally told my partners at Igalia that I’d be leaving the company, after almost seven years. It hasn’t been an easy decision to make and so this hasn’t been an easy post to write either… yet one I’d like to write anyway.

But let’s push the rewind button for a moment now…

I’ve joined Igalia on November 2005, initially as a trainee while I was finishing my studies of Computer Science Engineering, and got quickly hooked by the company, the people that was part of it back then and the kind of project they were trying to build.

Igalia as a company is one of a kind, you can be sure of it, and I felt enormously lucky for having found it and having been granted with the privilege of being part of it. And best of all… it happened to have its main office in my own town! I just couldn’t believe it…

I even still recall now how many mates of mine in the Faculty were telling me, back in the days of the University, things like “that Linux thing you like so much is not worth it”, “forget about Open Source, you won’t ever make a living out of it” or even “well, maybe there’s a chance for you to work on that, but it’s definitely not going to happen here”.

I have to say I never believed much in any of those statements (well, maybe a bit the last one), but I swear I couldn’t have ever imagined that I’d be able to prove all of them wrong at the same time without even having to move out of the country, let alone the town.

It was too good to be true. But it was true and real… it definitely was real.

And turns out that what started as a 3-month internship in late 2005, became my first permanent job (and the only one so far) when I became a regular employee on February 2006, to finally become a partner of the company in 2010. Not bad.

I worked on many different projects across all these years, from system administration tasks and pure web development to application development over the GNOME and the Maemo platforms, to end up working on what it probably became the most challenging and interesting thing I’ve ever worked on: the WebKit project and, more specifically, the WebKitGTK+ port.

Additionally, I also met a lot of awesome people while there, both inside Igalia and outside (e.g. at conferences), in some cases  becoming closer to “actual friends” than to “just work mates”, which is yet another great thing I will always feel lucky and grateful for.

In other words, I grew up there, both at the professional and the personal level, and I feel endlessly grateful for that. I’m sure my life wouldn’t have been the same now without that stage in my life, so I don’t have more than good words and thoughts about it.

However, and even if I still think Igalia is an awesome place to be part of, I’ve been lately feeling like I needed a change, to try something new, to move on…

I’m not sure about how much that could be related to the fact that my life is now quite different than seven years ago, and that perhaps my priorities could have shifted now I have my own family, but the fact is that at some point I very clearly saw that I would need to try something else, to change some things and patterns in my life, kind of a “fresh restart”.

And after so much thinking, I suddenly realized such a  change couldn’t ever happen if I stayed in Igalia, since it would probably require that the company stopped being as it is in some ways. And that’s something I don’t think I should ask for “just because I felt that way”. That would be too selfish, don’t you think?

So I made the only decision I thought it made sense: to quit.

Sure it was hard, and even tough at some moments, to make such a decision. But once I made it for real, I have to say I felt very well about it, as if everything was making sense once again, as if the puzzle I was trying so hardly to solve was finally complete.

In any case, this doesn’t mean I want to work on something completely different either. In my lollipop world, my plan is to keep working around the Open Source world as much as possible, hopefully also around GNOME and WebKit, the two platforms I learned to love during these years. Well, actually for the case of GNOME I must say it’s a platform I already loved before joining Igalia, but I can’t deny that being part of that company played a major role to help me get more involved on it, so that’s why I think it deserves some credit.

Fortunately, I’m a lucky guy and I can already say that, just two months after making that decision and starting looking for new opportunities, I already found a job where I think I’ll be able to keep working in what I love (see paragraph above) while, at the same time, being also able to try something different and new compared to what I’ve done so far.

Additionally, I think this new job will also help me find answers to the questions that have been crossing my mind lately, let alone learning new stuff… I’m sure I’ll learn a lot of new stuff as well, something I already can’t wait for.

Anyway, I won’t start working there until January, so let’s go step by step.

First I needed to write this post to tell the world about my new situation (check). Second, I need to use these “two months in nowhere” to re-organize my life and arrange many different things related to the short-term (work in progress). Finally, I’ll start that new stage in my life and finally announce here where I’m going to, something I’d rather keep for another post.

Surely I know all this will mean big challenges for both me and my family (we’ll be moving abroad, to begin with), but those are challenges we’re willing to face and can’t wait for. In a way, I kind of feel like I did 7 years ago right before joining Igalia, when I just finished my studies at the University and still had no clue what I was going to do with my life. Back then, the future looked uncertain and full of opportunities at the same time, and if I now look backwards I can clearly see it was even better than what I’ve would ever have expected. Really.

And you know what? That’s exactly how I feel right now, and that’s a feeling I’m liking a lot. And believe me, I’m pretty much aware that my current situation (married and with two children) is quite different compared to 7 years ago. Yet it doesn’t scare me well enough not to feel thrilled about this new stage in our life, a stage I’m already eager to deal with.

So it’s time to move on. I won’t ever forget the great time I had at Igalia, all the people I met here and all the good things that being part of such an special company brought to my life, but I also think now it’s time to look forward and focus on the future.

I have the most amazing family in the world and we’ll be together on this through thick and thin, so I’m already sure we’ll be fine. It’s just a matter of time we’ll get there, so what else can I ask for?

Just wish us good luck. That should do the rest :)

17 de noviembre de 2012

El atractivo (o la complejidad) de Javascript en la web

Ayer disfruté mucho programando en Javascript en el que poco a poco va siendo el primer producto que estamos desarrollando en Bitergia: nuestro M0, el análisis básico de proyecto de software. Y hoy me preguntaba que hace diferente cuando programas en Javascript, y en concreto para la web, de cuando lo haces en otros entornos.

Creo que la clave no es que sólo Javascript, un lenguaje sin tipado y muy dinámico, sino la combinación Javascript y las tecnologías web, y en especial, de DOM (Document Object Model). Hoy he entendido bien porqué a la plataforma de visualización D3 se la llama “Data Driven Documents”. Cuando programanos en Javascript (JS) para la web, en realidad estamos en el mundo “Document Oriented Programming”: no basta con conocer el lenguaje JS, sus motores y sus librerías (incluyendo sus llamadas asíncronas famosas en el mundo Ajax), sino que hay que dominar DOM, su modelo de eventos, y su modelo de estilos (CSS).

La combinación de todas estas tecnologías permite hacer desarrollos espectaculares, pero desde luego, tiene un listón de entrada bastante alto y una formación multidisciplinar. Creo que todo esto es lo que hace que la programación web del lado del cliente sea tan divertida. Y el tener tan cerquita al usuario final.

En el mundo de las forjas: Apache Allura

Dentro de Bitergia voy cayendo de forma natural cada vez más al desarrollo de software. Y una de las áreas donde estamos especialmente activos es en la de forjas, algo que comieza a dar sus resultados. Hemos estado integrando en Allura (el nuevo software de forjas que usa sourceforge) todo el sistema de visualización de métricas que estamos desarrollando en Bitergia, y que se puede ir viendo en los informes que vamos publicando: el de Allura o el de FusionForge por ejemplo.

El desarrollo en Allura se está abriendo desde su llegada a Apache y ya estamos dentro del PMC y con permisos de commit dentro del respositorio de Allura. Es realmente motivante el volver a trabajar totalmente en proyectos de software libre, con equipos internacionales, dentro de plataformas y modelos de participación maduros como Apache y en herramientas con arquitecturas y tecnologías tan chulas.

Las forjas, junto con las métricas de software, son las dos áreas principales en Bitergia desde sus inicios, y seguimos con todo el foco en ellas. La estrategia de forjas es algo más compleja pero sin duda, apasionante, divertida y motivante. Aunque aún hay gente con opinión formada que no ve la necesidad de una forja como tal, que duda cabe que la integración entre herramientas que ofrecen puede añadir mucho valor (commits asociados a tickets, asociados a mensajes en las listas de correo y a entradas de requisitos en el wiki, por ejemplo).

Espero que dentro de unos meses hayamos podido participar de forma activa en el desarrollo de Apache Allura y tener ya alguna implantación de esta herramienta que estoy seguro jugará un papel relevante en este área, frente a otras soluciones como FusionForge, Redmine, Trac, las herramientas de Atlassian o Github.

Recuperada la tableta Nexus 7

Desde que compré la Nexus 7 hace ya algunos meses estaba muy contento con ella. No es que la de un uso intensivo (navegar, leer correo, las redes sociales, escuchar música, ver algún vídeo, ojear algún libro) pero la batería dura varios días, es muy manejable y se actualiza sin problemas.

Con la salida de Android 4.2 llegó la actualización a la tableta y como siempre, le dije que adelante. Todo fue bien de forma aparente, llegó a iniciar y todo, pero se apagó en algún momento y ya no arrancaba. Se quedaba en bucle en el proceso de inicio y ya sabía que sin actuar, esto no tiene solución, ya que lo he visto cuando he trabajado desarrollando versiones a medida de android para móviles y tablets.

Ya me mentalicé para tener que cambiar a mano el sistema opertativo (firmware) del N7. incluso comencé ya a documentar todo en el wiki, cuando encontré documentación sobre como volver por “hardware” a la versión fábrica del N7. El proceso no es que sea muy amigable (el típico basado en el modo recovery), pero sí muy efectivo y la sorpresa es que ha recuperado no el sistema que traía la N7 de fábrica, sino el Android 4.2.

Bueno, dos días sin usar la tablet, algo de preocupación y de pérdida de tiempo, pero ya está de nuevo la N7 en producción y con más seguridad al conocer este procedimiento. ¿Tú ya tienes tableta?

13 de noviembre de 2012

Las páginas de Facebook de tres políticos

Todos sabemos que el número de seguidores de una página del caralibro no es un indicador de nada, aunque me alegra que los dos tipejos estos, en primera línea de la política, se vean superados por Anguita.

En otro orden de cosas, me parece curiosa la foto de cabecera de cada uno de ellos:

  • Rajoy aparece junto a los símbolos del Estado y de la Unión Europea, así como de una bandera que parece catalana (ver foto y comentario donde se dice: «La UE se ha hecho a sí misma a través de la unión y no de la separación. [...]»). Rajoy necesita recalcar su papel.
  • Rubalcaba aparece dando un discurso ante las masas... esas masas que ha perdido y han dejado de votarle.
  • Anguita aparece en un sofá y en un podio de conferencias, nada más.

Páginas de Facebook de Rajoy, Rubalcaba y Anguita

Etiquetas: , , , ,

11 de noviembre de 2012

LinuxCON & KVM Forum 2012

I'm just back home from LinuxCON Europe and the KVM Forum 2012. It's been the first Linux Foundation event I attended in Europe. All the previous events I attended were held in either the US or Asia. So what? What's with the European version of the event? You must be thinking.

Well, there are quite a few attendees in common, very similar topics covered by the sessions, a few interesting keynotes, and other that were clearly bought by companies who tried to compensate their lack of relevancy in the upstream projects they depend on — I'm confident you know which those are. Same old same old.

In this case, even if the organizers and dynamics of the event were the same, there were a few little differences (mandatory reference!) that I'd bet were most likely due to a slightly smaller budget for the event.

It did catch my eye the design of giveaway t-shirt. It had a huge flag of Barcelona in the front, like if the city where the conference was held was actually that important. It's interesting because I don't think the t-shirts I got at the same event in the US (Mountain View/CA, San Francisco/CA, and Austin/TX), Japan or Germany had any sort of flag printed on them. Don't get me wrong, I don't mind, but I'm afraid it's clear that the Linux Foundation gullibly took some interested advice on the design of that t-shirt. Rookie mistake!

Anyway, the event was definitely worth attending, specially the KVM Forum where I spent most of the time. As usual, it was also a great place for greeting old friends, and meeting interesting people.
 
Linus Torvalds & Alvaro Lopez Ortega - Nov 2012
A rather blurry picture with Linus
  
Kudos to the Linux Foundation for a great conference. I look forward to the next one! :-)

05 de noviembre de 2012

Fedora`s Packaging System

For some reason, during the last few years I had always used Debian based Linux distributions. At the beginning it was Debian itself and then I switched to Ubuntu. Truth be said, during all that time I didn't pay much attention to the Fedora based operating systems. The reason for that? Well, I was already familiar with dpkg and apt-get, and Ubuntu was trendy at the time.

It hasn't been until recently that I started using Fedora/RHEL. I must say it's been surprising for me to see how polished its packaging system is. The user experience is remarkably straightforward and robust. In fact, from a technical point of view the packaging tools seem also to have an extra grade of consistency.

Most, if not all, the problems I found in the past are already addressed in the Fedora world: Delta-based updates by default? Sure, why not, it's a pretty useful feature. A centralized Git repository with all the distribution packages? You got it. A simple one-stop application to build packages (both locally and remotely in the Fedora's compilation farm) for different versions of the distribution and/or supported architectures? No biggie! fedpkg to the rescue.

All this might sound silly if you haven't been so focused on a subset of the Linux ecosystem as I was. For me, it's being an eye-opening experience where technology and community openness are concerned.

02 de noviembre de 2012

Trouble undocking an X230

A few days ago I received a brand-new Lenovo X230, along with its docking station and a monitor. The setup process went well, everything worked out of the box with Fedora 17.. or so I thought.

Today, I stumbled upon an unexpected problem. When the laptop was undocked, the video reconfiguration wasn't being trigerred, and thus the screen of the laptop remained turned off.

The obvious solution was to add a handler to udev, so it'd listen to changes in the drm subsystem and acted upon them. "udevadm monitor" confirmed there was an event being triggered, and so the only missing bit was the script and the actual handler file in udev.

These are the files involved:

/etc/udev/rules.d/80-monitor.rules
ACTION=="change", ENV{DEVNAME}=="/dev/dri/card0", RUN+="/etc/udev/monitor.sh"

/etc/udev/monitor.sh
#!/bin/bash

USER=$(w -h -s | awk '$3==":0"{print $1}' | sed 1q)

su - ${USER} -c "(
    export PATH=/usr/bin:/usr/sbin
    export DISPLAY=:0
    export XAUTHORITY=$(getent passwd ${USER} | cut -d: -f6)/.Xauthority

    desktop() {
  xrandr --output LVDS1 --off || true
  xrandr --output HDMI3 --auto --primary
    }

    laptop() {
  xrandr --output HDMI3 --off || true
  xrandr --output LVDS1 --auto
    }

    if xrandr|grep -q 'HDMI3 connected'; then
  desktop
    else
  laptop
    fi

) 2>&1 | tee -a /var/log/monitor.log"

As you can see in the /etc/udev/monitor.sh script, I connect a single monitor to my docking statition and pivot from the laptop screen to the monitor depending on whether or not the laptop is docked. Pretty standard stuff.

The script is sort of hacky, but it works.. which is everything I needed in this case, and so I'm saving the polishing time for more important matters. :)

18 de octubre de 2012

No andéis viniendo a trabajar a la República Checa

Comisiones Obreras de Castilla y León ha editado una guía prácitca para buscar trabajo en el extranjero —muy enfocada a Europa— pero al parecer no quiere que la gente encuentre información sobre la República Checa...

Guía para buscar trabajo en el extranjero de Comisiones Obreras de Castilla y León

No os molestéis; mejor, más para nosotros :D

Etiquetas: , , , , ,

10 de octubre de 2012

Construyendo una impresora 3D (Parte 1)

Hace algún tiempo me picó el gusanillo de la electrónica para gente que no tiene ni idea de electrónica. Sí, estoy hablando del mundo de los Arduinos. Tras hacerme con un Arduino UNO y hacer un par de chorradas me he propuesto hacer un proyecto un poco más serio.

Aunque conocía el proyecto RepRap, que consiste básicamente en hacer máquinas autoreplicables, hace poco descubrí el subproyecto “Guerra de los Clones“.Desde el primer momento me cautivó el tono Geek y el sentido del humor de este proyecto. Fue el último empujón que necesitaba para decidirme a construir mi propia impresora Prusa Mendel 2.

Con la ayuda de los magníficos tutoriales del amigo Obijuan y algún padrino que me done las piezas me dispongo a afrontar esta aventura.

Esta es la impresora que me dispongo a fabricar

¡Que la prusa me acompañe!

08 de octubre de 2012

¿Tienes fatiga decisional?

Sinfest #3504

Suena a broma pero según este muy recomendable artículo del NY Times, hay respaldo científico para la idea de que tenemos un número limitado de "Magic Points" para ejercer nuestra capacidad de decisión correctamente.

La idea es que nuestra voluntad y lucidez para decidir juiciosamente se desgasta como cualquier músculo. Luego de un día lleno de decisiones estamos, literalmente, en piloto automático.

No pude evitar relacionar esto con el estrés al que sometemos nuestros cerebros cuando usamos adictivamente internet: ¿Debo clickear este, o este link?, ¿Será útil este tweet que acaba de llegar?, etc.

He notado que tiendo a seguir links como idiota luego de jornadas pesadas, o un rato muy largo frente a la computadora.

Para que a ustedes no les pase, les recomiendo el artículo.

06 de octubre de 2012

El palacio de verano de Praga

Letohrádek Hvězda

El palacio-castillo está en un frondoso bosque cerca del aeropuerto, si bien por dentro no es nada espectacular, es un buen lugar para pasar una tarde de domingo con los niños jugando con cometas y demás. Próximamente en Turismo Google.

Etiquetas: , , , , , ,

01 de octubre de 2012

WebKitGTK+ accelerated composition on Wayland

As part of my work at Igalia browsers team, I am working on making WebKitGTK+ and Epiphany work on Wayland.

Just running non 3D websites on Wayland did not involve too much work. But running the OpenGL accelerated code in WebKit was a bit more complicated. Though, I’ve got a first working version.

Video: Epiphany on Wayland running WebGL and CSS-3D

On WebKitGTK+, we enable the use of hardware acceleration with OpenGL for:

  • WebGL: web pages with a canvas using WebGL are run using the 3D hardware available.
  • Accelerated composition of layers. With stuff like CSS-3D transformations, 3D hardware acceleration is handy to composite the layers of a webpage.
You can read more about accelerated compositing on these posts from Martin Robinson: WebKitGTK+ hackfest wrapup, and Accelerated compositing update.

On X11, we use XComposite, sharing a Window among the GTK+ widget (WebKitWebView) and the GL contexts for WebGL and accelerated composition. We have a tree of layers, each one rendering to a texture. Then these textures are composited rendering directly to the X11 window.

On Wayland, things are a bit different. Wayland protocol does not define a way to share a buffer among clients, nor a way to “insert” a window inside another window. My solution is just making the accelerated compositor render the layers to another texture. When the time comes for the WebKitWebView to be drawn (using Cairo), we render this texture too. If we build GTK+ for using EGL, then this process happens completely on GPU.

Next step will be adding support for accelerated composition in WebKit2GTK+. The main challenge here is that the WebKitWebView widget is on UI process and the WebGL contexts and layers rendering are in Web Process. So, if we want to avoid buffers going to/from GPU, we need to share them between the two processes. DRM authentication through EGL_mesa_drm extension could help here.

Javascript y el mundo que le rodea

Llevo unos meses con bastante actividad de nuevo en desarrollo de software y Javascript está siendo un entorno donde cada vez paso más tiempo. Y la verdad, aunque siempre me pasa igual con las tecnologías, cada vez le estoy cogiendo más cariño y me siento más a gusto en su entorno. Os comparto algunas de las conclusiones a las que he llegado.

La guía de Mozilla para mi siempre ha sido la referencia principal para aprender Javascript. Me pasa un poco como con Java y el manual tan estupendo que publicaba y mantenía SUN. Y a mi siempre me gustan los estándares que definen las cosas, y el de ECMA Javascript al final te cuenta todos los detalles que siempre hacen falta alguna vez.

Una vez que domines el lenguaje, todo el mundo utiliza ciertas librerías que ayudan mucho a la hora de programar:

  • jQuery: Sirve sobretodo para manejar el árbol DOM, como se representa el documento HTML, desde Javascript. Añadir y quitar elementos, modificar sus propiedades, capturar eventos y hacer cosas … (cuando se pulsa unbotón, haz está acción).

    Tiene además una parte para comunicaciones (ajax) y unos cuantos widgets útiles (calendario, diálogos, pestañas …), jQuery UI.

  • Underscore.js: Biblioteca con un conjunto de funciones que permiten programa de forma funcional de forma más sencilla.

Para comenzar con esto tienes de sobra, aunque si terminar abrazando la tecnología Javascript, también la puedes utilizar en el lado del servidor con Node.js. Se usa principalmente por tener una solución Javascript completa y por temas de rendimiento.

Según crecen tus programas en Javascript cada vez será más necesario utilizar un framework para crecer de forma mantenible y escalable. Pero eso ya será motivo de futuras entradas en el blog.

Estadísticas para entender mejor los datos

En Bitergia nos enfrentamos todos los días a manejar muchos datos de proyectos. Las estadísticas nos ayudan a poder entender estos datos con mucha soltura ,lo que quieren decir, su calidad, las tendencias y más.

Desde que hice la carrera no he vuelto a tocar las estadísticas, y llegó el momento de cambiarlo. Gracias a un tweet de Negrabarba me enteré de un estupendo curso de introducción a estadísticas utilizando R, justo la herramienta que utilizamos en Bitergia para nuestros análisis. Y llevo el último mes haciéndolo.

La experiencia de los cursos en línea con vídeotutoriales me está gustando mucho en la plataforma de Coursera. Formación gratuita, aún están evaluando modelos de negocio, y de calidad.

Durante el curso quedan claros los principios de la estadística, entender los datos (media, mediana, varianza, modelos, …), poderlos comparar y en algunos casos hasta predecir. La parte que más me interesa es la estadística descriptiva, la que sirve para describir propiedades de los datos. El modelo de videotutoriales de 15-25 minutos funciona muy bien para ir buscando huevos para verlos, y los quiz y prácticas, son buenos motivadores y te sirven para ver si has entendido bien los conceptos.

Si al aprender estadística utilizando la herramienta R le sumas el practicar inglés, ¿qué más se puede pedir?

29 de septiembre de 2012

En fase de aceleración en Bitergia

Llevamos ya casi tres meses a tiempo completo trabajando en Bitergia y la actividad ha ido creciendo. En la parte empresarial, hemos constituido finalmente una Sociedad Laboral Limitada, la llamo la cooperativa capitalista, y en las próximas semanas estará plenamente funcional y pasará a ser nuestra principal identidad jurídica.

Pero sin duda lo más interesante es que ya comenzamos a publicar informes que atraen atención. El que hemos publicado con la liberación de la nueva versión de Open Stack donde ya casi todas las visitas vienen de uno de nuestros mercados objetivos, EEUU. También hemos analizado otros proyectos que aún están en la cocina.

En cuestión de tecnlogías cada vez profundizamos más en el uso de Envision y Flotr2, de momento D3 lo tenemos en incubación, y estamos trabajando a fondo con Javascript, para definir bien la pila de librerías que vamos a utilizar. De momento no vamos a adoptar ningún framework como Dojo o Backbone, aunque están ya en nuestro rádar, con Backbone a la cabeza.

El equipo que formamos la empresa cada vez estamos más engrasados y acoplados, con una visión común y cada vez más comprometidos con el proyecto, motivados por los primeros resultados que comenzamos a tener, y los primeros proyectos en los que estamos trabajando.

El proyecto ahora absorbe demasiado, y quita el sueño de vez en cuando, pero cuando estás motivado e ilusionado, lo que disfrutas lo compensa. Espero poder ir sacando algo de tiempo para compartir desde aquí como sigue evolucionando todo.

27 de septiembre de 2012

Pussy Riot — ¡No pasarán!

Nadezha Tolokonnikova, miembro de las Pussy Riot, con una camiseta donde se puede leer el lema NO PASARAN

Ví la imagen en un periódico en inglés según volvía de Kenia. No pude dejar de esbozar una sonrisa, a la vez que me invadió un sentimiento de agradecimiento.

Etiquetas: , , ,

24 de septiembre de 2012

Syntex Serna Free XML editor sources

Serna has been my favorite XML editor for years for real documentation work. Coincidentally I checked today the stage of the opensource development and found it had disappeared from their websites. As far I understood the Serna company been sold and the new owner had closed not only the opensource activity but the free (as beers) version availability.

Then I've searched for any copy of the open sources and seems to be available at Bitbucket: https://bitbucket.org/syntext/serna-free.

So I'm writing this for helping others to find it.

21 de septiembre de 2012

Hackit’2012, solucionario. Level 4

Así que tenemos que destripar un binario .apk para Android… bien, empecemos con la cirugía. 1) Comprobemos material quirúrgico. Vamos a necesitar apktool para abrir al paciente. 2) Un vademecum de cómo y por dónde cortar tampoco vendrá mal. 3) Proceder a abrir en canal el .apk apktool d AndroidLevel0.apk 4) Buscar un poco dentro [...]

19 de septiembre de 2012

El parlamento de Budapest se traslada a Dortmund

Las revistas de a bordo de los aviones son una fuente de entretenimiento estúpido de encefalograma plano —la mayoría de las veces—, aunque a veces te dan la sorpresa con algo interesante, o alguna cagadita.

Es el caso de la revista de Wizzair que leía yo ayer en mi viaje de vuelta a España, en la que descubrí que el espectacular parlamento de Budapest se había trasladado a Dortmund:

Imagen del parlamento de Budapest ubicada en Dortmund en la revista Wizzmagazine

Esto debería doler un poco siendo Wizzair una compañía húngara, aunque quién publica la revista es Ink Global, que no lo es.

Etiquetas: , , , ,

17 de septiembre de 2012

Hackit’2012, solucionario. Level 3.

Descargamos el fichero enlazado y vemos que es un zip con ficheros binarios .class (Java) dentro: $ unzip jkhil.zip Archive: jkhil.zip creating: org/ creating: org/euskal/ creating: org/euskal/hackit/ creating: org/euskal/hackit/crypt/ inflating: org/euskal/hackit/crypt/CryptUtil.class inflating: org/euskal/hackit/PasswordRevealer.class inflating: org/euskal/hackit/FileClassLoader.class inflating: org/euskal/hackit/trololo.clazz Vamos a ejecutar el que más llama la atención: $ java org.euskal.hackit.PasswordRevealer Exception in thread "main" java.lang.VerifyError: Bad [...]

15 de septiembre de 2012

Ya tenemos root en el Xperia

Ya tenemos el root. Siguiendo estas sencillas instrucciones  de los chicos de XDA-developers, que por lo visto son válidas para muchos dispositivos para Android ICS (4.0.x). Captura del momento:

Si no lo hago hoy, reviento:

14 de septiembre de 2012

WebKitGTK+ 1.10 is almost here!

As you might already know, the new and shiny 3.6 release of the GNOME desktop is right around the corner, and so it’s the next release of WebKitGTK+, the port of the WebKit web rendering engine to the GTK+ platform.

And it turns out that such a release is going to be a very special one for us, members of the WebKit team at Igalia,  since it comes with some very interesting features, like those I already mentioned in the talk I gave during the past GUADEC, mainly:

  • Beta version of the WebKit2GTK+ API
  • Support for Accelerated Compositing
  • WebGL enabled by default
  • Support for HTML5 Fullscreen and WebAudio
  • Multimedia layer ported to GStreamer 0.11
  • Support for the Low-Level Interpreter in JavaScriptCore

From all those, I’m specially happy because we will be finally releasing the very first beta version of the new WebKit2GTK+ API, based in the multi-process architecture of WebKit2, as well as providing support for Accelerated Compositing and WebGL.

This new WebKit2GTK+ API, as you perhaps already know, will allow applications gain the split process model of WebKit2 out-of-the box, which is awesome. Xan already mentioned  some of the advantages of it becoming beta for GNOME 3.6 in his last post this week, being my favorite ones the “increased responsiveness and stability” (quoting Xan) that will come with it, as well as the fact that it will be not only powerful enough to port old applications and write new ones, but also simpler and easier to use (we are putting a lot of effort on this).

And honestly, I think we are doing pretty well in that regard, even though there’s still a lot of work to do before we can release an stable version of this new API (due for WebKitGTK+ 2.0,  to be released with GNOME 3.8), which will also mean the very first version of Epiphany that will be using WebKit2 by default.

With regard to Accelerated Compositing and WebGL, I’d just like to mention that having them supported in WebKitGTK+ from now on is great because it means you will be able to render visually stunning web content in your browser of choice (epiphany, huh?), as well as enjoy more subtle improvements such as smoother animations or increased responsivenes while browsing. You can visit this post by my mate Martin for more details on this topic.

Anyway, all these are very nice words and all that, but sometimes it’s not that easy to properly understand just with words what exactly those things will actually mean for users, so I decided to spend some time today polishing a bit the videos I used as demos in my talk during GUADEC, and link them from here, so everyone can easily watch them now.

Hope you enjoy watching them as much as I did making them:

WebKitGTK+: WebGL and Accelerated Compositing

WebKit2GTK+: The UI and the Web process

WebKit2GTK+: The Plugin process

09 de septiembre de 2012

[LibreOffice] Aplicar coloreado de sintaxis a un trozo de código

Supongamos que has insertado un trozo de código fuente en Python en tu documento .odt. Por defecto, Writer no dispone de ninguna utilidad para colorear las líneas como haría un buen IDE (lo que se conoce como Syntax Highlighting) y tu código se vería bastante feucho. Para realizar el coloreado de sintaxis en LibreOffice Writer, [...]

08 de septiembre de 2012

[LibreOffice] Instalar LibreOffice 3.6 en Ubuntu 12.04

Receta rápida para instalar LibreOffice 3.6 en Ubuntu 12.04 (dado que la versión 3.6 no está aún en el repositorio principal de Ubuntu tiene una pequeña complejidad su instalación, de ahí el tip) Puedes descargar los .deb a mano (vienen en un paquete tgz que tendrás que descomprimir) e instalar de forma paralela una versión [...]

07 de septiembre de 2012

[LibreOffice] Copiar estilos entre documentos

Así que has creado una serie de estilos en tu documento .odt (LibreOffice) que te gustaría reutilizar en otro .odt distinto… Bien, aquí va una receta rápid para hacerlo. Abre los dos .odt y desde cualquiera de ellos, selecciona File/Templates/Organize Doble click en el nombre de los documentos. Se abrirá un submenú “Styles”. Doble click [...]

05 de septiembre de 2012

No es país para blancos

Por motivos de trabajo me encuentro desplazado dos semanas a Nairobi, Kenia. Si bien no me apetecía mucho venir, y sabía que me iba a comer —me estoy comiendo— un buen marrón, tenía que hacerlo por motivos laborales.

El caso es que después de haber visto a toda la gente que trabaja en el sector servicios, increíblemente amables y serviciales todos ellos —hasta el punto que roza lo absurdo, te quitan el plato de la mesa si te levantas al bufé a coger algo más— y también a mi taxista que hasta me llevó a su casa, alejada unos 35km de Nairobi, donde la gente me miraba como si no hubiesen visto un blanco en su vida, pensé que las sugerencias de la Lonely Planet eran algo exageradas. 

Dice la guía Lonely Planet (ed. 2006) «Nairobi is commonly regarded as the most dangerous city in Africa, beating stiff competition from Johannesburg and Lagos». Y acabo de descubrir por qué.

Sigue leyendo...

Etiquetas: , ,