Sábado 28 de febrero de 2015

Pogoplug: instalar Debian a la NAS más barata del mundo

Pogoplug es uno de esos dispositivos que son geniales por si mismos y que pocas personas sospecharían que lo que da vida a tan diminuto dispositivo es un Linux embebido.

pogoplugv4.jpg

Pogoplug v4

Los Pogoplug son unos dispositivos que una empresa distribuye como una “solución barata para una NAS-in-Cloud”, donde tenemos un sistema centralizado de respaldo que luego sube a la nube privada de la empresa.

Sin embargo, cuando lees sus especificaciones:

  • arch: armel (armv5tel)

Architecture: ARMv5te
Processor: Marvell Kirkwood 800MHz 88F6281
RAM: 128MiB DDR2 (@400MHz?)
Storage: 128MiB NAND Flash
Network: Gigabit Ethernet
Ports: (1) SATA II, (2) USB 3.0, (1) USB 2.0, (1) SD Card
Other Features: Cryptographic Engine, XOR Engine

¡oh!, un Marvell Kirkwood, parecido al del Guruplug (del cual ya tengo uno corriendo Debian):

guruplug_server_banner2.jpgAunque tiene menos velocidad, menos RAM, este viene con un puerto SATA2, 2 puertos USB3, 2 puertos USB2 y un slot SD, además de un puerto Gigabit y un engine criptográfico en el SoC.

$_12.JPG

Lo mejor de todo, es que pueden conseguir un equipo de estos NUEVO por menos de 20US$ en ebay! (eso es más barato incluso que una Raspberry-pi).

Descubriendo el Pogoplug

No tiene botón de encendido, simplemente lo enchufamos (por algo forma parte de lo conocido como “Plug Computer”), lo conectamos a la red Ethernet y esperamos a que encienda, luego, reviso mi enrutador para ver qué IP le asignó:

  • Buscar en el DHCP:
    Pogoplug               00:25:31:05:0C:FC              192.168.1.102                 23:56:49

Veo que le asignó la IP 192.168.1.102, con eso, habilitamos el acceso SSH al equipo de la siguiente manera:

* Enable SSH
curl -k "https://root:ceadmin@192.168.1.102/sqdiag/HBPlug?action=command&command=dropbear%20start";

Y luego ya podemos entrar por SSH.

  • Enter to SSH
ssh root@192.168.1.102

user: root
passwd: ceadmin

  • Detener el servicio de my.pogoplug.com (stop my.pogoplug.com service)
killall hbwd
  • Descargar firmware y utilities (download firmware utilities)
cd /tmp
wget http://download.doozan.com/uboot/nanddump
wget http://download.doozan.com/uboot/nandwrite
wget http://download.doozan.com/uboot/flash_erase
wget http://download.doozan.com/uboot/fw_printenv

Thanks to: http://forum.doozan.com/

NOTA: por mi propia seguridad (no confío en mi Internet), yo descargué todo lo necesario (utilities, uboot, env settings) en mi portátil y luego los transferí al pogoplug usando SCP.

scp * root@192.168.1.102:/tmp/

Con eso garantizo que todo lo descargué correctamente (eso y las verificaciones md5 de algunos de los paquetes que se encuentran en el forum de doozan).

  • Hacerlos ejecutables:
chmod +x flash_erase fw_printenv nanddump nandwrite fw_setenv
cp fw_printenv fw_setenv
  • re-montar ‘/’ as como rw (por lo general, ‘/’ es solo lectura)
mount -o remount,rw /
  • configurar fw_env.config
echo "/dev/mtd0 0xc0000 0x20000 0x20000">/etc/fw_env.config
  • descargar el uboot
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.pogo_v4.bodhi.tar
  • y extraer el uboot
tar -xf uboot.2014.07-tld-1.pogo_v4.bodhi.tar

ADVERTENCIA: a partir de este punto pudieran dejar inservible el pogoplug!, no nos hacemos responsables por comandos mal escritos y/o ejecutamos, tomen muy en cuenta los comandos acá escritos.

* Borrar y luego flashear el uboot nuevo al pogoplug:

/tmp/flash_erase /dev/mtd0 0 4
/tmp/nandwrite /dev/mtd0 /tmp/uboot.2014.07-tld-1.pogo_v4.mtd0.kwb
  • descargar default uboot env settings
wget http://download.qnology.com/pogoplug/v4/uboot.2014.07-tld-1.environment.img.bodhi.tar
  • extraer uboot.2014.07-tld-1.environment.img.bodhi.tar
tar -xf uboot.2014.07-tld-1.environment.img.bodhi.tar
  • flash default uboot env setting
/tmp/flash_erase /dev/mtd0 0xc0000 1
/tmp/nandwrite -s 786432 /dev/mtd0 uboot.2014.07-tld-1.environment.img
  • Definir la mac address del equipo (está en el fondo del aparato):
/tmp # cat /sys/class/net/eth0/address
00:25:31:05:0c:fc
/tmp/fw_setenv ethaddr "$(cat /sys/class/net/eth0/address)"
  • verificar la mac address:
/tmp # /tmp/fw_printenv ethaddr
ethaddr=00:25:31:05:0c:fc
  • Definir archNumber and machine ID:
/tmp/fw_setenv arcNumber 3960
/tmp/fw_setenv machid F78

NOTA: Cuando usan el arcNumber 3960 (pogoplug) funciona la Ethernet y el puerto USB2 superior para arrancar, cuando se usa el arcNumber 2097 (SheevaPlug), los USB3 no funcionan porque el PCIe is está inicializado, pero la red Giga-E funciona. cuando se usa el arcNumber 1681 (de un RD-88F6192-NAS), USB3 funciona perfecto pero no la red Giga-E.
NOTA2: en el Pogoplug 4, solo se puede arrancar desde la SD o desde el puerto USB2, los puertos USB3 no son booteables.

  • definir rootfs file system type
/tmp/fw_setenv usb_rootfstype ext3

* Y definir el layout de particiones:

/tmp/fw_setenv mtdparts 'mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)'
  • revisamos los parametros de entorno del equipo (verificar que no hay errores):
/tmp/fw_printenv

Ejemplo de salida:

ipaddr=192.168.0.231
serverip=192.168.0.220
baudrate=115200
bootcmd=run bootcmd_usb; run bootcmd_mmc; run bootcmd_sata; reset
bootcmd_mmc=run mmc_init; run set_bootargs_mmc; run mmc_boot
bootcmd_sata=run sata_init; run set_bootargs_sata; run sata_boot;
bootcmd_usb=run usb_init; run set_bootargs_usb; run usb_boot;
bootdelay=10
console=ttyS0,115200
device=0:1
ethact=egiga0
if_netconsole=ping $serverip
led_error=orange blinking
led_exit=green off
led_init=green blinking
mainlineLinux=yes
mmc_boot=mw 0x800000 0 1; run mmc_load_uimage; if run mmc_load_uinitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
mmc_init=mmc rescan
mmc_load_uimage=ext2load mmc $device 0x800000 /boot/uImage
mmc_load_uinitrd=ext2load mmc $device 0x1100000 /boot/uInitrd
mmc_root=/dev/mmcblk0p1
mtdids=nand0=orion_nand
partition=nand0,2
preboot_nc=run if_netconsole start_netconsole
rootdelay=10
rootfstype=ext3
sata_boot=mw 0x800000 0 1; run sata_load_uimage; if run sata_load_uinitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
sata_init=ide reset
sata_load_uimage=ext2load ide $device 0x800000 /boot/uImage
sata_load_uinitrd=ext2load ide $device 0x1100000 /boot/uInitrd
sata_root=/dev/sda1
set_bootargs_mmc=setenv bootargs console=$console root=$mmc_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
set_bootargs_sata=setenv bootargs console=$console root=$sata_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
set_bootargs_usb=setenv bootargs console=$console root=$usb_root rootdelay=$rootdelay rootfstype=$rootfstype $mtdparts
start_netconsole=setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;
stderr=serial
stdin=serial
stdout=serial
usb_boot=mw 0x800000 0 1; run usb_load_uimage; if run usb_load_uinitrd; then bootm 0x800000 0x1100000; else bootm 0x800000; fi
usb_init=usb start
usb_load_uimage=ext2load usb $device 0x800000 /boot/uImage
usb_load_uinitrd=ext2load usb $device 0x1100000 /boot/uInitrd
usb_root=/dev/sda1
ethaddr=00:25:31:05:0c:fc
arcNumber=3960
machid=F78
usb_rootfstype=ext3
mtdparts=mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)
  • Actualizo la IP a la dirección que me entrega el router:
/tmp/fw_setenv serverip 192.168.1.102
/tmp/fw_setenv ipaddr 192.168.1.102
/tmp/fw_setenv if_netconsole 'ping $serverip'
/tmp/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
/tmp/fw_setenv preboot 'run if_netconsole start_netconsole'

En general, solamente hemos actualizado el uboot, ahora, vamos a descargar el uboot de un dockstar original, esto es, si el pogoplug no encuentra el sistema operativo en el pendrive USB conectado en USB2, entonces arrancará este uboot.

  • descargar original uboot
cd /
wget http://download.doozan.com/uboot/files/uboot/uboot.mtd0.dockstar.original.kwb
  • Actualizar el boot order para incluir el pogoplug OS uboot:
/tmp/fw_setenv bootcmd 'run bootcmd_usb; run bootcmd_mmc; run bootcmd_sata; run bootcmd_pogo; reset'

El orden de arranque será:

  1. Arranque por el SO del USB2
  2. Arranque por el SO de la SD card
  3. Arranque por el SO del Disco duro SATA2
  4. Arranque por el SO original del pogoplug
  5. Si nada de esto funciona, reiniciar
  • Y definir quien es bootcmd_pogo:
/tmp/fw_setenv bootcmd_pogo 'if ubi part root 2048 && ubifsmount ubi:rootfs && ubifsload 0x800000 uboot.mtd0.dockstar.original.kwb ; then go 0x800200; fi'

Preparando el pendrive USB para el sistema Debian

Yo tengo un pendrive USB de 16GB que he particionado de la siguiente manera:

Captura de pantalla de 2015-02-24 14:35:24.png

Para ello usé parted, de la siguiente manera:

parted /dev/sdc
(parted) mkpart 
Partition type? primary/extended? primary 
File system type? [ext2]? ext3 
Start? 2048s 
End? 10G 
(parted) print 
Model: SanDisk Ultra Fit (scsi)
Disk /dev/sdc: 16,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
 1 1049kB 10,0GB 9999MB primary
(parted) align-check optimal 1 
1 aligned

La idea de que usemos en alineamiento de particiones, es que se puedan alinear a valores ideales de bytes, esto obviamente optimiza el proceso de lectura/escritura del dispositivo.

Quedando de esta manera.

Model: SanDisk Ultra Fit (scsi)
Disk /dev/sdc: 31266816s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
 63s 2047s 1985s Free Space
 1 2048s 19531775s 19529728s primary
 2 19531776s 31266815s 11735040s extended lba
 5 19533824s 27342847s 7809024s logical
 6 27342849s 31264768s 3921920s logical
 31264769s 31266815s 2047s Free Space
  • Desactivamos el chequeo de la partición:
tune2fs -c 0 -i 0 /dev/sdc1

Y la partición final la convertimos en SWAP

mkswap /dev/sdc6
swapon /dev/sdc6
  • Descargamos y extraemos el sistema Debian en el pendrive:
cd /media/usb0

wget http://download.qnology.com/pogoplug/v4/Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2

tar -xjf Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2

rm Debian-3.14.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2

Y listo!, ya tenemos el USB con Debian básico.

Primer inicio

Apagamos el pogoplug (lo desenchufamos).

Quitamos la tapa superior (que deja expuesto el puerto USB2 y el SATA-port):

 

Pogoplug_Series_4_35099306_04_1_610x458.jpg

Pogoplug 4 without cap

 

Conectamos el pendrive en el puerto USB superior y encendemos el equipo.

Conectándonos al pogoplug

Para conectarnos al pogoplug será igual por SSH:

ssh root@192.168.1.102

Veremos:

# ssh 192.168.1.102
The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.
RSA key fingerprint is 7e:1f:cb:98:00:61:a6:08:82:09:16:f5:bc:c7:76:36.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.102' (RSA) to the list of known hosts.
root@192.168.1.102's password: 
Linux debian 3.14.0-kirkwood-tld-1 #1 PREEMPT Tue Apr 1 22:54:58 PDT 2014 armv5tel
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Apr 15 17:03:23 2014 from 192.168.0.100

root@debian:~#

El equipo se llama “debian” el usuario es “root” y la clave es “root”.

Configuración básica del Debian en el pogoplug

  • Definimos un nuevo hostname:
echo plug > /etc/hostname
echo "127.0.1.1 plug plug.devel.local" >> /etc/hosts
  • Definimos nuestra zona horaria:
tzselect

o

dpkg-reconfigure tzdata

En todo caso, mi zona horaria es “America/Caracas” (opción 2/51 en tzselect).

Y verificamos:

root@debian:~# date
Tue Feb 24 14:55:04 VET 2015
root@debian:~# uname -a
Linux debian 3.14.0-kirkwood-tld-1 #1 PREEMPT Tue Apr 1 22:54:58 PDT 2014 armv5tel GNU/Linux
root@debian:~# uname -r
3.14.0-kirkwood-tld-1
  • Configuro el APT:

disable apt sources.list base

sed -i 's/^deb/#deb/' /etc/apt/sources.list

erase all .list repositories

rm -f /etc/apt/sources.list.d/*.list
cat <<E_O_APT > /etc/apt/sources.list.d/wheezy.list
deb http://http.debian.net/debian/ wheezy main contrib non-free
deb http://http.debian.net/debian/ wheezy-backports main contrib non-free
E_O_APT
cat <<EOF > /etc/apt/apt.conf.d/80-update
Acquire::Check-Valid-Until "false";
EOF
cat <<EOF > /etc/apt/apt.conf.d/10-Debian
Acquire::Language "none";
Acquire::PDiffs "false";
APT::Install-Recommends "false";
APT::Get::AutomaticRemove "true";
APT::Clean-Installed "true";
EOF

actualizo apt

apt-get update
apt-get upgrade
  • Configuro las locales:
apt-get install locales util-linux-locales
root@plug:~# export LANG=C
root@plug:~# export LANGUAGE=es_VE:es

Abrir el archivo:

vim.tiny /etc/locale.gen

descomentar:

en_US.UTF-8 UTF-8
es_VE.UTF-8 UTF-8

Y ejecutar:

locale-gen

O en su defecto:

dpkg-reconfigure locales
  • Instalo un par de utilidades:
apt-get install pciutils usbutils
apt-get install ethtool hdparm

Actualizo dichas utilidades:

update-pciids
update-usbids
  • E instalo el último kernel desde backports:
apt-get -t wheezy-backports install linux-image-3.16.0-0.bpo.4-kirkwood initramfs-tools

A partir de este momento, tenemos un equipo listo para ser optimizado y utilizado en muchas cosas, en mi caso, mi pogoplug contiene:

  • lighttpd con el disco SATA de mi mirror Debian
  • NFS y iSCSI con el disco SATA de 320GB conectado en la bahía
  • el resto del pendrive en una partición XFS para respaldos vía SSH
  • En cada puerto USB, una impresora y CUPS instalado

Estaré escribiendo sobre cómo optimizarlo (mejorar su rendimiento, sobre todo el kernel y la red) y como aprovecharlo para que se convierta en nuestro servidor de archivos e impresoras de la red local.

Actualización: hay una forma de conectarle un puerto COM al pogoplug y luego un cable USB-to-TTL para así conectarse vía telnet en caso de algún problema con el equipo, aunque al mio no tuve necesidad de hacerlo, en lo que consiga la receta la publico por acá.

Happy Hacking!

The post Pogoplug: instalar Debian a la NAS más barata del mundo appeared first on Phenobarbital con Soda.

Migrando correos IMAP usando dovecot, imapsync o imapcopy

Esta semana me tocó migrar un servidor de correo IMAP viejo hacia un nuevo servidor, decidí documentar 3 de las herramientas que uso para migrar y sincronizar entre buzones para aquellos que tengan dudas, dichas herramientas son imapsync, doveadm e imapcopy.

La primera es revisaremos es doveadm.

Doveadm: migrando diferentes formatos  de buzones

Doveadm es un comando administrativo de Dovecot, si usan dovecot como servidor IMAP (como yo) sabrán que dovecot soporta diferentes espacios de buzones IMAP e incluso diferentes dialectos de buzón (mbox, dbox, maildir, maildir+) y doveadm es una herramienta interesante para migrar desde diferentes formatos físicos de buzones.

¿Cuándo usar doveadm?

Cuando tenemos un respaldo físico de los buzones, más no tenemos ningún servidor disponible, doveadm leerá directamente el archivo/directorio físico del buzón y lo inyectará en el servidor local/remoto que le indiquemos.

Veamos un ejemplo:

He creado un directorio (/srv/viejocorreo/) donde he copiado unos viejos “mbox” (formato: mailbox) de unos usuarios, tenían 2 mbox, uno para el INBOX y otro para sus carpetas personales, entonces el comando es bastante sencillo, simplemente ejecuté en el servidor dovecot:

doveadm -v sync -u soporte@phenobarbital.info -f mbox:/srv/viejocorreo/home/soporte/mail:INBOX=/srv/viejocorreo/inbox/soporte

El comando es bastante simple, pide una sincronización (sync) de la cuenta (-u) soporte@phenobarbital.info con el contenido de los buzones que están declarados luego de “-f”, en este caso, un mbox: y el mail:INBOX, y listo!.

¿Qué hace dovecot?, simplemente dovecot usará el proceso dovecot-deliver para “inyectar” todo correo que consiga en los mailboxes al usuario indicado.

¿Sencillo no?

¿Y qué pasa si no tengo acceso físico a los buzones?, he allí donde entran imapsync e imapcopy.

IMAPSYNC

Prefiero imapsync, es una herramienta muy madura, muy estable, está escrita en perl, por desgracia, ya no está empaquetada para Debian y hay que instalarla desde un fuente.

Pero tranquilos, su instalación es sencilla:

Instalamos las dependencias:

apt-get install libdate-manip-perl libterm-readkey-perl libterm-readkey-perl libdigest-hmac-perl libdigest-hmac-perl libdate-manip-perl libmail-imapclient-perl makepasswd rcs perl-doc git libunicode-map-perl libunicode-string-perl

Luego, clonamos el fuente e imapsync:

git clone git://github.com/imapsync/imapsync.git
cd imapsync

Ejecutamos la instalación de las dependencias de imapsync (vía cpan):

sh examples/install_modules_linux.sh

(NOTA: si desean saber si CPAN está activo en su distribución, ejecuten:

perl -MCPAN -e shell)

Compilamos:

make install

El proceso de instalación se verá así:

make install
perl -c imapsync || { echo; echo "Read the INSTALL file to solve Perl module dependencies!"; exit 1; }
imapsync syntax OK
pod2man imapsync > imapsync.1
mkdir -p /usr/bin
install imapsync /usr/bin/imapsync
chmod 755 /usr/bin/imapsync
mkdir -p /usr/share/man/man1
install imapsync.1 /usr/share/man/man1/imapsync.1
chmod 644 /usr/share/man/man1/imapsync.1

Y ya tenemos instalado imapsync.

Usando imapsync

Para usar imapsync ejecutamos el siguiente comando:

imapsync --authmech1 LOGIN --host1 <source_hostname> --user1 <source_username>--password1 <source_password> --authmech2 LOGIN --host2 <target_hostname> --user2 <target_username> --password2 <target_password>

Donde:

–authmech: significa el mecanismo de autenticación IMAP (LOGIN, PLAIN, NTLM, etc)

–host1: servidor de origen de los correos

–user1: usuario origen de los correos

–password1: clave del usuario1

Y se repite lo mismo para el destino (host2, user2, password2, authmech2, etc).

En mi caso específico, usé imapsync para migrar entre servidores IMAPS (imap seguro), entonces el comando quedó así:

imapsync --authmech1 LOGIN --host1 <source_hostname> --ssl1 \
 --port1 993 --authmech2 LOGIN --host2 <target_hostname> -user1 <username> --password1 <password> --user2 <username> --password2 <password> --ssl2 \
 --port2 993 --noauthmd5 --nosyncacls --syncinternaldates --allowsizemismatch --subscribe_all

Además, como bash “todo lo puede”, me hice un breve script que carga la lista de direcciones y claves desde un archivo de texto, permitiendo automatizar la migración de muchos buzones:

#!/bin/bash
# sincronizar correo entre servidores desde una lista
# Authors:
# Jesus Lara <jesuslara@phenobarbital.info>
# version: 2.0
# Copyright (C) 2010 Jesus Lara
oldserver=10.0.0.10
newserver=10.0.0.11
while read p; do
 user=( $p )
 uid=${p%@*}
 pass=${user[1]}
 echo "Migrando correo de usuario ${uid}"
 /usr/bin/imapsync --authmech1 LOGIN --host1 $oldserver --authmech2 LOGIN --host2 $newserver --user1 $uid --password1 $pass --user2 $uid --password2 $pass --
syncinternaldates --allowsizemismatch --subscribe_all
 if [ $? -eq 0 ]; then
 echo "migracion de ${uid} completa"
 else
 echo "ERROR en buzon ${uid}"
 echo "${uid} >>error_buzon.log"
 fi 
done<migrar_correo.txt
 
echo "Migracion completa."
exit 0

Nota: Pueden descargar el script desde este gist: https://gist.github.com/phenobarbital/2380a0e9e1f1d07e1c42

Usando IMAPCOPY

Una herramienta ya empaquetada en Debian se llama imapcopy, sirve a los mismos propósitos que imapsync, no es tan completa (por ejemplo, no soporta SSL) y requiere un archivo de configuración para ejecutarse.

Para tener imapcopy simplemente instalamos:

apt-get install imapcopy

Y creamos su archivo de configuración:

vim /etc/ImapCopy.cfg

Archivo: /etc/ImapCopy.cfg

SourceServer 10.0.0.10
SourcePort 143
DestServer 10.0.0.11
DestPort 143
# SourceUser SourcePassword DestinationUser DestinationPassword
Copy "jesuslara@phenobarbital.info" "superpassword" "jesuslara@phenobarbital.info" "superpassword"

Entonces, indicamos servidor origen, servidor destino y en una linea, el buzón origen y destino que vamos a sincronizar.

Luego de creado el archivo de configuración, simplemente ejecutamos:

imapcopy

Y comienza el proceso de migración.

Podemos, agregar entre las opciones a “skipfolder INBOX.Trash” para evitar que copie la papelera de todos los usuarios a copiar o “DebugDst” y “DebugSrc” si deseamos ver la salida del proceso de migración.

Nota: pueden usar stunnel para crear un tunel SSL entre los servidores IMAPs y así poder usar imapcopy.

The post Migrando correos IMAP usando dovecot, imapsync o imapcopy appeared first on Phenobarbital con Soda.

Viernes 27 de febrero de 2015

Jesus Palencia

Realidad virtual en Firefox

Mozilla se suma al mundo de la realidad virtual, por lo que incorpora ahora a sus ediciones Nightly y Developer la capacidad para ejecutar funciones de realidad virtual en el propio navegador.

Anteriormente, los usuarios y creadores de contenido tenían que descargar un build separado de Firefox que a veces retrasaba las actualizaciones. A partir de ahora, las capacidades de la realidad virtual se desarrollarán junto con otras actualizaciones de Firefox.

Hasta el momento, la novedad solo funciona con las gafas de Oculus, las Oculus Rift, aunque Mozilla planea añadir pronto soporte para Linux, Android y Cardboard, de Google.

Mozilla está trabajando también con la API experimental WebVR, que facilita la conexión entre navegadores y dispositivos de realidad virtual, “mejorando, por ejemplo, el tiempo que transcurre desde que el usuario realiza un movimiento de cabeza hasta que lo que se ve en el navegador se corresponde con el mismo, eliminando así la sensación de simulación”.

Los pasos para experimentar el contenido WebVR con Firefox son los siguientes:

Gracias a Mozilla ahora los usuarios contamos con otra forma de visualizar contenido y los desarrolladores con una herramientas que facilitará la creación de aplicaciones.

Referencias:

 


Archivado en: Mozilla Tagged: firefox, oculus, rift, VR
Jesus Palencia

Firefox OS: Firefox Marketplace Cap. 4

Enlace al vídeo en Youtube

Anteriormente:

 


Archivado en: Mozilla Tagged: firefoxos, market, mozillahispano

Miércoles 25 de febrero de 2015

Jesus Palencia

Hackers en la Defcon

Enlace al vídeo en Youtube


Archivado en: Documentales Tagged: defcon, hackers

Domingo 22 de febrero de 2015

Instalando phpMyAdmin en Debian Wheezy

Saludos a todos

Hace un tiempo publique como instalar un servidor de base de datos MySQL en Debian, en esa oportunidad explicaba como instalar y configurar el servicio del servidor MySQL desde la linea de comando, ahora le ofrezco como administrar gráficamente este servicio de base de datos para usando una herramienta gráfica y Web llamada phpMyAdmin.

phpMyAdmin

phpMyAdmin

Instalación

Para la instalar phpMyAdmin solo requiere ejecutar el siguiente comando:

# aptitude install phpmyadmin

Uso

Luego que termine la instalación de phpMyAdmin puede usarlo accediendo por medio del navegador Web de su preferencia a la dirección http://localhost/phpmyadmin

Bienvenido a phpMyAdmin

Bienvenido a phpMyAdmin

Para acceder a administrar sus base de datos usted allí debe colocar el nombre de usuario y contraseña de MySQL, entonces le mostrar una pantalla principal de gestión de base de datos Web de phpMyAdmin.

Configuraciones generales de phpMyAdmin

Configuraciones generales de phpMyAdmin

De esta forma puede administrar sus base de datos de forma gráfica y a través de la Web usando el navegador de su preferencia.

Ver también

Le recomiendo consultar el siguiente enlace para complementar el conocimiento adquirido en esta entrada en mi blog.

Espero sea de utilidad esta entrada en mi blog.

Ayúdame a seguir escribiendo en mi blog y dona 1 dolar aquí.


Instalación de paquetes Python con Distribute y pip

Previamente explique como hacer instalar paquetes Python con setuptools y EasyInstall y ahora le presento la manera actualmente mas recomendada para instalar paquetes Python con las herramientas Distribute y pip.

Introducción

Python

Python

Python, Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible. Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y multiplataforma.

¿Qué es Distribute?

Distribute es un conjunto de mejoras en el módulo de la biblioteca estándar de Python: distutils (para Python 2.3.5 y hasta en la mayoría de las plataformas, plataformas de 64 bits requieren como mínimo de Python 2.4) que le permite crear con más facilidad la distribución de paquetes de Python, en especial los que tienen las dependencias de otros paquetes.

Distribute se creó porque el paquete Setuptools actualmente ya no se mantiene. Los paquetes de terceros, es probable que requieran setuptools, que es proporcionado por el paquete Distribute. Por lo tanto, en cualquier momento si los paquetes dependen del paquete SetuptoolsDistribute intervendrá para decir que ya ofrece el módulo de setuptools.

Move from Setuptools to Distribute

Estado actual del Empaquetamiento en Python

El módulo distutils es parte de la librería estándar de Python y aun lo será hasta la versión Python 3.3.

Nota: El módulo distutils será descontinuado en Python 3.3.

El módulo distutils2 (note el número dos) tendrá compatibilidad hacia atrás hasta Python 2.4 en adelante; y será parte de la librería estándar en la versión Python 3.3.

El módulo distutils provee las bases para empaquetar aplicaciones Python. Desafortunadamente, el módulo distutils está plagado de problemas, razón por la cual un pequeño grupo de programadores de Python están trabajando en distutils2. Sin embargo, hasta que distutils2 este completado, se recomienda que en el desarrollador pueda usar tanto el paquete distutils como el paquete Distribute para empaquetar software Python.

Al mismo tiempo, si un paquete requiere el paquete Setuptools, la recomendación es que instale el paquete Distribute, el cual provee una versión más actualizada del paquete Setuptools que el paquete original de Setuptools.

En el futuro distutils2 remplazará a setuptools y distutils, le cual también removerá la necesidad de Distribute. El como del estado anterior distutils será removido de la librería estándar. Para más información, por favor, consulte el Futuro del Empaquetado en Python.

El estado actual de Empaquetado en Python

Consejo

Ver el vídeo de la PyCon 2011 – Packaging, from Distutils to Distutils2, Packaging or installing a Python application can be extremely painful por Tarek Ziadé esta charla le sumergiera dentro de las nuevas características de Distutils2 y explica como usted puede usarlo en su proyecto hoy para hacer más fácil la vida para todo el mundo (usuarios, administradores de paquetes de Sistemas operativos, programadores, etc.).

Para descargar el vídeo haga clic aquí (Tamaño 294 mb) y para ver por vídeo Stream haga clic aquí.

¿Qué es pip?

pip es una herramienta para instalar y administrar Paquetes Python, como los que podemos encontrar en el Índice de Paquetes de Python – PyPI.

Truco

Esta herramienta es el remplazo para la famosa herramienta easy_install.

En su mayoría, pip utiliza las mismas técnicas para encontrar los paquetes, por lo que los paquetes que se instalaban usando la herramienta easy_install  también deben ser instalables con la herramienta pip.

Esto significa que usted puede utilizar con el siguiente comando:

$ pip install AlgunPaquete

En lugar del tradicional comando usado con la herramienta easy_install como se describe a continuación:

$ easy_install AlgunPaquete

pip comparado con easy_install

pip ofrece mejoras a la herramienta easy_install. Algunas de las mejoras son:

  • Todos los paquetes se descargan antes de iniciar la instalación. Una instalación parcialmente completada no se produce como resultado.
  • Tiene cuidado de presentar una salida útil en la consola.
  • Las razones de las acciones de instalación se le aplica un seguimiento. Por ejemplo, si un paquete se está instalando, pip sigue la pista de por qué ese paquete era necesario.
  • Los mensajes de error debe ser útiles.
  • El código fuente es relativamente conciso y coherente, por lo que es más fácil de usar mediante programación.
  • Ofrece soporte nativo para otros sistemas de control de versiones (Git, Mercurial y Bazaar)
  • Tiene un mecanismo de desinstalación de paquetes.
  • Fácil de definir conjuntos de requerimientos y reproducir de forma fiable un conjunto de paquetes.
  • Los paquetes no tienen que ser instaladas como archivos de huevo, que pueden ser instalados en forma plana (mientras cuida la metadata de paquetes Egg).

pip no hacer todo lo que se easy_install. En concreto:

  • No se puede instalar a partir de paquetes Egg. Sólo se instala desde el código fuente. (En el futuro será bueno si se pudiera instalar los binarios de Windows EXE o MSI -.. pero instalar paquetes binarios para otras plataformas no es una prioridad).
  • No entiende la sección SetupTools Extras (como package[test]). Esto podría ser agregado eventualmente.
  • Es incompatible con algunos paquetes que tienen muchas personalizaciones distutils o setuptools en sus archivos setup.py.

Instrucciones de Instalación

Siempre existen más de dos formas de instalar paquetes Python con Distribute y pip ;)

Requerimientos previos

Es necesario que instale ciertas dependencias en su sistema operativo como las que se muestran a continuación:

# aptitude install build-essential python-dev python-setuptools

Instalación con Paquetes Egg

Para instalar Distribute ejecute el siguiente comando:

# easy_install -U distribute

También para instalar pip ejecute el siguiente comando:

# easy_install -U pip

Instalación en sistemas Debian

La instalación en sistemas Debian es recomendable que instale ciertas dependencias en su sistema operativo como las que se muestran a continuación:

# aptitude install build-essential python-dev python-pip

Ejemplos de uso de pip

El script pip ofrece varias formas de uso, para instalar los paquetes de diversas fuentes:

Consejo: Para poder utilizar el pip, primero debe instalar setuptools o distribute. Si utiliza virtualenv, una copia del pip será automáticamente instalados en cada entorno virtual que usted crea.

easy_install se puede complementar con virtualenv, y se recomienda que lo utilice para aislar a la instalación de los paquetes Egg.

Ejemplo 1. Instalar un paquete su nombre en su versión más reciente, buscando en PyPI:

$ pip install SQLObject

Ejemplo 2. Instalar o actualizar un paquete por nombre y versión utilizando una dirección URL donde encontradas en una “página de descargas”:

$ pip install -f http://dist.plone.org/packages/ 'Pillow==1.7.3'

Ejemplo 3. Instalar o actualizar un paquete desde su propio replica del repositorio PyPI o su repositorio de paquetes Egg privados:

$ pip install -i http://pypi.ejemplo.com/simple SQLObject

Ejemplo 4. Descargar e instalar una distribución de código fuente:

$ pip install http://ejemplo.com/ruta/a/MiPaquete-1.2.3.tgz

Ejemplo 5. Instalar un paquete con una versión especifica:

$ pip install 'ZopeSkel==2.21.2'

Ejemplo 6. Instalar todas las dependencias de mi proyecto Python usando un archivo de dependencias requeridas para instalar:

$ pip install -r ./requirements.txt

Un ejemplo del archivo requirements.txt puede ser el siguiente:

python-ldap
django
buildbot
buildbot-slave
PyYAML
south

Ejemplo 7. Actualizar un paquete ya instalado con la versión más reciente de PyPI:

$ pip install --upgrade PyProtocols

Ejemplo 8. Para usar realizar búsquedas de paquetes disponibles para instalar desde los repositorios por definidos:

$ pip search plonetheme-*

Ejemplo 9. Para remover un paquete Egg

$ pip uninstall SQLObject

Para más información consulte la ayuda disponible por que paquete pip ejecutando el siguiente comando:

$ pip help

Distribute en zc.buildout

Puede usar Distribute en zc.buildout, habilitando el uso de este por medio de un parámetro adicional en su archivo bootstrap.py de la siguiente manera:

$ python bootstrap.py --distribute

pip en zc.buildout

Existen varias estrategias para integrar pip en zc.buildout, a continuación se describen algunas formas:

gp.recipe.pip, ese paquete es un récipe de zc.buildout el cual permite instalar Paquete Python usando pip. A continuación se explica un ejemplo de configuración zc.buildout con este récipe se puede usar:

  1. El récipe agrega un virtualenv en el directorio parts/ de su instalación buildout, entonces genera este binario para generar un scripts ejecutable Python. Así que tienes un área de pruebas limpia de instalaciones previas.
  2. El récipe esta basado en zc.recipe.egg#scripts para que pueda compartir sus paquetes Egg entre buildouts como de costumbre.
  3. Por supuesto, usted puede instalar algunos archivos .pybundle.
  4. Usted puede construir paquetes desde un repositorio SVN con la opción editables.
  5. Cada linea encontrada en la opción install es la última parte de un comando de pip. Esta le permitirá a usted construir paquetes Egg con sus dependencias. Por ejemplo, instalar la librería lxml en un área de prueba pura, sin tener instalado libxml2 y libxslt, usted necesita tener instalado Cython y con esta línea de comando python setup.py install --static-deps para instalar el paquete lxml.

A continuación un ejemplo de configuración zc.buildout:

[buildout]
# the cache dir is used by buildout & pip
download-cache = download
parts = eggs

[eggs]
recipe = gp.recipe.pip

# eggs installed by pip (also add the Deliverance bundle)
install =
    Cython
    --install-option=--static-deps lxml==2.2alpha1

http://deliverance.openplans.org/dist/Deliverance-snapshot-latest.pybundle

# eggs installed by zc.recipe.egg
eggs =
    Paste
    pyquery

Otra forma de usar pip es a través de una extensión zc.buildout llamada gp.vcsdevelop, para hacer checkout de paquetes Egg desde varios sistemas de control de versiones. A continuación se muestra un ejemplo de configuración zc.buildout con esta extensión:

[buildout]
...
extensions = gp.vcsdevelop
develop-dir = ./requirements
requirements = requirements.txt
parts = eggs
...
[eggs]
recipe = zc.recipe.egg
eggs = ${buildout:requirements-eggs}
interpreter = python
...

Un ejemplo del archivo requirements.txt puede ser el siguiente:

ConfigObject>=1.0
-e git+git://github.com/bearstech/PloneTerminal.git#egg=PloneTerminal

Ver también

Le recomiendo consultar las siguientes enlaces para complementar el conocimiento adquirido en esta entrada en mi blog.

Espero sea de utilidad esta entrada en mi blog. Ayúdame a seguir escribiendo en mi blog y dona 1 dolar aquí.

Referencias


Creación de entornos virtuales Python

¿Por que crear entornos virtuales en Python?

Si usted está en un sistema Linux, BSD, Cygwin, u otros similares a Unix como sistema operativo, pero no tienen acceso al usuario root, puede crear su propio entorno virtual (instalación) Python, que utiliza su propia biblioteca de directorios y algunos enlaces simbólicos hacia todo el directorio de instalación del Python de su sistema.

En el caso más simple, su instalación virtual de Python que viven bajo el directorio home del usuario ~/virtualenv/. Utilice la opción –help para obtener la lista completa de las opciones disponibles la herramienta virtualenv.

Cuando haya terminado la creación del entorno virtual, tendrá un ejecutable de python local al usuario que lo creo (por ejemplo ~/virtualenv/python2.6/bin/python) que está vinculado a la instalación del Python de su sistema /usr/bin/python y hereda todas sus librerías actuales, pero además le permite añadir nuevas librerías tanto como usted lo desee.

Sólo tiene que utilizar este nuevo Python en lugar de la instalación Python de su sistema, y puede modificarlo a su gusto sin dañar nada del Python de su sistema operativo. De igual forma usted debe seguir usando las instrucciones de instalación estándar para instalar setuptools y EasyInstall o Distribute y pip, desde su nueva instalación (~/virtualenv/python2.6/bin/python) Python en lugar del Python de su sistema /usr/bin/python.

Entornos virtuales de Python locales al usuario

Para evitar usar la instalación base del Python de tu sistema, que previamente tiene instalada, se recomienda instalar un entorno de virtual de Python local al usuario, algunos casos de usos para virtualenv, se describe a continuación:

  • No es necesarios permisos de administración para instalar librerías y aplicaciones Python, ya que estas se hace locales en al directorio del usuario.
  • Mayor comodidad de trabajar con versiones de librerías y aplicaciones más actuales las que maneja tu sistema.

¿Qué es virtualenv?

virtualenv, es una herramienta para crear entornos virtuales (aislados) en Python.

Modos de Instalación

Para instalar paquete virtualenv en su sistema puede instalarlo con Setuptools, Distribute para paquete Egg o por sistema paquete Debian

Instalación con paquete Debian

Para instalar virtualenv en distribuciones basadas en Debian GNU/Linux como paquete Debian, debe instalar los requisitos previos con el siguiente comando:

# aptitude install libc6-dev python-dev python-virtualenv

Nota: A veces es mejor instalar la versión más reciente del paquete virtualenv desde el repositorio PyPI, debido que siempre la versión de Debian no esta actualizada con respecto a la versión publicada en el repositorio PyPI.

Instalación con Setuptools

Para instalar virtualenv en distribuciones basadas en Debian GNU/Linux con Setuptools, debe instalar los requisitos previos con el siguiente comando:

# aptitude install libc6-dev python-dev python-setuptools

Luego debe instalar la versión más reciente del paquete virtualenv desde el repositorio PyPI, entonces debe instalar con el siguiente comando:

# easy_install virtualenv

Instalación con Distribute

Para instalar virtualenv en distribuciones basadas en Debian GNU/Linux con Distribute, debe instalar los requisitos previos con el siguiente comando:

# aptitude install libc6-dev python-dev python-distribute python-pip

Luego debe instalar la versión más reciente del paquete virtualenv desde el repositorio PyPI, entonces debe instalar con el siguiente comando:

# pip install virtualenv

Creando entornos virtuales de Python locales al usuario

Preparando la estructura de directorios de los entornos locales al usuario local, es una buena practica organizativa más no es un estándar por defecto en la comunidad Python para esto muestro una forma de trabajo y se realizan ejecutando los siguientes comandos:

$ cd $HOME ; mkdir ./virtualenv ; cd virtualenv

Crear entorno virtual del Python 2.6 de tu sistema al directorio ~/virtualenv del usuario, ejecutando el siguiente comando:

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 python2.6

Usar distribute en virtualenv

Opcionalmente puede usar distribute en virtualenv para esto debe ejecutar el siguiente comando:

$ virtualenv --distribute --no-site-packages python2.6

Nota: Este paso de creación del entorno virtual solo se realiza cada ves que necesite crear un entorno virtual nuevo para sus proyectos Python.

Activar el entorno virtual

Activar el entorno virtual creado previamente, ejecutando el siguiente comando:

$ source ~/virtualenv/python2.6/bin/activate

Hasta este momento tiene activada el entorno virtual usted puede verificar esto debido a que su shell de comando inicia con el siguiente prefijo (python2.6), entiendo que este prefijo es el nombre de entorno virtual que usted acaba de activar.

Aquí ya puede usar herramientas como easy_install o pip para instalar paquetes Egg….

Nota: Cada ves que necesite trabajar dentro del entorno virtual necesita activar este mismo.

Desactivar el entorno virtual

Cuando termine de usar el entorno virtual puede desactivarlo de la siguiente forma:

(python2.6)$ deactivate

De esta forma ya puedes realizar operaciones de shell fuera del entorno virtual.

Nota: Cada ves que necesite salirse del entorno virtual necesita desactivar este mismo.

Aprovechamiento

El trabajar con la herramienta le permite tener varios entornos aislados de pruebas tanto en la misma versión de Python 2.6 como en diversas versiones Python, como por ejemplo Python 2.5 y Python 2.6, entre otras más ventajas.

Ver también

Referencias

Nota: Si te gusto este articulo, ayúdame a seguir escribiendo en mi blog y dona 1 dolar aquí.


Code Monkey escrito en Delphi

Si eres programador, probablemente has escuchado la canción Code Monkey, que trata sobre un día de un programador cuyo jefe solo le obliga a escribir código. Pues en el siguiente video, verás la letra de la canción escrita en el lenguaje Delphi al mismo ritmo de la canción y lo mejor de todo es que el código compila, así que disfruta de un rato geek:

Sábado 21 de febrero de 2015

Cálculo de Integrales con Sympy

Contiuando con los artículos sobre la librería Sympy, en los artículos anteriores se toco lo siguiente:




En este artículo se tocará el tema de cálculo de Integrales.

A continuación se ejecuta ipython notebook (si desea cargar el archivo del notebook de este artículo lo puede bajar del siguiente enlace).

El script del tutorial de muestra a continuación:

# coding: utf-8



# In[16]:



#Se importa sympy

from sympy import *

x = Symbol('x')





# In[26]:



diff(5*(x**5)+3*(x**3)-6*x+5,x); #Se calcula la derivada de la funcion 5(x^5)+3(x^3)-6x+5





# In[27]:



integrate(Out[3],x);#Se integra el resultado de la derivada,noten q el resultado es la ecuación de In[3] pero sin el valor constante





# In[19]:



integrate(cos(x)**2+sin(x),x); #Se inte cos(x)**2+sin(x) con respecto a x





# In[20]:



pprint (Integral(cos(x)**2+sin(x),x));#Se muestra la integral de la ecuación anterior





# In[28]:



integrate(Out[27],(x,0,5));#Se calcula el valor de la integral de 0 a 5 de la ecuación de la salida 27 





# In[29]:



integrate(cos(x)**2+sin(x),(x,0,pi));#Se calcula la integral con el rango de 0 a pi





El res

La imagen de la ejecución del notebook se muestra a continuación:

Para una mejor visualización del ejercicio recomiendo ejecutar el notebook del enlace anterior.

Cálculo de derivadas con sympy

En el artículo anterior se explico como calcular límites de funciones, en este artículo se muestra como calcular la derivada.


Se inicia notebook (si desea abrir el archivo que se utilizo para este artículo lo puede encontrar en el siguiente enlace):

$ipython notebook

Puede crear un notebook (o abrir el notebook mencionado en el enlace anterior).

A continuación se muestra el script del calculo de derivadas de 3 funciones diferentes:

#!/usr/bin/env python

# coding: utf-8





#Se importa sympy

from sympy import *





x = Symbol('x')





#Se calcula la derivada de la funcion cos(sin(x^3)) con respecto a x

print diff(cos(sin(x**3)),x)





#Se calcula la derivada de la funcion 5(x^5)+3(x^3)-6x+5

print diff(5*(x**5)+3*(x**3)-6*x+5,x)





#Calcula la derivada ene-sima de x^2+8x-4+sin(2x)

print diff(x**2+8*x-4+sin(2*x),x,2)




Al ejecutar el script se muestra el resultado de la ejecución de los 3 instrucciones print:
-3*x**2*sin(sin(x**3))*cos(x**3)
25*x**4 + 9*x**2 - 6
2*(-2*sin(2*x) + 1)
x,2)

Al ejecutar el script se muestra el resultado de la ejecución de los 3 instrucciones print:
-3*x**2*sin(sin(x**3))*cos(x**3)
25*x**4 + 9*x**2 - 6
2*(-2*sin(2*x) + 1)


A continuación se muestra una imagen del notebook resultante:



A continuación se muestra una imagen del notebook resultante:

Cálculo de límites con la librería sympy

La librería Sympy permite realizar cálculo de límites, derivadas,  integrales entre otras cosas, usando notación simbólica.

La documentación de sympy la pueden revisar en el siguiente enlace.

Para instalar sympy e ipython-notebook en Debian se ejecuta:
apt-get install python-sympy ipython-notebook

En este caso se mostrará como realizar cálculo de límites con sympy.

Se ejecuta un servidor notebook ( en el siguiente enlace encontrarán el archivo usado para este artículo).

$ipython notebook

Se abre el navegador en http://localhost:8888 y se crea un notebook (para los que bajaron el enlace abren el archivo que se menciono anteriormente):

En este caso se usará un script que se llama limites.py:

#!/usr/bin/env python

# coding: utf-8





from sympy import *







#Se define la variable x como simbolica

x = Symbol("x")







#Calculo de limite de (1/x) cuando x tiende a cero

valor = limit(1/x,x,0)

print valor





#Calculo de limite de (1/x) cuando x tiende a infinito

valor = limit(1/x,x,oo)

print valor





#limite de (5x/2x-3) cuando x tiende a infinito.

valor = limit(5*x/(2*x-3),x,oo)

print valor




El resultado de ejecutarlo es el siguiente:



oo


0


5/2




Para el primer caso el resultado es infinito, para el segundo es cero y para el último es 2.5.

A continuación se deja una imagen del uso de ipython notebook:



Miércoles 18 de febrero de 2015

HMC ShellShock

Donde trabajo tenemos 4 hmc’s para administrar 3 IBM P5 system’s y 2 ISeries 770, y ya tenia tiempo queriendo ser root en esas consolas (because i can), anteriormente lo logre por este metodo Escaping HMC Restricted Shell y ahora … Continue reading

Jueves 12 de febrero de 2015

¿Sabias que? cómo cambiar la potencia de nuestra inalámbrica en GNU/Linux

Alguien hizo esta pregunta en un foro y no recibió la respuesta adecuada, es un truco sencillo que debería estar documentado en español en alguna parte.

Mucha gente se queja de que su inalámbrica “no tiene la misma potencia que tenía en Windows”, esto es porque las inalámbricas deben negociar la frecuencia y canal de transmisión, la potencia, etc y son cosas que en los drivers privativos viene “por defecto” pero en GNU/Linux podemos hacerle tunning fácilmente.

Primero, desactiva la inalámbrica:

ifconfig wlan0 down

Segundo, define tu país (código ISO):

iw reg set VE

Luego, encenderla:

ifconfig wlan0 up

Y acá si, definimos el poder (en mBm, dbm):

iwconfig wlan0 txpower 30

También podemos negociar la velocidad de transmisión:

iwconfig wlan0 rate 54M

También podemos dejar “fijo” el valor de negociación:

iw dev wlan0 set txpower fixed 30mBm

Estos comandos los podemos poner en el /etc/rc.local o en un script bash que asociaremos a la inalámbrica en el post-up de la interface.

Saludos!

The post ¿Sabias que? cómo cambiar la potencia de nuestra inalámbrica en GNU/Linux appeared first on Phenobarbital con Soda.

Lunes 09 de febrero de 2015

Optimiza el HTML, CSS, JS e imágenes de tu sitio web con Gulp

Uno de los retos de los desarrolladores web al momento de crear páginas web, es encontrar el equilibrio perfecto entre ofrecer un sitio con excelente apariencia visual y usabilidad, pero cuyo tamaño sea lo menor posible para que la carga sea rápida. Pues un sitio web rápido permite: tener mas visitas con el rendimiento actual del servidor, se ahorran costos de ancho de banda, los usuarios sienten que es una buena página y navegan mas tiempo por ella, entre otras. Este procedimiento incluye varias tareas que realizan muchos desarrolladores web como: usar las versiones reducidas (comprimidas) de Javascript, comprimir y ofuscar nuestro código del lado del cliente,  optimizar las imágenes del sitio, comprimir los archivos CSS, combinar todos los archivos CSS y Javascript en un sólo archivo (para cada tecnología) para reducir el número de conexiones, etc. Algo que no es complicado pero consume tiempo y que se debe repetir cada vez que se hacen cambios en el sitio.

Gulp

Como este proceso es repetitivo y consume tiempo, lo mejor es hacer un script que automatice cada etapa, pero hoy en día existen herramientas como que nos permite facilitar todo lo mencionado anteriormente. En este artículo hablaré sobre Gulp, una herramienta para automatizar tareas que hace lo mismo que GruntJS pero es mas fácil de usar y entender.

¿Cómo empezar?

Para instalarlo, lo hacemos a través Node Package Manager de forma global para que se instale como un comando del sistema y poder ejecutarlo en cualquier parte:

npm install -g gulp

Luego en la raíz del proyecto creamos un archivo gulpfile.js donde especificaremos las tareas a realizar:

var gulp = require('gulp');
gulp.task('default', function() {
});

Añadir una tarea

Una tarea es un conjunto de procesos, por ejemplo, optimizar el código JS consiste en: reemplazar algunas liberias por sus versiones CDN, utilizar las versiones minificadas de librerías de terceros, luego concatenar los archivos, minificar y actualizar las referencias en el HTML. Cada uno de estos procesos podemos encontrarlos en el buscador de complementos de Gulp (en caso de no existir alguna puedes crearla y publicarla en Github) y se instalan con npm.

Gulp posee una importante característica: su sistema de flujos entre tareas. Cada una de ellas recibe un conjunto de data (generalmente archivos), realiza un proceso en ella y produce nueva data para ser enviada como entrada a otro flujo. Esto permite a tareas que modifiquen gran de archivos, hacer este procedimiento en RAM y solo escribir en el disco cuando ya se ha terminado de procesar todos los archivos, por lo que se ejecutará muy rápido.

Para verlo en acción, haremos una tarea para reducir el tamaño de los archivos JS como ejemplo, entonces nuestro primer paso es instalar el plugin uglify con NPM:

npm install --save-dev gulp-uglify

Luego se deben hacer dos cosas en el archivo gulpfile.js, una es importar esta el complemento en las dependencias y asignarla a una variable, luego con esta variable podemos ejecutar la función que se encargará de (en este caso) reducir el tamaño del código javascript. Para ello debemos hacer lo siguiente:

var uglify = require('gulp-uglify');
gulp.task('comprimir', function() {
gulp.src('lib/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist'))
});

Como podrás observar, hemos creado una tarea llamada comprimir , que recibe un conjunto de archivos (los archivos JS ubicados dentro de /lib), crea una tubería y ejecuta uglify que se encargará de comprimir cada uno de los archivos, finalmente entrega el resultado a la tubería que se enviará a la ruta de destino (esta se puede definir a donde uno desee). Así sucesivamente podemos ir creando procesos como los mencionados anteriormente y luego agruparlo en unas tareas mas generales, por ejemplo, tareas para generar una versión para depurar (cuya fuente no este comprimida), una versión para producción, una versión de producción para pruebas, entre otros. Esto lo puedes hacer al final haciendo algo como esto:

gulp.task('produccion', ['comprimir', 'copiar','cdn', 'less']);

Ejecutar las tareas

Finalmente puedes ejecutar el comando gulp en la raíz de tu proyecto y empezará a realizar todas las tareas de forma automática. En caso de que quieras ejecutar solo una tarea, puedes pasar por parámetro el nombre de la tarea:

gulp produccion

Con esto generas la versión de producción, o  por ejemplo, si tienes una tarea llamada less para generar los archivos CSS desde LESS, simplemente ejecuta:

gulp less

Tareas recomendadas

Para optimizar un sitio web, generalmente utilizo imagemin, jshint, minify-css, notify, imagemin-pngquant, uglify, usemin. Con estas puedo comprimir imágenes, mejorar el código javascript, concatenar archivos, reducir el tamaño, entre otros. Aunque te recomiendo leer un artículo de Addy Osmani sobre optimización de webs, pues lista una gran cantidad de tareas que puedes ir probando para usar al momento de mejorar tus sitios.

Finalmente, como te darás cuenta con Gulp puedes crear sitios web mas óptimos y ahorrando mucho tiempo. Existen una gran cantidad de tareas existentes que puedes agregar a tu proyecto y facilitar tu trabajo, por eso te recomiendo chequearlas en el buscador de plugins de Gulp y si no existe, puedes crearla y ayudar a otros programadores que necesiten algo similar.

Jueves 05 de febrero de 2015

José Leonel Subero

Instalando Docker en Linux Mint Debian Edition

La información de que es Docker la encuentran en su sitio oficial Aquí, a continuación los pasos para su instalación en LMDE. Pasos: Importar y añadir la llave del repositorio para hacer confiable la instalación vía apt. apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 Crear la lista del repositorio para que apt lo use. echo "deb […]

Miércoles 04 de febrero de 2015

José Leonel Subero

Como conectarse a un un contenedor de openvz desde el host anfitrión

Problema: Necesito conectarme a un contenedor desde el anfitrión ¿Que comando uso? Solución: vzctl enter ID-del-anfitrion Ejemplo: vzctl enter 100 Nota: Para dejar la sesión y regresar al host anfitrión se debe teclear ctrl+d o ejecutar el comando exit
José Leonel Subero

Comando para conseguir una cadena de texto en sistemas Unix/Linux

Problema: Necesitamos encontrar en un universo de varios archivos desconocidos una palabra o cadena de texto para poder editar dicha cadena. Solución: sudo grep -lir “cadena_de_texto_a_buscar” “/ruta/donde/esta/el/universo/de/archivos/” Ejmplo: queremos saber cuales archivos en nuestro árbol de directorios tienen la palabra hola mundo, entonces procedemos de la siguiente manera. sudo grep -lir "hola mundo" "/" Nota: […]

Cómo cuidar la batería de tus gadgets y extender su vida útil

Está Escrito:
Y esta es la vida eterna: que te conozcan a ti, el único Dios verdadero, y a Jesucristo, a quien has enviado.  (Juan 17:3)
Tomado de: yahoo  Texto: Paula Barbieri

Uno de los grandes problemas que tenemos al utilizar nuestros móviles inteligentes, laptops y tabletas, es la corta duración de su batería. Pero no desesperes, aquí encontrarás varios consejos sencillos para aprender a cuidarla y extender su vida útil. 

Aprende a cuidar la bater&amp;iacute;a de tus dispositivos electr&amp;oacute;nicos. Foto: Thinkstock


Las baterías son una parte clave de cualquier dispositivo electrónico. Son la fuente de energía por la cual los otros componentes pueden funcionar, apunta el blog Tech News. Un fallo en la batería puede tener graves consecuencias en el resto del producto, por eso debemos ser cuidadosos. Ten en cuenta estos consejos prácticos para cuidar mejor las baterías:

1. Dile adiós a las cargas de 8 horas. Una creencia popular es que tu aparato necesita una carga inicial de ocho horas, pero esto es un error. Con las baterías de litio esta costumbre no es solo innecesaria, sino también dañina para tu batería, según el blog.

2. No dejes conectado el cargador si ya se encuentra al 100% de carga. Seguramente, todas las noches cargas tu móvil, tu tableta o laptop. Es un hábito muy común, pero si quieres cuidar tu batería, deshazte de él. Mantener el cargador conectado cuando la batería ya está al 100% de carga perjudica gravemente la salud de la misma, advierte la fuente mencionada. En caso de que no puedas evitar dejar conectado tu dispositivo a la corriente eléctrica durante la noche, apágalo.

3. Evita los porcentajes bajos de batería durante tiempos prolongados. Mantener las baterías de litio en repetidas ocasiones a porcentajes bajos solo implicará una reducción de su vida útil y de su capacidad máxima, según el sitio mencionado.Lo recomendado es que nunca bajen del 5% o 10% de carga, de acuerdo con el blog.

4. Olvídate de los ciclos completos de carga. Otra de las creencias populares sostiene que para cuidar la batería de nuestro gadget, debemos hacer ciclos completos de carga. Es decir, esperar a que esta llegue a un porcentaje bajo y, en ese momento, conectarlo al cargador. Con las baterías de litio esto no es necesario. Podemos cargar desde el 20% hasta el 70%, por ejemplo, y esto no tendrá ningún impacto en su vida útil, agrega el blog.

5. Cuida la temperatura. En el caso de la batería de tu laptop, es importante que no se caliente demasiado, ya que el calor acortará su tiempo de vida, señala la revista PC Magazine. Entonces, ten en cuenta estos pasos para proveer una óptima corriente de aire y mantener baja la temperatura. Los problemas más graves surgen por la obstrucción física de los puertos de ventilación. El polvo acumulado es uno de los problemas que puedes resolver si limpias la rejilla de ventilación de la laptop y los ventiladores. Una lata de aire comprimido se puede usar para limpiarlos. Otro problema frecuente es usar la laptop sobre una almohada o una sábana, lo cual puede obstruir el sistema de ventilación y retener el aire que sale del sistema. Procura apoyarla sobre superficies como una mesa o un escritorio.

6. Calibra la batería. Según indica el portal How to Geek, los fabricantes recomiendan calibrar las baterías cada dos o tres meses. Esto significa dejar que la batería llegue al 100% y luego baje hasta casi morirse. Recién ahí se carga de nuevo completamente. 

Mi entrevista en Coders Venezuela sobre desarrollo de WordPress y mas

Hace unas semanas acepte la invitación de Osledy Bazo para participar en un proyecto de un podcast para Coders Venezuela sobre desarrolladores web Venezolanos, porque desde hace varios años soy seguidor del sitio y me gusta participar en este tipo de cosas. La entrevista, esta centrada en el desarrollo para WordPress, donde he estado realizando trabajos y plugins de código abierto desde hace tiempo. Sin embargo, en algunas partes hablo un poco sobre mi vida personal, trabajos, ideas, la academia, entre otras cosas.

En fin, les recomiendo escuchar la entrevista y si les gustó, compártanlo para apoyar este proyecto, pues me parece interesante para conocer programadores locales.

Enlace del podcast:

Segundo Podcast de Coders Venezuela – Miguel Angel Useche sobre desarrollo de plugins para WordPress.

Martes 03 de febrero de 2015

¿Cómo Instalar Debian Squeeze o Lenny en una mini laptop vía Pen Drive?

Después de varias búsqueda y tratando de seguir los pasos de la página de Debian, no podía instalarlo en mi mini vaio, seguí intentando y viendo los pasos de este post para instalar Debian Sarge pude lograrlo y una manera rápida y cómoda:

1. Tener un Pen drive de al menos 256MB

2. Formatear el pen drive a FAT32

3. Descargar los siguientes archivos “initrd.gz” y “vmlinuz” y los copias en el pen drive

Para Lenny los obtienes desde aquí y para Squeeze desde aquí

4. Descarga la imagen iso de Lenny o de Squeeze según la versión que quieras instalar y lo copias en el pen drive (Esta iso es de 175 MB apróximadamente por el cual sólo te instalará el sistema base, lo demás lo debes descargar vía internet)

5. crea el siguiente archivo en el pen drive llamado: syslinux.cfg y dentro del archivo copia lo siguiente:

default vmlinuz
append initrd=initrd.gz ramdisk_size=10240 root=/dev/rd/0 devfs=mount,dall rw DEBCONF_PRIORITY=medium

default vmlinuz

append initrd=initrd.gz ramdisk_size=10240 root=/dev/rd/0 devfs=mount,dall rw DEBCONF_PRIORITY=medium

6. y listo, desmonta el pen drive y reinicia. Ahora podrás disfrutar de Debian.

Si quieren un repositorio para que puedas instalar la mayoría de los paquetes en debian que no son libres puedes usar copiando en el al final del archivo /etc/apt/source.list

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

Saludos.

Lunes 02 de febrero de 2015

José Miguel Parrella Romero

José Miguel Parrella Romero
null pointer dereference

Rebasing CoreOS for ephemeral cloud storage

The convenience and economy of cloud storage is indisputable, but cloud storage also presents an I/O performance challenge. For example, applications that rely too heavily on filesystem semantics and/or shared storage generally need to be rearchitected or at least have their performance reassessed when deployed in public cloud platforms.

Some of the most resilient cloud-based architectures out there minimize disk persistence across most of the solution components and try to consume either tightly engineered managed services (for databases, for examples) or persist in a very specific part of the application. This reality is more evident in container-based architectures, despite many methods to cooperate with the host operating system to provide cross-host volume functionality (i.e., volumes)

Like other public cloud vendors, Azure presents an ephemeral disk to all virtual machines. This device is generally /dev/sdb1 in Linux systems, and is mounted either by the Azure Linux agent or cloud-init in /mnt or /mnt/resource. This is an SSD device local to the rack where the VM is running so it is very convenient to use this device for any application that requires non-permanent persistence with higher IOPS. Users of MySQL, PostgreSQL and other servers regularly use this method for, say, batch jobs.

Today, you can roll out Docker containers in Azure via Ubuntu VMs (the azure-cli and walinuxagent components will set it up for you) or via CoreOS. But a seasoned Ubuntu sysadmin will find that simply moving or symlinking /var/lib/docker to /mnt/resource in a CoreOS instance and restarting Docker won’t cut it to run the containers in a higher IOPS disk. This article is designed to help you do that by explaining a few key concepts that are different in CoreOS.

First of all, in CoreOS stable Docker runs containers on btrfs. /dev/sdb1 is normally formatted with ext4, so you’ll need to unmount it (sudo umount /mnt/resource) and reformat it with btrfs (sudo mkfs.btrfs /dev/sdb1). You could also change Docker’s behaviour so it uses ext4, but it requires more systemd intervention.

Once this disk is formatted with btrfs, you need to tell CoreOS it should use it as /var/lib/docker. You accomplish this by creating a unit that runs before docker.service. This unit can be passed as custom data to the azure-cli agent or, if you have SSH access to your CoreOS instance, by dropping /etc/systemd/system/var-lib-docker.mount (file name needs to match the mountpoint) with the following:

[Unit]
Description=Mount ephemeral to /var/lib/docker
Before=docker.service
[Mount]
What=/dev/sdb1
Where=/var/lib/docker
Type=btrfs

After systemd reloads the unit (for example, by issuing a sudo systemctl daemon-reload) the next time you start Docker, this unit should be called and /dev/sdb1 should be mounted in /var/lib/docker. Try it with sudo systemctl start docker. You can also start var-lib-docker.mount independently. Remember, there’s no service in CoreOS and /etc is largely irrelevant thanks to systemd. If you wanted to use ext4, you’d also have to replace the Docker service unit with your own.

This is a simple way to rebase your entire CoreOS Docker service to an ephemeral mount without using volumes nor changing how prebaked containers write to disk (CoreOS describes something similar for EBS) Just extrapolate this to, say, your striped LVM, RAID 0 or RAID10 for higher IOPS and persistence across reboots. And, while not meant for benchmarking, here’s the difference between the out-of-the-box /var/lib/docker vs. the ephemeral-based one:

# In OS disk

--- . ( ) ioping statistics ---
20 requests completed in 19.4 s, 88 iops, 353.0 KiB/s
min/avg/max/mdev = 550 us / 11.3 ms / 36.4 ms / 8.8 ms

# In ephemeral disk

--- . ( ) ioping statistics ---
15 requests completed in 14.5 s, 1.6 k iops, 6.4 MiB/s
min/avg/max/mdev = 532 us / 614 us / 682 us / 38 us


Domingo 01 de febrero de 2015

Valencia Software Libre: Llego Quitter Venezuela

Jueves 22 de enero de 2015

Colectivo MediosLibres de Venezuela

MediosLibres

MediosLibres es un Colectivo tecnológico dedicado al desarrollo, migración y soporte sobre tecnologías libres para lo medios de comunicación, integrado por gente de medios con amplios conocimientos en el àrea de la tecnología.

Este Portal Web es el centro de interacción con los usuarios y usuarias de la Distribución GNU/Linux MediosLibres, desarrollada por el Colectivo MediosLibres de Venezuela con la finalidad de satisfacer totalmente las necesidades de todos los segmentos de los medios de comunicación (radio, audiovisuales, prensa escrita, medios dìgitales). Un trabajo que lleva ya mas de dos años de investigación y preparación, y que hoy junto al lanzamiento del portal sirve de puerta informativa para dar a conocer la existencia de la Beta 2 de esta Distribución GNU/Linux venezolana para Medios de Comunicación.

Los Líderes del Proyecto indicaron que el Portal http://medioslibres.org.ve, cuenta con importante información acerca de esta Distribución GNU/Linux venezolana, así como también áreas de descarga, un moderno sistema de soporte, foros, galería, podcast, wiki colaborativa, videoteca, Aula Virtual y otras interesantes utilidades al servicio del usuario.

Finalmente se informó que el venidero lunes 26 de enero será liberada públicamente de forma oficial la primera versión de MediosLibres GNU/Linux, la cual lleva como nombre código Shamatari, palabra de la lengua Yanomami que significa Guerrero y utilizarà como nomenclatura de versión la 15.01 en referencia al año y mes del lanzamiento.

Nota enviada por: Jaime Ernesto Mora

Lunes 19 de enero de 2015

Conociendo un poco a #lftp

lftp es un programa de transferencia de archivos (FTP) por medio de la linea de comandos para UNIX y sistemas basados en UNIX. Fue escrito por Alexander Lukyanov y esta diponible bajo GPL.

Leer mas en wiki/Lftp.

Uso basico

lftp ftp://ftp.my-domain.com
lftp ftp.my-domain.com:~> user myuser
Password:

Comandos de ayuda

lftp myuser@ftp.my-domain.com:/www> help
        !<shell -command>                    (commands)
        alias [<name> [<value>]]            anon
        bookmark [SUBCMD]                   cache [SUBCMD]
        cat [-b] <files>                    cd <rdir>
        chmod [OPTS] mode file...           close [-a]
        [re]cls [opts] [path/][pattern]     debug [<level>|off] [-o <file>]
        du [options] <dirs>                 exit [<code>|bg]
        get [OPTS] <rfile> [-o <lfile>]     glob [OPTS] <cmd> <args>
        help [<cmd>]                        history -w file|-r file|-c|-l [cnt]
        jobs [-v]                           kill all|<job_no>
        lcd <ldir>                          lftp [OPTS] <site>
        ls [<args>]                         mget [OPTS] <files>
        mirror [OPTS] [remote [local]]      mkdir [-p] <dirs>
        module name [args]                  more <files>
        mput [OPTS] </files><files>                 mrm </files><files>
        mv <file1> <file2>                  [re]nlist [<args>]
        open [OPTS] <site>                  pget [OPTS] <rfile> [-o <lfile>]
        put [OPTS] </lfile><lfile> [-o <rfile>]     pwd [-p]
        queue [OPTS] [<cmd>]                quote </cmd><cmd>
        repeat [delay] [command]            rm [-r] [-f] <files>
        rmdir [-f] <dirs>                   scache [<session_no>]
        set [OPT] [<var> [<val>]]           site <site_cmd>
        source <file>                       user <user |URL> [<pass>]
        version                             wait [<jobno>]
        zcat <files>  

Subir un archivo

lftp myuser@ftp.my-domain.com:/www> put file.ext
64714 bytes transferred in 8 seconds (7.9K/s)

Un pequeño tip

Si en algun momento, intentan subir algo a un servidor puede que obtengas este error:

Lftp Fatal Error: Certificate Verification: Not Trusted

La solucion es facil, solo se debe agrear en /etc/lftp.conf lo siguiente:

set ssl:verify-certificate no

Link de interes

Mailing lists

Mailing lists and archives (since July 2011):

List archives (including prior to July 2011):

Code

Browse the source code:

Bug trackers

Miércoles 14 de enero de 2015

Valencia Software Libre: Reinauguracion del Planeta VaSlibre

Domingo 11 de enero de 2015

José Luis Rivas

José Luis Rivas
ghostbar

Recordando a Aaron Swartz

Un libro que me encantó es «Homeland» de Cory Doctorow, trata sobre un grupo de hackers que se ven envueltos en situaciones que los deja expuestos a uno de los gobiernos y empresas más poderosas que existen y deben hacer algo aún así los haga correr peligros. Una historia de ficción sobre gente como Aaron Swartz.

Pero lo mejor del libro, es que precisamente cierra con dos cartas, una por Jacob Appelbaum, uno de los primeros mimbros de Wikileaks y desarrollador del proyecto Tor; y otra por Aaron Swartz. La carta de Aaron la traduje y publico a continuación, espero les sirva de inspiración para que sigan en sus luchas aún cuando a veces parezca que quién da la batalla del otro lado es muy grande e invencible:

Hola, soy Aaron. Se me ha dado este pequeño espacio aquí al final del libro porque soy un humano de carne y hueso, y cómo tal, puedo decirte algo que no creerías si viniese de la boca de cualquiera de esos carácteres ficticios:

Esto es real.

Claro, no hay alguien llamado Marcus o Ange realmente, al menos no que yo conozca, pero sí sé de gente real justo como ellos. Si quieres, puedes ir a San Francisco y conocerlos. Y mientras estás allí, puedes jugar D&D con John Gilmore o construir un cohete en Noisebridge o trabajar con algunos hippies en un proyecto de arte para Burning Man.

Y si algo de las cosas más relacionadas con conspiraciones en el libro te parecen demasiado alocadas para ser verdad, bueno, simplemente googlea Blackwater, Xe o BlueCoat. (Yo mismo tengo una solicitud FOIA pendiente para saber más de "software para manejo de persona", pero los federales dicen que les va a tomar tres años más redactar todos los documentos relevantes.)

Ahora, yo espero que te hayas divertido quedándote despierto toda la noche leyendo acerca de estas cosas, pero la parte que viene es importante así que presta atención: lo que está pasando ahora no es algún reality show de televisión donde simplemente puedes sentarte en casa y ver.

Esta es tu vida, este es tú país -- y se quieres mantenerlo seguro, debes involucrarte.

Sé que es fácil sentirse sin poder, como si no hubiese algo que puedas hacer para que baje la marcha o detener "el sistema." Como si todos los hilos son movidos por fuerzas oscuras y poderosas lejanas a tu control. Yo me siento de esa forma también, a veces. Pero simplemente no es verdad.

Hace menos de un año, un amigo me llamó para decirme sobre un proyecto de ley oscuro del cuál había escuchado llamado Acta para Combatir la Vulneración En Línea y La Falsificación o COICA (En Inglés es: Combatting Online Infringement and Counterfeitting Act, de allí la abreviación COICA). Mientras leía el proyecto empecé a preocuparme más y más: bajo estas provisiones, el gobierno podría censurar sitios web que no le gusten sin algo como un juicio. Sería la primera vez que el gobierno de los EEUU se le darían poderes para censurar el acceso a la red.

El proyecto había sido introducido hace un día o dos, pero ya tenía un par de docenas de senadores apoyándola. Y, a pesar de nunca haber un debate ya estaba siendo programada para ser votada en sólo un par de días. Nadie había reportado al respecto y ése era justamente el punto: ellos querían apurar esta cosa para que pasara antes que alguien se diese cuenta.

Afortunadamente, mi amigo se dió cuenta. Nos quedamos despiertos todo el fin de semana y lanzamos un sitio web explicando qué decía el proyecto de ley, con una petición que podías firmar en rechazo al proyecto que te daría números de teléfonos para llamar a tus representantes en el senado. Le dijimos al respecto a algunos amigos y ellos le dijeron a algunos de sus amigos y en cuestión de un par de días teníamos más de 200 mil personas en nuestra petición. Fue increíble.

Bueno, la gente promoviendo esta ley no paró. Ellos gastaron literalmente decenas de millones de dólares haciendo lobby para éste proyecto de ley. La cabeza de cada compañía de medios grandes voló a Washington, D.C. y allí se reunieron con el jefe de personal del presidente y amablemente le recordaron de los millones de dólares que le habían donado a la campaña del presidente y le explicaron cómo lo que ellos querían -- la única cosa que querían -- era que esta ley se aprobara.

Pero la presión pública siguió creciendo. Para intentar sacar a la gente del camino ellos intentaron cambiando el nombre de la ley -- llamándola PIPA y SOPA, incluso llamándola E-PARASITES Act -- pero no importó cómo la llamaron, más y más personas se siguieron diciéndole a sus amigos sobre la ley y consiguiendo más y más personas que se opusieran. Pronto, las firmas en nuestra petición iba en millones.

Logramos detenerlos por más de un año con diferentes tácticas, pero se dieron cuenta que si esperaban más quizás nunca lograrían tener un chance de pasar esta ley. Así que programaron un voto apenas volviesen de la pausa de invierno.

Pero mientras los miembros del congreso estaban fuera en la pausa de invierno, manteniendo reuniones públicas y en las salas de sus pueblos en casa, la gente empezó a visitarlos. En todo el país, miembros del congreso empezaron a ser cuestionados por sus electores acerca de su apoyo a esa sucia ley de censura del internet. Y los miembros del congreso empezaron a asustarse -- algunos llegando tan lejos como responderles atacandome.

Pero esto ya no se trataba de mi -- nunca se trató de mi. Desde el principio fue sobre ciudadanos tomando las cosas en sus propias manos: haciendo vídeos en YouTube y escribiendo canciones oponiéndose a la ley, haciendo gráficos mostrando cuánto dinero los promotores de la ley habían recibido de las industrias promoviéndola, y organizando boycotts poniéndo presión en las compañías que habían promovido la ley.

Y funcionó -- tomó la ley desde un punto político sin problema alguno que se suponía debía pasar unánimamente a una posición más parecida a tener un balón tóxico que nadie quería tocar. ¡Incluso los promotores de la ley empezaron a sacar declaraciones oponiéndose a la ley! Oh sí, esos dueños de medios estaban molestos...

Así no es como se supone que el sistema deba funcionar. ¡Un montón de chicos no detienen unas de las fuerzas más poderosas en Washington simplemente escribiendo en sus portátiles!

Pero pasó. Y tú puedes hacer que pase de nuevo.

El sistema está cambiando. Gracias a la Internet, todos los días personas pueden saber acerca de cosas y organizarse incluso si el sistema está determinado a ignorarlo. Ahora, quizás no ganes todo el tiempo -- esto es la vida real, después de todo -- pero finalmente tenemos una oportunidad.

Pero sólo funciona si tú tomas parte en ello. Y ahora que has leído este libro y aprendido cómo hacerlo, estas perfectamente informado sobre cómo hacerlo de nuevo. Es correcto: ahora depende de ti cambiar el sistema.

Aaron Swartz.

Viernes 09 de enero de 2015

Eliminar caracteres ocultos de archivos de texto plano con vim

Download PDF

No todos usan el mismo editor de texto. No todos usan el mismo sistema operativo. No es un secreto para nadie. Cuando se trabaja en grupos bastante heterogéneos puede ocurrir que el editor de texto introduce estos caracteres ocultos que si se encuentran dentro de un script bash por ejemplo, generan esos famosos: command not found. Uno de los caracteres ocultos más comunes que he encontrado es ^M, pero imagino que se puede encontrar cualquier otro tipo de aberración. Estos son artefactos agregados por editores generalmente gráficos. Sin más preámbulo, la solución más rápida que he encontrado hasta el momento es cambiar el format file (ff) y guardar el archivo:

 

:set ff=unix

:w

De esta manera los !@#$%* caracteres ocultos son eliminados.

 

Domingo 04 de enero de 2015

César Mata Moya

César Mata Moya
PingüiniTux

Convertir vídeos con subtítulos para el decodificador TDA Novatech T207 en Debian

El sintonizador TDA Novatech T207 permite la reproducción de archivos con codificación H.264 para el video y AAC para el sonido, pero no es capaz de leer los subtítulos en formato SubRip (.srt), por lo cual se debe incrustar en el archivo final.

Para hacer la codificación se va a utilizar la herramienta mencoder en Debian Wheezy, sin embargo se debe instalar la versión de deb-multimedia ya que esta es la que nos permite utilizar la librería libfaac.

Procedemos a agregar el siguiente repositorio:

deb http://mirror.optus.net/deb-multimedia/ wheezy main

Luego realizamos:

apt-get update
apt-get  install mkvtoolnix mencoder x264 libfaac0

Nos situamos en el directorio donde se encuentra el vídeo origen con el subtitulo .srt y ejecutamos:

mencoder videoOrigen.mp4  -ovc x264 -x264encopts threads=auto:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b -oac faac -vf scale=720:404 -sub videoOrigen.srt -subcp latin1 -subfont-text-scale 3 -o video.avi


mencoder: es el programa que permite hacer la conversión del vídeo.

videoOrigen.mp4: Es el archivo que contiene el vídeo Original. Puede estar en otro formato que no sea .mp4 (avi, etc).

-ovc x264: Le indica a mencoder que el vídeo va a ser codificado usando la utilidad x264.

-x264encopts: Son las opciones utilizadas para x264. Coloque las recomendadas para una mayor calidad en la pagina.

-oac faac: Le indica a mencoder que el audio va a ser codificado usando la librería libfaac0.

-vf scale=720:404: este parámetro es opcional y lo utilizo para escalar el vídeo a la resolución 720x404 (Aspecto 16:9)
 ya que el codificador los reproduce con mayor holgura. Si el vídeo es de menor resolución, se debe omitir para no afectar la calidad.

-sub: Se indica el archivo .srt

-subcp: Se coloca la codificación (latin1, UTF8, etc)

-subfont-text-scale: Se indica el tamaño de escala de la fuente.

-o video.avi: Archivo .avi que luego se debe convertir a .mkv para que lo reconozca el decodificador.

Y para finalizar se convierte el archivo resultante en un .mkv de la siguiente manera:

mkvmerge video.avi -o videoFin.mkv

El videoFin.mkv se copia en una memoria USB y se podrá reproducir en el decodificador.




Silvio Perez: Kexec/Kdump configuration Centos/RedHat
Silvio Perez: Dynamic MOTD Centos/RedHat

Martes 16 de diciembre de 2014

Turla, un potente troyano para Linux

Está Escrito:
Reconócelo en todos tus caminos,Y él enderezará tus veredas.(Proverbios 3:6)
Tomado de: BarraPunto
«Investigadores de Kapersky y Symantec han descubierto un troyano extremadamente discreto, imposible de detectar mediante el comando netstat y que puede ser ejecutado por un usuario sin privilegios denominado Turla. Al parecer se ha estado usando durante, al menos, cuatro años para espiar a gobiernos, embajadas, instituciones militares y compañías farmacéuticas por igual en cerca de medio centenar de países. El troyano tiene capacidad de comunicarse con los servidores bajo el control de los atacantes, interceptar datos locales y ejecutar funciones sin necesidad de privilegios de administrador. No se descarta que puedan surgir descubrimientos de malware semejantes a medida que avance la investigación. ¿Y tú, ya has instalado un antivirus en tu Linux para buscar troyanos ocultos?»
Referencia es: http://arstechnica.com
Los investigadores han descubierto un troyano extremadamente sigiloso para sistemas Linux que los atacantes han estado usando para desviar los datos sensibles de los gobiernos y las empresas farmacéuticas de todo el mundo.
El malware no habían sido descubiertos representa una pieza del rompecabezas que falta vinculada a "Turla," una llamada amenaza persistente avanzada (APT) da a conocer en agosto por Kaspersky Lab y Symantec . Por lo menos cuatro años, la campaña estaba dirigida a las instituciones gubernamentales, embajadas, militar, educación, investigación y compañías farmacéuticas en más de 45 países. Los atacantes desconocidos -que probablemente están respaldados por un Estado-nación, de acuerdo con Symantec, eran conocidos por haber infectado a varios cientos de equipos basados ​​en Windows mediante la explotación de una variedad de vulnerabilidades, al menos, dos de los cuales eran errores de día cero. El malware fue notable por su uso de un rootkit que hacía extremadamente difícil de detectar.
Ahora los investigadores de Kaspersky Lab con sede en Moscú han detectado malware basado en Linux se utiliza en la misma campaña . Turla ya estaba clasificado como uno de los apartamentos de alto nivel, en la misma liga que la divulgada recientemente Regin por ejemplo. El descubrimiento del componente Linux sugiere que es más grande de lo que se pensaba y puede presagiar el descubrimiento de sistemas aún más infectados.
"Los [] Turla operaciones se llevan a cabo en entornos más amplios de lo que previamente conocíamos", dijo a expertos de Kaspersky Lab Kurt Baumgartner Ars. "Todas las otras cosas que hemos visto de Turla se ha basado en Windows. Esta pieza del rompecabezas nos muestra que no se limitan a sí mismos."

Magic Numbers

Al igual que sus homólogos de Windows, el troyano Linux es extremadamente cauteloso. No se puede detectar usando el común comando netstat . Para ocultarse, la puerta trasera se encuentra en estado latente hasta que los atacantes envían paquetes inusualmente diseñados que contienen "números mágicos" en sus números de secuencia. El malware puede haber permanecido inadvertida en al menos un ordenador de la víctima durante años, aunque los investigadores de Kaspersky Lab aún no han confirmado esa sospecha. El troyano es capaz de ejecutar comandos arbitrarios a pesar de que no requiere privilegios de sistema elevados.
"Es una pieza muy interesante de código", dijo Baumgartner. "No sólo se ejecuta en Linux, pero no se puede detectar en la forma habitual."
Incluso un usuario normal con privilegios limitados puede lanzarlo, lo que le permite interceptar los comandos de tráfico y de ejecución en las máquinas infectadas. Las capacidades incluyen la habilidad de comunicarse con los servidores bajo el control de los atacantes y funciones que permiten a los atacantes ejecutar comandos de su elección y llevar a cabo la administración remota.
Incluso después de su descubrimiento, el componente de Linux sigue siendo un misterio. El archivo ejecutable subyacente está escrito en los lenguajes C++ y C y contiene código de bibliotecas previamente por escrito, una propiedad que da el archivo autosuficiencia malicioso. El código también es despojado de información de símbolos, lo que hace difícil para los investigadores realizar ingeniería inversa o analizar. Como resultado, Baumgartner dijo el troyano puede tener capacidades que aún no han sido descubiertas.
Los administradores que deseen comprobar si los sistemas Linux infectados por Turla pueden comprobar el tráfico de salida para las conexiones con news-bbc.podzone[.]org o 80.248.65.183, que son las direcciones de los canales de mando y de control conocidos codificado en el troyano Linux. Los administradores también pueden crear una firma usando una herramienta llamada YARA que detecta las cadenas  "TREX_PID=%u" y "Remote VS is empty !"
Dado el poder y el sigilo de la puerta de atrás, sin mencionar su conexión con una de las campañas de espionaje más sofisticados descubiertos hasta la fecha, no sería sorprendente que el descubrimiento para abrir la puerta a los descubrimientos de más infecciones o componentes de malware.
"La investigación está en curso", dijo Baumgartner. "Quiero suponer en algún momento esto va a tender un puente a otro hallazgo debido a la forma en que se utiliza esta puerta trasera."

Miércoles 26 de noviembre de 2014

Xavier Araque

Xavier Araque
Rendergraf

Nuevo sitio web – XavierAraque.com

xavieraraque.com

Saludos a todos ya hace un tiempo vengo trabajando en mi nuevo sitio web.

Pueden visitarlo ahora mismo desde: xavieraraque.com

También un blog/tumblr en el que publico algunos comentarios personales e imágenes blog.xavieraraque.com

Para quienes desean contactar conmigo en ambos sitios encontrarán los enlaces actualizados a mis redes sociales.

 

Este sitio quedará fuera de mantenimiento.

-Xavier-


Archivado en: Personal, Work

Miércoles 19 de noviembre de 2014

Fedora en el CGSOL 2014 Guatemala

Domingo 16 de noviembre de 2014

Valencia Software Libre: I Jornada de Ingenieria y Arquitectura UJAP - Carabobo

Miércoles 12 de noviembre de 2014

Carlos Colmenarez

Carlos Colmenarez
El Blog de Zero » LINUX

El Moto G (2014) es el primero en recibir Lollipop, y algo está cambiando en Android

Como ocurrió el año pasado, Motorola ha sido la primera. Algunos usuarios americanos del Moto G (2014) ya están recibiendo Android 5.0 Lollipop y la tendencia en actualizaciones parece estar cambiando en casi todas las marcas de la plataforma.

Como ya pasó con Android 4.4 Kit Kat, no han sido los Nexus los primeros dispositivos en actualizar a Android 5.0 Lollipop. El honor recae sobre Motorola y el Moto G de segunda generación, mientras que la actualización para el Moto X estaría casi lista. Según informan algunos usuarios usuarios del Moto G (2014) libre americano, ya han comenzado a recibir la actualización vía OTA, con un peso de unos 386 MB.

La actualización llega tras la noticia que conocimos hace tiempo por la cual Motorola confirmaba que toda la gama 2013 y 2014 probaría el sabor de Android 5.0 Lollipop. La velocidad en la entrega no sorprende dada la poca personalización que Motorola hace sobre el Android que Google entrega a las compañías. Sin embargo, tiene mérito que un dispositivo como el Moto E llegue a conocer Lollipop, pues en otra marca la actualización no es que se retrasara, es que directamente la empresa no se planteara su actualización, algo que ha pasado incluso en modelos de gama alta.

Los fabricantes se están tomando más en serio los plazos

En este sentido, parece que algo está cambiando. Todas las marcas han ido confirmando ya los terminales que actualizarán a Android 5.0 Lollipop, y además se están dando más prisa de lo que nos tienen acostumbradas. Por una parte tenemos una LG que esta semana ya comenzará a actualizar su G3 (manualmente ya está disponible la actualización), una Samsung cuyo TouchWiz basado en Lollipop ya hemos podido ver en vídeo en el Galaxy S4 y en Galaxy S5, por lo que tampoco debería tardar mucho en llegar a éstos y a los Note 3 y Note 4.

Quien sale peor parada de este movimiento es, sin duda, Google. Desde el día 3 de noviembre esperamos la llegada de Android 5.0 Lollipop a los Nexus 7 de 2012 y 2013, Nexus 4 y Nexus 5, y la OTA no acaba de llegar a los usuarios. Al parecer se trata de corrección de bugs, pero siendo tú quien desarrolla el software, no da muy buena imagen a la plataforma retrasarse en los que deben ser, como la propia Google afirma, los terminales ejemplares.

fuente: celularis


Lunes 10 de noviembre de 2014

Jesús Matamoros

Jesús Matamoros
Jesus Matamoros Web blog

¿Por qué es tan importante tener un sitio web?


dirección en Internet, puede dar una imagen poco seria y profesional. Cada vez más el tener un sitio Web será definitivo para seguir en carrera.  

En la actualidad  TODA  empresa, organización, no importa el tamaño,  necesita y debe tener un sitio Web.  En EEUU y en los países más avanzados de la UE está demostrado que la intensidad en la aplicación de nuevas tecnologías y la incorporación de un Sitio Web, está correlacionado de manera positiva con el incremento de las ventas, la productividad y el valor de mercado de las empresas. Además, estudiosos del E-Business consideran que las empresas que no entren en el campo de Internet en los próximos 10 años, desaparecerán!. Conozca a continuación las ventajas de tener un sitio web...

 Ventajas de tener un sitio web:
1. Alcance mundial de sus productos y servicios: a través del sitio Web Usted podrá llegar a clientes potenciales del mundo entero. Las limitaciones geográficas ya no existen, un sitio Web es como una oficina de ventas en cada lugar del planeta.

2. Competir al lado de los más grandes:
Su imagen en Internet podrá ser comparable a cualquier gran compañía de su mismo sector. Es un terreno imparcial donde el sitio web de una empresa pequeña puede ser tanto o más atractivo que el de una empresa muy grande. Por eso podrá competir justo al lado de las empresas más grandes, de igual a igual.

3. Disponible las 24horas, todos los días año: La presencia universal también se complementa con la presencia las 24 horas, los 7 días de la semana, los 365 días del año, lo que permite que aún fuera del horario de trabajo, la empresa siga produciendo y creciendo. Además de atender otras partes del planeta que por diferencias horarias sería imposible realizarlo al instante.

4. Menos Costos Operativos:
Ahorro en gastos de publicidad, reducción de teléfono y personal, de modo que cualquier información que pudiera necesitar el cliente la podrá consultar en su página Web, esto le ahorra tiempo, dinero y reduce el número de llamadas telefónicas de su negocio, locales y de larga distancia.

5. Imagen Profesional de su empresa: Actualmente las empresas respetadas en el medio tienen presencia en la Web. El no contar con una
Logo empresa desarrollo web

En iT Labs nos dedicamos a ofrecer soluciones digitales 360º, empleando las últimas tecnologías disponibles en el mercado, poniendo especial énfasis en la funcionalidad y el posicionamiento y estrategia de marketing, permitiéndole lograr presencia en Internet. De esta manera Usted y su empresa podrán competir estratégicamente, utilizando nuestros productos como una herramienta de marketing, publicidad y hasta gestión empresarial.


Miguel Ángel Useche

Miguel Ángel Useche
El blog de Skatox » Planetas

Cómo empecé a usar Firefox hace una década

Ayer 9 de noviembre, se cumplieron 10 años del lanzamiento de la versión 1.0 de Firefox, el navegador que sigo usando actualmente por diversas razones que les comentaré en esta entrada. Aunque recuerdo utilizar Netscape cuando iba a los populares cybercafes (pues en los 90s no era común tener Internet en el hogar) mi salida de Internet Explorer (que por venir instalado con Windows era mi predeterminado) fue como a finales del 2002 cuando empecé a jugar con páginas de seguridad informática y en uno de los retos me pedía falsificar el navegador, averiguando instalé K-meleon que se convirtió en mi navegador por defecto por incluir pestañas. Luego me enteré que el navegador estaba basado en otro llamado Mozilla Suite y ahí empezó todo.
Cuando me enteré del desarrollo de Firefox, recuerdo que no me gustó por ser un navegador con pocas funcionalidades respecto a Mozilla Suite (me encataba la idea de tener un cliente IRC y de correo en el navegador) y lo ignoré por completo hasta que instalé la primera versión de Ubuntu que venía con Firefox 0.93. En ese entonces, al ser una numeración menor a 1.0, pensé que el navegador era una beta y no lo probé hasta su lanzamiento; ese día recuerdo bajar un versión binaria, pues no había paquete oficial para Ubuntu 4.10 y al probarlo me gustó por su rapidez. De ahí seguí utilizando versión por versión, creo que la 1.5 no la usé por gran tiempo debido a problemas de video en mi equipo y utilicé, pero luego volví con la versión 2.0.

Haciendo una retrospectiva de las versiones del navegador, es impresionante como ha cambiado la web en 10 años. Cuando salió Firefox, Internet Explorer controlaba el mercado y casi todas las páginas se hicieron para funcionar en ella, además apenas estaba surgiendo la primeras aplicaciones web, Javascript no era tan importante, era necesario utilizar plugins de terceros para ver animaciones y videos en la web, pocos sitios usaban llamadas AJAX, entre otros. Ya hoy en día gracias a Firefox, tenemos la posibilidad de escoger otros navegadores como Chrome (Firefox permitió abrir el paso a otros navegadores), brindar mayor sentido a las estadarizaciones en la web, implementar futuras tecnologías, ejecutar código JS a velocidades cercanas a código nativo, por nombrar algunas cosas. Ademas, Firefox se ha convertido en el navegador mas rápido (a la fecha de publicación de esta entrada), sirve de base para Firefox OS, tiene una versión para Android, se enfoca en los intereses de los usuarios y no de una organización, te protege tu información y respeta tu privacidad, puedes sincronizar de forma privada y segura la información de tu navegador entre dispositivos, está desarrollado por gente de distintas partes del mundo y de forma totalmente abierta, entre otros. Por estas razones y más, les recomiendo utilizar este navegador, no solo por su gran calidad desde el punto de vista técnico, sino también porque al usarlo apoyas a la web abierta.

P.d: Puede estar un poco extraña la redacción del post pero lo redacté con mucho sueño luego de organizar y realizar el evento.

Jueves 06 de noviembre de 2014

Silvio Perez: Bridging two routers through wifi

Domingo 02 de noviembre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

El 14 de noviembre estará disponible “This War Of Mine”, el juego de guerra que necesitábamos.

El próximo 14 de noviembre, la desarrolladora de videojuegos polaca 11 bit Studios lanza al mercado su juego “This War Of Mine”, el juego de guerra que necesitábamos. La guerra es un tema constante en los videojuegos, no importa si te toca ser el dirigente de una nación en un juego de “Grand Strategy”, comandante… Read More »
Jorge Ortega

Jorge Ortega
Joenco

Como hacer que Espeak reconozca las voces de mbrola

Revisando en internet como agregar las voces de mbrola en “Gespeaker“, me encontré con este articulo: “Gespeaker. Texto a voz” donde explica que hacer para que espeak reconozca las voces de mbrola y es lo que les voy a comentar para que ustedes también las utilicen!!

 

Lo que vamos hacer es instalar mbrola y las voces en español, esto por si aun no lo han hecho:

1. Abrimos un terminal/consola.

2. Entramos como superusuario (root, escribiendo:

# su

3. Escribimos la contraseña de administrador:

# la -contraseña-de-root

4. Instalamos mbrola y las voces:

# aptitude install mbrola mbrola-es1 mbrola-es2 mbrola-mx2 mbrola-vz1

5 Creamos una carpeta llamada “ves” en /usr/lib/i386-linux-gnu/espeak-data/voices/:

# mkdir /usr/lib/i386-linux-gnu/espeak-data/voices/ves

6. Copiamos los archivos mb-es1, mb-es2, mb-mx2 y mb-vz1 que se encuentra en /usr/lib/i386-linux-gnu/espeak-data/voices/mb/ en la carpeta creada:

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-es* /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-mx2 /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-vz1 /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

Listo, eso es todo ya podremos utilizar las voces de mbrola con espeak.!

 

Lo mejor es que podremos usar las nuevas voces con Gespeaker y el lector de pantalla orca, lo malo (no todo es perfecto), cuando se usa con el lector de pantalla no reproduce algunas cosas.

 

Es de destacar que se puede utilizar la voz venezolana sin ningún problema para reproducir cualquier texto utilizando “Gespeaker”.!!

 

Nota: En el articulo “Instalando otras voces para el lector de pantalla orca” se explica como hacer que se reconozca mbrola en las opciones.

 

Saludos a todos y para cualquier pregunta, comentario o sugerencia lo pueden hacer en los comentarios.


Viernes 31 de octubre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

La rama 3.16 del kernel Linux tendrá soporte extendido

A través de la lista de correo de Linux se ha anunciado el soporte extendido para la rama 3.16 por parte del equipo de desarrollo de Ubuntu y de Debian. El soporte extendido de Linux 3.16 ha entrado en vigencia, la particularidad de todo esto es que el soporte estará a cargo de terceras personas… Read More »

Jueves 30 de octubre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

Se lanzan nuevas versiones de actualización del kernel Linux

Greg Kroah-Hartman ha anunciado a través de la lista de correo de Linux, el lanzamiento de varias versiones de actualización para algunas ramas del kernel Linux trayendo consigo varias mejoras, actualizaciones de drivers y numerosos arreglos de errores. Las versiones 3.17.2, 3.16.7, 3.14.23 y 3.10.59 del kernel Linux han sido lanzadas el día de hoy,… Read More »

Domingo 26 de octubre de 2014

Jorge Ortega

Jorge Ortega
Joenco

Hostinger: un sitio de hosting web accesible, gratuito y sin publicidad

Hostinger: un sitio de hosting web accesible, gratuito y sin publicidad.


Sábado 18 de octubre de 2014

Instalar Drivers Privados de AMD Radeon (fglrx) Debian Wheezy

Recientemente adquirí una humilde AMD Radeon R9 270, y quise instalar los drivers propietarios (fglrx) para poder jugar UrT como dios manda.

Añadir los repositorios backports para Debian Wheezy, en el archivo /etc/apt/sources.lst
# Backports Debian Wheezy
deb http://http.debian.net/debian/ wheezy-backports main contrib non-free

Actualizar la lista de paquetes
$ aptitude update && aptitude update

Instalar el driver fglrx
$ aptitude -r -t wheezy-backports install fglrx-driver fglrx-control

Esto creará el archivo xorg.conf usando el módulo fglrx
$ aticonfig –initial

Agregar el driver libre “radeon” a la lista negra, modificar el archivo: /etc/modprobe.d/radeon-kms.conf; si tienes el archivo, de no tenerlo lo creas y agregas:
blacklist radeon
options radeon modeset=1

Reiniciar el equipo y listo!

Para probar si efectivamente el driver esta funcionando, utilizar las siguientes utilidades:

$ fglrxinfo

La salida debe ser algo como esto:
display: :0.0 screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon R9 200 Series
OpenGL version string: 4.3.12618 Compatibility Profile Context 8.982.13

$ glxinfo | grep render
La salida debe ser: direct rendering: Yes

$ glxgears
La salida debe ser una ventana con 3 engranajes (colores azul, rojo, verde) y un average FPS cada 5 segundos

$ fgl_glxgears
La salida debe ser una ventana con un cubo, en cada cara hay 3 engranajes (colores azul, rojo, verde; como en la salida anterior) y un average FPS cada 5 segundos

Los drivers disponibles en wheezy-backports son los AMD Catalyst 13.12, que tienen un buen rendimiento en linux incluso mejor que la serie 14.xx, sobre todo si se desea probar la minería Litecoin.

Saludos !

Viernes 17 de octubre de 2014

Vulnerabilidad crítica “Shellshock” afecta a Linux y OS X

Está Escrito:
No lo que entra en la boca contamina al hombre; mas lo que sale de la boca, esto contamina al hombre. (Mateo 15:11)
Tomado de: DiarioTI
Descuido en el diseño de la herramienta 'bash' - intérprete de la línea de comandos de Unix - permite en teoría ejecutar código a distancia y así tomar el control de sistemas. Shellshock ha impactado aproximadamente a medio millón de servidores web y dispositivos.

Una vulnerabilidad crítica recién descubierta llamada Shellshock, ha impactado aproximadamente a medio millón de servidores web, así como dispositivos conectados a Internet, incluyendo teléfonos móviles, routers y dispositivos médicos; de acuerdo con los expertos de defensas amenazas de Trend Micro. La empresa destaca que Shellshock, al estar relacionado con Linux, puede también afectar a las plataformas PC y Apple.
Shellshock es una vulnerabilidad crítica, que Trend Micro describe como “una plaga”. Dicha amenaza, al ser explotada, permite el acceso a los sistemas basados ​​en Linux a través de sus líneas de comando.
Considerando que estos sistemas constituyen aproximadamente el 51% de los servidores web en el mundo, la capacidad de penetración es elevada y los ataques podrían aumentar a un ritmo muy rápido.
“La reciente vulnerabilidad Heartbleed es de naturaleza similar a Shellshock, pero Heartbleed solo queda eclipsada por la extensión y alcance de esta nueva vulnerabilidad”, escribe Trend Micro.
Debido a la naturaleza y alcance de Shellshock, la empresa sugiere considerar lo siguiente:
- Usuario final: Estar atento a los nuevos parches de seguridad e implementarlos inmediatamente.
- Administrador de TI: Si cuentan con el sistema Linux, se recomienda deshabilitar los scripts o las secuencias de comandos BASH inmediatamente.
- Operador de sitio Web: Si el BASH está en sus scripts, parche lo antes posible, o modifique sus scripts para no utilizar BASH.
· Clientes que cuentan con servicios de hosting o de terceros: Pregunte a su proveedor que están haciendo para remediar y aplicar parches.
Trend Micro ofrece información actualizada sobre Shellshock” en su blog de seguridad.

Jueves 16 de octubre de 2014

Jorge Ortega

Jorge Ortega
Joenco

Script para agregar atajos de teclado en Gnome-shell

Una de las cosas que me gusta hacer cuando instalo por primera vez un equipo, es poder tener atajos de teclado o combinaciones de teclas para abrir mis aplicaciones preferidas como por ejemplo el Terminal/Consola, el editor de texto Gedit, el editor de documentos, el Pidgin, entre otras.

Gracias a que estoy suscrito en la lista de “tiflo-linux“, preguntando que archivos debía modificar para crear un script que me permitiera agregar los atajos sin necesidad de hacer eso gráficamente, el compañero “Manuel Cortéz” me comentó que en la pagina “http://community.linuxmint.com/tutorial/view/1171&#8243; explicaban como hacerlo, que me ayudo bastante para entender como se agrega los atajos por consola.

Haciendo algunas pruebas y ensayos, logre tener un script que me permite agregar atajos de teclado de mis aplicaciones favoritas y el cual puedes descargar sin problema: “script para agregar atajos en Gnome-shell“, para ejecutar debes:

1. Abrir un Terminal/Consola

2. Escribir:

$ python agregaratajos.py

      1. Listo!!, ya tienes los atajos.

Estas son las aplicaciones y sus atajos:

Gedit ctrl+alt+e

Terminal ctrl+alt+t

Writer ctrl+alt+w

Calc ctrl+alt+c

Pidgin ctrl+alt+p

Orca ctrl+alt+o

Carpeta personal ctrl+alt+h

Skype ctrl+alt+s

Gespeaker ctrl+alt+g

Navegador web ctrl+alt+n

Este script lo probé en Debian y Canaima4.0 pero debería funcionar también en Ubuntu y derivados, es de destacar que solo estoy identificando los navegadores “Iceweasel”, “Firefox” y “Cunaguaro”.

Si tienen alguna pregunta, duda o sugerencia sobre que falta en el script, me lo hacen saber en los comentarios.

Saludos a todos y ya sabes, si te ha gustado compártelo!!


Martes 14 de octubre de 2014

Respaldo y recuperación completo de GitLab con Postgresql

GitLab and Posgresql

GitLab tiene como la posibilidad de usar Postgresql como su motor de base de datos (a parte de MySQL) y todo viene ya listo para incluso hacer respaldos de su base de datos y sus repositorios Git haciendo uso de un script Ruby (un rake).  Esta es la forma recomendada ya que permite recuperar todo garantizando que no hay transacciones pendientes a nivel de base de datos ni de repositorios Git.

El  problema

En la documentación explican el detalle de cómo hacer un respaldo y restauración  manual, pero al momento de hacer la restauración esta falla porque al intentar insertar registros existentes estos generan conflictos como este:

ALTER SEQUENCE
psql:/home/git/gitlab/tmp/backups/db/database.sql:812: ERROR: relation "users" already exists

La solución

Se debe forzar el respaldo de pogresql para que primero borre las tablas para luego crearlas e insertar los registros en la restauración. Esto se consigue con la opción –clean o -c  de la orden pg_dump. Esta opción se debe editar en script ruby que realiza el respaldo, que por omisión es /home/git/gitlab/lib/backup/database.rb. En este archivo se debe ubicar esta porción del código y sustituir la línea en negrilla mostrada a continuación:

require 'yaml'
module Backup
 class Database
 attr_reader :config, :db_dir
def initialize
 @config = YAML.load_file(File.join(Rails.root,'config','database.yml'))[Rails.env]
 @db_dir = File.join(Gitlab.config.backup.path, 'db')
 FileUtils.mkdir_p(@db_dir) unless Dir.exists?(@db_dir)
 end
def dump
 success = case config["adapter"]
 when /^mysql/ then
 print "Dumping MySQL database #{config['database']} ... "
 system('mysqldump', *mysql_args, config['database'], out: db_file_name)
 when "postgresql" then
 print "Dumping PostgreSQL database #{config['database']} ... "
 pg_env
 system('pg_dump', config['database'], out: db_file_name)
 end
 report_success(success)
 end

Esta línea debe sustituirse por esta otra:

system('pg_dump', config['database'], '-c', out: db_file_name)

Aquí puede verse que la opción -c es pasada como argumento a la orden pg_dump. Esto hará que se incluyan todos los DROPS necesarios en el archivo .sql generado para el respaldo de GitLab

Actualización

En GitLab 7.4 este problema fue resullto con esto https://gitlab.com/gitlab-org/gitlab-ce/commit/77b57c114be6b1fa02538c35066ccc363bfe68e6 [Gracias Sytse Sijbrandij]

.

Viernes 10 de octubre de 2014

Probando una Epson multifuncional L210

Probando una Epson multifuncional

La impresora epson multifuncional L210 llega con tecnología innovadora de tanques de tinta, para imprimir miles, ahorrando miles. Con la tinta incluida, imprime* hasta 4,000 páginas en negro y 6,500 páginas a color, a un bajo costo de pocos centavos por página. Imprime, copia y escanea con gran calidad y facilidad. La L210 revoluciona la impresión en pequeñas oficinas y hogares -ideal para documentos, copias, reportes y fotos. Configure la impresora multifuncional en minutos y comience a producir impresiones de alta calidad. Obtendrá fotos y documentos nítidos y llenos de vida de manera rápida. Además, no es necesario esperar para manipular sus impresiones gracias a la tinta de secado instantáneo. También puede realizar copias a color. O bien, escanee y guarde recetas, informes escolares y documentos importantes; todo con el software que se incluye.

¿Qué hay en la caja?

  • La impresora.
  • 1 botella de tinta negra y 3 botellas de tinta a color (cian, magenta y amarilla) de 70ml cada una.
  • Cable de Alimentación.
  • Cable USB.
  • Guía rápida de instalación.
  • CD con drivers, manuales, software OCR y para edición de fotos.

Compatibilidad

  • Windows® 7
  • Windows Vista®
  • Windows XP
  • Windows XP Professional x64
  • Mac OS® X, 10.5.8, 10.6.x, 10.7.x, 10.8.x

Para saber mas de las caracteristicas, clic aqui.

Como instalarla en linux

La instalacion es totalmente sencilla, solo debemos ir a esta pagina http://download.ebz.epson.net/dsc/search/01/search/searchModule

Donde nos pregunta: “Enter product name” debemos colocar: “L210” que corresponde el nombre del nuestra impresora.

Selecionamos nuestro sistema operativo, en este caso, Linux

El resultado de la busqueda nos va a dar dos opciones de descarga:

  • Printer Driver
  • Scanner Driver

Bajamos esos paquetes, y listo, ya tenemos funcionando nuestra impresora epson sin problemas en nuestro equipo.

Nota

Recuerden seguir las instrucciones de recarga de los cartuchos. Es importante seguirlas al pie de la letra ;)

Miguel Ángel Useche

Miguel Ángel Useche
El weblog de Skatox » Planetas

La evolución de la web

Llevo muchos años haciendo desarrollo web, aproximadamente en 1999 hice mi primera página web en el extinto Geocities y de allí hice páginas por entretenimiento hasta que en el 2003, con esta página (antes de ser un blog) y otra de skate he estado involucrando en el mundo web.

Desde entonces ha habido muchos cambios en la web, por una parte, antes solo existía un navegador como tal pues Internet Explorer ocupaba como el 95% de la cuota y pocas personas usaban Netscape, limitando a los desarrolladores a solo crear cosas disponibles en esta aplicación que Microsoft había abandonado. Esto ocasionó el despliegue de complementos de terceros como Flash y Java, que traían a la web mayor interacción, animaciones a cambio de menor seguridad y lentitud. Pero al hacer un sitio con esas tecnologías, estabas seguro que funcionaba en cualquier computadora y que eventualmente tus lectores iban a sufrir vulnerabilidades de seguridad.

Por otra parte, en el año 2004 salió el navegador Mozilla Firefox que logró brindar una alternativa a los usuarios de la web y abrir la posibilidad de nuevos navegadores como Google Chrome que salió en 2008, para así destronar a Internet Explorer y fomentar una sana competencia por ganar usuarios a través de calidad, permitiendo el avance de tecnologías abiertas y el impulso de HTML5/CSS3. Con estas alternativas, los programadores y diseñadores tuvieron que adaptarse a los nuevos tiempos y actualizar o crear sus páginas para funcionar en cada navegador del mercado, pues dar soporte a uno solo no es opción, porque olvidas a sector importante de usuarios de Internet.

Con el lanzamiento de dispositivos móviles ahora la web estaba disponible en todas partes, desde cualquier lado puedes acceder a ella y fuera de tu computadora personal. Creando un nuevo reto pues una página no solo debía funcionar bien en todos los navegadores sino también en múltiples tamaños de pantalla y resoluciones, aumentando un poco el trabajo de los desarrolladores pero creando sitios dinámicos que funcionan en cualquier tamaño de pantalla.

Podría decirse que la evolución de la web siempre pone retos a los desarrolles y a quienes ejercen el diseño de sitios web, pero a su vez, permite a los usuarios disfrutar de una mejor plataforma, cada vez con mas posibilidades audiovisuales de forma nativa, tener videojuegos 2D y 3D en el navegador, contar con sistemas operativos como Chrome OS y Firefox OS que ejecutan aplicaciones web y muchas cosas mas por venir. Demostrando que tenemos a la web por mucho tiempo y seguirá siendo el principal medio de comunicación en el mundo.

Domingo 05 de octubre de 2014

Script php para chequear y notificar disponibilidad de servidores en SoYouStart

Miércoles 01 de octubre de 2014

Cómo activar la interfaz Web de qBittorrent

Si deseas controlar to servidor qBittorrent usando la interfaz web, sigue los siguientes pasos:

  1. En la barra de menú, ve a Tools > Options qBittorrent WEB UI
  2. En la próxima ventana, selecciona la opción Web UI
  3. Marca la opción Enable the Web User Interface (Remote control)
  4. Selecciona un puerto (Por omisión 8080)
  5. Configura el nombre de usuario y contraseña (Por omisión username: admin / password: adminadmin) WEB UI
  6. Haz clic en Ok para guardar las configuraciones.

Ahora podrás acceder a tu servidor desde un navegador si colocas la dirección IP y puerto de tu servidor qBittorrent, ejemplo: 192.168.1.100:8080 como se muestra a continuación: qBittorrent Web UI También puedes acceder desde tu dispositivo Android si instalas qBittorrent Client o qBittorrent Client ProqBitttoren Client Pro

Inkscape: Donde cada elemento es una capa

¿Te has preguntado en que se diferencia Inkscape de GIMP? Una de las principales razones por las cuales Inkscape es más utilizada para elaborar publicidad, es porque trata a cada elemento como una capa individual, esto permite que al elaborar un arte central, puedas simplemente reorganizar los elementos que lo componen para realizar un nuevo diseño, por lo tienes que olvídate de borrar y parchar nada.

En Gimp, si dibujamos varias figuras y no colocamos cada una en una capa, cuando queramos separarlas, no podremos, ya que todos los componentes que hicimos forman parte de una misma capa, en cambio, si realizamos las mismas figuras en inkscape, la diferencia es que podremos separarlas y trabajar con ellas como elementos individuales ya que cada una de ellas se comporta como una capa.

Por ejemplo, el diseño de esta web fue hecho con inkscape, así que dale un vistazo, deja tu comentario y no olvides suscribirte a mi canal de youtube y a este portal para seguir aprendiendo de forma fácil y rápida!

Y si te gusta mi contenido, no te olvides de votar por este blog como Mejor Blog de Software Libre, solo dale click al botón amarillo que dice “Votar” y confirma tu email! :D

flattr this!

Lunes 29 de septiembre de 2014

Miguel Ángel Useche

Miguel Ángel Useche
El weblog de Skatox » Planetas

Crea tu propia nube como Dropbox en tu servidor con Owncloud

Hace unos días Dropbox (un servicio para almacenar archivos y fotos en Internet) anunció su plan de $9.99 mensuales por 1TB, algo muy atractivo para la mayoría, pero si no posees el dinero para adquirirlo, es insuficiente la cantidad de espacio disponible en el plan gratuito o te molesta saber que la NSA (la agencia de seguridad nacional de EE.UU.) tiene la posibilidad de acceder a tus archivos, entonces te recomiendo instalar tu propio servicio con ownCloud, donde tienes control de tus datos.

Owncloud es un proyecto de código abierto que permite almacenar archivos, imágenes, contactos y actividades de un calendario en un servidor central, para sincronizarlos automáticamente en varios dispositivos tal como lo hace Dropbox.

¿Por que usar ownCloud?

Esta aplicación me parece excelente cuando quieres tener privacidad total en la nube o tener un servicio de sincronización de archivos/información en una red local. Porque puedes instalarlo en tu propio servidor web y a través de los clientes sincronizarlo automáticamente, de esta forma, siempre podrás acceder a tus archivos en cualquier parte donde exista conexión a Internet. El espacio disponible será el espacio libre en tu servidor, lo que es probablemente mayor al espacio ofrecido por los planes pagos de otros servicios.

El protocolo WebDAV

Una de las ventajas de ownCloud, es el acceso a los archivos a través del protocolo WebDAV. Esto permite que utilices aplicaciones de terceros para acceder a los archivos, puedes utilizar el explorador de archivos de Gnome/KDE/Mac para navegar en las carpetas y descargar solo el archivo que vas a usar (para el caso de Windows, toca instalar una aplicación para tener esta funcionalidad).

Esto es útil cuando tienes por ejemplo 40GB de archivos en la nube y en uno de los dispositivos donde deseas tener tus archivos sincronizados no tiene ese espacio disponible. Pues solo descargas el contenido que vas a utilizar.

Clientes

A pesar que existen clientes para diversos sistemas operativos, solo tuve oportunidad de probar la versión para teléfonos Android y la de Linux.

Web

Esta es el cliente que viene obviamente por defecto, la interfaz es agradable y tiene todas las funcionalidades básicas: navegación de archivos, consulta de contactos, calendario,  generar enlaces para compartir archivos a otras personas, configuración, etc. Algo que me gustó es la posibilidad de ver tus fotos en una galería como en servicios de terceros, permitiéndote ver tus fotos en cualquier parte, también tiene soporte para cuentas múltiples, el único detalle negativo fue la subida de archivos, que si me parece un poco arcaica pero funciona bien (aunque en algunos servidores da problemas con el límite de subida de archivos en PHP). Hace falta un editor de archivos, pero existen plugins con Libreoffice (no los he probado) para poder implementar esta funcionalidad que por los momentos está de pruebas.

Interfaz Web de Owncloud

Interfaz Web de Owncloud

Android

Cliente de Owncloud en Android

Cliente de ownCloud en Android

La aplicación oficial de Owncloud para Android es paga aunque su costo es pequeño, el dinero recaudado sirve para financiar el desarrollo proyecto por lo que deberías adquirir esta versión. Otra alternativa, es utilizar la tienda de Android llamada F-Droid, la cual está llena de aplicaciones de código abierto y allí descargar ownCloud gratuitamente.

Funciona muy parecida a la de Dropbox, te permite recorrer tus archivos, descargarlos o compartir un enlace para enviar a terceros, cargar automáticamente las fotos que tomes en el teléfono, por mencionar algunas. Una característica que me gustó fue un indicador de que el archivo ya se había descargado, permitiendo conocer que archivos se encuentran en el teléfono y cuáles en la nube, muy útil para ahorrar consumo de datos, respecto a este tema, te permite seleccionar que solo sincronice archivos en WiFi o que no suba vídeos con plan de datos, brindando mayor control sobre el tráfico de datos.

GNU/Linux

Owncloud en Linux

Owncloud en Linux

La versión de Linux está hecha en QT (parece estar integrada con KDE) y se ejecuta en segundo plano para chequear cambios en las carpetas, para posteriormente subir los archivos. Esta aplicación permite seleccionar sincronizar varias carpetas del servidor en distintas carpetas locales, dando mayor flexibilidad al momento de organizar los archivos. La única limitación observada fue la ausencia de soporte para enlaces simbólicos (Dropbox si los soporta) pero se pueden utilizar nombres de carpetas distintos en la nube o sincronizar múltiples carpetas para solventar este problema.

El único problema que vi en este cliente, fue la imposibilidad de sincronizar a través de la red local (LAN) con otras computadoras conectadas a la misma nube y la poca inteligencia para detectar cambios en archivos, pues algunos archivos que había subido los volvía a descargar pensando que era otro mas nuevo por la fecha de modificación. Pero aparte de ello, no encontré otro problema.

Integración con Dropbox y Google Drive

Migrar a ownCloud no significa que te aísles del resto de servicios, pues tiene opciones para agregar carpetas con archivos alojados en: Amazon S3, Dropbox, FTP, Google Drive, OpenStack Object Storage, otro servidor de ownCloud, SFTP, WebDAV, entro otros. Con tan solo agregar una carpeta remota en las opciones e iniciar sesión, tendrás una carpeta sincronizada con estos servicios, permitiendo acceder de forma centralizada a cada uno de estos servicios.

Conclusiones

Te recomiendo utilizar ownCloud si deseas administrar tu propia nube personal, tienes un servidor con mayor espacio que el ofrecido por Dropbox, deseas administrar tu calendario y contactos sin depender de terceros. El hecho de tener muchos GB de espacio, acceso a mis archivos desde cualquier lado y con gran privacidad, fue suficiente para mí la migración a este servicio, además ¡Es de código abierto!

Sábado 27 de septiembre de 2014

Realizar un RMA (Return Merchandise Authorization) desde Venezuela

Hola, de nuevo por acá.

Por allá por el 2012 compré un kit de memoria RAM DDR3 de 2x4Gb PC12800 en amazon. Por razones obvias, no fue hasta 2013 en que terminé de armar mi máquina (la descripción aca).

Desde el primer momento todo bien, hasta que por necesidad, tuve que instalar win server 2012 (lo necesitaba para realizar unas pruebas con NAT64). Se me presentaron muchos problemas a la hora de instalarlo, incluso sobre vmware. En linux nunca se me reinició la máquina, incluso haciendo pruebas con Xen, mientras que en win sí, al primer reinicio (pantallazo azul) el problema era obvio; solo restaba iniciar memtest y listo, memorias malas. NOTA: Para probar memorias con memtest, es recomendable probar un solo módulo a la vez.

Para realizar el proceso de devolución o RMA, ingresé al sitio de soporte y garantía de Corsair aca (), luego me registré en el sitio https://corsair.secure.force.com y seguí las instrucciones para iniciar el proceso.

El proceso fue muy rápido y sencillo, solo aperturas el ticket seleccionando el producto (Memoria RAM), seleccionas el modelo (CMZ8GX3M2A1600C9B en mi caso), número de lote de las memorias, describir el problema presentado (en mi caso ya hay uno predefinido, I have tested the memory with memtest, and it shows errors) y datos como marca y modelo de la Motherboard, modelo de CPU y sistema operativo.

Al día siguiente de haber abierto el ticket, me responden solicitando fotos de las memorias y su caja; donde se pueda observar el lot number; archivo pdf de la factura (en este caso, busque en mi historial de amazon e imprimí en pdf la orden de compra) y por último, una foto del memtest donde se aprecien los errores. Una vez suministrada esta información, en un día me fue aprobado el RMA, me enviaron a mi cuenta de correo un link donde se descarga la etiqueta que contiene el número de RMA, la dirección de envío del producto defectuoso (también aparece la dirección donde enviarán el producto de reemplazo) y las instrucciones de embalaje del producto.

Para el envío de las memorias, fuí a un mail boxes etc y me ofrecieron el envío por Fedex (el envío me costo poco menos de 700Bs). Para realizar el envío, suministré las memorias malas, la factura de la compra y la etiqueta enviada por Corsair (allí estan los datos del departamento de RMA Corsair para el continente Americano, Hayway CA, USA), ellos embalan el producto en una caja estandar (cajas utilizadas por Fedex para realizar envíos internacionales) y se realiza el papeleo para el envío. Es importante que en la caja se pueda observar lo siguiente: RMA # xxxxxx (se puede escribir con marcados); de esta manera una vez llegado el paquete, corsair lo identifica rápidamente.

El envío por Fedex se tardó unos 3 días en llegar, y 24 horas despues de haber llegado, me enviaron unas memorias nuevas desde Taiwan. En el caso de Corsair, los productos de reemplazo, los envían por UPS y Fedex, dependiendo del tamaño.

En total, el proceso duró 19 días, desde que abrí el ticket para iniciar el proceso de devolución hasta que me llegaron las memorias nuevas.

Hasta la proxima !

Jueves 25 de septiembre de 2014

Donde encontrar increibles Fotos Gratuitas

Uno de los retos mas grandes cuando nos toca realizar un website o una publicidad en general es encontrar fotografías geniales a un buen costo (o gratis dependiendo del cliente), y no es que sea malo pagar por fotografías, pero a veces el cliente es pequeño y pues el presupuesto no alcanza. En la red hay miles de servicios que proveen fotografías de alta calidad por un costo de suscripción mensual, por paquete o por fotografía, pero hay un mundo de sitios que ofrecen fotografías de forma gratuita bajo una licencia amigable para esas necesidades que tanto tenemos como diseñadores. Veamos algunos de mis favoritos:

dttsf

Death to Stock Photo es un servicio al cual te suscribes dejando tu email en su website, y mensualmente envía sets de 10 fotografías ambientadas usualmente en el tema del mes, con una calidad increíble y una variedad super útil. Cada vez que recibes un correo de ellos te emocionas solo al ver el titulo porque sabes que una explosión de creatividad ha llegado a tu correo.

pixabay

Pixabay es un excelente sitio donde el orden de sus etiquetas y categorías son la clave para encontrar lo que quieras, cuando quieras. No requiere registrarse y su interfaz es muy parecida a la de 500px, por lo que encontrar y descargar contenido es pan comido.

nos

New Old Stock es una colección de fotografías públicas antiguas que están libres de todo tipo de restricción de derechos de autor. Es muy a lo tumblr y es algo difícil ubicar fotos por categorías o etiquetas, sin embargo, la cantidad de fotografías referenciales a artículos y momentos históricos que tiene es simplemente hermosa.

littlevisuals

Little Visuals sigue el estilo de Death to StockPhoto pero cada 7 días. Tiene fotos hermosas bajo dominio público pero lo bueno es que en su web, tienen a disposición todo el histórico de packs, por lo que si te perdiste uno o apenas te estás uniendo, puedes revisar los packs anteriores y bajar lo que necesites.

picjumbo

PicJumbo es un sitio que disfruta de una variedad abismal de contenido, además de tener un excelente plugin para tu browser que te avisa cuando hay contenido nuevo. Se agregan fotos nuevas diariamente, así que nunca te quedarás sin contenido fresco para tus necesidades.

Y recuerda que las votaciones para Mejor Blog de SoftwareLibre aún están abiertas, vota si aún no lo has hecho!!!

flattr this!

Miércoles 24 de septiembre de 2014

Como hacer videos para Instagram usando Kdenlive + Instashot

Te has preguntado como hago mis videos de Instagram? Trabajar con Kdenlive es muy fácil y una de las cosas que mas me gusta es que puedes arrastrar cualquier video, imagen o audio y automáticamente se cargará en la aplicación. Hacer un video en Kdenlive es como armar un rompecabezas, solo debes arrastrar las piezas que ya cargaste y ordenarlas. Puedes separar las pistas, cortarlas, agregarles efectos y mucho más. Poco a poco iré explicando como trabajar mas detalladamente con Kdenlive, pero primero, quiero que vean la potencialidad de esta aplicación y se enamoren de ella como yo lo he hecho.

Una vez exportado nuestro video mp4 lo copiaremos a nuestro teléfono, abriremos instashot y selecionaremos video. Navegaremos hasta encontrar nuestro video y lo cargaremos a la aplicación. En este punto verás una serie de opciones en la parte inferior, seleccionaremos Fit de ajustar, y si queremos que el video sea cuadrado como instagram, seleccionaremos Full. Puedes probar las otras opciones si te da curiosidad. Cuando estés feliz con el encuadre, pulsa el visto bueno a la derecha y en la parte superior encontrarás el enlace directo para cargarlo a instagram. Tarda un poco ya que le baja la calidad, al menos ese fue mi caso y eso te dará la opción de publicar de una vez.

Y así es como realizo los videos que me gusta compartir con ustedes en instagram y que ultimamente “creo” que los han hecho reir un monton. Recuerden que sus dudas se convierten en podcast, así que no sean timidos y dejen un comentario… ahh…. y si les gusta mi contenido, no olviden ir a portal programas y votar por tatica.org como mejor Blog de SoftwareLibre, su voto significa mucho para mi!

flattr this!

Miércoles 17 de septiembre de 2014

Usando SSH para actualizar WordPress

En estos días me ha tocado atender un nuevo cliente, la gente de 4lochas.com, un portal de música y variedades que tiene rato hosteado con nosotros, pero que cambió recientemente de administración. Luego de una buena cantidad de setbacks (menores y mayores), pusimos a andar el sitio. Y, si bien es cierto que hay un par de caídas de vez en cuando, el sitio está operativo la mayor parte del tiempo. Esas cosas se van a ir corrigiendo a medida que se van afinando los detalles.

Entre las cosas que me solicitaba, estaban las de actualizar plugins y temas y esas cosas. Obviamente, lo primero que se hace con un cliente nuevo es darle sus credenciales de usuario. Pero, en el caso de mis servidores, hay una configuración estándar de ssh, en la que PasswordAuthentication está desactivado, y sólo puedes loguearte si tu llave pública está añadida en el authorized_keys correspondiente. Por lo que el cliente debe generar llaves ssh para poder añadirlas a su archivos de llaves autorizadas. Desafortunadamente, putty no es particularmente sencillo en su uso de llaves. Al menos, no para mí que sólo lo he usado un par de ocasiones, y nunca desde mis equipos.

En fin, revisando por el internés alguna forma de automatizar el proceso de autenticación vía llaves ssh en wordpress, conseguí este artículo en el que explican paso a paso lo que debe hacerse. La cosa es que está hecho para distribuciones basadas en RedHat.

No voy a ahondar mucho en cómo se instala ssh, cómo creas llaves públicas, cómo accedes a ellas y cómo las llevas al servidor. De esos hay muchísimos artículos por toda la internet que está a un googleo de distancia. Lo que sí voy a decirles es qué necesitan desde ese punto en adelante para tener el wordpress andando en [una distro basada en] debian.

Lo primero, instalar libssh2-php

apt-get install libssh2-php

Luego, añadir esto en su wp-config.php. Les sugiero que las añadan luego de los salt strings.


define('FTP_PUBKEY','/home/tu_usuario/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/tu_usuario/.ssh/id_rsa');
define('FTP_USER','tu_usuario');
define('FTP_PASS','hackme');
define('FTP_HOST','127.0.0.1:22');

Donde:
FTP_PUBKEY: Es la llave pública. Usualmente se aloja en ~/.ssh
FTP_PRIVKEY: Es la llave privada. Usualmente se aloja en ~/.ssh
FTP_USER: Obviamente, tu usuario
FTP_PASS: El password.
FTP_HOST: En este caso, 127.0.0.1, porque se supone que estás descargando local en tu servidor. Puedes usar un TLD o incluso un subdominio.

Ya con eso no deberías requerir configurar nada más para actualizar o instalar cualquier cosa en WordPress. De hecho, lo probé actualizando a WP4, añadiendo un nuevo tema e instalando plugins y actualizaciones requeridas sin ningún inconveniente.

Viernes 12 de septiembre de 2014

Héctor Colina

Optimizando recursos en tu computador

En aras de optimizar el uso de un minicomputador que estoy utilizando, he venido realizando una serie de instalaciones controladas obviando muchos de  los paquetes predefinidos que ofrece el instalador de Debian, en este caso.

Al momento de la instalación de Debian, utilicé la versión testing:

hector@helga:/tmp$ cat /etc/debian_version 
jessie/sid
hector@helga:/tmp$

Y como manejador de ventanas e17 junto con lightdm como gestor de inicio de sesión gráfica.

Esta combinación me ha permitido ahorrar recursos en el equipo VIT M1100, computador de procesador  Intel Atom CPU N270 a 1.60GHz con 2 Gb de RAM; por ejemplo, no es infrecuente que en ese equipo tenga funcionando, como ahora, LibreOffice, un navegador web con 10 ventanas abiertas, una consola (utilizo lxterminal) con 3 pestañas abiertas y el rendimiento del mismo sea bastante aceptable

 hector@helga:/tmp$ free
 total used free shared buffers cached
Mem: 2062084 1331972 730112 112288 48432 671848
-/+ buffers/cache: 611692 1450392
Swap: 3906556 0 3906556
hector@helga:/tmp$

Sin embargo, una de las cosas que extrañé fue una herramienta que me permitiese utilizar la webcam, para ello, utilicé la herramienta fswebcam, disponible en los repositorios de Debian y que se utiliza de la siguiente forma:

hector@helga:/tmp$ fswebcam -r 1024x768 --jpeg 200 -D 1 captura.jpg

Donde:

r es la resolución

–jpeg es la resolución de salida del formato a utilizar

-D es el retardo que se utilizará para que luego de activada la cámara se tome la fotografía, en algunos casos, este valor debe ser mayor para permitir que el sensor de la cámara calibre la luz exterior

Acá un ejemplo de la captura realizada.
captura

Espero les sea útil esta entrada.

Viernes 29 de agosto de 2014

Oliver Rivas

Oliver Rivas
orvtech.com

Eliminando todos los mensajes directos de Twitter con Python

Sigo en mi travesía por aprender Python y que mejor forma que solucionar problemas en funciona a la privacidad.

Varias personas me comentaron lo tedioso que es eliminar mensajes privados en Twitter así que decidi hacer una herramienta que me permita automatizar todo esto.

Lo primero es crear una app en twitter visitando apps.twitter.com y otorgarle permisos de lectura, escritura y DMs. Allí mismo pueden generar el consumer_key, consumer_secret, access_token_key y el access_token_secret.

El script no es nada complejo y de hecho hay oportunidades para mejorarlo, aqui se los dejo:

# https://github.com/orvtech/Python-tools-for-twitter
import json
import requests
from requests_oauthlib import OAuth1


consumer_key='<YOUR CONSUMER KEY HERE>'
consumer_secret='<YOUR CONSUMER SECRET HERE>'
access_token_key='<YOUR ACCESS TOKEN HERE>'
access_token_secret='<YOUR ACCESS TOKEN SECRET HERE>'


def get_messages_ids():
  api_url='https://api.twitter.com/1.1/direct_messages.json'
  payload = {'count':'200', 'cursor':'-1', 'skip_status':'1'}
  auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
  r = requests.get(api_url, stream=False, auth=auth, params=payload)
  if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
    print("We reached rate limit for ", api_url)
    print("Try again at", r.headers["x-rate-limit-reset"])
    quit()
  DMs = json.loads(r.content)
  message_ids=[]
  for x in range(len(DMs)):
    current_ids=DMs[x]['id']
    message_ids.append(current_ids)
  api_url='https://api.twitter.com/1.1/direct_messages/sent.json'
  payload = {'count':'200'}
  r = requests.get(api_url, stream=False, auth=auth, params=payload)
  if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
    print("We reached rate limit for ", api_url)
    print("Try again at", r.headers["x-rate-limit-reset"])
    quit()
  DMs = json.loads(r.content)
  for x in range(len(DMs)):
    current_ids=DMs[x]['id']
    message_ids.append(current_ids)
  return message_ids


def nuke_messages(DMs):
  for x in DMs:
    api_url='https://api.twitter.com/1.1/direct_messages/destroy.json'
    payload = {'id':x}
    auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
    r = requests.post(api_url, stream=False, auth=auth, params=payload)


while True:
  DMs = get_messages_ids()
  if DMs and len(DMs) > 0:
    print('Deleting:', DMs)
    nuke_messages(DMs)
  else:
    print('There appears that there are no more DMs', DMs)
    break

Usa solo 2 funciones, una en la que invoca primero los primeros 200 mensajes recibidos y luego los primeros 200 mensajes enviados. Tras evaluar si en realidad existen mensajes, se le pasan los IDs de los mensajes a eliminar a la segunda función y se repite este proceso hasta que no existan mas IDs a eliminar.

Tanto las llamadas de al API para saber los IDs de los mensajes enviados como las de los mensajes enviados tiene un limite así que implemente mecanismos para monitorear si se llego al limite leyendo las cabeceras de las peticiones HTTP.

Por lo pronto pueden hacer un fork de este repositorio de github En un futuro me gustaría convertirlo en una aplicación web usando flask o algo por ese estilo.