El nuevo teléfono GNU/Linux 100% libre viene en camino: Librem 5.

Purism Libre 5. Imágen de referencia, el teléfono aún está en diseño…

Librem 5 de Purism es el teléfono que se está diseñando y preparando para salir a inicios del 2019 🎉. A enero del año 2018 ya han logrado superar los $1.5M que necesitaban al inicio, con más de $2.2M (🙌) recaudados parece que este proyecto tiene asegurado el dinero para salir adelante.

Aún se puede pre-ordenar el teléfono, la entrega a nivel mundial está incluida en el precio ($599).

Este teléfono abrirá un nuevo camino para GNU/Linux. Está siendo diseñado para correr Debian, o en su defecto PureOS, que a su vez deriva de Debian. Estas son muy buenas noticias, las posibilidades que se abren para los desarrolladores y usuarios son mucho más amplias que con los teléfonos existentes. Podremos tener control sobre todo el stack de software del teléfono, no solo las apps finales, podremos cambiar el kernel, display manager, etc., podremos hacer nuestras apps en el lenguaje de programación que más nos guste (o el que conozcamos 😜).

Es posible que este teléfono comience siendo principalmente para entusiastas, conocedores del Software Libre, o ingenieros de software/programadores. A mediados de este año 2018 tendremos la posibilidad de obtener un kit para desarrolladores 😈, que incluirá una pantalla, pantalla táctil, tarjeta madre, cables y cable de poder. El kit para desarrolladores se puede pre-ordenar ahora por $299. Con este kit se podrán realizar pruebas de instalación de GNU/Linux y pruebas de desarrollo de nuevas apps o apps existentes.

Anteriormente se han intentado teléfonos con GNU/Linux, principalmente con Ubuntu. Canonical intentó el Ubuntu Edge, pero no lograron la marca de recaudación de dinero de $35M 😢; eso fué hace 4 años, las condiciones han mejorado, además Purism puso un monto a recaudar notablemente menor ($1.5M, que ya fue superado 😀).

A pesar que Ubuntu Edge nunca despegó, Ubuntu Touch sigue siendo mantenido por UBPorts Foundation; Ubuntu Touch es el sistema operativo para teléfonos, y que puede ser instalado en teléfonos que vienen con Android. En enero 2018 no pude conseguir a la venta ningún teléfono con Ubuntu Touch preinstalado 😥.

Aún falta mucho por ver en el mundo de los teléfonos con GNU/Linux, esto está apenas iniciando, y cada vez estamos más cerca de poder armar nuestros propios teléfonos, 🔥🔥 pronto podremos cambiar la memoria, almacenamiento, cámara, y quizás hasta pantalla 🔥🔥. Lo importante es que podremos meterle las manos nosotros mismos, lo que es importante para los hackers y geeks 🧠.

 

Advertisements

KDE PIM, processor overheating, What’s wrong with you, KDE?

I has been a long time KDE user. As you can see from past entries in this blog I have been also trying some other desktops. But that search really started shortly after KDE 4 entered into Debian Testing. I used Gnome2 for a while in a machine from the office. The nice thing is that it was a bank and I was one of the really first to use a Linux box full time and Gnome as my primary desktop. I don’t know if as today someone in this bank uses something similar, but at that time someone was trying Debian with Gnome on a testing machine.

Then I tried XFCE wich I really didn’t liked very much. I think it is not as lightweight as they say it is. Then I went on to LXDE, wich is really lightweight. It had some limitations at that time: configuring a second monitor as an extended desktop was not easy, there is no integrated PIM as the KDE’s Kontact PIM suite. It had more other limitations, but this two were the ones that made me move away. Then I tried Gnome 3, but I can’t really get used to it. And again I returned back to KDE.

KDE has really improved since those horrible days of KDE 4.0 to 4.2. And I mean they improved the errors on the code base, and the completeness of the desktop environment. But now the way I use my computer has changed. I use it mainly through the command line; yes it sounds weird, but really, I’m using my computer mainly through a remote connection via SSH with no option to have X forwarding (the conexion is too slow for that to work, I know because I tried), and the client is a Windows machine, so, no X server. Now, having two environments to work on: home and office, I have turn to Google mail, calendar, and address book. Having the KDE 4.8 distribution, a more mature one, I started to try many of the applications I used to work many years ago. One of the first was the Amarok music player. I remember the time when I loved to use it, and considered it one of the best music players; how dissapointed I am with the state of this piece of code; I can’t even arrange a particular part of my music collection in a simple form of having many songs into one particular album. I started to use JuK and really been missing the old Amarok. At some point the Nepomuk service started to put my CPU to 100% at login time. I deactivated it and also deactivated Strigi (an file indexer). Missing the functionlity of KDE PIM, I decided to try it again, to see how it was doing; I think all of the Nepomuk malfunctioning was solved by then.

So I launched Kontact from the first time in months, and when the KMain started to pull my POP email from Google Gmail, it showed me a message asking me to accept an upgrade to Akonadi. Ummm, at this point I started to worry a little, but I decided to give it a try, so I accepted the Akonadi stuff. It did the upgrade pretty quick, so I was reading my email from KMail again. Ohh, what a pleasure… until… the CPU of this poor cheap notebook computer overheated and the whole system shutted down by itself. I turned the computer on again, and tried to read my main from KMail again, and again, but after 3 CPU overheats I decided to stop with all this and to stay with the GMail web interface as I has been doing for the last months. But the Akonadi thing will not dissapear so easy, I was forced to go to the Akonadi configuration and manualy delete my GMail account because Akonadi continued to fetch my email in the background.

Well, no Amarok, no PIM. But this is not the end of the story (neither the end of the overheating). At next day I left the notebook computer switched on and left to the office. Later in the day I tried to SSH into the notebook and there was no reponse. When I came back to home at night, the notebook was still on, but completely unresponsive. Because it happened to me before, I know it overheated and then hanged up before the OS was able to propertly shutdown the computer. So, it overheated again without I being doing anything on the computer, so I decided to blame KDE of all of this. I really get tired of this KDE stuff that overheat my notebook, all of this Nepomuk, Strigi, Akonadi, and the like, all those things I really don’t use and which I can’t really get rid of in KDE. You can’t get rid of those components on Debian and at the same time keep with the rest of the KDE desktop, because they are very tightly integrated into KDE.

So, the solution is to switch to another desktop environment, again. That same night I installed and configured LXDE. The result was that my CPU is at a reasonable level of activity for a computer when it is not being used (near 0%). No overheating, I am writing this via SSH on my console with VIM without worrying if the computer CPU could overheat, nor running top to see wich processes I should be killing. But this is not the end of this history, in the times to come I will be testing and trying one newcommer to the Linux desktop environments: Cinnamon.

P.S.: My work office is two hours apart from home in the best case, I connect to my SSH server on my computer only on my free time.

La comunidad de Python Venezuela y la página python.org.ve

¿Por qué existe una comunidad python en Venezuela?

La comunidad Python en Venezuela pasó por tres etapas claves de construcción.

Al inicio se creó una comunidad a través de la plataforma de actvismo Coactivate.org que se llamó pyve, fue creada el 4 de Junio de 2008 por un grupo de pythonistas venezolanos con el propósito de promocionar, hacer difusión y generar prosperidad en el desarrollo con Python en Venezuela. El link de la comunidad es http://www.coactivate.org/projects/pyve/ el cual no ha sido borrado para quede para la posteridad.

Luego en el año 2009 se crea el grupo Python Caracas el Google Groups: https://groups.google.com/forum/#!forum/python-caracas. Este grupo se crea por una iniciativa originada en la UCV. Con el tiempo este grupo irá generando bastante momento, irá acumulando energía y comenzará a realizar actividades que iniciaron con reuniones periódicas a las que se fue sumando gente de Caracas y sus alrededores. Tuvimos una mesa en el Flisol de Caracas del año 2011, se hizo un primer día Python en Caracas y otro en Mérida también en 2011. En 2012 se realizó un PyCon en la ciudad de Caracas donde se reunió un gran número de personas de todas las comunidades de Python de Venezuela y tuvimos dos invitados internacionales en las ponencias. Ese día se decidió que debíamos unificar las comunidades en una sola y así nació Python Venezuela.

Actualmente Python Venezuela es la principal comunidad de Python en el país, ya que las dos comunidades anteriores fueron desactivadas por mutuo acuerdo. Nuestro propósito sigue siendo el propósito original de la comunidad pyve: Promocionar el lenguaje Python, pero además nos damos apoyo y tenemos una comunidad de apoyo técnico mutuo como en cualquier comunidad abierta de código libre. Nuestra comunidad actual está en Google Groups: https://groups.google.com/forum/#!forum/python-venezuela

La mayoría de las personas que trabajan con software libre o con lenguajes abiertos, como Python, les gusta compartir con personas que tienen los mismos o similares intereses o valores. Es natural que estas personas comiencen a buscar a otros similares para compartir lo que saben, para aprender y para enseñar. Estas comunidades se van creando de forma casi espontánea, de forma des-centralizada, movidas por el interés y por la energía que le impriman los miembros o colaboradores de esa comunidad.

Actualmente el lugar para iniciar con Python en Venezuela es en nuestra página oficial: http://python.org.ve/. Les recomiendo se acerquen por allí.

java code
java code with a meaningless condition

Encontré esta pieza de código Java, sólo es un condicional:

if (banda.getField55().containsKey(“5F34”)
&& (!(banda.getElementValue(“5F34”).equals(“4E50”) && BcdLib
.hexStr_ascii(banda.getElementValue(“5F34”))
.equalsIgnoreCase(“NP”)))) {

En la primera parte de la condición se evalúa si algún campo contiene un valor (una clave). Creo que está bien, porque esta primera parte impide que el acceso a la “clave” en la segunda parte de la condición genere una excepción de null pointer típica de Java, esto es para evitar que el acceso a un campo inexistente genere un error.

Vamos a deshacernos de la primera parte y quedarnos sólo con la segunda parte de la condicion:

(!(banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)))

Creo que siempre devuelve true por lo que esta parte de la condición es inútil. Lo peor es que introduce confusion al código porque el lector cree que este código hace algo realmente útil. Esta parte de la condición es una negación, por lo que si siempre devuelve true, la parte interior siempre debe devolver false, vamos a ver si eso ocurre:

banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)

Para que esta parte de dos condiciones sea verdad, ambas condiciones deben ser verdaderas (es una “y” condicional). Pero aquí están evaluando si un solo valor es igual a dos valores diferentes al mismo tiempo, tal condición no puede suceder nunca, por lo que esta parte de la frase siempre devuelve false. Esto demuestra el punto de que esta parte de la condición carece de sentido.

Esto me lleva a pensar que el desarrollador original no tenía mucha idea de las reglas que él estaba tratando de escribir en su código. O puede ser que esto es un error en la condición que debe ser un “o” en lugar de una “y”? No hay manera de saber la respuesta al día de hoy.

Hay otros problemas sutiles en el código: ¿Por qué un acceso a la clave a través de getField55, en primer lugar, a continuación, acceder a la misma clave a través del objeto banda directamente? Además, están utilizando estos valores mágicas hexadecimales como 5F34, 4E50 y ese string NP, ¿Cuál es el significado de esos valores? Bueno, esto es sólo una pequeña parte de un sistema hecho de código espagueti, así que no me sorprendió encontrar este tipo de cosas, puede ser que empiece a escribir sobre esos trozos de malos códigos o errores …

Meaningless code every now an then…

java code
java code with a meaningless condition

I found this piece of Java code, it is only a conditional:

if (banda.getField55().containsKey(“5F34”)
&& (!(banda.getElementValue(“5F34”).equals(“4E50”) && BcdLib
.hexStr_ascii(banda.getElementValue(“5F34”))
.equalsIgnoreCase(“NP”)))) {

In the first part of the condition evaluates if some field contains a value (a key). I think it is OK because this first part prevents that the access to that ‘key’ in the second part of the conditional raises a null pointer exception tipical to Java, this is to prevent that the access to an inexistent field throws an error.

Let’s get rid of the first part and stay only with the second part of the conditional:

(!(banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)))

I think this always returns true and makes this part of the condition useless. Worst it introduces confussion to the code because the reader believes this code really does something usefull. This part of the condition is a negation, so if it always returns true, the inner part must always return false, let’s see if that happens:

banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)

Then for this two part condition to be true, both conditions must be true (it’s an ‘and’ conditional). But here they are evaluating if one single value is equal to two different values at the same time, such condition can’t even happen, so this part of the sentence always return false. This proves the point that this part of the condition is meaningless.

This lead me to think that the original developer has no much idea of the rules he was trying to write into his code. O may be this is an error in the condition which must be an ‘or’ instead of an ‘and’? There is no way of knowing the answer right now.

There are other subtle issues in this code: Why one access the key through a getField55 in the first place, then access the same key through the banda object directly? Also, they are using this magic strings with hex values like 5F34, 4E50 and this NP string, What is the meaning of those values? Well, this is just a small part of a medium system made of spagetti code, so no surprise to me finding this kind of things, may be I start to write about those bits of bad codes or mistakes…

De vuelta al KDE

Comencé con el KDE hace años atrás con Kubuntu. Aunque también probé Gnome, el KDE me gustó más y decidí aprenderlo primero. Luego de todo el rollo de la salida de KDE 4 comencé a utilizar Gnome y LXDE. También probé algunos otros, pero dejé KDE de un lado temporalmente porque ciertamente no estaba listo para se utilizado. Pero luego salió Gnome 3, y bueno, tuve que volver a probar otros escritorios, retornando nuevamente al KDE.

Creo que el sacar apresuradamente el KDE 4 fue un grave error para la comunidad KDE. Lo mismo le puede pasar a Gnome 3, por otras razones, en el caso de KDE 4 el problema fueron las fallas, lo incompleto que estaba y la falta de compatibilidad hacia atrás. En el caso de Gnome 3, probablemente el hecho de que sea una interfaz más como para tablets. Pero eso es otra discusión que no importa, cada quien puede tener su opinión sobre cada escritorio, pero el caso es que no me gustó, prefiero el KDE ahora.