Sábado 25 de marzo de 2017

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

Viernes 24 de marzo de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Dear lazyweb: How would you visualize..?

Dear lazyweb,

I am trying to get a good way to present the categorization of several cases studied with a fitting graph. I am rating several vulnerabilities / failures according to James Cebula et. al.'s paper, A taxonomy of Operational Cyber Security Risks; this is a somewhat deep taxonomy, with 57 end items, but organized in a three levels deep hierarchy. Copying a table from the cited paper (click to display it full-sized):

My categorization is binary: I care only whether it falls within a given category or not. My first stab at this was to represent each case using a star or radar graph. As an example:

As you can see, to a "bare" star graph, I added a background color for each top-level category (blue for actions of people, green for systems and technology failures), red for failed internal processes and gray for external events), and printed out only the labels for the second level categories; for an accurate reading of the graphs, you have to refer to the table and count bars. And, yes, according to the Engineering Statistics Handbook:

Star plots are helpful for small-to-moderate-sized multivariate data sets. Their primary weakness is that their effectiveness is limited to data sets with less than a few hundred points. After that, they tend to be overwhelming.

I strongly agree with the above statement — And stating that "a few hundred points" can be understood is even an overstatement. 50 points are just too much. Now, trying to increase usability for this graph, I came across the Sunburst diagram. One of the proponents for this diagram, John Stasko, has written quite a bit about it.

Now... How to create my beautiful Sunburst diagram? That's a tougher one. Even though the page I linked to in the (great!) Data visualization catalogue presents even some free-as-in-software tools to do this... They are Javascript projects that will render their beautiful plots (even including an animation)... To the browser. I need them for a static (i.e. to be printed) document. Yes, I can screenshot and all, but I want them to be automatically generated, so I can review and regenerate them all automatically. Oh, I could just write JSON and use SaaS sites such as Aculocity to do the heavy-lifting, but if you know me, you will understand why I don't want to.

So... I set out to find a Gunnar-approved way to display the information I need. Now, as the Protovis documentation says, an icicle is simply a sunburst transformed from polar to cartesian coordinates... But I came to a similar conclusion: The tools I found are not what I need. OK, but an icicle graph seems much simpler to produce — I fired up my Emacs, and started writing using Ruby, RMagick and RVG... I decided to try a different way. This is my result so far:

So... What do you think? Does this look right to you? Clearer than the previous one? Worst? Do you have any idea on how I could make this better?

Oh... You want to tell me there is something odd about it? Well, yes, of course! I still need to tweak it quite a bit. Would you believe me if I told you this is not really a left-to-right icicle graph, but rather a strangely formatted Graphviz non-directed graph using the dot formatter?

I can assure you you don't want to look at my Graphviz sources... But in case you insist... Take them and laugh. Or cry. Of course, this file comes from a hand-crafted template, but has some autogenerated bits to it. I have still to tweak it quite a bit to correct several of its usability shortcomings, but at least it looks somewhat like what I want to achieve.

Anyway, I started out by making a "dear lazyweb" question. So, here it goes: Do you think I'm using the right visualization for my data? Do you have any better suggestions, either of a graph or of a graph-generating tool?

Thanks!

[update] Thanks for the first pointer, Lazyweb! I found a beautiful solution; we will see if it is what I need or not (it is too space-greedy to be readable... But I will check it out more thoroughly). It lays out much better than anything I can spew out by myself — Writing it as a mindmap using TikZ directly from within LaTeX, I get the following result:

Alcance Libre: Oferta de trabajo Desarrollador de JAVA

Viernes 17 de marzo de 2017

Alejandro Acosta

Alejandro Acosta
alejandroacosta.com

Participation at Scale15x

A few days ago I returned -incredibly satisfied- from attending my personal 7th Southern California Linux Expo, which was the 15th edition of the event. I’ve read a thing or two about the beginning of Scale, and how it has grown by the years to become one of the largest and more important FOSS events, not only in the US but also worldwide. From my perspective I can tell that the event gets better by every year.

The first five events that I attended were hosted in the LAX Hilton Hotel, which was great for me because transportation was fast, easy and very affordable 🙂

Since last year, it has switched location to the beautiful city of Pasadena and  its Convention Center  has proben to be an excelente venue for such amazing event. I must confess that the first time I heard they were moving it away from LAX I felt a bit uncertaint and maybe a little discouraged because of the long distances to Pasadena. I’m now glad and relieved to know that my fears had no reason to be and SoCal is always warm welcoming area to visit.

It is very satisfying to see a lot of familiar faces of Scale crew working their a**es, giving the best of theirselves to deliver this world class convention. Many of them have participated since Scale first edition.

It is also a great satisfaction to say hello to my old Fedora and RedHat friends. I’ve know many of them since my first Scale in 2011 and some of them even earlier when I attended my first -and so far only- Fedora Users and Developers Convention FUDCon back in 2010 in Tempe, AZ.

Two faces I particularly missed this year and I couldn’t avoid to notice: one of them is my good friend Larry Cafiero -former Fedora contributor and Scale press rockstar- and the other was Lord Drachenblut -aka Mathew Williams- who left this world way to early after a long and painful battle with cancer. I’ve just met Matthew last year in Scale14x, my travel confirmation came a bit late and I was not able to book a hotel nearby on time for the event. I asked Matthew if I could crash into his room and he said yes with no hesitation. I had the lucky chance of get to know him not only during the event activities and booth duty, but also after hours and during the stay. It did not take me long to see what Matt was made of and the kind of person he was. Matthew worked a lot in communites and has earned a special place among many of the attendes, he is being missed.

As part of the booth activities, we wanted to do something as a tribute to him, so we had this signing book in which people spontaneously approached and wrote some words of comforting and something his family would keep.

In other order of ideas, one thing that was very significant for me is that this was the first time I got to give a talk -not only at Scale- but also at an event out of my country. Yes, I bragged a bit on becoming an international speaker but I felt so happy and confident to share a bit of my experience with Fedora to a foreign language speaking audience and also to give back a little of the many things that I have received by participating in this wonderful project. Thanks to Perry Rivera for asking me to participate and allowing me to share the stage with him. Thanks also to Clint Savage for taking it easy when I mocked on him. Great comeback BTW 🙂

17016790_10158268672015557_8940515797083529303_o

Right after this talk we had our Fedora Meetup, in which we interacted with the audience listening on their experiences using Fedora and their suggestion on how to improve it. For Fedora we had Perry, Scott Williams, Brian Monroe and myself. We also had Adam Miller from Red Hat and some other RH folks who contributed to make a great exchange of ideas. This was one rich experience I will ever bear in my mind.

17103309_10101810968571274_3543603321226478432_n

Talking about the  booth duty, it is always very satisfactory to interact with the attendees. There is always young people eager to learn knew things and it is always very nice to help a bit with their initiatives. Being in SoCal, you can always expect a big latino audience. I met people from several countries and several american citizen with latino roots. Some of them appreciate and treasure to talk to a friendly person in spanish, and I found that quite satisfying as well.

Scale15x is a wrap now and I only hope that I could be there next year. I’m sure that I wouldn’t be disappointed because Scale is about setting the bar higher everytime.

 

 

 

 

 

 

 

 

 

 


Lunes 13 de marzo de 2017

Planeta Linux – Xanax For Sale » Reliable Online Pharmacy

Fotos y Comentarios

Jueves 09 de marzo de 2017

Fco. de la Torre Inguanzo

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

Android casi alcanza a windows como el SO más utilizado en Internet

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

Hoy veo una nota titulada Android challenges Windows as world’s most popular operating system in terms of internet usage que llamó poderosamente mi atención y quisiera comentarla con ustedes.

En la gráfica se puede ver un descenso enorme en la popularidad de Windows seguido de un aumento considerable para Android (Apple tiene sus seguidores, pero no aumentan).

sistemas operativos 2012-2017 statcounterGŕafica de StatCounter

Les recuerdo que la gráfica mide la popularidad de estos sistemas operativos cuando se utilizan para internet. O dicho en otras palabras, si se conecta a Internet ¿Qué sistema operativo utiliza?.

No veo ninguna razón por la cual se detenga el crecimiento de Android y si veo muchos problemas con los productos que ofrece Microsoft ¿Se acuerdan de Nokia Lumia?¿Alguién dijo Surface?.

La batalla ahora es móvil.

Windows sigue ganando en el escritorio, pero tal parece que el campo de batalla se ha trasladado hacia los dispositivos móviles (tabletas, celulares, etc.). Un lugar en el que Android gana terreno cada día por la enorme multitud de propuestas que aparecen cada día y sus principales competidores no tienen contendientes que estén a la altura.

La tendencia parece irreversible, dentro de poco habrá más dispositivos Android conectados a Internet que equipos con Windows.

El mal acecha.

Se acuerdan que hace unos años decíamos que en Linux no había malware simplemente porque éramos muy pocos. Bueno Android se esta volviendo blanco de software malintencionado al por mayor.

Todos los días veo programas en Google Play que me hacen dudar si es apropiado instalarlos o no. Peor aún, el software de reputación tiene políticas de seguridad cuestionable, abundantes permisos o según las últimas noticias de Wikileaks tienen más puertas traseras y vulnerabilidades que la Matrix.

Un nuevo panorama se contempla. La seguridad informática tomará nuevos tintes. Las vulnerabilidades y actualizaciones serán el pan nuestro de cada día, pero ahora basadas en sistemas Linux ya no en Windows.

Sume usted el Internet de las cosas un segmento también dominado por sistemas abiertos gracias a su plasticidad y que no requiere el pago de licencias.

Vamos que hay tema para rato.

Cambio de habilidades.

La tecnología dominante es la que impone sus reglas y eso implica un cambio de habilidades. Todo cambia, los lenguajes, las herramientas de desarrollo, software de colaboración, las ideologías, el hardware. Lo que era necesario en Windows ya no lo es en Linux.

Incluso el mismo Microsoft ha coqueteado con Linux, supongo que se está dando cuenta de que la tendencia es por este lado.

microsoft loves linuxDurmiendo con el enemigo.

¿Porque Android/Linux/Apple y no Windows?

Creo que la respuesta es muy simple, porque funcionan y funcionan bien. Recuerdo que un amigo celebraba el hecho de que las nuevas tabletas de la SEP utilizaran Windows 8. Está de más mencionar que fueron una pesadilla para alumnos, maestros y soporte técnico comparadas con sus contrapartes Linux/Android.

Windows se ha quedado estancado en temas de compatibilidad, malware, rendimiento decreciente y problemas al por mayor. Súmele a lo anterior problemas de privacidad. El usuario que más me visita tiene Windows 10 ¿Coincidencia? no lo creo.

¿Usted qué opina? Empieza a notar un movimiento hacia la utilización de Linux/Android.

Android casi alcanza a windows como el SO más utilizado en Internet
Linuxman.

Lunes 06 de marzo de 2017

José Oviedo

José Oviedo
oviedo.mx

Instalar extensión OpCache en XAMPP

La manera de instalar una extensión en PHP es editar el archivo PHP.ini y agregar extension=php_EXTENSION.dll o php_EXTENSION.so (sí no utilizas windows) pero al querer agregar la extensión de OpCache lo tradicional sería:

extension=php_opcache.dll

Pero el archivo de error.log arroja lo siguiente:

PHP Warning: PHP Startup: Invalid library (appears to be a Zend Extension, try loading using zend_extension=php_opcache.dll from php.ini) in Unknown on line 0

Aquí la solución es agregar la extensión pero de Zend, quedando así:

zend_extension=php_opcache.dll

Reinicias el servicio de Apache y listo!,

Martes 28 de febrero de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Much belated book presentation, this Saturday

Once again, I'm making an announcement mainly for my local circle of friends and (gasp!) followers. For those of you over 100Km away from Mexico City, please disregard this message.

Back in July 2015, and after two years of hard work, my university finished the publishing step of my second book. This is a textbook for the subject I teach at Computer Engineering: Operating Systems Fundamentals.

The book is, from its inception, fully available online under a permissive (CC-BY) license. One of the books aimed contributions is to present a text natively written in Spanish. Besides, our goal (I coordinated a team of authors, working with two colleagues from Rosario, Argentina, and one from Cauca, Colombia) was to provide a book students can easily and legally share with no legal issues.

I have got many good reviews so far, and after teaching based on it for four years (while working on it and after its publication), I can attest the material is light enough to fit in a Bachelors level degree, while it's deep enough to make our students sweat healthily ;-)

Anyway: I have been scheduled to present the book at my university's main book show, 38 Feria Internacional del Libro del Palacio de Minería this Saturday, 2017.03.04 16:00; Salón Manuel Tolsá. What's even better: This time, I won't be preparing a speech! The book will be presented by my two very good friends, José María Serralde and Rolando Cedillo. Both of them are clever, witty, fun, and a real honor to work with. Of course, having them present our book is more than a double honor.

So, everybody who can make it: FIL Minería is always great and fun. Come share the love! Come have a book! Or, at least, have a good time and a nice chat with us!

Domingo 26 de febrero de 2017

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Ser agradecido en tiempos de abundancia

Hoy mientras hacíamos fila para cruzar al otro lado, probablemente a comprar cosas triviales, recordé lo afortunado que soy al ver (como es usual en la frontera) la cantidad de gente no solamente pidiendo “limosna” sino “pasando el trapo” por los carros, vendiendo dulces u ofreciendo algún tipo de servicio para ganarse la comida del día, aquellos con suerte están mas o menos sanos, sino es por las marcas físicas de las drogas son también mas o menos afortunados, los menos, en sillas de ruedas sin piernas o hasta en patinetas como modo de transporte para discapacidad improvisado y moviéndose como pueden.

Podría estar lleno de clichés pero la verdad es que a diario veo personas, situaciones y entornos que me hacen pensar que tengo una vida privilegiada, de verdad! pues más allá del hecho de que tengo “estabilidad económica” tengo muchas cosas que otras personas (no necesariamente ajenas a mi, por cierto) adolecen; una extraordinaria pareja, un trabajo que disfruto mucho, buenos amigos y salud. En realidad considero que “hago lo que quiero” y aunque suene muy hedonista de mi parte es la verdad. Prácticamente son pocas las cosas que no puedo hacer por alguna limitante física, emocional o económica y por eso estoy agradecido conmigo mismo en primera instancia, en mi mujer, familia, amigos y en genreal cualquier persona que me ha tendido la mano de alguna u otra forma durante mi vida con la cual por supuesto estoy también sumamente agradecido pues no creo en deidades.

Lo anterior es solo contexto sobre el tema principal: el ser agradecido en tiempos de abundancia, es decir, recordar que no siempre tuvimos o tendremos todo lo que deseamos y que hay que ser humildes, aun cuando “las vacas están gordas”. Este post lo deshebré en mi cabeza hace algunos días después de leer un artículo de un colega sobre le tema de los “head-hunters” que no es mas que un término que suena bonito para decir reclutador. El artículo es simplemente una serie de tweets (como 10) sobre cosas que NO debería hacer un reclutador, particularmente con prospectos que se dediquen al tema de la tecnología. Y es que si hay demanda de algo en este momento es de ingenieros, particularmente los que se dedican a la creación de software.

En síntesis, lo que Miguel expone es la falta de profesionalismo de algunos reclutadores para siquiera investigar sobre el puesto que están solicitando o los requerimientos de la vacante así como los conocimientos que debería tener dicho prospecto. Si bien Miguel trata puntos con los que estoy totalmente de acuerdo (como el hecho de que un reclutador de programadores o personas que nos dedicamos a tecnología siga pidiendo un CV formal en vez de ver nuestro perfil de LinkedIn por ejemplo) hay una constante entre los colegas, ingenieros, programadores y anexos: “Ah como chingan los reclutadores”, lo leo en redes sociales y lo escucho constantemente en mis compañeros de trabajo.

Vivimos en tiempos complicados tanto económicos como sociales. Particularmente, en el ámbito laboral, ya sea que no encuentras trabajo o está pésimamente remunerado y con exigencias propias de un sistema de feudos. Afortunadamente, para quienes nos dedicamos a la programación, eso es solo una noticia en un diario nacional o en un artículo de economía pues nuestro sector no solo sigue a la alza sino que sigue demandando más profesionistas de los que hay disponibles, ergo, tanto empresas de reclutamiento como departamentos de RH se pelean, literalmente, a la gente.

Precisamente, por esta abundancia (que espero no sea otra burbuja a punto de reventar) es que me siento afortunado y agradecido pero, ¿Sáben con qué me siento agradecido también? Con los reclutadores!

Quienes se dedican a contratación de personal son personas de carne y hueso como tu, bendito programador hijo de Dios Padre y Madre Santísima!, y como yo. La diferencia es que, además del ego bastante inflado, tenemos la sartén por el mango… y el mango también, y lo que esto significa es que nosotros somos la oferta, que es escasa y nuestros amigos reclutadores son la demanda, y son mucha. Estoy seguro que si los papeles se invirtieran, es decir, si el mercado estuviera saturado o con pocas ofertas, la mayoría de mis colegas suavizaría un poco su discurso.

He tenido la oportunidad (y necesidad) de tener que ser parte del proceso de reclutamiento, entrevista y análisis de perfil de varias personas durante mi carrera y de verdad es no solamente tedioso sino difícil, aun para alguien técnico como yo. Si bien se debe tener ciertos parámetros de calidad para dicho proceso, el perfeccionarlo está tan lejos de la realidad como lo es que el código que escribimos a diario no tenga ningún error ni requiera cambios. La diferencia es grande: los reclutadores están a la vista de todos, públicamente, mientras que nuestras metidas de pata (por no decir pendejadas) se quedan en nuestro equipo, si acaso, con el administrador de proyectos. Como no estamos tan expuestos pues nos sentimos perfectos. Le llamo el síndrome del programador recluso.

Correos con ofertas de trabajo me llegan muy a menudo y aunque algunos ni siquiera los contesto precisamente por coincidir con algunos de los puntos que Miguel expone en su artículo, como el hecho de ofrecerme vacantes que no tienen nada que ver con mi perfil, trato de ser agradecido de la manera que me enseñaron en mi casa: decir “No, gracias”. No es tan difícil. Usualmente me lleva 1 minuto redactar una respuesta simple a la persona, de entrada agradeciéndole tomarse el tiempo de considerarme en su selección, posteriormente exponiendo las razones por las cuales no estoy disponible en este momento para dicha oportunidad (tomen nota de la diferencia entre “no puedo” a “no me interesa”, psicología mis estimados) y finalmente despidiendome y dejando la “puerta abierta” para futuras oportunidades.

La mayoría de los ingenieros que conozco tienen poco tacto y ni que decir de la capacidad para asimilar el hecho de que parte de su reputación está en esas respuestas. La vida da muchas vueltas, y es importante ser agradecido. Podríamos escudarnos en el ya bastante trillado cliché de que los ingenieros y programadores no tienen habilidades sociales y por eso reaccionamos así, pero me pregunto ¿Si con el tiempo hemos aprendido a ser unos hijos de puta ególatras, no podríamos también aprender a ser agradecidos? Quizá solo somos “medio tontos“.

Así que queridos reclutadores, head-hunters y personal de recursos humanos dedicado a buscarnos trabajo: Gracias! Y aunque hoy no tenga disponibilidad para tu proyecto espero podamos coincidir en un futuro para otra posible oportunidad.

Viernes 24 de febrero de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Started getting ads for ransomware. Coincidence?

Very strange. Verrrry strange.

Yesterday I wrote a blog post on spam stuff that has been hitting my mailbox. Nothing too deep, just me scratching my head.

Coincidentally (I guess/hope), I have been getting messages via my Bitlbee to one of my Jabber accounts, offering me ransomware services. I am reproducing it here, omitting of course everything I can recognize as their brand names related URLs (as I'm not going to promote the 3vi1-doers). I'm reproducing this whole as I'm sure the information will be interesting for some.

*BRAND* Ransomware - The Most Advanced and Customisable you've Ever Seen
Conquer your Independence with *BRAND* Ransomware Full Lifetime License!
* UNIQUE FEATURES
* NO DEPENDENCIES (.net or whatever)!!!
* Edit file Icon and UAC - Works on All Windows Versions
* Set Folders and Extensions to Encrypt, Deadline and Russian Roulette
* Edit the Text, speak with voice (multilang) and Colors for Ransom Window
* Enable/disable USB infect, network spread & file melt
* Set Process Name, sleep time, update ransom amount, Give mercy button
* Full-featured headquarter (for Windows) with unlimited builds, PDF reports, charts and maps, totally autonomous operation
* PHP Bridges instead of expensive C&C servers!
* Automatic Bitcoin payment detection (impossible to bypass/crack - we challege who says the contrary to prove what they say!)
* Totally/Mathematically IMPOSSIBLE to DECRYPT! Period.
* Award-Winning Five-Stars support and constant updates!
* We Have lot vouchs in *BRAND* Market, can check!
Watch the promo video: *URL*
Screenshots: *URL*
Website: *URL*
Price: $389
Promo: just $309 - 20% OFF! until 25th Feb 2017
Jabber: *JID*

I think I can comment on this with my students. Hopefully, this is interesting to others.
Now... I had never received Jabber-spam before. This message has been sent to me 14 times in the last 24 hours (all from different JIDs, all unknown to me). I hope this does not last forever :-/ Otherwise, I will have to learn more on how to configure Bitlbee to ignore contacts not known to me. Grrr...

Jueves 23 de febrero de 2017

Julio Poisot De María

Julio Poisot De María
Dianamo

hardhedgehoglife: All the Valentines I have made! The albino...









hardhedgehoglife:

All the Valentines I have made! The albino bunny isn’t available on my etsy this year unless I get requests for it, but the rest are!

hardhedgehoglife.etsy.com

Julio Poisot De María

Julio Poisot De María
Dianamo

hardhedgehoglife: hardhedgehoglife: hardhedgehoglife: (Un)happy...







hardhedgehoglife:

hardhedgehoglife:

hardhedgehoglife:

(Un)happy Valentine’s Day! To celebrate, here’s three poems from me, your reluctant cupid:

“I h8 you”

“Roses are red,
Violets are blue,
NO.”

“Roses are red,
Violets are blue,
Ur gross,
Ew.”

For you eager romantics.

That day for eating chocolates hedgehogs is coming up again.

Alcance Libre: Oferta para febrero y marzo de Curso Básico de CentOS 7 en modalidad online.

Miércoles 22 de febrero de 2017

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Cómo ejecutar cualquier programa en Linux

Hasta hace algunos años, uno de los mayores inconvenientes que conllevaba instalar Linux era la imposibilidad de ejecutar algunos programas de Windows en nuestro eficiente sistema operativo. Para solventar este problema se creó Wine. Aunque el proyecto comenzó en 1993, acompañando … Continue reading

Sábado 18 de febrero de 2017

Alcance Libre: Issabel la alternativa FOSS a Elastix

Miércoles 15 de febrero de 2017

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Etcher un Software para Grabar tus Imagenes ISO en una USB

El tiempo de los DVD y CDs va quedando en el pasado, hay equipos nuevos que ya no incluyen una unidad de estos discos desde hace algún tiempo y para hacer las instalaciones requerimos una memoria USB. Etcher es un … Continue reading

Martes 31 de enero de 2017

Fco. de la Torre Inguanzo

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

Copiar un sitio web para leerlo fuera de línea

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

Se te puede ofrecer tener  una copia de un sitio web para poder revisarlo cuando no estás conectado a internet.  Puede ser un manual que quieres conservar en tu celular o tableta o un libro que quieres leer en el camión o durante un viaje.

Anteriormente les había recomendado una instrucción con wget que funciona, pero a veces quieres automatizar un poco más la tarea.

HTTrack al rescate

HTTrack es una herramienta sencilla que tiene mucho tiempo en el mundo linuxero. Disponible para Windows, Linux, Apple y Android ¡No se puede pedir más!.

Existe como una orden de la terminal pero muchos prefieren (incluyendome) usar su interfaz gráfica.

La distribución de Linux que utilizo es  Manjaro y usé Octopi para buscar los paquetes necesarios tanto en los repositorios normales como en AUR.

Buscando los programas de httrack con Octopi.Buscando los programas de httrack con Octopi.

Claro que si quieren usar la terminal para instala los paquetes entonces sería algo más o menos así:

sudo pacman -S httrack
yaourt -S httraqt
 

El asistente

Usando la interfaz gráfica todo se simplifica, pero tengan cuidado, porque pueden terminar descargando más de lo que estaban buscando.

Si siguen las opciones por default tendrán un buen resultados.

El asistente básicamente sirve para responder algunas interrogantes:

  • El Nombre del proyecto.
  • La carpeta en dónde se van a almacenar los archivos.
  • Los URL que se quieren descargar.

El resto es dejar que el programa haga su chamba.

httrack copiando un sitioDescargando que es gerundio.

Lo que sigue es explorar la carpeta donde se descargaron los archivos, abrir el archivo index.html y listo !!!

archivos descargados por httrackArchivos descargados por httrack

El proyecto se queda guardando así que es posible pausar las descargas, programar que el equipo se apague cuando termine o simplemente volverlo a ejecutar para actualizar los archivos.

Supongo que puede ser útil para llevar sitios a comunidades que no tienen una buena conexión a internet, en fin, usen esta consejo sabiamente 🙂 .

Copiar un sitio web para leerlo fuera de línea
Linuxman.

Lunes 30 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Video: PostgreSQL – Reunión Gultij, enero de 2017

El pasado sábado 21 de enero de 2017 durante la reunión mensual del Gultij, Grupo de Usuarios de GNU/Linux de Tijuana, México, di una presentación sobre PostgreSQL, un sistema manejador de bases de datos objeto-relacional (ORDBMS).

Liga al video en YouTube: https://www.youtube.com/watch?v=xyq6b9wZ0aw

Miércoles 25 de enero de 2017

Nativo digital, de nuevo

Ya he escrito algunas cosas sobre nativo digital por acá, especialmente el como me parece que ha sido contraproducente para la educación y actualización de adultos, pero y aunque lo mencionamos ya en la plática y en las discusiones entre colegas y se intuía iba a suceder, pues resulta que ya pasó y se han encontrado nuevos problemas con el abuso del mismo y para no romper la costumbre lo dicen lo publican primero del otro lado del océano.

Mi animal mitológico favorito: El nativo digital. [1]

La charla es muy buena aunque sea comercial del libro por salir  ya a la venta [2]

[1] http://www.elmundo.es/sociedad/2017/01/22/5880b099e2704e7c598b45e2.html
[2] http://www.planetadelibros.com/libro-los-nativos-digitales-no-existen/231380

Mi queja con lo virtual

Hace mucho tiempo, leí el libro: Lo virtual: virtudes y vértigos de Philippe Queau (altamente recomendado ahora que nos quieren vender esto como novedad) [1] y quede fascinado con las posibilidades de mundos posibles que no existen, de decir la realidad virtual o como ahora se llama los mundos de inmersión completa… el propio Levy discute extenso sobre las limitaciones del termino y ayer en clase me avente a incorporar esta discusión a mi clase

Virtual en su acepción rápida significa potencial [1] “1, adj, Que puede producir un efecto, aunque no lo produce de presente en oposición a efectivo o real, 2 adj. Implícito, tácito, 3 adj. Fis. Que tiene existencia aparente y no real” y el punto es que tenemos mucho rato diciendo plataforma de educación virtual o educación virtual y a mí me sigue molestando, cuando andamos en otros lugares de Internet como Facebook ya no se habla de virtualidad y como hice la pregunta en clase, si rompes con la amiguita o el amiguito en Facebook ¿eso es virtual o real? Hubo una época en que se dividía el tiempo en la red con el tiempo en vida real (IRL In Real Life), pero hoy día no veo siquiera la utilidad de esto lo que hacemos en Internet, como nuestro banco, como las redes sociales (mediadas por computadora) son realidad no virtualidad, vaya que lo que hacemos hoy en la red modifica nuestra realidad inmediata, no niego que hay quien tiene separado y disociado su ser en diferentes avatares en redes diferentes y con sobrenombres distintos, pero para la mayoría de nosotros no es el caso.

Más importante aún quitarle el virtual a la educación en línea me parece un buen objetivo en mediano plazo, ya nos sucedió en una época que teníamos que decirle e-learning existiendo en español una mejor forma…

[1] Queau, Philippe (1995)  Lo virtual :   virtudes y vertigos, Barcelona :   Paidos Iberica
[2] Ni tan rapida termine transcribiendo toda la entrada de la RAE, pero su uso cotidiando es potencial, no real http://dle.rae.es/?id=buDJhh3

Martes 24 de enero de 2017

Fco. de la Torre Inguanzo

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

Buscar archivos con catfish en thunar

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

Empecé este año con un cambio de escritorio, abandoné el Cinnamon que me había acompañado hasta hace poco para sustituirlo con XFCE que es el entorno de escritorio elegido por Manjaro Linux.

Hubo varios motivos, pero el principal es que muchos recursos eran gastados en efectos y decoraciones que no me aportaban nada. Prefiero mil veces una interfaz rápida a una bonita.

Lo bueno es que XFCE no es tan primitivo, una vez enchulado es visualmente agradable con la ventaja de que es muy ligero.

¿Cómo buscar archivos?

Claro que con el cambio empiezas a extrañar algunas cosas. Por ejemplo,  Thunar no tiene un buscador de archivos. Con Nemo (el administrador de archivos de Cinnamon) sólo tenía que presionar Ctrl + F y listo, a buscar el archivo que necesitaba. Bueno Thunar no tiene nada de eso, al menos no lo tiene incluido por default.

catfish

Claro que hay herramientas para buscar archivos,  una de ellas es catfish, pero es una herramienta independiente. El truco es integrar esta aplicación a Thunar y para eso tenemos … (redoble de tambores) … las Acciones Personalizadas.

Editar acción Acciones personalizadas ThunarBuscar archivos

Solo hay que ir al menú EditarConfigurar acciones personalizadas y llenar los espacios como sigue:

  • Nombre: Buscar
  • Descripción: Para buscar archivos (opcional)
  • Orden: catfish --path=%f

Si todo se hizo correctamente verán una nueva opción en el menú Archivo o si presionan el botón del mouse sobre un área vacía de Thunar.

Listo como menú contextualAparece como menú contextual

Un consejo, tengan cuidado de lo que señalan al momento de llamar a catfish, el directorio donde se inicia la búsqueda puede ser un poco complicado al principio, ya sabrán de que les hablo cuando lo pongan en práctica.

catfishListo para buscar ese archivo…

Catfish tiene una interfaz limpia, simple y lo mejor es que incluye filtros para tipos de archivo o por fecha. Algo que no tienen las búsquedas con Nemo.

Las acciones personalizadas pueden servir  a otros propósitos. Denle un vistazo al wiki de Arch Custom actions para explorar otras posibilidades.

Buscar archivos con catfish en thunar
Linuxman.

Jueves 19 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Esperar hasta terminar la entrada estándar

Si uno teclea líneas a la entrada estándar desde el teclado, ésta se va procesando línea por línea:

$ cat -n
hola
     1	hola
mundo
     2	mundo
maravilloso
     3	maravilloso
^D
$

Así, resulta impráctico marcar la salida usando el ratón para copiarlo al portapapeles o simplemente para ver la salida junta. Como alternativas tenemos:

  • Marcar y copiar línea por línea, acumulando el resultado en un editor antes de copiar todo el texto. Muy impráctico.
  • Redirigir la salida a un archivo, pero aún queda pendiente tener que procesar y borrar el archivo después.
  • Usar tac | tac:
    $ tac | tac | cat -n
    hola
    mundo
    maravilloso
    ^D
         1	hola
         2	mundo
         3	maravilloso
    $
    

tac es una instrucción que concatena archivos y los despliega en reversa (LIFO en lugar de FIFO por línea). Por naturaleza, tac se ve en la obligación de leer la entrada estándar completa antes de poder mandar la primera línea de su salida. Si invertimos la entrada dos veces se obtiene el efecto deseado.

No sé hasta cuántas líneas soporte antes de volverse lento. Aquí con 10,000 líneas funciona aún bastante bien.

¿Alguien conoce alguna mejor manera?

Actualización: Dualbus me recomienda sponge de moreutils. Ejemplo:

$ sponge | cat -n
hola
mundo
maravilloso
^D
     1	hola
     2	mundo
     3	maravilloso
$

Según el manual, sponge “absorbe la entrada estándar y la escribe a un archivo”.

Miércoles 18 de enero de 2017

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Creating .NET Bindings for C Libraries with ObjectiveSharpie

We created the ObjectiveSharpie tool to automate the mapping of Objective-C APIs to the .NET world. This is the tool that we use to keep up with Apple APIs.

One of the lesser known features of ObjectiveSharpie, is that it is not limited to binding Objective-C header files. It is also capable of creating definitions for C APIs.

To do this, merely use the "bind" command for ObjectiveSharpie and run it on the header file for the API that you want to bind:

	sharpie bind c-api.h -o binding.cs

The above command will produce the binding.cs that contains the C# definitions for both the native data structures and the C functions that can be invoked.

Since C APIs are ambiguous, in some cases ObjectiveSharpie will generate some diagnostics. In most cases it will flag methods that have to be bound with the [Verify]. This attribute is used as an indicator on your source code that you need to manually audit the binding, perhaps checking the documentation and adjust the P/Invoke signature accordingly.

There are various options that you can pass to the bind command, just invoke sharpie bind to get an up-to-date list of configuration options.

This is how I quickly bootstrapped the TensorFlowSharp binding. I got all the P/Invoke signatures done in one go, and then I started to do the work to surface an idiomatic C# API.

Martes 17 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

postfix_delivery_search.bash

Este script sirve para buscar en los logs de Postfix 2.9.6 la historia de entrega de los correos que cumplan con el from= y el to= que se indiquen en el primer y segundo argumento del script, respectivamente.

#!/bin/bash

# Configuration variables
REQUIREMENTS="gawk grep"
LOGSOURCES="/var/log/mail.info.1 /var/log/mail.info"

# Check requirements
which $REQUIREMENTS > /dev/null 2>&1 || {
    echo The following required programs were not found:
    for R in $REQUIREMENTS; do
        which "$R" > /dev/null 2>&1 || echo "$R"
    done
    exit 63
}

# Check arguments
[ $# -eq 2 ] || {
    echo Usage: "$0" source_address destination_address
    exit 1
}

# These work for Postfix 2.9.6
function get_filter_from() {
    echo 'BEGIN { FS="[ :]+"} /from=<'$1'>/ && !/NOQUEUE/ { print $8 }'
}

function get_filter_to() {
    echo 'BEGIN { FS="[ :]+"} /to=<'$1'>/ && !/NOQUEUE/ { print $8 }'
}

function awniq() {
    gawk '!a[$0]++'
}

FILTER_FROM=$(get_filter_from "$1")
FILTER_TO=$(get_filter_to "$2")

# For each mail ID found in both from= and to= lines...
for ID in $(grep -f <(gawk "$FILTER_FROM" $LOGSOURCES | awniq) \
  <(gawk "$FILTER_TO" $LOGSOURCES | awniq))
do
    echo ====== $ID ======
    grep -- "$ID" /var/log/{mail.info.1,mail.info}
done

Jueves 12 de enero de 2017

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Dell Precision con Ubuntu te ahorra $2,262.00 pesos

Dell tiene una larga trayectoria vendiendo equipos con Ubuntu Preinstalado y listo para funcionar, desde hace bastantes años ha puesto a la venta diversos equipo y hoy hay equipos Dell Precision y Dell Latitude con el que puedes ahorrar $2,262.00 solo por … Continue reading
Gustavo Rubio

Gustavo Rubio
Ahí vamos

En México todos tenemos una agenda

Cuando mi mujer me dijo que no había gasolina el pasado Sábado 7 de Enero pensé que estaba exagerando. La verdad es que, como parte de una terapia auto-recetada, me he abstenido de leer demasiado las noticias para mantenerme enfocado en otras actividades desde hace meses, bueno, suelo al menos leer los titulares, pero paso de largo los detalles. Ese mismo Sábado por la noche decidí ir a echar gasolina a la estación mas cercana y bueno, me llevé la sorpresa (amarga) de todos los demás que al parecer sí estaban atentos no solo de las noticias sino de la situación. Como yo suelo recargar el tanque por semana supongo no experimenté el caos en carne propia hasta que me afectó.

Ese mismo día recuerdo haber quedado de comer con mi esposa en algún lado por zona río (zona comercial/financiera de Tijuana, para los foráneos)  al mediodía, cuando ambos nos desocuparamos de nuestros respectivos compromisos; ella de un desayuno con amigas y yo probablemente de levantarme tarde. Finalmente el plan se vino abajo y terminamos comiendo en casa pues el tráfico por las manifestaciones simplemente había convertido en caos la ciudad.

Si bien estoy a favor de manifestaciones genuinamente sustentadas últimamente me he convertido en un tipo bastante moderado en cuestiones socio-políticas. La verdad es que conforme han pasado los años he aprendido lo que todos me repetían cuando era adolescente: “Un día vas a madurar” y bueno, supongo que he madurado. ¿Significa madurar perder el espíritu de rebelión? O mejor dicho, ¿Puede uno apoyar causas y aun así considerarse moderado?

Verán, hay un refrán que dice que “Cada quien jala agua para su propio molino” y bueno, México es un país donde llevar agua al molino propio es deporte nacional. Antes solía tener largas conversaciones, debates y hasta peleas con amigos, no tan amigos, familiares, maestros y quien se me pusiera enfrente sobre los problemas propios del país, las raíces y hasta posibles soluciones (que ingenuo) pero conforme he crecido he encontrado cada vez más difícil mantener la energía para desarrollar dichos debates o siquiera propiciarlos, o sea, me da mucha hueva conversar sobre problemas tan complejos sin tener una dirección clara, sin embargo, siendo una persona tan obstinada, inconscientemente he desarrollado la capacidad de analizar, en segundo plano, cada situación de los problemas que aquejan a la sociedad mexicana en particular y siempre he llegado a la misma conclusión: en México todos tenemos una agenda particular.

Solo hay que voltear a ver el problema de los combustibles. Situación que afectó a muchos, muchísimos ciudadanos, y sectores variados, el de los transportistas, por ejemplo, que con pancartas con leyendas como “fuera el gobierno corrupto” en las parrillas de sus tracto-camiones enviaban un mensaje de hartazgo. Lo curioso es que un gran porcentaje de estos transportistas son los mismos que aplican su “mochada” con las autoridades para poder transportar 40t de carga en vez de 25t y que tienen destruídas vías y carreteras por ejemplo.

Y también ahí en la marcha muy seguramente estuvo el taxista que no respeta el reglamento de tránsito, los autobuses de líneas de transporte urbano con precios inflados, unidades contaminantes y mal servicio, el propietario de un vehículo chocolate que no lo quiere legalizar pero si le alcanza para la cerveza del fin de semana. Y así, muchas personas, sectores y grupos se cuelgan de situaciones políticas en beneficio de sus propios intereses pero cuando toca hacer lo propio para no joder a los demás, bueno… no hacemos nada.

Si bien muchos de los protestantes son personas genuinamente responsables, preocupadas y sobre todo ocupadas (léase: cívicamente responsables) la mayoría guarda(mos) y cargamos nuestros propios pecados y al final eso, en conjunto, se manifiesta en nuestros gobernantes y burócratas; desde el que nos atiende en ventanilla en una empresa de estado, el regidor local, el delegado de alguna secretaría, hasta nuestro congreso y presidente. Vivimos en un sistema político de representatividad donde, tristemente, sí estamos representados por mayoría.

Así que siempre que vuelvo a tener un debate o simple conversación sobre los cientos de problemas que aquejan al país recuerdo este extracto:

México es una sociedad en la que gente quiere dos policías, uno que sea honesto y detenga delincuentes y otro que le haga un “paro”, quiere dos políticos; uno que sea integro y otro que viole las leyes cuando este en un problema y necesite de su ayuda; donde quiere dos códigos de ética, uno donde mi mujer sea sumisa y fiel, y otro donde la mujer del vecino sea flexible, quiere dos códigos migratorios; uno que le conceda visas de trabajo en EUA y otro donde expulse a los centroamericanos de nuestro país, una sociedad que exige buenos empleos pero demasiada floja para asistir puntualmente a ellos

Y recuerdo que mientras la revolución no empiece desde adentro nunca tendremos un cambio y para eso tenemos que dejar de pensar en solo jalar agua para nuestro propio molino.

Miércoles 11 de enero de 2017

Planeta Gruslic: Max Valdez: Mi queja con los discos recientes de MetallicA

Martes 10 de enero de 2017

Planeta Gruslic: Max Valdez: What a ride !

Domingo 08 de enero de 2017

David Moreno

David Moreno
dm's blog

Thanks Debian

I sent this email to debian-private a few days ago, on the 10th anniversary of my Debian account creation:

Date: Fri, 14 Aug 2015 19:37:20 +0200
From: David Moreno 
To: debian-private@lists.debian.org
Subject: Retiring from Debian
User-Agent: Mutt/1.5.23 (2014-03-12)

[-- PGP output follows (current time: Sun 23 Aug 2015 06:18:36 PM CEST) --]
gpg: Signature made Fri 14 Aug 2015 07:37:20 PM CEST using RSA key ID 4DADEC2F
gpg: Good signature from "David Moreno "
gpg:                 aka "David Moreno "
gpg:                 aka "David Moreno (1984-08-08) "
[-- End of PGP output --]

[-- The following data is signed --]

Hi,

Ten years ago today (2005-08-14) my account was created:

https://nm.debian.org/public/person/damog

Today, I don't feel like Debian represents me and neither do I represent the
project anymore.

I had tried over the last couple of years to retake my involvement but lack of
motivation and time always got on the way, so the right thing to do for me is
to officially retire and gtfo.

I certainly learned a bunch from dozens of Debian people over these many years,
and I'm nothing but grateful with all of them; I will for sure carry the project
close to my heart — as I carry it with the Debian swirl I still have tattooed
on my back ;)

http://damog.net/blog/2005/06/29/debian-tattoo/

I have three packages left that have not been updated in forever and you can
consider orphaned now: gcolor2, libperl6-say-perl and libxml-treepp-perl.

With all best wishes,
David Moreno.
http://damog.net/


[-- End of signed data --]

I received a couple of questions about my decision here. I basically don’t feel like Debian represents my interests and neither do I represent the project – this doesn’t mean I don’t believe in free software, to the contrary. I think some of the best software advancements we’ve made as society are thanks to it. I don’t necessarily believe on how the project has evolved itself, whether that has been the right way, to regain relevancy and dominance, and if it’s remained primarily a way to feed dogmatism versus pragmatism. This is the perfect example of a tragic consequence. I was very happy to learn that the current Debian Conference being held in Germany got the highest attendance ever, hopefully that can be utilized in a significant and useful way.

Regardless, my contributions to Debian were never noteworthy so it’s also not that big of a deal. I just need to close cycles myself and move forward, and the ten year anniversary looked like a significant mark for that.

Poke me in case you wanna discuss some more. I’ll always be happy to. Specially over beer :)

Peace.

Jueves 05 de enero de 2017

Algo muy grave va a suceder en este pueblo

En 2011 a raíz de los disturbios que hubo en varias partes del mundo [1]. [2], [3] y de la incertidumbre que hubo en el puerto de Veracruz [4], que posteriormente al siguiente año también pasaría en la ciudad de México siendo el conflicto realmente grave solo en Chimalhuacan [5], [6], agregue una lectura a mi curso, el siguiente cuento de Gabriel García Márquez, se sigue usando en clase y pensé que lo había colocado aquí y veo que no es así, lo coloco en este espacio para referencia rápida y para poderlo vincular, en momentos como hoy es importante recordar la necesidad de verificar el de donde viene la información, la leyenda dice que Sócrates tenía tres preguntas para evitar el rumor [7], me parece que provenga de él o no, son muy útiles hoy en día, por cierto he tomado el texto de acá [8] pero se ha movido varias veces con los cambios del sitio.

Dicho sea de paso, recopilar las fuentes del tema me han hecho pensar que vale la pena convertirlo en un material más estructurado, en la página del curso de hecho esta replicado ya que han cambiado muchos vínculos o desaparecido.

Algo muy grave va a suceder en este pueblo

[Cuento – Texto completo.]

Imagínese usted un pueblo muy pequeño donde hay una señora vieja que tiene dos hijos, uno de 17 y una hija de 14. Está sirviéndoles el desayuno y tiene una expresión de preocupación. Los hijos le preguntan qué le pasa y ella les responde:
-No sé, pero he amanecido con el presentimiento de que algo muy grave va a sucederle a este pueblo.

Ellos se ríen de la madre. Dicen que esos son presentimientos de vieja, cosas que pasan. El hijo se va a jugar al billar, y en el momento en que va a tirar una carambola sencillísima, el otro jugador le dice:

-Te apuesto un peso a que no la haces.

Todos se ríen. Él se ríe. Tira la carambola y no la hace. Paga su peso y todos le preguntan qué pasó, si era una carambola sencilla. Contesta:

-Es cierto, pero me ha quedado la preocupación de una cosa que me dijo mi madre esta mañana sobre algo grave que va a suceder a este pueblo.

Todos se ríen de él, y el que se ha ganado su peso regresa a su casa, donde está con su mamá o una nieta o en fin, cualquier pariente. Feliz con su peso, dice:

-Le gané este peso a Dámaso en la forma más sencilla porque es un tonto.

-¿Y por qué es un tonto?

-Hombre, porque no pudo hacer una carambola sencillísima estorbado con la idea de que su mamá amaneció hoy con la idea de que algo muy grave va a suceder en este pueblo.

Entonces le dice su madre:

-No te burles de los presentimientos de los viejos porque a veces salen.

La pariente lo oye y va a comprar carne. Ella le dice al carnicero:

-Véndame una libra de carne -y en el momento que se la están cortando, agrega-: Mejor véndame dos, porque andan diciendo que algo grave va a pasar y lo mejor es estar preparado.

El carnicero despacha su carne y cuando llega otra señora a comprar una libra de carne, le dice:

-Lleve dos porque hasta aquí llega la gente diciendo que algo muy grave va a pasar, y se están preparando y comprando cosas.

Entonces la vieja responde:

-Tengo varios hijos, mire, mejor deme cuatro libras.

Se lleva las cuatro libras; y para no hacer largo el cuento, diré que el carnicero en media hora agota la carne, mata otra vaca, se vende toda y se va esparciendo el rumor. Llega el momento en que todo el mundo, en el pueblo, está esperando que pase algo. Se paralizan las actividades y de pronto, a las dos de la tarde, hace calor como siempre. Alguien dice:

-¿Se ha dado cuenta del calor que está haciendo?

-¡Pero si en este pueblo siempre ha hecho calor!

(Tanto calor que es pueblo donde los músicos tenían instrumentos remendados con brea y tocaban siempre a la sombra porque si tocaban al sol se les caían a pedazos.)

-Sin embargo -dice uno-, a esta hora nunca ha hecho tanto calor.

-Pero a las dos de la tarde es cuando hay más calor.

-Sí, pero no tanto calor como ahora.

Al pueblo desierto, a la plaza desierta, baja de pronto un pajarito y se corre la voz:

-Hay un pajarito en la plaza.

Y viene todo el mundo, espantado, a ver el pajarito.

-Pero señores, siempre ha habido pajaritos que bajan.

-Sí, pero nunca a esta hora.

Llega un momento de tal tensión para los habitantes del pueblo, que todos están desesperados por irse y no tienen el valor de hacerlo.

-Yo sí soy muy macho -grita uno-. Yo me voy.

Agarra sus muebles, sus hijos, sus animales, los mete en una carreta y atraviesa la calle central donde está el pobre pueblo viéndolo. Hasta el momento en que dicen:

-Si este se atreve, pues nosotros también nos vamos.

Y empiezan a desmantelar literalmente el pueblo. Se llevan las cosas, los animales, todo.

Y uno de los últimos que abandona el pueblo, dice:

-Que no venga la desgracia a caer sobre lo que queda de nuestra casa -y entonces la incendia y otros incendian también sus casas.

Huyen en un tremendo y verdadero pánico, como en un éxodo de guerra, y en medio de ellos va la señora que tuvo el presagio, clamando:

-Yo dije que algo muy grave iba a pasar, y me dijeron que estaba loca.

FIN

[1] http://www.jornada.unam.mx/2011/10/01/economia/023n1eco
[2] http://redaccion.nexos.com.mx/?p=3355
[3] http://redaccion.nexos.com.mx/?p=3400
[4] http://web.archive.org/web/20130403133637/http://www.imagendeveracruz.com.mx/vernota.php?id=99663
[5] http://www.eluniversalmas.com.mx/editoriales/2012/09/60356.php
[6] http://redaccion.nexos.com.mx/?p=4215
[7] http://www.academiasocrates.es/socrates/dialogo.php
[
8] http://ciudadseva.com/texto/algo-muy-grave-va-a-suceder-en-este-pueblo/

Lunes 02 de enero de 2017

José Oviedo

José Oviedo
oviedo.mx

Gparted: Error al iniciar, undefined symbol

Al ejecutar el comando gparted o gparted-pkexec arroja el siguiente error (también el programa gnome-system-monitor):

/usr/sbin/gpartedbin: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgiomm-2.4.so.1: undefined symbol: _ZN4Glib11VariantTypeD1Ev

Al parecer el problema lo genera VMWare, pero para solucionar el error, seguir los siguientes pasos, todo como root.

Mover el archivo LD_LIBRARY_PATH.conf

sudo mv /etc/ld.so.conf.d/LD_LIBRARY_PATH.conf /etc/ld.so.conf.d/LD_LIBRARY_PATH.conf.bak

Después ejecutar:
sudo ldconfig

Y listo!!, asunto arreglado.

Miércoles 30 de noviembre de 2016

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Las elecciones de facebook

Justo hace apenas unos meses escribía sobre como leer esta sobrevalorado, o lo que es lo mismo, como nos mantenemos informados actualmente con información a medias tintas, y como ha mermado nuestra percepción de la realidad. Vivimos en un mundo de medios de comunicación tradicionales que luchan por sobrevivir y donde las “redes sociales” son el punto de partida para no solo informarse sino crear juicios colectivos. En últimas semanas debido a la desagradable pero no sorpresiva victoria de Donald Trump como candidato a la presidencia de Estados Unidos se ha discutido tanto en medios electrónicos como de papel el rol que jugaron tanto el Internet como las redes sociales para que esto sucediera.

Hecho: cuando la mayoría de las personas se refieren a las redes sociales en realidad se refieren a Facebook, punto. Si bien existen otros servicios que uno podría acomodar en la misma categoría lo cierto es que el punto de partida para informarse es usualmente Facebook; no visualizo a nadie usando Snapchat, Instagram o WhatsApp para buscar noticias.

Es importante entender el primer problema: no existe variedad ni opciones en estas llamadas redes sociales para consumir información relevante. Si bien Facebook no creo uno monopolio de información y datos a propósito si logró posicionarse como la referencia automática cuando una persona se refiere al Internet y a las redes sociales. No es que no existan otras opciones, pues las hay, cientos de sitios de noticias de empresas u organizaciones con fuentes fidedignas y trabajo de periodismo real sin embargo para el usuario común el Internet se limita a unas cuantas cosas: Google, Facebook y su servicio de correo. Es obvio que bajo este esquema de acaparación total de mercado el protagonista sea, si bien no directamente, responsable.

El segundo problema es precisamente la naturaleza de Facebook. Al ser una red social, significa que el contenido es simplemente transmitido de manera orgánica y sin filtros lo cual es un requerimiento de una plataforma de esa naturaleza, el problema es que la información importante, esa que crea conciencia entre las masas, esa que sirve para construir un juicio, necesita usualmente ser curada, redactada, editada y corroborada por profesionistas llamados periodistas.

Basar nuestro juicio en chismes, memes y cadenas de información solo por la cantidad de shares o likes no la hace fidedigna. En repetidas ocasiones he tenido esta conversación con varios miembros de mi familia y amigos. Para mi, Facebook, se ha convertido precisamente en un hervidero de contenido falso, desde la vida perfecta que se trata de proyectar ahí hasta temas relevantes como noticias que en realidad no son noticias sino opiniones con seguidores.

Pero “No es culpa del indio, sino del que lo hace compadre” y en este caso los usuarios holgazanes hemos vuelto compadre a Facebook.

Tristemente el Internet nos ha vuelto más ignorantes y damos por hecho que lo que leemos es una verdad absoluta y actuamos en consecuencia, particularmente en Facebook, donde la mayoría de los usuarios no brillan precisamente por su perspicacia.

Punto a favor para Twitter donde en mi opinión se generan debates y noticias con un poco más de fundamento aunque el propio concepto del servicio filtra naturalmente a los “malos usuarios“; no visualizo a tus tías de más de 60 que comparten enlaces a uno de los 50 sitios clon de Aristegui Noticias con clickbait sobre la renuncia de Peña Nieto ahí.

Yo por lo pronto me he limitado a utilizar el servicio (Facebook) exclusivamente para los grupos y el servicio de mensajería que me sirve para estar en contacto con algunos miembros de mi familia. Cerrar mi cuenta me parece un extremo pero dejar de utilizar el servicio principal no solo me ha dado un poco más de tiempo libre para otras actividades más importantes (que creo cualquier otra actividad es más importante que eso) sino que además da la sensación de desintoxicación.

Martes 29 de noviembre de 2016

Emerson Posadas

Emerson Posadas
toxickore BLOG

python argparse reference

The cleanest example to parse options for a python program:

https://pymotw.com/2/argparse/

Jueves 24 de noviembre de 2016

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Cita

Hot:

Siempre es bueno ver que alguien cita tu trabajo.

 

captura-de-pantalla_2016-11-24_15-51-32

Miércoles 23 de noviembre de 2016

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

Learning chess with stockfish first lesson

Loading embedded chess game...
&token&hash

Miércoles 16 de noviembre de 2016

Emerson Posadas

Emerson Posadas
toxickore BLOG

Getting AWS instances using certain image-id with CLI


  1. Create a file filters.json
  2. $ aws ec2 describe-instances --filters file://filters.json
The filters.json file looks like this:


[
  {
    "Name": "image-id",
    "Values": ["ami-dc6aa9b1"]
  }
]

Lunes 31 de octubre de 2016

Emerson Posadas

Emerson Posadas
toxickore BLOG

Festival de Software Libre 2016

Es el año 2016 y el evento de Festival de Software Libre se llevó a cabo como es tradición en Puerto Vallarta Jalisco. Recuerdo que hace unos años metí algunas propuestas y no habían sido aceptadas pero este año las cosas sucedieron distinto. Tuve la oportunidad de presentar dos conferencias una más del estilo motivacional Divertirse como enano y crecer en la profesión, y otra más técnica Automatización de configuración basada en puppet. Tuve la fortuna de saludar y conocer por primera vez después de muchos años de conocerlos en línea a varios linuxistas (como dice @kwame) y compartir con ellos experiencias y conversaciones.

De igual modo me topé con mucha banda de Nayarit que me dió gusto ver. Viejos amigos de fiestas LAN de fin de semana, otros más que conocí por la cuestión videojuegos, y otros más que andaban en el GULNAY. Algo constante es que ahora ya forman parte de las filas de la academia y tienen la oportunidad de proponer nuevos rumbos en los programas de estudio con las nuevas generaciones.

Ya pasó al menos una década desde que no me tocaba vivir una experiencia de esta naturaleza y he de decir que las cosas no han cambiado mucho desde entonces, seguimos habiendo contadas personas, conocemos las caras, salvo algunas nuevas que se han venido anexando, y montones de estudiantes que seguramente se llevarán esa semilla de curiosidad para el día de mañana. Espero que esa semilla llegue a planta, crezca y rinda frutos, que los frutos son escasos.

Mis reflexiones sobre FSL 2016:

  • Es sano convivir con la comunidad, incluso aunque no seas una convivencia hardcorera (o hardcorista?) técnica.
  • Acepta todos los puntos de vista y formas de la comunidad, por eso se llama comunidad, así se nutre
  • No todos queremos o podemos resolver los problemas técnicos más grandes ahí existentes. Nuestro entorno presenta situaciones particulares con sus respectivos matices
  • Si quieres aprender a andar en bicicleta, vas a tener que subirte a una, caerte y rasparte para aprender a manejarla
  • Qué distribución es la mejor para alguien que jamás ha usado linux es un tema que no se toca cuando tienes tiempo limitado para responder
  • La libertad se tiene que defender de manera permanente, y para eso no solo necesitas programadores
  • ¿Iremos a tener perl 7?
  • Llegaremos a ver laptops con capacidad de Yottabytes? y especialmente, ¿Pronunciaremos esa palabra sin sentir vergüenza?

Sábado 29 de octubre de 2016

Julio Poisot De María

Julio Poisot De María
Dianamo

Exotic Animal Laws Exposed!

Kangaroos aren’t on the list. The kangaroo is currently in hot pursuit, attempting to mount the pig. Monkeys are thought to be among the most intelligent animals, and aren’t usually kept as pets. A mountain lion should eat 8-10 pounds of meat a day as a way to survive. Larry, your snow leopard, may be searching for a new house soon. On Internet websites, you can point, click and get lions and tigers. Black bears are guarded and can’t be hunted or killed. 

A major cat can devour 30 pounds of meat each day. Unfortunately, in the long run it’s the cats that pay the maximum price. And buying an exotic pet may be long-time commitment. This exotic pet won’t don’t grab attention as a result of its large dimensions and unique acoustic talent. There are lots of exotic pets which aren’t considered truly wild in nature.

Spanning many of times the animals aren’t in the very best of health. That said it’s always overcome an animal is permitted to thrive in its normal atmosphere. Individuals will nonetheless keep their animals. They are enough, very clean animals. These active animals need a good deal of room to move around. Wildlife species are poor pets.

Carter reported the zoo couldn’t take in all the exotic animals they’re contacted about. Wisconsin is among just five states that enable residents to keep nearly every animal they want as a pet. Some counties in the western region of the state don’t have any restrictions in any respect.

It didn’t do the job for guns; it is not working for drugs and it won’t do the job for animals. The bill necessitates interagency cooperation. It provides rule-making authority. All fees have to be submitted with the tricky copy application. In some regions, an individual would have to have a particular permit to maintain a raccoon as an exotic pet.

The threat of disease is one which shouldn’t be dismissed,“ Ms. Schwank stated. While the island nation has a comparatively small population in contrast to some other developed nations, it’s the third biggest market on earth for wild animals, as demonstrated by a statement by Japanese pharmaceutical company Zenoah. It is a mentality, and should you do it right, it is a lifestyle,” he explained. The truth is there are only a few folks who’d have the ability to afford to have the ability to care for these animals and give the type of enrichment and nutrition they need,“ Mercer said. My life was devoted to animals. Tigers living in the wild, for instance, roam a massive territory.

If contact is impossible before forcibly going into the automobile, the man or woman shall make contact when possible after forcibly going into the car. This info has to be provided or your application procedure is going to be delayed. We should find the information for the strategy to work, Anderson said. Therefore we know what we’re handling. Nonetheless, for somebody to find an exotic pet permit, the person must show they can care for the animal. For Mr. Hoch, it’s only an everyday job. We would be pleased to share that which we’ve learned from our clients over time. Many situations the owners give veterinary services to the animals themselves.

Sábado 22 de octubre de 2016

Planeta Gruslic: Max Valdez: Pensando en la actualidad social y política (de USA?)

Jueves 20 de octubre de 2016

GNU/Linux Debian en HP Proliant DL320e Gen8 v2

Desde hace poco estoy trabajando en un servidor “HP Proliant DL320e Gen8 v2”, la idea es hacer mejoras en los servicios y ahorrar si es posible, dado que actualmente se utilizan para trabajo diario en una pyme tres servidores diferentes, dentro de los cuales se encuentra el servidor que acabo de mencionar.

La historia del porque se utilizan tres servidores diferentes, es interesante y no deja de llamar la atención dado que más de una pyme o tú propia pyme puede sufrir de está misma problemática.

Todo comienza cuando se ve la necesidad de un sistema administrativo, que cubra y automatice las necesidades de la pyme, algo muy normal, lo que si podemos enfatizar, es que “ningún software se adaptará a una pyme, dado que una pyme cambia más rápido que su propio software”.

Una vez que se encontró a un desarrollador de software, se creo el software que se necesitaba, este fue instalado por primera vez en una máquina o en el primer servidor, con el tiempo, él desarrollador de software libera una nueva versión, la cual ofrece a la pyme, pero por alguna razón desconocida que suele pasar mucho más de lo que se cree, no se realiza una migración a la nueva versión y por consiguiente es necesario tener una instancia diferente de esta nueva versión, entonces, se realiza la compra de otro servidor y la instalación de la nueva versión del software.

En este momento la pyme, ya cuenta con dos servidores y dos versiones diferentes del mismo software, los cuales utiliza de manera conjunta.

Conforme avanza el tiempo, el hecho se repite nuevamente, él desarrollador de software tiene una nueva versión, por alguna extraña razón de nuevo, no se realiza una migración y la pyme compra otro servidor con las especificaciones del desarrollador de software, para la instalación de la nueva instancia del software.

Ya en este momento la pyme, cuenta con los tres servidores y tres versiones diferentes del mismo software, como cuento de los tres cochinitos y el lobo feroz, las dos versiones anteriores se utilizan con una poca frecuencia pero es necesario que estén en linea para consulta, la versión más nueva es la que se utiliza con más frecuencia.

No es la primera vez que veo algo así y existen muchas razones de que esto suceda, en ocasiones las licencias de software no incluyen a las nuevas versiones y es cuando la migración tiene un costo extra, este hecho hace que algunas pyme’s puedan creer que una nueva instancia es mejor (más económica, a corto plazo que a largo plazo) que realizar una migración a la nueva versión, en otros casos, la migración es complicada e imposible a la nueva versión por un mal diseño en el software o por utilizar una versión muy antigua, es notable como he podido ver software empresarial, en donde su base de datos esta tan mal diseñada que es fácil que se pierda la integridad y de posibilidad a registros perdidos.

El primer ahorro en el que se piensa son las licencias, dado que regularmente se utiliza mucho software propietario que requiere de una licencia, es por ello que se planeo el uso de software libre además de la estabilidad y alto rendimiento que tiene, en este caso como elección personal y por que estoy más familiarizado con el uso, seleccione GNU/Linux Debian de 64 bits como sistema operativo en su rama estable (jessie), la versión de 64 bits es principalmente para utilizar Xen y poder realizar virtualización.

Antes de realizar el cambio de sistema operativo tenía mis dudas, leyendo en la web encontré varios post’s que hablaban sobre el uso de Ubuntu y la necesidad de instalar controladores propietarios, algo que era bueno y malo, ya que no me gusta ensuciar un sistema por lo que en caso de requerir de controladores propietarios, en lo particular crearía paquetes “.deb” para la instalación y así tener un sistema lo más limpio posible.

Primero realicé un respaldo de la información contenida en el servidor principal o en este caso el servidor que se utilizaría como anfitrión, después instale GNU/Linux Debian, seguí el asistente, es de recalcar que no hice ninguna configuración en particular, me agrado mucho el resultado, todo el hardware incluyendo la tarjeta y el arreglo RAID fue reconocido a excepción de los sensores de temperatura, los cuales tendré que verificar, para ver si es necesario que prepare algún paquete para instalar controladores propietarios.

Terminado lo anterior, instalé Xen y se convirtieron las tres instancias físicas a virtuales (P2V), en este punto si se realizo algo de configuración (en un post más adelante hablaré sobre la configuración básica de Xen). Lo que si llama la atención, es el funcionamiento de las instancias virtuales, que dan la sensación de trabajar más rápido y con menos memoria, que si se hubieran dejado como maquinas físicas independientes.

Más adelante encontré un detalle con “iLO”, que es la administración remota que tiene este servidor HP Proliant, al principio intente deshabilitar esta característica, pero al final la deje funcionando de manera normal, ya que puede dar problemas con el servicio de ssh, esto lo noté ya que de repente no me permitía conectarme mediante ssh, solo se quedaba como colgado sin reacción alguna al intentar una conexión y del lado del servidor no se detecta nada ni siquiera el intento de la conexión, de ahí en fuera todo esta normal, inclusive las máquinas virtuales funcionan de manera normal.

Como resultado, se han eliminado o removido dos servidores y esto se reflejará en el recibo de la luz, todas las instancias están en perfectas condiciones y en un ambiente virtual, además se han creado nuevos servicios útiles para la pyme, por ejemplo, se ha creado una instancia de owncloud para el respaldo de la información de todos los equipos de computo, una instancia para un posible nuevo sistema, una instancia para nagios con el cual se realizará el monitoreo de la infraestructura con la que se cuente, etc., eso si cuidando que en las nuevas instancias se utilice principalmente software libre cuando sea posible.

Es recomendable antes de utilizar un sistema, hacer todas las preguntas posibles y plantearse esquemas a futuro, para evitar gastos innecesarios, por ejemplo, si vas a utilizar un software con licencia, pregunta los alcances de la licencia y a que “si”, además de a que “no” tienes derecho, soporte técnico, migraciones, etc., cuida mucho ademas la elección del motor de la base de datos, en lo personal, prefiero usar motores de software libre como lo son PostgreSQL o MariaDB, cuando hablamos de software libre, debemos fijarnos por ejemplo, en que tan activo es un proyecto y hacer un plan en caso de que el proyecto deje de ser mantenido por la comunidad, esto podría plantearse en tal vez de pasar de una versión libre a una versión con licencia, y si es posible tener un desarrollador de software, plantearse el mantener uno mismo el software que necesitemos.

 

Puedes ver esté y más contenidos del mismo autor en TuXsOuL.

Martes 11 de octubre de 2016

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

keybase.txt

==================================================================
https://keybase.io/petrohs
--------------------------------------------------------------------

I hereby claim:

  * I am an admin of https://petrohs-log.blogspot.com
  * I am petrohs (https://keybase.io/petrohs) on keybase.
  * I have a public key ASB2xgvl3EcOsiO5eRMAXC8--cSwznPzuxT325Venxz5Qgo

To do so, I am signing this object:

{
    "body": {
        "key": {
            "eldest_kid": "0101619dfd1e745d91f95cb4ee46b5d28076b5c0e9ae7b342847459165d439337c870a",
            "host": "keybase.io",
            "kid": "012076c60be5dc470eb223b97913005c2f3ef9c4b0ce73f3bb14f7db955e9f1cf9420a",
            "uid": "cf183abefb49c7bb1188cdc3a532bd19",
            "username": "petrohs"
        },
        "service": {
            "hostname": "petrohs-log.blogspot.com",
            "protocol": "https:"
        },
        "type": "web_service_binding",
        "version": 1
    },
    "client": {
        "name": "keybase.io go client",
        "version": "1.0.17"
    },
    "ctime": 1476217146,
    "expire_in": 504576000,
    "merkle_root": {
        "ctime": 1476217080,
        "hash": "9824705b37df2c00dbc6c93058aeb5edfc6abfffcae021f26ac63b1e4bef906af7402a29f513b395dcd5a29d1908540897654240fa2e6119a83c52ac350fb9fc",
        "seqno": 673115
    },
    "prev": "61caded8eb365a778c648d9ffd6170ed2ce06d8a5a4f301deddc38143bb32cd8",
    "seqno": 11,
    "tag": "signature"
}

which yields the signature:

hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgdsYL5dxHDrIjuXkTAFwvPvnEsM5z87sU99uVXp8c+UIKp3BheWxvYWTFAwB7ImJvZHkiOnsia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTAxNjE5ZGZkMWU3NDVkOTFmOTVjYjRlZTQ2YjVkMjgwNzZiNWMwZTlhZTdiMzQyODQ3NDU5MTY1ZDQzOTMzN2M4NzBhIiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwNzZjNjBiZTVkYzQ3MGViMjIzYjk3OTEzMDA1YzJmM2VmOWM0YjBjZTczZjNiYjE0ZjdkYjk1NWU5ZjFjZjk0MjBhIiwidWlkIjoiY2YxODNhYmVmYjQ5YzdiYjExODhjZGMzYTUzMmJkMTkiLCJ1c2VybmFtZSI6InBldHJvaHMifSwic2VydmljZSI6eyJob3N0bmFtZSI6InBldHJvaHMtbG9nLmJsb2dzcG90LmNvbSIsInByb3RvY29sIjoiaHR0cHM6In0sInR5cGUiOiJ3ZWJfc2VydmljZV9iaW5kaW5nIiwidmVyc2lvbiI6MX0sImNsaWVudCI6eyJuYW1lIjoia2V5YmFzZS5pbyBnbyBjbGllbnQiLCJ2ZXJzaW9uIjoiMS4wLjE3In0sImN0aW1lIjoxNDc2MjE3MTQ2LCJleHBpcmVfaW4iOjUwNDU3NjAwMCwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE0NzYyMTcwODAsImhhc2giOiI5ODI0NzA1YjM3ZGYyYzAwZGJjNmM5MzA1OGFlYjVlZGZjNmFiZmZmY2FlMDIxZjI2YWM2M2IxZTRiZWY5MDZhZjc0MDJhMjlmNTEzYjM5NWRjZDVhMjlkMTkwODU0MDg5NzY1NDI0MGZhMmU2MTE5YTgzYzUyYWMzNTBmYjlmYyIsInNlcW5vIjo2NzMxMTV9LCJwcmV2IjoiNjFjYWRlZDhlYjM2NWE3NzhjNjQ4ZDlmZmQ2MTcwZWQyY2UwNmQ4YTVhNGYzMDFkZWRkYzM4MTQzYmIzMmNkOCIsInNlcW5vIjoxMSwidGFnIjoic2lnbmF0dXJlIn2jc2lnxEDM3KBtfH12AvAf+OIATH28Nc8WmLrbXWSUljJvydewUjDbbGmvNKuvia/mB6AGMIwVdOwSxQGXpJ2/ZoqwIbMDqHNpZ190eXBlIKRoYXNogqR0eXBlCKV2YWx1ZcQg+oL3ZJjKORLmyctWYDgLML+OBKyaVFkZnlAtlRvSdJejdGFnzQICp3ZlcnNpb24B

And finally, I am proving ownership of this host by posting or
appending to this document.

View my publicly-auditable identity here: https://keybase.io/petrohs

==================================================================

Martes 04 de octubre de 2016

Moisés Silva

Moisés Silva
Moy Blog

FreeSWITCH Monitoring – ClueCon 2016

Had a good time at ClueCon again.

ClueCon 2016

For anyone interested in systems monitoring in general and how to apply it to FreeSWITCH in particular, here is my presentation:

Sábado 01 de octubre de 2016

César Yáñez Fernández

Los discos desde la perspectiva de un Sistema de Archivos

Esta es mi propia traducción e interpretación del artículo Disks from the Perspective of a File System escrito por Marshall Kirk McKusick [1] para ACMQ.

Los Discos mienten. Y los controladores que los corren son cómplices del crimen.

La mayoría de las aplicaciones no tienen que negociar con los discos directamente, sino que guardan sus datos en archivos dentro del sistema de archivos, el cual nos protege de los discos sinvergüenzas. Después de todo, la tarea principal del sistema de archivos es asegurarse a sí mismo que siempre pueda ser recuperado a un estado consistente después de una caída del sistema no planeada (por ejemplo, una falla de energía). Mientras que un buen sistema de archivos sea capaz de mantener a los discos bajo control, el esfuerzo requerido puede ser mucho y el rendimiento reducido es molesto. Este artículo examina los atajos que toman los discos y las vueltas que los sistemas de archivos tienen que dar para tener la confiabilidad deseada.

Mientras que el sistema de archivos deba recuperarse en un estado consistente, ese estado usualmente refleja como estaba el sistema de archivos un tiempo antes de la caída. A menudo los datos escritos durante el minuto antes de la caída pudieron haberse perdido. La razón de esta perdida es que el sistema de archivos es que todavía no tuvo la oportunidad de escribir esos datos a disco. Cuando una aplicación necesita asegurarse que los datos pueden recuperarse después de la caída, ejecuta una llamada al sistema fsync sobre el archivo que contiene los datos que necesitan para una estabilidad de largo plazo. Antes de regresar de la llamada al sistema fsync, el sistema de archivos debe de asegurarse que todos los datos asociados al archivo deben de recuperarse después de la caída, incluso si la caída ocurre inmediatamente después del regreso de la llamada del sistema fsync.

El sistema de archivos implementa fsync encontrando los datos sucios (no escritos) del archivo y escribiéndolos a disco. Históricamente, el sistema de archivos levantaría un requerimiento de escritura al disco de los datos sucios del archivo y esperar por la notificación de terminación de esta tarea. Esta técnica funcionaba de manera confiable hasta la llegada del cache de tareas en los controladores de disco. Los controladores con cache de tareas tienen un buffer grande en el mismo controlador que acumula los datos que serán escritos en el disco. Para evitar perder una revolución para ubicar el inicio del siguiente bloque al escribir en bloques de disco contiguos, el controlador lanza una notificación de escritura completada cuando los datos se encuentran en la cache de tareas en vez de encontrarse en el disco. Esta notificación de completado de escritura temprano es hecho con la esperanza de que el sistema pedirá una escritura para el siguiente bloque del disco a tiempo para que el controlador sea capaz de escribir inmediatamente al final del bloque previo.

Este enfoque tiene un serio efecto negativo. Cuando se entrega la notificación de escritura completada, el sistema de archivos espera que los datos estén almacenados de manera estable. Si los datos solo se encuentran en el cache de tareas y no en el disco, el sistema de archivos puede fallar al mantener la integridad deseada a las aplicaciones de usuario usando la llamada del sistema fsync. En particular, la semántica será violada si la energía falla después de la notificación de escritura pero antes de que los datos estén escritos en el disco. Algunos fabricantes eliminan este problema usando memoria no volátil para el cache de tareas y que provee un reinicio de micro-código después de la falla de energía donde las operaciones necesitan ser completadas. Debido a que esta opción es cara, solo algunos controladores proveen de esta funcionalidad.

Los discos más nuevos resuelven este problema con una técnica llamada tag queueing, en donde cada petición pasada al controlador de disco es asignada a una etiqueta numérica única. La mayoría de las controladoras que soportan tag queueing aceptan al menos 16 peticiones de I/O. Después de que cada petición es finalizada (posiblemente en un orden diferente al que llegaron al disco) la etiqueta de la petición completada es regresada como parte de la notificación de escritura. Si varios bloques contiguos son presentados a la controladora de disco, puede empezar a trabajar con el siguiente bloque mientras que la notificación para la etiqueta del anterior es regresada. Por lo tanto, tag queueing permite que las aplicaciones estén notificadas de verdad cuando sus datos hayan llegado al almacenamiento estable sin incurrir en penalización de revoluciones de disco perdidas al escribir bloques contiguos. La llamada fsync de un archivo es implementada al enviar todos los bloques modificados del archivo al disco y después esperar hasta que las etiquetas de todos esos bloques hayan notificado que está escrito.

Tag queueing fue implementado primero en discos SCSI, habilitándolos en confiabilidad y velocidad. Los discos ATA, que carecían de tag queueing, puede ser ejecutado con su cache de escritura activado (por defecto) para proveer de velocidad al costo de confiabilidad después de una caída o con el cache de escritura desactivado, que provee la confiabilidad después de una caída con un 50% de velocidad de escritura reducido.

Para salir del embrollo, la especificación ATA agregó un intento de tag queueing con el mismo nombre usado por la especificación SCSI: TCQ (Tag Command Queueing). Desafortunadamente en una desviación de la especificación SCSI, TCQ para ATA permite el completado de la petición etiquetada para depender de si el cache de escritura está activado (notificando que la tarea de escritura está completada cuando llega al cache) o desactivado (notificando que la tarea de escritura está completada cuando llega al medio). Por lo tanto, solo agregó complejidad sin beneficio alguno.

Por suerte, SATA (Serial ATA) tiene una nueva definición llamada NCQ (Native Command Queueing) que tiene un bit en el comando de escritura que indica al controlador si debe reportar que ha terminado cuando el medio ha sido escrito o cuando ha llegado a cache. Si el controlador ajusta el bit correctamente, entonces el disco tendrá un comportamiento correcto.

En el mundo real, muchos de los controladores enfocados para el mercado de escritorio no implementan la especificación NCQ. Para asegurar la confiabilidad, el sistema debe de desactivar el cache de escritura en disco o ejecutar un vaciado de cache después de cada actualización de meta-datos, actualización de bitácora (para sistemas de archivos con bitácora) o al ejecutar la llamada del sistema fsync. Ambas técnicas tienden a notar una degradación de rendimiento, así que frecuentemente están desactivadas, colocando al sistema de archivos en riesgo si la energía falla. En sistemas en donde la velocidad y confiabilidad son importantes, no se deben usar discos ATA. Se deben usar dispositivos que implementen Fibre Channel, SCSI o SATA que soporten NCQ.

Otra tendencia reciente ha sido el cambio del tamaño del sector en el disco. Desde la vez de la primera disponibilidad en la década de 1950 hasta 2010, el tamaño del sector en los discos ha sido de 512 bytes. En el 2010, los fabricantes de discos empezaron a producir discos con sectores de 4096 bytes.

Mientras la densidad de escrituras para discos ha sido incrementada con los años, el margen de error por bit ha aumentado, requiriendo el uso de códigos de corrección más largos. Los errores no están distribuidos uniformemente a través del disco. En realidad, un pequeño defecto causaría la pérdida de una cadena de bits. La mayoría de los sectores tienen algunos errores, pero un pequeño defecto puede causar que un simple sector necesite de corrección de muchos bits. Por lo tanto, el código de error debe tener suficiente redundancia por cada sector para manejar un alto radio de corrección incluso si la mayoría de los sectores no lo requieren. Al usar sectores más grandes hace posible amortizar el costo de los bits de corrección de errores extras sobre revisión de bits más larga. Usado sectores que son ocho veces más largos también elimina el 88% de las cabeceras de inicio y final de sector, reduciendo así el número de bits que no contienen datos en el disco. El efecto de red al pasar de los sectores de 512 bytes a los 4096 bytes está cerca de doblar la cantidad de datos de usuario que puede almacenarse en la tecnología de disco dada.

Al hacer I/O al disco, las peticiones de transferencia deben ser por múltiplos del tamaño de sector. Hasta el 2010, la unidad más pequeña para leer o escribir era de 512 bytes. Ahora la unidad más pequeña para leer o escribir en disco es de 4096 bytes.

Para compatibilidad con aplicaciones viejas, las controladoras de los discos nuevos con sectores de 4096 bytes emulan el sector de 512 bytes. Cuando se hace una escritura de 512 bytes, la controladora lee el sector de 4096 bytes conteniendo el área que será escrita en un buffer, reescribe los 512 bytes en el sector que será reemplazado, y después escribe el sector de 4096 bytes actualizado en el buffer al disco. Cuando corre en este modo, el disco se vuelve al menos 50% más lento por el modo de lectura y escritura requerido. Frecuentemente se vuelve más lento porque la controladora tiene que esperar cerca de una revolución del plato de disco antes de reescribir el sector que había leído.

Los sistemas de archivos deben de estar pendientes del cambio en los medios y asegurarse de que se adapten para siempre escribir en múltiplos del nuevo tamaño de sector. Históricamente, los sistemas de archivos eran organizados para almacenar archivos más pequeños que el sector de 512 bytes. Con el cambio en la tecnología de disco, la mayoría de los sistemas de archivos han evitado la lentitud de escritura en 512 bytes al hacer el tamaño de almacenamiento más pequeño en 4096 bytes. Por lo tanto, un archivo más pequeño que 512 bytes está colocado en un bloque de 4096 bytes. El resultado de este cambio es que toma hasta ocho veces más espacio de almacenamiento un sistema de archivos que predominantemente tiene archivos más pequeños. Ya que el tamaño del archivo promedio ha ido creciendo en años, para un sistema de archivos típico el cambio de tamaño de colocación mínimo de 4096 bytes ha resultado en un 10% a 15% de incremento de almacenamiento requerido.

Algunos sistemas de archivos han adaptado el cambio del tamaño del sector al colocar varios archivos pequeños en un solo sector de 4096 bytes. Para evitar la necesidad de hacer una operación de leer/modificar/escribir para actualizar un archivo pequeño, el sistema de archivos recolecta el cumulo de archivos pequeños que han cambiado recientemente y los escribe juntos en un nuevo sector de 4096 bytes. Cuando la mayoría de los archivos pequeños dentro de un sector han sido re-escritos en otro lugar, el sector es reclamado tomando los archivos pequeños remanentes dentro de este e incluirlos con otros nuevos archivos escritos en un nuevo sector. El sector vaciado puede ser usado en el futuro.

La conclusión es que los sistemas de archivos necesitan estar al pendiente de la tecnología de disco que están corriendo para asegurar que pueden manejar confiablemente la semántica que han prometido. Los usuarios deben de estar al pendiente de las limitaciones de las diferentes tecnologías de disco frente a los sistemas de archivos y seleccionar la tecnología que no resulte en un rendimiento pobre para el tipo de carga en el sistema de archivos que se manejará. A lo mejor, más adelante se debería de evitar el uso de discos mecánicos y cambiar a la tecnología de memoria flash, a no ser que, por supuesto, el almacenaje en flash empiece a usar los mismos trucos de bajo presupuesto.


1. El Dr. Marshall Kirk McKusick escribe libros y artículos, imparte clases de temas relacionados con Unix y BSD, y provee un testimonio experto en primera persona sobre patentes de software, secretos comerciales y problemas de copyright, particularmente los relacionados con sistemas operativos y sistemas de archivos. Ha sido desarrollador en el Proyecto FreeBSD desde su fundación en 1993. Cuando estuvo en la Universidad de California en Berkeley, implementó Fast File System en 4.2BSD y fue investigador en ciencias computacionales en el Grupo de Investigación en Ciencias Computacionales (CSRG) en Berkeley, supervisando el desarrollo y liberación de 4.3BSD y 4.4BSD.
Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

TLS 1.2 Comes to Mono: Update

Short version: the master branch of Mono now has support for TLS 1.2 out of the box. This means that SslStream now uses TLS 1.2, and uses of HttpWebRequest for HTTPS endpoints also uses TLS 1.2 on the desktop.

This brings TLS 1.2 to Mono on Unix/Linux in addition to Xamarin.{Mac,iOS,tvOS} which were already enabled to use TLS 1.2 via the native Apple TLS stack.

To use, install your fresh version of Mono, and then either run the btls-cert-sync command which will convert your existing list of trusted certificates to the new format (if you used cert-sync or mozroots in the past).

In Detail

The new version of Mono now embeds Google's Boring SSL as the TLS implementation to use.

Last year, you might remember that we completed a C# implementation of TLS 1.2. But we were afraid of releasing a TLS stack that had not been audited, that might contain exploitable holes, and that we did not have the cryptographic chops to ensure that the implementation was bullet proof.

So we decided that rather than ship a brand new TLS implementation we would use a TLS implementation that had been audited and was under active development.

So we picked Boring TLS, which is Google's fork of OpenSSL. This is the stack that powers Android and Google Chrome so we felt more comfortable using this implementation than a brand new implementation.

Linux Distributions

We are considering adding a --with-openssl-cert-directory= option to the configure script so that Linux distributions that package Mono could pass a directory that contains trusted root certificates in the format expected by OpenSSL.

Let us discuss the details in the mono-devel-list@lists.dot.net

Viernes 30 de septiembre de 2016

Marco Alfonso Ocampo

Marco Alfonso Ocampo
Pub – Marco Alfonso

Contenedor LXC con IP Pública

Hola!

Hace unos meses me puse a instalar LXC para un cliente, y tenía la necesidad de que sus contenedores estuvieran en la misma red que sus servidores físicos. Por lo general LXC crea una red 10.0.3.0/24 y un puente con la ip 10.0.3.1 llamada “lxcbr0“, por tanto, lo que haremos será agregar otro puente usando la tarjeta de red activa, luego indicamos a LXC que cree los contenedores usando ese nuevo puente, estos son los pasos:

En nuestro /etc/network/interfaces (debian y ubuntu), generalmente tendremos esto:


auto eth0
iface eth0 inet static
       address 192.168.1.250
       netmask 255.255.255.0
       gateway 192.168.1.1
       dns-nameservers 8.8.8.8 8.8.4.4

Lo cambiamos a esto:


auto br0
iface br0 inet static
        bridge_ports eth0
        address 192.168.1.250
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

Con esto creamos nuestro nuevo puente “br0” ligado a eth0 (puede ser em1 ó enp5s0, etc)

Ahora toca indicarle a LXC que los nuevos contenedores usen este puente, editamos /etc/default/lxc-net y cambiamos USE_LXC_BRIDGE a: USE_LXC_BRIDGE="false"

Y en /etc/lxc/default.conf cambiamos lxc.network.link = lxcbr0 a lxc.network.link = br0

Y listo. Ahora dentro de los contenedores puedes usar configuración estática, o por dhcp.


auto eth0
iface eth0 inet dhcp

auto eth0
iface eth0 inet static
        address 192.168.1.10
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8

.

Usar IP externa de una red diferente

Ahora, ¿porque me acordé de algo que hice algo meses?, porque lo reintenté para ponerle una IP pública a un servidor LXC en un dedicado que tengo, y ¡No funcionó!

El dedicado tiene una IP del tipo 199.xx.xx.105 al comprarle una IP extra (ó Failover IP) el proveedor me asignó la ip: 146.xx.xx.239 , al querer añadirla a un contenedor, éste se quedaba sin red y no se “veía” (ping) ni con el Host, por ahí ví un error “Network unreachable“, ¡claro! las dos IP’s son de dos redes diferentes y no hay nadie (un router) que les diga como comunicarse, así que la solución fue añadir una nueva ruta a la tabla de ruteo de linux. Estos son los pasos:

Teniendo ya el puente br0 configurado y funcionando, hay que indicarle a LXC que deseamos forzar una dirección IP, esto lo hacemos editando la configuración del contenedor en /var/lib/lxc/MICONTENEDOR/config:


lxc.network.ipv4=146.xx.xx.239
lxc.network.ipv4.gateway=199.xx.xx.105

Aquí hay que hacer notar que hemos puesto como gateway del contenedor la IP del Host. Esto es muy importante.

Y dentro del contenedor la siguiente configuración de red (/etc/network/interfaces) constará solamante de una sóla instrucción: “auto eth0” (dejando también la parte del loopback claro)

En este momento ya puedes levantar el contenedor con lxc-start, métete con lxc-attach y verás como tiene la IP que indicaste en su configuración, si ejecutas un route -n verás como su gateway es también lo indicado en la conf. Pero ¡NO TIENE RED!, déjalo “prendido” y de lado del Host ejecuta lo siguiente:

route add 146.xx.xx.239 br0

Tadá! Si haces un ping a la IP verás como ya responde, si te metes al contenedor verás como ya tiene red y puede responder a todos los servicios. Ahora, por supuesto estar agregando la ruta manualmente cada que iniciemos el contenedor está de hueva, vamos a automatizarlo.

Creamos dos scripts en /var/lib/lxc/MICONTENEDOR/ uno llamado iface-up.sh y otro iface-down.sh

iface-up.sh:


#!/bin/bash
route add 146.xx.xx.239 br0

iface-down.sh:


#!/bin/bash
route del 146.xx.xx.239 br0

No te olvides de darle permisos de ejecución a ambos scripts! Ej. chmod +x iface-up.sh

Y vamos a editar nuevamente la configuración del contenedor para añadir las siguientes dos líneas después de la parte donde añadimos los parámetros de red:

/var/lib/lxc/MICONTENEDOR/config:


...
lxc.network.ipv4=146.xx.xx.239
lxc.network.ipv4.gateway=199.xx.xx.105

lxc.network.script.up = /var/lib/lxc/MICONTENEDOR/iface-up.sh
lxc.network.script.down = /var/lib/lxc/MICONTENEDOR/iface-down.sh

Done. Ya con esto puedes probar parar e iniciar el contenedor varias veces, vigilando el estado de su red y de la IP y no debería tener problemas para acceder a Internet y viceversa.

Viernes 23 de septiembre de 2016

César Yáñez Fernández

Se regala otro 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.

Miércoles 21 de septiembre de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Dominios de factorización única, enteros Gaussianos y números de Heegner

Recientemente alguien me preguntó algo sobre factorización en anillos y unidades de los anillos, y decidí hacer un post sobre esto, esto es un post básico podría decirse de álgebra conmutativa.

Este post pretende que se comprenda el concepto de factorización en general en cualquier anillo numérico (extensión algebraica de $latex \mathbb{Z}$) a través de ejemplos y explorar, comprender y demostrar propiedades de la factorización de los enteros extendidos con una constante imaginaria (enteros gaussianos).

Todos conocemos el anillo $latex \mathbb{Z}$ que consiste en todos los enteros, y sabemos que los enteros son un subanillo de los números racionales $latex \mathbb{Q}$.

¿Qué es ser entero?, es decir, conocemos el caso particular mencionado anteriormente pero como vimos un  post pasado, hay otros campos que podemos extender.

Lo que queremos investigar es el fenómeno de "factorización única", es decir, en $latex \mathbb{Z}$ no es es muy natural decir que todo entero se puede factorizar en primos de manera única salvo permutación. Pero vamos a ver cómo el concepto de elemento primo es aún más general.


Definición: Un anillo $latex R$ conmutativo le llamamos dominio entero  si cuando ab=0 para $latex a,b\in R$ tenemos que $latex a=0$ o $latex b=0$.
También decimos que un elemento $latex u\in R$ es una unidad si tiene un inverso bajo la multiplicación del anillo $latex R$ , es decir, si existe un $latex u^{-1}$ tal que $latex uu^{-1}=1$. Siempre que todo elemento no cero de $latex R$ sea unidad, diremos que $latex R$ es un campo.

Aquí tenemos que el ejemplo usual $latex \mathbb{Z}$ es un dominio y sus únicos elementos invertibles son el $latex 1,-1$

Otra definición importante es la de irreducibilidad.

Definición: Sea $latex R$ un dominio y $latex a,b\in R$ , $latex a\mid b$ si existe un $latex c$ tal que $latex b=ac$ , es decir $latex a$ divide a $latex b$.  Un elemento no cero $latex p\in R$ es irreducible si no es unidad y si siempre que $latex a\mid p$ tenemos que $latex a$ es una unidad o $latex a=up$ para alguna unidad $latex u$.

Noten que si una unidad la podemos factorizar entonces todo factor debe ser también una unidad, por ejemplo si $latex u=ab$ entonces $latex abu^{-1}=1$ entonces $latex bu^{-1}$ debe ser un inverso de $latex a$ .

Con esto ya tenemos lo necesario para poder definir lo que es factorización única.

Definición: Un dominio $latex R$ tiene factorización única si todo elemento no cero $latex a\in R$ puede ser escrito de manera única como

$latex a=u\prod p_i^{d_i}$

Donde $latex u$ es una unidad y los $latex p_i$ son urreducibles. Nota que uso la palabra irreducible en vez de "primo", en general no son lo mismo, sólo significan lo mismo en los enteros, ya que todo irreducible es primo, pero veremos ejemplos donde no lo es.

Si un anillo cumple la definición única le diremos DFU (Dominio de factorización única)

Ejemplos:

* Los enteros $latex \mathbb{Z}$ son un dominio que no es un campo y sus únicas unidades son el 1 y -1, un entero es irreducible sí y sólo si es un número primo o un número primo negativo. Una consecuencia del teorema fundamental de la aritmética es justamente que $latex \mathbb{Z}$ es un DFU.

* Los campos $latex \mathbb{Q}$ y $latex \mathbb{R}$ son campos, y éstos no tienen irreducibles, por lo tanto son trivialmente un DFU.

*Una familia infinita de dominios la podemos construir si tomamos un entero $latex n\in \mathbb{Z}$ que no sea cuadrado

$latex \mathbb{Z}[\sqrt{n}]=\lbrace a+b\sqrt{n}:a,b\in\mathbb{Z} \rbrace$.

Vamos a profundizar en uno en especial en la siguiente sección cuando $latex n=-1$.

Enteros Gaussianos

Si $latex n=-1$ tenemos la colección de números complejos $latex a+bi$ con $latex a,b\in \mathbb{Z}$, imagínen los puntos de plano complejo o de $latex \mathbb{R}^2$ que tienen coordenadas enteras, es decir una retícula que asemeja cuadrados.

Estos enteros son muy importantes, son $latex \mathbb{Z}[i]$

Estos enteros son como $latex \mathbb{Z}$ pero con algunas cosas raras adicionales, ya que hay más unidades aparte del 1 y -1, también tenemos a $latex i$ y $latex -i$ ya que $latex i\cdot (-i)=1$ .

También tenemos que $latex 2$ es irreducible como un entero en $latex \mathbb{Z}$ pero no como un entero gaussiano en $latex \mathbb{Z}[i]$ ya que $latex 2=(1+i)(1-i)$.

De hecho si un número primo $latex p=a^2 + b^2$ es decir es suma de enteros cuadrados, entonces p no es irreducible como un entero Gaussiano, ya que siempre va a poder factorizarse como $latex p=(a+bi)(a-bi)$. (**)

Vamos a definir lo que es la norma en un anillo en general, pero por ahora, sólo la definiremos para estos enteros que es $latex N(a+bi)=|a+bi|^{2}=a^2 + b^2$, es decir $latex N:\mathbb{Z}[i]\to \mathbb{Z}^{+}$.

La propiedad importante de la norma es que $latex N(wz)=N(w)N(z)$ lo que implica que si $latex u$ es una unidad entonces
$latex 1=N(1)=N(uu^{-1})=N(u)N(u^{-1})$ y como $latex N(u)$ debe ser un entero no negativo por como está definida la norma entonces debe ser 1 forzosamente, por lo que toda unidad tiene norma 1.

 Ahora vamos a examinar la propiedad (**), si $latex p$ es un primo y supongamos que podemos factorizarlo de manera no trivial como $latex p=wz$ en $latex \mathbb{Z}[i]$ , entonces usando la norma sabemos que $latex N(p)=p^2$ por la definición de norma, pero también sabemos que p=wz por lo que $latex N(p)=N(w)N(z)$ por lo que $latex p^2=N(w)N(z)$, como la factorización es no trivial, tenemos que $latex N(w)$ y $latex N(z)$ no son 1 por lo que $latex w,z$ no son unidades, y esto implica que $latex N(w)=N(z)=p$  por lo que si $latex w=\alpha+\beta i$ entonces $latex N(w)=\alpha^2 + \beta^2 = p$ por lo que $latex p$ es suma de dos cuadrados.

Bueno con lo anterior, vemos el poder de la norma, de hecho nos permite diferenciar irreducibles en $latex \mathbb{Z}[i]$ ya que para todo factor $latex p$ de un entero $latex n$ si $latex p$ no es suma de dos cuadrados entonces es irreducible, y si $latex p=a^2  + b^2$ entonces podemos sustituir en la factorización de $latex n$ a las $latex p$ por $latex (a+bi)(a-bi)$ y cada uno de estos factores es irreducible.

Un dato interesante de los enteros gaussianos es que también es un DFU y de hecho con la norma podemos darnos cuenta de toda la factorización en $latex \mathbb{Z}[i]$ ya que todos los irreducibles son los primos $latex p$ que no son suma de dos cuadrados así como todos los $latex a\pm bi$ tal que $latex a^2+b^2$ es un número primo. Para mostrar lo último considera $latex z=a+bi \in \mathbb{Z}[i]$ entonces $latex N(z)=a^2+b^2=z\bar{z}$ (su conjugado) . Como $latex N(z)$ es un entero normal positivo, y sabemos que en $latex \mathbb{Z}$ hay factorización única por lo que todo factor irreducible de $latex z$ debe ser factor de $latex N(z)$  por lo que si $latex N(z)=a^2+b^2$ es primo es irreducible.


¿Quiénes no son DFU?

¿Y qué?, ¿Cuándo no es DFU?,

Para mostrar eso formalmente debería introducir un grupo especial, que se llama grupo de clases de ideales asociado a un anillo, pero eso terminaría con la naturaleza elemental de este post, pero pronto lo haré en una siguiente sección, éste consiste en el cociente del grupo de ideales fraccionarios del campo de fracciones del anillo $latex R$ módulo los ideales principales de $latex R$, este grupo está íntimamente asociado al grupo de Picard de orden 0 de una curva algebraica que se estudia mucho en criptografía pero se ve de manera más "fácil" esto es la generalización pero eso es otro tema.

Hay un problema en matemáticas que estudian los grupos de clases de ideales para saber cuándo hay o no factorización única, de hecho eso lo mide el grupo de clases de ideales en sus elementos ( el area de matemáticas es class field theory), por ejemplo algo raro es que $latex \mathbb{Z}[\sqrt{-5}]$ NO es DFU, pero si consideramos los anillos con raiz cuadrada de $latex n$ que son $latex \mathbb{Z}[\sqrt{-n}]$ para $latex n\in \lbrace 1,2,3,7,11,19,43,67,163 \rbrace$ estos son los ÚNICOS enteros cuya raíz cuadrada imaginaria nos forman un dominio de factorización única, es decir para -5 o -13 no tenemos la propiedad de DFU, y de hecho lo que sucede es que el Class Group asociado al anillo es trivial (tiene un sólo elemento) sí y sólo si el anillo es un DFU.

Esto fue conjeturado por Gauss, probado con errores por Heegner y formalizado por Baker y Stark, de hecho estos 9 números raritos se llaman Números de Heegner.

Esto es impresionante ¿no? , es decir, qué tienen de raro esos 9 números que nos forman anillos con factorización única que otros números primos no puedan hacer... ¿qué hay en la geometría de estas retículas?

Espero les haya gustado

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


Sábado 17 de septiembre de 2016

sat-cfdi

Hace tiempo algunos compañeros y conocidos, me habían sugerido la creación de algún software o librería, para la creación de facturas digitales o CFDI que utilizamos en México, el cual es principalmente una estructura XML con elementos de control y validación, además de los ya conocidos elementos que conformaban lo que era una factura en papel.

En ese entonces, comenzaron a salir varias herramientas para la creación y emisión de facturas, por ejemplo en mi caso, como freelance utilizo los servicios de Factura Gorila, una aplicación que a mi parecer es excelente; así como también el SAT, promovió para quienes creaban sus facturas con medios propios los PAC, que son entidades autorizadas por el SAT utilizadas para la certificación de los archivos XML.

Viendo lo anterior y al no tener o ver una necesidad que faltará cubrir, dejé el tema y solo me mantuve informado de las modificaciones y noticias del SAT sobre la facturación.

En estos últimos días, se me ha presentado la necesidad de crear y emitir facturas por medios propios, bueno, por software propio o de creación propia.

Lo primero que hice fue buscar el famoso “Anexo 20” del SAT, en ese archivo esta contenida la estructura que debe de tener el archivo XML. También busque si existían librerías que permitieran la creación de archivos XML validos, lamentablemente, ninguno cubría mis necesidades, por lo cual opte por crear una librería propia.

La idea de crear una propia librería, es que pueda crear una estructura limpia y válida, así como también incluya información para interactuar con la API de PAC’s autorizados por el SAT, para conseguir el timbrado y la certificación del XML, es decir, me permita crear, timbrar y me regrese además la información necesaria para crear el archivo PDF para la presentación del XML, sin olvidar que se pueda adaptar a las nuevas modificaciones que el SAT vaya solicitando.

El proyecto tiene el nombre de “sat-cfdi“, tal vez cambie en el futuro, dado que no soy bueno para los nombres.

Al ser un proyecto nuevo, muchas cosas faltan aún, como por ejemplo: validación de los diferentes datos entre ellos los rfc’s, consulta de la lista LCO, creación del código QR, la creación de addendas y en un futuro algo muy ambicioso es el que se pueda utilizar esta librería en cualquier proyecto sin importar el lenguaje de programación que se este utilizando.

Como siempre pasa, al ser una necesidad de un proyecto que estoy desarrollando, me estoy dando cuenta de cosas que hacen falta y que poco a poco iré implementando para cubrir dichas necesidades.

Si te es útil el proyecto no olvides hacerlo saber, así como también enviar tus ideas y sugerencias.

Puedes ver esté y más contenidos del mismo autor en TuXsOuL.

Lunes 12 de septiembre de 2016

Antonio de Dios

Antonio de Dios
Linux – Webadedios

[FIX] NS_ERROR_NET_INADEQUATE_SECURITY en Firefox 48

Actualice firefox a su mas reciente versión (Mozilla Firefox 48.0) en mi máquina con linux debian, inmediatamente no fue posible acceder a las mayoría de los sitios mas comunes, entiéndase google, yahoo, facebook

Da un error de NS_ERROR_NET_INADEQUATE_SECURITY cuando visito la mayoría de los sitios como Google o incluso mozzila.org  (support.mozzila.org si funciona)

Este mensaje parece estar asociado con los sitios que están utilizando el protocolo HTTP 2 / (recientemente soportado en Firefox), pero no se fijo un nivel de seguridad adecuado para ese protocolo.Así que una opción sería la de decirle a Firefox que NO utilice http 2, de modo que los sitios usaran de nuevo http 1.1.

Solución temporal y actual, espero que en la siguiente y esperada versión de firefox solución este bug

Procedimiento
============

  1. about:config en la barra de direcciones y pulse Enter. Haga clic en el botón de la promesa de tener cuidado.aboutconfacepta
  2. En el cuadro de búsqueda arriba de la lista, escriba SPD estamos buscando el valor network.http.spdy.enabled.http2
  3. Doble clic en network.http.spdy.enabled.http2 para cambiar el valor de verdadero a falso

spdyafalso

Reinicia y esta solución temporal funciona, evidentemente en la siguiente versión hacer lo mismo pero volviendo a poner el valor en true/verdadero

Mi recomendación es no usar esta versión de firefox al menos en linux (firefox 48), 

 

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

Diez mil ediciones es Wikipedia español

Pues he superado las 10,000 ediciones en Wikipedia en español y pasado las 15,000 globales en el conjunto de proyectos de la fundación Wikimedia.
Es grato que automagicamente Wikipedia agradezca las ediciones
Puede parecer una simpleza o pequeñez, pero me representa un trabajo hormiga en la construcción y mantenimiento de un proyecto de conocimiento libre y colaborativo.

Jueves 08 de septiembre de 2016

Héctor Bautista

Héctor Bautista
Gnu/Linux – Soy un Jedi

Cuarto Aniversario

Hijo mío, este miércoles celebramos los 4 años que tienes de vida.

Ha sido largo el camino recorrido para llegar a este momento en particular.

Nos hemos topado con muchos momentos memorables, viajes y algunas veces, un par de tragos amargos.

Siempre has sido una bendición para nosotros, y en este cuarto aniversario, nos lo vuelves a comprobar.

Tenemos en puerta algunos cambios importantes, nuevas oportunidades y lugares por conocer y descubrir.

Espero que las decisiones y rumbo que estamos tomando ahora, supongan un bienestar para tu futuro y sienten las bases para una vida mejor y con mejores oportunidades.

Espero que te la hayas pasado un día muy divertido, bonito y sobre todo que hayas sentido todo el amor que toda la familia te tiene.

Recuerda siempre que te amo.

Tu padre.

Notas relacionadas:

  • No hay entrada relacionada

The post Cuarto Aniversario appeared first on Soy un Jedi.

Martes 06 de septiembre de 2016

Héctor Daniel Cortés

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

PostreSQL-azos!


UPDATE formatos_etiquetas_mineros SET descr=v.description FROM
(SELECT formatos_etiquetas_mineros.id, etiquetas.descr || ' [' || etiquetas.etiqueta || '] ' || mineros.tipo AS description
FROM formatos_etiquetas_mineros
JOIN formatos ON formatos_etiquetas_mineros.formato = formatos.id
JOIN etiquetas ON formatos_etiquetas_mineros.etiqueta = etiquetas.id
JOIN mineros ON formatos_etiquetas_mineros.minero = mineros.id
WHERE mineros.tipo
'None') AS v
WHERE formatos_etiquetas_mineros.id=v.id

Lunes 29 de agosto de 2016

David Moreno

David Moreno
dm's blog

Webhook Setup with Facebook::Messenger::Bot

The documentation for the Facebook Messenger API points out how to setup your initial bot webhook. I just committed a quick patch that would make it very easy to setup a quick script to get it done using the unreleased and still in progress Perl’s Facebook::Messenger::Bot:

use Facebook::Messenger::Bot;

use constant VERIFY_TOKEN => 'imsosecret';

my $bot = Facebook::Messenger::Bot->new(); # no config specified!
$bot->expect_verify_token( VERIFY_TOKEN );
$bot->spin();

This should get you sorted. What endpoint would that be, though? Well that depends on how you’re giving Facebook access to your Plack’s .psgi application.

Sábado 27 de agosto de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Criptografía asimétrica con curvas elípticas isógenas súpersingulares resistentes a ataques cuánticos

Poco a poco la criptografía como la conocemos está desapareciendo, he hablado con Tanja Lange un par de veces en los congresos que hace la sociedad matemática holandesa y ella parece insistir mucho que estamos ya muy cerca presenciar la existencia de una computadora cuántica, ella afirma que entre el 2024-2030 ya existirá alguna.

Lo relevante es que toda la criptografía actual implementada en los ámbitos económicos, militares y gubernamentales, cuenta con seguridad extrema ante computo clásico como lo conocemos (modelos Von Neumann, Turing...) . El problema es que el modelo de cómputo cuántico rompe todos los algoritmos implementados hoy en día. Esto es debido a la existencia de un algoritmo por Peter Shor que factoriza y calcula logaritmos discretos, es decir, rompe RSA y criptografía basada en el problema de logaritmo discreto (Curvas elípticas) en tiempo polinomial. Esto significará que todos seríamos vulnerables ante el individuo/organización que construya computadora cuántica (IBM, DWave, Google por ejemplo).

Por lo que, las curvas elípticas e hiperelípticas como las implementamos hoy en día, comienzan a ser obsoletas en criptografía, aunque siguen siendo muy útiles para computación en teoría de números algebraica que sirve para hacer nuevos algoritmos, es decir, no estoy diciendo que ya no sirvan las curvas, sino que la criptografía que usa el problema de logaritmo discreto con curvas o variedades abelianas está vulnerado ante la presencia de una computadora cuántica.

En este post les voy a mostrar un análogo de Diffie Hellman que no es vulnerable ante la presencia de un atacante con recursos cuánticos. El post es autocontenido, sólo requieres saber la teoría básica de curvas elípticas la cual la puedes leer en mi blog, recomiendo (aunque no es obligatorio ya que trato de hacerlo autocontenido leer estos artículos aquí en mi blog antes)

Teorema de Hasse en curvas elípticas
Álgebras de endomorfismos en curvas elípticas
j-Invariante en curvas elípticas

El método de Diffie Hellman que funciona bajo cómputo cuántico que describiremos aquí necesita conocimiento de morfismos entre curvas elípticas (isogenias u homomorfismos de los grupos abelianos inducidos por las curvas).
El contenido de este post es el siguiente:

* Background en isogenias y kérneles de éstas antes de irse a lo cuántico.
* Grado de una isogenia
* p-Torsión, j-invariante y características de curvas elípticas súpersingulares
* Construyendo Isogenias desde subgrupos de la curva usando fórmulas de Velú.
* Algoritmo explítico Diffie Hellman con isogenias entre curvas elípticas supersingulares.
* ¿Pero por qué nos enfocamos en súpersingulares?
* ¿En qué se basa la seguridad?, ¿qué tengo que romper si quiero hacer criptoanálisis?

Todo esto que escribo fue gracias a la emoción que me causaron las pláticas de Dimitar Jetchev (EPFL, Lausanne, Suiza), Frederik Vercauteren (KU Leuven, Bélgica), Benjamin Smith (INRIA, Francia) y René Schoof (Università di Roma, Italia) en el workshop "Mathematical structures for cryptography" el cual tuve la suerte de poder trabajar con grandes matemáticos del 22-26 de Agosto en Leiden, Países Bajos cuyo objetivo era juntar investigadores en matemáticas y criptografía para resolver problemas abiertos en esta teoría así como la basada en retículas para cómputo cuántico (Lattice Based Cryptography), todos los participantes aportamos algo interesante, y fue una de las más grandes experiencias profesionales que he tenido, aquí hay más información de la gente involucrada http://www.lorentzcenter.nl/lc/web/2016/834/participants.php3?wsid=834&venue=Oort

Comenzamos.

Background en isogenias y kérneles de éstas antes de irse a lo cuántico.

Sea $latex E$ una curva elíptica en forma de Weierstrass sobre un campo finito $latex \mathbb{F}_q$ , es decir $latex E:=\lbrace (x,y)\in \mathbb{F}_q\times\mathbb{F}_q : y^2 = x^3 + ax + b \rbrace$.

Como he explicado en posts anteriores, las curvas elípticas forman un grupo abeliano, es decir, $latex \langle E,\oplus\rangle$ es una estructura donde los puntos se pueden "sumar y restar" , es conmutativa, todos tienen inverso aditivo, es asociativa, cerrada y con elemento neutro $latex \infty$.

Hay fórmulas explícitas para calcular la suma de puntos como en el post anterior mencionado en el párrafo anterior, y también están muy bien explicadas en wikipedia, así que supondré que ya sabemos como funciona la adición elíptica que geométricamente la intuición es con la siguiente imagen:



Isogenias entre curvas 
(mapeos de curvas elípticas, homomorfismos de grupos abelianos inducidos)

Tenemos que si $latex \langle E_1, \oplus\rangle ,\langle E_2,\boxplus \rangle$ son dos curvas elípticas y existe un morfismo $latex \psi:E_1\to E_2$ que respeta la estructura de grupo de cada una, es decir $latex \psi(P\oplus Q)= \phi(P)\boxplus \phi(Q)$ y que mapea el $latex 0$ de una al $latex 0$ de la otra, entonces decimos que ambas son isógenas.

Ahora vamos a ver qué son esos ceros en la curva, ya que no es trivial desde el punto de vista afín.

Kérnel de isogenias

En curvas elípticas tenemos que una isogenia entre dos curvas se ve como $latex \psi(x,y) := (\frac{a_1(x)}{a_2(x)}, \frac{yb_1(x)}{b_2(x)} )$ donde más técnicamente es porque $latex \frac{a_1(x)}{a_2(x)}, \frac{yb_1(x)}{b_2(x)} \in \mathbb{F}_q(E_2)$ es decir son funciones bien definidas en los puntos de la curva en el codominio, son funciones de su campo de funciones (campo de fracciones de la gavilla de funciones del la curva vista como esquema).

Para entender el kérnel de un mapeo como el anterior, necesitamos ver la curva de manera proyectiva, ya que el 0 (cero) en $latex E_1$ y $latex E_2$ no es un punto afín.

Si $latex \psi:E_1\to E_2$ es una isogenia entre curvas elípticas, el kérnel está definido como:

$latex ker\psi := \lbrace P\in E_1 : \psi(P) = \infty_{E_2}\rbrace$

Es decir, todos los puntos que nos mandan al infinito.

Recuerden que las curvas son proyectivas, entonces lo que esto significa exactamente es que si la isogenia está definida por $latex (\frac{a_1(x)}{a_2(x)},y\frac{b_1(x)}{b_2(x)})$ entonces podemos proyectivizar estas ecuaciones con una nueva variable $latex z$ (cerradura proyectiva), los puntos que el mapeo manda al infinito veremos a continuación que son justamente donde no están definidas esas funciones racionales sin proyectivizar.

Informalmente pero no incorrectamente, definir la imagen de estos puntos "no definidos bajo $latex \phi$" como $latex \infty_{E_2}$ se hace, deshaciéndose de los denominadores en la isogenia y homogeneizando, eso será la isogenia vista en la cerradura proyectiva de la curva que es $latex zy^2 = x^3 + az^2x + bz^3$ .

Entonces tendremos que los puntos afines de la cerradura proyectiva de la curva están dados por los puntos $latex (x:y:1)$ , es decir, la imagen afín de $latex \psi$ es  $latex (\frac{a_1(x)}{a_2(x)}:y\frac{b_1(x)}{b_2(x)}:1)$ , por lo que entonces la ecuación proyectiva es: $latex (a_1(x)b_2(x):yb_1(x)a_2(x):a_2(x)b_2(x))$ , y todos los puntos $latex (x:y:1)$ donde no está definida la curva afín, justamente estarán bien definidos aquí proyectivamente y esos puntos, son los que tienen imagen al infinito , es decir, que tienen como imagen el punto $latex \infty := (0:1:0)$, y son los puntos en el $latex ker\psi$ incluyendo al $latex \infty_{E_1}$ ya que es requisito de una isogenia mapear infinitos.

Pueden ustedes demostrar de hecho que $latex ker\psi := \lbrace (x,y)\in E_1 : a_2(x)=0\rbrace$ con el hint de que $latex a_2^3 \mid b_2^2$ siempre, y así como que $latex b_2^2\mid f_1a_1^3$ donde $latex f_1$ es la ecuación que define a $latex E_1$ en $latex y^2 = x^3 + a_1x + b_1$, recuerden que esto lo demuestran en el campo de funciones de la curva, es decir tienen que tomar en cuenta la ecuación de la curva al momento de demostrar esto.

Teorema: Si dos curvas elípticas son isógenas sobre un campo finito, entonces tienen el mismo número de puntos.

Grado de una isogenia


Antes de demostrar el teorema, necesitamos entender qué es el grado de una isogenia.

Sea $latex \psi:E_1\to E_2$ una isogenia definida sobre un campo finito $latex \mathbb{F}_q$.

Decimos que el mapeo $latex \psi$ es separable si la extensión de los campos inducida por $latex \mathbb{\psi}$ es separable.

Es decir si $latex \mathbb{F}(E_1)/\psi^{*}\mathbb{F}_q(E_1)$ es separable, y su dimensión como espacio vectorial la usamos para definir:

$latex \text{grad}\psi := dim_{\mathbb{F}_q}(\mathbb{F}_q(E_1)/\psi^{*}\mathbb{F}_q(E_1))=[\mathbb{F}(E_1):\psi^{*}\mathbb{F}_q(E_1)]$

Si esta extensión de campos inducida por $latex \psi$ es separable, decimos que es $latex \psi$ es separable, y una propiedad de isogenias separables es que $latex \text{grad}\psi :=$#$latex ker\psi$.

Pero que no cunda el pánico, vamos a ver cómo encontrar este grado sin meternos en la teoría dura, esto sólo es para definir algo (grado) y luego ver que su cálculo se puede hacer sin tener que calcular bases de espacios vectoriales.

Es fácil demostrar que el grado de la extensión de campos se mide siempre de una manera inocente contando el número de elementos en la imagen inversa de cualquier punto (sin ramificación) en el codominio.

O sea si el grado de $latex \psi$ fuera 1, significa que los espacios vectoriales inducidos por $latex \psi$ son los mismos, por lo que la imagen inversa de cualquier punto tiene sólo 1 punto ya que en este caso $latex \psi$ sería un isomorfismo.

El grado mide qué tan "complejo" es $latex \psi$ , por lo que de hecho el grado de una isogenia está definido también por la cantidad de elementos en la imágen inversa de $latex \psi$ para un punto ordinario general, es decir de $latex \psi^{-1}(Q_{E_2})$ donde $latex Q_{E_2}\in E_2$ es un punto ordinario, es decir no presenta ramificación (Por ejemplo un punto $latex (x,y)$ cuya coordenada $latex x$ no sea raíz de $latex x^3 + ax + b$ , ya que estos puntos son de ramificación, pero no entraremos en eso por ahora).

Como $latex \psi$ es un homomorfismos, tenemos que #$latex \psi^{-1}(Q_{E_2}) =$#$latex ker\psi$, por lo que tenemos otra igualdad más.

De tarea ustedes entonces dicho lo anterior pueden probar que $latex \text{grad}\psi$ es fácilmente calculable ya que si $latex P\in E_1$ y $latex Q:=\psi(P)$ es un punto con coordenadas $latex (s,t)$ en $latex E_2$ entonces #$latex \psi^{-1}(Q)$ es exactamente el número de ceros diferentes del polinomio $latex a_1(x)-sa_2(x)$ pero como $latex \psi$ es separable entonces este polinomio no tendrá raíces repetidas, por lo que #$latex \text{grad}\psi = \text{Deg}(a_1(x)-sa_2(x))=$#$latex ker\psi$.

Demostración de teorema

Dicho todo esto, considera el mapeo $latex \phi_1\in End_{\mathbb{F}_q}(E_1)$ y $latex \phi_2\in End_{\mathbb{F}_q}(E_2)$ tal que si $latex (x_i,y_i) \in E_i$ entonces $latex \phi_i(x_i,y_i) = (x_i^q, y_i^q)$ .

Es decir son los endomorfismos de Frobenius de cada una de las curvas.

Recuerden que queremos demostrar que dos curvas $latex E_1,E_2$ isógenas sobre $latex \mathbb{F}_q$ tienen el mismo números de puntos, y tenemos que la isogenia es $latex \psi:E_1\to E_2$.

Es fácil ver que $latex \psi\circ \phi_1 = \phi_2\circ \psi$, ya que si $latex P:=(x_1,y_1)\in E_1$ y $latex (x_2,y_2):=\phi(P)$ entonces $latex \psi(\phi_1(P)) = \psi(x_1^q,y_1^q)$ y en el otro lado $latex \phi_2(\psi(P)) = \phi_2(x_2,y_2)=(x_2^q,y_2^q)$.

Es decir, en el párrafo anterior afirmo que  $latex (x_2^q,y_2^q) = \psi(x_1^q,y_1^q)$, ya que recuerden que $latex \psi$ está formada por funciones racionales en $latex x$ y en $latex y$, entonces es un ejercicio de álgebra básica demostrar que si $latex r(x)$ es un polinomio sobre un campo finito entonces $latex r^q(x)=r(x^q)$, es decir se cumple el sueño de todo niño de secundaria, que por ejemplo si $latex x+y\in \mathbb{F}_q(x,y)$ entonces $latex \phi(x+y)=(x+y)^q = x^q + y^q$.

Entonces con toda mi informalidad que me caracteriza, tenemos ya que $latex \psi\circ \phi_1 = \phi_2\circ \psi$

Por lo que como la operación $latex \circ$ de composición en $latex End_{\mathbb{F}_q}(E_i)$ es distributiva, podemos inferir que:

$latex \psi\circ (\mathbbm{1}_{E_1} - \phi_1) = (\mathbbm{1}_{E_2}- \phi_2)\circ \psi$   (*)

Tal que $latex \mathbbm{1}_{E_i}$ es el mapeo de identidad en $latex End_{\mathbb{F}_q}(E_i)$ .

Calculemos el grado de  (*) .

Sabemos que el $latex \text{grad}\psi_1\circ \psi_2 = \text{grad}\psi_1\cdot \text{grad}\psi_2$ , esto lo pueden demostrar usando mi demostración anterior de que el grado de una isogenia está directamente relacionado con el grado de un polinomio dado por el mapeo, y pues al componerlos, el grado incrementa multiplicativamente.

También tenemos que el grado de $latex \mathbbm{1}_{E_i}-\phi_i$, como es un mapeo separable, es el número de elementos en el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$... Pregunta ¿quién está en el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$?

Recordemos que el endomorfismo de Frobenius tiene una propiedad interesante, es decir, si tenemos que $latex \mathbb{F}_{p^n}$ es un campo finito, y definimos para todo $latex x\in \mathbb{F}_{p^n}$ el mapeo $latex \phi_m(x) := x^{p^m}$ entonces $latex \phi_m(x)=x$ sí y sólo sí $latex x\in \mathbb{F}_{q^m}$ por lo que $latex x\in \overline{\mathbb{F}_p}$  es $latex \mathbb{F}_{p^m}$-racional si $latex \phi_m(x)=x$ , es decir, donde el endomorfismo de Frobenius se comporta como la identidad, nos caracteriza a los puntos racionales.

Entonces el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$ son los puntos $latex (x_i,y_i)\in E_i$ que son iguales ante Frobenius y ante la identidad... es decir, puntos racionales $latex \mathbb{F}_q$-racionales.

Con lo anterior tenemos que  $latex \text{grad} (\mathbbm{1}_{E_i}-\phi_i)=$#$latex E_i$ .
Con esto tenemos tenemos que el grado de (*) es:

$latex \text{grad}\psi\cdot$#$latex E_1 = \text{grad}\psi\cdot$#$latex E_2$ por lo que #$latex E_1=$#$latex E_2$. q.e.d. $latex \blacksquare$.


p-Torsión, j-invariante y características de curvas elípticas súpersingulares

Definición: $latex E/\mathbb{F}_{p^n}$ una curva elíptica, entonces definimos la n-torsión de la curva como:

$latex E[n] := \lbrace P\in E : nP=\infty \rbrace$


Es decir, los puntos que al sumarse $latex n$ veces, se anulan.

Definición: Sea $latex E/\mathbb{F}_{p^n}$ entonces decimos que $latex E$ es ordinaria si $latex E[p]\cong \mathbb{Z}/(p)$ y es supersingular si $latex E[p]\cong\lbrace\infty\rbrace$.

Es decir, si no tiene p-torsión más que la trivial, le llamamos supersingular.

La palabra "supersingular" no tiene nada que ver con "singular", ya que una curva es singular si tiene singularidades, pero una curva elíptica por definición no es singular, es decir, no tiene puntos raros (discriminante de la curva es distinto de cero), ni tampoco raices repetidas.

La palabra supersingular es porque realmente son excepcionales,  y de hecho una cosa interesante de estas curvas es que SIEMPRE están bien definidas sobre $latex \mathbb{F}_{p^2}$ para cualquier $latex p$ , es decir, al reducir una ecuación de una curva a $latex \mathbb{F}_{p^2}$ nunca presentará singularidades.


Ahora vamos a ver otra definición importante que justamente será usada por el protocolo Diffie-Hellman.

Definición: Definimos el j-invariante de una curva elíptica $latex E/k$ donde $latex k$ es cualquier campo de caracteristica mayor que 3 y la forma de Weierstrass de $latex E$ es $latex y^2=x^3 + ax+b$ lo definimos como:


$latex j(E):=1728 \frac{4a^3}{4a^3+27b^2}$

Esta función loquita es muy importante en análisis complejo, y se preguntarán de donde sale ese 1728. Primero necesitamos saber para qué es esto.

El j-invariante tiene la propiedad de que si dos curvas tienen el mismo j-invariante, es decir $latex j(E_1)=j(E_2)$ entonces tenemos que $latex E_1\cong E_2$ sobre su campo de definición $latex k$.

Noten que el denominador del j-invariante nunca es 0, ya que es justamente el discriminante de $latex x^3 + ax+b$ y este no es cero porque sino la curva tendría singularidades y por definición una curva elíptica no es singular.

Otro teorema importante es que para todo $latex j_0\in k$ existe una curva elíptica $latex E_{j_0}$ tal que $latex j(E_{j_0})$ por lo que automáticamente podemos inferir que sobre cualquier campo... el moduli de TODAS las curvas elípticas sobre cualquier campo finito o infinito... es unidimensional... es decir, todas las curvas elípticas forman una línea.

Otros teoremas importantes es que los endomorfismos extendidos a $latex \mathbb{Q}$ definido como $latex End_0(E):= End_k(E)\otimes_{k}\mathbb{Q}$ cuando $latex E$ es supersingular, forman una álgebra de cuaternios, es decir no es conmutativa.

En el caso ordinario donde $latex E$ no sea supersingular , tenemos que $latex End_0(E)$ siempre es una extensión cuadrática de $latex Q$ compleja, es decir $latex End_0(E)\cong \mathbb{Q}(\sqrt{d})$  con $latex d$ negativo y libre de cuadrados.


Corolario: Sea $latex E/\mathbb{F}_q$ una curva elíptica supersingular, entonces #$latexE(\mathbb{F}_q)=p+1$.

Demostración:

No lo haré, pero usen el teorema de Hasse, deduzcan que si la curva es supersingular, entonces la traza del endomorfismo de frobenius es 0, todo esto se puede demostrar con lo anterior.

Teorema: Sea $latex \psi:E_1\to E_2$ una isogenia tal que $latex E_1$ es súpersingular, entonces $latex E_2$ también es supersingular.

Lo mismo aplica para curvas ordinarias, es decir, los dos tipos de curvas, súpersingulares y ordinarias sólo "se llevan" entre sus respectivas categorías, esto es importante, porque el protocolo que describiré pronto asegura que todas las isogenias serán entre curvas súpersingulares.

Pero antes veamos cómo construir isogenias cuyo kernel sea el subgrupo del dominio de la isogenia, es decir, dado un $latex H_P\subset E$ un subgrupo de una curva elíptica sobre un campo finito, en este caso $latex H_P$ es el generado por $latex P$ , construiremos explícitamente $latex \psi_P:E\to E_P$ tal que $latex ker\psi_P=H_P$ y la ecuación explícita de $latex E_P$.

Construyendo Isogenias desde subgrupos de la curva usando fórmulas de Velú.

Recuerden que #$latex E(\mathbb{F}_q)=N$ es finito, ya que el campo de definición es finito.
Entonces por el teorema de lagrange, sabemos que la información de sus subgrupos está escondida en la factorización de $latex N$.


Sea $latex P\in E$, definimos el subgrupo $latex H_P\subsetneq E$ como:

$latex H_P:=\lbrace nP : n \in \mathbb{Z}\rbrace$

Este es el grupo de "todos los múltiplos de $latex P$:" en la curva, es trivial que es un subgrupo de $latex E$.

Vamos ahora a construir una isogenia asociada a $latex P\in E$ que denotamos por $latex \psi_P$ cuyo kernel sea $latex H_P$ hacia otra curva que denotaremos como $latex E_P$.

Es decir vamos a construir $latex \psi_P:E\to E_P$ tal que $latex ker\psi_P = H_P$
Todos sabemos que el kérnel de un morfismo de grupos es un subgrupo normal del grupo, así que esto no debe causarles conflicto.


La notación de las coordenadas para los puntos en $latex \langle E,\oplus\rangle$  será $latex P:=(x_P,y_P), Q:=(x_Q,y_Q), P\oplus Q:=(x_{P+Q},y_{P+Q})$.

Definición-Teorema-Vélu: Sea $latex \langle E/\mathbb{F}_q,\oplus\rangle$ una curva elíptica y $latex P_0\in E$, tal que $latex y^2 = x^3 + ax + b$ construyamos como vimos anteriormente el grupo generado por los "múltiplos de $latex P_0$" , $latex H_{P_0}$.

Entonces tenemos que para todo $latex P\notin H_{P_0}$:

$latex \psi_{P_0}:E\to E_{P_0}$
           $latex P\mapsto \Big( x_P+\displaystyle\sum_{Q\in H_{P_0}\setminus\lbrace\infty\rbrace}(x_{P+Q}-x_Q), y_P+\displaystyle\sum_{Q\in H_{P_0}\setminus\lbrace\infty\rbrace}(y_{P+Q}-y_Q)\Big)$

Y si $latex P\in H_{P_0}$ definimos $latex \psi_{P_0}(P)=\infty$.


Es fácil mostrar que $latex ker\psi_{P_0}:=H_{P_0}$ , de hecho, ústedes háganlo y verán como todo se reduce a hacer matemáticas lindas, no es tan difícil.

Pero bueno, esta función $latex \psi_{P_0}$ no está dada por la forma que mostrarmos al principio, es decir por la isogenia definida con los polinomios $latex \big( \frac{a_1(x)}{a_2(x)},y\frac{b_1(x)}{b_2(x)} \big)$.

Pero Dustim Moody y Daniel Shumow ya lo hicieron en la sección 2.3 de un paper, aquí dejo su páper , así que ya tenemos la isogenia explícita, y de hecho en ese mismo paper se describe la ecuación de la curva $latex E_{P_0}$ la cual es $latex y^2 = x^3 + (a-5v)x + (b-7w)$ donde $latex v,w$ son constantes que dependen de $latex H_{P_0}$ y son explícitamente calculables.

Ahora sí, el algoritmo

Algoritmo explícito Diffie Hellman con isogenias entre curvas elípticas supersingulares.



Considera una curva elíptica supersingular $latex E$ definida sobre $latex \mathbb{F}_{p^2}$  tal que $latex p=w_A^{e_A}\cdot w_B^{e_B}\cdot f \pm 1$, es decir es un número primo especial, donde $latex w_A,w_B$ son números primos chicos y $latex f$ es cualquier entero, así como $latex e_A,e_B$ los cuales se escogerán de tamaños parecidos y tal que $latex p$ cumpla el nivel de seguridad requerido en bits para este esquema, que está probado que es aproximadamente de 3000 bits (referencia aquí). Entonces con todo lo que dijimos en la sección de curvas súpersingulares es fácil inferir que el tamaño de la curva está dado por #$latex E(\mathbb{F}_{p^2})=(p\pm 1)^2$.

Sean A=Artemisa y B=Boris , dos personas que desean intercambiar una llave en un canal no seguro intervenido por un atacante con recursos cuánticos.

Entonces ellos harán lo siguiente:

Algoritmo SIDH (Supersingular Isogeny Diffie-Hellman)

Públicamente harán lo siguiente: 

Se ponen de acuerdo en los siguiente: $latex p=w_A^{e_A}\cdot \w_B^{e_B}\cdot f \pm 1,\langle E/\mathbb{F}_{p^2},\oplus\rangle,P_A,Q_A,P_B,Q_B\in E$ tal que $latex E$ es súpersingular.
donde intercambiar una curva $latex E/\mathbb{F}_{p^2}$ equivale a mandar $latex \lbrace a,b\rbrace$ tal que $latex y^2 = x^3 + ax+b$.

Tenemos que $latex P_A,Q_A$ y $latex P_B,Q_B$ fueron escogidos tal que tienen orden $latex w_A^{e_A}$ y $latex w_B^{e_B}$ respectivamente, lo cual es fácil por el número primo que construimos.


Vamos a denotar por nA, nB, el paso $latex n$ que tiene que hacer Artemisa o Boris respectivamente,.

Protocolo:

1A: A genera dos números aleatorios $latex m_A,n_A$ < $latex w_A^{e_A}$
2A: A genera $latex R_A := m_A\cdot P_A \oplus n_A\cdot Q_A$ (secreto)
3A: A usa el punto $latex R_A$ para crear el subgrupo $latex H_{R_A}$ que funcionará como kernel del mapeo $latex \psi_{A}:E\to E_A$, por lo que ya tiene $latex R_A,\psi_{A},E_A$ donde los últimos dos son gracias a las fórmulas de Vélu mostradas en la sección anterior.
4A: A forma los puntos $latex \psi_{A}(P_B)$ y $latex \psi_{A}(Q_B)$ con su isogenia creada en el paso anterior.
5A: A le manda a B $latex \lbrace E_A,\psi_A(P_B),\psi_A(Q_B)\rbrace$
Pero NO le manda la isogenia, sino la imagen de los puntos bajo la isogenia secreta $latex \psi_A$

1B-4B: Ahora Boris hace los mismos primeros 4 que Artemisa, sólo intercambiamos las letras de los subscripts A por B

5B: B manda a A $latex \lbrace E_B,\psi_B(P_A),\psi_B(Q_A)\rbrace$
6A: A tiene $latex m_A,n_A,\psi_B(P_A),\psi_B(Q_A)$ y forma el punto $latex S_{BA}:=m_A\cdot\psi_B(P_A)\oplus n_A\cdot\psi_B(Q_A)$.
7A: A usa el punto para generar la isogenia $latex \psi_{BA}$ usando fórmula de Vélu, así como la imagen de la isogenia que será la nueva curva $latex E_{BA}$ que es isógena a $latex E$ gracias a $latex \psi_{BA}$.
8A. A calcula el j-invariante  de la curva $latex E_{BA}$ que será $latex \kappa:=j(E_{BA})$.
6B: Similarmente al paso 6A, Boris tiene $latex m_B,n_B,\psi_A(P_B),\psi_A(Q_B)$ por lo que forma el punto $latex S_{AB}:=m_B\cdot\psi_A(P_B)\oplus n_B\cdot\psi_A(Q_B)$.
7B: Boris usa el punto $latex S_{AB}$ para generar la isogenia con las fórmulas de Velú asociada al subgrupo generado por $latex S_{AB}$ , esta isogenia es $latex \psi_{AB}$ y genera también el codominio de esta isogenia que es la curva $latex E_{AB}$ que es isógena a $latex E$ gracias a $latex \psi_{AB}$.
8B: B calcula el j-invariante de la curva $latex E_{AB}$ que será $latex \kappa:=j(E_{AB})$.

Las curvas $latex E_{AB}$ y $latex E_{BA}$ son isomorfas, ustedes lo pueden demostrar si hacen todo el diagrama, por lo que el j-invariante será el mismo, y ya ambos pueden usar como password $latex  \text{Hash}(\kappa)$ o cualquier función en Kappa.

¿Pero por qué nos enfocamos en súpersingulares?

La verdad nunca usamos nada de las características supersingulares... Pero recuerden que el álgebra de endomorfismos de una curva elíptica supersingular NO es conmutativa, ya que es isomorfa a un álgebra de cuaternios.

Existe un ataque, que resuelve el problema "difícil" en el que está basado este protocolo en tiempo subexponencial cuántico. El algoritmo está descrito en este paper por Andrew M. Childs, David Jao y Vladimir Soukharev.  El cuál hace uso extenso de la CONMUTATIVIDAD del anillo de endomorfismos de la curva elíptica para resolver subexponencialmente el "Abelian Hidden Shift Problem" que es el nombre del problema que hace seguro al algoritmo descrito en la sección anterior.

Por lo que debemos enfocarnos a curvas cuyo anillo de endomorismos no sea conmutativo... es decir... súpersingulares.

¿En qué se basa la seguridad?, ¿qué tengo que romper si quiero hacer criptoanálisis a este algoritmo?


Lo que hay que romper es el "Abelian Hidden Shift Problem".  Algo así en español como "Problema oculto de desplazamiento oculto", ya que lo que estamos haciendo en el algoritmo anterior, es desplazar grupos, y adquireir nuevas curvas "desplazando" con puntos nuevos.

Este problema en general consta de lo siguiente.

-Sea $latex A$ un grupo abeliano finito.
-Sea $latex S$ un conjunto finito.
-Sea $latex f:A\to S$ y $latex g:A\to S$ dos funciones inyectivas.
-Existe una $latex b\in A$ tal que para todo $latex x\in A$ tenemos que $latex f(x)=g(xb)$
-El valor que un atacante quisiera saber es $latex b$.

Vamos a reformular esto en términos de curvas elípticas de manera básica.

-Tenemos dos curvas isógenas $latex E,\hat{E}$
-Decimos que $latex f_0(a)=a*E$ y $latex f_1(a)=a*\hat{E}$.
-Entonces $latex b*E=\hat{E}$
-También $latex f_1(a)=a*\hat{E}=a*b*E=f_0(ab)$

Resolver el Abelian Hidden Shift Problem en $latex f_0$ y $latex f_1$ es descubrir $latex b$.

Esto realmente significa calcular la acción en las curvas elípticas

Dicho esto, SIDH con curvas elípticas súpersingulares, la seguridad se obtiene es con llaves de 3000 bits para obtener seguridad cuántica exponencial de 128 bits, la cual es más que suficiente.

Esto es todo por hoy, ahora saben cómo implementar un algoritmo que tenga seguridad cuántica.

Espero les haya gustado


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




Viernes 26 de agosto de 2016

Omar Hernández Sarmiento

Omar Hernández Sarmiento
-- tekini --

script llamando a consola, whiptail y zenity

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

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

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

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

#mostrar nombre
 Saluda "$nombre";


terminal
$ ./eje.bash

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


whiptail
$ ./eje.bash -w

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


zenity
$ ./eje.bash -z

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


terminal
$ ./eje.bash petrohs

Miércoles 24 de agosto de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

#QUICKTIP: SELinux no permite usar kvm

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

En los logs encontramos:

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

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

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

1. Hacer downgrade a la política de SELinux

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

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

Crear archivo type enforcement

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

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

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

Compilamos el módulo

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

Lo cargamos en la política

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

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

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

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

Sin embargo, aún no esta disponible:

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

Referencias:

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

Espero les sirva…

Lunes 22 de agosto de 2016

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

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


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

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

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

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


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

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

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


Construcción:

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

Empecemos facilito.

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

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

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


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

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

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

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

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

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

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

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


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

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

Por ejemplo si $latex a=1/7$

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

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

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

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

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

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

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


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

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


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

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


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

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

Eduardo Ruíz Duarte
twitter @toorandom

Domingo 21 de agosto de 2016

David Moreno

David Moreno
dm's blog

WIP: Perl bindings for Facebook Messenger

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

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

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

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

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

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

$bot->spin();

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

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



…using a simple script like this one.

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

Thanks!

Jueves 11 de agosto de 2016

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

OpenVPN client en CentOS/RHEL

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

Joseph CooperInterestellar

 

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

Al intentar conectarse obtenía el error:

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

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

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

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

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

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

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

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

Como root:

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

Como usuario:

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

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

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

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

Espero les sirva…

 

Referencias

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

OpenVPN Howto: Unprivileged Mode

Viernes 05 de agosto de 2016

José Oviedo

José Oviedo
oviedo.mx

Problema con VMware y Ubuntu 16.10 (GCC 6)

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

vmware-gcc-problem

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

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

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

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

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

cd vmmon-only
make
cd ..

cd vmnet-only
make
cd ..

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

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

vmware-restart

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