lunes, 29 de abril de 2019

Probando Qt 5.12.3 en Windows

En el transcurso de las próximas horas, estaré probando Qt 5.12.3 para Windows.

Cuando tenga novedades al respecto lo informaré por este medio. Espero poder llevarme al fín la buena impresión, experiencia y satisfacción que he tenido con la versión Qt 5.9.1, algo que hasta hoy no se ha podido superar.

En primer lugar, lo que me está llamando mucho la atención es que el tamaño del instalador completo, osea el no on-line, es de 3.7Gb, siendo que el de versiones recientes si mal no recuerdo eran de 1.2Gb o 1.xGb. Esto me produce una gran curiosidad. Sospecho que deben haber incluido todo lo necesario para UWP y el SDK de Windows 10.

Yo las pocas veces que me pongo a utilizar Windows, utilizo la versión 8.1. Compilando desde Qt con Visual Studio 2010, 2013, 2015 o 2017, en todos los casos las app con el windowsdeployqt.exe no han tenido ningún problema siempre y cuando el OS de Bill Gates tenga el bendito vcredistributable en las versiones necesarias.

miércoles, 24 de abril de 2019

Navegador Web El Demente #ElDemente



He publicado un video en YouTube sobre un Navegador Web para el YouTuber El Demente. Este navegador està creado en Qml y QtQuick.

sábado, 13 de abril de 2019

Algunos Script Ùtiles GNU/Linux

Còmo instalar OpenJDK en Ubuntu

sudo apt-get install default-jre
sudo apt-get install default-jdk

Còmo crear un alias con funcion y paràmetros

alias gs='gitSubir "$1"'
function gitSubir() {
    git add *;
    git commit -m \"$1\";
    git push origin master;
}

Este còdigo hay que incluirlo en ~/bash_aliases o en ~/bash_profile
Para ejecutarlo antes hay que asegurarse por ùnica vez luego de haber editado esos archivos mencionados, asegurarse de recargar el source del terminal. Para ello ejecutamos lo siguiente:

$: source ~/bashrc

Luego de haber hecho este paso, nuestro nuevo alias estarà disponible.

Ejemplo de uso
$: gs 'he modificado algo en el proyecto git'

miércoles, 6 de marzo de 2019

QtQuick para Android - Unik Qml Examples - #4 - Conexiòn Sqlite desde Android



En el dìa de la fecha hemos publicado el cuarto video sobre QtQuick en YouTube.com.

Este vìdeo corresponde a una serie de videos que estàn orientados a enseñar y mostrar una nueva y àgil manera de programar aplicaciones para Android utilzando la aplicaciòn Unik Qml Engine el cuàl carga y ejecuta còdigo QML/JavaScript de distintos orìgenes.

viernes, 1 de marzo de 2019

Mi propio Calendario | Hoy 1 de Marzo comienza el año

Hoy empieza el año. Asì es como yo lo decido. Si bien por el momento voy a adoptar la idea de que estamos en el año 2019, no he celebrado ni aceptado que el año comenzò el 1 de enero.  Me sobran los motivos y argumentos para hacer tal afirmaciòn.

Los programadores tenemos un pensamiento lògico. Algunos datos pueden ser variables o constantes. Lo que dudo que muchos tengan es un Sentido Crìtico del Pensamiento. Talvez carezcan de subjetividad o no tengan un pensamiento propio. Desde aquì por mi parte si la tengo y por eso puedo decir con la màs plena convicciòn y libertad lo siguiente.

Los seres humanos en esta època, vivimos una revoluciòn informàtica. Es decir que la informaciòn y el modo en el que ella se mueve, còmo la manejamos y còmo se sale de nuestro control, todo ello es diferente a lo que ocurrìa hace unos años atràs. Ahora todo sucede de manera acelerada, a otra velocidad y a otro ritmo.

Hay muchos datos a los cuàles podemos acceder de manera àgil y dinàmica. Podemos acceder a extensas listas, planillas, fòrmulas, informaciòn clasificada, estructuras de datos, bibliografìas y todo tipo de informaciòn estructurada u organizadas de las maneras màs sofisticadas y complejas. Ahora contamos con nuevos y mejores mètodos que utilizados de manera idònea se traducen en eficiencia y precisión.

Un ejemplo del uso de esos datos son los que se utilizan para medir la rotaciòn de cada planeta del sistema solar, de la luna u otro factor relacionado con la posiciòn u orientaciòn en el espacio ya sea dentro o fuera de nuestra atmòsfera como pueden ser los aviones, barcos, nubes, huracanes, terremotos o maremotos. Ahora podemos saber y conocer màs. Contamos con màs datos para hacer comparaciones, evaluar o calcular màs en detalle cada asunto ya resuelto o aùn sin resolver. Ahora podemos acceder a otra informaciòn denominada no oficial, a otro conocimiento  que de manera intencional o no ha permanecido oculto. Podemos conocer y aprender màs sobre la historia oficial y sobre la que ha sido descartada. Podemos aprender tanto que ahora tenemos màs recursos y posibilidades de adoptar un nuevo criterio sobre cada asunto puntual.

En mi caso particular, nunca me ha parecido correcto vivir al ritmo de lo que otros han marcado o definido como modo y estilo de vida. Por ejemplo nunca me ha parecido lògico adoptar o aferrarme a constumbres de tiempos tan lejanos. ¿Què tengo yo que ver o què me vincula a mì derectamente con dogmas y costumbres que tenìan personas que existieron hace 2000 o 5000 años? ¿Còmo puedo yo aceptar como verdaderas las premisas de seres que existieron hace tantos siglos siendo que no contaban con las tecnologìas de hoy?

Yo creo que no es bueno echar por tierra todo lo anterior. Por ejemplo el libro de Matemàticas que ha escrito Aristòteles al cuàl le han encontrado un solo error casi 2000 años despues. Aristòteles lo escribiò casi 500 a.c. y recièn en el siglo XVI de nuestra era encontraron un error en sus càlculos. Esto significa que mucho de lo que fuè descubierto o definido en el pasado tiene mucho valor, pero el mismo tiene que ser evaluado y corregido tàl como el libro de matemàticas de Aristòteles.

Una de las cuestiones que el ser humano se debe replantear, ademàs de crear una unidad variable espacial de infinitos decimales para crear una nueva constante de Pi entero, lo que hay que reveer es la longitud de la hora, del minuto, segundo etc... La prueba de que esto es asì se argumenta fàcilmente alegando que el dìa con la duraciòn de la hora actual tarda 23 horas con 56 minutos y 4 segundos en lo que se denomina un dìa sideral. Este asunto està directamente relacionado con algo que en este artìculo quiero tratar, el Calendario.

Vivimos atrapados y enredados en un calendario Gregoriano, es decir que hubo un Pàpa llamado Gregorio XIII que en el siglo XVI se le antojò que utilicemos su calendario solar.

La humanidad es tan diversa que utiliza distintos calendarios. Algunos son solares, otros lunares o lunisolares. Es decir que algunos intentan medir el paso del tiempo tomando como referencia las fases lunares y otros toman como referencia el perìodo de tiempo que tarda nuestro esfèrico mundo en completar el recorrido por la elpse alrededor del sol.

Desde que existe la humanidad, segun mi opiniòn todos han fallado en la mediciòn. Los Budistas, los Musulmanes, los Cristianos, Judìos, Indùes, Chinos etc. Esto sucede porque algunos utilizan la luna como referencia pero no conincide con la referencia lunar y viceversa. Tampoco coincide cuando intentan utilizar ambas referencias. La prueba de que todos fallan es porque de algùn modo u otro tienen que aplicar un correctivo, agregando dìas o semanas para reparar el error.

Ante estas evidencias, desde aquì sugiero que la mejor forma de medir el tiempo es estirar la la duraciòn de la hora en un %0.000000000001 o en un porcentaje que luego de un año ya coincida con un ciclo. Deberìan comprimir el quarzo en un cristal de tal modo que su frecuencia vibratoria no coincida con la frecuencia de la unidad de tiempo actual. Ese desplazamiento no posibilitarà a la humanidad utilizar una unidad de tiempo humana. No serà universal porque no coincidirà con los ciclos de otras òrbitas de otros cuerpos de este sistema solar o de otros. Serìa para construir un reloj acorde para compatibilizar una manera de uniforme la manera de medir el tiempo en el plano terrestre sin diferencia entre reliones o razas.

En este contexto de variabilidad y diversidad en donde la humanidad tironèa en todas direcciones el ropaje del Dios Cronos, aquì entramos en el confuso juego y nos reimos de todos para dictar sentencia sobre cùal es mi propia manera de asimilar el paso del tiempo, còmo medirlo, contemplarlo, organizarlo y utilizarlo.

Como el tiempo es un bien escaso, por ahora no contamos con el poder de la inmortalidad, lo cuàl no serìa una virtud, màs bien serìa un interesante castigo que yo sufrirìa con cierto gusto y resignaciòn, la misma con la que soporto la posibilidad de morir. Me consuelo pensando que morir es una manera de escapar de la inmortalidad y arrojarse a la aventura de ser de nuevo en una nueva forma. Morir muchas veces al final de cuentas puede ser màs interesante que vivir eternamente. Es una làstima que no todos podemos recordar vidas pasadas. Seguramente hay algunos imbèciles que critiquen a quienes crean en la reencarnaciòn. A todos ellos avisenlè que excepto la religiòn catòlica, el resto de la humanidad, osea el %85 cree en la reencarnaciòn.

Ahora, en esta vida, no me sobra el tiempo. Serìa muy extenso crear un nuevo sistema de mediciòn del tiempo. Me remito a tomar lo que tenemos entre manos, el horrendo calendario gregoriano, la corta hora que deberìa ser màs larga, tomar todo eso y jugar este juego creando el calendario que a mì me parezca ùtil y me haga sentir còmodo.

Mi Calendario Personal, por ahora, està creado por la erronea hora con duraciòn actual pero tomando solo los nombres del calendario gregoriano. Solamente se alteran el orden de los meses definiendo cuàl es el primer mès del año. Lògicamente si decido que el primer mès del año no es enero, esto indica que el año para mì no comenzò hace 2 meses. Como he decidido afirmar que el primer mes del año es Marzo, hoy 1 de Marzo celebro mi año nuevo!

¿Porquè afirmo que Marzo es el primer mes del año?. Lo hago porque para mì, la mejor estaciòn del año es el Otoño. Si usted vive en algùn lugar en donde el Otoño es una estaciòn del año que no le agrada, lo lamento por usted. Hàgase su propio calendario y listo. A mì han intentado obligarme a utilizar y adaptarme a un calendario basado en meses y estaciones del año benignas para el emisferio norte y como yo no estoy conforme no decido cambiar para contradecir aquel calendario producto del Eurocentrismo.

En Europa, sus habitantes se creen el centro del universo. Creen que todo nace y comienza allì, que allì està todo lo màs importante del mundo y que todo lo que està por fuera de europa es algo que està por fuera de la parte màs importante del mundo. Ellos durante siglos han vivido fin de Febrero y al mes de Marzo como dìas festivos. Es lògico que asì lo hagan en estas èpocas.

Ellos ven girar todo hacia la derecha porque ven el mundo desde el polo norte. No se dan cuenta que las todas las cosas de la cultura humana giran segùn desde donde uno lo mire. Si observamos el giro de las ruedas de un automòvil o de una bicicleta, girarà hacia la derecha si crees que el ùnico sentido hacia donde puede avanzar ese objeto en movimiento es hacia la derecha o si te situas como observador hacia su derecha. Deberìan entender que no todo el mundo està encadenado a cultura de la derecha. En mi caso cuando yo era niño dibujaba los automòviles llendo desde la derecha hacia la izquierda, viendolo desde este punto de vista, el vehìculo aùn llendo hacia la izquierda avanza y sus ruedas giran hacia la izquierda. Yo siempre he visto desde el sur el mundo girar hacia la izquierda, nunca a la derecha porque no estoy contaminado con la cultura derechista del eurocentrismo.

Lo hacen en esos dìas porque celebran haber atravesado el invierno y el comienzo de la Primavera. Primavera significa Primer Verdor. Son èpocas en donde se producen los primeros brotes verdes de sus cosechas. Como la historia indica, el ser humano ha tenido que transcurrir todo tipo de aprendizajes y adquirir conocimientos bàsicos de supervivencia. Ha tenido que dominar el fuego o ser nòmada para lidiar con el frìo. Ha tenido que dominar la piedra, el bronce, el acero, los hidrocarburos, la electricidad etc. Una de los asuntos fundamentales que ha tenido que aprender es lo que màs a propiciado su superviviencia, la Agricultura. Es por eso que el ser humano tiene tan arraigado ese festejo relacionado con la Primavera.

Como el ser humano,  generalmente es ignorante, hay costumbres que se expanden sin ninguno lògica. Por ejemplo hay personas que no tienen ni la màs remota idea sobre cuàl es su ubicaciòn geogràfica en el mundo. No saben si estàn en el emisferio norte o sur. No saben a que distancia estàn del ecuador o cuàntos grados està inclinado el eje de rotaciòn del planeta. Ignorar todo esto conlleva a que haya comunidades que festejan lo que se festeja en europa por la llegada de la primavera en tiempos en los cuales en su propio lugar està llegando el otoño.

Lo màs lògico serìa que aquellos habitantes que viven en lugares en donde el otoño comienza el marzo y la primavera comienza en septiembre, deberìan iniciar sus festejos a fines de Agosto y comienzos de Septiembre. Realizar festejos europeos en el emisferio sur es tàn ridìculo como disfrazarse de Papà Noel, abrigado para la nieve en un verano de 38 grados de media.

Otro argumento que indica que el año comienza en marzo, es que còmo el tiempo de la hora es corto, provoca que el ser humano calcule que el año tiene una duraciòn de 365.25. Lo cuàl genera un error en el calendario que se repara cada 4 años agregando un dìa al febrero como si fuese un parche o extensiòn. Como septiembre proviene de sèptimo, octubre de octavo, noviembre de noveno y diciembre de dècimo, esto significa que enero es el mes once y febrero es el mes doce. Entonces ¿Donde agregan el parche o la extensiòn para reparar el error de la mediciòn del tiempo anual?
Porsupuesto que lo hacen al finalizar el año, no lo van a hacer en mitad del año! El echo de que a febrero cada 4 años le agregan un dìa, esto confirma 2 cosas que avalan mi postura. Confirman que la hora es corta, que existe un error al medir el ciclo anual, de lo contrario no deberìan parchar el calendario y tambien confirma que el ùltimo mes de año es febrero.

Por esta razones, yo puedo decir que el año comienza en marzo. Pero tengo màs razones. El echo de que el fin de febrero y el comienzo de marzo coincida con la primavera europea, deberìa llevarme a la concluciòn de que el año en el emisferio sur deberìa empezar en septiembre. Pero elijo no hacerlo de este modo por varias razones que paso a explicar.

Yo particularmente creo que al estar en el Tercer Milenio, ya los seres humanos estamos mucho màs evolucionados que aquellos ancestros que podìan sobrevivir con una agricultura dependiente de las estaciones o el clima. Asumo que estamos en el Tercer Milenio porque creo en la existencia, amor y bondad de Jesùs a travez del cuàl yo de manera subjetiva decido comenzar a contar los años. Aunque no estemos en el año 2019 porque el Pàpa del sigo VI cuando asumiò se aprovechò que solo el %99.95 de la humanidad era analfabeta para cumplir su capricho de ser el Papa del año Mil 1000. Eliminando del conteo del tiempo cristiano alrededor de 357 años. Pero este asunto es aparte. Yo considero que podemos decir que nuestra especie tiene entre 3 mil o 10 mil años con respecto a su nivel de conocimiento cientìfico y gnoseològico. Todo este nivel de conocimiento hoy por hoy lo hace cada vez màs y màs independiente de una agricultura que a su vez la misma dependa de factores climàticos. Todo ha evolucionado, incluso dentro de poco se evolucionarà en el modo de consumir proteìnas y vitaminas, el tipo de vitaminas y por ende la industria alimenticia y la agricultura en general con nuevos mètodos de conservaciòn de los productos etc. Todo esto significa que si habrà algo para festejar es cuando se repleten los bunkers en donde una civilizaciòn almacene pastillas de vitaminas para que una comunidad sobreviva con reservas durante las pròximas 5 dècadas o màs.

Siguiendo estas premisas. ¿Porquè deberìa yo celebrar la primavera? Sin importar si es la primavera del emisferio que sea, yo particularmente considero que debo celebrar la estaciòn del año que yo sienta que es la mejor para mì. Como yo siempre estoy muy còmodo y contento con el Otoño de la ciudad donde vivo y justo coincide con mi cosmovisiòn con respecto al verdadero mes en el que finaliza e inicia el año, yo sentencio que para mì el año, mi año comienza hoy 1 de marzo.

No sè durante cuàntos años celebrarè el comienzo de año el 1 de Marzo. Talvez lo haga hasta que cambie de ubicaciòn en el planeta. Cierto es que se avecinan tiempos de glaciaciòn; Choques de asteroides; Grandes cataclismos; Corrimientos del eje polar magnètico; Hundimiento y apariciòn de nuevos y viejos continentes; El clima tropical se ha ensanchado; Hay tormentas y huracanes en lugares diferentes; Las sequìas, el agua y las inundaciones ya se han vuelto impredecibles; La desèrtica Patagonia Argentina ya està dejando crecer vegetaciòn; Lugares fèriles ya no lo son y viceversa; Argentina de 40 millones de habitantes pasarà a tener 400 millones en poco tiempo por la contaminaciòn radiactiva luego de las bombas nucleares en el emisferio norte.

En fin, posiblemente todo se de vuelta dentro de poco. Eso que los europeos llaman Apocalipsis se refiere al fin del Eurocentrismo, el fin de un mundo segùn ellos lo perciben, el fin de fuente de donde han salido los peores males de la humanidad. De allì han sugido las guerras, las religiones y todo el horror y la miseria que azota a la humanidad desde hace milenios. Cuando en el emisferio norte ya no se pueda ni respirar todos vendràn al emisferio sur a destruir lo poco que queda sano en el medio ambiente. Lamenteblemente para ellos aquì se encontraràn con una nueva especie.

Por ejemplo en Argentina es imposible que exista el racismo, porque a diferencia de otros paìses tenemos la mayor diversidad cultural y genètica que exista en el mundo. En Argentina tenemos un poblaciòn nutrida del ADN de màs de 3000 razas, jamàs seriamos razistas. En Sudamèrica somos descendientes de todos los pueblos, europeos pero principalmente descendemos de los Pueblos Originarios. Razones por lo cuàl tenemos otra conciencia sobre lo que representa y ès Nuestra Madre Tierra a la que siempre cuidaremos y sanaremos.

Como pueden ver, todo puede cambiar, hasta la humanidad toda posiblemente lo haga. Entonces, volviendo al asunto de las premisas planteadas, sobre lo que ya està hecho y lo que puede cambiar yo digo. Si muchas civilizaciones han tenido su calendario ¿Nunca màs existirà uno nuevo? Yo pienso que existiràn suelos nuevos, polos nuevos, civilizaciones nuevas, mentalidades nuevas, conciencias nuevas, valores humanos mejores, emisferios nuevos, tecnologìas nuevas y hasta una nueva forma de medir el tiempo por ende UN NUEVO CALENDARIO.

El significado de Apocalipsis es -Verdad Revelada-. El dìa que esas verdades se revelen muchas civilizaciones oscuras que anteponen el Dios Dinero por encima de la Madre Tierra y el Bienestar de La Humanidad, todos ellos veràn llegar su fin. Desde ese punto de vista si es el fìn. No es el fin de la humanidad. Es el fìn de una generaciòn provinente de una larga dinastìa de sociòpatas y enfermos de odio, de egoistas, de seres sin alma ni espìritu, bestias del mal.

Por mi parte solo me dedico a jugar a tener mi propio calendario. Cuando los cambios se produzcan no sè si aùn estarè en este mundo. Si los cambios se aceleran no sè si sobrevivirè y si sobrevivo verè sin salir de mi asombro que posiblemente el clima dè un giro y la primavera en el emisferio sur comience en marzo! Tendrè màs razones para celebrar Navidad, Pascuas, Carnaval, la Primavera y Fin de año en un solo dìa!.










martes, 26 de febrero de 2019

Configuraciòn de Combinacion de Teclas en Ubuntu Mate

El sistema operativo que utilizo desde hace 4 años, es el GNU/Linux Ubuntu Mate. Lo he elegido y aùn sigo un firme usuario de este sistema por su simplicidad, practicidad y eficiencia.

Obviamente este sistema operativo trae consigo mismo todas las ventajas del GNU/Linux Debian. Con respecto a las caracterìsticas relacionadas con el entorno de escritorio, Mate es una versiòn ligera del Gnome 2 optimizada para lograr un sistema operativo sencillo y funcional.

Entre las caracterìsticas del entorno de escritorio, una que utilizo muy a menudo, son las Combinaciones de Teclas personalizadas. Las mismas se podrìan configurar de infinitas maneras para realizar cualquier tipo de tarea tanto en el entorno de escritorio asì como tambien en otros àmbitos del sistema operativo mediante accesos directos por vìa de estas combinaciones de teclas que ejecutan lineas de comandos, scripts etc.

Cuando estoy programando un nuevo modulo QtQuick en QML para Unik, independientemente para cuàl o para què sistema sistema operativo sea la aplicaciòn final, la gran mayorìa del còdigo lo puedo programar utilizando VIM y ejecutando Unik desde este Ubuntu Mate que generalmente utilizamos.

El ùnico cambio que debo realizar para ganar tiempo y productividad, es modificar la funcionalidad de la combinaciòn de teclas para ejecutar Unik de tal modo que cargue y ejecute el còdigo fuente QML que estoy editando.

Por ejemplo si estoy programando un proyecto que està en la carpeta /home/nextsigner/miApp y allì se encuentra el archivo main.qml, para ir modificando el còdigo e ir viendo los cambios al instante, en principio debo ir al Menu->Sistema->Centro de Control->Combinaciòn de Teclas y allì crear un nuevo item de combinaciòn de teclas perzonalidas que ejecute Unik con el paràmetro -folder=/home/nextsigner/miApp para que Unik funcione sobre dicha carpeta.

El problema es que hay modulos QML para Unik a los cuales les dedico un par de horas diarias, a otros les dedico 1 o 2 semanas seguidas y voy saltando de un proyecto a otro, ya sea que estoy creando mòdulos nuevos u optimizando otro. Entonces cada vez que quiero comenzar a editar un mòdulo debo ir a la secciòn de Centro de Control mencionada para cambiar la carpeta en donde Unik debe buscar còdigo QML cuando es llamado mediante el acceso ràpido por medio de la combinaciòn de teclas.

Por lo general la combinaciòn que prefiero utilizar el Shift+Crtl+r . La letra "r" es por RUN.

Para hacer todo el cambio de la manera màs ràpida posible, lo que he creado es un script Bash que estè preparado para cambiar una combinaciòn de tecla en el entorno MATE.

Atenciòn! El siguiente script està orientado solo para el entorno MATE.

Archivo ct.sh //CT significarìa Combinaciòn de Tecla

#!/bin/bash
dconf write /org/mate/desktop/keybindings/custom0/action "'$1'"
dconf write /org/mate/desktop/keybindings/custom0/command "'$1'"
dconf write /org/mate/desktop/keybindings/custom0/binding "'$2'"
dconf write /org/mate/desktop/keybindings/custom0/name "'$1'"

Explicaciòn de uso

Este script requiere 2 paràmetros. Ambos deben estar escritos entre comillas simples.

  1. Lìnea de Comando que deseamos ejecutar.
  2. Combinaciòn de Teclas 

Ejemplo

Como usuario comùn, no es necesario ejecutar con privilegios de administrador, si ejecutamos el siguiente comando.

$: ct.sh 'unik -folder=/home/nextsigner/miApp' '<Shift><Ctrl>r'

En este caso, si presionamos las teclas Control màs Shift màs r, Unik se ejecutarà cargando còdigo QML desde la carpeta /home/nextsigner/miApp

En cambio si queremos utilizar el script ct.sh para otro fìn, por ejemplo ejecutar nuestro navegador web en un sitio espacìfico al iniciar, la lìnea de comando que deberiamos ejecutar serìa la siguente.

$: ct.sh 'chromium-browser http://www.unikode.org' '<Shift><Ctrl>c'

En este caso, si presionamos la combinaciòn de teclas Ctrl màs Shift y la letra c, se abrirà el navegador chromium directamente en este sitio web.

No està demàs aclarar, para aquellos que son novatos, que puedes modificar el script a tu gusto para ejecutar tu browser o navegador o cualquier aplicaciòn con la combinaciòn de teclas que desees.

Por ùltimo, cabe aclarar que la ejecuciòn del script siempre reescribirà el mismo item de combinaciòn de teclas modificàndola en cada vez. Si quieres utilizar el script para crear nuevos y diferentes combinaciones de teclas, entonces deberàs modificar el script para que acepte un nuevo paràmetro, serìa el tercero, el cuàl se encargue de reemplazar el nombre "custom0" por el nombre que tu envìes por la lìnea de comandos.

Para los que quieran hacerlo aquì les dejo el script cuyo uso serìa el siguiente.

Archivo ct2.sh //CT significarìa Combinaciòn de Tecla

#!/bin/bash
dconf write /org/mate/desktop/keybindings/$3/action "'$1'"
dconf write /org/mate/desktop/keybindings/$3/command "'$1'"
dconf write /org/mate/desktop/keybindings/$3/binding "'$2'"
dconf write /org/mate/desktop/keybindings/$3/name "'$1'"

Explicaciòn de uso

Este script requiere 3 paràmetros. Todos deben estar escritos entre comillas simples.

  1. Lìnea de Comando que deseamos ejecutar.
  2. Combinaciòn de Teclas 
  3. Nombre del item a crear o reescribir

Ejemplo

Como usuario comùn, no es necesario ejecutar con privilegios de administrador, si ejecutamos el siguiente comando.

$: ct2.sh 'chromium-browser https://www.youtube.com/' '<Shift><Ctrl>y' 'micombinacionperzonalizada1'

Nota: En mi caso el ejecutable de Unik de llama solamente escribiendo la comando "unik" debido a que si bien el ejecutable de unik en primera instancia se llama unik_vX.x.x.AppImage y generalmente lo suelo tener en el escritorio. Cuando estoy utilizando el terminal y quiero ejecutar Unik, al estar en el escritorio deberìa escribir /home/nextsigner/Escritorio/unik_vX.x.x.AppImage. Para evitarme ese asunto y asì poder llamar a Unik desde donde sea tan solo escribiendo "unik", lo que hago es crear un enlace duro del AppImage de unik hacia la carpeta /usr/local/bin con el comando sudo ln unik_v3.5.2.AppImage /usr/local/bin/unik















viernes, 22 de febrero de 2019

Hemos solucionado un error crìtico en Unik Qml Engine

Desde hace unas semanas, hemos publicado nuevas actualizaciones de Unik. Las versiones anteriores, si bien siempre fueron compatibles con Windows, GNU/Linux y Macos, dichas versiones menores a la versiòn 3.x, no eran compatibles con Android 7 o superior. Las actualizaciones superiores a la versiòn 3.x, cuentan con la compatibilidad y funcionalidad plena sobre los sistemas operativos mencionados pero ademàs tambien lo son para los OS Android 5/6/7/8/9.

Todo o casi todo funcionaba segùn lo esperado, excepto la funciòn log(QByteArray) de unik. Èsta funciòn, no estaba funcionando en Unik para sistemas Android con arquitectura armeabi-v7a. Èsta falla estaba provocando un cierre inesperado de la aplicaciòn. Un error terriblemente crìtico que nos ha obligado a anular dicha funciòn para dicha arquitectura, por lo menos hasta que encontremos una soluciòn.

El gran problema, era que dicho error estaba presente y los que formamos parte del la parte dura del desarrollo de bajo nivel en el equipo de unikode.org, tenìamos pasaje para vacacionar. Lamentablemente no ha quedado otro camino que intentar una soluciòn al regreso.

Regresamos el 19/02/2019. El calor era insoportable. Con una sensaciòn tèrmica de 41 grados en el exterior, por razones de fuerza mayor nuestros estudios estaban algo condicionados y no podìamos lograr la climatizaciòn dentro del ambiente de programaciòn. Fuè asì que luego de 4 dìas intensos de programar, probar, depurar, instalar, desinstalar, etc, hemos dado con la soluciòn.

Por momentos la situaciòn se tornò realmente agotadora. Hay que admitir que el desànimo por momentos nos empujò a creer que todo estaba perdido, a pensar negativamente sobre todo lo relacionado al proyecto unik, sus funcionalidades, propòsitos, estrategias, mòdulos, etc, fueron momentos durìsimos.

La paciencia es lo que un programador debe conservar, mucho màs aùn en momentos crìticos. La falta de resultados y el agotamiento nos llevò a estados de ànimo no muy adecuados, esos que nos impulsan a intentar mètodos o maneras descabelladas. Hemos dudado mucho, hemos cambiado y probado de todos los modos posibles, compilando con todos los NDK, el r10e, el r16b, el r17b y el r18b. Pasando de compilaciones con el API 26 y volviendo al API 28, probando còdigo una y otra vez. Tantas variaciones casi nos hace perder el rumbo de tanto desformar el còdigo.

Por fortuna, existen ciertas herramientas que nos salvan para esta situaciones. Por ejemplo Git. Hemos ido retrocediendo en el tiempo, buscando la versiòn del còdigo que màs estabilidad y respuesta nos provea, una vez que hemos vuelto a un punto de partida por vez nùmero 10 en la busqueda de esta soluciòn, como estrategia salvadora hemos recurrido a la creaciòn de una clase C++ llamada UnikLogObject, tal como lo dice su nombre es un objeto que administra o mejor dicho sirve de puente o nexo para conectar la funcion estàtica C++ encargada del manejo de los mensajes de salida estandar en android dependientes de las cabeceras log.h de android.

Expliquemos mejor esto ùltimo. En Qt, cuando programamos en C++, en la funciòn principal o en otras partes, pero generalmente en la funciòn main, en el caso que sea necesario o ùtil, allì podemos especificarle a nuestra aplicaciòn, cuàl serà la funciòn encargada de gestionar los mensajes de la salida de la aplicaciòn relacionados con mensajes crìticos, fatales, de depuraciòn, de informaciòn etc. Esto Qt lo hace con la previa declaraciòn de una funciòn del tipo static llamada por ejemplo myMessageHandler(), la cuàl se utiliza en nuestra aplicaciòn llamando al mètodo qInstallMessageHandler().

Ejemplo

Archivo main.cpp

static void myMessageHandler(QtMsgType type,
                                    const QMessageLogContext &context,
                                    const QString &message)
{
    android_LogPriority priority = ANDROID_LOG_DEBUG;
    switch (type) {
    case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
    case QtWarningMsg: priority = ANDROID_LOG_WARN; break;
    case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break;
    case QtFatalMsg: priority = ANDROID_LOG_FATAL; break;
    };
    __android_log_print(priority, "Qt", "%s", qPrintable(message));
}
int main(int argc, char *argv[])
{
...
qInstallMessageHandler(myMessageHandler);
...
}

El problema es que dicha funciòn estàtica no puede llamar funciones de objetos previamente declarados a la funciòn main. Esto en un principio se solucionò creando variables del objeto de unik que se encarga de mostrar la salida en QML, dicha variable se crea al principio de todo el còdigo, es decir antes que la funcion main y antes que la funcion estàtica mencionada. Esa soluciòn funcionò en las versiones anteriores, funcionaba para todos los sistemas en cualquier arquitectura, pero lamentablemente cuando escalamos APIs de Android arriba llegando a la versiòn 28, esta estrategia comenzò a provocar un apagado inesperado de unik, un error fatal.
¿Como lo hemos solucionado? Lo solucionamos con la creaciòn del objeto UnikLogObject que hemos mencionado. Gracias a los benditos SIGNAL Y SLOT de Qt, hemos conectado nuestro nuevo objeto desde dentro del main hasta la funciòn estàtica. Lo hemos hecho del siguiente modo.

Archivo main.cpp

UnikLogObject ulo;
static void myMessageHandler(QtMsgType type,
                                    const QMessageLogContext &context,
                                    const QString &message)
{
    android_LogPriority priority = ANDROID_LOG_DEBUG;
    switch (type) {
    case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
    case QtWarningMsg: priority = ANDROID_LOG_WARN; break;
case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break;
    case QtFatalMsg: priority = ANDROID_LOG_FATAL; break;
    };
    __android_log_print(priority, "Qt", "%s", qPrintable(message));
    ulo.setLog(message.toUtf8());
}
int main(int argc, char *argv[])
{
    ...
    qInstallMessageHandler(myMessageHandler);
    UK u;
    QObject::connect(&ulo, SIGNAL(logReceived(QByteArray)),
                                &u, SLOT(log(QByteArray)));
...
}

Hemos conectado mediante el mètodo connect() de la clase QObject a el objeto de la clase UnikLogObject mediante su señal logReceived() hacia el objeto principal de unik de la clase UK llamada "u" hacia su mètodo o slot log(). De este modo lo hemos resuelto. Ahora ya hemos publicado en el sitio oficial de descargas de unik y en la Google Play Store, el archivo instalador de Unik Qml Engina para Android 5/6/7/8/9 para la arquitectura armeabi-v7a. Se trata del APK de Unik versiòn 3.7.1 que nos permite ver la salida estandar en nuestros proyectos QML. El fallo està solucionado, ahora la aplicaciòn no se cierra inesperadamente, cada vez que se reinicia para cargar algùn mòdulo especìfico o se solicita el cierre con el mètod Qt.quit() o qApp->quit(), en ningùno de los casos se apaga inadecuadamente.




Entrada destacada

Probando Qt 5.12.3 en Windows

En el transcurso de las próximas horas, estaré probando Qt 5.12.3 para Windows. Cuando tenga novedades al respecto lo informaré por este med...