Miércoles 09 de julio de 2014

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como verificar firmas md5 y sha de archivos ISO

Hay varios tipos de firmas de verificación o "check sums" las mas comunes son MD5, SHA1, SHA256 o SHA512. Y aquí te digo como verificar un archivo iso en Linux.
Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Grupos de trenzas


Si estás desde un smartphone haz click aquí para que se vea mejor.
http://b3ck.blogspot.mx/2014/07/grupos-de-trenzas.html?m=0


Vamos a introducir una noción de Artin que generaliza de cierta forma el grupo simétrico $latex S_n$ de permutaciones, los grupos de trenzas son interesantes porque también tienen una noción geométrica intuitiva que nos va a llevar a su presentación algebraica, el grupo de trenzas de orden $latex n$ será denotado por $latex B_n$ (la $latex B$ es por braid), pero vamos a empezar al revés... daremos una noción intuitiva, un ejemplo y al final daremos la definición formal y veremos que hay usos que se le pueden dar en criptografía.


Lo que vamos a estudiar son configuraciones de "hebras" (hilos) que se ven de esta forma, y ver cómo hacerlas interactuar unas con otras para generar una estructura algebraica que como dijimos anteriormente, generaliza al grupo de permutaciones $latex S_n$ también definido por Emil Artin


Imaginemos que tenemos $latex n=4$ hilos, donde los extremos de cada uno de los 4 hilos están fijos con unos clavos, todas las configuraciones que podamos hacer con 4 hilos que no hagan nudos serán elementos de $latex B_4$ veamos a qué me refiero con esto.

Por ejemplo:

    es diferente a      


Noten la diferencia de las hebras en cuanto a cuál pasa por encima de la otra.



También podemos ver que dibujándolas, las podemos hacer tan complejas como sean, pero al final siempre habrá una manera de dibujarlas de manera simple, es donde entra la abstracción del concepto ya que por ejemplo:


 es lo mismo que


Y no se valen cosas como estos nudos:





Pero ¿por qué le llamamos grupo? , es decir, sabemos que un grupo es una estructura algebraica la cual contiene objetos que pueden interactuar con una operación binaria dando como resultado otros objetos de la misma estructura (cerradura), existe un objeto que es neutro, es decir que deja invariante a todos los elementos bajo la operación binaria y cada uno de los elementos tiene un inverso con esa operación que al usar la operación binaria entre inversos te da como resultado el neutro y es asociativo (como los números enteros bajo la suma)


$latex B_n$ no será abeliano para $latex n>2$ es decir sus elementos no conmutarán, veamos cómo funciona esta operación de $latex B_4$



La manera en la que vamos a sumar dos trenzas $latex \sigma \oplus \tau = \omega \in B_4$ veámosla con un par de ejemplos




 $latex \bigoplus$ $latex =$   
        $latex \sigma$                                                   $latex \tau$                                    $latex \omega$



Observen como se hace la suma, que es "siguiendo" la trayectoria de las hebras en $latex \sigma$ , fijense como se cruzan unas con otras, pero bueno este ejemplo es muy intuitivo, algo un poco más interesante que servirá para que demuestren qué sucede con $latex B_2$ es el siguiente.



   $latex \bigoplus$   $latex =$
        $latex \sigma_1$                                                   $latex \sigma_2$                                    $latex \sigma_3$

Como pueden ver este ejemplo es menos trivial, pueden ver que las dos hebras de arriba se desenrredan

pero las dos de abajo una pasa por encima de otra, y al seguir la trayectoria con $latex \sigma_2$ vemos que pasa por abajo y se hace una trenza en $latex \sigma_3$


Con este ejemplo es fácil ver que $latex B_n$ es infinito con $latex n>1$ ya que las trenzas se pueden enredar cuantas veces quieras, y también se puede ver que $latex B_4$ no es abeliano ya que puedes experimentar un poco con estos ejemplos y verás que te dan elementos diferentes a $latex \omega$ o a $latex \sigma_3$


Pero bueno... ya basta , vamos a representar la infinidad de elementos de $latex B_4$ , para eso es el álgebra no? , no nos da miedo que sean infinitos.


Para poder construir explícitamente la estructura de $latex B_4$ primero tenemos que observar cuáles son las trenzas básicas que nos servirán para representar TODOS los elementos de $latex B_4$ , es decir , de quién son combinaciones.

Consideremos

   Braid s1.png      Braid s2.png      Braid s3.png   
$latex \sigma_1$
$latex \sigma_2$
$latex \sigma_3$



Todas las trenzas en $latex B_4$ pueden escribirse como composición de estas trenzas y sus inversos, o sea que si $latex \sigma\in B_4$ entonces su inverso $latex \sigma^{-1}$ será el elemento tal que $latex \sigma\oplus \sigma^{-1}=0$ donde 0 es la trenza que no tiene cruces, es decir todas las hebras son paralelas.

Para ver que cada trenza $latex \tau \in B_4$ es combinación de $latex \sigma_1,\sigma_2,\sigma_3$ y sus inversos, toma una trenza $latex \tau$ arbitraria y comienza a examinar de izquierda a derecha los cruces comenzando de la hebra de hasta arriba, cada que encuentres un cruce de las hebras $latex i$ y $latex i+1$ escribe $latex \sigma_i$  si la hebra $latex i$ pasa por arriba de $latex i+1$ o $latex \sigma_i^{-1}$ si pasa por abajo, y así vas escribiendo todo como la suma de éstos con $latex \oplus$

cuando termines de examinar cada hebra hasta el clavo final de la parte derecha, habrás construido la combinación de estas $latex \sigma_i$'s , y es intuitivo ya que estos generadores son los cruces fundamentales.

Si observas puedes ver que:

(i) $latex \sigma_1\oplus\sigma_3=\sigma_3\oplus\sigma_1$
(ii) $latex \sigma_1\oplus \sigma_2\oplus \sigma_1= \sigma_2\oplus \sigma_1\oplus \sigma_2$
(ii) $latex \sigma_2\oplus \sigma_3\oplus \sigma_2= \sigma_3\oplus \sigma_2\oplus \sigma_3$


Y si no te percataste es fácil que lo veas con una hoja de papel.

Por lo que ya tenemos cómo es $latex B_4$ pero estas identidades se pueden extender en general para $latex B_n$

por lo que:

$latex B_n :=$ < $latex \sigma_1, \sigma_2,...,\sigma_n \mid \sigma_i \oplus \sigma_{i+1}\oplus \sigma_i = \sigma_{i+1}\oplus \sigma_i \oplus \sigma_{i+1}$  con $latex 1\leq i \leq n-2$ , $latex \sigma_i\oplus \sigma_j = \sigma_j \oplus \sigma_i$ con $latex \mid i-j \mid \geq 2$ >


Este grupo ha sido estudiado para criptografía , por David Garber http://arxiv.org/pdf/0711.3941.pdf
Pero desafortunadamente fue roto hace unos años, pero la teoría no deja de ser interesante, ya que se le puede asociar el grupo fundamental (Topología algebraica) de ciertos espacios, y encontrar de quién es el grupo fundamental es lo interesante.

También es interesante investigar cómo $latex B_3$ está relacionado al grupo especial lineal $latex SL(2,\mathbb{Z})$


Y como pendiente queda el grupo de trenzas con 2 hebras $latex B_2$ , pero pues... éste está generado por 2 elementos que son uno inverso de otro, es decir por 1 elemento... que es la trenza simple con dos hebras.... por lo que sólo se pueden generar trenzas con 2,3,4,... vueltas, pero también las puedes deshacer con su inversa , es decir

$latex B_2 \cong$ < $latex \mathbb{Z},+$> = < $latex1,-1$ >


Este es el único grupo de trenzas no trivial que es abeliano y como pueden ver no tiene mucho chiste.


Espero que les haya gustado, las imágenes las saqué de wikipedia y del artículo de David Garber antes mencionado.


Eduardo Ruíz Duarte
Twitter: @toorandom










Martes 08 de julio de 2014

Planeta Laguna: Ya soy inapropiado

Cien pesos

Es el máximo que se podía recargar una tarjeta del metro, cuando se anunció la medida “Los usuarios no podrán tener más de 120 pesos en sus plásticos para evitar robos” [1] me pareció ridículo, de hecho cuando leí la justificación de no ser porque lo uso bastante podría haberme parecido divertido y de esas estupideces que se hacen sin pensar y que a más de un funcionario se les ocurre muy seguido, lo que no note de la nota es que es totalmente cierto es para evitar robos al SCT no al usuario como viene en el discurso.

Hoy que me toco recargar y quise poner cien pesos me recordaron que el saldo máximo es de 120 pesos y la recarga máxima de 99(no recuerdo el dato, pero lo reviso ASAP), en un hilo de FB [2][3], estuvimos despotricando de por qué esta medida, pero de alguna información a la que no le han hecho mucho ruido ahora me queda claro porque esta medida tan absurda [4], se están[ban] vendiendo tarjetas a 150 pesos con 300 pesos de crédito… un buen negocio sobre todo ahora que el metro cuesta 5 y el metrobus 6 pesos, el límite estaba en 120 de recarga en metrobus y 100 en metro, es decir 20 viajes.

Entonces que no es porque estén preocupados por nuestra seguridad, más bien les están dando baje con un equipo, que pensando lo peor no es sencillo actualizar y por eso más bien la medida de corte y no la de seguridad informática, triste pero probable sobre todo en nuestro país, como dato interesante cuando se implementó lo de la tarjeta el mínimo era 2 pesos y el máximo de saldo 620, cuando el pasaje del metro costaba 2 pesos [5].

[1] http://www.cnnexpansion.com/mi-dinero/2014/06/04/metrobus-limita-saldo-en-tarjetas
[2] https://www.facebook.com/vicm3/posts/10152190242921634
[3] https://www.facebook.com/vicm3/posts/10152221304166634
[4] http://mexico.quadratin.com.mx/Detienen-defraudadores-del-Metro-y-del-Metrobus/
[5] http://www.metro.df.gob.mx/servicios/108tarjrecargable.html

Lunes 07 de julio de 2014

Xenode Systems: LiveStream de tu webcam con AngularJS

I’am Back

De vuelta a mi espacio, no lleva mejor nombre que ese El  Espacio que Necesitaba!!

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Centos 7 Liberado y Disponible para Descargar

Centos 7 el cual ha sido anunciado hoy mismo y que ya se encuentra disponible para descargar en los mirrors al rededor del mundo.
Alcance Libre: Ya esta aquí CentOS 7
Alcance Libre: Disponible CentOS 7 (final).
Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

¿Porque en Linux Nunca Hay Virus?

“Los virus son la pesadilla de los administradores, cada mes aparecen mas de 30 mil y es un hecho que las actualizaciones mensuales de los antivirus no los incluyen a todos. Para los usuarios no expertos también son una molestia, los antivirus pueden hacer que una computadora pierda hasta el 30% de su veocidad. Cada año cientos de millones de dólares se pierden en horas/hombre (y horas/mujer) por los virus en todo el mundo.

Para que un programa sea considerado como un virus debe cumplir dos requisitos:

1) Que se copie a sí mismo
2) Que se  propague de manera “natural” entre los sistemas

ANDRES MALPARICULILAMBIDO -Los //gusanos// son programas que aprovechan un //exploit// (error en el código de un programa) para infiltrarse en un sistema. Los //troyanos// son gusanos que abren un puerto trasero para permitir que una persona ajena entre al sistema. La diferencia principal entre los virus y los gusanos radica en que los virus se propagan sólos por la red, mientras que alguien (un hacker) debe realizar acciones especificas para implantar un gusano. Por cada máquina atacada por un gusano existen miles (quizás millones) de equipos infectados por virus. En GNU/Linux hay gusanos y troyanos, pero no virus.

Con frecuencia he escuchado la opinion de “expertos” que argumentan que en Linux no hay virus porque hay pocos equipos con este sistema operativo, pero que en cuanto se vuelva más popular los virus aparecerán. Obviando el hecho de que Unix/Linux poseen el 40% del mercado de servidores, esta opinión revela las pobres expectativas que Microsoft le ha impuesto al usuario común, pues según éste, es normal que todos los sistemas operativos sean afectados por los virus. Pero en realidad, solo Windows padece de los virus. No todo es culpa de Microsoft, no ha sido fácil llevar a un sistema operativo tan deficiente como Windows95 al exigente mundo de los servidores: en busca de un buen desempeño, se ha debido de pagar un precio en la seguridad de Windows XP y Windows 2003, quizás un precio demasiado alto.

El hecho, sin embargo, es que en Linux no hay ni habrá virus, (la verdad es que en ningún sistema operativo deberían de existir los virus), la razón radica en la gestión de memoria y la asignacion de permisos por omisión, los cuales hacen imposible que un programa no autorizado se ejecute y propague. Varias consultoras reportan que los servidores mas atacados en Internet son los basados en Linux, y la gran mayoria sale victorioso de la prueba. Sin embargo, esto no significa que este sistema operativo sea invulnerable: los programas y el mismo kernel poseen fallas que al ser explotadas permiten que, en casos extremos, un extraño tome control del equipo. La mejor manera de prepararse para un ataque es siendo uno mismo un hacker, escaneando los puerto de nuestro server, inyectando SQL en nuestras paginas web y tratando de ejecutar codigo malicioso. Lo más importante es frecuentar sitios que informen sobre fallos de seguridad, como http://www.linuxtoday.com/ linuxtoday.com y buscar actualizaciones para nuestro sistema cada siete dias. Existen muchas soluciones que automatizan este proceso.”

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Descargando y configurando Cubo de escritorio Compiz en Ubuntu

1. ¿Qué es Compiz?
2. Comprobando Aceleración Gráfica
3. Instalando Compiz Fusion
4. Creando Area de trabajo
5. Creando cubo de escritorio
6. Agregando efectos al cubo
7. Configuración del Cubo – Efecto final


1 ¿Qué es Compiz?

Es un gestor de ventanas capas de utilizar aceleración OpenGL o 3D, capas de crear increíbles efectos.


2. Comprobando Aceleración Gráfica

Para poder utilizar Compiz, necesitamos una tarjeta que nos permita utilizar aceleración OpenGL o 3D. Para eso, vamos a hacer lo siguiente.

Descargamos e instalamos:

sudo apt-­get install mesa-­utils

Una vez terminada la instalación ejecutamos:

glxinfo | grep direct

Y si tenemos la aceleración, nos devolverá:

direct rendering: Yes
GL_EXT_Cg_shader, GL_EXT_depth_bounds_test, GL_EXT_direct_state_access,

 


3. Instalando Compiz Fusion

Instalando Compiz desde sus repositorios:

sudo add-­apt­-repository ppa:compiz 
sudo apt-get update && sudo apt-get upgrade

Si la instalación fue correcta, deberíamos tener esto::

Administrador avanzado de funciones Compiz

Compizconfig-settings-manager

Plugins extra (Ventanas 3D, capas del cubo, etc)

Compiz-fusion-plugins-extra

Ambos pueden buscarlos también, desde el Centro de Software de Ubuntu.


4. Creando área de trabajo.

Primero, debemos configurar los 4 escritorios o zonas de trabajo.

Para eso click derecho en cualquiera de los cuadrados y damos en “Preferencias”.

Dejamos la configuración como  se muestra en esta imagen, y damos en cerrar.

Una vez hecho esto, nos debería haber quedado como en la imagen anteriormente mostrada.


5. Activando el Cubo de escritorio.

Nos dirigimos a:

Sistema > Preferencias > Administrador de Opciones ComizConfig

Nos dirigimos a la sección de Escritorio y marcamos las opciones “Cubo de Escritorio” y “Girar Cubo”.

Una vez hecho esto, tendremos nuestro cubo. Pero no será muy bonito.

Para desplazar el cubo:

CONTROL + ALT + MOVER MOUSE

Para desplegar los escritorios:

CONTROL + ALT + FLECHA EN DIRECCION ABAJO

 


6. Agregando efectos al Cubo

En el apartado Efectos, marcamos las opciones “Reflejo y deformación del Cubo” y “Ventanas 3D”. Ahora, analicemos un poco y modifiquemos algunas cosas.

Reflejo y deformación del Cubo:

Es la forma que tendrá el cubo, básicamente. Puede ser un cilindro, una esfera o un cubo. Hacemos click en dicha opción, y nos dirigimos a la pestaña “Capas del Cubo” – Sección “Apariencia”

Una vez ahí, podremos dar color a la parte inferior y superior de nuestro cuerpo, o poner una imagen.

En la pestaña de “Reflejos” podemos seleccionar como luce nuestro cuerpo, para eso vamos a “Modo de reflejo” y seleccionamos la que más nos guste.

En la pestaña de “Deformación” podemos configurar la forma de nuestro cuerpo, como les conté antes. En la opción “Deformación” elegimos la forma que más nos guste.

  • Ninguna (Cubo)
  • Cilindro
  • Esfera

Ventanas 3D:

Con esta opción, cuando usemos la visión de Cubo, podremos ver que las ventanas sobresalen del cuerpo, de la misma forma en la que se muestran en la primer imagen de este manual.

Para configurar esta distancia, vamos a la pestaña “Profundidad de ventana” y modificamos la misma opción.


7. Configuración del Cubo – Efecto final

En la sección de Escritorio.

Cubo de Escritorio:

Nos dirigimos a la pestaña de “Apariencia” y una vez ahí, a la sección de “Cúpula”. Esta opción nos permite modificar el fondo que veremos cuando llamemos al cubo. Podemos usar el degradado de 2 colores, o podemos utilizar una imagen desde nuestra computadora.

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Pentoo (Distro para Pentest)

Pentoo, es una distro de pentest basada en Gentoo

Administrador de archivos, Ayuda y Componentes de la red
Para el final dejamos la categoría “Pentoo”, donde se encuentran las herramientas de Penetration Test propiamente dichas. Muchas de estas herramientas son de línea de comando. Veamos en que consiste cada una:
Analyser:En esta categoría tenemos herramientas de análisis de tráfico de red y varios tipos de sniffers, es decir, software que “olfatea” (del término inglés sniff) distintos paquetes de red. El sniffer por excelencia es Ethereal.

Bluetooth: Aquí podemos ver distintas herramientas de auditoria, análisis y administración de este protocolo. Particularmente BlueSniff es un sniffer de paquetes bluetooth.
Cracker / Bruter: En esta categoría principalmente hay una variedad de herramientas para vulnerar passwords, tanto de sistemas windows como GNU/linux. En caso de querer realizar ataques por diccionario, también tenemos disponible una lista de palabras (en inglés). Los mas conocidos son el mítico “John the Ripper” e “Hydra”.

Fingerprinter: Aquí tenemos una amplia variedad de distintas herramientas para distintos tipos de fingerprinting, por ejemplo smtpmap para distintos tipos de protocolos de correo electrónico, Blueprint para Bluetooth, Siphon para Sistemas Operativos y muchos más.

Forging / Spoofing: Herramientas varias para ARP spoofing, DNS spoofing, trace, etc.

Misc: Acá tenemos herramientas que no entran en otra categoría, por ejemplo Firewall Builder es una herramienta para configurar y administrar Firewalls, MAC Changer spoofea direcciones MAC.

Pen test /MITM: En esta categoría tenemos herramientas particulares de penetration testing y otras que aplican la técnica MITM (Man In The Middle) inventada por Kevin Mitnick. Por ejemplo Cisco-Torch es un escáner, bruterforcer y testeador de vulnerabilidades para la mayorí¬a de los dispositivos CISCO. Por otro lado Yersinia es una suite para analizar vulnerabilidades en distintos protocolos de red.

Proxy: Aquí disponemos de aplicaciones proxy, por ejemplo Burpproxy que captura todo el tráfico del web browser y permite modificar los paquetes, o bien Paros, una utilidad que corre totalmente en java y permite interceptar tráfico http y https para luego modificarlo y testear distintas aplicaciones web.

Scanner: En esta categoría encontramos distintos tipos de escáners, tanto de puertos como por ejemplo nmap o bien de vulnerabilidades como nessus. También tenemos la utilidad Firewalk que no permite evaluar a grandes rasgos las reglas de un firewall para ver si están bien configuradas.

Wireless: Aquí podemos encontrar todo tipo de herramientas para el protocolo 802.11, tanto para sniffear paquetes, vulnerar el protocolo WEP, detectar falsos access points, etc.

Docs: En esta carpeta tenemos muchísima documentación sobre las distintas herramientas que componen las categorías mencionadas anteriormente.

Fingerprints DB: Aquí disponemos de bases de datos para las distintas herramientas que realizaban diferentes tipos de fingerprints (Sistema Operativo, dispositivos, etc)

Network Tools
Network tools: Una utilidad que integra diferentes tipos de herramientas simples que son muy útiles al momento de analizar el entorno donde se está trabajando. Por ejemplo whois, traceroute, escaneo de puertos, etc.

Este fue un pantallazo sobre las distintas categorías de la distribución Pentoo. En futuras ediciones vamos a ir profundizando en las herramientas más comunes de cada categoría, conociendo el funcionamiento de las mismas y aprendiendo como utilizarlas.

Acerca del autor:
Héctor Jara es uno de los responsables de Elitech SRL, empresa que ofrece soluciones a pequeñas y medianas empresas a nivel tecnológico, tanto en consultoria e implementaciones como capacitacion, fundamentalmente en lo referido a Seguridad informática y Plataformas GNU/Linux.

Acorde a esto, Elitech ofrece a través de prestigiosos centros de capacitación, cursos con los contenidos de la certificación LPIC que ha tomado gran importancia en los últimos tiempos, debido a que logra acreditar conocimientos sobre plataformas GNU/Linux independientemente de la distribución y certificaciones privadas.

Pagina Oficial: http://www.pentoo.ch/

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

2014-07-07 11:23:58 UPDATED: (M7.1) CHIAPAS, MEXICO 14.8 -92.4 (8106c)

Globe with Earthquake Location

M7.1 - CHIAPAS, MEXICO

Preliminary Earthquake Report
Magnitude 7.1
Date-Time
  • 7 Jul 2014 11:23:58 UTC
  • 7 Jul 2014 06:23:59 near epicenter
  • 7 Jul 2014 05:23:58 standard time in your timezone
Location 14.782N 92.371W
Depth 92 km
Distances
  • 8 km (4 mi) NE of Puerto Madero, Mexico
  • 16 km (9 mi) SW of Tapachula, Mexico
  • 27 km (16 mi) WNW of Ciudad Tecun Uman, Guatemala
  • 30 km (18 mi) NNW of Suchiate, Mexico
  • 200 km (124 mi) W of Guatemala City, Guatemala
Location Uncertainty Horizontal: 0.0 km; Vertical 5.2 km
Parameters Nph = 128; Dmin = 78.6 km; Rmss = 1.58 seconds; Gp = 41°
Version = 1
Event ID us c000rr6a ***This event supersedes event AT00n8caby.
For updates, maps, and technical information, see: Event Page or USGS Earthquake Hazards Program
National Earthquake Information Center
U.S. Geological Survey
http://earthquake.usgs.gov/regional/neic/


Disclaimer

--
Mis resultados: Intensidad II

Domingo 06 de julio de 2014

Alcance Libre: La realidad del desarrollo

Viernes 04 de julio de 2014

Andrés Vargas

Andrés Vargas
zodman

example how to debug a configure file

example how to debug a configure file:

Miércoles 02 de julio de 2014

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como Instalar Copy en Ubuntu 14.04 y Linux Mint 17

¿Por qué uso Copy en vez de otros servicios como drop box o alguno otro de moda? bueno tengo 2 razones de peso: primero, Copy me permite tener una copia sincronizada y desatendida de mis archivos en la nube, si, algo así como mi respaldo de todos mis archivos en /home y que se actualiza […]
Planeta Laguna: Addons y binarios para IPCop 1.4.x

Martes 01 de julio de 2014

Phdcomics the movie

Well the second part if you haven’t watch the first movie you still have three days to watch it free [1], don’t really remember why haven’t post about but in case you don’t know this interesting webcomic now it’s the time to waste know it at http://phdcomics.com/ [2].

Also there is a kickstater [3] campaign to make a sequel from the first movie!phd052114s phd060614s phd062514s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

If you are a Phd student, graduate, undergraduate or simply want to remember that years this comic will touch you profoundly and the movie it’s really good. I think wrote something last year about the first movie well turns out I wrote about the soundtrack but don’t about the movie itself.

[1] http://www.phdmovie.com/
[
2] http://phdcomics.com/comics.php
[
3] https://www.kickstarter.com/projects/1831998591/the-phd-movie-2-still-in-grad-school

Lunes 30 de junio de 2014

Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

FFMPEG Convertidor en formatos de audio y vídeo

Convertir formatos de video con ffmpeg
Para hacer esto tienes que tener instalado ffmpeg, si no lo tienes, lo puedes instalar con el comando:

sudo apt-get install ffmpeg

Una de las opciones para hacer las conversiones es con la Interfaz Gráfica, que podemos instalar con el comando:

sudo apt-get install winff

Para poder trabajar con los formatos de video .ogg y .ogv instalamos mencoder con el comando:

sudo apt-get install mencoder

Para poder trabajar con CODECS PRIVATIVOS o con problemas de licencia instalar el paquete Ubuntu Restricted Extras (para mp3...) con:

sudo apt-get install ubuntu-restricted-extras

Si nos encontramos problemas para convertir a .avi es que nos falta el paquete libavcodec-unstripped-52. Lo instalamos ejecutando en una terminal el siguiente comando:

sudo apt-get install libavcodec-unstripped-52

La forma de convertir videos es la siguiente:

ffmpeg -i video_a_convertir.avi video_convertido.mpg

Las opciones:
-i → Lo comentado. La orden básica para iniciar la conversión de archivos.
-b → El bitrate del vídeo resultante tras la conversión. El bitrate es uno de los determinantes de la calidad de imagen del vídeo resultante. Esto también afectará al peso total del archivo tras la conversión; algo a tener en cuenta si deseamos grabar el vídeo en formato físico (dvd’s, cd’s, etc.) o no contamos con memoria suficiente en el dispositivo externo de memoria.
-vcodec → la codificación que utilizaremos para el vídeo resultante. Como véis, en este caso es mpeg4.
-s → las dimensiones del vídeo. En el caso de ejemplo, 640×360.
-acodec → códec elegido para el audio.
-ac → canales de audio establecidos. Si no los establecemos, por defecto se determina un canal.
-ab → el bitrate del audio.
Obviamente, el proceso de conversión consumirá más o menos tiempo en función de la portencia de vuestro equipo, de las variables de ejecución de ffmpeg y del archivo a convertir.

EJEMPLOS:


De .mov -> .avi


ffmpeg -i video.mov -sameq -vcodec msmpeg4v2 -acodec pcm_u8 video.avi

De .avi -> .mp4

ffmpeg -i video.avi -b 750000 -vcodec mpeg4 -s 640×360 -acodec libfaac -ac 2 -ab 96000 video.mp4

De .flv -> .avi

ffmpeg -i video1.flv video2.avi

Se puede controlar los ratios de compresión, resolución... (peso y calidad), por ejemplo:

ffmpeg -i video.wmv -ab 56 -ar 22050 -r 15 -s 320×240 video.flv

Formatos de audio
ffmpeg -i audio.wma -f mp3 -ab 192 audio.mp3

ffmpeg -i audio.mp3 -acodec amr_nb -ar 8000 -ac 1 -ab 32 audio.amr

ffmpeg -i audio.wav -acodec mp3 -ab 32 -ar 44100 audio.mp3

ffmpeg -i video.mpg -f mp3 audio.mp3

Fromatos de video
ffmpeg -i video.avi -acodec mp3 -ar 11025 video.flv

ffmpeg -i video.avi -target pal-vcd video.mpg

ffmpeg -i video.mpg -vcodec flv -y video.flv

ffmpeg -i video.flv video.mpeg

ffmpeg -i video.flv video.avi

Domingo 29 de junio de 2014

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Teorema de Riemann-Roch y divisores en criptografía (Parte 1: campos de funciones y gavillas sobre variedades)

En criptografía muchos han visto que se estudian las curvas elípticas y menos frecuentemente las curvas hiperelípticas, algunos recordarán la estructura de grupo que se le da a una curva elíptica $latex C$ con la usual regla de intersección de una recta con la curva haciendo uso abusivo del teorema de Bézout para fundamentar la estructura de grupo que hay en sus puntos, que más formalmente, es la estructura de grupo que hay en las clases de divisores formados por las sumas formales de ideales máximos de todos los subanillos del campo de funciones de $latex \mathbb{K}(C)$, este grupo es el grupo de Picard de orden 0 de la curva $latex C$ que es:

 $latex Pic^0(C) = Div^0(C)/Prin(C) \cong \mathbb{J}(C)$.

Esta manera de ver las cosas NO es para complicar lo ya existente, sino es con propósitos de poder exprimir más la teoría que lo respalda para poder investigarlo mejor y generalizarlo a otras curvas no elípticas.

La estructura de grupo de manera inocente o usual se puede ver en muchos textos pobres en matemáticas pero tal vez ricos en aplicaciones criptográficas como esto:



El propósito de este post será el poder resumirte la teoría que hay detrás.


Comencemos con unas definiciones, voy a suponer que quien me lee está familiarizado con la topología de Zariski la cual está definida por los conjuntos algebraicos como cerrados, de hecho estas definiciones son las interesantes para la topología de Zariski, y con esto pueden demostrar fácilmente las propiedades de espacio topológico.

Definición (ceros):
Sea $latex A:= \mathbb{K}[x_1,...,x_n]$ el anillo de polinomios en $latex n$ variables sobre el campo algebraicamente cerrado $latex \mathbb{K}$ y $latex J \subset \mathbb{K}[x_1,...,x_n]$ un ideal, entonces definimos el conjunto de ceros del ideal $latex J$ como:

$latex V(J):=\lbrace P\in \mathbb{A}^{n}_{\mathbb{K}} \mid f(P)=0$     $latex \forall f\in J\rbrace$


Definición (variedad afín): Un subconjunto $latex X\subset \mathbb{A}^n_{\mathbb{K}}$ es un conjunto algebraico (variedad afín) en el espacio afín $latex \mathbb{A}^n_{\mathbb{K}}$ si existe un $latex T\subset \mathbb{K}[x_1,...,x_n]$ tal que:

$latex X=V(T)$

Decimos que $latex X$ es un cerrado de Zariski, en la topología dada a  $latex \mathbb{A}^n_{\mathbb{K}}$.

Veámos primero lo que es el anillo de coordenadas de una variedad.

Definición (función polinomial en la variedad V): Una función polinomial es un mapeo $latex f:V \rightarrow \mathbb{K}$ tal que existe un $latex F\in \mathbb{K}[x_1,...,x_n]$ con $latex f(P)=F(P)$  $latex \forall P\in V$

Este polinomio $latex F$ no está únicamente determinado por los valores que toma en $latex V$ o sea si tenemos $latex F,G\in \mathbb{K}[x_1,...,x_n]$:


$latex F\mid_{V}=G\mid_{V} \Leftrightarrow (F-G)\mid_{V}=0 \Leftrightarrow F-G\in I(V)$

Donde:

$latex I(V):=\lbrace f\in \mathbb{K}[x_1,...,x_n] \mid f(P)=0$    $latex \forall P\in V\rbrace$



Esta definición de función polinomial y su relación de igualdad con otros polinomios, huele a una relación de equivalencia, por lo que vamos a suponer que lo es y se deja a quien lee para que lo demuestre y tenemos que:

Denotaremos ahora a $latex V$ como el conjunto algebraico $latex V(I)$ donde $latex I$ es ideal de $latex \mathbb{K}[x_1,...,x_n]$

Definición (anillo de coordenadas de una variedad): Un anillo de coordenadas de una variedad $latex V$ es:

$latex \mathbb{K}[V]:=\mathbb{K}[x_1,...,x_n]/I(V)$

Este anillo sabemos que es un dominio entero si $latex I(V)$ es un ideal primo, y esto naturalmente sucede si $latex V$ es irreducible , es decir no es union de otros cerrados de zariski


De lo anterior sobre funciones polinomiales y la última definición se puede demostrar que:

$latex K[V]=\lbrace f \mid f:V\rightarrow \mathbb{K}$ es una función polinomial $latex \rbrace$

Cabe notar que se le llama anillo de coordenadas porque las funciones que te dan la i-ésima coordenada de los elementos de $latex V$, $latex x_i$ son las generadoras de $latex \mathbb{K}[V]$

Es fácil ver que $latex \mathbb{K}[ \mathbb{A}^n_{\mathbb{K}}]=\mathbb{K}[x_1,...,x_n]$ y que el anillo $latex \mathbb{K}[V]$ juega el papel para $latex V$ como $latex \mathbb{K}[x_1,...,x_n]$ para $latex \mathbb{A}^n_{\mathbb{K}}$

Observaciónes sobre lo anterior con respecto a la topología de Zariski en $latex \mathbb{A}^n_{\mathbb{K}}$.


  • Los ideales primos de $latex \mathbb{K}[V]$ están en correspondencia 1:1 con irreducibles $latex W\subset V$
  • Los ideales máximos de  $latex \mathbb{K}[V]$ están en correspondencia 1:1 con los puntos de $latex V$
  • Los ideales radicales de $latex \mathbb{K}[V]$ están en correspondencia 1:1 con los cerrados $latex W\subset V$

Definición (campo de funciones de V): El campo de funciones de $latex V$ es el campo de fracciones de $latex \mathbb{K}[V]$ y es denotado por $latex \mathbb{K}(V)$, las $latex f\in \mathbb{K}(V)$ se llaman funciones racionales sobre $latex V$

Definición (función regular en P): Una función $latex f\in \mathbb{K}(V)$ y $latex P\in V$ se dice que es regular en $latex P$ si $latex f=\frac{g}{h}$ con $latex h(P)\neq 0$, y definimos:

$latex dom(f):=\lbrace P\in V \mid f$ es regular en $latex P\rbrace$

Proposición: El conjunto:

$latex V_f:=\lbrace P\in V\mid f(P)\neq 0\rbrace$

es un abierto de $latex V$


Teorema: 

  • $latex dom(f)$ es abierto y denso en $latex V$
  • $latex dom(f)=V\Leftrightarrow f\in \mathbb{K}[V]$
  • $latex V_g\subset dom(f) \Leftrightarrow f\in \mathbb{K}[V][1/g]$

Ahora, entraremos a un concepto central, para poder analizar una variedad localmente... para esto sabemos que un anillo local sólo tienen un ideal máximo, y tenemos que la siguiente definición

Definición (anillo de funciones regulares): El anillo de funciones regulares de $latex V$ localizado en el punto $latex P\in V$ es:

$latex O_{V,P}:=\lbrace f\in \mathbb{K}(V)\mid f$ es regular en $latex P\rbrace$

Es fácil demostrar que esto es en efecto un subanillo de $latex  \mathbb{K}(V)$ y que su único ideal máximo no deberá tener unidades por lo que su ideal máximo es:

$latex m_{P}:=\lbrace f/g \in \mathbb{K}(V)\mid f(P)=0, g(P)\neq 0 \rbrace$

Ahora vamos a la últma parte de este blog donde discutiremos la estructura de gavilla de una variedad

Estructura de gavilla de una variedad

Tenemos que el anillo $latex O_{V,P}$ es local y es un subanillo de $latex \mathbb{K}(V)$ y su ideal máximo es $latex m_{P}$, es fácil relacionar a $latex O_{V,P}$ con $latex \mathbb{K}[V]$ ya que con localización puedes demostrar que:

$latex \hat{m}_P=\lbrace f\in \mathbb{K}[V]\mid f(P)=0\rbrace=I(\lbrace P \rbrace)+I(V)\subset \mathbb{K}[V]$

Es máximo y:

$latex O_{V,P}=\mathbb{K}[V]_{\hat{m}_P}$


Es decir que $latex O_{V,P}$ es la localización del anillo de coordenadas de $latex V$ en el ideal máximo $latex \hat{m}_P$

Ahora vamos a definir el concepto final:

Definición-Teorema (estructura de gavilla en $latex O_{V}(U)$, germen y fibra ): Para todo abierto $latex U \subset V$ tenemos:

$latex O(U):=O_{V}(U):=\lbrace f\in \mathbb{K}(V) \mid f$ es regular en $latex U \rbrace$

Es una $latex \mathbb{K}-$álgebra con $latex O_{V}(\emptyset):=\lbrace 0 \rbrace$

Todos los $latex O_{V}(U)$ con $latex U\subset V$ forman una gavilla $latex O_V$ bajo la restricción de homomorfismos usual y el anillo $latex O_{V,P}$ es una fibra de la gavilla $latex O_V$  y los elementos $latex f\in O_{V,P}$ se les llama gérmenes de funciones y:

$latex O(V)=\mathbb{K}[V]$


La teoría de gavillas da una estructura rica a una variedad, en este caso , puede ser el de una curva elíptica o hiperelíptica

Saludos

Eduardo Ruiz Duarte (beck)
Twitter: @toorandom

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Hice programa para simular evolución de organismos libre, licencia MIT, simulacion genetica con bases nitrogenadas y estructura similar a una celula


Hice un algoritmo evolutivo que la simple lectura de su código posiblemente te hará entender los fundamentos de la teoría de darwin y su selección natural, así como los fundamentos de reproducción celular y herencia es un api pero trae un demo, uso bases nitrogenadas reales complementarias y células con una estructura similar a un organismo (con respecto a su núcleo y material genético).

La reproducción se da entre los más aptos random en el universo de población con distribución uniforme bajo el producto de sus aptitudes con respecto a un gen elite.

La manera de que estos se juntan es si son más aptos, esto es para simular el elitismo biologico, podrian reproducirse otros no aptos con cierta probabilidad .

Sus hijos comparten aproximadamente la mitad de los genes de sus padres.

Las poblaciones envejecen en cada generación, dañando el ADN en cierto porcentaje de los menos aptos.


Corranlo... trae un demo y me dicen que opinan... segun yo quedo muy didactico.

Y se puede adaptar para usar genomas reales y trazar evolucion no solo de 1 gen sino de varios a la vez.

En mi programa una celula humana ocuparía aproximadamente 9gb de memoria (46 cromosomas, 30 mil genes en el ADN con 1000 pares de bases nitrogenadas)

Por lo que en el demo uso un organismo con 4 cromosomas pero pueden bajar los genomas de ECOLI que ocupan como 6 mb en mi programa y generar poblaciones para ver como evolucionan... aqui tengo uno.

http://math.co.ro/ecoli.dna

Gracias Ximena Tochtli Bouchain Pedrón
por resolverme dudas de genética y reproducción celular, ya que con sus tips y consejos esto funciona y es más realista :)

Esta aquí el leeme y el código
http://b3ck.blogspot.mx
Salu2

Eduardo Ruiz (beck)


Aquí dejo el LEEME.TXT

bevolucion-0.1.tar.gz

Copyright Nov-2013 Eduardo Ruiz Duarte (rduarte@ciencias.unam.mx)


Programa para calcular las generaciones requeridas para alcanzar la estructura de un gen definida
utilizando la estructura aproximada biologica de un organismo.

Si quieres aprender un poco de genetica basica fundamental, sigue leyendo y corre este programa

Si quieres aprender mas de la parte biologica, quien me asesoro fue Ximena Tochtli Bouchain, escribele a rhapanus@gmail.com

Si quieres saber como funciona el API , lee los prototipos y sus comentarios al final del header bevolucion.h

Si estas desesperado y te da flojera leer esto , solo compila y corre el programa que ya trae un DEMO

./compila
./bevolucion


en el ejemplo se intenta evolucionar a un gen_elite aleatorio.



COMO FUNCIONA?

Se puede definir.
numero de organismos
numero de cromosomas
numero de genes
numero de pares de bases nitrogenadas por gen
coeficiente de mutacion (cuantos pares de bases se van a modificar aleatoriamente en todos los genes... podrian no modificarse algunos genes por probabilidad)
cromosoma y gen de referencia para analizar su evolucion

QUE HAY EN EL DEMO? [ main() ]

En el main() se implementa:

 INICIO_ALGORITMO {

1. El programa genera una poblacion con genes aleatorios y un gen_elite para comparar la evolucion, cada organismo contiene en su 'ser'
  su coeficiente de adaptacion con respecto al gen_elite

  LOOP() {
2. Se organizan jerarquicamente en funcion de su adaptacion al gen_elite

3. Usando la distribucion aleatoria uniforme escogemos aleatoriamente 2 padres aptos para reproducirse (de acuerdo a su coeficiente de adaptacion)
  podrian no ser los mas aptos, pero la funcion esta probada para arrojar mayormente aptos al azar.
  para simular elitismo usual entre organismos.

4. Se reproducen y generan un hijo con cierta probabilidad de mutacion y se le integra en su 'ser' su coeficiente de adaptacion
  el ADN de el hijo contiene genes con 50% de probabilidad del padre y 50% de probabilidad de la madre

5. Se integra a la poblacion si este hijo es mas apto que el menos apto

6. Muere el menos apto

7. Envejece 1/3 de la poblacion menos adaptada de manera que se dania el ADN,  el danio es una mutacion
  de solo 1 par de bases nitrogenadas en el gen de referencia.
  Esto esta fundamentado en que el envejecimiento consiste en la creacion de proteinas menos adecuadas
  para el ciclo de vida de las celulas debido a que el ADN contiene ya informacion erronea
  (el ADN contiene las 'instrucciones' del ciclo de vida de una celula, creacion de proteinas)
  Por ejemplo los rayos UV danian el gen XPD humano que llevan a defectos en la reparacion del ADN y transcripccion.
  las personas con este danio tienen el sindrome de Cockayne, por eso aqui modelamos con 1/3 de los menos
  adaptados la mutacion en el gen de referencia.

 }
}
FIN_ALGORITMO


Cada organismo (celula) esta organizada asi:

typedef struct celula_s
{
  cromosoma cromosomas[MAX_CROMOSOMAS];
  int16_t num_cromo;
  int16_t num_genes;
  int32_t aptitud_gen_ref;
  uint64_t identidad;
  uint32_t padre, madre;
  int32_t num_hijos;
  int32_t hijos[MAX_HIJOS];
 } celula;

donde su 'identidad' esta compuesta de 64 bits
{20 bits info de padre}{20 bits info de madre}{4 bits pseudo-random}{20 bits (Padre XOR Madre) + num_hijos_padre+num_hijos_madre}


Las variables globales gGen_ref y gCromo_ref son para encontrar el gen de referencia para evolucionar, esta definida en main() y se genera aleatoriamente ej. (ATCGGCTA)


Todas las subestructuras estan organizadas jerarquicamente con los componentes biologicos del organismo simple (solo nucleo)


CROMOSOMA:
Un cromosoma tiene el ADN enrollado y tiene asociadas proteinas, especialmente histonas, aqui las podemos relacionar con el mismo indice
pero la estructura de proteinas que el cuerpo usa para unir el ADN como cromatina no se usa aun en esta implementacion aun (ni otras proteinas)

typedef struct cromosoma_s
{
adn molecula_adn;
uint64_t proteinas[MAX_GENES * MAX_NUC_GEN];
} cromosoma;

ADN:
El ADN esta seccionado por genes
typedef struct adn_s
{
gen genes[MAX_GENES];
int8_t recesivo;
} adn;

GEN:
Un Gen esta compuesto de bases nitrogenadas, y guardaremos su aptitud y tamanio de pares de bases nitrogenadas en format AT,TA,GC,CG,AU,UA
que son los pares complementarios de pirimidinas y purinas en el ADN de un organismo y en ARN (U:=Uracilo que sustituye T=Timina)

typedef struct gen_s
{
  uint8_t par_bases[MAX_NUC_GEN];
  uint16_t tamano;
  uint32_t aptitud;
} gen;


PAR DE BASES NITROGENADAS

#define Adenina     0x08
#define Citosina    0x04
#define Guanina     0x02
#define Timina      0x01
#define Uracilo     0x0f
 ADN pares complementarios
#define AT (int8_t)(Adenina<<4 imina="" p="">#define TA (int8_t)(Timina<<4 denina="" p="">#define GC (int8_t)(Guanina<<4 itosina="" p="">#define CG (int8_t)(Citosina<<4 p="" uanina=""> ARN pares complementarios
#define AU (int8_t)(Adenina<<4 p="" racilo="">#define UA (int8_t)(Uracilo<<4 denina="" p="">

Sábado 28 de junio de 2014

Milton Mazzarri

Milton Mazzarri
milmazz

Grunt: The Javascript Task Manager

Grunt

When you play the Web Developer role, sometimes you may have to endure some repetitive tasks like minification, unit testing, compilation, linting, beautify or unpack Javascript code and so on. To solve this problems, and in the meantime, try to keep your mental health in a good shape, you desperately need to find a way to automate this tasks. Grunt offers you an easy way to accomplish this kind of automation.

In this article I’ll try to explain how to automate some tasks with Grunt, but I recommend that you should take some time to read Grunt’s documentation and enjoy the experience by yourself.

So, in the following sections I’ll try to show you how to accomplish this tasks:

  • Concatenate and create a minified version of your CSS, JavaScript and HTML files.
  • Automatic generation of the documentation for JavaScript with JSDoc.
  • Linting your Javascript code.
  • Reformat and reindent (prettify) your Javascript code.

You can install Grunt via npm (Node Package Manager), so, in order to install Grunt you need to install Node.js first.

Now that you have Node.js and npm installed is a good time to install globally the Grunt CLI (Command Line Interface) package.

$ sudo npm install -g grunt-cli

Once grunt-cli is installed you need to go to the root directory of your project and create a package.json file, to accomplish this you can do the following:

$ cd example_project
$ npm init

The previous command will ask you a series of questions in order to create the package.json file, package.json basically store metadata for projects published as npm modules. It’s important to remember to add this file to your source code versioning tool to facilitate the installation of the development dependencies among your partners via npm install command.

At this point we can install Grunt and their respective plugins in the existing package.json with:

$ npm install grunt --save-dev

And the plugins that you need can be installed as follows:

$ npm install <grunt-plugin-name> --save-dev

Please note that the --save-dev parameter will modify your devDependencies section in your package.json. So, be sure to commit the updated package.json file with your project whenever you consider appropriate.

Code documentation

If you document your code following the syntax rules defined on JSDoc 3, e.g.:

 /**
  * A callback function returning array defining where the ticks
  * are laid out on the axis.
  *
  * @function tickPositioner
  * @see {@link http://api.highcharts.com/highstock#yAxis.tickPositioner}
  * @param {String} xOrY - Is it X or Y Axis?
  * @param {Number} min - Minimum value
  * @param {Number} max - Maximum value
  * @returns {Array} - Where the ticks are laid out on the axis.
  */
 function tickPositioner(xOrY, min, max) {

    // do something

    return tickPositions;
 }

If you need more information about JSDoc, read their documentation, it’s easy to catch up.

The next step to automate the generation of the code documentation is to install first the grunt-jsdoc plugin as follows:

$ npm install grunt-jsdoc --save-dev

Once grunt-jsdoc is installed you must create your Gruntfile.js in the root directory of your project and then add the jsdoc entry to the options of the initConfig method.

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
      pkg: grunt.file.readJSON('package.json'),
      jsdoc : {
          dist : {
              src: ['src/*.js', 'test/*.js'], 
              dest: 'doc'
          }
      }
  });

};  

Then, you need to load the plugin after the initConfig method in the Gruntfile.js:

// Load the plugin that provides the 'jsdoc' task.
grunt.loadNpmtasks('grunt-jsdoc');

The resulting Gruntfile.js until now is:

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
      pkg: grunt.file.readJSON('package.json'),
      jsdoc : {
          dist : {
              src: ['src/*.js', 'test/*.js'], 
              dest: 'doc'
          }
      }
  });

  // Load the plugin that provides the 'jsdoc' task.
  grunt.loadNpmtasks('grunt-jsdoc');

};  

To generate the documentation, you need to call the jsdoc task as follows:

$ grunt jsdoc

Immediately you can see, inside the doc directory, the available documentation in HTML format with some beautiful styles by default.

JSDoc

Linting your Javascript code

In order to find suspicious, non-portable or potential problems in Javascript code or simply to enforce your team’s coding convention, whatever may be the reason, I recommend that you should include a static code analysis tool in your toolset.

The first step is to define your set of rules. I prefer to specify the set of rules in an independent file called .jshintrc located at the root directory of the project, let’s see an example:

// file: .jshintrc
{
    "globals": {
        "Highcharts": true, // This is only necessary if you use Highcharts
        "module": true // Gruntfile.js
    },
    "bitwise": true,
    "browser": true,
    "camelcase": true,
    "curly": true,
    "eqeqeq": true,
    "forin": true,
    "freeze": true,
    "immed": true,
    "indent": 4,
    "jquery": true,
    "latedef": true,
    "newcap": true,
    "noempty": true,
    "nonew": true,
    "quotmark": true,
    "trailing": true,
    "undef": true,
    "unused": true
}

If you need more details about the checks that offer every rule mentioned above, please, read the page that contains a list of all options supported by JSHint

To install the grunt-contrib-jshint plugin do the following:

$ npm install grunt-contrib-jshint --save-dev

Next, proceed to add the jshint entry to the options of the initConfig method in the Gruntfile.js as follows:

jshint: {
 options: {
  jshintrc: '.jshintrc'
 },
 all: ['Gruntfile.js', 'src/*.js', 'test/*.js']
}

Then, as it’s done in the previous section, you need to load the plugin after the initConfig method in the Grunfile.js

// Load the plugin that provides the 'jshint' task.
grunt.loadNpmTasks('grunt-contrib-jshint');

To validate your Javascript code against the previous set of rules you need to call the jshint task:

$ grunt jshint

Note that if you need more information or explanations about the errors that you may receive after the previous command I suggest that you should visit JSLint Error Explanations site.

Code Style

As I mentioned in the previous section, I suggest that you should maintain an independent file where you define the set of rules about your coding styles:

// file: .jsbeautifyrc
{
  "indent_size": 4,
  "indent_char": " ",
  "indent_level": 0,
  "indent_with_tabs": false,
  "preserve_newlines": true,
  "max_preserve_newlines": 2,
  "jslint_happy": true,
  "brace_style": "collapse",
  "keep_array_indentation": false,
  "keep_function_indentation": false,
  "space_before_conditional": true,
  "break_chained_methods": false,
  "eval_code": false,
  "unescape_strings": false,
  "wrap_line_length": 0
}

Next, proceed to add the jsbeautifier entry to the options of the initConfig method in the Gruntfile.js as follows:

jsbeautifier: {
  modify: {
      src: 'index.js',
      options: {
          config: '.jsbeautifyrc'
   }
  },
  verify: {
   src: ['index.js'],
   options: {
   mode: 'VERIFY_ONLY',
   config: '.jsbeautifyrc'
  }
 }
}

The next step it to load the plugin after the initConfig method:

// Load the plugin that provides the 'jsbeautifier' task.
grunt.loadNpmTasks('grunt-jsbeautifier');

To adjust your JS files according to the previous set of rules you need to call the jsbeautifier task:

$ grunt jsbeautifier:modify

Concat and minified CSS, HTML, JS

In order to reduce your CSS, HTML and JS files do as follows:

$ npm install grunt-contrib-uglify --save-dev
$ npm install grunt-contrib-htmlmin --save-dev
$ npm install grunt-contrib-cssmin --save-dev

Next, proceed to add the htmlmin, cssmin and uglify entries to the options of the initConfig method in the Gruntfile.js as follows:

htmlmin: {
  dist: {
    options: {
      removeComments: true,
      collapseWhitespace: true
    },
    files: {
      'dist/index.html': 'src/index.html',     // 'destination': 'source'
      'dist/contact.html': 'src/contact.html'
    }
  }
},
cssmin: {
  add_banner: {
    options: {
      banner: '/* My minified css file */'
    },
    files: {
      'path/to/output.css': ['path/to/**/*.css']
    }
  }
},
uglify: {
 options: {
   banner: '/* <%= grunt.template.today("yyyy-mm-dd") %> */\n',
   separator: ',',
   compress: true,
 },
 chart: {
   src: ['src/js/*.js'],
   dest: 'dist/js/example.min.js'
 }
}

The next step it to load the plugins after the initConfig method:

// Load the plugin that provides the 'uglify' task.
grunt.loadNpmTasks('grunt-contrib-uglify');
// Load the plugin that provides the 'htmlmin' task.
grunt.loadNpmTasks('grunt-contrib-htmlmin');
// Load the plugin that provides the 'cssmin' task.
grunt.loadNpmTasks('grunt-contrib-cssmin');

To adjust your files according to the previous set of rules you need to call the htmlmin, cssmin or uglify tasks:

$ grunt htmlmin
$ grunt cssmin
$ grunt uglify

After loading all of your Grunt tasks you can create some aliases.

If you want to create an alias to run the three previous tasks in one step do as follows:

// Wrapper around htmlmin, cssmin and uglify tasks.
grunt.registerTask('minified', [
        'htmlmin',
        'cssmin',
        'uglify'
    ]);

So, to execute the three tasks in one step you can do the following:

$ grunt minified

The previous command is a wrapper around the htmlmin, cssmin and uglify tasks defined previously.

Wrapping all together we get the following [Grunfile.js][]

Other plugins

Grunt offers you a very large amount of plugins, they have a dedicated section to list them!

I recommend that you should take some time to check out the following plugins:

Conclusion

Certainly, Grunt do a great job when we talk about task automation, also, automating this repetitive tasks is fun and reduce the errors associated with tasks that in the past we used to run manually over and over again. That been said, I definitely recommend that you should try Grunt, you will get in exchange an improvement in your development workflow, also with it you can forget to endure repetitive tasks that we hate to do, as a consequence you will get more free time to focus on getting things done.

Last but not least, another option for Grunt is Gulp, I recently read about it, if you look at their documentation you notice that their syntax is more clean than Grunt, also is very concise and allows chaining calls, following the concept of streams that pipes offer in *nix like systems, so, I’ll give it a try in my next project.

Grunt: The Javascript Task Manager was originally published by Milton Mazzarri at milmazz on June 28, 2014.

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Forms of communication

I stared at Noodles' Emptiness, where I found a short rant on the currently most used forms of communication. No, into the most socially-useful forms of communication. No, into what works best for him. And, as each person's experience is unique, I won't try to correct him — Noodles knows himself much, much, much, much better than I do. But some people have wondered recently (i.e. at conferences I have been at) why I give such an atypical use to social networks (...a term which I still hold to be grossly misused, but that's a topic for a different rant...One that's been had too many times).

So, although my blog is syndicated at Planet Debian, and I know a good deal of readers come from there, this post is targetted at the rest of the world population: Those that don't understand why many among us prefer other ways of communication.

Noodles mentions seven forms of communication he uses, arguably sorted by their nowadayness, low to high: Phone call, text (SMS) message, email, IRC, Skype, Google Hangouts and Facebook messenger.

Among those, I strongly dislike two: Phone call and Skype (or any voice-based service, FWIW). I do most of my communication while multitasking, usually at work. I enjoy the quasi-real-timeliness of IRC and the instant messengers, but much more, I like the ability to delay an answer for seconds or minutes without it breaking the rules of engagement.

Second, if the ordering is based on what I found, the reason for my little rant should become obvious: We had kept a great job so far building interoperable technology.1 Up until now, you could say «drop me a mail», and no matter if you had your mail with GMail and I insisted on self-hosting my gwolf.org, as long as our communications adhered to simple and basic standards, we would be perfectly able to communicate.

Skype is a bit of a special case here: They did build a great solution, ~ten years ago, when decent-quality VoIP was nowhere to be found. They have kept their algorithm and mechanisms propietary, and deliberately don't operate with others. And, all in all, there is a case for them remaining closed.

But Google Hangouts and Facebook Messenger do piss me off. More the first than the second. Both arrived to the instant messenger scene long after the experimentation and early stages, so they both took Jabber / XMPP, a well tried and tested protocol made with interoperability and federability in mind. And... They closed it, so they can control their whole walled garden.

So, yes, I do use them both — Because in both there are many people which I value, and which I want to be in touch with. And no, I won't try to change the ways of everybody so they can talk with me on IRC. I'm an asshole, but everything has its limits! :) Of course, I can (still?) use them from my trusty old multiprotocol chat manager, Pidgin. And it's so much better to have one small program gobbling up moderate heaps of memory than to be connected to the Facebook site, spending much more memory and CPU cycles via Javascript in a Web browser. Bah.

PS- Interestingly, he left out the face-to-face communication.I am quite an anchorite in my daily life, but I still think it's worth at least a mention ;-)

So, Noodles: Thanks for the excuse to let me vent a rant ;-)

  • 1. Interestingly, a counterexample came up on me. One I do not remember, but I have seen printed information that make me believe it: Back in the 1940s/1950s, Mexico (Mexico City only perhaps?) had two parallel phone networks. If I'm not mistaken, one was Ericsson and the other was AT&T. Businesses often gave you both of their numbers in their ads, because you could not call one network from the other. And now that seems so backwards and unbelievable!

Miércoles 25 de junio de 2014

Milton Mazzarri

Milton Mazzarri
milmazz

The DRY principle

The DRY (Don’t Repeat Yourself) principle it basically consist in the following:

Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

That said, it’s almost clear that the DRY principle is against the code duplication, something that in the long term affects the maintenance phase, it doesn’t facilitate the improvement or code refactoring and, in some cases, it can generate some contradictions, among other problems.

Recently I have inherited a project, and one of the things that I noticed in some part of the source code are the following:

After a glance, you can save some bytes and apply the facade and module pattern without breaking the API compatibility in this way:

But, if you have read the jQuery documentation it’s obvious that the previous code portions are against the DRY principle, basically, this functions expose some shorthands for the $.ajax method from the jQuery library. That said, it’s important to clarify that jQuery, from version 1.0, offers some shorthands, they are: $.get(), $.getJSON(), $.post(), among others.

So, in this particular case, I prefer to break the backward compatibility and delete the previous code portions. After that, I changed the code that used the previous functions and from this point I only used the shorthands that jQuery offers, some examples may clarify this thought:

Another advantage of using the shorthand methods that jQuery provides is that you can work with Deferreds, one last thing that we must take in consideration is that jqXHR.success() and jqXHR.error() callback methods are deprecated as of jQuery 1.8.

Anyway, I wanted to share my experience in this case. Also, remark that we need to take care of some principles at the moment we develop software and avoid to reinvent the wheel or do overengineering.

Last but not least, one way to read offline documentation that I tend to use is Dash or Zeal, I can access a bunch of documentation without the need of an Internet connection, give it a try!

The DRY principle was originally published by Milton Mazzarri at milmazz on June 24, 2014.

Martes 24 de junio de 2014

Planeta Laguna: Como configurar un bypass al proxy transparente de IPCop

Lunes 23 de junio de 2014

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Historia de mi adicción a Google.

skynet-googleMi primer cuenta de correo, como muchos otros, inició en hotmail, cuenta que probablemente siga por ahí, convertida en msn, live, outlook o como quiera que se llame hoy el servicio de correo de Microsoft, que algún día llegó a dominar y dominarnos, hotmail era sinónimo de lo que hoy es gmail.

Este mes cumplo 29 años de andar esquivando a la catrina y curiosamente este mismo mes cumplo 10 años utilizando GMail, lo cual me ha puesto a pensar en dejar adicciones y malos vicios conforme me acerco a los 30, y no nada mas hablo del tabáco, alcohol y apatía sino también de los vicios y mañas electrónicas que he adquirido durante este lapso de 10 años, Google siendo en este caso como la heroína; altamente adictiva y prácticamente accesible en todos lados.

Grátis es bueno

Hotmail_old_screenshot

Hotmail, el primer correo de muchos

Mi primer cuenta de correo me la “abrió” un amigo, por allá por 1998. Yo no tenía Internet, ni siquiera computadora, así que lo natural fué hacerlo en un cybercafé. Suerte la mía que, siendo un “señorcito” como cariñosamente me dice mi señora esposa, no decidí utilizar algun nombre de usuario ridículo en la cuenta, esos que balconeaban nuestros peores gustos musicales, básica ortografía o la imperante necesidad de mostrarnos violentos o matones, todo, obvio, propio de la pubertad y totalmente justificable.

En realidad yo no sabía para que necesitaba una cuenta de correo electrónico. Simplemente estaba ahí, para cuando fuera a serme útil. Eventualmente el Internet comenzó a ser cosa seria en México y le agarré el hype. Para entonces yo seguía utilizando mi teléfono de casa para comunicarme o bien, el viejo truco de ir a tocar la puerta de con quien se desea charlar, llámenme retro, hipster o pobre, pero así eran las cosas aún hace 15 años.

Aunque tuve la fortuna de tener acercamiento con Internet y la tecnología desde temprana edad, el uso de dicha tecnología era por puro placer, es más, era cosa de nerds: correo, chat, buscadores. Todo esto era más como otro juguete nuevo. Recuerdo que mi primer teléfono celular fue un Motorola StarTac aunque era “análogo“, ese con la pantallita de LED‘s o foquitos naranjas o verdes. Para entonces, si mi memoria no me falla, Telcel ni siquiera soportaba mensajes SMS así que la novedad era poder simplemente hacer llamadas sin tener que usar el teléfono de tu casa o bien un teléfono público, esos que ahora solo son relevantes para merchandising de Dr Who. Es decir, el teléfono celular en realidad se había convertido en una herramienta de comunicación real, útil y novedosa, el correo, bueno, el correo seguía siendo un juguete, al menos para mi.

Conforme el uso de correo electrónico se volvió común entre mocosos también mi interés por integrarlo a mi vida personal aunque, honestamente, teniendo 15 años, no esperaba recibir demasiados mensajes de trabajo, si acaso chismes propios de amigos y una que otra noticia de sitios web que visitaba con frecuencia. Uno de los usos más comunes y que, tristemente sigue vigente, era enviar fotos por correo, a diferencia de hoy claro, aquellas eran scans de papel fotográfico, esas que si no les dabas un trapazo, mostraban “pelitos” en el archivo.

Mi odio hacía Microsoft del momento (actitud revolucionaria también propia de mi pubertad), empresa que era ahora dueña de hotmail, y las crecientes dificultades técnicas y limitaciones del servicio me hicieron considerar “migrar” mi correo electrónico a otro proveedor. Hubo algún momento donde Hotmail ofreció solamente 5Mb de almacenamiento para sus cuentas, es decir, nada, zero, vacío.

Las opciones que tenía eran básicamente dos: buscar un proveedor de servicio gratuito como yahoo, lycos, etc. o bien montar mi propio servidor de correo, para entonces mi conocimiento me lo permitía, y después de unos meses de probar tanto yahoo como operamail decidí que la mejor opción era… hotmail!

Había algo que simplemente no me cuadraba con los demás servicios, Perdoné las pobres funcionalidades de hotmail, el creciente SPAM en mi bandeja y el irrisorio tamaño permitido en la bandeja, era una especie de relación masoquista. Aun con esto, un buen amigo, Ángel, me concedió una cuenta de correo gratuita en su servidor “linuxreal.org” la cual utilizaba para cosas ajenas a amigos y familia, es decir mantenía dos cuentas de correo.

Al final terminé varios años con esta modalidad dual de correos porque bueno, “nothing beats free” ¿Cierto?

El ocio es la madre de todos los vicios

MSN Messenger, culpable de nuestro ocio por años

MSN Messenger, culpable de nuestro ocio por años

Una de las razones por las cuales se volvió popular el uso de hotmail fue por la dominancia atróz con la que contaba Microsoft en el mundo de la tecnología, especialmente en México, donde todos teníamos para entonces el mismo ISP o proveedor de acceso a Internet: Telmex. Si bien para los del noroeste es Telnor, esta compañia es parte del mismo corporativo, o sea solo con un nombre diferente. Comento lo del ISP porque en realidad en lugares más “desarrollados” (o sea en gringolandia) era común utilizar los servicios agregados del propio proveedor, por ejemplo, si contratabamos Internet con America OnLine, la infáme compañia de los CD’s que salían hasta en el cereal, nos proveía de una dirección electrónica de correo, como parte del servicio, y cuando el Internet apenas comenzaba a comercializarse el servicio de correo podía llegar a costar una buena cantidad de dinero así que no era extraño hacer uso de los mismos de manera gratuita que ya incluía el paquete de acceso a Internet. Es así como se dividió el uso entre varios proveedores: AOL, Excite, MSN, Yahoo, etc. Sin embargo en México, al ser un país con una “unioferta” de acceso a Internet, era solo cuestión de tiempo para que lo que sea que la maquinaría de esta empresa del señor Slim nos ofreciera sería lo que nos teníamos que tragar sin chistar. Es así como esta mezcla entre Microsoft, lider indiscutible de la industria, por aquellos años del punto com, y Telmex, lider y también monopolio propio de nuestro país, crean una sinergía llamada T1MSN, nacía pues una alianza entre los dos que a lo largo de unos años haría crecer el uso no solo de hotmail sino del servicio de mensajería instantanea “MSN Messenger” como una locura total y bueno, lo demás creo que es historia conocida.

Fue así como eventualmente creo que la mayoría del mercado mexicano terminamos no solo utilizando Hotmail sino su servicio de mensajería instantánea, que digo utilizando, dependiendo de el! El hecho de poder ahorrarse dinero en llamadas telefónicas que no eran ilimitadas y sobre todo poder “mensajear” a diestra y siniestra era bastante atractivo, sobre todo para el público más joven, como yo para entonces. Aun hoy en día creo que el target principal de las aplicaciones modernas de mensajería como line, whatsapp, facebook messenger y otros siguen siendo los adolescentes.

En determinado momento “hotmail” se volvió sinónimo de correo electrónico, los menos, utilizaban yahoo, quizá solo esas primeras generaciones que realmente vieron el nacimiento de Internet. Los que aún seguíamos su crecimiento, indiscutiblemente, eramos parte de la pandilla de Microsoft. No recuerdo haber tenido algún contacto que tuviera una dirección diferente o terminase con algo que no fuera @hotmail.com si acaso los que tenían una con terminación de dominio español: hotmail.es y los menos, sobre todo mis contactos del “otro lado” con direcciones de yahoo.

Para entonces, y a pesar del éxito global de Microsoft con ambos productos (logró desterrar a por ejemplo a ICQ, el de la florecita y el sonido chillante, como plataforma de mensajería instantanea y matuvo a yahoo messenger siempre a distancia) se descuidó de un negocio que parecía no importarles mucho: la búsqueda. Google se había convertido en una de las empresas que pintaban para darle guerra al grande, con una actitud fresca, jovial y hasta cierto punto desafiante. Era fácil identificarse con esta, sobre todo cuando el motto de aquel tiempo, sobre todo para los nerds como yo, era “amo odiar a Microsoft“.

Muerto el rey, viva el rey

All your trust are belong to us!

All your trust are belong to us!

Después de unos agitados años de frenesí bursátil y de la recuperación después de la caída de prácticamente el 80% de las empresas de Internet después del fiasco de la denominada era de las punto com, todo comenzó a normalizarse y aquellas empresas que habían sobrevivido dicha crisis comenzaron a visualizar otros horizontes y otras posibilidades. Había nuevas tendencias: blogs, las primeras redes sociales, colaboración en contenidos, video en línea, etc. Microsoft no solo dominaba el servicio de correo y mensajería, estaban conscientes de ello y, como suele suceder en tales casos, descuidaron su negocio pensando que nadie mas podría competir con ellos. Las ideas poco innovadoras y sobre todo la actitud de nula retroalimentación hacía sus productos o como dicen vulgarmente “No oigo soy de palo” alentaron a otras a creer lo increíble: desbancar al grande del mercado de Internet y aunque parecía complicado no era imposible pues Microsoft seguía enfocándose en su línea de productos premium orientados sobre todo al escritorio: Windows, Office, etc. Esto no solo invalidó la presencia de Microsoft en el Internet rápidamente sino que lo convirtió en un espectador más, a la sombra de otras empresas mas jóvenes y con mejores propuestas para un mercado que aun desconocía que quería pero sabía lo que NO quería.

Con la compra de blogger y la introducción de GMail parecía que Google era la empresa que efectivamente venía no solo a darle en la madre al gigante sino que además lo haría de una manera tan innovadora y accesible que era imposible resistirse al cambio, resistencia que había permitido a Microsoft mantener el control hasta entonces. Cuando me enteré que el servicio de correo de google no solo ofrecería 1Gb de almacenamiento que para entonces era una cantidad monstruosa sino que también ofrecería una interfaz renovada para redefinir como utilizábamos el correo electrónico, la herramienta que, además de la mensajería instantánea, era el elemento más importante de nuestras vidas en “la matrix“, decidí dejar de utilizar hotmail. Simplemente era algo tan passé, tan retrógrado y aburrido. El beso en la boca y hotmail eran cosa del pasado, la nueva moda ahora era gmail y claro, enamorar pelado. Después de conseguir una invitación al servicio en su fase beta por fin tuve la oportunidad de experimentar un servicio que realmente disfrutaba: no solo era útil, era un placer.

Crónica de una adicción

Eat moar googles!!

Eat moar googles!!

El servicio de correo de google era tan increíblemente bueno, rápido y eficaz que simplemente pensar en utilizar un cliente de correo como Outlook o una herramienta de “PIM” estaba simplemente fuera de discusión. Conforme Google creció monetariamente, también sus adquisiciones a lo largo de los años, de servicios que son sinónimo de Internet en estos días: Blogger, Youtube, Maps, Picasa, Analytics, Android, Panoramio, Google Docs, Feed Burner, Chrome y un centenar, literalmente, de empresas pequeñas o medianas las cuales son ahora parte de su ecosistema. Si bien en un momento Microsoft dominó el correo electrónico y la mensajería instantánea ahora Google dominaba la información, o cualquier herramienta propia para administrarla, es decir, comenzaba a dominar Internet, palabras más palabras menos.

A pesar de seguir ofreciendo sus productos prácticamente gratis y seguir enfocados en escuchar a sus clientes había ya quienes, como locos paranoicos, prevían un giro de la empresa de Mountain View hacía algo digno de una historia de Orwell: control total de nuestra información y nuestra aceptación de ello a pesar de todo, al final funciona para nosotros, y también para ellos.

Pagábamos y seguimos pagando el precio de la comodidad a cambio de “un poco de nuestros datos”. A mi personalmente la integración de todo el ecosistema de Google me pareció siempre el “killer feature” y es lo que me ha mantenido utilizando sus productos. A pesar de los tropiezos que tuvieron a lo largo de los años como “Google Buzz”, “Wave” y el aun lánguido y necio Google +, sus productos siguen no solo siendo vigentes sino que además son líderes de mercado. Quien diga lo contrario miente, sobre todo ahora que hay más smartphones en uso que computadoras. Incluso cuando aun Apple dominaba este sector con el iPhone, Google ya era líder en la administración de la información. No recuerdo a ninguno de mis amigos, familiares, o conocidos utilizando equipos de la manzana con correos diferentes a GMail, si bien el hardware es de Apple, la infraestructura para el manejo de la información que hace “inteligente” al aparato es, “con vuestro permiso“, como dice Cerati, de Google.

Cuando adquirí mi primer “smartphone” el cual sea de paso fue con Android, obtuve lo que nunca con ninguno de mis teléfonos anteriores: Una oficina móvil. En realidad nunca me preocupó demasiado poder tener acceso a mi correo, calendario, tareas y contactos desde el teléfono o quizá no había evidenciado el potencial de ello: poder contestar correos, agendar citas y revisar documentos desde el pequeño dispositivo no solo me ahorraba tiempo, también dinero, dinero traducido en costos de transporte hacia casa u oficina o cualquier lugar donde tuviéramos un equipo de cómputo estático y el simple hecho de poder tener control de nuestra información donde quiera que estemos es una oferta que no podemos rechazar. Por otra parte, y aunque particularmente no tan importante para mi, pero las aplicaciones de ocio, o sea “el pinche face y el tuiter” nos sirven para matar el tiempo, sobre todo ese “tiempo muerto” en lo que esperas la comida, el camión, etc.

Para cuando decidí abrir mi primera aventura de emprendimiento llamado coloquialmente “empresa” o changarro pa la banda, sabía que debía tener herramientas de comunicación y colaboración listas incluso antes de empezar a buscar más clientes. Entonces pensé ¿Para qué molestarme en montar un servidor de correo, de calendario, un CRM…? Google Apps era gratuito entonces y simplemente ligando el dominio podría tener todos estos servicios administrados por alguien más, con una superioridad técnica a lo que el software instalable en un servidor tiene y sobre todo con una integración suprema entre dispositivos. Y así lo hicimos. Comenzamos a utilizar google apps para prácticamente todo lo que podíamos.

Conforme pasó el tiempo surgieron nuevas necesidades y eventualmente terminamos buscando que las herramientas para solucionar estas necesidades se adaptaran a los servicios de Google, y no del modo contrario, es decir, si la herramienta que analizaba para utilizar o implementar no podía acceder a mis contactos, a mi correo o manejar autenticación con mis credenciales de google entonces era, para mi, inferior. De ninguna manera pensaba volver a administrar los mismos datos en varios lugares. Había decidido ya, que ese lugar era Google y además, las herramientas “troncales” de colaboración e información y productividad eran ya superiores a las alternativas que podría tener como aplicaciones de escritorio. De ninguna manera cambiaría la interfáz y velocidad de gmail por un cliente de correo como Outlook o Thunderbird, la administración de contactos desde gmail era simplemente superior a un software de directorio o agenda personal y finalmente, para mi, que nunca he tenido necesidades complejas en software de ofimática (y que probablemente es el caso del 90% del mercado), google docs había reemplazado la paquetería de oficina como Microsoft Office o LibreOffice en linux. Simplemente poder compartir documentos y contar con colaboración en tiempo real era una característica que no podría tener con los productos más tradicionales. El evitar estar llevando “versionado” de documentos con títulos idiotas como “Presentacion de resultados (este es el bueno) 2009-06-20 V2-backup.pptx”  haría mi vida menos miserable y de nuevo me ahorraría tiempo. ¿Poder ver documentos de office anteriormente en un pequeño dispositivo? Casi imposible, ¿Verlos con google docs? Adelante!

Tocando fondo

En un aparente frenesí de placer causado por la facilidad, integración y calidad general de los productos del “pequeño buscador” terminé dependiendo casi completamente de su tecnología para administrar mi segunda vida, esa que llevamos en línea y que, aunque haya quien lo niegue, es parte fundamental de la otra:

  • Correo electrónico para asuntos laborales y personales con GMail
  • Mensajería instantanea tanto para equipo de trabajo como con familia: Google Talk
  • Un blog en blogger para transmitir ideas
  • Un smartphone con un sistema operativo controlado por google, con números y datos de contacto de familiares, amigos y colegas también, controlado por google
  • Administración de mis notas y tareas con google keep
  • Chrome, el navegador, y herramienta en la cual pasamos probablemente la mitad del tiempo cuando estamos frente a la computadora
  • Google Calendar
  • Drive, porque bueno, existe dropbox, pero ¿Si google ya lo tiene integrado, por qué no?
  • etc.

Pero no me detuve ahí, google era ahora también parte de mi vida personal, ya no hablo de comunicación o colaboración sea laboral o de puro placer. También integré a google a mi vida personal:

  • Google Maps para ubicarme
  • Chromebook, con un sistema también desarrollado por google, como mi “laptop” de ocio y herramienta ágil para juntas y notas
  • Google Chromecast, para volver inteligente a mi televisor
  • Google Music, para poder respaldar mi música, cuestión que considero de suma importancia en mi vida (la música, claro, no los respaldos) y que me permite poder escucharla donde sea que esté
  • Picasa (Ahora Google + Photos) para guardar colecciones de fotos

La necesidad de utilizar sus productos se volvió tan obsesiva que confieso estar inscrito a varios blogs acerca de tecnología de esta empresa: 9t5google, omgchrome, etc. Penoso, lo sé, pero en esta era de la información donde ser competitivo significa hacerlo más rápido, con más integración y de una manera más simple que los demás, utilizar cada vez más productos de esta empresa parecía una buena estrategia.

La aceptación

Tan pronto como cerré 42 Ideas, la empresa que casi 5 años atrás había iniciado con Alan, y que había sido testigo de mi creciente adicción por todo lo que apestara a google me di cuenta que tenía un problema. Llegaría a pensar que me preocupaba de sobremanera que haría con toda la “red de infraestructura y datos” que había, cariñosa y delicadamente, formado a lo largo de los años durante el tiempo de la empresa. Cometí el gran error de mezclar dicha infraestructura con mi vida personal ya que me parecía tedioso utilizar dos cuentas de correo, dos calendarios, dos agendas, etc. Al final sabía que lo correcto era dejar de utilizar cualquier cosa relacionada a la ya difunta empresa para seguirme comunicando, un “ya cerramos” no era suficiente, así que decidí intentar migrar toda esta información hacía OTRA cuenta de google, a mi antigua cuenta personal. Ahí comenzaron los estragos aparentemente.

Sabía que google había siempre pregonado que la información era nuestra y solo nuestra y que, en el remoto caso que decidiéramos dejarlos se nos proveerían las herramientas adecuadas para “llevarnos nuestras chivas“. Migrar mi información de mi cuenta empresarial de google apps a mi cuenta personal de google fue algo menos que divertido y me tomó bastante tiempo. Sobra decir que mucha de la información al final terminó exportandose de manera extraña o simplemente los pasos para poder volver a reintegrarla a otra cuenta de google me parecían tan tediosos y ridículos que tomé la decisión de ubicar lo que realmente era importante para mi y solo migrar eso. Lo extraño era que no estaba dejando el “barrio google“, simplemente intentaba mudarme a otra de sus casas, aunque me complicaron la mudanza.

Esto, aunado a la creciente filtración de documentos que demostraban que tanto google como otras empresas autorizaban el acceso a nuestros datos a intereses ajenos a los propios y de la misma empresa, me puso a reconsiderar todo. Verán, en realidad soy una persona con poca riqueza, secretos industriales relevantes o información clasificada. Creo que no tengo “nada que esconder” y soy una persona abierta, sin embargo, sí que prefiero dar mi autorización para divulgar esta información que aunque no es de vida o muerte, es mía.

Pero no solo una cuestión filosófica o de ética me hizo reconsiderar mi dependencia en los productos de google; recientes cambios técnicos como el uso de protocolos propietarios para el uso de Google Talk (ahora Hangouts) en vez de XMPP / Jabber, el requerimiento de google chrome para utilizar google keep de manera adecuada, la eliminación de soporte a formatos de documentos abiertos como OpenDocument y el aparente cierre de servicios por razones puramente comerciales terminó de convencerme que generé una relación de co-dependencia con la compañía y sus productos. Finalmente el cómo administrara mi información era decisión de alguien más y yo lo había aceptado, en una inocente y confiada búsqueda de protección me volví partidario de un monopolio, de una dictadura benevolente, un régimen de datos al que le dimos poder para salvarnos del dictador anterior.

El síndrome de abstinencia

Había un detonante necesario para  asegurarme que aquella idea “revolucionaria” y rojilla que rondaba por mi cabeza no era tan descabellada: ¿Qué pasaría si un día google decidiera terminar nuestra relación? ¿Qué pasaría si ellos decidieran que, mis datos, que yo acepté concederles, y que eran ahora de su propiedad también, no podrían ser accedidos de nuevo?

Aunque no sucedió algo tan trágico como en esta historia, tuve un mensaje divino, una advertencia, mi detonante pues: alguien tenía mi clave de google e intentó acceder a mi correo. Google me envió un mensaje a mi teléfono celular por medio de un SMS hace algunas semanas con un código de desbloqueo ya que habían detectado actividad inusual. Traté de iniciar sesión y me sorprendí al ver un mensaje que decía, traducido al español, más o menos lo siguiente:

Hemos detectado actividad inusual en tu cuenta por lo que ha sido bloqueada. Alguien intentó iniciar sesión con tu nombre de usuario y tu contraseña lo cual significa que alguien más conoce tu contraseña!. Es importante que realices un cambio de contraseña como medida preventiva.

Sobra decir de donde fue el inicio de sesión, lo importante es que era de un lugar bastante retirado de mi lugar de residencia y que obviamente no fui yo quien intentó hacerlo. Si bien el robo de la contraseña y entender como es que alguien pudo conocerla siendo que no era ni fácil ni suelo introducirla en dispositivos que no son mios (computadoras de otros, teléfonos, etc.) me tenía ansioso, lo que más me preocupó en ese momento fue el hecho de que prácticamente no solo los servicios de google utilizaban esta cuenta; la gran mayoría de los servicios en línea que utilizo, incluso aquellos por los que pago y donde tengo ligadas tarjetas de crédito, estaban ligados a la autenticación de google, ¿Qué hubiera pasado si, quien intentó robar mi cuenta, hubiera tenido éxito? Probablemente mi identidad en línea hubiera desaparecido también. No se trataba de un simple “me hackearon el facebook” o “mi novia cambió mi cuenta de correo“, era algo aun mas grave.

Acto seguido decidí no solo cambiar mi contraseña sino además desligar mi cuenta de google con la mayoría de los servicios en línea importantes para mi y en los cuales, por un aparente acto de pereza había configurado para utilizar la cuenta de google en vez de crear una propia del servicio. Una vez realicé esto tomé una decisión importante: era momento de probar si podría vivir sin google o por lo menos no depender de esta. Sabía que sería algo doloroso y que no disfrutaría, pero era necesario, al menos intentarlo.

El proceso de desintoxicación

He contado con el dominio ahivamos.net, donde hospedo este blog y otras cosas personales, como una cuenta de correo “pública” por alrededor de 10 años. Decidí buscar reemplazos para la mayoría de las tecnologías de google que utilizaba como parte de mi experimento pero que realmente eran importantes, entre ellas:

  • Servicio de correo
  • Calendario
  • Agenda
  • Notas
  • Documentos
  • Almacenamiento y respaldo
Owncloud "tu propia nube"

Owncloud “tu propia nube”

El primer paso fue adquirir un certificado de seguridad SSL para un subdominio que monté. Paso seguido me di a la tarea de instalar Owncloud en dicho subdominio, software para administrar “tu propia nube” y que, salvo la cuestión del correo que ya tenía solucionado con mi servidor de ahivamos.net, cubría todas mis necesidades. Acto seguido y después de algunas horas de configuración decidí tratar de integrar este reemplazo de google en mis múltiples dispositivos. El primero y siendo mi herramienta principal fue mi computadora. Utilizo Linux en mi escritorio principalmente y con el entorno Gnome, que afortunadamente soporta cuentas Owncloud para administrar nuestra información personal. De esta manera mas o menos pude reemplazar el navegador y parafernalia de google con aplicaciones nativas conectadas a mi nueva cuenta de owncloud.

Posteriormente seguirían mis otros dispositivos: Mi smartphone principal, con android y mi tablet nexus también con android. Después de algunas horas de investigar y de bastante lectura me dí cuenta que aunque era posible conectar a los servicios de Owncloud en ambos dispositivos, la experiencia de usuario no sería la misma, incluso algunas de las aplicaciones para sincronizar contactos y calendario deben ser compradas por separado (carddav y caldav) para lo cual no tengo problema, el problema o mi duda era ¿Por qué siendo Android un sistema operativo móvil open source no contaba con integración nativa con estas tecnologías? O al menos, de manera transparente como con los propios servicios de Google.

De la chromebook bueno, sabía que era un producto específicamente creado para ser utilizado con tecnologías google sin embargo, aun podía utilizar el navegador dentro de ella para acceder a mi cuenta de correo de ahivamos.net y a mi aplicación de Owncloud donde se pueden consultar calendarios, contactos, archivos, etc.

Al paso de dos semanas mi dí cuenta de lo que temía: las alternativas eran mucho muy inferiores a los equivalentes de Google:

Correo electrónico

Es prácticamente nuestra herramienta más importante, al menos para mi. La búsqueda de google dentro de su aplicación web, rápida y con filtros era algo a lo que me había acostumbrado y que no tenía en ningún cliente de correo nativo de escritorio. Mi otra cuenta de correo “ordinaria”, al no ser de google, no cuenta con notificaciones push en dispositivos móviles así que aunque IMAP no deja de ser una tecnología estable y suficiente, parece anticuada comparada con utilizar gmail. Por otra parte, el filtro de SPAM de google es simplemente irreemplazable, no existe creo una herramienta más precisa para el control de correo basura que el propio de gmail. En mi caso, estaba forzado a utilizar SpamAssasin incluido en mi proveedor de hosting que si bien no es inútil tampoco es grandioso.

Por otra parte y buscando reemplazar la interfaz de gmail con algo similar en el escritorio probé Geary, un cliente de correo para Linux que promete mucho, y digo promete porque a pesar de ser mas o menos estable aun cuenta con muchos features por implementar y con algunos bugs mayores. En mi intención de realmente abrazar esta nueva alternativa incluso apoyé con algunos parches a la aplicación. Geary, aun cuando es un cliente nativo de escritorio, cuenta con una interfaz para visualizar correos basada en conversaciones, muy parecida a gmail, característica ausente en Evolution y Thunderbird, ambos software de correo electrónico estables y clásicos para usuarios de Linux que sin embargo se quedaron un poco atrasados en su funcionalidad conforme el tiempo ha pasado. Aunque me parece un software increíble y con mucho potencial, definitivamente está lejos de ser un reemplazo a gmail, para mi particularmente por dos cosas: integración con la agenda de contactos y con el calendario.

El segundo inconveniente con el correo fue accederlo fuera de mi computadora de escritorio principal, es decir, en cualquier otra. Aunque cuento con una interfaz de squirrellmail para ello que me permite acceder a mi correo de ahivamos.net desde un navegador, la experiencia de usuario es simplemente decepcionante, que digo decepcionante, es más arcaica que la de hotmail cuando apenas comenzaba a utilizar el servicio, de verdad, no exagero. Por ello tuve que invertir aun más tiempo en instalar en mi propio servidor un software de acceso a correo IMAP/POP3 (como ese que usan en tu empresa con outlook) llamado Roundcube que, aunque igual no reemplaza a gmail es mucho más placentero de usar que squirrellmail. Creo que ser golpeado por un Reno a una velocidad de 57 Km/h sería aun más placentero que utilizar squirrelmail. El problema aquí es que en realidad… no hay un problema. “El problema” del software de acceso a correo electrónico por medio de la web se resolvió hace años cuando google, yahoo, microsoft etc. superaron a estos otros, es decir, es algo que ya a nadie le interesa solucionar así que, salvo que utilicemos herramientas complejas de administración de información como Zimbra, ZoHo o similares, propias de entornos corporativos, tendremos que conformarnos con ofertas muy por debajo de la calidad de user experience los proveedores de correo electrónico que ya todos conocemos.

El Calendario

Esto mas o menos salió según lo planeado. Utilizando Owncloud es bastante fácil configurar un calendario el cual puede ser configurado por medio del protocolo calDav tanto en dispositivos móviles android (con el uso de apps de terceros) como en clientes de escritorio. La interfaz web de Owncloud para la administración del calendario, aunque es suficiente, es inferior a la de google. En realidad la mayor desventaja que encontré fue el hecho de no poder compartir eventos con otras personas como los “invites” propios de google calendar para quienes cuentan también con una cuenta de google y el hecho de que la oferta de software de escritorio para administrar calendarios, en linux al menos, es pobre, descontinuada o en el mejor de los casos incompleta. De nuevo, la integración del ecosistema google tanto entre sus productos como en dispositivos supera una solución diferente.

La Agenda

Owncloud cuenta con una implementación de carDav, otro protocolo abierto para acceso y administración de una agenda de contactos. En este caso la interfáz de Owncloud para ello, aunque funcional, es bastante pobre. Pareciera que, al menos en la versión 6 de dicho producto, se despreocuparon por crear una interfáz web práctica y fácil de usar. La modificación de datos de contactos en la aplicación web de Owncloud es simplemente horrible. Por otra parte, para la sincronización de contactos con android, de nuevo, es necesario una app de terceros, aun cuando es un protocolo abierto, android no cuenta con soporte nativo para ello.

Notas

Aunque no suelo ser fanático de los post-its y notas sí que las utilizo sobre todo para apuntes “rápidos”: claves de wifi, números de teléfono, recados y minutas de juntas. Regularmente termino pasando los datos de estas notas en un documento más formal si es necesario o bien simplemente eliminandolas cuando ya no las necesito. Owncloud de nuevo cuenta con acceso a una mini aplicación de “notas” en su interfáz web que son simples archivos de texto. Gnome 3 cuenta con una aplicación bastante simple llamada originalmente Bijiben (ahora gnome notes) que permite sincronizar las notas en linux con un servidor Owncloud. En realidad para este punto no hay nada de valor agregado que me diera google keep excepto por la aplicación móvil y he ahí el problema: la mayoría de las veces tomo notas desde mi tablet o smartphone así que tener acceso a mis notas desde ambos es imprescindible, afortunadamente existen aplicaciones de terceros que permiten sincronizar estas notas con Owncloud desde dispositivos android. Particularmente en este punto creo que google keep no me ofrece nada extra.

Documentos

Creo que la última vez que necesité de una suite ofimática como Microsoft Office para crear contenido fue en la escuela. En realidad mis necesidades para formatear documentos son muy básicas: alineación, colores de texto, imagen por ahí y por allá y el esporádico documento enviado por alguien que parece haber vivido en una piedra por los últimos 14 años y aún no conoce o no quiere entender el formato PDF. Aunque en este caso las necesidades son superadas por las alternativas a google, es decir Microsoft Office, LibreOffice y demás paquetería de escritorio, google sigue llevando una ventaja obvia para tiempos actuales: la colaboración. El no tener que estar enviando y reenviando revisiones de documentos entre correos de contactos y personas con las que trabajamos es una de las razones por las cuales google docs era imprescindible para mi. Simplemente se crea el documento, se comparte y se puede acceder prácticamente desde cualquier lugar donde se cuente con un navegador mas o menos moderno. Por otra parte, la colaboración en tiempo real dentro de un documento es otro de los features que aun al día de hoy no podemos realizar con paquetería de ofimática como Microsoft Office o LibreOffice y honestamente, no estoy dispuesto a pagar por Office 365 para ello. Owncloud en este caso ofrece en su versión más reciente una herramienta que permite “editar” documentos en formato ODT en tiempo real y desde un navegador, sin embargo, aunque es un intento honorable, es un desastre total. La velocidad es mala, las opciones de formato del documento son pocas, muy pocas y finalmente solo funciona en el navegador. No hay aplicaciones móviles para ello y la mayoría de productos incluídos al menos en Android no soportan los formatos OpenDocument como QuickOffice formato que sea de paso es el único que soporta dicha tecnología.

Almacenamiento y respaldo

Probablemente hace ya varios años que no respaldo prácticamente nada de mis discos locales. Todos mis documentos importantes estaban en google drive, si mi computadora, smartphone, tablet o cualquier otro dispositivo se perdía o se lo comía el perro sabía que tendría todo disponible de nuevo en “la nube“. Los únicos respaldos que me importan son de documentos personales, algunos de trabajo, mi colección de fotos, todas en picasa por cierto y mi sagrada colección de música. Para todos los casos, utilizar ya sea google drive, picasa o google music es no solo natural y fluido sino práctico y sensato. En este caso, reemplazarlo con Owncloud no fue difícil. Owncloud cuenta con soporte, de nuevo, para el protocolo abierto webDav que permite “montar” discos en red como locales y transferir archivos, además incluye claro, en su interfáz web, acceso a estos folders que nos permiten descargar o visualizar estos archivos. Compartir algunos de estos archivos o fotos no es extraordinariamente difícil, ya que Owncloud cuenta con una opción para compartir archivos por medio de un enláce público e incluso dar acceso público a las galerías de fotos, el problema de nuevo, es la integración. Google ofrece superioridad en este ámbito ya que por ejemplo los documentos ni siquiera existen físicamente, no debemos preocuparnos por administrarlos. Las fotos tomadas con mi smartphone o tablet se “respaldan” automágicamente y finalmente mi colección de música está accesible en todas partes. No es raro para mi estar trabajando en un lugar diferente a mi computadora principal y lanzar google music para escuchar música mientras realizo otras actividades, también lo puedo hacer desde la tablet, incluso “streaming” desde mi colección de música, videos y conciertos a cualquiera de mis televisiones con google chromecast. Aunque Owncloud puede ser extendido con algunas aplicaciones extras para poder escuchar los archivos de música, este no se incluye por default, y la única manera de hacerlo hasta donde pude investigar, desde la tablet o el smartphone es bajando los archivos desde mi instalación de Owncloud y abrirlos localmente lo cual significa que pierdo mis playlists y otras características. Y solo hay que ver los ratings y reviews de la aplicación oficial de Owncloud en el playstore de google para darse una idea de las incipientes capacidades con las que cuenta.

La cruda realidad

trainspotting-rentonA pesar de que pareciera que extendí demasiado mi experimento en realidad sinteticé lo más que me fue posible mi aventura. En estas dos o tres semanas que intenté vivir sin productos de google aprendí mas de lo que uno se pueda imaginar sobre capas de transporte HTTP, certificados de seguridad y otros temas inecesarios para un fin simple: facilitar la administración de mi información. Me considero, con suma humildeza y sin intención de engrandecerme, un usuario extremadamente avanzado y con conocimientos bastante profundos sobre todos estos temas y aun así, invertí una buena cantidad de tiempo en mi experimento. ¿Qué le espera a alguien que simplemente utiliza sus dispositivos para comunicarse, no tiene un doctorado en ciencias computacionales y busca independencia del cada vez mas adictivo ecosistema de google?: Caos, tristeza, miseria, decepción y aceptación.

Incluso me di a la tarea de investigar si el problema es la dependencia en los dispositivos móviles ¿Qué alternativas tenemos al hoy dominante android de google? ¿Apple, Microsoft? Hemos estado ahí, y sabemos que están cortados con la misma tijera. En el mejor de los casos Android supone un sistema operativo libre que sin embargo, es inútil sin los servicios de google. Llegué a pensar que podría darle una oportunidad a Firefox OS, estaba tentado a hacerlo, incluso Movistar y otros partners y fabricantes de equipo llevan una campaña fuerte para apoyar este nuevo y libre sistema operativo, pero el hecho de que adolezca de cosas tan simples como sincronización de contactos, búsqueda de personas para enviar correo o sincronización de algún tipo con algún servicio para evitar perder nuestros datos si perdemos el equipo me hicieron recapacitar: ¿Por qué retroceder 10 años por puros idealismos? La vida es corta, estoy casi en mis 30′s y prefiero invertir mi tiempo en otras cosas.

En verdad creo en un mundo donde nuestra información personal no sea prostituída y utilizada con fines no solo comerciales los cuales no autorizamos, sino incluso políticos, sin embargo, es casi imposible pelear contra la marea en un mundo donde prácticamente nos volvermos inútiles sin estas herramientas. Yo podría tolerarlo, mis circulos de nerds y colegas podrían también, pero colaborar con los “demás” sería practicamente una tarea masoquista. Es como tratar de vivir una vida “verde” en un mundo creado con carreteras para automóviles que utilizan combustibles derivados del petróleo; deseable, si, pero difícil, muy difícil.

Al final decidí claudicar y ser práctico: los productos de Google me ofrecen aun más de lo que puedo hacer sin ellos. Y aunque he tomado algunas medidas para aligerar mi adicción y utilizar otros productos ajenos a la empresa de Mountain View en la medida de lo posible, en mi cabeza sigue dando vueltas aquella escena de Trainspotting, reforzada por el poster colgando en mi pared:

But why would I want to do a thing like that? I choose not to choose life, I choose something else, And the reasons? There are no reasons. Who needs reasons when you’ve got heroin?

I’ve got Google, and I choose Google.

Domingo 22 de junio de 2014

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Yo tampoco / #yotampoco / neither do I → A bit of local action

Only a very short summary in English: I am Mexican. I am Jewish. I am almost completely disconnected from the local Jewish communities. And understanding the local Jewish communities is hard. There is a very interesting and brave campaign, recently started, called Neither do I — The Mexican Jewish gay activist group Guimel, started off with this video (with English subtitles, if you are interested in following along). But how did I learn about this very bold initiative? By getting a hateful spam, inviting people to join a hate campaign. Right, the hate mail is not calling to violence, but it is based on premises as stupid as everybody's right not to include (to begin with).

So, the least I can do about this is to share both said hate mail and publicly denounce my shock on reading this nonsense nowadays. And, also in Spanish (I know many people following me don't understand it — Sorry, it would just take too long, and after all, it's mainly for local "consumption"), this is the reply I sent to them (and to the other recipients). Sorry in advance to the Spanish speakers for my exabrupts :) This was written "as is", without much prior thought, and quite angry about what I had just read.

Buf... Expresiones como esta, que hacen evidente la cerrazón de tanta gente en las comunidades judías, justifican claramente por qué tantos nos hemos ido abriendo, integrándonos a la sociedad circundante. Me da vergüenza ser asociado como judío a comunidades donde se defienden estos puntos de vista; si bien yo no soy de la comunidad Monte Sinai (como resultará obvio por mi nombre), para la sociedad en su conjunto sí soy un judío (así, a secas: Judío).

Mucho nos hemos quejado colectivamente a lo largo de los siglos acerca de la discriminación, de que seamos considerado la "basura" del mundo, los "apestados". Y es precisamente esa actitud, ante todo y en todo momento, lo que me ha llevado a alejarme del judaísmo. Soy un ser humano más, con una historia personal única, con una historia cultural compartida pero también única, con algunas elecciones y algunas características que me son inherentes únicas.

¿Algo de eso no le gusta a alguien? ¿Por motivos racionales o irracionales? No lo puedo ni pienso evitar. Pero el que una comunidad completa sea llamada a ignorar, humillar, alienar a sus hijos, por una estupidez así de anacrónica (en el caso que lo presenta el video al que hacen referencia, y a la gente que valientemente ha conformado Guimel) me parece que simplemente va más allá de toda estupidez.

Piensen bien antes de adherirse a esta campaña de odio. Substituyan la sexualidad por cualquier otra razón en la que somos minoría. ¿No les da asco vivir con un vendedor de telas? ¿Con un judío apestoso?

Y sí, aquí ya estoy yo también dejando ir a esos demonios... que hay que mantener bajo control. Porque somos hombres y mujeres de nuestro siglo, y porque el mundo y las nuevas generaciones merecen nuestro mejor esfuerzo para ir colectivamente destruyendo la estupidez de nuestros ancestros.

Seamos más racionales. Dejemos el odio, dejemos los prejuicios. Aceptemos a los diferentes, porque todos queremos que nos acepten. Porque todos somos diferentes.

AttachmentSize
tambien.txt8.55 KB

Jueves 19 de junio de 2014

Xenode Systems: Kernel VM tunnings para mejorar rendimiento en Linux
Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

Consultar IP pública desde terminal

Puedes consultar la ip publica desde tu terminal  con un sólo comando, o vía web si lo deseas en el mismo sitio.

El sitio en el que consultas es: ifconfig.me

TERMINAL:
 curl ifconfig.me

WEB
http://ifconfig.me 

en la web podrás ver algo como esto:









































Xenode Systems: ¿Cómo lanzar un VPS?: 6 Tips Fundamentales

Miércoles 18 de junio de 2014

Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

Encriptar archivos con GPG

Si quieres encriptar tus archivos para que nadie tenga acceso a ellos, más que la persona que tenga la contraseña, lo puedes hacer con GPG (GNU Privacy Guard)

GPG maneja los tipos de cifrado: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224

ENCRIPTAR:

Opción 1

gpg -c miarchivo.tar.gz

esto nos pedirá una contraseña que será asignada al binario encriptado y generará un archivo binario .gpg
NOTA: si no recuerdas tu contraseña jamás vas a poder abrir tu archivo de nuevo

Opción 2
Si prefieres que se encripte en modo texto y no en binario ejecuta:

gpg -ca miarchivo.tar.gz


El comando anterior generará un archivo sac que se puede abrir con cualquier editor de texto plano, aunque no será legible su información.

Opción 3
Si quieres que tu archivo encriptado tenga otro nombre:

gpg -o otronombre.tar.gz.gpg -c miarchivo.tar.gz

Esto lo puedes hacer para archivos individuales, pero si lo que necesitas es proteger directorios completos, te recomiendo comprimirlos primero y luego encriptarlos como en los ejemplos anteriores.


DESENCRIPTAR:


gpg -d miarchivo.tar.gz.gpg

Nos pedirá la contraseña para desencriptar el archivo.

Si deseas más información para los usos y posibilidades de GPG puedes ejecutar :

gpg --help


Martes 17 de junio de 2014

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

My little Tor node: Alive again!

So, after writing my last blog post in frustration, several people knowing their way around Tor better than me wrote that I should just configure my machine not to be an exit relay, but a middle relay or a bridge.

So, I set it up to be a bridge about five days ago. And, as they pointed out, I have not experienced any problems.

Interesting: The traffic pattern is very different. Compare:

Traffic pattern as an exit relay:

Traffic pattern as a bridge:

Anyway — I'm happy to have Lobazal back online!

Lunes 16 de junio de 2014

Planeta Laguna: Instalación de Gentoo Linux para un servidor

Sábado 14 de junio de 2014

Renich Bon Ciric

HowTo: Build and Use Fedora 20 for/on Google Cloud

So, in my last post, I promised to post these instructions. As if I ever kept secrets from you! ¬_¬

Update: Please, visit my repo where you can find the updated code: https://github.com/renich/gce-images

So, here’s the magic:

Initialize (last post)

This takes care of setup. Read and follow instructions carefully. Obviously, you need to take care of billing settings and stuff when you create the account. In fact, probably, you need to create the account prior to login. Let’s see how it goes if you haven’t. Let me know on the comments.

# setup google cloud sdk
curl https://sdk.cloud.google.com | bash

# activate google cloud in current shell
source ~/.bash_profile

# login
gcloud auth login --no-launch-browser

# activate it
source ~/.bash_profile

setup script (unfinished)

This one is needed by virt-builder in order to edit the distro according to Google’s recommendations. It is not finished yet. It just works. I will update this part as soon as I’m finished.

#!/usr/bin/env bash

# WARNING!
# Please, do not run this script by it's own. It can destroy some of your configuration.
# This script is a setup script for the guest we're creating.

# hosts
cat < < 'EOF' > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
169.254.169.254 metadata.google.internal metadata
EOF

# networking
rm -fr /etc/sysconfig/networking
rm -f /etc/udev/rules.d/70-persistent-net.rules
# rm -f /etc/hostname

cat < < 'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEVICE="eth0"
NAME="eth0"
ONBOOT="yes"
BOOTPROTO="dhcp"
IPV4_FAILURE_FATAL="yes"
DEFROUTE="yes"
MTU="1460"
DNS1="208.67.222.222"
DNS2="8.8.8.8"
EOF

# ntp
sed -ri '/^server [1-3]\.fedora.*$/d' /etc/ntp.conf
sed -ri 's@^server 0\.fedora.*$@server metadata.google.internal iburst@' /etc/ntp.conf

# disable firewall
systemctl disable firewalld.service
systemctl disable iptables.service

# yum updates
sed -ri 's@apply_updates = no@apply_updates = yes@' /etc/yum/yum-cron.conf

# ssh config
## delete the keys
rm /etc/ssh/ssh_host_key
rm /etc/ssh/ssh_host_rsa_key*
rm /etc/ssh/ssh_host_dsa_key*
rm /etc/ssh/ssh_host_ecdsa_key*

## patch sshd_config
patch sshd_config.test < <( cat << 'EOF'
18,19c18,19
< #AddressFamily any
< #ListenAddress 0.0.0.0
---
> AddressFamily inet
> ListenAddress 0.0.0.0
48c48
< #PermitRootLogin yes
---
> PermitRootLogin without-password
78c78
< PasswordAuthentication yes
---
> PasswordAuthentication yes
114c114
< #AllowTcpForwarding yes
---
> AllowTcpForwarding no
127c127
< #ClientAliveInterval 0
---
> ClientAliveInterval 420
133c133
< #PermitTunnel no
---
> PermitTunnel no
EOF
)

## lock root
# usermod -L root

# kernel
## remove symbol table
rm -f /boot/System.map*

## configuration
### strongly recommended
cat < < 'EOF' > /etc/sysctl.d/11-google-strongly_recommended.conf
# Google-recommended kernel parameters

# Reboot the machine soon after a kernel panic.
kernel.panic=10

# Addresses of mmap base, heap, stack and VDSO page are randomized.
kernel.randomize_va_space=2

# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=1
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.default.secure_redirects=1

# Ignore source-routed packets
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0

# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.default.log_martians=1

# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks.
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1

# Don't pass traffic between networks or act as a router
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.ip_forward=0

# Ignore ICMP broadcasts to avoid participating in Smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts=1

# Ignore bad ICMP errors
net.ipv4.icmp_ignore_bogus_error_responses=1

# RFC 1337 fix
net.ipv4.tcp_rfc1337=1

# Turn on SYN-flood protections.  Starting with 2.6.26, there is no loss
# of TCP functionality/features under normal conditions.  When flood
# protections kick in under high unanswered-SYN load, the system
# should remain more stable, with a trade off of some loss of TCP
# functionality/features (e.g. TCP Window scaling).
net.ipv4.tcp_syncookies=1
EOF

cat < < 'EOF' > /etc/sysctl.d/12-google-recommended.conf
# provides protection from ToCToU races
fs.protected_hardlinks=1

# provides protection from ToCToU races
fs.protected_symlinks=1

# makes locating kernel addresses more difficult
kernel.kptr_restrict=1

# set ptrace protections
kernel.yama.ptrace_scope=1

# set perf only available to root
kernel.perf_event_paranoid=2
EOF

# google things
# todo:
#   * google-daemon depends on syslog.service; which does not exist in fedora

exit 0

Name this one “setup”. The build commands should be able to access the setup script.

build

Ok, this one takes care of building stuff. We will use the mighty virt-builder; from libguestfs-tools-c; by Mr. Richard WM Jones!

By the way, analyze and change accordingly. Do NOT copy/paste it. Understand it first, change it and use it.

#!/usr/bin/env bash

date=$( date +%Y%m%d%H%M%S )
project='evalinux-test'

# f1-micro
# g1-small
# n1-highcpu-2
# n1-highcpu-4
# n1-highcpu-8
# n1-highcpu-16
# n1-highmem-2
# n1-highmem-4
# n1-highmem-8
# n1-highmem-16
# n1-standard-1
# n1-standard-2
# n1-standard-4
# n1-standard-8
# n1-standard-16
machine_type='n1-highcpu-8'

# asia-east1-a
# asia-east1-b
# europe-west1-a
# europe-west1-b
# us-central1-a
# us-central1-b
zone='us-central1-b'

# virt-builder -l
## centos-6
## cirros-0.3.1
## debian-6
## debian-7
## fedora-18
## fedora-19
## fedora-20
## rhel-7rc
## scientificlinux-6
## ubuntu-10.04
## ubuntu-12.04
## ubuntu-14.04
os='fedora-20'

# Your Google Storage
gs='fedora-images'


function ask_continue
{
    # skip for now
    return
    shopt -s extglob

    echo -n 'Do you want to continue?: '
    read answer

    if [[ "${answer,,}" != @(yes|y|yep|sure|aha|yeah|yea) ]]; then
        exit 0;
    fi
}


# build image
echo 'building...'
virt-builder \
    --format raw \
    --size 10G \
    --timezone Etc/UTC \
    --password-crypto sha512 \
    --root-password password:fedoraadminpass \
    --install "irqbalance,openssh-server,openssh-clients,rsync,git,ntp,python,yum-plugin-fastestmirror,yum-plugin-merge-conf,yum-plugin-remove-with-leaves" \
    --install "yum-cron-daily,yum-utils" \
    --firstboot setup \
    --update \
    --selinux-relabel \
    -o disk.raw \
    ${os}

echo
echo 'done building. Next: compress'
ask_continue

# compress
echo 'compressing...'
tar -Szcf ${date}-image.${os}.tar.gz disk.raw

echo
echo 'done compressing. Next: upload'
ask_continue

# upload
echo 'uploading...'
gsutil cp ./${date}-image.${os}.tar.gz gs://${gs}

echo
echo 'done uploading. Next: add image'
ask_continue

# add test image
echo 'adding image...'
gcutil --project=${project} addimage ${os}-v${date} gs://${gs}/${date}-image.${os}.tar.gz

echo
echo 'done adding image. Next: create instance'
ask_continue

# create test instance
gcutil --project=${project} addinstance \
    --image=${os}-v${date} \
    --machine_type=${machine_type} \
    --zone=${zone} \
    ${os}-v${date}-test

echo 'done creating instance.'

exit 0

This sample script will generate an 8 CPU, ~8 GB RAM, 10 GB HDD instance @ USA. Tweak it if you need something else.

Alternatives

Renich Bon Ciric

HowTo: Install Google Cloud SDK from the CLI on Fedora 20

Basically, this is a HowTo that prevents the usage of a browser in Google’s Cloud SDK installation.

Why?

Easy. I wanted to build my own image; from scratch. I wanted Fedora 20 on that cloud. The problem is that I have the poorest Internet connection (WiMax @ 2 Mbps/128 Kbps) so building stuff would take ages.

So, I used my CloudSigma Fedora 20 server for the build. That server is headless and I needed to authenticate with a browser if I followed Google‘s instructions.

Solution

# setup google cloud sdk
curl https://sdk.cloud.google.com | bash

# activate google cloud in current shell
source ~/.bash_profile

# login
gcloud auth login --no-launch-browser

This lets me authenticate the SDK by following a link and getting back a key to paste on the CLI. That easy.

You wanna know how to build Fedora on Google’s Cloud? I’ll tell you in another post.

Reference

Viernes 13 de junio de 2014

Andrés Vargas

Andrés Vargas
zodman

"If you need more than 3 levels of indentation, you’re screwed anyway, and should fix your..."

“If you need more than 3 levels of indentation, you’re screwed anyway, and should fix your program.”

-

Linus Torvalds Linux 1.3.53 CodingStyle documentation (1995). Retrieved on 2011-08-13.

aduken

aduken2

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Hoy juega la decepción nacional de fútbol.

Ni se hagan ilusiones. Veamos el desempeño de la Selección Mexicana de Fútbol.
La primera participación de México en la Copa Mundial de Futbol fue en la primera edición en Uruguay 1930, participación por demás decepcionante: en la última posición (de 13), con cero puntos y una diferencia de goles de -9, sólo superada por la participación en Argentina 1978, en la misma última posición (de 16), con la misma ausencia de puntos y -10 goles de diferencia.
Pero aún más vergonzosa ha sido (y esperemos que será) la no participación de México en Italia 1990, debido al escándalo de Los cachirules.
En el otro extremo, la mejor participación consiste en ser eliminados en la ronda de cuartos de final, por la vía de los penalties. Con un registro invicto de tres partidos ganados y dos empatados, nos permitió obtener la sexta posición (de 24). México 86, el mundo hundido por un deudón.
La segunda mejor actuación, otra sexta posición (de 16) en cuartos de final, es en México 70, con un registro de dos partidos ganados, uno empatado y uno perdido. Deberíamos organizar mundiales más seguido.
En épocas modernas del fútbol nacional, después de Los Cachirules y fuera del territorio nacional, la mejor participación es la del 2002, en Corea del Sur/Japón, con un desempeño de dos partidos ganados, uno empatado y uno perdido; el cual nos hizo acreedores a la décimoprimera posición (de 32). El resto de las ocasiones, aunque si bien es cierto que se ha superado la ronda de grupos, la decepción nacional cuando mucho sólo ha ganado un (1) partido.
Mi pronóstico pesimista: el destino de la decepción nacional estará sellado en dos partidos.
Mi pronóstico optimista: se juegan cuatro partidos y se obtienen 4 de 12 puntos posibles.

Jueves 12 de junio de 2014

Hack casero

En más de un sentido, hace ya algún tiempo necesitamos en casa de esas cosas para hacer la casa “segura” para niños, encontramos varias cosas que nos sirvieron casi todas las que lo hicieron tenían adhesivo, la que menos nos sirvió fue el seguro para cajones, ya que requiere sacar el cajón poner con taladro el seguro en el mueble y el tope en el cajón (mucho tiempo de inversión y la verdad no se ve que aguante mucha fuerza) pensando un poco se me ocurrió la siguiente solución:

Dsc04725 Dsc04726 Dsc04727

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Por supuesto se acaba el esmalte del mueble y claro, deja una marca terrible donde pongo el tornillo, pero es super efectivo ha pasado que se mueve el mueble, pero no se abre el cajón… y el tornillo del cual les debo la medida y con el cual se puede probar y comprar unos 10 por idem de pesos de diferentes medidas es útil.

Miércoles 11 de junio de 2014

José Oviedo

José Oviedo
oviedo.mx

Al actualizar de Windows 8 a Windows 8.1 error por permisos de administrador

Al actualizar desde la store de microsoft para windows 8 a la nueva versión 8.1, marca error de que se necesita un usuario de tipo administrador para continuar con la instalación, lo curioso es que solamente se cuenta con 1 usuario y es tipo administrador.

Entonces el truco consiste en eliminar la actualización KB2871389 reiniciar el equipo y después intentar.
Si por algo sigue sin funcionar despues de eliminar, tenemos que borrar la cache de la store de microsoft con el siguiente comando: wsreset.exe
Se encuentra en c:/windows/system32/ por si no funciona desde ejecutar, y listo, volver a intentar.

Lunes 09 de junio de 2014

Planeta Laguna: wpa_supplicant-cupid && hostapd-cupid

Jueves 05 de junio de 2014

Alex Callejas

How to: Logical Volume Management en Linux

gandalf

Yo he descubierto que son las cosas pequeñas de las acciones diarias de las personas ordinarias lo que mantiene a raya a la oscuridad. Actos simples de amabilidad y amor.

Gandalf en El Hobbit de J.R.R. Tolkien

Anteriormente había publicado, a manera de acordeón, una guía de como manejar los volúmenes lógicos en AIX; ahora toca turno de realizar el mismo ejercicio sobre Linux.

La administración de los volúmenes lógicos en Linux tiene conceptos similares a los conceptos vistos en el post de AIX, basados en el siguiente diagrama tendremos:

lvm_diag

Physical Volumes (PV): Elemento físico del arreglo, pueden ser particiones de discos físicos, primarias o extendidas, o incluso discos completos; internos o externos, abriendo la posibilidad a dispositivos de almacenamiento externo de alto desempeño, como lo son los discos proporcionados por un arreglo de discos de un storage de fibra (fibre channel)

Volume Group (VG): Conjunto de volúmenes físicos (PV’s) para proporcionar espacio de almacenamiento dinámico en ambos sentidos (ampliación y reducción). Además de ofrecer la posibilidad de configuración de alta disponibilidad (LVM HA – clusterizado)

Logical Volumes (LV): Espacio de almacenamiento, equivalente a una partición, con las misma naturaleza dinámica del volume group.

FileSystems: Espacio de almacenamiento asociado a un punto de montaje para el resguardo de archivos.

Redimensionar VG root

Uno de los primeros casos con los que nos encontramos al recibir una asignación de un sistema Linux, es tener un servidor sin un particionamiento adecuado para administrarlo, tal como:

[root@fedora20 ~]# df -h
Filesystem             Size Used Avail Use% Mounted on
/dev/mapper/fedora-root 11G 1.8G 7.8G  19%  /
devtmpfs               994M    0 994M   0%  /dev
tmpfs                 1002M    0 1002M  0%  /dev/shm
tmpfs                 1002M 472K 1001M  1%  /run
tmpfs                 1002M    0 1002M  0%  /sys/fs/cgroup
tmpfs                 1002M 4.0K 1002M  1%  /tmp
/dev/vda1              477M  75M 374M  17%  /boot
[root@fedora20 ~]# vgs
 VG    #PV #LV #SN Attr   VSize  VFree
 fedora 1  2   0   wz--n- 11.51g 0 
[root@fedora20 ~]# lvs
 LV   VG     Attr       LSize Pool Origin Data% Move Log Cpy%Sync Convert
 root fedora -wi-ao---- 10.31g 
 swap fedora -wi-ao---- 1.20g 
[root@fedora20 ~]#

Como podemos observar, se generó un sólo logical volume dentro del volume group, el cual ocupa todo el espacio disponible, si por ejemplo, los logs (como /var/log/messages ó /var/log/httpd/error.log) crecieran más allá de lo normal, podrían ocasionar una caída de nuestro equipo.

Para solucionarlo es necesario realizar un procedimiento con un disco de rescate, ya que no es posible realizarlo con el sistema ejecutándose de manera normal. Utilizaremos el disco de rescate (rhel-server-7.0-x86_64-boot.iso) de RHEL7, que podemos bajar de:

http://ftp.redhat.com/redhat/rhel/rc/7/Server/x86_64/iso/

Reiniciamos el server con el disco de rescate y booteamos sin montar el sistema de archivos que encuentre:

clic para agrandar

clic para agrandar

clic para agrandar

clic para agrandar

Cuando estamos dentro del ambiente de rescate, activamos el volumen que contiene nuestro LV root, ejecutando:

sh-4.2# lvmdiskscan
 /dev/loop0            [ 259.58 MiB]
 /dev/mapper/live-rw   [   2.00 GiB]
 /dev/loop1            [   2.00 GiB]
 /dev/vda1             [ 500.00 MiB]
 /dev/mapper/live-base [   2.00 GiB]
 /dev/loop2            [ 512.00 MiB]
 /dev/vda2             [  11.51 GiB] LVM physical volume
 /dev/fedora/swap      [   1.02 GiB]
 /dev/fedora/root      [  10.31 GiB]
 4 disks
 4 partitions
 0 LVM physical volume whole disks
 1 LVM physical volume
sh-4.2# 
sh-4.2# vgscan
 Reading all physical volumes. This may take a while...
 Found volume group "fedora" using metadata type lvm2
sh-4.2# 
sh-4.2# vgchange -ay fedora
 2 logical volume(s) in volume group "fedora" now active
sh-4.2# 
sh-4.2# lvs
 LV   VG     Attr      LSize Pool Origin Data% Move Log Cpy%Sync Convert
 root fedora -wi-a---- 10.31g
 swap fedora -wi-a---- 1.20g
sh-4.2#

Con el LV root activo, realizamos un fsck para validar su integridad:

sh-4.2# e2fsck -y /dev/fedora/root
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/fedora/root: clean, 22423/675952 files (0.1% non-contiguos), 260495/27022336 blocks
sh-4.2#

Después de esto, procedemos a reducir el LV root:

sh-4.2# resize2fs /dev/fedora/root 3G
Resizing the filesystem on /dev/fedora/root to 786432 (4k) blocks.
The filesystem /dev/fedora/root is now 786432 blocks long.

sh-4.2# 
sh-4.2# lvreduce -L 3G /dev/fedora/root
 WARNING: Reducing active logical volume to 3.00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce root? [y/n]: y
 Reducing logical volume root to 3.00 GiB
 Logical volume root successfully resized
sh-4.2# 
sh-4.2# lvs
 LV   VG     Attr      LSize Pool Origin Data% Move Log Cpy%Sync Convert
 root fedora -wi-a---- 3.00g
 swap fedora -wi-a---- 1.20g
sh-4.2# 
sh-4.2# exit

Al reiniciar, encontramos modificado nuestro particionamiento:

[root@fedora20 ~]# df -h
Filesystem             Size Used Avail Use% Mounted on
/dev/mapper/fedora-root2.9G 1.8G 1.1G  54%  /
devtmpfs               994M    0 994M   0%  /dev
tmpfs                 1002M    0 1002M  0%  /dev/shm
tmpfs                 1002M 472K 1001M  1%  /run
tmpfs                 1002M    0 1002M  0%  /sys/fs/cgroup
tmpfs                 1002M 4.0K 1002M  1%  /tmp
/dev/vda1              477M  75M 374M  17%  /boot
[root@fedora20 ~]# vgs
 VG    #PV #LV #SN Attr   VSize  VFree
 fedora 1  2   0   wz--n- 11.51g 7.31g 
[root@fedora20 ~]# lvs
 LV   VG     Attr       LSize Pool Origin Data% Move Log Cpy%Sync Convert
 root fedora -wi-ao---- 3.0g 
 swap fedora -wi-ao---- 1.20g 
[root@fedora20 ~]#

Operaciones básicas

Ya con espacio disponible podemos crear un particionamiento que consideremos conveniente para nuestro sistema. Por ejemplo, separar los logs en su propio filesystem; para ello, primeramente, validamos el espacio utilizado actualmente:

[root@fedora20 ~]# du -sh /var/log
10M /var/log
[root@fedora20 ~]#

Considerando un crecimiento diez veces su tamaño actual, creamos el volumen correspondiente y lo formateamos como ext4:

[root@fedora20 ~]# lvcreate -L+100M -n logs fedora
 Logical volume "logs" created
[root@fedora20 ~]# 
[root@fedora20 ~]# lvs
 LV   VG     Attr       LSize Pool Origin Data% Move Log Cpy%Sync Convert
 logs fedora -wi-a----- 100.00m 
 root fedora -wi-ao---- 3.00g 
 swap fedora -wi-ao---- 1.20g 
[root@fedora20 ~]# 
[root@fedora20 ~]# mkfs.ext4 /dev/fedora/logs 
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
 8193, 24577, 40961, 57345, 73729

Allocating group tables: done 
Writing inode tables: done 
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@fedora20 ~]#

Montamos temporalmente el LV en /mnt, para copiar el contenido de /var/log en él:

[root@fedora20 ~]# mount /dev/fedora/logs /mnt
[root@fedora20 ~]# 
[root@fedora20 ~]# df -h /mnt
Filesystem              Size Used Avail Use% Mounted on
/dev/mapper/fedora-logs 93M  1.6M 85M   2%   /mnt
[root@fedora20 ~]# 
[root@fedora20 ~]# cp -pRf /var/log/* /mnt/
[root@fedora20 ~]# ls -l /mnt
total 64
drwxr-xr-x. 2 root root 1024 Jun 5 01:04 anaconda
drwxr-x---. 2 root root 1024 Jun 5 01:13 audit
-rw-r--r--. 1 root root 6283 Jun 5 08:52 boot.log
-rw-------. 1 root utmp 384 Jun 5 01:29 btmp
drwxr-sr-x+ 3 root systemd-journal 1024 Jun 5 01:13 journal
-rw-r--r--. 1 root root 292000 Jun 5 08:52 lastlog
drwx------. 2 root root 12288 Jun 5 09:05 lost+found
drwx------. 2 root root 1024 Aug 1 2013 ppp
-rw-r--r--. 1 root root 1040 Apr 7 21:10 README
-rw-------. 1 root root 0 Jun 5 00:55 tallylog
-rw-rw-r--. 1 root utmp 13440 Jun 5 08:52 wtmp
[root@fedora20 ~]#

Configuramos el LV en el /etc/fstab de manera permanente y lo montamos:

[root@fedora20 ~]# vi /etc/fstab 
[root@fedora20 ~]# 
[root@fedora20 ~]# tail -1 /etc/fstab 
/dev/fedora/logs /var/log ext4 defaults 0 0
[root@fedora20 ~]# 
[root@fedora20 ~]# mount /var/log
[root@fedora20 ~]# 
[root@fedora20 ~]# df -h /var/log
Filesystem              Size Used Avail Use% Mounted on
/dev/mapper/fedora-logs 93M  12M  75M   14%  /var/log
[root@fedora20 ~]#

Para evitar que algún log haya detenido su escritura, los rotamos, reiniciamos journald y validamos que la bitácora esté activa:

[root@fedora20 ~]# logrotate /etc/logrotate.conf
[root@fedora20 ~]# 
[root@fedora20 ~]# systemctl restart systemd-journald.service
[root@fedora20 ~]# 
[root@fedora20 ~]# date
Thu Jun 5 09:25:32 CDT 2014
[root@fedora20 ~]# journalctl -f
-- Logs begin at Thu 2014-06-05 01:13:05 CDT. --
Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1096]: Journal stopped
Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M).
Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M).
Jun 05 09:23:56 fedora20.example-rh.com systemd-journald[1096]: Received SIGTERM
Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Starting Journal Service...
Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Started Journal Service.
Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Journal started
Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Starting Trigger Flushing of Journal to Persistent Storage...
Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Started Trigger Flushing of Journal to Persistent Storage.
Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M).
^C
[root@fedora20 ~]#

Si necesitaramos más espacio en el filesystem, primeramente expandimos el LV y después ejecutamos el resize (contrario a como lo reducimos):

[root@fedora20 ~]# lvextend -L+100M /dev/fedora/logs
Extending logical volume logs to 200.00 MiB
Logical volume logs successfully resized
[root@fedora20 ~]#
[root@fedora20 ~]# resize2fs /dev/fedora/logs
resize2fs 1.42.8 (20-Jun-2013)
Filesystem at /dev/fedora/logs is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/fedora/logs is now 204800 blocks long.
[root@fedora20 ~]#
[root@fedora20 ~]# df -h /var/log/
Filesystem              Size Used Avail Use% Mounted on
/dev/mapper/fedora-logs 190M 12M  168M  7%   /var/log
[root@fedora20 ~]#

En caso de que necesitemos un punto de retorno, creamos un snapshot de nuestro LV:

[root@fedora20 ~]# lvcreate -L 15M -s -n logs5jun /dev/fedora/logs 
 Rounding up size to full physical extent 16.00 MiB
 Logical volume "logs5jun" created
[root@fedora20 ~]#

Si requerimos restaurar a partir del snapshot, ejecutamos:

[root@fedora20 ~]# touch /var/log/test
[root@fedora20 ~]# 
[root@fedora20 ~]# ls -l /var/log/test 
-rw-r--r--. 1 root root 0 Jun 5 09:54 /var/log/test
[root@fedora20 ~]#
[root@fedora20 ~]# lvconvert --merge /dev/fedora/logs5jun 
 Logical volume fedora/logs contains a filesystem in use.
 Can't merge over open origin volume.
 Merging of snapshot logs5jun will start next activation.
[root@fedora20 ~]#

Al reiniciar se habrá restaurado nuestro LV:

[root@fedora20 ~]# ls -l /var/log/test 
ls: cannot access /var/log/test: No such file or directory
[root@fedora20 ~]#

En los próximos posts veremos como configurar un LV en HA para utilizarlo en un clúster.

Espero les sirva…

Miércoles 04 de junio de 2014

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Arduino SizeOf

¿De qué tamaño son los datos en el Arduino Uno?


#include <stdio.h>

#define FOO(x) Serial.println(String("sizeof(" #x ")=") + String(sizeof(x)))

void setup() {
Serial.begin(9600);
}

void loop(void) {
Serial.println("\nArduino sizeof, (C) 2014 'Aztec Eagle' Turbo");
FOO(char);
FOO(short);
FOO(int);
FOO(long);
FOO(long long);
FOO(void*);
FOO(float);
FOO(double);
FOO(long double);
delay(1000);
}

Esto da como resultado:


Arduino sizeof, (C) 2014 'Aztec Eagle' Turbo
sizeof(char)=1
sizeof(short)=2
sizeof(int)=2
sizeof(long)=4
sizeof(long long)=8
sizeof(void*)=2
sizeof(char*)=2
sizeof(int*)=2
sizeof(float)=4
sizeof(double)=4
sizeof(long double)=4

Miércoles 28 de mayo de 2014

José Oviedo

José Oviedo
oviedo.mx

POSTFIX: Problema con private/policy

Viendo el log del servidor de correos postfix me aparecen algunas lineas con los siguiente warning:

warning: problem talking to server private/policy: Connection timed out
warning: problem talking to server private/policy: Connection refused
NOQUEUE: reject: RCPT from smtp1.dominio.com[10.10.10.10]: 451 4.3.5 Server configuration problem; from= to= proto=ESMTP helo=

Y pues el problema radica en algo referente al private/policy, lo extraño es que no se habia tocado nada en meses y de repente aparecieron estos mensajes, entonces investigando más al respecto el problema esta en que se pierde la conexión, se rechaza y la solución es aumentar más tiempo a las conexiones y que no suceda lo anterior,

Gracias a este post: http://www.engardelinux.org/modules/index/list_archives.cgi?list=postfix-users&page=0730.html&month=2011-01 me ayudo a darme idea de por donde encontrar la solución, y pues les comparto la modificación (tomado de http://www.postfix.org/SMTPD_POLICY_README.html):

/etc/postfix/master.cf:
policy unix – n n – 0 spawn
       user=nobody argv=/some/where/policy-server

/etc/postfix/main.cf:
smtpd_recipient_restrictions =
       …
       reject_unauth_destination
       check_policy_service unix:private/policy
       …
policy_time_limit = 3600

Ahora, puntos a considerar, en la parte del archivo master.cf se especifica como parametro el número “0″ originalmente en casi todos los manuales encontraremos el valor por default “-”, con el cero solucionamos el problema del limite de conexiones en los procesos smtpd.

Y también se agrego en el main.cf la parte de time_limit y siempre recordar que reject_unauth_destination va antes de check_policy_service, sino seremos openrelay.

Saludos.

Martes 27 de mayo de 2014

Miguel Barajas

Miguel Barajas
GnuOwned's Blog

DropUploaderPy - Upload, Download, Delete, Copy files from/to Dropbox in Python

I have been playing around with python and the Dropbox API, and this is the result: DropUploaderPy.

This is a simple script created in python that let you Upload, Download, Delete, Copy, etc files from/to your Dropbox Account, without the use of  your username/password.

You can clone the github repository from here.

This is an early, early, early, early release, expect broken things.

Happy Hacking…

Alex Callejas

Spotify en Fedora 20

spotify_fedora

 

En días pasados  se actualizó la versión de Spotify, popular cliente para reproducción de música por streaming, la cual, para Linux, solamente existe en versión para debian/ubuntu; lo que hace necesario realizar algunos pasos adicionales para instalarlo en algunas otras distribuciones como Fedora.

Antes de la actualización, buscando en google encontrábamos algunos métodos efectivos para la instalación del cliente, pero al actualizar dicho paquete, muchos de los procedimientos dejaron de funcionar ya que se eliminó el paquete del repositorio.

El día de ayer, el buen Leamas, actualizó el método spotify-make en github, con lo que ya podemos tener esta nueva versión del cliente.

Básicamente, hay que copiar mediante git:

[root@isengard spotify]# git clone  https://github.com/leamas/spotify-make.git
[root@isengard spotify]# cd spotify-make

Descargar el archivo .tar.gz y descomprimirlo:

[root@isengard spotify]# wget https://github.com/leamas/spotify-make/tarball/master/spotify-make.tar.gz
[root@isengard spotify]# tar xzf spotify-make.tar.gz
[root@isengard spotify]# cd leamas-spotify-make-*

Podemos configurarlo para usarlo sólo con nuestro usuario, con la opción –user  del configure, o, como en mi caso, instalarlo para todos los usuarios:

[root@isengard leamas-spotify-make-5a2e25f]# ./configure 
Checking build and support dependencies
 ldconfig:... ldconfig (GNU libc) 2.18 (ok)
 python: Python 2.7.5 (ok)
 wget: GNU Wget 1.14 built on linux-gnu. (ok)
 zenity: ...(ok)
 ar: GNU ar version 2.23.2 (ok)
 lsb_release: trying -i: Distributor ID: Fedora (ok)
 make: GNU Make 3.82 (ok)
 install: install (GNU coreutils) 8.21 (ok)
 desktop-file-validate: (ok)
 gtk-update-icon-cache: (ok)
 update-desktop-database: (ok)
Determining distro:... (no "special configuration" of distro needed)...Fedora
Determining arch:... amd64
Determining version:... 0.9.10.17.g4129e1c.78
Determine .deb file...spotify-client_0.9.10.17.g4129e1c.78-1_amd64.deb
Determine permissions for shared libs (SO_PERMS)...755
Configuration paths:
 PATH: /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
 prefix: /usr/local
 bindir: /usr/local/bin
 libdir: /usr/local/lib
 datadir: /usr/local/share
 mandir: /usr/local/share/man
Writing Makefile
Writing spotify.desktop
Writing spotify.bash
[root@isengard leamas-spotify-make-5a2e25f]#

Descargamos los source:

[root@isengard leamas-spotify-make-5a2e25f]# make download
wget -Nq -O spotify-client_0.9.10.17.g4129e1c.78-1_amd64.deb http://repository.spotify.com/pool/non-free/s/spotify/spotify-client_0.9.10.17.g4129e1c.78-1_amd64.deb
[root@isengard leamas-spotify-make-5a2e25f]#

Instalamos:

[root@isengard leamas-spotify-make-5a2e25f]# make install

Realizamos el registro:

[root@isengard leamas-spotify-make-5a2e25f]# make register
gtk-update-icon-cache --ignore-theme-index \
 /usr/local/share/icons/hicolor
gtk-update-icon-cache: Cache file created successfully.
desktop-file-validate \
 /usr/local/share/applications/spotify.desktop
update-desktop-database /usr/local/share/applications
[root@isengard leamas-spotify-make-5a2e25f]#

Y con esto ya nos aparece el ícono en nuestro menú de aplicaciones. Al darle dobe clic, nos abre la aplicación:

Screenshot from 2014-05-27 11:42:18

Y una vez que le damos nuestra cuenta, ya nos aparece el cliente con nuestra música:

Screenshot from 2014-05-27 11:43:15

Espero les sirva…

Lunes 26 de mayo de 2014

Planeta Laguna: Instalación de Atom en Gentoo Linux

Jueves 22 de mayo de 2014

Alex Callejas

Objetivo: Planeta Linux

Tux-Linux-Distros

He aquí que estamos reunidos
en esta casa como en el arca de Noé…

Poemas Sueltos [Fragmento] – Jaime Sabines

Después de un buen rato, me decidí y solicite unirme a Planeta Linux, el punto de referencia de cualquiera que esta en busca de ampliar sus conocimientos en Software Libre y Linux. Es una gran oportunidad, la cual quiero aprovechar para agradecer las facilidades brindadas; pero a la vez, es también un reto ponerme a la altura de aquellos que llevan un buen tiempo compartiendo sus conocimientos a través de este medio.

Con esto, trataré de que las publicaciones sean cada vez más frecuentes, compartiendo mis experiencias y aportando algunas otras cosas más.

Espero les guste…

pl2_125x125

Hike Briano Carreon

Hike Briano Carreon
Mi nombre es H » Linux

Como usar Netflix en Kubuntu / Ubuntu

archnetflix

Si alguna vez as intentado utilizar Netflix en Linux ya sabes que no es posible. Esto se debe a que actualmente Netflix depende de SilverLight (básicamente es la versión de Adobe Flash pero de Microsoft) para poder ver sus películas. Y por ser esta una aplicación de Microsoft, es altamente improbable que exista compatibilidad para Linux.

Afortunadamente existen muchas alternativas para poder utilizar Netflix en Linux.

Un ejemplo es el “Netflix Desktop“. Basicamente es una version modificada de Firefox que funciona con SilverLight y todo corre bajo Wine.

Ejecuta los siguientes pasos en tu consola:

Paso #1

Instala el repositorio PPA para el “Netflix Desktop” y actualiza.

sudo add-apt-repository ppa:ehoover/compholio

sudo apt-get update

Paso #2

Durante el proceso de instalación se descargaran algunos fonts de Microsoft. Debes aceptar la licencia. Esto lo vas a lograr presionando la tecla “TAB” y después “Enter”

sudo apt-get install netflix-desktop

Una vez que termina la instalación debes ejecutar por primera vez la aplicación para que continué con la instalación de el paquete de SilverLight en Wine. Esto lo puedes hacer escribiendo “netflix-desktop” en tu consola o simplemente busca el software en tus programas ya instalados. Inmediatamente después de concluir con eso, se desplegara Firefox para Windows en toda la pantalla con la pagina de Netflix.

En este punto solo necesitas ingresar tu usuario y contraseña y listo. A disfrutar de Netflix en Kubuntu / Ubuntu.

Fuente:

http://ubuntuguide.org/wiki/Kubuntu_Trusty_Media_Players#Netflix_in_Wine_app

 


Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Better Crypto: Did Snowden Succeed?

Snowden is quoted on Greenwald's new book "No Place to Hide" as wanting to both spark a debate over the use of surveillance and to get software developers to adopt and create better encryption:

While I pray that public awareness and debate will lead to reform, bear in mind that the policies of men change in time, and even the Constitution is subverted when the appetites of power demand it. In words from history: Let us speak no more of faith in man, but bind him down from mischief by the chains of cryptography.

[...]

The shock of this initial period [after the first revelations] will provide the support needed to build a more equal internet, but this will not work to the advantage of the average person unless science outpaces law. By understanding the mechanisms through which our privacy is violated, we can win here. We can guarantee for all people equal protection against unreasonable search through universal laws, but only if the technical community is willing to face the threat and commit to implementing over-engineered solutions.

Last week Matthew Green asked:

Only time will be able to answer whether as a community the tech world can devise better and simpler tools for normal users to have their privacy protected by default.

Snowden has succeeded in starting an important discussion and having software developers and their patrons react to the news.

At Xamarin we build developer tools for Android and iOS developers. It is our job to provide tools that developers use on a day to day basis to build their applications, and we help them build these mobile applications.

In the last year, we have noticed several changes in our developer userbase. Our customers are requesting both features and guidance on a number of areas.

Developers are reaching to us both because there is a new understanding about what is happening to our electronic communications and also response to rapidly changing requirements from the public and private sectors.

Among the things we have noticed:

  • Using Trusted Roots Respectfully: For years, we tried to educate our users on what they should do when dealing with X509 certificates. Two years ago, most users would just pick the first option "Ignore the problem".
    Today this is no longer what developers do by default.
  • Certificate Pinning: more than ever, developers are using certificate pinning to ensure that their mobile applications are only talking to the exact party they want to.
  • Ciphersuite Selection: We recently had to extend the .NET API to allow developers to force our networking stack to control which cipher suites the underlying SSL/TLS stack uses. This is used to prevent weak or suspected ciphersuites to be used for the communications.
  • Request for more CipherSuites: Our Mono runtime implements its own SSL/TLS and crypto stacks entirely in C#. Our customers have asked us to support new cipher suites on newer versions of the standards.

Sometimes developers can use the native APIs we provide to achieve the above goals, but sometimes the native APIs on Android and iOS make this very hard or do not expose the new desired functionality, so we need to step in.

Miércoles 21 de mayo de 2014

Hike Briano Carreon

Hike Briano Carreon
Mi nombre es H » Linux

Como remover OpenJDK e instalar Oracle Java

Image

Sea cual sea el motivon para desinstalar Open Java. Aquí les dejo los paso que seguí yo para quitar OpenJava e instalar Oracle Java.

Remover OpenJDK

Paso #1

sudo apt-get autoremove openjdk-7-jre

Esto debería quitar OpenJDK y todas sus dependencias.

Paso #2 (opcional)

sudo apt-get purge openjdk*

Este paso solo es para asegurar que no quede rastro de ningún paquete que se llame “openjdk”

Paso #3

java -version

Confirmamos que no hay versión instalada de Java.

Instalar Oracle Java

Yo me fui por el lado sencillo. Utilice el deposito de paquetes de webupd8team. Pero si quieres intentar hacer todo manualmente también encontré este muy completo tutorial “How to Install Oracle Java on Ubuntu Linux“.

Pega los siguientes comandos en tu consola:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install oracle-java8-installer

Nota: Esta solucion es para versiones de K/Ubuntu 10.04 en delante)

Listo! una vez que concluye la instalación puedes verificar nuevamente que versión de Java esta instalada con el comando de “java -version”. Y debes tener algo similar a esto:

Image

Fuentes:

http://askubuntu.com/questions/21131/how-to-correctly-remove-openjdk-openjre-and-set-sunjdk-sunjre-as-default

http://askubuntu.com/questions/335457/how-to-uninstall-openjdk

http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux

 


Martes 20 de mayo de 2014

Hike Briano Carreon

Hike Briano Carreon
Mi nombre es H » Linux

YUMI – USB multi-arranque

YUMI (Your Universal Multiboot Installer) es una aplicacion que te permite crea un USB de arranque con diferentes sistemas operativos y utilerias como antivirus, clonacion de disco, diagnostico y muchas otras.

Una vez que ejecutas la aplicacion te pide seleccionar la unidad de USB que vas a utilizar, despues despliega una lista de las distribuciones y aplicaciones que puedes incorporar a tu USB (dependiendo la version que utilices). Cuando seleccionas la distribucion que vas a integrar te da la opcion de descargar el ISO o de que explores tu sistema para que selecciones un ISO que previamente ya hallas descargado. Cuando todo este listo presionas el boton de crear y en unos minutos esta listo tu USB para arrancar. Repites el mismo proceso para agregar cunatos SO y aplicaciones te sea posible (el limite es el tamano de tu USB drive).

YUMI se vale de syslinux para poder ejecutar las versiones extraidas de los ISOs que incorporaste a tu USB. Para aquellos SO o herramientas que no estan basadas en linux, se basan en otro metodo para su ejecucion. YUMI depende de GRUB para ejecutar la imagen ISO directamente. 

Espero que esta herramienta les sea de tanta utilidad como lo es para mi. El poder traer multiples Live CDs y herramientas en un solo USB es de gran ayuda.


Héctor Bautista

Héctor Bautista
Soy un Jedi » Gnu/Linux

Megatools en Debian Jessie

MegatoolsDespués de un buen rato de no publicar nada por acá, volvemos a las andadas u.u

Pues creo que todos conocen o al menos alguna vez han descargado algún archivo desde Mega. Si te creas una cuenta te permite almacenar hasta 50GiB de tu información.

Mega Signup

Logo MegaTiene una aplicación para iOS, Android y un cliente para escritorio que por el momento nada más hay para Hasefroch.

Es una buena opción para subir o compartir archivos que no puedas enviar por correo electrónico, como el vídeo que grabaste de tu sobrino dónde está cantando, el vídeo que grabaste de tu primo al que le jugaron una broma, etc.

Si te pusiste a escanear esas fotos de cuando eras niño(a) y en ese tiempo, pues no existían las cámaras digitales (ROFL). En fin, pueden ser muchos motivos y muchos tipos de archivo o de información que quieras compartir con tu familia, trabajo, etc.

Imagina que grabaste la graduación de tu hermano(a) de la prepa o universidad, más parte del convivio familiar y a eso le agregas fotos del evento y decides crear un DVD de autoría propia de dicho evento. Una vez terminado te queda un bonito DVD de 4.7GiB como máximo de tal acontecimiento.

Ahora resulta que se lo quieres mandar a alguien, para que tenga una copia de dicho recuerdo, creas una imágen ISO de dicho archivo y por obvias razones no se la puedes mandar en un correo.

Algunos servicios de almacenamiento tampoco te permiten tener un archivo tan grande, entonces te surge la necesidad de “partirlo” en varios pedacitos que se puedan manejar con mayor comodidad.

Generalmente a este proceso se le denomina “comprimir en varias partes” que es lo más común que se hace en estos casos.

Y bueno, después de muchos días y esfuerzo invertido logras por fin tener tus “pedacitos” que quieres enviar, pero aún son archivos muy “grandes y pesados” como para enviarlos por correo electrónico. Así que no queda de otra que usar un servicio como el que ofrece Mega.

Pues bien, igual después de batallarle un poco logras subir dichos archivos al servicio y te genera los enlaces para la descarga que es lo que le enviarás a la persona o personas que quieras que descarguen dicho contenido.

Si fueran unos 4 o 5 enlaces, no hay tanto problema, el servicio Mega te permite descargar varios archivos simultáneamente sin problemas. Las cosas se complican cuando son 20, 30 o hasta 45 enlaces.

MegaPara estos casos se hace necesario el usar algún tipo de gestor de descargas, hay uno para sistemas Hasefroch y encontré algunos esfuerzos para Linux, hasta que dí con Megatools.

Mega Mobile AppsMega Sync

Megatools es un proyecto hecho en Python que consiste en una colección de programas para acceder al servicio de Mega desde la línea de comandos.

Aunque ahorita el proyecto está detenido y hay un anuncio de que ya no van a continuar con el desarrollo, es funcional y puede ser usado sin problemas aparentes.

En mi caso estoy usando Debian Jessie (Testing) y aquí vemos la forma de cómo hacer para compilar dicho proyecto.

Lo que se necesita es descargar el código fuente del proyecto:

http://megatools.megous.com/builds/megatools-1.9.91.tar.gz

Una vez que lo hayas descargado, extrae el contenido en alguna carpeta, después quedará abrir la terminal y accesar a dicha carpeta.

Para prevenir que a la hora de compilar el paquete descargado tengamos problemas, instalemos lo necesario (como root):

root@kenobi:/home/hbautista# aptitude install libglib2.0-dev libcurl4-openssl-dev libssl-dev

 Ahora procederemos a la instalación, como típico paquete de Linux, se ejecuta Configure (como usuario normal):

hbautista@kenobi:~/Descargas/megatools-1.9.91$ ./configure
Luego make
hbautista@kenobi:~/Descargas/megatools-1.9.91$ make
Y por último con privilegios de root, make install
hbautista@kenobi:~/Descargas/megatools-1.9.91$ sudo make install

 Una vez hecho eso veremos que tenemos varios comandos disponiblles

hbautista@kenobi:~$ mega
megadf     megadl     megaget    megals     megamkdir  megamv     megaput    megareg    megarm     megasync
hbautista@kenobi:~$ mega

 Como en mi caso no necesito configurar una cuenta mega, sino simplemente descargar archivos usando la url “completa”, omito dicho paso y solamente hago uso de megadl que es precisamente el que voy a necesitar:

hbautista@kenobi:~/Descargas$ megadl 'https://mega.co.nz/#!1c1WQIZI!25fGpiBF4W1O6phNFo2A1oxVob46009m0cLuSKcfVrk'
megadl: error while loading shared libraries: libmega.so.0: cannot open shared object file: No such file or directory
hbautista@kenobi:~/Descargas$

 Si les pasa como a mi que les sale ese error de “error while loading shared libraries:…” se debe principalmente a que las librerías recién instaladas aún no están “actualizadas”. Para hacerlo, basta ejecutar como root lo siguiente:

root@kenobi:/home/hbautista# ldconfig
Y si después de eso no funcionara:
root@kenobi:/home/hbautista# ldconfig.real
Y entonces sí, volver a intentar la descarga:
hbautista@kenobi:~/Descargas$ megadl 'https://mega.co.nz/#!tFVFwTYT!7qkLNQHk45J5gAnn-YkOOWBVjq5xn_nAefeklwl8jCk'
Downloaded Vaughan System.part087.rar
hbautista@kenobi:~/Descargas$

 Ahora bien, no tiene para hacer descargas simultaneas, pero podemos abrir varias terminales y ejecutar varias veces el comando, tantas como ustedes (y su conexión a internet) se lo permitan. Pero también me pregunté si podemos pasarle varios enlaces en una misma orden:

hbautista@kenobi:~/Descargas$ megadl 'https://mega.co.nz/#!ZcUjzApI!MnJALBLkS9FQptNDi6Ob3OAgIs_xJBuKWaIFXkFocU0' 'https://mega.co.nz/#!MYVSwQhA!ExJ0d2_t2mtZwm8bDQlnBG1F8CaQRdU39OFyZLgtT_M' 'https://mega.co.nz/#!wRdWEBqR!02Zmwza6LJDMLdFOn9R_ZYyHfcYKIxGfMvTegCB9MAI' 'https://mega.co.nz/#!xV9U2TrL!JDo5UQwbNk6kEw96_j_R5bZa2SpE7fHE-y9hQDxy9n8'
Downloaded Vaughan System.part064.rar
Downloaded Vaughan System.part065.rar
Downloaded Vaughan System.part066.rar
Downloaded Vaughan System.part067.rar
hbautista@kenobi:~/Descargas$

 Y pues si, aunque se va descargando de uno en uno, al menos dejas “encolados” varios archivos a la vez.

En fin, si quieren ver que más cosas se pueden hacer con Megatools, les dejo el siguiente video:

Espero publicar más seguido :D

Notas relacionadas:

La entrada Megatools en Debian Jessie aparece primero en Soy un Jedi.

Viernes 16 de mayo de 2014

Planeta Laguna: Apuntes de Instalación de Gentoo Linux en Laptop

Jueves 15 de mayo de 2014

Gustavo Rubio

Gustavo Rubio
Ahí vamos

En casa de herrero, azadon de palo

facebook-no-like-iconDice el refrán que “En casa de herrero, azadón de palo” y hoy recordé dicha frase al buscar proveedores de marketing en la ciudad. Un cliente que está próximo a lanzar un producto por Internet tiene la necesidad de mercadear su bebé por la red de redes y, siendo yo un neófito en el asunto, le aconsejé que lo mejor era acercarnos a los expertos para manejar una campaña de marketing online adecuada ya que para mi las redes sociales son simplemente herramientas de entretenimiento.

Sorpresa me llevé al tratar de sintetizar la oferta local ya que, a pesar de que muchas de estas empresas se promocionan como expertos en social media, manejo de contenido y todo lo que suene a internet + social, pocos estaban al alcance, y no hablo del precio, hablo de su presencia en Internet. Esta es una pequeña reseña de mi aventura.

Dado que yo me dedico al desarrollo de software y de ninguna manera me considero siquiera principiante en las finas artes del marketing y el manejo de branding decidí que hacer sinergia con una empresa (o persona) que se dedique de lleno a esto era la mejor opción, sin embargo, como siempre, es importante definir parámetros antes de decidir que proveedor utilizar, para cualquier necesidad.

Los parámetros de búsqueda

De ninguna manera me atrevería a decirle a alguien que no está en mi área como desempeñarse en su trabajo, es más, creo que ni siquiera a alguien de mi área, de hecho creo que es algo que he aprendido con el paso de los años, como dicen vulgarmente por ahí “Que cada quien se rasque con sus propias uñas” y eso trato de hacer, pero, en este caso, si busco un servicio, definitivamente analizo lo que voy a consumir.

Así que me di a la tarea y decidí buscar de 10 a 12 opciones, las necesidades del cliente son simples:

  • Manejo de redes sociales (community management)
  • Administración de contenidos
  • Reforzar presencia en las mismas
  • Campañas

Para ello, y antes de decidir que empresas podrían ser prospectos, definí los siguientes parámetros:

  1. Empresas locales, de preferencia en Tijuana.
  2. Expertos en el área de marketing o bien, con experiencia comprobable en marketing online.
  3. Portafolio de muestra o información de proyectos.
  4. Carta de presentación.

Después de mi búsqueda terminé con 11 opciones. Seguramente existen más empresas (y freelancers) en el área pero estas fueron las mas alcanzables, o al parecer las que más se encargan de serlo. La mayoría de los puntos se cumplieron salvo uno: la presentación.

La primera impresión es importante

Me parece que es importante “la carta de presentación” y no hablo por supuesto del aspecto físico de los trabajadores, hablo de la primera impresión, y al ser empresas mayoritariamente dedicadas a negocios por medio de Internet me pareció increíble la cantidad de estas que contaban con una pobre presencia en Internet, de estas 11 empresas o personas:

  • 6 tenían su sitio “en construcción o actualización
  • 2 usaban correos de gmail (ej: no tienen empresa.com)
  • Solo 4 mostraban información detallada o desglosada de los servicios que prestan

Por obvias razones descarté prácticamente a la mitad. Lo grave de este asunto es que si su negocio principal es ayudar a otros con su presencia en Internet resulta bastante cuestionable el porque estas mismas no cuentan con dicha presencia. Creo que tener un sitio en línea con un mensaje de “estamos mejorando” o “en construcción” es peor que no tener alguno, en el peor de los casos uno pensaría que el sitio no funciona porque está en mantenimiento pero “avisar” a los prospectos o clientes que no hemos tenido tiempo de actualizar nuestro propio sitio es algo digno de los años 90′s, cuando era válido insertar algo así:

Party like it's 1997

Después de buscar los sitios de las empresas para ubicar su portafolio (y encontrarme con la mayoría con sitios sin utilidad alguna) decidí hacer lo obvio: buscar su información de contacto en Facebook. Como era de esperarse, TODOS tenían presencia en dicha red social, que sea de paso, sigo considerando no es una red social de enlace de trabajo, pero bueno, en este caso se perdona por la naturaleza del proyecto.

Show me the magic

Una vez empecé a revisar los perfiles de facebook me encontré con otro problema que presentía iba a tener: Las muestras de trabajo. Pocos (creo que 2 o 3) tenían algún album o fotos dedicadas a muestras de su trabajo, de los demás solo puedo decir que tuve el gusto (sin sarcasmo, aclaro) de conocer (o stalkear) a los miembros de su equipo; fotos chistosas, memes o diseños preparados para fechas especiales (halloween, día de las madres, san patricio, etc.) pero de la chamba: nada, zero, negativo.

No podría juzgar el trabajo o la calidad de alguien por no tener un portafolio, que creo que es importante para quien esté en el área de diseño / marketing / branding, pero definitivamente sí me brindaría mas confianza. De nuevo, el poder invertir un poco de tiempo en preparar unas muestras de trabajo, quizá las mejores 5 o 10, para que los prospectos las puedan ver, sería algo que estos mismos agradecerían y que seguramente cerraría mas negocios. Yo lo agradecería. Navegar entre fotos de facebook (miles, literalmente) con poca relación a los menesteres de la empresa me parece engorroso y poco práctico.

Ponte serio

Finalmente, aunque soy de los que creen que llevar la imágen corporativa de empresas modernas, y más, relacionadas a tecnologías,  de una manera aburrida o convencional es bastante triste y cosa del pasado, como dice la canción, también creo que separar lo “desenfadado” con la utilidad, practicidad y profesionalismo no está peleado.

Tener un sitio web personalizado no nos asegura buenos resultados, pero introduce confianza. Contar con una dirección de correo profesional, con la imágen de nuestra empresa no mejorará el canal de comunicación, pero sí demuestra entrega profesional y compromiso. Mostrar nuestro trabajo a los demás no nos asegura contratos, pero sí nos muestra como profesionistas con confianza, seguros y orgullosos de lo que hacemos, y finalmente, aunque las redes sociales son grandes herramientas de comunicación y quien las niegue se mostraría necio a la evolución en la manera de hacer negocios de hoy, no me parece el medio más apropiado como canal de venta y de engagement de clientes. Muchos no estamos dispuestos a compartir nuestra privacidad con otras personas, mucho menos empresas, solo para pedir información, al menos yo no lo hago.

No hard feelings

Espero que quien lea estas líneas no se sienta ofendido, porque, como comenté, y por obvias razones, si estoy buscando proveedores de servicios de marketing online, esperaría mucho más de lo que encontré. Sería muy extraño contratar a un rotulista sin anuncio en su changarro, a un vendedor de celulares que no tiene saldo o ser paciente de un médico que le aterra la sangre.

Todos tenemos detalles en nuestras profesiones y empresas, no estoy excento de ello. Aprovecho para saludar a toda la banda de diseño, comunicación y mercadología, que no son pocos y sin los cuales por supuesto poco venderíamos o inovaríamos en la manera en que penetramos o creamos mercados y todo sería igual de aburrido que hace 500 años.

PD: Por obvias razones NO publicaré los nombres de empresas / personas. Esto es una simple reflexión y crítica personal (espero) constructiva.

 

Martes 13 de mayo de 2014

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

News from the .NET World

Some great announcements today from the Microsoft world.

#1 Open Source ASP.NET stack

The first one is that Microsoft's next generation web stack (ASP.NET vNext) is open source from the ground up, and runs on Mono on both Linux and Mac.

There are plenty of other design principles in this new version of ASP.NET. I provide a translation from Microsoft speak into Unix speak in parenthesis:

  • Cloud-ready out of the box (this is code name for "can run with different versions of .NET side by side").
  • A single programming model for Web sites and services
  • Low-latency developer experience (Refresh on browser recompiles)
  • Make high-performance and high-productivity APIs and patterns available - enable them both to be used and compose together within a single app.
  • Fine-grained control available via command-line tools and standard file formats.
  • Delivered via NuGet (package manager, similar to Node's NPM or Ruby Gems).
  • Release as open source via the .NET Foundation.
  • Can run on Mono, on Mac and Linux.

Update: And the software is live at http://github.com/aspnet

Client Libraries to Microsoft Services

They are shipping a number of new components to talk to their online services, and they all have a license suitable for being used from platforms other than Windows.

Sábado 10 de mayo de 2014

Aldo Rivadeneira

Aldo Rivadeneira
Solo un log » linux

Planetalinux

Como el Fenix…

Bueno después de un rato de no saber ¿por que?, como llego, se fue, lo que si puedo decir es que a pesar de que hay muchos feeds estos se reúnen en un punto de calidad, es un circulo reducido de las personas que realmente saben del tema hablando de linux SL y demás, al menos en mi opinion. Y bueno estas pocas lineas son para reconocer el proyecto de ya que como muchos creemos, al menos como lo he visto por comentarios es muy importante para la comunidad.

planetalinux


Viernes 09 de mayo de 2014

Planeta Laguna: 17 años sin armar un modelo.

Miércoles 07 de mayo de 2014

Planeta Laguna: Usando Chromecast.

Lunes 05 de mayo de 2014

Miguel Barajas

Miguel Barajas
GnuOwned's Blog

How to access Token Authentication SOAP Services with Python and SUDS

This is my first post about Python, I’m not a developer, I’m new at Python, but I had the need to integrate some SOAP webservices and I don’t like Java.

I’m using this to use HP Matrix Operating Environment 7.2.1 API v6.

So I figure out how to Authenticate to a SOAP services when it ask for a UserToken and a Timestamp, so here are the Instructions:

  1. Install Eazy_Install
  2. Install SUDS: eazy_install suds
  3. Create connection.py file with this content
  4. Create yourscript.py with this content as example
  5. Start hacking :-)

Please feel free to leave a comment if  you have any question.

Happy hacking

The Open Enchilada Project: Open Enchilada 7.5: Evento Microsoft Open