tag:blogger.com,1999:blog-48904161156546756082024-03-13T02:22:42.411-03:00Stranger In This TownPatience, virtue, identity... Soul.Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-4890416115654675608.post-25700129021485630962022-02-18T17:32:00.000-03:002022-02-18T17:32:19.840-03:00Si No Puedes Pagarlo No Lo Compres<p><span> </span>El año 2017 compré a través de Amazon 2 enchufes inteligentes D-Link en unos 25usd cada uno. El miércoles 16 de febrero de este año 2022 recibí un correo de D-Link indicando que en diciembre de este año se acaba el servicio y soporte para varios dispositivos, entre ellos, mis enchufes. En otras palabras en diciembre yo sería el flamante propietario de 2 pisapapeles caros.</p><p><span> </span>A modo de consuelo me convencí de que en realidad no había comprado 2 enchufes sino que había pagado por 5 años de servicio de la nube D-Link.</p><p><span> </span>Al día siguiente veo la noticia de la empresa <a href="https://hipertextual.com/2022/02/ojos-bionicos-second-sight-sin-soporte" target="_blank">Second Sight</a>: La empresa tenía alrededor de 350 <strike>pacientes</strike> clientes con implantes oculares biónicos que les permitió recuperar la visión que ahora se han quedado sin soporte ni actualizaciones. Lo anterior significa que en cualquier momento esas personas perderán la visión. Adicionalmente si alguno de ellos requiere de algún procedimiento que implique retirar la retina biónica (por ejemplo para tomar una resonancia magnética) tampoco podrán contar con la asistencia técnica original.</p><p> Nos acercamos a pasos agigantados a una economía donde las personas tendrán acceso a muchos productos sin embargo no serán dueños de nada. Dichos productos van desde los enchufes inteligentes hasta órganos y departamentos, pasando por ejemplo por el <a href="https://www.xataka.com/otros/este-chaleco-para-motociclistas-tiene-airbag-dejara-funcionar-no-pagas-suscripcion" target="_blank">chaleco con airbag</a> para motoristas que deja de funcionar si no pagas.<br /></p><p><span> Evidentemente algunos estarán contentos con este nuevo modelo, sin embargo otros vemos con desconfianza esta tendencia que literalmente puede dejar desnudas y en la calle a las personas que pierdan su empleo. Lo anterior apoyado por tecnologías como blockchain para la implementación de contratos inteligentes que pueden desactivar instantáneamente tu vehículo en caso de no pago o incluso hacerlo volver autónomamente al concesionario de la marca.</span><br /></p><p> Pero puede haber luz al final del camino: apoyar y preferir el software y hardware libre podría eventualmente torcer un poco la mano de dicho futuro tan distópico o al menos proveer una alternativa. De esta forma si una empresa no puede <strike>quiere</strike> seguir ofreciendo soporte podría liberar el código fuente de sus artefactos para que la comunidad provea actualizaciones. En la medida que sigamos viendo casos como el de Second Sight o las primeras muertes por airbags que no funcionaron probablemente necesitemos algún tipo de legislación que "incentive" la liberación del código ante una inminente quiebra.<br /></p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhe1KzWAqlaoI8r77ARIeaKqUMu_V2QfUhgXTM5Nt6iDjHZN7fhTGy10sj7MVvOQpQIchjipKchDOT-IZ8ltzChEGzjHgQfVTf1kskahZJlANyP4KYV6vx1zhqrZmnWlNzGAnDYpp5GqeAnmrm1K4zX1Yoj011trY-eMeaMLU2SgS_AKqt0_0zNLeWF=s1600" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="686" data-original-width="1600" height="137" src="https://blogger.googleusercontent.com/img/a/AVvXsEhe1KzWAqlaoI8r77ARIeaKqUMu_V2QfUhgXTM5Nt6iDjHZN7fhTGy10sj7MVvOQpQIchjipKchDOT-IZ8ltzChEGzjHgQfVTf1kskahZJlANyP4KYV6vx1zhqrZmnWlNzGAnDYpp5GqeAnmrm1K4zX1Yoj011trY-eMeaMLU2SgS_AKqt0_0zNLeWF=s320" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><i>Repo Men (2010). Soy propietario del NFT de esta imagen -> <a href="https://imgflip.com/i/65rejc" target="_blank">Verificar</a></i></td></tr></tbody></table><br /></p><p> Es imposible escribir sobre este tema y no recordar la película <a href="https://en.wikipedia.org/wiki/Repo_Men" target="_blank">Repo Men</a> (2010), donde una empresa provee órganos biónicos indestructibles que tiene personal que envía a recuperar dichos órganos cuando el cliente no sigue pagando.<br /></p><p> Por ahora tengo instalado <a href="https://www.home-assistant.io" target="_blank">Home Assistant</a> en mi <a href="https://www.opensuse.org" target="_blank">openSUSE</a> para controlar mis <a href="https://es.aliexpress.com/item/1005003140246553.html?spm=a2g0o.productlist.0.0.13fb685bXBgmXT&algo_pvid=9d398da5-9faf-41cc-8627-1ee879cfc1b2&algo_exp_id=9d398da5-9faf-41cc-8627-1ee879cfc1b2-0&pdp_ext_f=%7B%22sku_id%22%3A%2212000024310271793%22%7D&pdp_pi=-1%3B4.09%3B-1%3B233%40salePrice%3BUSD%3Bsearch-mainSearch" target="_blank">nuevos enchufes</a> que pueden ser flasheados con código libre para no depender de terceros. No sé si el futuro sea que cada persona se monte su propia nube de servicios en una raspberry o mini pc, pero al menos es que lo me funciona ahora y me permite estar más tranquilo.<br /></p><p> </p><p> <br /></p>Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-5543350728476266112017-07-08T20:24:00.002-04:002017-07-08T20:24:57.810-04:00Arduino Para Niños Parte II: Sensor de Movimiento<div style="text-align: justify;">
En esta segunda entrega de nuestro proyecto de tiempo libre incorporamos un sensor de movimiento (PIR) a nuestro circuito para que se encienda un led durante medio segundo cada vez que se detecte movimiento. Las risas y los errores quedan siempre en el video final por dos razones: porque así son los niños y porque no tengo suficiente tiempo libre ;-)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://youtu.be/N3rQfTeBzD0" target="_blank">Enlace al video</a></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/N3rQfTeBzD0/0.jpg" src="https://www.youtube.com/embed/N3rQfTeBzD0?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div style="text-align: justify;">
<br /></div>
Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-9028132744473691042017-07-04T17:06:00.000-04:002017-07-04T17:10:16.071-04:00Arduino para Niños<div style="text-align: justify;">
Hace un par de semanas iniciamos un pequeño proyecto junto a mi hija. La idea era encontrar algo que nos permitiése divertirnos y compartir tiempo juntos, si además de lo anterior se aprende algo, tanto mejor. Entonces se me ocurrió la idea de enseñarle experimentos usando Arduino, algo de electrónica muy (pero muy) básica y un toque de programación.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Así nació este proyecto de ir grabando en video y publicando sus experimentos. El trabajo se presenta en formato simplificado: arduino por niños y para niños. Ella tiene apenas 10 años y se mostró muy entusiasmada. En el "detrás de cámaras" armó un arreglo de 8 leds con alimentación común y otro de 4 leds con alimentación individual, después de aprender el clásico "Hola Mundo" de Arduino usando sólo un led. Para las próximas entregas empezaremos con sensores y condiciones. La idea final (que ella aún desconoce, al más puro estilo del Dr. Manhattan xD) es construir un repele-gatos y también un pequeño vehículo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Los invito entonces a difundir y compartir ;-) (<a href="https://www.youtube.com/watch?v=ZVcL9xYFI14" target="_blank">Enlace video</a>)</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ZVcL9xYFI14/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ZVcL9xYFI14?feature=player_embedded" width="320"></iframe></div>
<br />
<br />Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-61710453507132565872015-08-31T23:56:00.004-03:002015-08-31T23:56:32.700-03:00Experiencia con Disco de Estado Sólido en openSUSE<div style="text-align: justify;">
Hace poco compré en AliExpress un <a href="http://es.aliexpress.com/item/Netac-120GB-SSD-mSATA-Solid-State-Drive-MLC-Flash-Storage-N5m/32249339001.html" target="_blank">disco de estado sólido de 120GB</a> para mi <a href="http://shop.lenovo.com/ar/es/laptops/lenovo/serie-s/s400/" target="_blank">laptop</a>. La idea era poder mejorar el rendimiento general de mi Linux.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego de instalar el disco en mi computador procedí a realizar una nueva instalación de Linux. Esto debido a que la idea es instalar el sistema operativo en el SSD y los archivos de usuario en el disco duro tradicional. Mi primera experiencia fue un poco ruda porque elegí los sistema de archivos sugeridos por el instalador de openSUSE 13.2 (BtrFS y XFS) lo que produjo una serie de errores en el particionador y luego la creación de un montón de particiones (al parecer simbólicas). En esta configuración el sistema pasó de bootear en 35 segundos desde el disco duro a 16 segundos desde el SSD.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El sistema de archivos y las particiones por defecto no me dejaron satisfecho, así que procedí a realizar una nueva instalación pero ahora usando Ext4. Aquí el instalador no marcó ningún error y no se crearon todas las particiones de antes :-)</div>
<br />
Esta es la estructura que elegí para computador:<br />
<br />
<b>SSD:</b><br />
<div>
<ul>
<li>4GB para Swap</li>
<li>110 para /</li>
</ul>
<b>Disco Duro:</b></div>
<div>
<ul>
<li>40GB para Home</li>
<li>409GB para Archivos</li>
</ul>
<div style="text-align: justify;">
Decidí dejar Swap en el SSD porque leí que eso incrementa la recuperación desde hibernación, pese a que no la utilizo nunca tal vez es tiempo de empezar a usarla ya que ahora su rendimiento es óptimo.</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finalmente dejo un video donde se puede apreciar el tiempo de booteo (recuerden bajar el volumen puesto que no me di cuenta que la música estaba muy alta).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span id="goog_33062414"></span><span id="goog_33062415"></span><br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/4pJOACqzvXk/0.jpg" src="https://www.youtube.com/embed/4pJOACqzvXk?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-52805656740145468382013-09-22T23:38:00.002-03:002013-09-23T00:57:56.068-03:00Un Portapapeles en la Nube<div style="text-align: justify;">
Me gusta combinar scripts con las bondades de Linux (como qdbus) ya que con muy poco esfuerzo e ingenio podemos hacer cosas bastante interesantes que nos pueden hacer la vida frente al computador relativamente más cómoda.<br />
<br />
En esta ocasión implementaremos una serie de scripts para que cada vez que copiemos algo a nuestro portapapeles (Klipper, en este caso) tengamos una copia en la nube. Así por ejemplo, si nos encontramos con una página interesante que nos gustaría seguir viendo después en otro computador o dispositivo, bastará con copiar la dirección y ya la tendremos directamente accesible desde la nube.<br />
<br />
<span style="font-size: large;"><b>Materiales:</b></span><br />
<br />
<ul>
<li> xbindkeys: Programa que nos permite crear atajos de teclado.</li>
<li> xmodmap: Utilidad para cambiar el comportamiento de algunos atajos.</li>
<li> xvkbd: Utilidad para emulación de teclado. </li>
<li> Una cuenta en <a href="https://copy.com/?r=s0exkn" target="_blank">Copy</a> o <a href="https://db.tt/n6twUIFx" target="_blank">Dropbox</a>. Ambos con clientes Linux y Android.</li>
</ul>
<br />
xbindkeys no viene en la instalación por defecto para openSUSE 12.3 por lo que iremos al <a href="http://software.opensuse.org/package/xbindkeys?search_term=xbindke" target="_blank">OBS</a> y buscaremos la versión (inestable) que corresponde a nuestro openSUSE (One-Clic Install). Particularmente instalé la versión que estaba en el repo Utilities dejando sin suscripción al repositorio después de instalar. <br />
<br />
xmodmap ya estaba instalado en el sistema por defecto. Para instalar xvkbd sólo bastará hacerlo de la manera usual:</div>
<br />
<pre class="brush: bash"># zypper in xvkbd
</pre>
<br />
<div style="text-align: justify;">
Esto es lo que haremos con todo lo que hemos instalado: Crearemos un atajo de teclado que llamará un script nuestro. Dicho script hará dos cosas: primero simular la combinación control+c y segundo recuperar lo que hayamos copiado al portapapeles para enviarlo a nuestro archivo en la nube.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero que haremos será crear el archivo configuración por defecto de xbindkeys para nuestro usuario, haciendo lo siguiente en una consola/terminal:</div>
<br />
<pre class="brush: bash">$ xbindkeys --defaults > $HOME/.xbindkeysrc </pre>
<br />
<div style="text-align: justify;">
Ahora editaremos el archivo con algún editor simple. Debemos comentar o borrar los ejemplos que vienen habilitados. Deberían quedar así con un # al inicio de cada línea, de la siguiente forma:</div>
<i><span style="font-family: "Courier New",Courier,monospace;"><br /></span></i>
<i><span style="font-family: "Courier New",Courier,monospace;"># Examples of commands:<br /><br />#"xbindkeys_show" <br /> # control+shift + q<br /><br /># set directly keycode (here control + f with my keyboard)<br />#"xterm"<br /># c:41 + m:0x4<br /><br /># specify a mouse button<br />#"xterm"<br /># control + b:2</span></i><br />
<br />
<div style="text-align: justify;">
Viendo los ejemplos podemos darnos cuenta que la estructura de este archivo es:</div>
<i><span style="font-family: "Courier New",Courier,monospace;">"comando, aplicación o script a ejecutar"</span></i><br />
<i><span style="font-family: "Courier New",Courier,monospace;"> combinación de teclas</span></i><br />
<br />
Al final del archivo entonces agregaremos lo siguiente:<br />
<b><span style="font-family: "Courier New",Courier,monospace;">"~/bin/super_copiar.sh"</span></b><br />
<b><span style="font-family: "Courier New",Courier,monospace;"> m:0x50 + c:54</span></b><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Primera línea: nuestro script (que aún no creamos) con su ruta. En la segunda línea he puesto la combinación de teclas <u>que en mi teclado</u> corresponde a super+c (tecla del innombrable <strike>Windows</strike>). Cómo saber cuál es el código para vuestros teclados? Usaremos el comando:</div>
<br />
<pre class="brush: bash">$ xbindkeys -k</pre>
<br />
<div style="text-align: justify;">
Se abrirá una ventanita y a continuación presionamos la combinación de teclas super+c y nos aparecerá en la consola el código asociado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Guardamos los cambios en nuestro archivo y lo cerramos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para poder usar la tecla super en combinación de otras debemos ejecutar el siguiente comando antes:</div>
<br />
<pre class="brush: bash">$ xmodmap -e "remove mod4 = Super_L"</pre>
<br />
<div style="text-align: justify;">
Ya estamos casi listos. Ahora debemos crear nuestro script llamado <b>super_copiar.sh</b> en la ruta /home/nombre_de_usuario/bin. Para eso abriremos un editor de texto (kate, kwrite, nano, etc) y pondremos lo siguiente:</div>
<br />
<pre class="brush: bash">#!/bin/bash
xvkbd -xsendevent -text "\Cc"
qdbus org.kde.klipper /klipper org.kde.klipper.klipper.getClipboardHistoryItem 0 >> ~/Dropbox/Historial.txt
</pre>
<br />
<div style="text-align: justify;">
El primer comando de este script usa la utilidad xvkbd para simular que se ha presionado la combinación de teclas Control+c. El segundo comando lo que hace es recuperar el más reciente texto agregado a klipper y pegarlo al final de un archivo de texto llamado Historial.txt que se encuentra en nuestra carpeta sincronizada en la nube (Dropbox o Copy). Guardamos los cambios, cerramos y le damos permisos de ejecución:</div>
<br />
<pre class="brush: bash">$ chmod +x ~/bin/super_copiar.sh </pre>
<br />
<div style="text-align: justify;">
Finalmente ejecutaremos xbindkeys y probaremos que funcione seleccionando algún texto y presionamos super+c (o la combinación que hayan elegido). Verán que el archivo Historial.txt se va poblando felizmente con nuestro clipboard.<br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;"><b>Alcances menores</b></span><br />
He elegido super+c en vez de sobreescribir el control+c habitual pues porque la privacidad es importante, así <b>enviaremos exactamente sólo lo que nos interesa</b> tener en la nube mediante una combinación de teclas alternativa.<br />
<br />
Es probable que debamos ejecutar al inicio de sesión el comando xmodmap y la activación de xbindkeys. Para eso podemos hacer un script simple llamado atajos_de_teclado.sh y pondremos lo siguiente:<br />
<br />
<pre class="brush: bash">#!/bin/bash
/usr/bin/xmodmap -e "remove mod4 = Super_L"
/usr/bin/xbindkeys
</pre>
<br />
Guardamos los cambios, cerramos, damos permisos de ejecución y lo copiamos a nuestra carpeta ~/.kde4/Autostart<br />
<br />
Eso sería todo. Como tarea pueden mejorar el script super_copiar.sh para agregar a cada línea la fecha y la hora en que el comando fue agregado a nuestro historial ;-)</div>
<span id="docs-internal-guid-6d05ba97-487a-0739-0d4c-eccd12d332f5" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span><span id="docs-internal-guid-6d05ba97-487a-0739-0d4c-eccd12d332f5" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span><span id="docs-internal-guid-6d05ba97-487a-0739-0d4c-eccd12d332f5" style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span>Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-79690693108219605282011-08-17T16:13:00.003-04:002012-02-28T00:04:08.946-03:00NowPlaying con Clementine+Kopete parte II: CondicionesUna desventaja de nuestro <a href="http://fcoarias.wordpress.com/2011/07/13/como-poner-now-playing-con-clementinekopete/" title="Cómo poner “Now playing” con Clementine+Kopete">script actual</a> es que si Clementine no se está ejecutando entonces tendremos el mensaje "Now Playing" en blanco durante toda la sesión de Kopete. Si lo cambiamos manualmente desde Kopete, el crontab se encargará de ponerlo de nuevo en el estado sin canción.<br/><br/>Para esto introduciremos el uso de condiciones en nuestro script; por lo que si Clementine se está ejecutando entonces haremos lo que ya sabemos para capturar el nombre de artista y canción. En caso contrario, haremos nada. Así quedará disponible nuevamente para cambiar nuestro estado de Kopete a lo que necesitemos. Manos a la obra:<br/><br/>Primero utilizaremos el comando qdbus para saber si Clementine se está ejecutando o no:<br/><br/><pre class='brush: bash'><br/><br/>isClementineRunning=$(/usr/bin/qdbus | grep clementine)<br/><br/></pre><br/><br/>La variable isClementineRunning puede contener dos posibles valores: una cadena en blanco si Clementine no se está ejecutando y una cadena no-vacía si lo está. Ahora condicionamos nuestro script según esos valores:<br/><br/><pre class='brush: bash'><br/><br/>if [ "$isClementineRunning" != "" ]<br/><br/>then<br/><br/> #capturamos el nombre de artista...<br/><br/> currentTrackIndex=$(....<br/><br/>fi<br/><br/></pre><br/><br/>Esta condición evalúa SI la cadena isClementineRunning NO está vacía ENTONCES capturamos el nombre de artista, etc...<br/><br/>Si la cadena está vacía (Clementine no está ejecutándose) entonces no pasará nada.<br/><br/>Pero ¿qué sucede si Clementine se está ejecutando pero ninguna canción se está reproduciendo? Para resolver esto podemos volver a condicionar. Ahora consultamos por el índice de la canción actual el cual puede tomar varios valores: -1 si no se está reproduciendo ninguna canción o bien un valor positivo en caso contrario. Por lo que agregamos ahora una nueva variable y una nueva condición:<br/><br/><pre class='brush: bash'><br/> isClementinePlaying=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetCurrentTrack)<br/> if [ $isClementinePlaying != -1 ]<br/> then<br/> #obtenemos el nombre de artista...<br/> currentTrackIndex=$...<br/> fi<br/></pre><br/><br/>Y eso es todo! Puedes descargar el script final desde <a href="http://dl.dropbox.com/u/64556/blog/ClementineNowPlaying.sh">aquí</a>.Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-51672995527077658492011-07-12T23:26:00.004-04:002012-02-28T00:07:49.137-03:00Cómo poner "Now playing" con Clementine+KopeteHasta hace un par de meses mi reproductor de música favorito en KDE era Amarok. Eso, hasta que me encontré con <a href="http://code.google.com/p/clementine-player/" target="_blank">Clementine</a>, el cuál posee una interfaz mucho más simple para la navegación de archivos que para mí fué lo fundamental. Por otra parte, mi aplicación de mensajería favorita es Kopete. Amarok y Kopete se llevan muy bien puesto que el último incluye la función "Now playing" para varios reproductores salvo mi Clementine :-(<br/><br/>Pero no todo está perdido! Si ponemos en un recipiente un poquito de BASH+QDBUS+Cron podemos hacer nuestro propio script "Now Playing" para establecer el mensaje de estado de Kopete con la canción y el artista que actualmente está sonando en Clementine.<br/><br/>Manos a la obra:<br/><br/>Primero creamos nuestro script en el directorio bin de nuestro home (por inercia, elección y formación utilizo nombres de archivos y variables en inglés):<br/><br/><pre class='brush: bash'><br/>pico ~/bin/ClementineNowPlaying.sh<br/><br/></pre><br/><br/>Siendo pico el editor de texto que más utilizo. Puedes utilizar tu preferido (Kate/KWrite/Vi...).<br/><br/>Básicamente (y muy básicamente puesto que estoy lejos de ser un experto en BASH scripting) nuestro script obtendrá la canción y el artista que actualmente está reproduciendo Clementine, luego los pondrá en el mensaje de estado de Kopete adornado con la frase "Now playing...".<br/><br/>A continuación pegan el siguiente código dentro del archivo, he agregado comentarios sobre qué hace cada línea:<br/><br/><pre class='brush: bash'><br/>#!/bin/bash<br/><br/>#Primero obtenemos el índice de la pista que actualmente esta sonando en Clementine<br/><br/>currentTrackIndex=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetCurrentTrack)<br/><br/>#Luego utilizamos ese índice para obtener toda la información de la pista actual<br/><br/>#Con el comando grep nos quedamos sólo la línea que contiene el nombre del artista, esta línea es por ejemplo artist: Bon Jovi<br/>artist=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep artist)<br/><br/>#Se aplica el mismo procedimiento para el título, esta variable quedará de la forma title: Always<br/>title=$(/usr/bin/qdbus org.mpris.clementine /TrackList org.freedesktop.MediaPlayer.GetMetadata $currentTrackIndex | grep title)<br/><br/>#Luego de la cadena original (ej: "artist: Bon Jovi") queremos borrar la subcadena "artist: " y eso lo hacemos así:<br/>artist=${artist/artist: /}<br/><br/>#Lo mismo para el título:<br/>title=${title/title: /}<br/><br/>#Finalmente enviamos la frase con las variables al mensaje de estado de Kopete:<br/>/usr/bin/qdbus org.kde.kopete /Kopete org.kde.Kopete.setStatusMessage "Now playing $title by $artist"<br/><br/></pre><br/><br/>Guardamos los cambios y cerramos nuestro editor de texto.<br/>Le otorgamos permisos de ejecución a nuestro script:<br/><br/><pre class='brush: bash'><br/>chmod +x ~/bin/ClementineNowPlaying.sh<br/></pre><br/><br/>Es tiempo de probar nuestro script: ejecutamos Clementine con alguna canción y abrimos Kopete.<br/>En el terminal ejecutamos nuestro script:<br/><br/><pre class='brush: bash'><br/>./bin/ClementineNowPlaying.sh<br/></pre><br/><br/>Chequeamos que Kopete ha realizado correctamente el cambio de estado:<br/><br/><a href="http://fcoarias.files.wordpress.com/2011/07/kopete_clementine_nowplaying.png"><img class="aligncenter size-full wp-image-211" title="Kopete_Clementine_NowPlaying" src="http://fcoarias.files.wordpress.com/2011/07/kopete_clementine_nowplaying.png" alt="" width="538" height="161" /></a><br/><br/>Finalmente necesitamos que nuestro script se ejecute cada cierto intervalo de tiempo para asegurarnos que mostrará la información lo más actualizada posible sobre lo que escuchamos. Para eso utilizaremos el gestor de tareas de Linux: Cron.<br/>Con el siguiente comando abriremos el editor del Cron:<br/><br/><pre class='brush: bash'><br/>crontab -e<br/></pre><br/><br/>Una vez ahí, presionamos la tecla i para iniciar la inserción de texto y pondremos la siguiente línea:<br/><br/><pre class='brush: bash'><br/>* * * * * DISPLAY=:0.0 /home/francisco/bin/ClementineNowPlaying.sh &>/dev/null<br/></pre><br/><br/>Esta línea quiere decir que ejecutaremos nuestro script cada minuto, de cada hora, de cada día, etc...<br/>Para salir del editor presionamos la tecla ESC y luego ponemos : x y presionamos enter.<br/>Para comprobar que hemos guardado los cambios ponemos:<br/><br/><pre class='brush: bash'><br/>crontab -l<br/></pre><br/><br/>Si no es así, volver sobre el paso anterior hasta que resulte! (Lo sé, ese editor no es de los más intuitivos).<br/>Cuando resulte habremos terminado!<br/><br/>Suerte!<br/><br/>Cualquier pregunta con respecto a esto no duden en enviarla como comentario.<br/><br/>Note: I can answer in english as well, so if you know what it is about everything here but although of that you may need some help, so please don't hesitate and leave a comment ;-)Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com2tag:blogger.com,1999:blog-4890416115654675608.post-28679777826256424882011-06-28T16:30:00.004-04:002012-02-28T00:09:30.614-03:00Compartir el escritorio en un aula de clases<strong>Introducción:</strong> Una metodología de enseñanza que utilizo para enseñar programación consiste en no presentar la solución completa de un problema sino de ir completándolo incrementalmente con la ayuda de los estudiantes presentes en la clase. Mi rol se limita a sólo ser un guía que los ayuda a descubrir una posible solución al ejercicio planteado.<br/><br/><strong>Problemática:</strong> Este esquema funciona bien en los horarios de cátedras (salas/aulas) pero los laboratorios (salas de computación) no cuentan con proyector (datashow) entonces es necesario contar con alguna herramienta que permita compartir la pantalla de mi computador vía red para que los estudiantes puedan ver en sus computadores lo que voy haciendo en el mío.<br/><br/><strong>Solución:</strong> Utilizar lo que describí en mi <a title="Controlar remotamente tu sesión de openSUSE" href="http://fcoarias.wordpress.com/2011/01/18/controlar-remotamente-tu-sesion-de-opensuse/" target="_blank">post anterior para el control de sesiones en openSUSE</a>. Esta vez queremos que los clientes (estudiantes) puedan ser sólo espectadores de mi sesión. Para esto utilizamos el siguiente comando en un terminal (como usuario normal):<br/><br/><pre class='brush: bash'><br/> x11vnc -forever -bg -viewonly -nopw -shared<br/></pre><br/><br/>La explicación "humana" de cada uno de los parámetros es la siguiente:<br/><ul><br/> <li>forever: Indica que la sesión compartida seguirá iniciada incluso después de que algún cliente se desconecte.</li><br/> <li>bg: Sirve para que la sesión de nuestro servidor corra como un servicio de fondo (background).</li><br/> <li>viewonly: Este parámetro nos sirve para establecer que los clientes sólo podrán ver nuestro escritorio y no manipular el mouse ni el teclado.</li><br/> <li>nopw: Establece que los clientes puedan conectarse al servidor sin clave.</li><br/> <li>shared: Nos permite tener más de un cliente.</li><br/></ul><br/>Una vez que el comando es introducido aparecerán en la consola un montón de instrucciones. Nos interesa un par de líneas como las siguientes:<br/><br/><pre class='brush: bash'><br/>The VNC desktop is: localhost.site:2<br/>PORT=5902<br/><br/></pre><br/><br/>La primera línea puede variar según la configuración del equipo. La segunda línea nos indica en qué puerto está corriendo nuestro servidor. En el ejemplo es el 5902, así que es necesario ir al administrador del cortafuegos y abrir dicho puerto:<br/><br/>YaST->Seguridad y Usuarios->Cortafuegos->Servicios Autorizados->Opciones Avanzadas<br/><br/>En la sección "Puertos TCP" agregamos el puerto que anotamos en el paso anterior:<br/><br/><a href="http://fcoarias.files.wordpress.com/2011/06/yast_opciones_avanzadas1.png"><img class="aligncenter size-full wp-image-190" title="yast_opciones_avanzadas" src="http://fcoarias.files.wordpress.com/2011/06/yast_opciones_avanzadas1.png" alt="" width="538" height="301" /></a><br/><br/>Damos aceptar a esa ventana y a la ventana de configuración del cortafuegos.<br/><br/>Y ahora estamos listos para compartir nuestro escritorio con los estudiantes. Sólo debemos decirles que bajen un cliente VNC (como TightVNC) y les damos nuestra IP y el puerto asignado al servicio, por ejemplo:<br/><br/><pre class='brush: bash'><br/>192.168.0.100:5902<br/></pre><br/><br/>Y eso es. Happy teaching!Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0tag:blogger.com,1999:blog-4890416115654675608.post-8475736024340548032011-01-18T20:09:00.005-03:002012-02-28T00:10:59.376-03:00Controlar remotamente tu sesión de openSUSEEn el principio de los tiempos, las sesiones de administración remota por vnc creaban una sesión gráfica nueva y no era posible controlar, por ejemplo, la sesión de usuario que actualmente estaba abierta. Hoy los tiempos han cambiado y ya es posible realizarlo en unos muy sencillos pasos:<br/><br/>1. Instalar el servidor de administración remota. Vamos a la administración de paquetes de YaST y en el campo de búsqueda ponemos: x11vnc. Seleccionamos ese paquete y le damos a instalar (aceptamos sus dependencias si es que las hay).<br/><br/>2. Habilitar el servidor para la administración remota. En <a href="http://es.opensuse.org/" target="_blank">openSUSE</a> es muy fácil, basta con ir a YaST->Servicios de Red->Administración Remota. Marcamos la opción "Permitir administración remota" y chequeamos en "Puerto abierto en el cortafuegos". Al aceptar se instalarán los paquetes necesarios.<br/><br/>3. Opcionalmente y si fuera necesario abriremos el puerto 5900 de nuestro computador: YaST->Seguridad y Usuarios->Cortafuegos. Seleccionamos "Servicios autorizados" y luego "Opciones Avanzadas". En la ventana agregamos el puerto TCP 5900.<br/><br/>4. Ya casi estamos listos. Ejecutamos el servidor de vnc en un terminal y como usuario normal de la siguiente forma:<br/><br/><pre class='brush: bash'><br/> x11vnc -usepw<br/></pre><br/><br/>Eso nos pedirá el ingreso de una clave para el control de acceso; ponemos la clave que queramos y la volvemos a ingresar.<br/><br/>5. Ahora podemos probar desde otro computador en la red local. Por ejemplo si la máquina que queremos controlar tiene la IP 192.168.0.40 presionamos Alt+F2 y ponemos el siguiente comando (o en una terminal):<br/><br/><pre class='brush: bash'><br/>vncviewer 192.168.0.40<br/></pre><br/><br/>Al dar enter nos pedirá la clave que ingresamos en el otro equipo y ya deberíamos estar controlando nuestro computador.<br/><br/>6. Al cerrar la sesión de VNC no podremos volver a conectarnos a nuestro equipo a menos que nuevamente ejecutemos el comando x11vnc... para evitar esto y habilitar la administración remota permanentemente haremos lo siguiente en<a href="http://www.kde.org" target="_blank"> KDE</a>: Preferencias del Sistema->Autoarranque->Añadir programa. En el campo de texto ingresaremos:<br/><br/><pre class='brush: bash'><br/>x11vnc -usepw -forever -bg<br/></pre><br/><br/>Aceptamos y ya hemos terminado. Ahora podemos controlar nuestra sesión activa de KDE desde cualquier otro computador.Francisco J. Ariashttp://www.blogger.com/profile/17124544146209990543noreply@blogger.com0