jueves, 11 de diciembre de 2025

Elixir: Procesos ligeros y mensajes en acción

El hecho de que Elixir sea concurrente permite ejecutar múltiples tareas simultáneas, de tal manera que el sistema es más rápido y fácil de escalar. Esto se logra mediante procesos ligeros y aislados que se comunican entre sí por medio del paso de mensajes en lugar de compartir memoria: el Modelo de Actores.

A continuación mostraré un código ejemplo y después lo trataré de explicar:
defmodule Demo do
  def start do
    pid = spawn(fn -> loop() end)
    send(pid, {:saludo, "Hola desde el proceso principal"})
    send(pid, {:error, "Ahora llego un Error"})
  end

  defp loop do
    receive do
      {:saludo, msg} ->
        IO.puts("Proceso recibió: #{msg}")
        loop()  # vuelve a esperar más mensajes
      {:error, msg} ->
        IO.puts("Proceso recibió: #{msg}")
        loop()  # vuelve a esperar más mensajes
    end
  end
end

Demo.start()

Acá primero creamos un proceso con spawn con una función llamada loop() la cual se ejecuta de manera recursiva, para siempre quedar en espera de un nuevo mensaje que haga match con los patrones definidos. Dichos mensajes se pueden acceder desde el buzón de mensajes que tiene cada proceso en BEAM con la construcción de Elixir/Erlang llamada receive.

Seguido de la creación del proceso con spawn y de que se queda en espera, se envían dos mensajes al proceso recién creado. Accedemos a él pasando el PID del proceso al cual le queremos enviar dicho mensaje. Por ejemplo, si pasamos la tupla con: send(pid, {:saludo, "Hola desde el proceso principal"})

Se recibe en la función loop antes creada por el nuevo proceso, la cual hace match por el átomo :saludo y, por consiguiente, imprime:  IO.puts("Proceso recibió: #{msg}")   

Inmediatamente seguido de esto hay un evento recursivo para quedarse esperando un nuevo mensaje al proceso.

En mis anteriores aproximaciones al lenguaje me había costado más trabajo entender estas primeras lecciones, y ahora lo estoy realmente disfrutando. Además, el código y la sintaxis se ven super limpios y bonitos.

hiram

sábado, 22 de noviembre de 2025

Mi nuevo intento con Elixir: descubriendo el poder del Pattern Matching

Empezaré hablando de Elixir, el cual se ha convertido en los últimos años en un lenguaje que me he propuesto aprender en varias ocasiones, aunque mis intentos anteriores no han sido exitosos. Actualmente, en la empresa donde trabajo están desarrollando algunos proyectos en Elixir. Yo no estoy en ese equipo de desarrollo, pero me gustó mucho cuando le eché un vistazo a lo que están construyendo. Hay cosas de la programación funcional que me vuelan la cabeza, así que con esta pequeña entrada doy inicio a un nuevo intento, procurando que esta vez sí sea el bueno.

Me saltaré todo el tema de instalación; ya no entraré en esos detalles en mi blog porque existen muchos recursos que lo explican muy bien. En su lugar, trataré de subir más código para explicarme a mí mismo y tener un diario con los conceptos que vaya aprendiendo. Si esto ayuda a alguien más a comprender algo, será un punto extra. Al principio, allá por 2009, quería que este blog tuviera muchas visitas. Ahora solo quiero que funcione como mi diario y que, en algunos años, si mis hijas deciden programar o dedicarse a la tecnología, puedan leerlo y usarlo como referencia en lo que estén haciendo. Eso sería excelente. Y si no se dedican a la tecnología, también me gustaría que lo leyeran para recordar en qué estaba trabajando en estos años. Dicho lo anterior, la instalación está muy bien documentada en la página oficial del lenguaje, así que pasemos a hablar del primer punto: Pattern Matching.

La documentación oficial nos dice: “Pattern matching is a powerful part of Elixir. It allows us to match values, data structures, and even functions.”
Yo estoy viendo el pattern matching como una forma de evitar el uso de if/else. Este punto me sorprendió bastante: un lenguaje cuya sintaxis te “obliga” a no usar esas secuencias de control. Eso emociona, ¿no? Es algo nuevo. Seguramente mi perspectiva sobre qué es el pattern matching todavía es muy limitada, pero apenas voy empezando. Algo que también comprendí de esa definición es que puede matchear estructuras de datos e incluso funciones, lo cual no hace más que aumentar mi interés por este lenguaje.

# Reto 1 – Saludos con pattern matching
defmodule Greeter do
    def greet("bitxbit"), do: "¡Hola, BitBit!"
    def greet(nil), do: "¡Hola, desconocido!"
    def greet(_), do: "¡Hola, mundo!"
end

# Aquí abajo puedes poner pruebas rápidas si quieres
IO.puts(Greeter.greet("bitxbit"))
IO.puts(Greeter.greet("Test"))
IO.puts(Greeter.greet(nil))

Aquí vemos un par de cosas: primero, no necesitamos sentencias de control para matchear las funciones del módulo Greeter. Esto me gusta mucho: el código se ve limpio. Solo a manera de comparativa, y sin buscar optimizar nada, haré lo mismo en C# usando un método con if/else.

using System;

class Greeter
{
    public string Greet(string name)
    {
        if (name == "bitxbit")
        {
            return "¡Hola, BitBit!";
        }
        else if (name == null)
        {
            return "¡Hola, desconocido!";
        }
        else
        {
            return "¡Hola, mundo!";
        }
    }
}

class Program
{
    static void Main()
    {
        var greeter = new Greeter();

        Console.WriteLine(greeter.Greet("bitxbit")); // ¡Hola, BitBit!
        Console.WriteLine(greeter.Greet("Test"));    // ¡Hola, mundo!
        Console.WriteLine(greeter.Greet(null));      // ¡Hola, desconocido!
    }
}

• En Elixir, defines varias cláusulas de la misma función y el runtime (BEAM) decide cuál usar según el patrón, la forma en que lo define es de arriba hacia abajo, en mi ejemplo con elixir se puede ver como coloque primero el nulo antes de que matche con cualquier cosa, porque si el _ estvuera primero este matchearia y el nil nunca se ejecutaria.

• En C#, defines una sola función y dentro usas if/else para decidir qué devolver.

Ahora lo haremos un poco más interesante colocare otro ejemplo donde utilizo estructura de datos como lista, tuplas y diccionarios.

defmodule Classifier do
    def classify(nil), do: "Es nulo"
    def classify(x) when is_number(x) and x > 0, do: "Es positivo"
    def classify(x) when is_number(x) and x < 0, do: "Es negativo"
    def classify(0), do: "Es cero"
    def classify([]), do: "Es una lista vacia"
    def classify(list) when length(list) > 1, do: "Es una lista con #{length(list)} elementos"
    def classify(tuple) when tuple_size(tuple) > 1, do: "Es una tupla con #{tuple_size(tuple)} elementos"
    def classify(%{name: name}), do: "Hola, #{name}"
    def classify(_), do: "Cualquier otra cosa"
end

IO.puts(Classifier.classify(nil))
IO.puts(Classifier.classify(10))
IO.puts(Classifier.classify(-5))
IO.puts(Classifier.classify(0))
IO.puts(Classifier.classify("hola"))
IO.puts(Classifier.classify([]))
IO.puts(Classifier.classify([1,2,3]))
IO.puts(Classifier.classify({:ok, 42}))
IO.puts(Classifier.classify(%{name: "Hiram"}))
IO.puts(Classifier.classify("$"))

Con esto termino esta entrada sobre pattern matching. De este último código, lo que me llama la atención es cómo hace el match con el paso de parámetros de una lista y cómo matchea con una cláusula de función en particular. Mientras escribo esto, sigo leyendo e investigando dudas que tengo sobre el mismo lenguaje. Es el día 3 desde que empecé a leer sobre Elixir y, como ya he dicho antes, no deja de interesarme cada vez más.

hiram

jueves, 20 de noviembre de 2025

Vamos a hacer un sudo apt-get update

Siempre dicen que uno vuelve a donde fue feliz, y antes de escribir una nueva entrada me di una pasada por algunos de mis antiguos posts. Vaya que me emocioné al ver y leer todos los temas en los que andaba en aquel entonces. Tengo alrededor de 7 años usando Windows nuevamente como SO principal, por trabajo. En un principio pensé en que tendría el tiempo de tener una segunda computadora en mi casa con Debian, a la cual llegaría por las noches a programar o a hacer algo, pero la verdad es que con tantas cosas que tenemos ya en la vida adulta es casi imposible. Lo cierto es que el trabajo me ha llevado por caminos que nunca pensé cruzar, así que tiempo es lo que menos he tenido estos últimos 7 años.

Me estoy proponiendo revivir esta pequeña libreta de notas para ir colocando acá algunas cosas técnicas y algunas otras personales. Como por ejemplo, que ya tengo dos hermosas princesas en mi vida: una llamada Sofía y la más pequeña llamada Renata. Seguro más adelante saldrán en alguna entrada hablando sobre ellas, porque ya las ando induciendo a la tecnología/programación. Estoy intentándolo hacer poco a poco para que no se sientan abrumadas y mucho menos obligadas. Hace un mes aproximadamente, Sofía me pidió que hiciéramos un carrito robot, así que mal no voy con mis planes. Veremos al final del camino qué deciden ellas.

hiram

jueves, 5 de octubre de 2017

Instalación de Servidor Samba

Es recurrente en el día a día estar compartiendo archivos con las personas con las que trabajamos o compartimos el área donde nos encontremos en esta entrada instalaremos un servidor Samba, en mi área de trabajo cuento con un Openframe que está haciendo la función de servidor tiene como SO base Ubuntu 16.04LTS así que el siguiente manual puede funcionar sin problemas para Debian y derivados del mismo incluyendo Ubuntu.

Lo primero es conocer el nombre del Dominio de nuestra red, la mayoria de nosotros contamos con una maquina Windows cerca así que en una ventana CMD tiramos el siguiente comando,
  • net config workstation
El cual nos devolverá algo así lo que nos importara de esto es el nombre del dominio en este caso WORKGROUP


Después de conocer el nombre del grupo procedemos a las configuraciones, lo siguiente se tendrá que hacer desde Ubuntu, nos conectamos a la máquina yo lo haré desde una terminal por medio de SSH,

Ya en Ubuntu debemos de instalar los siguientes paquetes ejecutamos el siguiente comando,
  • apt-get install -y samba samba-common python-glade2 system-config-samba
El cual instala lo necesario, ahora editaremos el archivo de configuración pero antes de eso haremos una pequeña copia del mismo, 
  • cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
Ya que hemos hecho el respaldo del archivo procederemos a editarlo esto con el editor que prefieran yo usare nano y agregamos el siguiente texto al final del archivo,

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
#======= Share Definitions =======
[YeicoShare]
path = /home/samuel/YeicoShare/
browsable =yes
writable = yes
guest ok = yes
read only = no
force user = nobody

En el archivo anterior  podemos ver que debemos de crear la carpeta a compartir shared y asignar los permisos necesarios para poder modificarla libremente dentro del home del usuario del servidor por lo que la crearemos antes de continuar.
  • Primero se crea: mkdir shared
  • Segundo se aplican los permisos necesarios: chmod -R 0777 /hiram/shared y después chown -R nobody:nogroup /hiram/shared
Una vez hecho esto reiniciamos el servicio,
  • service smbd restart
Ahora vamos a nuestra computadora en red desde donde queremos ver la carpeta compartida recién creada, en mi caso lo haré desde una Mac igual se puede hacer desde Windows o GNU/Linux,
*Nota. Cabe mencionar que el texto que aparece entre corchetes en el archivo de configuración será el nombre con el que aparecerá el recurso en mi caso YeicoShare.


hiram

martes, 26 de septiembre de 2017

Retornando

La primer entrada de este blog fue el 3 de noviembre del 2009 y hoy casi 8 años después tratare de desempolvar este pequeño y amado blog.

No se como empezar de nuevo por aquí, pero estuve revisando mis viejas entradas y la verdad primero que nada pido disculpas para los que me leyeron con muchas faltas de ortografía, aun las tengo y las tendré, solo espero vayan disminuyendo, así que primero que nada mis más sinceras disculpas.

Pues bien han pasado muchas cosas en mi vida, he aprendido algunas tecnologías desde que escribí ese último post hasta ahora, no contaré todas esas tecnologías en esta entrada mejor conforme vaya escribiendo algunas entradas trataré de dar un contexto donde o cómo es que llegue a esa tecnología.

Decidí regresar a mi blog porque intente en varias ocasiones montar mi propio servicio de blog con wordpress pero lo único que pasó es que mis servidores se iban muriendo o apagando o me costaba trabajo mantenerlos, por este motivo regreso a los servidores de Google y pues ya me evito de momento estar administrando mi propio servidor, que sí, si es muy padre levantar un servidor desde cero y aprender a levantarlos pero la administración y el mantenimiento del mismo es un trabajo aparte, de momento no cuento con tiempo para esto así que por eso aprovechare la infraestructura que nos brinda la gran G.

hiram


lunes, 20 de agosto de 2012

Bit0ne.

El pasado 16 de Junio compartí con los que me leen la forma de instalar lo necesario en Debian para empezar a jugar con Arduino, ese mes no pude jugar mucho debido a que me encontraba en exámenes y trabajos finales, llegó Julio y como me fui de vacaciones tampoco avance ni hice nada, la idea era empezar con un proyecto de robotica pequeño, ya estando de vacaciones entre el tiempo con la familia y amigos no pude hacer gran cosa mas que avanzar un poco con el lado mecánico del asunto, el cual no hice bien la primera vez y tuve que re-dimensionar el prototipo y volver a hacer todo de nuevo.

El proyecto que estoy realizando, que de ahora en adelante sera "bit0ne", no tiene un fin o un propósito central al menos por ahora, lo que estoy haciendo es simplemente dejar volar la imaginación conforme voy avanzando, si se me ocurre agregar algo lo voy haciendo sobre la marcha, no se a donde voy a llegar pero cada día que pasa me apasiono mas y mas con Arduino es simplemente una placa excelente para los que vamos empezando.

Mostraré un poco de los avances que voy teniendo con bit0ne primero que nada una imagen, esto era aun cuando estaba en pruebas con el puente H.



Conforme voy avanzando poco a poco voy agarrando mejor la idea de como programar mejor cada componente; Desde que me di cuenta que existía este lado de la ingeniería un nicho que viene fuerte y que cada vez se hará mas competitivo y mas rentable (aun mas de lo que ya es) me he apasionado mucho por estos temas, un punto que es muy fuerte para mi es el poder hacer algo mas con los códigos que escribes y no simplemente dejarlos dentro de un CPU.

Ahora mostraré el primer video de bit0ne en el solo muestro una rutina pre-cargada donde controlo el movimiento adelante, atras, vuelta de bit0ne, todo esto lo hago por medio de un puente H modelo L293D.




Antes de terminar esta entrada este otro vídeo donde agregue un sonar para evitar que bit0ne "choque" con dos obstáculos que puse a propósito para mostrar su funcionamiento, el modelo de sonar con el que estoy desarrollando es LV-MaxSonar-EZ1.



Conforme vaya avanzando iré mostrando mis avances. Cualquier duda sugerencia o comentario aquí abajo.

jueves, 16 de agosto de 2012

Hoy es Día Debian.

Hoy Debian cumple 19 años y bueno no me queda mas que agradecer a todos los que hacen posible esta excelente distro con la cual he aprendido mucho y me siento muy cómodo  agradecimientos especiales a la comunidad de usuarios pero sobre todo al equipo de desarrolladores, muchas gracias también a todos los Debianitas que pasan a leer mis textos raros.


Felicidades a todos los que de alguna manera ponen su granito de arena en el uso de Debian.

Si vives en el DF puedes acudir al Debian Day que esta organizando la comunidad Debian México puedes ver todo sobre esta noticia desde este enlace.

lunes, 9 de julio de 2012

Obtener 50GB en Box.com usando tu dispositivo Android.

Hace días pensaba como internet esta cambiando la forma en que almacenamos nuestra información, recuerdo cuando en un diskette de 3/2 me bastaba para almacenar mis archivos con codigos pequeños, cuando necesitaba almacenar archivos muy grandes (5MB) utilizaba programitas como Hacha para dividir el archivo y cupiera en varios diskettes, ahora es muy común ver a personas que pueden llenar discos de uno o dos terabytes, es sorprendente la gran cantidad de información que una persona puede almacenar, viendo un poco los hábitos que tienen personas cercanas a mi, los principales archivos que almacenan son del tipo multimedia llamese vídeos, fotos o música en una ocasión tuve un cliente que tenia un repertorio de casi 100GB de música, el problema recurrente que tienen estas personas es que no cuentan con espacio suficiente en sus discos duros o en su tablet o en su memoria usb o en cualquier otro medio fisico de almacenamiento, y es aquí donde entran servicios en la nube como Dropbox, Box o Google Drive entre muchos otros.

Yo utilizo Dropbox para archivos digamos no tan personales, pues eso de subir archivos a servidores que no están a mi custodia no es lo mio, por ese motivo evito subir archivos digamos "críticos", de hecho ya hable un poco acerca de eso, pero para los demás archivos, wallpapers, archivos de la escuela etc me sirve muy bien, hace tiempo descubrí el siguiente "truco" de como obtener de una cuenta de Box.com de 5GB obtener 50GB de almacenamiento totalmente gratuito, creo que para las personas que gustan de guardar mucha información 50GB no les vendrán nada mal.

Antes de pasar a obtener esos 50Gb lo primero que tenemos que hacer es que si no tenemos cuenta en Box.com sacaremos una, una vez hecho esto ahora si podemos continuar.

Lo primero que tienen que hacer es activar la opción de poder instalar apps de terceros (Orígenes Desconocidos) todo esto dentro del menú de nuestro dispositivo Android, para activar esta opción nos dirigimos a:
Configuraciones> Aplicaciones> Orígenes desconocidos

Después de realizar el paso anterior, bajen está aplicación e instalenla en su dispositivo la app se llamará Free 50GB Box.com una vez instalada.

Después de ingresar a la app escriban el usuario y password de su cuenta Box.com.

Una vez hecho esto les llegara un mail avisando que su cuenta ahora tiene 50GB de almacenamiento, la verdad es una excelente opción gratuita al almacenamiento online, por ejemplo yo en mi cuenta de DropBox tengo solo 4GB de almacenamiento y en esta otra cuenta tengo 50GB, para las personas que gustan de almacenar muchas fotos, documentos es una excelente opción.

sábado, 16 de junio de 2012

Arduino, Instalación en Debian Squeeze Linux.

La semana pasada pedí una placa Arduino Uno R3 la cual me llego el pasado lunes 11 de junio, no había tenido la oportunidad siquiera de sacar la placa de la bolsita donde me llego, debido a que estamos en finales de semestre y entre tantos proyectos y exámenes que tuve no encontraba ese hueco para jugar un rato con ella; pero hoy al fin ya estoy saliendo de los pendientes, así que como ya no tengo tanta carga de trabajos decidí abrir el paquete en el que venía el Arduino, digo paquete porque pedí otras cosas pero esas las mostraré conforme vaya jugando mas con la placa. 
Acá una foto del paquete que recibí, (disculpen la calidad de las imágenes).

Empezaremos a instalar el software necesario para controlar nuestra placa Arduino, lo haré en Debian Squeeze, como nota para entendernos mejor, cuando aparezca el símbolo # en los comandos esto quiere decir que son ejecutados con permisos de administrador root.
Pero bueno basta de detalles empecemos con el trabajo.

1.- Instalar el software necesario para poder controlar de buena manera nuestra placa.

#apt get install arduino-core 

2.- Agregaremos el siguiente repositorio a nuestra sources.list, esto debido a que necesitamos un paquete que no se encuentra en los repos oficiales de Debian Squeeze y solo se encuentra de momento en los repos de Debian Wheezy.

deb http://ftp.us.debian.org/debian wheezy main contrib non-free

Después de hacer un update a nuestros repositorios instalaremos el paquete librxtx-java que precisamente se encuentra en el repo que acabamos de agregar, una vez instalado eliminamos el repositorio que agregamos en este punto para no tener problemas cuando actualicemos nuestro sistema.

3.- Ahora descargaremos el IDE de Arduino oficial para Linux desde este página, el enlace es para la versión de 64bits, al final de la entrada dejare el enlace para la versión de 32bits.
Después de descargar el IDE lo descomprimimos en el lugar de nuestra preferencia yo lo hice en /home/hiram/arduino.

4.- Antes de arrancar el IDE necesitamos hacer dos cosas importantes (me quitaron algo de tiempo así que es buen punto comentarlas).
Lo primero es que necesitamos agregar nuestro usuario a dos grupos de la siguiente manera:
# usermod -a -G tty tuUsuario
# usermod -a -G dialout tuUsuario

La segunda cosa importante que tenemos que hacer es dar permisos al puerto serial (es por donde se comunica nuestro Arduino Uno R3) para poder leer, escribir, esto se realiza de la siguiente manera.
# chmod 777 /dev/ttyS# (donde el # simboliza donde se monta el arduino generalmente es el 3).

Después de hacer esto tendremos que reiniciar nuestro equipo para que el BIOS detecte el puerto serial desde el arranque del equipo.

6.- Una vez reiniciado, conectamos nuestro Arduino al puerto USB, y verán que empezara a parpadear un led en color ambar y uno en verde.

5.-Ahora es tiempo de configurar nuestra placa en el IDE, nos dirigimos a la carpeta en donde tenemos instalado el entorno Arduino (paso 3), dentro de ella tecleamos lo siguiente:
usuario@maquina: ./arduino

Lo cual abrirá el Arduino 1.0, seleccionamos desde el menú Herramientas>Puerto Serial> /dev/ttyS# el puerto donde tenemos nuestro Arduino ahí mismo en el sub-menú Tarjeta elegimos Arduino UNO o el modelo que tengas.

Y Listo ya tenemos viva nuestra placa :D, en próximas entradas iremos explorando un poco algunos códigos de ejemplo que contiene el mismo IDE, por el momento me voy a dormir ya que no lo he hecho de manera normal estos últimos días.

Página oficial del proyecto Arduino.
Manual de instalación oficial Arduino para Debian.
Arduino 32 bits descargar de acá.

jueves, 14 de junio de 2012

[OT] Skype se actualiza en Linux en su nueva versión 4.0, ¿Cómo instalarlo?

Esta es una entrada de esas a las que llamo al calor y es que me he enterado apenas el día de hoy que Skype, porfin!!!, actualiza su versión para Linux ademas hace lo mismo para Mac y Windows.
Siendo la versión 4.0 la última actualización que ya tengo instalada y corriendo en Debian Squeeze, acá las versiones mas recientes, tanto para Linux, Mac y Windows.

Para instalarlo en Debian, ingresan a la página de descargas y seleccionan el .deb que necesiten ya sea para 32bits o 64bits una vez hecho esto por consola tecleamos los siguiente:

# dpkg -i /ruta/donde/esta/el/skype.deb

Al finalizar lo lanzan desde Aplicaciones>Internet>Skype, y listo tienen la nueva versión.


lunes, 4 de junio de 2012

Linux + Android: Aplicación, PowerPoint OpenOffice Remote: Controla diapositivas desde tu dispositivo Android.

Hoy tuve una exposición importante en una de mis clases que estoy llevando este semestre, recuerdo que el laborioso trabajo de crear las diapositivas para las materias de la carrera caía sobre la espalda de mis compañeras, con las cuales sobra decir me gustaba hacer equipo ya que les quedaban muy bien. Pero esta vez las cosas son diferentes ya que las exposiciones son individuales así que necesitaba hacer una buena presentación sobre todo necesitaba algún "aparatito" bluetooth que sirven para controlar las exposiciones, de esos que puedes cambiar entre diapositivas, pero recordé que tengo un smartphone Android :P y pensé que quizás podría encontrar una app que me sirviera para esta tarea y así evitar comprar uno de esos "aparatitos", después de una pequeña búsqueda llegue con ella.

La aplicación se llama PowerPoint OpenOffice Remote y como su nombre claramente lo dice es un control remoto tanto para OpenOffice como para PPT incluso yo lo use con Impress de Libre Office y me funciono de maravilla.
Ahora mostraré un pequeño mini-tutorial de como instalarlo e iniciar una presentación.

1.- Instalación de las aplicaciones y hablo en plural debido a que se necesita tanto instalar en el pc como en tu terminal Android.

La app Android desde acá la descargas o de este código QR.
La aplicación para PC la descargas directamente de acá.

Pasos PC
2.- Una vez instalada la app en tu Android, centraremos toda la atención en el .jar que descargamos, lo ejecutaremos y nos mostrara una pantalla igual a esta:

3.- Presionaremos Open File nos mostrara un cuadro de dialogo en el cual debemos de buscar la presentación en nuestro disco duro una vez seleccionada presionamos "Open", después de esto estara "cargada" nuestra presentación.

4.- Una vez hecho esto iremos a la pestaña Log, de dicha pasteña pondremos atención a la dirección IP que nos muestra en dicho Log.

Pasos Terminal Android.
5.- Antes de abrir la app necesitamos estar conectados a la misma red Wifi que la pc que ya tenemos preparada en los puntos de arriba, después ya podemos abrir la App PowerPoint OpenOffice Remote, la cual nos mostrara algo similar a esto.


6.- Presionamos el icono que dice "Connect to PC" y nos mostrara un menú como este.


7.- En la pantalla anterior presionamos la tecla "menú" de tu dispositivo android y seleccionamos de las opciones que nos muestra donde dice "Insert IP Adress".

8.- Nos mostrará una pantalla igual a la que se ve a continuación, en la cual teclearemos la IP de la pestaña Log de la aplicación que tenemos corriendo en el PC, al terminar presionamos el botón "check", lo cual nos mostrará el nombre del host en este caso el nombre de tu PC.

Antes de este paso Abrimos la presentación que hemos seleccionado en la pc y la dejamos abierta en primer plano en nuestra pantalla de la computadora. 
9.- Seleccionamos el nombre de la PC y nos regresara al primer menú, ahora presionaremos "Load Presentation".


10.- Al presionar Load Presentation nos mostrara este menú(imagen siguiente), del cual presionaremos el botón Load Presentation, paso seguido el programa Impress o PowerPoint empezara a realizar una presentación de "prueba" de forma automática, al terminar dicha presentación de "prueba" nos regresamos al menú principal de la aplicación.


11.- Estando en el menú principal veremos el botón "Start Presentation" activado para lo cual basta con presionarlo para empezar a tener el control de las diapositivas :D.

En lo personal me ha parecido excelente esta app, mas que nada porque podré realizar mejores presentaciones sin necesidad de ir a cambiar con el teclado cada que paso a una diapositiva, ademas que la aplicación muestra las notas que haces en cada una de las diapositivas, esto para mi es excelente ya que uso una mayor cantidad de imágenes y en las notas pondré pequeños "acordeones" por si se me pasa u olvido algo importante.
Una desventaja que puedo comentarles es que necesitamos de una conexión wireless (en su versión gratis), para poder sincronizar tu pc con tu dispositivo Android, aunque a mi me viene bien esto, ya que mi portátil no cuento con bluetooth.
Nota, esto es compatible con software Windows debido a que la aplicación es un ejecutable hecho en java, los pasos a seguir serian los mismos mencionados acá arriba.

Pueden dar un vistazo en la página del autor.

viernes, 18 de mayo de 2012

Utilidad: Redimensionar Imagenes con nautilus-image-converter

Estoy construyendo una tienda online sobre PrestaShop y bueno todo va bien dentro de lo que cabe, hasta que he llegado a la parte un poco mas tediosa, al menos para mi, que es subir los archivos al servidor y no es que sea muy complicado, lo que sucede es que tengo que subir las imágenes de los productos.

Las  imágenes las estoy tomando con una cámara digital que me da unas resoluciones demasiado grandes y esto aumenta la cantidad de megas que tengo que almacenar en el servidor, así que me di a la tarea de buscar una aplicación para re-dimensionar las imágenes sin tantos problemas, vamos algo sencillo, y creo que di con ella, de hecho es una aplicación bastante cómoda ya que se integra con el Nautilus de mi Gnome

La herramienta lleva el nombre de nautilus-image-converter y nos ayuda a re-dimensionar tanto el tamaño como la calidad de la imagen y lo mejor con un par de clics, esto es lo que nos dice la página oficial del desarrollo de la aplicación.

  
Details
 
ImageResizer
  • Adds a "Resize Images..." menu item to the context menu of all images. This opens a dialog where you set the desired image size and file name. A click on "Resize" finally resizes the image(s) using ImageMagick's convert tool.

Instalación.
En Debian basta con desde consola teclea lo siguiente:
# apt-get install nautilus-image-converter
Una vez instalada tecleamos lo siguiente:
# killall nautilus

Al finalizar estos dos sencillos pasos ya podemos re-dimensionar las imágenes con un par de clics, para probar la herramienta, ubicamos una imagen y presionamos clic derecho encima de el archivo y en el menú contextual damos clic en "Redimensionar Imagenes....." al hacer esto nos mostrara una ventana igual a esta:


Al finalizar de modificar las configuraciones que deseamos tener en el resultado de nuestra imagen presionamos el botón redimensionar, lo cual creara una imagen con menor tamaño en la misma carpeta.

En lo personal esta muy bien el funcionamiento de esta aplicación recomendable para redimensionar imágenes al "calor" del trabajo, seguramente existen aplicaciones un poco mas robustas pero para los fines para que lo utilizo a mi me va bastante bien.

martes, 6 de marzo de 2012

Xournal: Subraya textos en formato PDF.

Interesante aplicación que encontré, debido a la necesidad que estoy teniendo de entregar resúmenes. Necesitaba algo que me ayudara a subrayar y escribir notas para tener una mejor comprensión de lo que estoy leyendo, sobre todo en archivos con formato PDF.

Vista de la aplicación.

Googleando llegue a un blog donde hablan de Xournal, dicha aplicación me sirvió para resolver la necesidad que tenia de subrayar y agregar notas a mis lecturas, se encuentra en los repositorios oficiales de Debian y leí en el blog donde encontré la noticia también se encuentra en los repos oficiales de Ubuntu, así que si tu también tienes esa necesidad puedes probar Xournal y seguro te ayudara.

La instalación en Debian es de la siguiente manera.
#apt-get install xournal

Que tengan un buen día, nos leemos en la próxima entrada

lunes, 13 de febrero de 2012

[Seguridad] Linux: Como cifrar información para una mejor protección de nuestra información, al utilizar servicios como Dropbox.

Últimamente estoy leyendo algo sobre seguridad en los sistemas informáticos y con estas lecturas me ha entrado esa espinita por proteger un poco mas mi sistema y concretamente mis archivos personales.

Hace un par de semanas escuche un podcast sobre seguridad informática concretamente en redes wifi, en entradas posteriores mencionare un poco sobre ello, en el podcast también se toco el tema de Dropbox y la persona mencionaba una experiencia que tuvo, comentaba que un día cambio su password en la web de Dropbox y después se logueaba con su celular a la cuenta de Dropbox y esta seguía entrando a ver sus archivos aun cuando había cambiado su password, supongamos que perdemos nuestra computadora o celular o gadget, donde tengamos instalado Dropbox, pues bien, aun cambiando el password, dicho dispositivo podría seguir viendo los archivos ya que continuaba enlazado a nuestra cuenta, si bien desde el portal de Dropbox se puede desenlazar el equipo, existen personas que no tienen la menor idea de que esto se puede realizar, por lo cual de alguna u otra manera quedan expuestos totalmente sus archivos personales de su cuenta en Dropbox.

Por tal motivo he decidido cifrar lo que subo a Dropbox para así al menos tener un poco mas de seguridad en que no cualquier persona vera mis documentos y tambien hacer un poco mas seguro mis datos en dicho servicio en la nube, partamos de que tenemos Linux instalado en nuestra computadora uso Debian y sobre esta distro en su rama estable trabajaremos (lo mismo funcionara para Ubuntu o cualquier otra distribución Linux que exista).

Lo primero que les recomiendo es que comprimamos el/los archivos que queremos cifrar, hay diferentes maneras de hacerlo, en modo visual o desde una terminal con comandos, veremos a continuación las dos formas de hacerlo.

Modo visual: Se presiona el botón derecho del mouse en el archivo o directorio a comprimir, después simplemente presionamos en el menú desplegable comprimir... seguido de esto damos un nombre y un tipo de extensión a nuestra compresión, el tipo de comprensión sera gusto de cada uno

Modo consola: La opción de hacerlo mediante la consola (un poco mas divertida), sera de la siguiente manera, utilizare un archivo tipo tar y compresión Gzip se tecleara de la siguiente manera:

tar czf nombre_comprimir.tar.gz /directorio/a/encriptar/

De esta menara se creara un archivo "nombre_comprimir.tar.gz" el cual contendrá nuestro(s) archivo(s) previamente seleccionado(s). Ahora pasemos al cifrado de nuestro archivo previamente comprimido.

Cabe mencionar que hay diferentes formas de cifrar y depende de ustedes cual desean utilizar, para mi ejemplo usare el cifrado aes-256.

Continuando con lo anterior, después de comprimir nuestro(s) archivos pasaremos ahora a cifrarlo de la siguiente manera.


openssl enc -aes256 -e -in nombre_comprimir.tar.gz -out cifrado_nombre.cy
donde:
nombre_comprimir.tar.gz es el archivo previamente comprimido
cifrado_nombre.cy es el nombre del archivo una vez cifrado

Después de presionar la tecla enter nos pedirá un password, se recomienda usar mayúsculas, minúsculas o números y así juntar sucesiones de caracteres, no se recomienda el uso de palabras que se encuentren en el diccionario.

Una vez generado el archivo "cifrado_nombre.cy", lo subimos a nuestra cuenta de Dropbox, con esto garantizamos tener una mayor seguridad en que nuestros archivos estarán un poco mas protegidos.

Si queremos descifrar nuestro archivo cifrado basta con teclear desde consola lo siguiente:


openssl enc -d -aes256 -d -in /donde/este/cifrado_nombre.cy -out asi_se_llamara_el_comprimido.tar.gz

Nota: El pass que les pide es el mismo que utilizaron para cifrar su archivo.

Tal vez el proceso resulte un poco "latoso" obviamente es mas cómodo simplemente subir los archivos sin ninguna compresión, pero es mejor cifrarlos ya que con este proceso se garantiza tener un poco de mayor seguridad en lo que a archivos críticos personales se refiere, así que, es mejor acostumbrarse a hacerlo ya que de cierto modo nos puede evitar dolores de cabeza futuros.

Estas cosas sobre seguridad están llamando mi atención, no soy un experto en este tema, pero si me iré adentrando un poco mas en estas cuestiones, cualquier duda, sugerencia o comentario acá abajo lo pueden expresar.

viernes, 27 de enero de 2012

[OT] Primer entrada 2012.. algo tarde :D

La primer entrada de este año. No quiero empezar nada sin antes desearles un excelente año a todos los que de alguna manera lleguen a leer esta entrada, este año lo espero particularmente algo cargadito en casi cualquier ámbito de mi vida, espero que su año (que ya casi paso un mes) este muy bien en todos los sentidos para todos ustedes :D.

Algo que se viene así rapidito es que cambiare de residencia, este es el segundo cambio de residencia en mi vida y para ser sincero este me esta costando mas trabajo que el primero;  Y en gran parte por las excelentes personas que estoy dejando aquí, también, por que la primera vez que me cambie fue a una edad mas temprana y creo que, eso influyo en no darme cuenta que cuando te alejas de personas tan especiales tarde o temprano las terminas extrañando, pero lo bueno es que seguiré regresando acá cada que tenga tiempo y con los servicios de chat o videollamada que existen hoy en día todo esto se hará un poco menos pesado y estaremos en contacto la mayor parte del tiempo.

Decidí escribir hasta ahora sobre esto (cambio de residencia) ya que no estaba seguro de nada, fueron cerca de 2 meses y fracción de el proceso de admisión que concluyeron hace un par de días satisfactoriamente para mi y otros 9 compañeros que tendré el placer de conocer durante los próximos dos años de mi vida; realmente fueron días difíciles, ya que me di cuenta que aun cuento con muchas deficiencias o mejor dicho malos hábitos sobre todo a la hora de estudiar y analizar información, creo que es algo que la misma forma de educación en México te va orillando y uno como estudiante con tal de entregar el trabajo rápido y conseguir la ansiada calificación aprobatoria, termina adoptando como mal habito el no analizar los diferentes trabajos  o tareas que te dejan tus profesores y al final lo único que conseguimos es no crear en nosotros un pensamiento critico e ingenioso, pero bueno eso ya es otra historia.

Ya para despedirme de esta primer entrada de este 2012, me acaba de llegar la invitación a participar en el Blog Debian México :D, lo cual me pone muy contento, en cuanto escriba por allá algunos tutoriales o información sobre Debian pues colgare aquí también solo la liga para no repetir la misma info que allá.

Por ahí dicen que vale mas tarde que nunca, así que les deseo un excelente 2012.

Un saludo para todos.