Category ArchiveInformática

mapa_calor_el_debate_decisivo

Twitter y #7dElDebateDecisivo

Twitter se convirtió en una gran herramienta para medir tendencias. No siempre dice la verdad, pero por lo menos será un indicador de la actividad o como afecta un determinado tema a la sociedad (que usa Twitter).

Ayer se celebró el gran sonado #7dElDebateDecisivo que tuvo gran actividad en Twitter, tanto comentarios en contra, como a favor como jocosos.

Yo hice un tuit en #7dElDebateDecisivo. Míralo gracias a @cartodb Clic para tuitear

El grupo Atresmedia hace historia reuniendo a más de 9 millones de espectadores en Antena 3 y laSexta (48.2%) para seguir el debate.

Es cierto que sobre resultados puede dar resultados sesgados en poblaciones de personas o grupos de personas que usan o no twitter. Por ejemplo, si es un tema que afecte a personas mayores, éstas no usan twitter, por lo que su notoriedad en esta red social será escasa. En su lugar, en lo periódicos escritos tendrá más presencia.

De los 4 partidos políticos (por orden alfabético: Ciudadanos, Podemos, PP y PSOE), unos intentan fomentar ésta red social, otros la tienen más interiorizada y otros pasan de ella. Pero como visión de actividad está bien.

Gracias a CartoDB, empresa española, podemos representar la actividad en un mapa de calor de éste trending topic de ayer:

Totalizando los tuits:

Para los más avanzados sería el ejercicio de estudiar la actividad de los tuits en cada momento de cada intervención.

 

 

free-the-mallocs c

PInvokeStackImbalance en Pruebas de Unidad (Unit Test)

free-the-mallocs cA veces es necesario realizar un desarrollo de una librería en .NET  que realiza llamadas a librerías de C/C++,  porque vienen de funcionalidades más antiguas o simplemente porque en C/C++ corre más en las que se necesita hacer cálculo intensivo.

Si es así, al realizar las pruebas de unidad (unit test), te puede aparecer el problema PInvokeStackImbalance:

Una llamada a la función PInvoke ‘MiDll!<Module>::miFuncionC’ impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino.

Lo que viene a significar PInvokeStackImbalance es que la firma de la función a la que se llama no es la esperada. En mi caso estaba seguro que la firma de la función era correcta puesto que en el uso de la función, fuera de las pruebas de unidad, funcionaba perfectamente.

Por lo que el problema es como .NET llama a las funciones de código nativo. Desde .NET tenemos estos distintos tipos de convenios de llamadas a través del enumerado CallingConvention:

Members

Member name Description
Cdecl The caller cleans the stack. This enables calling functions with varargs, which makes it appropriate to use for methods that accept a variable number of parameters, such as Printf.
FastCall This calling convention is not supported.
StdCall The callee cleans the stack. This is the default convention for calling unmanaged functions with platform invoke.
ThisCall The first parameter is the this pointer and is stored in register ECX. Other parameters are pushed on the stack. This calling convention is used to call methods on classes exported from an unmanaged DLL.
Winapi Supported by the .NET Compact Framework. This member is not actually a calling convention, but instead uses the default platform calling convention. For example, on Windows the default is StdCall and on Windows CE .NET it is Cdecl.

Más info: https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention%28v=vs.71%29.aspx

.NET por defecto usa  StdCall, pero mi librería usa Cdecl.

Evitar PInvokeStackImbalance: Definir convenios de llamadas a funciones

Para especificar el convenido de llamada usaremos los atributos de DllImport.

Si en un inicio tenemos definida nuestra función de esta manera:

[DllImport(“MiDll”, CharSet=CharSet::Ansi)]
extern “C” void *MiFuncionC(int id);

pasamos a especificar el convenio de llamada de esta otra manera:

    [DllImport(“MiDll”, CharSet=CharSet::Ansi,CallingConvention=CallingConvention::Cdecl)]
extern “C” void *MiFuncionC(int id);

De esta manera en las pruebas de unidad se fuerza a usar el convenio Cdecl evitando la excepción PInvokeStackImbalance.

No perder la sesión remota de Linux

xpra-logo-gnuAnteriormente ya hemos aprendido a conectarnos a nuestro servidor Linux con éste post.

Si eres usuario habitual de estas herramientas, cuando nos conectamos a una sesión remota a Linux tenemos el problema que en muchas ocasiones tenemos que desconectar la conexión cuando estamos ejecutando un comando que aun no terminó. Habitualmente el cierre de la conexión mata el proceso que estamos ejecutando, teniendo que empezar de nuevo. Esto es más problemático cuando la conexión al servidor es mucho más inestable (WiFi o conexión móvil).

Con #screen y #xpra podemos mantener la conexión remota siempre activa Clic para tuitear

Tanto si nos conectamos en modo línea de comandos como si nos conectamos a las XWindows, existe la posibilidad de mantenerlas abiertas para futuras conexiones.

No perder la sesión remota de línea de comandos

screen es un gestor de sesiones de consola, que permite lanzar una sesión y recuperarla más adelante, si la conexión se corta o no queremos mantener el equipo conectado y encendido permanentemente.

Su uso es muy sencillo, basta con ejecutar este comando, con lo que se abrirá la sesión existente de haberla, o en caso contrario se creará una nueva:

screen -x -R

Una vez dentro de la sesión, puede controlarse con los siguientes atajos de teclado:

  • Control + A + D : Separarse sin cerrar la sesión (se podrá recuperar más adelante).
  • Control + D : Cerrar la sesión definitivamente.

Esto permite iniciar una sesión en un equipo, conectarse desde otro y recuperarla (interactuando incluso desde ambos equipos al mismo tiempo). O bien cerrar la conexión y recuperar la sesión más tarde.

El problema aparece cuando una aplicación utiliza ventanas gráficas, ya que, aunque se utilice el X11 forwarding combinado con screen, no es posible recuperar las ventanas más adelante tan solo usando screen.

No perder la sesión remota de XWindows remota

xpra puede entenderse como un análogo de screen para ventanas. Es un servidor de X11 que permite conectarse a él desde diferentes lugares (eso sí, no al mismo tiempo) y así recuperar las ventanas de las aplicaciones ejecutándose en remoto.

Si la aplicación es lanzada desde la propia sesión SSH, Xpra no impide que la aplicación se cierre al cortar la conexión SSH, por lo que lo habitual es combinar el uso de Xpra y screen:

xpra start :100

DISPLAY=:100

screen -x -R

A partir de entonces, las aplicaciones lanzadas dentro de la sesión de screen se redirigirán al servidor Xpra, y podrán ser recuperadas en cualquier momento. Para hacerlo dentro de la sesión de screen, se debe especificar el display correcto.

firefox & DISPLAY=:100

xpra attach :100

No es necesario conectarse por SSH previamente para recuperar una ventana, ya que Xpra puede hacerlo directamente con el siguiente comando:

xpra attach ssh:usuario@equipo:100

En la página de manual de Xpra hay mucha más información interesante, ya que permite hacer muchas más cosas.

Twitter cumple 7 años

Twittear ¿cuándo es mejor?

Twitter cumple 7 añosMuchas veces tenemos la posibilidad de escoger la hora de publicar de un tuit para conseguir un mayor impacto o para que sea más viral.

Buffer publicó un estudio de que horas son las mejores para ser más popular y que horas son mejores para que tengan más interaciones.

Twittear tuits populares

Aunque el estudio es a nivel mundial el siguiente gráfico muestra que la mejor hora para twittear tuits populares es de 16.00 a 17.00 a nivel de Europa:

horario twittear

Twittear tuits con interacciones

El siguiente gráfico muestra que la mejor hora para twittear tuits con más intereacciones a nivel mundial: Best Times to Tweet for Engagement

 

XWindows de Linux desde MacOX

x11Veremos como desde nuestro mac nos podemos conectar a las XWindows de Linux a través de SSH.

El Sistema de Ventanas X (en inglés, X Window System) es un software que fue desarrollado a mediados de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que está en uso actualmente. X es el encargado de mostrar la información gráfica de forma totalmente independiente del sistema operativo.

SSH (Secure SHell, en español: intérprete de órdenes segura) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos ejecutando un Servidor X (en sistemas Unix y Windows).

Configuración de XWindows en Linux

Para permitir la ejecución de las XWindows de nuestro Linux deberemos editar los ficheros:

  • /etc/ssh/ssh_config

ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes

  • /etc/ssh/sshd_config

X11Forwarding yes

Reiniciamos el demonio ssh:

/etc/init.d/sshd restart

Configuración de XWindows en MacOX

Debemos de instalar el entorno de X11 XQuartz que lo tenemos disponible en la siguiente dirección:

http://xquartz.macosforge.org/landing/

Si tienes instalado InkScape o aplicación similar es posible que ya lo tengas instalado.

Ya tenemos todo lo necesario para iniciar aplicaciones de nuestro servidor Linux en nuestro MacOX

Ejecución de aplicaciones en las XWindows

Abrimos la aplicación X11, y nos abrirá un terminal, en el que ejecutaremos el ssh para conectarnos con el servidor:

ssh -XC user@server -p port

Una vez abierta la sesión ya podremos ejecutar la aplicación que queramos: firefox, nautilus…

Si estamos en Ubuntu podremos ejecutar el escritorio con:

ubuntu-session
xubuntu-session

En acabado es muy bueno, puesto que las ventanas se integran en nuestro MacOX, no como las máquinas virtuales o similares:

nautilus-x11-ssh

 

dd linux

dd: clona discos y mucho más

dd linuxdd es un comando de la familia de los sistemas operativos Unix que permite copiar y convertir datos de archivos a bajo nivel.

Es generalmente usado para realizar operaciones avanzadas sobre dispositivos o archivos, como pueden ser:

  • Transferencias de datos específicos.
  • Copias de seguridad de la información «en crudo» (raw data).
  • Conversión de algunas codificaciones soportadas y/o caracteres predefinidos.

Pero al contrario que otras herramientas que desde su creación se han ido sofisticando, ésta se ha ido simplificando, hasta el punto de poder hacer lo mismo que buenos programas comerciales como Norton Ghost o libres como CloneZilla, con sólo una pequeña orden en la línea de comandos.

Advertencia dd

Utilizar este comando con precaución, y asegúrate siempre del orden y nombre de tus discos duros, porque lo mismo que te clona un disco te lo borra.

#dd hace lo mismo que los buenos programas comerciales como #Norton #Ghost o libres como #CloneZilla Clic para tuitear

¿Qué discos volcamos con dd?

Lo primero siempre es tener claro el disco duro de origen y el de destino, algo que averiguamos fácilmente con el comando (como root) fdisk -l.

Lo básico de dd

La sintaxis más básica, sería ésta [como root]:

dd if=[origen] of=[destino]

Por lo que si quisiéramos clonar un disco duro:

dd if=/dev/hda of=/dev/hdb bs=1M

con esto clonaríamos el disco hda en hdb. (discos IDE), o:

dd if=/dev/sda of=/dev/sdb bs=1M

para discos SATA

Con bs=1M, estamos diciendo que tanto la lectura como la escritura se haga en bloques de 1 megabyte (menos, sería más lento pero más seguro, y con más nos arriesgamos a perder datos por el camino).

Hay que tener en cuenta que de esta forma grabarás el disco “tal cual”, MBR, tabla de particiones, espacio vacío, etc., por lo que sólo podrás grabar en un disco del mismo o mayor tamaño.

 Volcado de discos a punto de morir con dd

Recuperar un Disco Duro defectuoso o DVD rayado

dd if=/dev/cdrom of=/home/dvd_recuperado.iso conv=noerror,sync

Esto no recupera todo el DVD, en este caso, sólo los sectores legibles. Sirve también para discos duros defectuosos.
La opción noerror sirve para obviar los errores de lectura en cualquier situación. Otro ejemplo sería:

dd conv=noerror if=/dev/hda of=~/home/imagen_disco_con_errores.iso

Grabaríamos con ello una imagen del disco duro en nuestro home saltándonos los errores del disco (muy útil para discos que se están muriendo).

Otras utilidades de dd

Para paranóicos del borrado de la información

Llena el disco con caracteres aleatorios cinco veces. No va a quedar ni rastro de información en el disco:

for n in {1..5}; do dd if=/dev/urandom of=/dev/hda bs=8b conv=notrunc; done

Crea una imagen de un CD

dd if=/dev/cdrom of=/home/imagendeCD.iso

Para montar la imagen del CD

mount -o loop imagedeCD.iso /mnt/home

Copiar el Master Boot Record

dd if=/dev/hda of=mbr count=1 bs=512

Para restaurar el MBR

dd if=mbr of=/dev/hda

Copiar el Volume Boot Sector (VBS)

dd if=/dev/hda of=/home/sector_arranque_hda count=1 bs=512

Para restaurar el VBS

dd if=/home/sector_arranque_hda of=/dev/hda