Viernes 06 de marzo de 2015

Renich Bon Ciric

CFDI y FOSS @ México

Bueno, de la manera más informal y no oficial, me gustaría escribir el primer artículo; presumo, sobre admin-cfdi.

Es un proyectito que están escribiendo unos batos locos del D.F. y de PythonCabal; así como de otros lados. Una colaboración como pocas que han habido en PythonCabal por lo menos.

En todo caso, qué es el mentado admin-cfdi? Es un administrador de CFDI; escrito en Python. Tengo entendido que va a ser parte de algo más grande pero, por lo pronto, están escribiendo ésto.

Recientemente, me platican, están re-escribiendo algunas cosas. Por ejemplo, van a usar el módulo request en vez de usar selenium (phew!) para hacer la descarga. Bastante bueno, el rollo.

Si quisieses apoyar, pues tuvieses que caerle a las reuniones semanales, que son los Miércoles, creo. Únete a la lista de correo de PythonCabal o, de plano, checa la wiki e infórmate.

También, en un googlazo, me econtré con varios otros proyectos que andan haciedo lo meeeeesmo! A webo!

Bien por ellos y nosotros!

Jueves 05 de marzo de 2015

Emerson Posadas

Emerson Posadas
toxickore BLOG

Remember how to nat your network

Is a good idea to remember how to nat a network, so the lessons learned are always good lessons. This is for most linux distributions and not permanent changes (let's say a reboot will destroy this change).

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Also make sure we have a default gateway on the internal network:

# route add default gw aaa.bbb.ccc.ddd

And that's it.

More details on: http://www.revsys.com/writings/quicktips/nat.html

Miércoles 04 de marzo de 2015

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

El Kernel que se Actualiza sin Reiniciar

En la versión 4.0 del Kermel Linux se incluye un patch que permitirá que el kermel se actualice sin necesidad de reiniciar el servidor. Esto nos permitirá de ver periodos mas largos de operación de los servidores Linux y pasar de meses a posiblemente años en los que un servidor Linux podrá estar funcionando sin reiniciar.

Lunes 02 de marzo de 2015

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

FireFTP un cliente para Firefox

Para aquellos amantes de Firefox, hoy les presentamos este complemento llamado FireFTP, el cual es un cliente de FTP muy sencillo de utilizar.

Para instalarlo, debemos ir a:

Herramientas >> Complementos >> y buscamos FireFTP

O bien podemos ir a la pagina de Mozilla e instalarlo desde ahí:

https://addons.mozilla.org/es/firefox/addon/fireftp/

Una vez instalado, tendremos el icono de un caballo de mar y al presionarlo, se nos abrirá un nuevo tab como el siguiente:

http://sunny.moorparkcollege.edu/~kmacone/images/FireFTP_Connected.jpg

Una vez acá ya podremos manejar nuestro FTP a gusto como con cualquier otro cliente. Con la ventaja de que este es muy liviano y viene incorporado a Firefox.

Además de ser un sencillo cliente, tambien tiene opciones avanzadas, como lo es la conexión por STFP, transferencias rápidas y seguras con SSL, un buscador bastante amplio que permite buscar entre todos los archivos que tenemos subidos y muchas otras opciones más.

 

Gustavo Rubio

Gustavo Rubio
Ahí vamos

That javascript framework was so this morning (and so was that problem)

Una de las cosas que un ingeniero disfruta (o debería) es solucionar problemas, es una actividad naturalmente atractiva para quienes deciden dedicarse a esta fina profesión. Esa misma curiosidad nos hace constantemente buscar otros desafíos.

Particularmente, en el desarrollo de software, buscar soluciones a problemas pequeños es una constante que usualmente nos mantiene entretenidos y ocupados sin embargo, es común que nos bloqueemos al grado de no querer continuar con nuestro trabajo, una especia de “Sindrome de bloqueo del escritor

¿Por qué perdemos el interés en la tarea actual, el proyecto o a veces nuestro empleo?

A todos nos ha pasado: estamos horas tratando de resolver un problema, diseñar un algoritmo, el programa no compila o no corre, en fín, infinidad de obstáculos que después de una cantidad razonable de tiempo se vuelven tediosos y nos aburren. Algunos se levantan de su escritorio a caminar y pensar un poco, otros van a la tienda por una coca, otros se fuman un cigarro… después regresamos a nuestro escritorio con la mente un poco más despavilada a tratar de solucionar el problema.

Otros, como yo, simplemente necesitamos un poco de concentración. A mi particularmente me ayuda estar solo, sin ruido. Es común que mientras trabajo no esté escuchando música como muchos de mis compañeros lo hacen, yo lo relaciono con mi poca capacidad de multitasking (aunque honestamente, no creo que ningún ser humano sea capaz de hacer varias cosas a la vez, o no bien al menos) incluso me es a veces necesario aislarme por completo sin presencia de nadie para poder pensar en la solución más adecuada a un problema, como Sherlock con su “palacio mental“.

El aburrimiento

Estar aburridos creo que es la principal causa de bloqueo u obstáculo para solucionar un problema y tiene todo el sentido del universo, es decir, si no estamos cautivados por lo que nos encontramos haciendo en este mismo instante, es decir, sumamente interesados ¿Cómo nó vamos a estar aburridos? Aunque en este caso el estar aburrido creo es la consecuencia y no la causa, además, estar aburrido es una de las cosas mas naturales y humanas que podemos experimentar los homo sapiens. Osho, conocido (y controvertido) gurú hindú, comentaba en una de sus entrevistas:

No animal is ever bored. Look at a buffalo, chewing grass, the same grass every day, sitting and chewing and chewing, never bored. You may get bored looking at her: she is not bored. No animal is ever bored, you cannot bore an animal. Too thick, too dense a mind -how can you bore? For boredom a very, very high sensitivity is needed, the higher your sensitivity the higher will be your boredom, the more will be your boredom.

Los humanos tenemos una sensibilidad profunda y somos emocionales lo cual fomenta cambios de ánimo, como el estar aburrido y contrario a ser algo negativo es un indicador de que somos seres que razonamos y buscamos adquirir conocimiento constantemente, hasta el día de nuestra muerte.

Estar aburridos, insisto, sería una consecuencia y no una causa.

Distractores

Obviamente lo primero que se nos viene a la mente son las redes sociales, el teléfono, etc. Aunque conozco muchos colegas que se distraen fácilmente con estos, llamemosle “artefactos“, hay quienes aun sin este tipo de distracción pueden perder el interés. Existen otros detonantes para distraernos de nuestro trabajo ya sean problemas personales, familiares, deudas, el resultado del partido del domingo, un viaje, etc. Creo que todos estos distractores los conocemos bien y no son específicos de nuestra profesión sino de cualquier persona que no sepa hacerse responsable de su trabajo.

Existen otros distractores, sin embargo, que hacen que nos enfademos de nuestro trabajo y que curiosamente los tenemos todo el tiempo entre nosotros, están escondidos ahí, como soldados aqueos en un caballo de madera.

A los primeros les llamaría yo distractores “naturales”, es decir, vienen de paquete con el hecho de que somos humanos y que necesitamos “despavilarnos” de cuando en cuando. El uso (y abuso) de los mismos es responsabilidad de cada individuo: hay trabajadores huevones que siempre buscarán un pretexto para no hacer bien su trabajo y hay otros que simplemente necesitan un “break” e independientemente del tiempo “fuera” cumpliran sus metas.

Al segundo tipo de distractor les llamo “artificiales” porque de alguna manera los desarrollamos inconcientemente, sin saber que estan ahí.

¿Cuáles son estos distractores artificiales, particularmente para los programadores?

Aquí un claro ejemplo:

El tweet anterior no solo es sarcástico y gracioso también es certero. ¿Cuántos nuevos frameworks de desarrollo nacen con la simple justificación de ser nuevos, de ser diferentes?

Programming “Gamification

El término gamification se entiende como la actividad o metodología de “premiar” simbólicamente a un individuo por completar tareas, cumplir metas o resolver problemas. Por ejemplo, un caso contemporaneo es foursquare / swarm o untappd para los amantes de la cerveza: cuantos más lugares conocemos o más tipos de cerveza probemos se nos proporciona un badge, o medallita que, aunque nos hace sentir que competimos, es igual de relevante que las estrellitas que nos pegaban en la frente en el jardín de niños.

Algo que he notado en programadores, sobre todo en los menos experimentados, es precisamente una necesidad de obtener algún tipo de reconocimiento por la cantidad de conocimiento con la que cuentan sin que necesariamente este se traduzca a algo útil para los usuarios finales quienes son, al final del día, la razón por la cual estamos desarrollando nuestro producto.

Conocer más lenguajes modernos, entender los frameworks más inovadores y radicales, cantidad de repositorios en github, todas actividades muy loables y necesariamente perseguibles para no quedarnos atrás con las nuevas tecnologías y perder práctica, sin embargo debe existir un balance saludable entre teoría, práctica y productividad.

Es mas o menos como juzgar un proyecto de software por su cantidad de líneas de código y deducir que a mayor cantidad es mejor, lo cual es obviamente falso. De la misma manera, tener cientos de commits a un proyecto no necesariamente aportan valor. El valor se encuentra en la utilidad de dicho código para quien pretenda utilizar nuestro software.

Como “project manager” constantemente me encuentro con código poco probado que el desarrollador asegura está listo o que incluso pasa las pruebas unitarias y que desde la perspectiva de desarrollo “sirve” pero desde la perspectiva de calidad de producto deja mucho que desear y la razón por la cual sucede esto es precisamente una aparente e innecesaria prisa por entregar rápido y pasarnos al siguiente problema porque ya nos aburrimos del anterior.

Similar a esto, algún colega, desarrollador de PHP comentaba recientemente en un foro el hecho de que muchos programadores apenas tienen algo de experiencia en un lenguaje o herramienta, se brincan a otra para poder solucionar otros problemas con paradigmas diferentes (y que si lo sabemos quienes aun tocamos PHP). Tal es el caso de node.js, tecnología completamente diferente a otros lenguajes o plataformas mas tradicionales que precisamente trata de solucionar problemas diferentes, no los mismos problemas con diferente código.

Desarrollar en tecnologías “viejas” como PHP o Java puede no ser cool, pero puede ser productivo. Desarrollar en nuevas tecnologías solo porque están de moda no necesariamente solucionará nuestros problemas.

En general podría decir que quienes buscan ser productivos se preocupan menos por las herramientas y más por el producto mientras que quienes buscan brillar en la comunidad haran lo contrario: estar al grito de la moda en tecnologías aun cuando no signifique algo laboralmente hablando. Ambos buscan reconocimiento, los primeros de sus clientes y usuarios, los otros de sus propios colegas. Los primeros son relevantes para quien usa el software, los segundos no tanto.

La generación Github

Una de las cosas mas espectaculares que le ha sucedido al gremio de desarrolladores es github y el trabajo en colaboración por medio de Internet ya que propicia inovación sin lugar a duda. Como hub de desarrollo, camaradería y aprendizaje es una plataforma excelente, sin embargo esto no necesariamente significa que todo lo que encontramos en ese vasto sitio sea de calidad.

La idea de colaboración open source no es nueva. Existieron sitios anteriormente como sourceforge, berlios y otros. Incluso antes de que colaborar y compartir código  por Internet fuera razonablemente posible existieron comunidades de desarrollo abiertas por medio de mailing lists, canales de IRC y simples servidores de FTP.

Es precisamente la comunidad de desarrollo abierta la que más experiencia tiene en este tema, la de la vieja escuela. Una de las razones (ampliamente discutida por expertos en el tema) por las cuales, por ejemplo, muchos productos open source o libres no terminan de “cuajar” es por el protagonismo tanto de sus autores como de sus contribuyentes: cuando el autor original de un producto rechaza un parche por mala calidad, no seguir los lineamientos del proyecto o simplemente porque considera que es un feature que no va de la mano con el objetivo del software era común que dicho contribuyente creara un fork o versión alterna del proyecto, que persiguiera los objetivos del segundo. Esta actitud ha dañado al ecosistema de software open source por años, particularmente al software de escritorio. La razón generalmente era la misma: búsqueda de reconocimiento por encima de buscar solución a un problema.

Esta mentalidad se ha ido pasando de generación en generación, particularmente en github y comunidades aledañas: crear software desde cero porque nosotros creemos que nuestra manera de abordar un problema es mejor.

Si lo vemos desde el punto de vista de un programador que pudiera aportar conocimiento y esfuerzo a un proyecto entonces vemos que ese potencial contribuyente a dicho proyecto duplicará esfuerzos tratando de resolver exactamente el mismo problema. De igual manera, quienes consumen su tecnología tendrán que aprender, de nuevo, otra nueva tecnología y muy seguramente, aun sin dominarla, tendrán que estar pendientes el nuevo chico de la cuadra.

Pareciera que estoy en contra de las comunidades de desarrollo y el open source ¿Cierto?

Un claro ejemplo de como se busca más el reconocimiento que los resultados tangibles es el caso de OpenSSL, componente de software utilizado prácticamente en todos lados, en todo el mundo, necesario para encriptar casi cualquier cosa que utilicemos como usuarios finales o como programadores ¿Cuántos contribuyentes existen? ¿Cuántos forks? Recientemente y a raíz del bug heartbleed los mantenedores del proyecto tuvieron que pedir ayuda financiera, casi como limosna, en un llamado de emergencia por la poca cantidad de recursos con la que cuentan.

¿Por qué tan pocos programadores han contribuido al desarrollo de OpenSSL? Bueno es muy simple, porque no es un producto particularmente inovador, hace lo que debe hacer y lo hace bien, a nadie le interesa tocar en una banda de jazz, todos quieren ser miembro de la banda de pop de moda, o un rockstar. Y así como hacer playback es más fácil también lo es crear un pequeño framework web. Tocar jazz en este caso es una buena metáfora para la cantidad de conocimiento, técnica e inteligencia que requiere diseñar algoritmos de seguridad.

Enfoque y objetivos como solución

Tener un objetivo de la tarea actual, milestones de nuestro proyecto o del producto final como tal es sumamente importante, y para poder trazarlos debemos:

  1. Entender el problema que debemos solucionar
  2. Procurar investigar si hay una manera ya existente de solucionarlo, no reinventar la rueda
  3.  Entregar calidad: ¿Hace mi software lo que el usuario espera que haga?

Creo que la mayoría de las veces perdemos precisamente el enfoque por estar pensando e invirtiendo tiempo en temas auxiliares al objetivo principal, como que framework usar, convenciones de código, entornos de desarrollo, proveedores de cloud hosting, bugtrackers, etc. Estos puntos deben de tratarse como decisión o consecuencia del análisis de los 3 puntos que mencioné arriba y no al revés.

Muchas veces veo a desarrolladores sumamente inteligentes y astutos ansiosos por aplicar alguna nueva librería, lenguaje o metodología sin embargo no tienen ningún problema que solucionar. Es más fácil (y divertido) encontrar desafíos y problemas técnicos para aplicar tecnología que inventar o aprender tecnología nueva por si “algún dia la necesitamos”.

Le llevó años de trabajo a Thomas Alva Edison (y a otro puño) desarrollar un foco con filamentos para solucionar un problema simple: iluminación artificial y llevó otros casi 80 años solucionar un nuevo problema: focos que hicieran uso eficiente de energía. ¿Por qué estamos entonces tan apurados como desarrolladores por solucionar un nuevo problema si aun no hemos solucionado el anterior?

 

Sábado 28 de febrero de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Welcome to the world, little ones!

Welcome to the world, little ones!

Welcome little babies!

Yesterday night, we entered the hospital. Nervous, heavy, and... Well, would we ever be ready? As ready as we could.

A couple of hours later, Alan and Elena Wolf Daichman became individuals on their own right. As is often the case in the case of twins, they were brought to this world after a relatively short preparation (34 weeks, that's about 7.5 months). At 1.820 and 1.980Kg, they are considerably smaller than either of the parents... But we will be working on that!

Regina is recovering from the operation, the babies are under observation. As far as we were told, they seem to be quite healthy, with just minor issues to work on during neonatal care. We are waiting for our doctors to come today and allow us to spend time with them.

And as for us... It's a shocking change to finally see the so long expected babies. We are very very very happy... And the new reality is hard to grasp, to even begin understanding :)

PS- Many people have told me that my blog often errors out under load. I expect it to happen today :) So, if you cannot do it here, there are many other ways to contact us. Use them! :)

Viernes 27 de febrero de 2015

Héctor Daniel Cortés

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

Larga vida y prosperidad.



El actor del inolvidable personaje de Star Trek, Doctor Spock, murió hoy 27 de febrero del 2015 a las 08:40 EST a la edad de 83 años por complicaciones de una enfermedad pulmonar crónica. Larga vida y prosperidad.

La nota original en http://news.slashdot.org/story/15/02/27/1734228/leonard-nimoy-dies-at-83

Otros enlaces: Twitter.

Jueves 26 de febrero de 2015

LogicalBricks Solutions: Ha terminado el soporte para Ruby 1.9.3
Emerson Posadas

Emerson Posadas
toxickore BLOG

PostOps: A Non-Surgical Tale of Software, Fragility, and Reliability

De laggard, pero no es tarde para recuperar el tiempo perdido:

PostOps: A Non-Surgical Tale of Software, Fragility, and Reliability

Si tienen algún tiempo pueden echarle ojo, es muy ameno.

Manuelton 2015

Y bueno al mal paso darle prisa, nuestro buen amigo Manuel Medina, en este momento tiene algunas necesidades económicas que no planeaba tener, léase no le caería mal un apoyo económico,como buen mexicano y como hombre orgulloso aún viviendo en el país del sol naciente, no va a publicitarlo en su blog, probablemente en su momento escribirá en retrospectiva de esto, pero dudo que lo haga en estos días en que lo necesita, por lo tanto y tomándolo como ejemplo vamos a tomarnos la libertad de platicarlo por acá.

Manuel como el mismo lo dice, no está en problemas, pero pronto va a tener que hacer un desembolso fuerte de dinero en los próximos meses, es decir no está muriendo de hambre, sin casa o enfermo, sin embargo un poco de apoyo no le vendría mal, y tal cual muchos disfrutamos de su blog y muchos otros de leerlo en el twitter o de haber cruzado palabra en algún medio de mensajería, no seria mala idea apoyarlo con algo mas que “anímate” y convertirlo en ahí van unos pesos, bueno yenes.

No esta demás decir que el propio Manuel organizo una cosa como esta para apoyar a Omar en 2008, por lo mismo yo creo que es una oportunidad de apoyarlo, en todo caso el mismo ha creado una página de preguntas frecuentes sobre el botón de donación que ha creado en su blog ahí mismo esta el botón de donación y alguna información extra, en fin que los invito a que se den una vuelta por su blog y lean la interesante saga que esta escribiendo y claro para que quienes lo leen en planetalinux no se pregunten que diantres hace aquí una entrada de estas, Manuel es linuxero de tiempo atrás y escribe también sobre programación y cosas muy interesantes para quienes visitan PL.

Domingo 22 de febrero de 2015

Héctor Daniel Cortés

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

2015-02-22 14:23:14 UPDATED: (M6.2) OFF THE COAST OF JALISCO, MEXICO 18.7 -106.8 (82934)

Region: OFF THE COAST OF JALISCO, MEXICO
Geographic coordinates: 18.717N, 106.806W
Magnitude: 6.2
Depth: 10 km
Universal Time (UTC): 22 Feb 2015 14:23:14
Time near the Epicenter: 22 Feb 2015 07:23:15
Local standard time in your area: 22 Feb 2015 08:23:14

Location with respect to nearby cities:
211 km (131 mi) SW of Tomatlan, Mexico
242 km (150 mi) WSW of Cihuatlan, Mexico
264 km (164 mi) W of Manzanillo, Mexico
267 km (166 mi) SW of Puerto Vallarta, Mexico
811 km (503 mi) W of Mexico City, Mexico


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us c000tsak

This is a computer-generated message and has not yet been reviewed by a
seismologist.
For subsequent updates, maps, and technical information, see:
http://earthquake.usgs.gov/earthquakes/eventpage/usc000tsak
or
http://earthquake.usgs.gov/



DISCLAIMER: https://sslearthquake.usgs.gov/ens/help.html?page=help#disclaimer

Jueves 19 de febrero de 2015

Alcance Libre: Fraude con Ex-Cuenta de Mercado Libre

Miércoles 18 de febrero de 2015

César Yáñez Fernández

Escritura a mano, teclados y la devaluación de la tipografía

Algo que me ha llamado la atención por mucho tiempo es la torpeza de nuestros teclados desde un punto de vista tipográfico. Creo que la manera en que las teclas están colocadas puede ser un factor que contribuye a la falta de calidad tipográfica en nuestra escritura diaria y publicación en línea. ¿Cómo se podría solucionar?

Regresando en el tiempo

Antes de la edición por computadora, la mayoría de los libros o revistas publicados eran elaborados por artesanos que tenían las herramientas y habilidades necesarias para reproducir y publicar un texto que cumplía los estándares más altos en legibilidad y tipografía. Mucho de esto tenía que ver con la imprenta y el conocimiento del tipógrafo acerca del idioma y la tipografía. Él o ella sabían que cada caracter en un tipo de letra significaba diferentes cosas así como las diferentes palabras significan diferentes cosas.

Los tipógrafos e impresores tenían acceso a un conjunto de caracteres extenso para ajustar la tipografía de libros y revistas.

La publicación en aquellos días era para producción de información en masa. No era algo que cualquiera podía hacer. Tomaba tiempo, era caro y contenía muchos detalles que tenían que ser cuidadosamente considerados para hacerlo bien.

Lo contrario a la publicación lenta y cara era la escritura a mano. La escritura a mano era rápida, barata y a mi punto de vista era una extensión de la voz humana. Hablábamos cuando nuestro destinatario estaba cerca, y escribíamos cuando estaba lejos. Ya que el propósito de la escritura a mano era imitar la voz, no requería el conjunto de caracteres extendido que la imprenta o el tipógrafo profesional tenían a la mano. En la mayoría de los casos funcionaba bien con únicamente A-Z, a-z y números.

La tipografía y la escritura a mano eran dos cosas que podían vivir juntas ya que no competían entre estas; una era para comunicación rápida e informal, y la otra para una comunicación formal y permanente.

El cruce de caminos

Si miramos a la historia de la máquina de escribir, podremos ver que el propósito de la invención no era para reemplazar o democratizar la impresión o la publicación en maza. Era para reemplazar la escritura a mano en oficinas, la correspondencia formal y la escritura profesional.

[Él] tenía por su gran estudio y dolor y gastos, el inventado y traído a la perfección una máquina artificial o método de impresión o transcripción de letras, una tras de otra, como en la escritura, por lo cual toda la escritura puede ser absortada en papel o pergamino tan claro y exacto tal que no puede ser distinguido de la imprenta, y que dicha máquina o método puede ser de gran uso en asentamientos y registros públicos, la impresión siendo más profunda y más duradera que cualquier otra escritura, y que no se puede borrar o falsificar sin un descubrimiento manifestado. — De la patente de la Máquina de Escribir de Henry Mills, 1714

Había otras patentes solicitadas para dispositivos de tipografía en 1808, 1829 y 1852 pero no ganaron interés público. Alrededor de 1860, la máquina de escribir similar a la que se usaron por muchas décadas fue introducida y ganó popularidad.

Las primeras máquinas de escribir tenían las teclas distribuidas en orden alfabético.

3 5 7 9 N O P Q R S T U V W X Y Z
2 4 6 8 . A B C D E F G H I J K L M

Como se puede ver, solo se tenía de la A a la Z y números en el teclado. Esto muestra que el propósito era el reemplazar la escritura a mano.

Se usaban barras con letras que físicamente “martillaban” las letras en el papel. El problema era que las letras más usadas frecuentemente en esas máquinas de escribir se colocaban muy cerca una de otra lo que resultaba en la obstrucción de las barras y se atoraba el papel.

Alrededor de 1868, Christopher Latham Sholes introdujo el teclado qwerty para prevenir que las barras se atascaran.

Originalmente las teclas se distribuían en orden alfabético, lo que causaba obstrucciones frecuentes de las partes móviles. Sholes redistribuyó las teclas para que las letras más usadas frecuentemente estuvieran dispersas para minimizar el atascado. Obtuvo una patente por su distribución del teclado que se conoció como qwerty y se volvió el teclado us standard 101. — Comparación de teclados QWERTY y DVORAK

Esto fue un mejoramiento enorme desde el punto de vista técnico, pero eso era todo, una solución a un problema técnico. La distribución qwerty hizo que el que teclado fuera más lento y forzaba al usuario a mover los dedos de una manera no natural y de maneras raras de teclear sin atascar las barras. Pero no mejoró la situación del escritor para nada.

En 1878, la distribución qwerty se asentó a como es en la actualidad.

1 2 3 4 5 6 7 8 9 0 - =
Q W E R T Y U I O P [ ] \
A S D F G H J K L ; '
Z X C V B N M , . /

En 1930, la máquina de escribir eléctrica fue inventada y la más popular fue IBM Selectrics, que usaba una esfera para imprimir las letras en el papel.

Sabían poco en aquellos tiempos acerca de la transformación que venía sobre la impresión y publicación digital. Si hubieran sabido podrían haber tomado decisiones muy diferentes.

Con la invención de la esfera para mecanografiar y la máquina de escribir eléctrica pudimos ver dos cosas:

Primero, ya que las barras estaban fuera de la ecuación era posible reacomodar las teclas en cualquier forma que beneficiaría a los que tecleaban y en 1936, el Dr. August Dvorak inventó el teclado DVORAK.

; , . P Y F G C R L
A O E U I D H T N S
Z Q J K X B M W V _

El teclado Dvorak acomodó las teclas para que las letras más usadas frecuentemente estuvieran distribuidas cerca de los dedos más fuertes de los que tecleaban. Esto fue muy bueno para los mecanógrafos, ya que aumentó la velocidad de la mecanografía y era más placentero de usar. Desafortunadamente, el teclado Dvorak no ganó su momento y el teclado QWERTY se volvió la distribución estándar.

Segundo, el juego de caracteres se pudo haber extendido para parecerse mejor a la variedad en juego de caracteres que se usaba con las imprentas y los tipógrafos profesionales. Pero, al igual que con la máquina de escribir original, la máquina de escribir eléctrica no fue diseñada para competir con la imprenta, la producción en masa o la publicación a gran escala, por lo que era natural seguir con el teclado existente de las máquinas de escribir originales.

La única extensión al juego de caracteres fue la introducción permanente de la tecla SHIFT. Era usada para agregar caracteres al teclado. Vemos caracteres alternos agregados a las teclas numéricas; [ ] @ # $ % & * ( ) ” ‘, por ejemplo.

No he encontrado información de por qué esos caracteres fueron elegidos en favor de otros, que desde el punto de vista tipográfico, son más valiosos. Pero desde que las máquinas de escribir se usaban en oficinas, la comunicación formal, acuerdos, documentos financieros y demás, eran los que más necesitaban esos caracteres.

Desde que el teclado QWERTY extendido se volvió un estándar, significó que las personas empezaran a usar lo que estaba disponible en la máquina de escribir para tipografiar su texto. Aunque las comillas y los signos de interrogación eran tipográficamente incorrectos.

Lo mismo pasó con muchos otros caracteres tipográficamente importantes como el guion medio largo — y la elipsis … por ejemplo. Ya que inicialmente no estaban disponibles, y después en los teclados de computadoras, casi inexistentes, simplemente se olvidaron.

El resultado de la tipografía en la actualidad

La máquina de escribir y la computadora fueron introducidos a través de una cadena de invenciones y patentes que empezaron a reemplazar la escritura a mano. Estas no competían con la impresión tradicional y la publicación, pero en retrospectiva, era muy obvio que el camino de la máquina de escribir iba a liderar la invención de las máquinas de duplicación en masa como el mimeógrafo o la fotocopiadora. Aunque esto es bueno, porque democratizó la comunicación en masa y la publicación que cualquiera puede hacer, casi sin mayor costo, publicar sus propios libros, blogs, revistas o cualquier cosa que puedan imaginar.

La única cosa que puede molestar, es que aún tenemos herramientas tipográficas demasiado especializadas para hacerlo.

Sorprendentemente muchos diseñadores, editores y desarrolladores que gastan la mayoría de su tiempo trabajando con texto y copiado, tienen muy poco o nada de conocimiento sobre las implicaciones del lenguaje con los diferentes juegos de caracteres que usan.

La evolución de la escritura a mano a la mecanografía al teclado puede ser una de las causas de la falta del entendimiento tipográfico en la actualidad.

Así que … ¿Hay algo por hacer? Bueno, el teclado QWERTY no va a irse. Puede haber algunos casos extremos de redistribuir las teclas en el teclado que puedan proveer una solución a corto plazo (o comprar un teclado DVORAK). Pero una solución a largo plazo puede ser el construir un sistema tipográfico dentro del software (que hay algunos que ya existen a un costo de uso muy elevado). La introducción del formato OpenType en gran escala dará acceso público a una variedad de caracteres que los tipógrafos profesionales tenían en sus días. Se necesita continuar empujando las características de OpenType en navegadores y otro software, y una vez hecho se habrá pasado un gran camino. Pero aún no se ha llegado, así que mientras tanto también es igualmente importante continuar con la construcción de otras herramientas como OpenTypography y LaTeX. Estas herramientas, presionarán sobre los desarrolladores de navegadores y mantener la discusión.

Emerson Posadas

Emerson Posadas
toxickore BLOG

Primeras pruebas con chef

Dado que voy a necesitar de una manera sencilla de configurar algunos ambientes e instalar sus respectivos paquetes, anduve rascandole un poco para encontrar la manera menos dolorosa de hacerlo. Hubiera podido hacer algunos scripts con bash o perl, pero si quiero aprender algo que me sirve técnicamente en un futuro y además de eso no me absorba tanto tiempo encontré que chef podría solucionarme este particular problema.

Con chef se definen recetas de modo que al aplicar una receta, se logra instalar alguna aplicación en el orden en el que lo definimos, digamos:


  1. Instala un servidor web
  2. Habilita el servidor web al momento de arrancar el equipo
  3. Configura el archivo /var/www/index.html con el contenido de /var/usr/my_index.html
  4. Configura httpd.conf con el contenido de /var/usr/my_httpd.conf
  5. etc.
De modo que no se pierde tiempo en hacer un script y no se diga en cada una de las excepciones entre cada servidor, en caso de tratarse de un servidor web, uno de DB, otro de archivos, cada uno son su perfil específico.

El gran pero que he encontrado con chef en mi caso particular es el siguiente: chef utiliza un programa llamado ohai que obtiene muchas de las características del sistema, cpu, usuarios, grupos, uptime, parámetros del kernel y otros. Dado que mi equipo de pruebas está ligado a un servidor LDAP, por alguna razón ohai se está trayendo todos los grupos de LDAP, generando así un output como de 7 a 8MBs. Al momento de hacer un bootstrap, el cual a su vez llama a ohai, el servidor me niega el output dado que es demasiado grande:

"ERROR: 413 "Request Entity Too Large"

Estuve rascandole en irc.freenode.net en #chef, en la documentación, así como en el ticket https://tickets.opscode.com/browse/CHEF-4912, y la solución ha sido que vaya y edite un archivo específico para deshabilitar un plugin, el cual no deshabilita la consulta de grupos y usuarios. De modo que sin solución y sin afán de estar perdiendo mas tiempo en el tema, mejor brincaré a puppet, que por cierto he leído supera por mucho a chef. 

Martes 17 de febrero de 2015

Renich Bon Ciric

El dir-foss va creciendo

Que gusto me dá que esté creciendo el proyecto de dir-foss. La gente de México ha estado colaborando bastante para hacer el proyecto de fiar y demás.

Nos faltan algunas cosas, todavía. Por ejemplo:

  • Hay que hacerlo más bonito.
  • Hay que seguir agregando gente.
  • Hay que escribir algunas pruebillas unitarias.

Es un trabajo en progreso pero, la neta, ahí la llevamos.

Muchas gracias a todos los que han colaborado. Han ayudado bastante. Este directorio es el primer paso para unificar a las organizaciones alineadas con el FOSS de México. Una vez que sepamos qué hay, será más fácil establecer canales de comunicación y organizarnos.

Muchas gracias a todos y sigamos con el proyecto.

Viernes 13 de febrero de 2015

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Novedades de Inkscape 0.91

Hace algunas semanas se anunció el lanzamiento de Inkscape en su versión 0.91 que incluye muchas correcciones a mas de 700 errores o bugs que entre muchas cosas mejorar el rendimiento y la estabilidad de esta grandiosa aplicación y aquí te muestro algunas de las nuevas características de esta versión en video.
Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como instalar Inkscape 0.91

Inkscape en su versión 0.91 que incluye muchas correcciones a mas de 700 errores o bugs que entre muchas cosas mejorar el rendimiento y la estabilidad de esta grandiosa aplicación. Aquí te muestro como instalar Inkscape 0.91 en Ubuntu y Linux Mint
Alex Callejas

RetroPie: Contruyendo una consola retro

12nintendo-web-superJumbo

I don’t like all the attention. I think it’s better to let my work do the talking.

No me gusta toda la atención. Creo que es mejor dejar que mi trabajo hable por mí.

Shigeru Miyamoto (Entrevista en DigitalTrends. 2006)

En días pasados, el buen amigo Dragón, me equipó con una Raspberry Pi, y me dí a la tarea de investigar varios proyectos interesantes que se pueden desarrollar con este hardware tan versátil. El que más llamo mi atención, además de satisfacer una necesidad geek recién adquirida, fue construir una consola de videojuegos retro.

En este post quiero compartirles como la construí. El hardware que utilice es:

Raspberry Pi 1 B+ TP-LINK Wireless Nano USB Adapter SanDisk Ultra microSDHC SNES Retro USB Super Nintendo Controller Charge cable Raspberry Pi 1 B+ Ensamblado 1 Ensamblado 2

Después de ensamblar el hardware, descargue la imagen de Raspbian y la instale en la microSD con el ARM installer de Fedora:

Screenshot from 2015-02-11 22:38:54

Al encender la Raspberry, se ejecuta el raspi-config, donde debemos modificar la configuración:

13

  • Expand Filesystem [Para que utilice los 8 Gb de la MicroSD]
  • Change User Password [Del usuario Pi]
  • Internationalisation Options [Modificar Teclado y zona horaria]
  • Advanced Options
    • SSH [Habilitar]
    • Hostname [Cambiar]
    • Memory Split [Modificar a 128 o 192]

Al seleccionar Finish, la raspberry se reiniciará. Después del reinicio, conectada a Internet vía Ethernet, actualizamos el firmware de la Pi:

root@heimdall:~# rpi-update 

Y posteriormente los paquetes:

root@heimdall:~# apt-get update
root@heimdall:~# apt-get upgrade

Después del reinicio, validamos que arranque correctamente el modo gráfico:

root@heimdall:~# startx

13-1

Al conectar la tarjeta wireless, no la reconocía, googleando un poco, encontré como instalar la tarjeta:

Descargar el driver más actual, siguiendo este post para ubicar el que le corresponde conforme la versión que tengamos, en mi caso:

root@heimdall:~# uname -a
Linux heimdall 3.18.5+ #744 PREEMPT Fri Jan 30 18:19:07 GMT 2015 armv6l GNU/Linux
root@heimdall:~#

En el post encontré el comentario acerca de la versión 3.18.5+ que  tengo, donde, para descargar la versión correspondiente había que ejecutar:

root@heimdall:~# wget https://github.com/lwfinger/rtl8188eu/raw/c83976d1dfb4793893158461430261562b3a5bf0/rtl8188eufw.bin -O /lib/firmware/rtlwifi/rtl8188eufw.bin

Y después de reiniciar, la tarjeta es funcional y se puede configurar con wpa_cli:

root@heimdall:~# wpa_cli 
...
Selected interface 'wlan0'

Interactive mode

> scan
OK
<3>CTRL-EVENT-SCAN-RESULTS 
> scan_results
bssid / frequency / signal level / flags / ssid
20:73:85:24:e2:a0 2412 46 [WPA2-PSK-CCMP][WPS][ESS] wifi_local 
c0:a5:62:7a:68:c0 2437 0 [WPA2-PSK-CCMP][WPS][ESS] ARRIS-76C3
0c:f8:96:29:f0:b0 2442 0 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ARRIS-F030
> quit
root@heimdall:~#

Con esta info, generamos el archivo que contenga la configuración de nuestra red:

root@heimdall:~# vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
	ssid="wifi_local"
	psk="password"
	proto=RSN
	key_mgmt=WPA-PSK
	pairwise=CCMP
	auth_alg=OPEN
}
root@heimdall:~#

Si queremos agregar otra red, como la del trabajo, por ejemplo, podemos editar este mismo archivo, agregando las líneas correspondientes de la red deseada:

network={
	ssid="wifi_chamba"
	psk="password_chamba"
	proto=RSN
	key_mgmt=WPA-PSK
	pairwise=CCMP
	auth_alg=OPEN
}

Y configuramos la conexión automática al arranque, editando el archivo /etc/network/interfaces, agregando al principio del archivo la línea:

auto wlan0

Al final del mismo archivo, agregamos:

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Al reiniciar, debe conectarse automáticamente a nuestra red inalámbrica, lo comprobamos con wpa_client:

root@heimdall:~# wpa_cli 
...
Selected interface 'wlan0'

Interactive mode

> status
bssid=20:73:85:24:e2:a0
ssid=wifi_local 
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.0.11
address=e8:de:27:a5:44:fb
> quit
root@heimdall:~#

Con la wireless funcional, iniciamos la configuración de la RetroPie, para lo cual opte por utilizar el método de la wiki del proyecto en github; entonces, primeramente, instalamos git y sus dependencias:

root@heimdall:~# apt-get install -y git dialog

Con el usuario pi, iniciamos la instalación de RetroPie:

pi@heimdall ~ $ git clone --depth=1 git://github.com/petrockblog/RetroPie-Setup.git
pi@heimdall ~ $ cd RetroPie-Setup
pi@heimdall ~ $ chmod +x retropie_setup.sh
pi@heimdall ~ $ sudo ./retropie_setup.sh

Al terminar la instalación/configuración, nos creará varios directorios dentro del directorio $HOME/RetroPie:

pi@heimdall ~ $ ls RetroPie/*
RetroPie/BIOS:
CARTS.SHA fast.bin gles2n64rom.conf MSX2EXT.ROM MSX2.ROM PAINTER.ROM system.bin
CYRILLIC.FNT FMPAC16.ROM ITALIC.FNT MSX2PEXT.ROM MSXDOS2.ROM RS232.ROM
DISK.ROM FMPAC.ROM KANJI.ROM MSX2P.ROM MSX.ROM skip.bin

RetroPie/roms:
amiga gamegear mame-samples pc snes
amstradcpc gamegear-osmose mastersystem pcengine snes-pisnes
apple2 gb mastersystem-osmose pcengine-libretro snes-snes9xrpi
atari2600-libretro gba megadrive ports vectrex
atari2600-stella gbc megadrive-dgen psx zmachine
atari800 intellivision msx quake3 zxspectrum
atarilynx macintosh n64 scummvm zxspectrum-fbzx
atariststefalcon mame n64-mupen64plus sega32x
c64 mame-advmame neogeo sega32x-dgen
fba mame-artwork neogeo-gngeopi segacd
fba-libretro mame-libretro nes segacd-dgen
pi@heimdall ~ $

Después de reiniciar la Pi, al hacer login, nos muestra el inicio característico de RetroPie:

Retropie Console

Los ROM’s de los juegos hay que transferirlos por SSH al directorio correspondiente de la consola, por ejemplo:

[alex.callejas@isengard retropie]$ scp Super_Mario_Bros.3.nes  pi@192.168.0.9:/home/pi/RetroPie/roms/nes/

Buscando un poco se pueden encontrar nuestros juegos predilectos ;-)

Para arrancar la consola Retropie, ejecutamos:

pi@heimdall ~ $ emulationstation

La primera vez, nos pedirá configurar el control que deseemos usar y después de eso ya podemos jugar en la consola.

Para mayor información, consulten la wiki del proyecto, acerca de roms, emulación de plataformas, configuración de controles, etc.

Aquí la galería con la RetroPie en funciones:

RetroPie Consola RetroPie emulationstation NES Roms Super Mario Bros 3 Super Mario Bros 3 Super Mario Bros 3 Super Mario Bros 3 emulationstation

Próximamente estaré probando el nuevo modelo, la Raspberry Pi 2 B+, para poder emular Nintendo 64 como se debe:

Ver en YouTube

Espero se diviertan… :-)

Alcance Libre: Liberada la versión GuarangoRadio 0.4

Martes 10 de febrero de 2015

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Encontrando números primos grandes con approach matemático-computacional

Si estás de un smartphone no se verán los símbolos, probablemente quieras verlos así que haz click aquí

Recientemente me vi en la necesidad de encontrar algunos números primos grandes de la forma $latex (3*8^n)-1$ por una cuestión de un problema de geometría aritmética y primality testing, quiénes creo que se podrían interesar en esto fueron en Facebook Esteban Gutierrez y Manuel López Michelone quiénes comentaron sobre esto, un análisis rápido te dice que ese número es primo para $latex n\in \lbrace 1,2,6,72,1092,5687 \rbrace$ pero otro análisis no tan rápido que hice fue para descubrir $latex n=17129$, estos número para el ojo inocente parecerían inofensivos, pero para $latex n=17129$ nos encontramos con un número de 16,000 dígitos aproximadamente, y ahora mi workstation está checando $latex >n=35000$ que son como 32,000 dígitos decimales, es decir 105,000 bits, tardándose aproximadamente 30 minutos por cada thread (hice 32 POSIX-threads) entonces me arroja aproximadamente 32 resultados cada media hora, y el tiempo sube por cada iteración logarítmicamente, así que si sigo así pronto comenzará a tardar horas, el código lo voy a publicar ahorita, así que encontrarán las ligas al final de este post para que lo corra cualquier linuxero, o mejor decir... "POSIXERO" ya que toda el api que uso al final es POSIX compliant y para manejar números grandes y hacer aritmética uso BN  (Bignum) de OpenSSL que considero es lo más rápido ya que se usa en la industria, el código detecta tus procesadores y usa TODOS, así que tomalo en cuenta con el nice, tiene macros para funcionar en OSX (Apple) ya que pthread_set_affinity_np() y CPU_SET funcionan diferente.

La pregunta matemática sería:

¿Existen una cantidad infinita de números primos de esta forma?


Ahora explicaré cómo lo hice para que sea lo más óptimo que se me pudo ocurrir.

1. Construir número optimamente

$latex (3*8^n)-1$ lo podemos fabricar en binario en vez de calcularlo, con esto nos evitamos muchos ciclos del procesador


Por un lado tenemos que $latex 8^n=2^{3n}$  y $latex 2^m=1000...000B$ con $latex m$ $latex 0$'s eso significa que $latex 8^n$ tiene $latex 3n$ ceros y un $latex 1$ al principio, después multiplicar por $latex 3$ es lo mismo que sumar $latex 3$ veces $latex 1000...000B$ el cual será el número $latex 11000...000B$ con $latex 3n$ ceros y restar $latex 1$ será negar todos los ceros y el segundo $latex 1$ por lo que va a quedar    $latex (3*8^n)-1=10111...111B$   donde el número de $latex 1$'s menos significativos es $latex 3n$ , con esto ya no tenemos que calcular exponenciación que es muy costosa.

2. Ignorar números que nos harán perder el tiempo

Sucede MUY frecuentemente que $latex (3*8^n)-1$ es múltiplo de $latex 5$ , esto es fácil verlo
ya que si $latex 3*8^n$ termina en $latex 6$ o $latex 1$ entonces $latex (3*8^n)-1$ es múltiplo de $latex 5$, pero no puede terminar en $latex 1$ porque $latex 3*8^n$ es par, y para que termine en $latex 6$ como $latex 8^n$ termina en $latex 8,4,2,6,8,4,2,6,8,...$ (en ese orden comenzando con n=1) nos interesa saber cuándo $latex 8^n$ termina en $latex 2$ para que $latex 3*8^n$ termine en $latex 6$ y por consiguiente $latex (3*8^n)-1$ sea múltiplo de $latex 5$.

Un chequeo rápido y respaldado por la propiedad inductiva en los número naturales sobre $latex n$ tenemos que $latex 8^n$ termina en $latex 2$ si $latex n=3,7,11,15$ es decir si $latex n=4t-1$ y más computacionalmente si $latex n\equiv 3 \mod 4$ o más humano "si $latex n-3$ es múltiplo de $latex 4$" entonces esto nos dice que podemos eliminar automáticamente 25% de todos los exponentes al checar $latex (3*8^n)-1$ ya que serán múltiplos de $latex 5$

3. Optimizar test de primalidad y utilizar números más familiares para una computadora

Una vez construido el número, y filtrados los exponentes que hacen trivialmente compuesto al número, necesitamos ver que lo que tenemos en efecto sea un número primo.

Para hacer esto nos auxiliaremos en el pequeño teorema de Fermat el cual lo escribo diferente a Fermat para que se entienda dice:

Teorema de Fermat
Si $latex p$ es primo y $latex mcd(p,a)=1$ $latex \Rightarrow$ $latex a^p - a$ es múltiplo de $latex p$

Equivalente

Si $latex p$ es primo y $latex mcd(p,a)=1$ $latex \Rightarrow$ $latex a^{p-1} \equiv 1 \bmod p$

Esto es lo mejor que tenemos y lo peor es que existe la posibilidad de un "falso positivo"
ya que el teorema aquí ya supone que $latex p$ es primo, es decir estamos checando una propiedad que tiene un número primo siempre, pero podría tenerla otro número también ya que el teorema no es un "si y sólo sí" $latex \Leftrightarrow$ , pero para nuestra fortuna, los números que cumplen la propiedad de Fermat y no son primos son "strong pseudo-primes" , "Fermat Liars" y son raros, de hecho yo prefiero Números de Carmichael quién fue el que los estudió y para nuestra fortuna, no hay tantos y son raros, y si nos toparamos con un "posible primo" , cambiamos la $latex a$ del teorema de Fermat y volvemos a probar y si también se cumple la congruencia, es ya casi un hecho que lo que tenemos es primo.

Pero bueno aún podemos optimizar MÁS , vamos a optimizar el teorema de Fermat, ya que como pueden ver... vamos a tener que elevar un número (en mi caso 2) a la $latex x$ donde $latex x$ es un número de más de 30 mil dígitos, módulo es número de 30 mil dígitos... afortunadamente existen algoritmos para hacer esto en tiempo logarítmico pero aún así es tardado, así que si podemos eliminar más ciclos sería bueno.

Tenemos que $latex x=(3*8^n)-1$ nunca es el número primo $latex 2$ así que podemos suponer que es impar sin ningún problema , por un lado tenemos que $latex a^{x-1} \equiv 1 \bmod x \Leftrightarrow a^{x-1} -1 \equiv 0 \bmod x$ si $latex x$ es primo,  ahora,  $latex x-1=2k$ es decir es par, entonces $latex a^{x-1}-1 = a^{2k}-1 = (a^k -1)(a^k + 1) \equiv 0 \bmod x$ (diferencia de cuadrados), como $latex k=\frac{x-1}{2}$ entonces tenemos  que $latex (a^{\frac{x-1}{2}}-1)(a^{\frac{x-1}{2}}+1) \equiv 0 \bmod x$ lo que significa que para que se cumpla Fermat, tiene que suceder que $latex a^{\frac{x-1}{2}}\equiv 1$ ó $latex -1 \bmod x$ donde $latex -1\equiv x-1 \bmod x$ y con esto reducimos 1 ciclo más en la exponenciación modular que es muy costosa, y usamos $latex a=2$ ya que la exponenciación por 2 sólo es shifting a la izquierda, y usando 2 es hermoso para el algoritmo de exponenciación modular porque la complejidad
$latex o(3kn^{1.585})$ (Multiplicación Karasuba y reducción Montgomery para mod_exp hasta donde sé que usa BN de OpenSSL) esperada baja considerablemente teniendo muchos 0's en su expresión lo que reduce pasos (por eso la $latex o(g[n]))$ y no la $latex O(g[n]))$),  donde $latex 3k$ es el número de bits de $latex x$ (nota aquí que la $latex n$ representa la variable de complejidad y no el exponente), y con eso hemos encontrado los primos que mencioné al principio.

Espero opiniones, source code aquí

Eduardo Ruíz Duarte
twitter: @toorandom

Por Morbo aquí les dejo el más grande que he encontrado, tardó 3 minutos en 1 thread. el cual es $latex (3*8^{17129})-1$ el cual tiene 51,388 bits .


32026423315381466050277915530786335800393823366890894981259290036648161553494994617558347456939958845983080809781780843277379143842511321157300439716316621258468518963948059640880521931439098619360470902127202739263724498727354638561114775469410152002760785630729882805025686247898899808911618409162136670680087277684487378095087887490583145258613139912396900825975697214682477274814156070359889110867811362193110348467393951992492345402056332383241386444305433601523085645869776811285646919087537466338016988423008766811472396005675392998881736916741912590189429331612837325373810452416030933831306867192676710269198951414458490437515264053051733873759760089225408336099284078093859455689148594434825613934497979781554179399202461221624253778300943176804460380502043924360948006335930676276227451427823493631843987911309636588431232386671032205960984005755897461961694816343511105402244581305974926489787769176727530282950574991748927557944410793100152205427813737629867224719749629559616541154571702402344007533555385071678935056951177266337611794442895925353683999178922756717467868112921444235536843814816587988381808259378763566339936575469133821904985670022768297621487042685072937645035397418762898088879966518834617431717616238160653229933317675561804324889864152610093010599664552103022407658203362826225135467122903372349775404454265894274031612183834433948175013815731731843768742711463425691140151259964862216909975488504743216033971257070468582283917816001081411729083210816836157717534301930744010414980424399802727757779067704711766548222713340284109481557728641051371992861091880789035561130198577315011688318769929786698521625431301832480788848469161536541203402106348915684835706031086198583470841503903548287043913330764995542582104558499052946524398642023915418094252775225135009392516216639788849081686649422414816420666524703609315132700144025576596698848194947599190340291543335651139477044320381872498206346425778242974783028340973498127326252357750612335602225108453954123859141624811742539990879575619773935510158546410141054095024924790241748920937072243685910974276469625883231365286281146397745282169224983577575852655025299677792623835241690537842870710528349067292463062257545894983725514137453620357976030228008635191305568411517021214777322011903026859601083554815240483942419038213153965732868181464332882027463093394450027202039114912743513771018541173505400069482374254318086098853632651567194952960545899057851574317234825560325729148747127013748646167661011675033243786731813402924344723783663066299906756407070530905173417647177285662615563890874013554204722859804826783319723895173795270908631147615754087439314263020476261354882689909166015907511051623119212879465867556909644440100632138353562083646966088393779513894343599588950053243809581940981833880678424982730382004328421941439072636800592877300140048085384317222361179303861645355317608391899423839079837905186750572454810469022406363372588948686204901139113299980435620209872045747933603059130972696653746953604532417492903736570671296699105655923819429995588811467179873672852431251204448040809915863163514335540089427059903930482164420870043452193744616222493706789929016164765070777799153453961045107726915484605407070139659338306471198522417856040168525001743452798331018200032516982674115924542207247561332705748100446483628681758170277861279289599258673198185708528378663459785909178096390845218020629053192057841759202932782309711814026123607150376911940748135836533906883752444763036721353897269880408805386078398045366480484951224112577584082675114895273853399084137327610229509328970706333462386945933615225142344089090446121520471032079274695108327379700854569636711391422529411618554876423454704114335714668077792468687086576736091448314825802520170346995090349720987439473605228224586805882340461196462558836145583970685095961833008585739864656363328302986709618224658592061790170440213776071852284933724917317499943202018446618210793294932831097623750797416246378349485892742882242489517967732592792481355599182598675646982241076442612020185511034050637482303910568507849800434585110875928913264144917561728507483873787584779156636819491649231469052768465384827615887208338319057096162237372005045429022403914234522895948109125618822616830011877945500320746041816052399512404707120200149549307311742265568523260555270588190891088146372739404374609532572772005797711009523114710103299579557147452176909952118545682110695102391553837852971501889513088222486987723921202415262209457238513791459203972870093386953048894801746214435712103477352922752928791906655786957516121929344278692478022077201558938914429157414192182892992028571663350174293119784111516284937872290882995528284151163236783105238160116300616254926975435140120536460294894410442753982342285715596774450547688510540950609379199176038748244276624271511162021898465702381739554745903292368453929023793055915664947937134935491330980718736217997428692810379092480664406511201873764269913663647020985956314161402000383439218120742135271552526071319102832539386295104448025731371374719348527163508063409657644511483601027063141269736285818775573658317881599404287364002332020457775029972569361743675624369268068117893284658209857784788545339202829190234333573510725635332114732388415720177686698830992999310828225254838530442450211498457933037804583792899416998160092466471334917779332924285621209393547865615433381452726968988212217944363239160938499077454607308202875136763555648760496640998480414396908114196518199386149585672336456043989071695238312288960081259962428139207487337862311363664235353355741056558668800464140710661218731996083813228309464181512824198473099835338147549021620784938152526403884390915371010004103078720376198785754267231632364475196249423028430296607633185992949806664821669508769010395593020867265768241356602352619944658174291464218293290651513925863985300257092863217772635441366596007681209046202751531928654365904486480637896037524609924560756737487555941653455392568655608180047527596306525572672891104374795309986323951969131709938262130944930794116800383445065248433923593381063574380087876957452711241937139283341986739106521622406898428983948046724085183024676505731621744665800497853221066191995732134553165719198648689135257528892602964255853707448817858352523437863421426102418117389544983206042308860683466269434657391645604299058196009634534319799146142598318942762623665930578733123571550032271299551114477333140685887321380068779030520881901530995711544355981117803607975968517499227648018428854655983473350493961762777920029051990792375397413824629029725111324189020468036861701447775824977257286314969930798035433627722690476216793743259593862757494785251530728454141362285932172007019448646822993271982444067467511428273397361690368237878111466206232963438330207726200080194611554342535208143831928801129239615572665628913222777854337631162257572382401793069038204155873152194648221501879285765056884379731159884546949750078461272929585042335506924134975880741347636497891449035978435021137529059174101402963872488774055561871763906005995523112899268150145675230528838855491232516570415185657872854886290162991073611832895236728088095860213006479909366614293585377658649333618462661081337250855184818048918280095216771124919354017900316074686948848666096561888434199822022864315541727689104723180042673931538717736387214138023901177682380480573112291135017398314529185431570271124814738098761072609216606999034113642258974107978719402360004973983466905902220813267671856406327086943579910433158637016416320152392435734326402865259058273022480138148188943021020384024506061902144679691028765137048209827552145995276652839943973336959426861497791033259830231723590523648498835822832310074455043040176962529346513059433633982359304138147553887485074486267391219132827142128335706403319422134084444025461591415872438467681229654425434633494593254114591133359674756811870187942825563687040492646952300630610982000264767473553602225155962233169190888460758352343896019871785984159532458130055709200931106493045763269590995530937189497063631830785082964079799523231260807321064954724345171548330473944837948003158443648883656429657821491956256504263890572005938508038381077649008380039581215475512164674386754377503163134803108273243041775665133283203530877641413091640784342349226191942006609524592938809381209539984692931251689753565266660069225820293301694201093380755714940533267406389212538472737345389920939638830120261737007640910540478856973611235739472554054732492599378321173386948659654872894505995568627052612775511578286760509286861768721974406755260200693773145017206683870773831784040386709044145859000178680454409827037232424821580153078526733906602635501448413155506471616532000380246549340334416808898434387410310767186271678651657125956330997135514287078037552835249014425147171712299257324870293646478104446879005854587240740583374971104742080118407293376250478292379654435036077102162699707316802765421226043298626360886593259957682295399635161319003729817233310836488878679452228196539460170236747951470219093715468757201428276567346844650203948349754588389125473669983324294915461031237867790032803164212486116627265051342591429261672735326004971500809554757104809198941710250369014929980399788042439092012739807413496910294722408654685906467188445652852679463510111588848714966994012633053111140523488797686496074404075035403032823629222238696411817644483300212092444148203586311124377532534089957832358357772985060452544714354695728594506029245228474290363244268026739022540462324210220094777074046735835916531079392171548754284909023490741942672576020109502086289324949189131229866882158751044579431073510058638580112970399400848012598667869946183555382577600203193941610086977918428282164298924318017243031208758208540683610170253540720335918689087434714730194564568976981777204445322986698373283390613470588168852889384592420528734963148995278955127941606122747080059367271673385322580445859123918237395666091441934678389289512890922392344993878800705035425791621906338667172499766162845453799509129825300440130012452422744967544346925837444005229552678073813615644879122257996997585678579511199674812593313238824764101761027353677321483720341880084732506793520846691464229711911399127721595694352403218401554932929595580588474107092800484536679906402882561774736289011712497922621582368337057910519632385879773294033551311658003580394298225128044755081583957070106775832608786270843701706632218236607363754573786689965846170399266338261414148862926960078807493024676636241821780944571096941752160727585488941102816572881758376655843234513616963008536787097251683013326148161450318083878017455643651554618261609966657262498344963281756373673269194825457120102335098430053525126126433050268325257610505256130462410397690925472067734961438549322304026644954794880041403058925796970496923953825506922111728360818654368875624837101641043903975798923440983174868771201734139437540847299331370990285604146267866907128889409552307757336422613848203004832657228332873404485085691176592522515171277306509004682948792277048468532631094588527157849361469770828540588429898016076708761086577687829794189995013320624862541504004344723993123491408236967534492449686611053666809249670558680801820699727271874125672980265867805587536003161611257602573879807891275145042611104947170932266106091329413068356104455079652564819613052988898269750866283631671361118418750456959898175596314235967214072736323242812555211430437013788931433823216158115282033550906925064093752025137605666797295274782995312635995982152649414790767022457876214220333912735265753742268349688660929764774270479063514369370861571597970542022613471507522362653019693799529912763689666033819469364626587974886877639192115375028613651480474237164637235577738383600508857173217109336525549418866366010878280531299766307762080753760829697569168773083049209471459983537669269749153891301730779513444000645411763110787536847848686483217045928561483760722316598284514141270858839546812101630071239179032956638848984251827861941056826930437770466758033287498621544428023782166008169892843744703334403973198509454469653826983957736270787015555281492220757292858206568385304706192386416009657097062675214919086924216423433082063409209311813441547525266882033030668389112810244305096535177323575119407014819701961205635561634299118583642973681614473867812760938254926147367318960324585092493458614097308885022089170245855482501639479877016629089888620237451538542215959748191190996154872699122004208858124356425712289922851204949134411296871871505058976506035287831568373306323310695563258651236862057327569996796911418552990931961498290680579647629977698154027601737797565070075670436437896473389755670610648189530779671896891147235752619825335341831322815436136245747406230116513486353562601815554701725083110004688886614174662693748369757301146366654631875732233511601846261172108525514149644247885971023535804115307394827643499777188215486121755438199799974589394310076094346886917173548688179362619895779807540625016179427636036019351588403299774724856215195371747489704244497091701187959447220506739300275179481331762578140018563599145933801046835852603238159978903048913593666079142988674647257869565599811291804268574482598601239002812924615248443546197951688030321300760876091551080394357570206848563007174933062203385569468701074474453445181914471929569957932053554812974962824730533730321134981872742052460822465894315329796485647981106519209011070672227096921158799879437700574304848454981802421492286924451866419782080313978740292819201278161706224217725190371403757643026425623517826097611507643390259047590959932320545975284905982569652107326483812384715289985015459922154716822488321689550299263619341284113403436700781861588646420485438604540704027253441622650851675586492071210226532484984591013815461270342863783178683556187689063539912330972619666981892869317909270155819553452716936453676065787164609958676345722669724366516240566266437213654002248924605767519825524209815555833816522154978528910130474700299093317031044211046499872477143240327616617922983636426879957616855080920171289624631399643044926826859302733475147604311961190699077188429263949513452638462772625523478131071010133683582732987635966888334444166545133327777444950723754056816509592356504697117206941441165086849098972184037539794426671844030825833598853963114053824272932540517635711466482759453660721092062140898635239403909145540034949144004169612367460203691048738979781621164967729498632571736651022575485003412715989505615918816044598119400139330568417038172877563337999983250824731788378825900711541921702608288945567177423468793416752642938061266551297859681355577376381057215722300869238366170358650342498421330507990183857556924897965345058959140779958958539450309245045806703864539795637542958885985702987995937529239296860784907341981603308133066795374351314700910108776438125912477798323517153710396153185384044296997650774166602334305686826095686072735997307216804515717706691064830830039274370337931442167526341392075205171338884374247627205672231641873433802187192310055109876868922197752744289994593440764759961686774526545765501935087092519809508864042914699268218861038321472400274858274379127887774609639024710710010354246368036753163679085955338782446481692502409390267529445980102117063380633877777427298698152522242904231639473660870716516498037296215852813557422423482411368716331820788501942447761707086086382920195423676221267291530130105693483847048880634760003583



Lunes 09 de febrero de 2015

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Complejos de de Rham y cohomología (Derivaciones parte 1/4)

Esta es una especie de continuación de un post donde traté de llegar desde el cálculo hasta la cohomología de de Rham utilizando rotacional, divergencia y gradiente (De Rham), pero es hora de hacerlo formalmente, y para ello necesitaremos imaginarnos unos espacios que se llaman diferenciales de Kähler, antes hablé de diferenciales y k-formas diferenciales , pero lo retomaremos, el punto de este post será poder usar la cohomología de de Rham para saber si una curva hiperelíptica sobre un campo finito es segura criptográficamente hablando calculando el número de elementos de su jacobiana el cuál nos dice sobre su seguridad de acuerdo a su factorización, y para esto utilizaremos el teorema del punto fijo de Lefschetz sobre el morfismo de Frobenius en característica 0 p-ádico (lift a $latex \mathbb{Q}_p$) definido en el primer grupo de cohomología de una subálgebra de de Rham, para eso primero veremos como construir toda el álgebra de de Rham usando diferenciales de Kähler.

Pero antes de todo esto necesitamos empezar con los preliminares, que serán el concepto de derivacion en cualquier álgebra.


Derivaciones en un punto

La derivada en dirección de un vector tangente $latex v$ a un punto $latex p\in \mathbb{R}^n$ de una función $latex f\in C^{\infty}(\mathbb{R}^n)$ es un número real:

$latex D_v(f):=\sum_{i=1}^n x_i(v) \frac{\partial f}{\partial x_i}(p)$

Donde $latex x_i$ son las coordenadas en $latex \mathbb{R}^n$ y $latex x_i(v)=v_i$ (i-ésimo componente de $latex v$)

Para todo vector tangente $latex v$ a un punto $latex p\in \mathbb{R}^n$ tenemos que la derivada direccional en $latex p$ nos da un mapeo de espacios vectoriales

$latex D_v:C^{\infty}_p\rightarrow \mathbb{R}$


que manda $latex f$ definida en $latex p$ a un número real, en general la función $latex D_v$ está definida como:

$latex D_v=\sum x_i(v) \frac{\partial}{\partial x^{i}}\mid_p$


Tenemos que $latex \forall v\in T_p(\mathbb{R}^n)$ hay un $latex D_v$ y todos cumplen la regla de Leibniz, es decir $latex D_v(fg)=(D_vf)g(p)+f(p)D_vg$.

Todos los mapeos $latex \mathbb{R}$-lineales $latex D:C^{\infty}_p\rightarrow \mathbb{R}$ que satisfacen la regla de Leibniz son derivaciones en $latex p$  y denotamos a todas las derivaciones en $latex p$ como $latex \mathbb{D}_p(\mathbb{R}^n)$ y de hecho este espacio es un espacio vectorial ya que dos derivaciones sumadas en el mismo punto es una derivación, y como es $latex \mathbb{R}$-lineal no pierden la propiedad de Leibniz al multiplicarlas por un escalar, entonces por ahora ya tenemos que TODAS las derivadas direccionales en $latex p$ son todas las derivadas en $latex p$ por lo que tenemos un mapeo.


$latex \phi:T_p(\mathbb{R}^n)\rightarrow \mathbb{D}_p(\mathbb{R}^n)$
$latex v\mapsto D_v=\sum x_i(v) \frac{\partial}{\partial x^{i}}\mid_p$


Como $latex D_v$ es lineal en $latex v$ , el mapeo $latex \phi$ es un mapeo de espacios vectoriales, faltaría ver qué sucede con las constantes, es decir que si $latex D\in \mathbb{D}_p(\mathbb{R}^n)$ entonces si $latex c\in\mathbb{R}$ entonces $latex D(c)=0$ pero esto se sigue que la linealidad y la regla de Leibniz haciendo que $latex c=1c$.

Función $latex \delta$ de Kronecker

Ésta es una función muy útil para la notación
$latex \delta_j^i=\left\{\begin{array}{11} 1&\mbox{if } i=j\\ 0 & \mbox{if }i \neq j \end{array}\right$

Ahora, tenemos que es fácil demostrar que $latex \phi$ definido previamente es un isomorfismo, es decir $latex T_p(\mathbb{R}^n) \cong \mathbb{D}_p(\mathbb{R}^n)$ ya que si procedemos naturalmente al suponer que $latex D_v=0$ para algún $latex v\in T_p(\mathbb{R}^n)$ entonces $latex 0=D_v(x_j)=\sum_i v^i \frac{\partial}{\partial x_i}\mid_p x_j = \sum_i x_i(v)\delta_i^j = x_j(v)$ y entonces $latex v=0$ lo que nos dice que $latex \phi$ es inyectiva.

Aquí la función $latex \delta$ nos ayuda a eliminar las parciales en las variables que no son iguales al índice con notación más limpia, la suprayectividad la pueden demostrar ustedes.

Lo que sucede aquí es que para todo vector tangente a $latex p$ tenemos una derivación en $latex p$ entonces si ambos son espacios vectoriales, uno de puntos... y otro de derivaciones, lo más natural es identificar sus bases estándares, si $latex \lbrace e_1,e_2,...,e_n \rbrace$ es base de $latex T_p(\mathbb{R}^n)$ entonces bajo este isomorfismo tenemos que:

$latex \phi(e_i) = \sum_i \delta_i^j \frac{\partial}{\partial x_i}\mid_p=\frac{\partial}{\partial x_i}$

Por lo que: 

$latex \bigg \lbrace \frac{\partial}{\partial x_1}\mid _p,..., \frac{\partial}{\partial x_n}\mid_p\bigg\rbrace$ genera al espacio vectorial $latex \mathbb{D}_p(\mathbb{R}^n)$ y es su base estándar.

Con esto nos conviene denotar a los vectores $latex v\in T_p(\mathbb{R}^n)$ tangentes a $latex p$ más explícitamente en términos de la base de $latex \mathbb{D}_p(\mathbb{R}^n)$ los cuales son puntos $latex v=\sum v_i e_i = \sum x_i(v) e_i = (v_1,...,v_n)$ como:

$latex v=\sum v_i \frac{\partial}{\partial x_i}\mid_p$


Campos vectoriales

Si $latex U\subset \mathbb{R}^n$ es un abierto un campo vectorial $latex X$ es una función que asigna a $latex p\in U$ un vector tangente $latex X_p \in T_p(\mathbb{R})^n$, este vector $latex X_p$ en términos de la base $latex \bigg \lbrace \frac{\partial}{\partial x_j}\mid_p \bigg \rbrace$ es:

$latex X_p=\sum a_i(p) \frac{\partial}{\partial x_i}\mid_p = (a_1,...,a_n)$ 

con $latex p\in U$, $latex a_i\in C^\infty(U)$, $latex a_i(p)\in \mathbb{R}$ 

Podemos omitir la $latex p$ en este caso y decir que el campo vectorial $latex X=\sum a_i \partial/\partial x_j$ 

Ejemplos típicos:

$latex X=\frac{-y}{\sqrt{x^2+y^2}}\frac{\partial}{\partial x}+\frac{x}{\sqrt{x^2+y^2}}\frac{\partial}{\partial y}= \bigg ( \frac{-y}{\sqrt{x^2+y^2}},\frac{x}{\sqrt{x^2+y^2}} \bigg )$

y

$latex Z=\frac{x\partial}{\partial x} + \frac{-y\partial}{\partial y}=(x,-y)$

Es importante la notación como punto y la de vector para que noten la base y la importancia del operador $latex \partial/\partial x_i$

Aquí están los dos campos vectoriales dibujados en $latex \mathbb{R}^2\setminus \lbrace 0 \rbrace$ y $latex \mathbb{R}^2$ respectivamente, ustedes vean la definición y el dibujo.





Entonces un campo vectorial $latex X=\sum a_i \partial/\partial x_j$ nos permite "mover" la $latex p\in U\subset \mathbb{R}^n$  , podemos multiplicar cualquier función $latex f\in C^{\infty}(U)$ por un campo vectorial $latex X$ y aún así seguir teniendo un campo vectorial ya que $latex fX=\sum (fa^i)\partial/\partial x_i$ es un campo vectorial $latex C^\infty$ en $latex U$ por lo que podemos sumarlos y multiplicar por 'escalares' del anillo $latex C^\infty(U)$ entonces tenemos que todos los campos vectoriales en $latex U$ los denotamos por $latex \mathfrak{X}(U)$ es un $latex C^\infty(U)-$módulo 


Derivaciones a partir de campos vectoriales

Vamos a definir más derivaciones ahora a partir de esto.

Sea $latex X \in \mathfrak{X}(U)$ con $latex U\subset \mathbb{R}^n$ y sea $latex f\in C^{\infty}(U)$ definimos la función $latex Xf$ en $latex U$ como:

$latex (Xf)(p)=X_pf = \sun a_i(p)\frac{\partial f}{\partial x_i}(p)$   $latex \forall p\in U$

sin la $latex p$ tenemos que la función es $latex Xf=\sum a_i \frac{\partial f}{\partial x_i}$
donde se ve claramente que $latex Xf\in C^\infty(U)$ , por lo que podemos definir a el campo vectorial $latex X$ como una función que mapea funciones a funciones

$latex X:C^{\infty}(U)\rightarrow C^\infty(U)$
$latex f\mapsto Xf$


Como podemos intuirlo este mapeo para todo campo vectorial cumple la regla de Leibniz es decir

$latex X(fg)=(Xf)g+fXg$

Ya que puntualmente se cumplirá la regla de Leibniz si ustedes lo verifican.

Una derivación en el álgebra $latex C^\infty(U)$ sobre  $latex \mathbb{R}$ es un mapeo $latex \mathbb{R}$-lineal
$latex D:C^{\infty}(U)\rightarrow C^{\infty}(U)$ tal que $latex D(ab)=(Da)b+aDb$ donde $latex a,b\in C^{\infty}(U)$ .

Todas las derivaciones de $latex C^{\infty}(U)$ están cerradas bajo suma y multiplicaciones escalar por lo que forma un espacio vectorial el cual lo llamamos $latex Der(C^{\infty}(U))$ y esto funciona con cualquier álgebra, no sólo con las funciones infinito diferenciales, por lo que tenemos el siguiente mapeo


$latex \Phi:\mathfrak{X}(U)\rightarrow Der(C^{\infty}(U))$
$latex X\mapsto [f\mapsto Xf]$

Esto como imaginarán es un isomorfismo lo que quiere decir es que todos los campos vectoriales de un abierto $latex U$ pueden ser identificados con derivaciones del álgebra $latex C^{\infty}(U)$.






Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Agregar repositorios PPA en Debian

Importante: muchos PPA de Launchpad no son compatibles con Debian, debido a que los paquetes incluyen dependencias específicas de Ubuntu. Otros PPA sí funcionan en Debian. Así que, antes de seguir, hay que ser consciente de que incluso instalando el PPA en forma exitosa, es posible que no sea posible instalar los paquetes por problemas de dependencias.

En Debian 7

add-apt-repository es un script específicamente desarrollado para la distribución Ubuntu que permite agregar o quitar repositorios y que importa automáticamente la clave GPG pública necesaria para utilizar estos repositorios.

A partir de Debian 7 es posible utilizar add-apt-repository para añadir PPAs de Launchpad. Sin embargo, hay algunas cosas que hay que saber antes de utilizarlo.

Para agregar un PPA de Launchpad en Debian, al igual que en Ubuntu, hay que utilizar el siguiente comando:

sudo add-apt-repository ppa:tu/ppa

Obviamente, hay que reemplazar ppa:tu/ppa por el PPA que quieras añadir.

Sin embargo, si se agrega un PPA de esta forma, el archivo de origen del PPA utilizará la versión actual de Debian (por ejemplo,”wheezy”). Si ejecutamos un apt-get update vamos a ver un error 404, ya que no existen paquetes para Debian Wheezy en los repositorios PPA de Launchpad. Son todos paquetes armados para diferentes versiones de Ubuntu. ¿Cómo solucionarlo? Simple, hay que cambiar el archivo de origen del PPA e indicarle los paquetes de qué versión de Ubuntu queremos utilizar.

Para conseguir que funcione correctamente, entonces, después de usar el comando “ppa add-apt-repository ppa:tu/ppa”, hay que editar el archivo de origen del PPA que se encuentra en la carpeta /etc/apt/sources.list.d/, y reemplazar la versión de Debian (por ejemplo “wheezy”) con una versión de Ubuntu. Sobre este punto, es recomendable utilizar una versión LTS de Ubuntu.

He aquí un ejemplo. Digamos que añadimos el ppa webupd8team/java en Debian Wheezy utilizando “add-apt-repository:webupd8team/java”. Como resultado de ello, se tiene que haber creado el archivo /etc/apt/sources.list.d/webupd8team-java-wheezy.list. Lo editamos con el siguiente comando:

sudo nano /etc/apt/sources.list.d/webupd8team-java-wheezy.list

Este archivo debería contener dos líneas:

deb http://ppa.launchpad.net/webupd8team/java/ubuntu wheezy main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu wheezy main

Sólo resta cambiar “wheezy” por el nombre clave de la distribución Ubuntu que queramos utilizar. En este caso, por ejemplo, podemos utilizar Trusty, la última versión LTS de Ubuntu. Después de editar el archivo, debería tener este aspecto:

deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main

Finalmente, sólo hay que correr:

sudo apt-get update

Con esto se actualizará la lista de paquetes, ahora teniendo en cuenta los paquetes alojados en los repositorios PPA recién añadidos.

En versiones anteriores de Debian

En versiones anteriores de Debian, si el comando add-apt-repository no está disponible, el repositorio se puede agregar manualmente editando el archivo /etc/apt/sources.list y agregando la clave con apt-key.

Toda esta información se encuentra en el sitio web de Launchpad del PPA, en la sección titulada “Detalles técnicos sobre este PPA”, como se ve en la captura a continuación:

Cómo agregar repositorios PPA en Debian

Primero importamos la clave con el comando apt-key:

sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys EEA14886

Obviamente, hay que reemplazar EEA14886 por la clave del PPA que quieras agregar.

Signing key:
1024R/EEA14886 (What is this?)
Fingerprint:
7B2C3B0889BF5709A105D03AC2518248EEA14886

Como se ve, la clave a utilizar en el comando apt-key se encuentra después de la barra diagonal.

Una vez hecho esto, hay que agregar las líneas deb correspondientes al final del archivo /etc/apt/sources.list.

Aquí el truco reside en elegir en la página web del PPA una versión de Ubuntu “equivalente” a la versión de Debian que estamos usando. Esto generará las direcciones http correspondientes, como se ve en la captura más arriba.

Una vez que tenemos las direcciones http del PPA, podemos utilizar un editor de texto o simplemente ejecutar lo siguiente desde un terminal para agregarlas al final del archivo /etc/apt/sources.list:

echo ‘deb deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main’ >> /etc/apt/sources.list
echo ‘deb deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main’ >> /etc/apt/sources.list

Finalmente, actualizamos el listado de paquetes:

sudo apt-get update

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Canonical y bq presentan Aquaris E4.5 Ubuntu Edition

Canonical y bq acaban de presentar en Londres el Aquaris E4.5 Ubuntu Edition, el primer smartphone con Ubuntu en llegar al mercado.

Ha sido un camino largo. En octubre de 2011 la compañía de Mark Shuttleworth anunciaba sus planes para extender Ubuntu a smartphones, tablets y televisores inteligentes, un movimiento audaz que se presagiaba desde bastante antes y que, a fecha de hoy, todavía está lejos de materializarse. Atrás quedaron Ubuntu for Android, Ubuntu Edge y experimentos varios que en ningún caso han hecho la espera más amena. Pero la espera ha terminado…, o está a punto de hacerlo.

Se confirma, pues, que el primer móvil con Ubuntu será el Aquaris E4.5, que la firma española comercializa actualmente con Android. Se trata de un terminal de serie media dirigido a early adopters, a usuarios entusiastas deseosos de probar nuevas experiencias. Saldrá a la venta la semana que viene, única y exclusivamente a través de la tienda en línea de bq -por lo tanto, se desmiente que Canonical vaya a vender el teléfono desde su página web, como se dijo en su momento-, lo que significa que solo se podrá comprar en la zona euro.

Estas son las características técnicas del Aquaris E4.5 Ubuntu Edition:

  • Pantalla 4,5 pulgadas y resolución de 960×540 píxeles
  • SoC Mediatek Quad Core ARM Cortex A7 a 1.3 GHz
  • 1GB de RAM
  • 8GB de almacenamiento interno
  • Cámara frontal de 5 MP y trasera de 8 MP con autofocus y dual flash que graba vídeo en Full HD (1080p), así como está equipada con sensores BSI de alta calidad y lentes Largan
  • Batería de 2.150 mAh
  • MicroSD
  • Dual SIM
  • 9mm de grosor y 123 gramos de peso

El precio del terminal será de 169,90 euros libre.

Canonical y bq

El más relevante, que esto no es un ‘cutreport’, no se han dedicado a meterle Ubuntu al Aquaris E4.5 sin más, ni se han hecho las cosas aprisa y corriendo: la colaboración entre ambas compañías se comenzó a fraguar hace casi dos años.

Otros datos que les interesará conocer acerca del Aquaris E4.5 Ubuntu Edition son:

      De las actualizaciones de software -sistema operativo y aplicaciones- se encargará Canonical y a falta de tener más detalles -ciclos de lanzamiento, etc-, parece la solución más razonable.
      Nada de híbridos: aunque técnicamente se hubiera podido ofrecer un smartphone con doble sistema, se ha evitado para que prime la experiencia de usuario y por preservar almacenamiento interno. Asimismo, siendo casi iguales los dos modelos, no lo son del todo, y el de Ubuntu prescinde de unos botones que no necesita.
      Como en el Ubuntu de PC, el Ubuntu del Aquaris E4.5 tendrá el acceso root abierto.
      El Aquaris E4.5 no vestirá un Ubuntu de fábrica, como el que se ha podido ver hasta ahora, sino que estará ligeramente modificado para la ocasión. Se refiere a presentación pura y dura, no a que lleve software basura preinstalado, como sucede en Android o iOS.
      Ubuntu tiene apps, sí, pero no se basa por entero en ellas como lo hacen Android o iOS: las scopes son el concepto sobre el que gira la plataforma.
      WhatsApp, la ausencia más comentada. El directivo de Canonical mostró confianza en la eventual llegada del popular servicio de mensajería, y sin embargo la posibilidad se asume remota. La mejor vía sería, sin duda, una scope a tal efecto. Está por verse.
      La que sí está es Telegram, e instalada por defecto.

En relación a los últimos puntos, Cristian Parrino y Rodrigo del Prado reconocieron que el ecosistema de appsde Ubuntu tiene que crecer, pero si en algo estuvieron de acuerdo es en dejar claro que Ubuntu no está “a medias”: es un sistema operativo completo y plenamente funcional, muy por encima de lo que fueron Android o iOS en sus primeras versiones y su gran característica distintiva son las scopes.

¿Y qué son las scopes?, te preguntas. Pues las scopes o “ámbitos” son… aplicaciones, en realidad, entendidas de forma diferente a las apps tradicionales. Simplificando, las scopes son aplicaciones y servicios que se integran y adaptan a Ubuntu de manera natural, se podría decir, y ejemplos hay alrededor de los mil: Google, Facebook, Instagram, Grooveshark, Pocket, Wikipedia… y un larguísimo etcétera.

Sábado 07 de febrero de 2015

Renich Bon Ciric

I’d like my kernel vanilla, please

Yep, vanilla is the flavor of the kernel for me. I like using vanilla in #funtoo. It is nice and it is simple. No patches. No security watch-cha-ma-call-it or anything like that. Just me and that good ‘ol penguin; which deals with my hardware, networking and you-name-it systems.

I like tailoring my kernel to my needs. Ran the glorious:

make localmodconfig

With all my stuff plugged in and turned on. Also, I took the time of browsing the interesting parts of my kernel; checking out the help and all to see if I want those features or not. Specially on my networking section!

Anyway, that hard work is only done a few times (yep, I missed a lot of things the first time). It is fun and, after a while, you end up with a slim kernel that works fine for you.

All this said, I just wanna say: thank you, bitches! To the genkernel-next team. They’re doing great work while enabling me to use btrfs and virtio on my kernel by simplifying the insertion of these modules into my initrd. All I do when I get a kernel src upgrade is:

genkernel --virtio --btrfs --busybox --oldconfig --menuconfig --kernel-config=/etc/kernels/kernel-config-x86_64-3.18.<revision -minus-1> all
boot-update

or, what I just did to install 3.18.6:

genkernel --virtio --btrfs --busybox --oldconfig --menuconfig --kernel-config=/etc/kernels/kernel-config-x86_64-3.18.5 all
boot-update

Funtoo stores my kernel configs in /etc/kernels. This is convenient and genkernel helps me re-build my kernel, taking care of the old configuration and giving me the menuconfig to decide if I wanna tweak it some more or not.

Quite honestly, I don’t think –oldconfig is doing much here. It doesn’t ever ask me what I wanna do with the new stuff. It is supposed to have sane defaults. Maybe I am missing something. If anybody wants to clarify this, I am all eyes.

Oh well, I hope you got an idea of how to maintain your own vanilla kernel config with genkernel-next and Funtoo.

Viernes 06 de febrero de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

On the number of attempts on brute-force login attacks

I would expect brute-force login attacks to be more common. And yes, at some point I got tired of ssh scans, and added rate-limiting firewall rules, even switched the daemon to a nonstandard port... But I have very seldom received an IMAP brute-force attack. I have received countless phishing scams on my users, and I know some of them have bitten because the scammers then use their passwords on my servers to send tons of spam. Activity is clearly atypical.

Anyway, yesterday we got a brute-force attack on IMAP. A very childish atack, attempted from an IP in the largest ISP in Mexico, but using only usernames that would not belong in our culture (mosty English firstnames and some usual service account names).

What I find interesting to see is that each login was attempted a limited (and different) amount of times: Four account names were attempted only once, eight were attempted twice, and so on — following this pattern:

 1 •
 2 ••
 3 ••
 4 •••••
 5 •••••••
 6 ••••••
 7 •••••
 8 ••••••••
 9 •••••••••
10 ••••••••
11 ••••••••
12 ••••••••••
13 •••••••
14 ••••••••••
15 •••••••••
16 ••••••••••••
17 •••••••••••
18 ••••••••••••••
19 •••••••••••••••
20 ••••••••••••
21 ••••••••••••
22 ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

(each dot represents four attempts)

So... What's significant in all this? Very little, if anything at all. But for such a naïve login attack, it's interesting to see the number of attempted passwords per login varies so much. Yes, 273 (over ¼ of the total) did 22 requests, and another 200 were 18 and more. The rest... Fell quite shorter.

In case you want to play with the data, you can grab the list of attempts with the number of requests. I filtered out all other data, as i was basically meaningless. This file is the result of:

  1. $ grep LOGIN /var/log/syslog.1 |
  2. grep FAILED.*201.163.94.42|
  3. awk '{print $7 " " $8}'|
  4. sort|uniq -c

AttachmentSize
logins.txt27.97 KB

Jueves 29 de enero de 2015

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Grim Fandango y reviviendo otros muertos

Leía entre mis noticias hace un par de días sobre el remake de “La Bella y La Bestia” de Disney que protagonizará Emma Wattson y en dicho artículo de titulado “Why Is Disney Trying So Hard To Dilute it’s Brand?” (que traducido sería mas o menos algo así como “¿Por qué Disney se esfuerza en desaparecer su escencia?“) me llama la atención lo siguiente:

News of a Beauty and the Beast remake indicates that the corporation is less and less worried about approving unoriginal products as long as they’re guaranteed moneymakers.

¿Se trata entonces del simple hecho de repetir fórmulas probadas en vez de intentar evolucionar en el medio del entretenimiento? Difiero y estas son mis razones.

Solía haber un tiempo en el que las películas eran buenas, MTV ponía buenos videos musicales y en general la industria del entretenimiento valía la pena.

Lo anterior es uno de los comentarios mas comunes y latosos que escucharemos de cualquier persona pasada de sus 30’s. Es normal, es natural y es parte de la adultéz. Cuestión melancólica más guiada por puro sentimiento que por otra cosa.

A veces cuando me preguntan si he escuchado alguna canción en el radio de alguna nueva (o no tan nueva banda) suelo responder con un inocente y penoso “no, no me suena” y es que hace ya un tiempo que dejé de escuchar radio y simplemente cargo con mi colección de música para todos lados, ya sea en mi carro, en mi teléfono, en mi computadora, etc.

Inicialmente uno pensaría que la razón es porque la “nueva música” no es de mi agrado o me parece de poca calidad, sin embargo conforme he ido analizando el asunto me he dado cuenta que no es que esté cerrado a “nuevas propuestas”, es simplemente que lo que suelo escuchar es demasiado bueno para no escucharlo una y otra vez. Con algunas excepciones, pocas veces un disco nuevo o película contemporánea a marcado mi vida de manera que necesite volver a escucharla o verla de nuevo, sin embargo, eso no necesariamente significa que esta nueva música, o estas nuevas películas sean de mala calidad.

Me gusta pensar que me “he enamorado de los clásicos”, es decir, ¿A quién no le gustó Volver al Futuro? Cuando la primera entrega de esta saga salio al cine yo probablemente estaba en los brazos de mi madre, y mucha de la música que escucho se hizo cuando ni siquiera había nacido, decir que estos elementos artísticos me agradan porque son de mi generación sería hipócrita de mi parte, lo menos.

¿Cómo es que le tomé gusto a Los Beatles, Led Zeppelin, Hall & Oates Star Wars, Back To The Future, etc.? Bueno, porque simplemente son demasiado buenos para pasar desapercibidos. Y habrá quien no guste de estas bandas o de las mencionadas películas, pero para un grueso de la población simplemente son joyas, tesoros, patrimonio y debe compartirse tras generaciones tal como otras expresiones artísticas como la literatura, la pintura, etc. Simplemente se vuelven clásicos.

Dentro de estas expresiones artísticas existe un nicho que comparte, particularmente, la misma crítica que el cine y que la música para quienes lo consumen: Los Videojuegos.

Podría autodeclararme si bien no necesariamente un gran jugador si una persona que creció con la evolución de los mismos; desde NES con juegos clásicos como Mario, Contra, “El de los patos” hasta consolas actuales. Crecí con arcades o “maquinitas” como les decimos en muchos lugares pero en realidad nunca me convertí en fan ni jugador empedernido salvo por honrosas excepciones como Zelda en 64 y algunos otros títulos de SNES.

Una crítica concurrente entre los declarados “videojugadores genuinos” y a los que consideran como simples mortales son la diferencia entre el amor y pasión a los videojuegos e incluso apreciacion del arte dentro de los mismos y como los segundos simplemente lo ven como otro hobbie o pretexto para entretenerse. Los primeros aseguran que un buen videojuego debe contar con una historia que sumerja al jugador lo suficiente para apreciar este como algo más que un programa de entretenimiento. Aquellos que juegan títulos como Call of Duty, FIFA, Grand Theft Auto y otros títulos “AAA” suelen ser rebajados a n00bs.

Lo cierto es que mucha de la generación actual videojugadora simplemente usa lo que tiene a la mano, juega lo que el mercado le vende, no es tan sencillo como con la música o las películas. Uno puede simplemente comprarse un disco (o descargarselo) y escucharlo o ver una película hecha hace 40 años en un formato moderno con un dispositivo actual, no sucede lo mismo con los videojuegos. Estos últimos suelen estar creados para plataformas mas anticuadas y lo que sucede es que, a diferencia de la música o de las películas, un videojuego es una pieza electrónica de software que requiere interacción mas compleja con el dispositivo, es decir, no puedo tomar un cartucho del viejo NES y simplemente jugarlo en un Play Station 4 o un XBox One.

Y precisamente la razón por la cual es más sencillo que una persona contemporánea, joven de edad, adquiera gusto por discos musicales y títulos de películas clásicas más fácilmente. Remasterizar música y video es relativamente sencillo, “portar” un videojuego a nuevas plataformas no lo es.

Podría decir que me considero parte de los videojugadores que prefieren las buenas historias a unos gráficos que me dejen con la boca abierta. Me intriga más una buena ambientación en un videojuego que la facilidad de jugarlo en línea con otras personas. Y no es precisamente porque sea un hipster o melancólico, es porque afortunadamente me tocó crecer con títulos así.

Cuando comencé a jugar videojuegos por voluntad propia fue cuando tuve acceso a una computadora. Si bien mi hermano mayor y yo tuvimos la fortuna de tener consolas desde muy pequeños, nunca me volví “vicioso“. Tampoco solía gastarme el poco dinero extra que tenía en las maquinitas, nunca existió un enamoramiento de mi parte hacia los videojuegos de consolas, pero eso cambió conforme pude jugar en una computadora ya que ahí los juegos solían ser mucho más desarrollados, con historias más ricas, extensas, mapas mejor diseñados y detallados, ambientación, soundtrack, etc. La experiencia simplemente era abismal comparado a las consolas.

Uno de estos juegos que me cautivó fue Grim Fandando. Videojuego que casualmente será relanzado el día de hoy remasterizado. Un juego que se desarrolló hace casi 20 años por Lucasarts, casa desarrolladora de videojuegos del corporativo de George Lucas, ya inexistente por cierto, y que ahora es parte de los derechos de autor de Disney toda vez que esta última adquirió los derechos de mucho de lo que Lucas había creado con anterioridad.

El videojuego cuenta la trama de Manny Calavera, un personaje en el mundo de los muertos, muy al estilo de la reciente película “The Book Of Life“, pero en videojuego. Este, además de contar con una historia que envuelve y una ambientación “noir”, toma elementos de películas de antaño como “Casablanca” y “El halcón maltés“, todos por cierto, considerados clásicos del cine.

Es obvio que Disney sabe crear clásicos y tiene suficiente talento para crear nuevo material, sin embargo, como menciona el artículo que citaba al principio, pareciera que Disney, y muchas otras empresas se han quedado sin ideas y simplemente pretenden retornar a fórmulas probadas o bien comprar los derechos de productos de incluso otras industrias (como Grim Fandango) para generar ganancias, vivir de los refritos pues.

Creo que si bien en parte lo que busca Disney y otras empresas “reiniciando franquicias” es generar dinero, también el hecho de poder distribuir este material considerado clásico, a nuevas generaciones, es una buena jugada.

Tal como se ha estado desempolvando viejos títulos de cine y relanzando con éxito también se está trayendo clásicos de los videojuegos a aquellos que, como yo con algunos discos musicales, ni siquiera habían nacido. Para mi es algo positivo y definitivamente como consumidor me alegra la noticia.

Como dicen por ahí, “Los clásicos nunca pasarán de moda

Extra:

Además de haber sido remasterizado, Grim Fandango puede ser comprado desde Steam para plataformas Mac y Linux!

Martes 27 de enero de 2015

Alex Callejas

Seguridad y Hardening en Servidores Linux

knowledge

Lo mejor que podemos hacer por otro no es sólo compartir con él nuestras riquezas, sino también mostrarle las suyas - Benjamin Disraeli

El pasado Noviembre presente este tema durante un evento, el cuál les quiero compartir, en caso de que no hayan podido asistir:

Ver en YouTube

Además, la tira de Dilbert presentada ese día:

Ver en YouTube

Aquí la presentación.

Espero les sirva…

Sábado 24 de enero de 2015

Lo que no me gusta de nativos digitales

El año que paso lo he discutido bastante en clase y por lo que estuve medio leyendo por ahí varios lo han estado discutiendo en la red, igual menciono los puntos que me parecen importantes.

En más de un momento he expresado que no me gusta la categorización de Nativos Digitales / Inmigrantes Digitales (Prensky 2001[1]), para hablar sobre los estudiantes que tienen facilidad con las TIC, me parece que es un concepto incompleto ya que se basa en un corte por fecha o por decirlo por edad, el cual se sostiene solo en zonas con solvencia económica.

Hablar de que son más inteligentes por estar expuestos a la tecnología también me parece un despropósito, creo que hay dos cosas que especialmente dejan de lado quienes apoyan esta categorización con fiereza, 1) los chicos no solo tienen acceso a la tecnología, tienen mucho tiempo libre para usarla 2) No tienen temor a equivocarse (todavía) por lo mismo a prueba y error descubren como usarla.

Noten que entonces con estos dos puntos no es que nazcan con nuevo chip, que nosotros hayamos nacido con transistores o nuestros padres con bulbos, cada generación dependiendo de su capacidad económica, cultural y otros parámetros ha tenido una exposición diferenciada ya no digamos uso y apropiación a las diferentes tecnologías disponibles.

Pero el punto que más me lleva a pensar sobre esta generalización es que mucha gente mayor que de por si se siente presionada por la velocidad con la que los jóvenes utilizan ahora la tecnología, se siente hoy día más presionados y se auto sabotean al pensar que ellos deben usarla así de rápido, cuando en realidad ellos ya saben mucho más que los otros y si deben aprender cosas, pero no las mismas y en los cursos de formación digital, estamos poniendo énfasis en intenciones distintas, valga el ejemplo que he mencionado en clase y que alude a mi entorno de trabajo.

En algún momento estas materias se sacaron del currículo con la justificación de que todos saben usar una computadora, por lo mismo no hay necesidad de tener una materia que enseñe a usarla, es decir se confundió el medio con el fin, para ponerlo en una metáfora, todos tenemos pies y todos aprendimos a caminar… y no,  yo prefiero ponerlo en, si todos caminamos, pero no por tener pies mañana vamos a participar en un maratón y siquiera terminarlo, hay que aprender a usar las herramientas de las mejores formas o dicho de otra forma no vamos a enseñar a usar la computadora, enseñamos a usar la computadora para hacer cosas escolares y profesionales.

[1] http://www.marcprensky.com/writing/Prensky%20-%20Digital%20Natives,%20Digital%20Immigrants%20-%20Part1.pdf

Viernes 23 de enero de 2015

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

In Defense of the Selfie Stick

From the sophisticated opinion of the trendsetters to Forbes, the Selfie Stick is the recipient of scorn and ridicule.

One of the popular arguments against the Selfie Stick is that you should build the courage to ask a stranger to take a picture of you or your group.

This poses three problems.

First, the courage/imposition problem. Asking a stranger in the street assumes that you will find such a volunteer.

Further, it assumes that the volunteer will have the patience to wait for the perfect shot ("wait, I want the waves breaking" or "Try to get the sign, just on top of me"). And that the volunteer will have the patience to show you the result and take another picture.

Often, the selfista that has amassed the courage to approach a stranger on the street, out of politeness, will just accept the shot as taken. Good or bad.

Except for a few of you (I am looking at you Patrick), most people feel uncomfortable imposing something out of the blue on a stranger.

And out of shyness, will not ask a second stranger for a better shot as long as the first one is within earshot.

I know this.

Second, you might fear for the stranger to either take your precious iPhone 6+ and run, or even worse, that he might sweat all over your beautiful phone and you might need to disinfect it.

Do not pretend like you do not care about this, because I know you do.

Third, and most important, we have the legal aspect.

When you ask someone to take a picture of you, technically, they are the photographer, and they own the copyright of your picture.

This means that they own the rights to the picture and are entitled to copyright protection. The photographer, and, not you, gets to decide on the terms to distribute, redistribute, publish or share the picture with others. Including making copies of it, or most every other thing that you might want to do with those pictures.

You need to explicitly get a license from them, or purchase the rights. Otherwise, ten years from now, you may find yourself facing a copyright lawsuit.

All of a sudden, your backpacking adventure in Europe requires you to pack a stack of legal contracts.

Now your exchange goes from "Can you take a picture of us?" to "Can you take a picture of us, making sure that the church is on the top right corner, and also, I am going to need you to sign this paper".

Using a Selfie Stick may feel awkward, but just like a condom, when properly used, it is the best protection against unwanted surprises.

Jueves 22 de enero de 2015

Curso: Seguridad en el Desarrollo Web

El día 27 de enero participare en escuela.it un proyecto de desarrolloweb.com, dando el tema de Seguridad en Servidores, en el cual se verán las amenazas comunes que puede sufrir un servidor conectado a Internet. Aprenderemos a monitorear los servidores y a protegerlos frente a este tipo de ataques maliciosos evitando que se conviertan en un blanco fácil para cualquier tipo de atacante.

Sí te interesa saber más checa el programa con cursos.

Dinámica de las sesiones
El objetivo general de esta nueva inciativa es capacitar al profesional para incorporar técnicas de Seguridad tanto a su profesión como a sus aplicaciones. A lo largo de tres semanas llevaremos a cabo una sesión diaria de una duración aproximada de 90 minutos + turno de preguntas a cargo de algunos de los mejores profesionales internacionales en el mundo de la seguridad online.

La plataforma elearning donde se imparten las sesiones te permitirá visualizar la exposición y práctica de cada ponente en tu propio equipo con la máxima calidad, además podrás plantear tus dudas en directo mediante chat o mediante audio y disfrutar de un completo set de herramientas con las que sacar el máximo partido con el mínimo esfuerzo.

Todas las sesiones se celebrarán a las 20:30 horas España (península), es decir 13:30 horas de México, 14:30 de Colombia y Perú, o 16:30 horas de Chile y Argentina. Además todas las clases quedarán íntegramente grabadas en vídeo por lo que no tendrás que preocuparte si por cualquier compromiso no puedes asistir a una o a todas las sesiones.

¿A quien se dirige este Congreso?
A todos aquellos desarrollares, diseñadores y administradores de un sitio web que quieran crear o participar en proyectos robustos gracias a un código seguro protegiéndo la información sensible y crítica manejada en una aplicación web.

Más info[+]

Alcance Libre: Elastix MT

Martes 20 de enero de 2015

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

In Defense of the Selfie Stick

From the sophisticated opinion of the trendsetters to Forbes, the Selfie Stick is the recipient of scorn and ridicule.

One of the popular arguments against the Selfie Stick is that you should build the courage to ask a stranger to take a picture of you or your group.

This poses three problems.

First, the courage/imposition problem. Asking a stranger in the street assumes that you will find such a volunteer.

Further, it assumes that the volunteer will have the patience to wait for the perfect shot ("wait, I want the waves breaking" or "Try to get the sign, just on top of me"). And that the volunteer will have the patience to show you the result and take another picture.

Often, the selfista that has amassed the courage to approach a stranger on the street, out of politeness, will just accept the shot as taken. Good or bad.

Except for a few of you (I am looking at you Patrick), most people feel uncomfortable imposing something out of the blue on a stranger.

And out of shyness, will not ask a second stranger for a better shot as long as the first stranger is within earshot.

I know this.

Second, you might fear for the stranger to either take your precious iPhone 6+ and run. Or even worse, that he might sweat all over your beautiful phone and you might need to disinfect it.

Do not pretend like you do not care about this, because I know you do.

Third, and most important, we have the legal aspect.

When you ask someone to take a picture of you, technically, they are the photographer, and they own the copyright of your picture.

This means that they own the rights to the picture and are entitled to copyright protection. The photographer, and not you, gets to decide on the terms to distribute, redistribute, publish or share the picture with others. Including making copies of it, or most every other thing that you might want to do with those pictures.

You need to explicitly get a license from them, or purchase the rights. Otherwise, ten years from now, you may find yourself facing a copyright lawsuit.

All of a sudden, your backpacking adventure in Europe requires you to pack a stack of legal contracts.

Now your exchange goes from "Can you take a picture of us?" to "Can you take a picture of us, making sure that the church is on the top right corner, and also, I am going to need you to sign this paper".

Using a Selfie Stick may feel awkward, but just like a condom, when properly used, it is the best protection against unwanted surprises.

Lo que dejo el año viejo

  • Gallery [1] dejo de ser soportado a mediados del año y me entere justo antes de salir de vacaciones, tengo que buscar un remplazo.
  • Zenphoto no me gusto como remplazo… y creo que tiene un rato que anda descuidado [2]
  • Coppermine no me gusta como remplazo de Gallery [3]
  • Aprendí mucho más de Moodle, Claroline y otros muchos LMS [4] de lo que hubiera deseado y espero también se publique un articulo al respecto.
  • Logre pasar unas vacaciones offline casi por completo.
  • Dormí como no había hecho en un buen rato.
  • Planetalinux se movió lejos, pero ahora ya esta de regreso, geográficamente esta lejos, se encuentra cerca y me involucre un poco más.
  • Aprendí que las prioridades cambian con el tiempo, de primera mano
  • Y que es cierto eso de que hay cosas que no se pagan con dinero, sobre todo las satisfactorias.
  • Todavía queda mucho por hacer este año, mucho por organizar y más por concretar, esperemos como lo he planeado pueda sacar el mejor provecho del mismo.

[1] http://galleryproject.org/time-to-hibernate
[
2] http://www.zenphoto.org/
[3] http://coppermine-gallery.net/
[
4] http://seminarioplataformas.cuaed.unam.mx

Lunes 19 de enero de 2015

Gustavo Rubio

Gustavo Rubio
Ahí vamos

The invented here syndrome

lazywebCuenta la historia que, hace muchos años, cuando los programadores eran hombres y se escribían sus propias rutinas, clases, funciones y módulos, un fenómeno conocido como reutilización de código comenzaba a volverse hip, igual que las canciones de MC Hammer, los trolls y otras cosas espantosas de la epoca. Para entonces, los más viejos, y no por ello sabios, arraigados a sus ortodoxas, anticuadas y puercas formas, sufrían de lo que se le conoce hoy como el “Not Invented Here” syndrome, o el síndrome de “No se hizo aquí” que significa, en breve, solo utilizar recursos propios de la empresa y evitar a toda costa aquellos de externos, palabras más, palabras menos.

The “Not invented here” syndrome

Desarrollar software es una de las disciplinas más complejas que existen. Quien se dedique a esta biznaga lo sabrá, y quienes no probablemente no lo comprenderán. Y es que, como siempre comento, para desarrollar software útil uno debe no solamente entender su propia profesión relacionada con código, lenguajes de programación, lógica, razonamiento, matemáticas, cálculo y demás chunches sino que además debe entender perfectamente bien el negocio para el cual está desarrollando el producto, sería tonto pensar que solo con saber ciencias computacionales podríamos ser útiles a la sociedad. Para realizar un artefacto (virtual, en este caso) que ayude a mejorar el flujo de trabajo, ahorrar tiempo y eficientar procesos de otros sectores laborales es imperante que uno como ingeniero en software, programador o desarrollador entienda perfectamente bien el problema que intenta solucionar, de hecho, y la mayoría de las veces, aun mejor que quien nos paga para solucionar dicho problema.

Habiendo entonces tantos problemas que solucionar, diagramas que diseñar, juntas, análisis, levantamiento de requerimientos, etc. queda, sino mínimo, sí muy limitado tiempo para hacer lo que nos gusta, “tirar código“, como dicen mis colegas, y es por esta razón que conforme la computación se volvió mas accesible y sobre todo el Internet, se propuso, de manera extra oficial, ayudarnos los unos a los otros, como dice por ahí en algunas escrituras.

Verán, el hecho de reutilizar el trabajo de otros no es nada nuevo. Una de mis frases favoritas, y probablemente lo he dicho un millón de veces es aquella de Sir Isaac Newton, aplicable siempre a muchos de mis posts:

If I have seen further than others, it is by standing upon the shoulders of giants

Mi estimado Isaac se refiere al hecho de que, reutilizando y apoyandose en el trabajo de terceros es posible progresar, de alguna manera, el poder invertir nuestro preciado tiempo solucionando otros problemas nos permite tener mejores resultados, es decir, si ya existen motores que nos permiten mover vehículos es más inteligente reutilizar las leyes de la física, comprobadas, de un motor de bobina o de combustión que reinventar uno nuevo basado en alguna otra cosa. “If it works, don’t try to fix it” es el motto de muchos ingenieros.

Sin embargo, a pesar de esta filosofía, existe aún mucho programador decidido a utilizar solamente su código o aquel de sus colegas propios del mismo empleador. Verán, el programador es un animal sumamente ególatra, celoso de su trabajo y posesivo y hará lo que sea para demostrar que sus dancing moves son los mejores, aun cuando, francamente, a nadie le importa.  Lo anterior se conoce como el not invented here syndrome, o el sindrome de “No está hecho aquí” y aunque cada vez se ha vuelto menos común esta actitúd, aun existe, sobre todo en aquellos de la vieja escuela, no dispuestos a aceptar que hay alguien que probablemente lo haya hecho mejor que nosotros.

El sindrome de “No está hecho aquí” se ha desterrado de muchas industrias a lo largo de los años, no solo de la del desarrollo de software, por ejemplo, hace años, cualquier empresa de manufactura de electrónicos probablemente diseñaría la mayoría de los dispositivos, microcontroladores, tarjetas y chips de una televisión, hoy en día esta misma industria probablemente solo ensamble componentes, hechos en diferentes empresas, de diferentes países, globalización le llaman. ¿Por qué? Bueno porque permite una línea de ensamble muy rápida a menores costos lo cual se traduce a mejores ganancias, o sea lana.

Por otra parte, el hecho de tener enfocado a un equipo de trabajo o empresa en un área específica es sumamente redituable ya que especializa a dicho equipo o empresa a ser líder en su sector o ramo específico y sobre todo de invertir tiempo, dinero e investigación en problemas muy particulares mientras que su vecino de nave industrial hace lo mismo; dedicarse a resolver otros problemas muy particulares.

En nuestro estado, Baja California, existen infinidad de fábricas, o maquilas, como se les conoce, que se dedican a mercados verticales muy específicos, por ejemplo, asientos para aviones, marcos para ventanas, cajas de cartón. Si! Uno podría pensar, y bueno ¿Quién estaría interesado en fabricar marcos para ventanas exclusivamente? Bueno, toda la industria de construcción, hotelera, compañías dedicadas a materiales y muebles, etc. El beneficio es que quien se encarga de uno de estos mercados verticales lo hará perfectamente bien con procesos muy eficientados y esto se vuelve una cadena donde al final la suma de esos mercados verticales se traduce a un producto final para el consumidor de calidad.

El software no es muy diferente a estas otras industrias. Una aplicación requiere de infinidad de componentes y módulos que bien nos pueden llevar años terminar, es por ello que también existen casas de desarrollo y empresas dedicadas a vender productos para nosotros, los programadores, que podemos ensamblar y agregar extras para tener una aplicación útil para el consumidor en un tiempo relativamente corto, el tiempo es dinero así que entre más rápido se saque un release es mejor.

Recuerdo mis primeros pininos intentando hacer algo útil con un lenguaje de programación. Era más difícil de lo habitual, tenía uno muy pocas herramientas a la mano y había que hacer casi todo “a pata”. Alguna vez intenté hacer una aplicación de chat, que se conectara a la recién nacida red de Microsoft MSN, sin embargo, conforme pude juntar los requerimientos para mi aplicación en Visual Basic 6, me dí cuenta que inevitablemente tendría que programar un módulo de sockets TCP para realizar dicha comunicación. Logré realizar un pequeño cliente capáz de iniciar sesión y enviar mensajes, nunca recibirlos. Al final decidí que era más complicado de lo que parecía y tiré la toalla, de cualquier modo ni siquiera me pagaban por ello.

Si hubiera tenido el cuerno de la abundancia de componentes de terceros que existen ahora, y que permiten solucionar problemas muy específicos, otro gallo me hubiera cantado.

Los años dorados

Tiempo después de mis intentos (o varios) de aplicaciones, hace unos 15 años ya, el Internet mejoró no solo la comunicación de los mortales, como nos gusta llamarle a los usuarios comunes a nosotros los geeks, sino que además permitió a quienes ya estábamos metidos en esto volvernos más creativos; salas de chat de temas específicos donde podíamos compartir ideas, foros de Internet donde hacer preguntas cuando alguien estaba atorado en alguna parte de su código y claro, componentes o software de terceros, bien sea pagados o descargados, “de prestado” de algún FTP.

Por ejemplo, mi primer lenguaje de programación oficialmente fue Pascal, con Turbo Pascal de Borland. Aplicaciones de consola en Ms-Dos. No había mucha creatividad que explotar. Tiempo después me di cuenta que no llegaría muy lejos con dicha herramienta y me pasé Visual Basic 6 ya que era lo más fácil de tomar para alguien de la epoca, bien era esto, Visual C++ o Delphi. ¿Por qué no pasarme directamente a Delphi, si era la evolución natural de Turbo Pascal, con la misma empresa, y el mismo lenguaje que ya conocía pero orientado a objetos? Bueno, por los componentes!

Aquellos eran tiempos dorados para ambas empresas. Por una parte, Borland tenía con Delphi sus VCL’s que permitían crear interfaces de usuario en poco tiempo y con mucha funcionalidad, Microsoft Visual Basic 6 incluía ya también componentes que encapsulaban elementos de GUI’s que nos llevarían meses pulir en MFC de Visual C++. ¿El resultado? Bolsillos llenos de dinero tanto para ISV’s como para quienes extendían estos componentes y los vendían como 3rd party libraries listas para usarse, justo como tu madre dejó de hacer caldo de pollo para el guisado y comenzó a comprar cubos de Knorr Suiza.

La segunda ronda

Poco duró el gusto a quienes se estancaron desarrollando aplicaciones para el escritorio. Conforme hubo más Internet y velocidades de acceso más rápidas las aplicaciones web se volvieron un estandard, y con ello, las interfaces de usuario basadas en nuevas tecnologías como HTML con CSS para el diseño y Javascript para la interacción con el usuario. Pero así como Delphi, Visual Basic 6 y Microsoft Visual C++ tenían sus pormenores dependiendo la versión del sistema operativo, del compilador y de las librerías así nos pasó con el desarrollo web: diferentes versiones de navegadores suponían (y suponen aun, hasta el día de hoy) problemas de compatibilidad entre el mismo código, es parte de nuestro trabajo sí, pero lo hace más complicado, y nos quita tiempo, es una de esas cosas las cuales optamos por dejarle a alguien mas resolver mientras nosotros nos enfocamos en solucionar los problemas para los cuales nos ha pagado nuestro cliente o nos pagara nuestro usuario final.

Es así como nacen librerías como Dojo Toolkit, jQuery, script.acolo.us y otras que nos permiten encapsular funcionalidad general para varios navegadores y desarrollar interfaces de usuario compatibles entre distintos entornos de una manera fácil.

El web developer vs el programador

Hay quienes onerosamente y con mucho orgullo se hacían llamar web developers. Una especia de nueva profesión nacida del programador de hobbie y con fuertes influencias de aquellos programadores de Visual Basic 6, a quienes seguramente estoy ofendiendo con la comparación, pero veamos, alguien que se dedica al “desarrollo web” suele ser usualmente alguien que:

  • Viene de la industria del diseño o alguna otra área creativa, completamente diferente a la del desarrollo de software
  • Busca maximizar la productividad con el esfuerzo mínimo
  • Entiende conceptos básicos de programación pero no el ciclo de desarrollo de software o teorías computacionales

Por otra parte, quienes se bautizaron en la industria del software con tecnologías como Visual Basic 6:

  • Tendían a ser personas con estudios técnicos con mucha práctica y poca teoría
  • Buscaban entregar productos con la mayor cantidad de características con el esfuerzo mínimo
  • Encapsulaban la mayoría de la carga pesada en el código de sus aplicaciones en componentes de terceros

Siendo que las industrias y sectores ajenos al del software no logran comprender la complejidad del nuestro, es común que buzzwords como web development se vuelvan una moda y se invierta buena cantidad de dinero en ser parte del movimiento, tal como en estos días todo es la nube, para gerentes, CTO’s y otros ejecutivos.

Y como vivimos en la selva y cada quien se tiene que rascar con sus propias uñas, no era raro que quienes ayudados por estos componentes de terceros, content management systems como joomla, drupal o wordpress y conocimientos básicos de programación se hayan vendido como… bueno, web developers.

A diferencia de un web developer, un programador suele conocer los fundamentos del desarrollo de software, metodologías, herramientas y teorías de ciencia computacional que al otro le parecen bien aburridas, pérdida de tiempo o simplemente difíciles de comprender.

Si bien un buen programador e inteligente, usará el trabajo de otros para agilizar su trabajo, conoce el balance entre uso y abuso porque, creanlo o no, como todo en esta vida, es posible abusar también del trabajo de terceros.

El sindrome de “Está hecho aquí

Hace apenas unos días, una situación que ocurrió en el trabajo, me hizo pensar y motivó a escribir este artículo. Era día de release o entrega al cliente, se probó una nueva versión del producto, todo parecía haber funcionado a la perfección tanto en el equipo del desarrollador de frontend encargado de este feature como en la mía al momento de hacer QA, se realizaron pruebas también en el servidor de producción de este feature, todo funcionaba correctamente.

Pasó el fin de semana y recibí un correo de nuestro cliente indicando que uno de los features no funcionaba. Pensé que algo mal habría hecho el cliente ¿Qué podría haber fallado? Es decir, pruebas en todos los entornos se realizaron sin que este feature en especial hubiera fallado.

El lunes al llegar a la oficina probamos el deployment hecho al servidor, efectivamente había un problema en una de las páginas, problema que NO se manifestó cuando inicialmente se hizo el deployment a producción. Después de un par de horas encontramos el problema, problema que fue causado por el framework de UI que utilizamos, AngularJS.

¿Cómo pudo haber pasado esto?

Muy sencillo, a pesar de haber probado el feature A, contra el entorno de producción, y sin problemas, posteriormente se hicieron otras actualizaciones totalmente diferentes al feature A y que de ninguna manera afectaban su funcionamiento, sin embargo hubo un factor diferente, ajeno a nuestro propio código: el script que se corre cada vez que actualizamos realiza un build o empaquetado del frontend por medio de bower:

bower install && bower update

Si, el culpable estaba ahí, no en nuestro código, sino en uno de los (muchos, muchísimos) plugins que utiliza AngularJS, específicamente uno encargado de las rutas de la aplicación.

Una de las veces que se ejecutó este comando, después de haber probado feature A, se actualizó el plugin dejando este feature A, que ya se había probado, con problemas. Es decir, la actualización de código que no controlamos introdujo un problema.

¿Cómo pudimos solucionarlo?

Básicamente tuvimos dos opciones:

  1. Actualizar el plugin, volviendo a ejecutar el comando, pues ya existía una nueva versión con este fix aplicado
  2. Ajustar la versión a una específica dentro de nuestro proyecto, a una que sabemos funciona sin problemas, de manera que bower no actualice nunca el plugin

Y, temporalmente, decidimos aplicar la opción 1, en lo que lograbamos entender realmente el problema y buscar una solución adecuada y de largo plazo.

¿Nos hemos vuelto holgazanes como programadores?

Esta es una pregunta que me hago, y les hago a mis compañeros de trabajo, en repetidas ocasiones. Tal como en algún momento, los programadores de Visual Basic 6 abusaron de los componentes de terceros siento que aun, en pleno 2015, seguimos aplicando las mismas tendencias y malas prácticas, las trajimos del desarrollo de software de aplicaciones de escritorio a las aplicaciones web.

Si bien no estoy en contra de librerías que encapsulan funcionalidad para manipular el DOM entre navegadores, object relational mappers para acceso a base de datos, etc. sí estoy en contra de su abuso.

Alguna vez en uno de mis anteriores empleos, mientras desarrollábamos una aplicación en ASP.Net, uno de mis compañeros, encargado de la parte de UI decidió que era buena idea agregar un DLL como dependencia extra para ahorrarnos trabajo en la generación de cierta parte del código, y, ¿Cuál era esa parte? Un menú, un menú de 5 elementos, una simple lista con 5 enláces para el cual agregamos una dependencia de 1.2Mb solo porque mi colega era demasiado huevón (o inútil) para agregar unas 20 líneas de código HTML y CSS para crear dicho menú pero, oh, nuestro componente incluso tenía un editor visual!

Esta misma aplicación, con esta dependencia contaba además con:

  • jQuery
  • Dojo
  • ASP.Net Ajax Toolkit
  • Otros…

Y esto solo como parte del UI. Podrán imaginarse la aplicación entera, dependencia sobre dependencia, con tiempos de compilación ridículos para lo que debía hacer nuestra aplicación.

La razón por la cual se utilizaron tantos frameworks y librerías es que algunos implementaban features que otros no tenían, es decir, siempre se buscó la manera de complementar la falta de características o plugins de uno con el de otro, pero jamás les pasó por la cabeza la solución mas cercana, obvia y al final del día razón para la cual nos habían contratado: programarlo nosotros mismos.

Hay quienes podrán criticarme y mencionarme términos como DRY, KISS y otros principios de desarrollo y yo les digo: fuimos contratados para programar y resolver problemas.

Es decir, no somos una línea de ensamble, aunque existan empresas que claramente eso quieren y necesitan. Aun, particularmente en entornos donde no necesariamente se vive un ambiente de “maquila de software” se vive un frenesí casi absurdo de dependencia de terceros, donde si utilizamos algo hecho por nosotros esté probablemente mal, porque, ¿sábes? alguien más ya lo hizo en github, pero ¿lo has probado? No! pero no voy a complicarme…

Herramientas como nuget, composer, gems, npm y demás si bien nos han facilitado la vida también nos han vuelto holgazanes, esperando siempre que alguien más resuelva nuestros problemas.

A esta holgazanería la he bautizado como “El sindrome de está hecho aquí”, queda estrictamente prohibido utilizar nuestro código en primer plano de prioridad porque, somos tontos, inferiores y menos inteligentes que cualquier otro indivudo en github.

Las consecuencias de la co-dependencia absurda en tiempos modernos

¿Existen consecuencias de abusar del uso de estos componentes de terceros? Claro! De hecho, todos los extremos son malos, ustedes saben, el ying y el yang.

Una de las cosas que hacen más estables a sistemas como Linux es la filosofía UNIX: cada componente del sistema debe realizar una tarea específica, y realizarla bien. El problema es que que ya no vivimos en tiempos de UNIX cuando los hombres eran hombres, y los programadores programaban. La facilidad y encapsulación de los nuevos lenguajes de programación de muy alto nivel nos han vuelto maquinas ensambladoras y menos pensadores, cuando se desarrollaron la mayoría de las herramientas base de UNIX había otro pensamiento entre el mundo de los ingenieros.

Aun cuando consideramos que cada componente debe realizar una tarea específica y bien hecha y que seguramente quien realizó dicho componente puso empeño en realizarlo con altos estándares de calidad, existen problemas naturales derivados de que quien realizó dichos componentes sufre de un mal común: ser humano. Los humanos no somos perfectos y nos equivocamos así que es muy común que nuestro software contenga bugs o problemas con cada versión, es entendible y natural.

El problema real se asoma cuando, en la búsqueda de volvernos más productivos, nos volvemos consumidores enfermizos del trabajo de otros. Una de las razones por las que más se quejaban los usuarios de aplicaciones a finales de los 90’s y principios de los 2000’s, sobre todo en entornos de Microsoft Windows era la poca calidad y estabilidad de los productos. ¿Adivinen quienes eran los culpables?  DLL’s, librerías de terceros, componentes hechos fuera de casa. Mientras que el fabricante de dicho software esperaba ansiosamente una actualización de dicha librería para solucionar el problema, problema que naturalmente estaría fuera de sus manos resolver pues era código sobre el cual no tenía experiencia, ya habría pasado suficiente tiempo para que tanto el producto como el fabricante fueran tachados como mala calidad, chafa, chino, etc.

No mucho ha cambiado desde entonces ya que solo nos movimos a otras plataformas. He visto aplicaciones web “modernas” utilizar librerías de terceros de una manera abusiva, helpers de bases de datos que agregan megabytes y megabytes a nuestro build solo para realizar algunas pocas validaciones, 35 plugins de node para poder hacer funcionar un pequeño componente de UI en angular.

Tal como los programadores, en su momento, y aun en dias actuales, de C++ y otros lenguajes de mas bajo nivel no temen crear sus propias librerías, frameworks y utilizar componentes de terceros cuando es estrictamente necesario así quienes nos dedicamos a desarrollar aplicaciones web y otras plataformas no deberíamos temer aplicar nuestros conocimientos para crear software inteligente y no solo ensamblarlo, basado en código de otros, código que en cualquier momento puede fallar y del cual no solamente no tenemos el suficiente conocimiento para mantener sino además los recursos.

La colaboración es una de las cosas más extraordinarias que nos ha dado el Internet y las tecnologías distribuidas y hacen nuestro trabajo emocionante e interesante, pero también pensar como solucionar problemas propios y no temer a hacer lo que se supone sabemos hacer es una de las cosas más gratificantes que puede haber, aun cuando podamos pensar que alguien más lo hizo mejor que nosotros. Nunca debemos subestimarnos, pero sobre todo, nunca hay que dejar de sorprendernos a nosotros mismos con lo que podemos hacer individualmente o en un mismo equipo de trabajo.

Y es que colaborar no es un delito pero la mente humana está desarrollada para tomar las mejores decisiones si el sujeto u objetivo en cuestión es uno mismo, ¿Cómo podría siempre, alguien más, decidir la mejor manera de hacer algo?

Existe una anécdota extraída del libro Gabby: A story of courage and hope, de Gabrielle Giffords y Mark Kelly, este último, piloto de la NASA quien llevó varias veces el transbordador allá arriba y esposo de la primera, ex-congresista de EUA y quien recibió un disparo en la cabeza en Arizona hace unos años:

as the doctor described the massively invasive surgery his wife would require, Kelly thought back to the poor decision-making at NASA that had resulted in two fatal accidents. Post-Challenger and -Columbia, NASA set up a conference room to facilitate good decision-making. One wall bears the warning “None of us is as dumb as all of us.”

Determined not to let the medical team march off in lockstep, Kelly gathered all the doctors and residents in a small break room at the hospital. “At NASA, one thing I’ve learned is you can’t ask the space shuttle commander or the flight director or the chief engineer their opinion first. You’ve got to seek out the opinion of the junior people,” said Kelly. So he chose the youngest looking person in the room–an opthamology resident–and asked for her opinion on the injury and procedure. He then went around the room until everyone had had a chance to voice their views. Ultimately, the doctors performed the operation.

Tal como Kelly lo menciona, “None of us is as dumb as all of us” así que quizá, y solo quizá, si de vez en cuando individualizamos nuestro trabajo como ingenieros de una manera objetiva e independiente, de manera que, pensemos en la mejor opción para resolver nuestro propio problema y no el de todos los demás (o el de alguien más en particular) entonces podamos tener mejores resultados. La NASA tomó esta filosofía después de los desastres del columbia y el challenger, no veo porque nosotros como ingenieros en software no podamos aplicarla también… de vez en cuando.

Saludos.

Viernes 16 de enero de 2015

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

OpenStackGDL Meetup Enero 2015

Registrate


Jueves 15 de enero de 2015

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Buscando la Pasión

Recientemente y ante ciertos acontecimientos, me he puesto a pensar el papel que como padres tenemos en la elección de la carrera universitaria de nuestros hijos.

En teoría, la elección es de ellos, sin embargo, en muchas familias, la opinión de los padres o tal vez la tradición familiar los inclina hacia una profesión, padre contador, madre contadora, hijo contador, por mencionar un ejemplo.

Pero, me pregunto, ¿quiénes somos nosotros para definir o acaso influenciar en tan gran decisión a nuestros hijos?

Pues nadie, aun cuando nosotros paguemos la carrera, además, esta influencia puede ser perjudicial para ellos, porque, como siempre he mencionado, lo importante es que ellos encuentren la pasión que los alimente a seguir adelante, la pasión que les permita ser felices estudiando y haciendo lo que les gusta.

De nada sirve un Médico, que no ejerce, porque lo suyo es el baile clásico, se convierte en un mal médico, si es que alguna vez entra a ese mundo.

O peor aún, que tal si ellos no desean una educación universitaria, o si a lo que desean dedicarse no está basado en una licenciatura.

Finalmente es la decisión de ellos, y debemos respetarla, no obligarlos a hacer algo que no quieren.

Lo que si es importante, es ayudarles a encontrar su pasión, algunos lo hacen pronto, otros por desgracia nunca la encuentran y vagan de un oficio a otro.

Domingo 11 de enero de 2015

Farid Bielma

Oportunidades de la Reforma Energética para ingenieros

Recientemente, para un grupo de trabajo de la carrera de ingeniería industrial del Tecnológico de Monterrey, me hacían la pregunta: para ti, que ventajas trae la reforma energética que podamos aprovechar? Es oportuno mencionar, que por definición, costumbre o necesidad, egresados de esta ingeniería se especializan en temas de gestión de la calidad, sin embargo, con la reforma, existen un mundo que oportunidades que podrían aprovechar.

Enumero una lista de áreas de trabajo a los qué egresados de ingenierías podrían especializarse:

- Identificando o creando necesidades en el mercado
- Analizando la cadena de suministro y creando las oportunidades para optimizar algún proceso
- Diseñando y mejorando métodos de trabajo y resolviendo fallas de mercado
- Simular procesos de extracción
- Ayudando a detectar áreas de mejora para la incorporación de tecnología en la producción
- Participación en concursos públicos y/o privados: licitaciones

Viernes 09 de enero de 2015

Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

Vaciar la cola de correo en postfix

Es una de las cosas secillas pero no menos importantes a la hora de administrar un servidor de correo.

Mostrar los correos encolados:
mailq

Eliminar un correo en cola:

postsuper -d queue_id

Ver contenido de un correo:

postcat -q queue_id

Eliminar TODOS los correos en cola:

postsuper -d ALL

Lunes 05 de enero de 2015

Héctor Daniel Cortés

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

Fedora 21 (Twenty One)

Año nuevo (2015), Fedora nuevo (21).

Como ya es bien sabido, en esta ocasión hay tres sabores de Fedora: WorkStation, Server y Cloud. Siempre he dudado si Fedora es una distribución adecuada para servidores. En su lugar prefiero Scientific Linux. En cuanto a la nube... habrá que probrarlo.

Mi workstation (en realidad no es mía, pero la UNAM me la presta) requiere la siguiente instrucción para el proceso de actualización:

# fedup --product=workstation --iso Fedora-Server-DVD-x86_64-21.iso --network 21

Ya ha terminado de descargar los archivos... así que volveré cuando termine la instalación.

Viernes 02 de enero de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Status of the OpenPGP keyring: 1024D is a thing of the past!

Having seen the end of December and the beginning of January, this is the time of year where we say "Happy new year!"

But this is a very interesting new year: We have also went past our much announced deadline for the <2048 bit keys to be removed from the Debian keyrings. And yes, our highly efficient keyring-maint team managed to deliver on the promised time — And, I'd say, with much success. Lets see the numbers — Only before that, refer to Jonathan's mail to debian-devel-announce for further, fuller information.

So, first of all, how do overall numbers look? Just remember, the following are not the number of DDs, just the number of active keys. That is, the holders to the 252 DD and 35 DM keys we removed are still valid Debian Developers/Maintainers, but have to get a new key accepted to perform many of their tasks in the project.

The graph above shows the sharp change between tags 2014.12.31 and 2015.01.01. But my definition of success is that we managed to get the number down to just 252+35=287 from what we had back in August, when we did our DebConf presentation and started the aggressive push: 490 DD keys and 49 DM keys. Since then, 34 DDs requested their retirement, becoming emeritus, and practically all of the rest managed to get their key transition done!

So, lets go again easiest-to-hardest. First, the Non-uploading Debian Developers keyring:

As this is the newest keyring in existence, and is also the smallest one, we were already without <2048 keys since 2011. Nothing to see, move along.

Then, as for the Debian Maintainers:

We did have a sensible migration from weaker to stronger keys, but it was not as sharp as I'd have liked. That makes sense, after all, since DMs have less involvement and compromise in the project in regard to DDs. So, we only processed 15 DM keys since August, which is almost a third of the keys we needed to process to reach the ideal 100% migration.

Now, as for our biggest and oldest keyring, and the one that denotes more project involvement, here is the graph for the uploading Debian Developers:

And yes, here you can see the sharp turn we saw in the second half of this year: By DebConf time, we were happy because the red and yellow lines had just crossed. But we were still sitting at 490 DD keys needing to be migrated. Half of the DD keys (compared to almost a fourth for the DM keys).

I'm almost sure we anticipated in our presentation (I know, I should check the video) that, by January 1st, we would have to retire around 300 keys. And I'm very, very happy and proud that we managed to get the number down to 252.

And, yes, people leave things to the end: We already have some more pending requests in the Request Tracker to introduce new keys for our fellow friends who were disabled. We will be working to make keyring pushes more frequent than our usual monthly uploads until requests go back to a sane level.

So, if everything runs smoothly, this will probably be the last of my posts in this regard. This has been quite an interesting (and exhausting!) experience!

Jueves 01 de enero de 2015

José Oviedo

José Oviedo
oviedo.mx

WordPress: Como actualizar wordpress y plugins sin necesidad de contar con FTP o SFTP

Si en tu servidor web donde tienes instalado worpress no cuentas con una conexión FTP o no la quieres agregar en la configuración de wordpress, pero al momento de quere actualizar cualquier plugin o versión de wordpress te solicita información de tu conexión FTP y te marca el error:

Ha sido imposible conectar con el servidor FTP localhost:21

Existe una solución para que todo este proceso lo haga directamente en los archivos de wordpress, solo se necesita agregar la siguiente linea en el archivo de configuración wp-config.php , lo pueden agregar hasta el final del archivo.

define(‘FS_METHOD’,’direct’);

Y listo!, cuando actualicen, ya no solicitará información de la conexión

Domingo 28 de diciembre de 2014

Por que y cómo hackearon a aede.es

La asociación de editores de diarios españoles, ha sufrido ataques por hackers, estos dejando mensajes “chistosos” o “memes” qué han echo sacar una carcajada a más de uno en su pagina principal, el motivo principal es la Ley de Propiedad Intelectual que ha desplazado a google (news) de españa siendo el primer país en hacer esto (en el mundo mundial):

Deface2

deface- Deface-2

La página de google news ( http://news.google.es/ )  envía a una pagina de soporte la cual especifica el por que:

Lamentamos tener que informarte que Google Noticias ha cerrado en España y que las publicaciones de los editores españoles ya no aparecen en Google Noticias, a raíz de los recientes cambios en la legislación española. Comprendemos que usuarios como tú podáis estar descontentos con esta nueva situación y por ello queremos explicarte las razones por las cuales hemos tomado esta decisión.
..

Tras la aprobación de la reforma de la Ley de Propiedad Intelectual hemos tenido que cerrar el servicio de Google Noticias en España. Esta nueva legislación obliga a cualquier publicación española a cobrar, quiera o no, a servicios como Google Noticias por mostrar el más mínimo fragmento de sus publicaciones. Dado que Google Noticias es un servicio que no genera ingresos (no mostramos publicidad en el sitio web), este nuevo enfoque resulta sencillamente insostenible

Las personas que están inconformes con esta ley han buscado la forma de hacerse notar en las Web con su desacuerdo, el objetivo la web de la a asociación de editores de diarios españoles: “aeda.es”, lo irónico usar google para descubrir por donde atacar:

google dork

 

La tercer pagina que google indexa “Zona Privada” claramente se nota un usuario y contraseña, el cual se deduce que contiene un form con un login para entrar algún panel de administración:

login_aede

Cómo siempre eh dicho el internet es un mar de conocimientos que cualquiera puede pescar lo que quiera y a su conveniencia, al encontrar un formulario cómo este se puede hacer varias pruebas de penetración y una de ellas la más básica poner un ' para saltar algún error:

error_deface

Aquí se puede ver que el mismo error te dice que hay hacer y ya depende de los conocimientos del atacante para poder obtener datos o modificar el sitio web:

sql_injecci

Antes de realizar este post se notifico al webmaster ;-) .

{+ google cierra en españa via abc.}

Jueves 18 de diciembre de 2014

Miguel Barajas

Miguel Barajas
GnuOwned's Blog

Este es un pequeño tutorial que hicimos mi hijo Roberto y yo,...



Este es un pequeño tutorial que hicimos mi hijo Roberto y yo, sobre como construir una prueba de concepto para un panel de juegos estilo Jeopardy o 100 Mexicanos dijeron, con Arduino 2 leds, dos pushdown buttons y 3 resistencias.

Espero les guste :-)

Miércoles 17 de diciembre de 2014

El arte de buscar desde la terminal.

Para la mayoría de los linuxeros de hueso colorado esto es cómo el pan de cada día, el buscar desde la terminal se les hace más efectivo que entrar a una UI, aparte de que se ve más “und3rgr0unD”, existen varios comandos con sus diferentes atributos para poder crear la búsqueda perfecta de aquel archivo o palabra dentro de el, la mayoría opta por find qué es uno de los más conocidos.

find [ruta] [expresion_de_bosqueda] [accion]

Digamos que queremos buscar un archivo que se llama index, en el primer find, solo especifico el nombre con -name, el cual no me arroja un resultado, añado * el cual me buscará en cualquier carpeta dentro de donde este buscando, y ha arrojado unos resultados, en el ultimo especifico la carpeta www/ donde buscar:

root@1337 [/h/bucio]$ find  -name index
root@1337 [/h/bucio]$ find  -name index*
./tmp/webalizer/index.html
./tmp/webalizerftp/index.html
./public_html/index.php
root@1337 [/h/bucio]$ find www/ -name index*
www/index.php
root@1337 [/h/bucio]$

El comando find, tiene la opción ya sea mayúsculas y minúsculas:

root@1337 [/h/bucio]$ find www/ -name index*
www/index.php
root@1337 [/h/bucio]$ find www/ -iname index*
www/InDex.PhP
www/index.php

Podemos hacer uso de expresiones irregulares para la búsqueda:

  • “[0-9]*” #Todo lo que comienza con dígitos
  • “[Oo]*” #Todo lo que comienza con la letra “o” mayúscula o minúscula
  • “[b-f]*.txt” #Todo lo que comienza con una letra entre la b y f y sea un .txt

root@1337 [/h/bucio]$ find www/ -name "[0-9]*"
www/0ejemplo
root@1337 [/h/bucio]$ find www/ -name "[Oo]*"
www/OtroEjeplo
www/oTroEjemplo
root@1337 [/h/bucio]$ find www/ -name "[b-f]*.txt"
www/ejemplo.txt

Realizar una búsqueda de archivos ocultos:

root@1337 [/h/bucio]$ find www/ -name ".*"
www/.htaccess
www/.oculto.jpg
www/.oculto.php
root@1337 [/h/bucio]$ find www/ -name ".*.php"
www/.oculto.php
root@1337 [/h/bucio]$ find www/ -name ".*.jpg"
www/.oculto.jpg

El atributo -user nos puede ayudara buscar los archivos que pertenece a cierto usuario, también existe -perm para buscar por permisos:

root@1337 [/h/bucio]$ find www/ -user bucio
www/
www/.htaccess
www/index.php
www/cgi-bin
root@1337 [/h/bucio]$ find www/ -user root
www/OtroEjeplo
www/0ejemplo
www/InDex.PhP
www/ejemplo.txt
www/oTroEjemplo
root@1337 [/h/bucio]$ find www/ -user root -perm 777
www/ejemplo.txt

Para realizar búsquedas por fecha de modificación podemos usar -mmin (minutos), los valores pueden ser indicados de las siguientes formas:

  • +n busca valores mayor que n
  • -n busca valores menor que n
  • n busca exactamente el valor n

root@1337 [/h/bucio]$ find www/ -mmin -20 -type f #Archivos que hayan cambiado en los últimos 20 minutos
www/.oculto.jpg
www/.oculto.php
root@1337 [/h/bucio]$ find www/ -mmin 7 -type f #exactamente hace 07 minutos
www/.oculto.jpg

El comando find, contiene más atributos para la búsqueda por tiempos: -amin, -atime, -cmin, ctime, -mmin y -mtime (“min” es para periodos de minutos y “time” para periodos de 24 horas.):

find . -mtime 0  #busca archivos modificados entre ahora y hace un día
find . -mtime -1  #busca archivos modificados hace menos de un día
find . -atime 1  #busca archivos accedidos entre hace 24 y 48 horas
find . -ctime +1  #busca archivos cuyo status haya cambiado hace más de 48 horas

Los que empiezan con “a” (access) indica el tiempo en que fue accedido (leido) por última vez un archivo. Los que empiezan con “c” (change) indica el tiempo que cambió por última vez el status de un archivo, por ejemplo sus permisos. Los que empiezan con “m” (modify) indica el tiempo en que fue modificado (escrito) por última vez un archivo. {via Linux Total}

El poder de -exec

-exec permite ejecutar incorporar comandos externos para ejecutar sobre el resultado devuelto por find, este comando fue muy usado cuando los “hackers” hacían un “mass deface” y modificaban todos los index, la ventaja de poder ejecutar comandos hace a -exec algo “especial”… jaja.

root@1337 [/h/bucio]$ find www/ -size 0 -exec ls {} \;
www/OtroEjeplo
www/0ejemplo
www/InDex.PhP
www/ejemplo.txt
www/.oculto.jpg
www/.oculto.php
www/oTroEjemplo

En comando anterior sale el atributo -size en cual puse 0 para archivos vacíos, seguido de -exec el cual ejecuta ls que nos devuelve una salida de ls se indica la cadena {} que se sustituye por cada salida de find.

Digamos que sabemos que una persona usa el cliente filezilla y sabemos que los archivos .xml se guardan las configuraciones “las contraseñas” y “usuarios” de sus (s)FTP y nos prestan la maquina y solo tenemos 10 min y un USB:

root@1337 [/h/bucio]$ find .filezilla/ -iname '*.xml' -exec cp '{}' /media/USB_delmal \;
root@1337 [/h/bucio]$ }:)

En el 2011 escribí un post parecido donde el tema era la búsqueda de palabras dentro de los archivos *.html, donde yo use xargs:

$> find -name *.html | xargs grep  title *
./index.html:               'a class="lightbox-image" rel="prettyPhoto[2]" href="{{image}}" title="{{title}}"' +
./index.html:                   'img src="{{image_s}}" alt="{{title}}" /' +
>

En el cual hubo la participación de varios amigos, donde aportaron las diferentes formas que ellos buscaban la cadena en un archivo:

gwolf comment 2011

#Por Gunnar Wolf
>$ find . -name '*.html' -exec grep -r title \{\} +
..
#Por GnuGet
>$ grep -Hirn cadena_a_buscar .
#Por Gaspar Fernandez
>$ egrep -R 'loquequierobuscar' *.htm

Existen más comando cómo grep, egrep etc… El cual nos pueden ayudar a realizar búsquedas más poderosas. Por el momento me quedo con find y exec, el cual para mi hacen buena combinación.

Y tú ¿Qué usas para las búsquedas dentro de la terminal?

Viernes 12 de diciembre de 2014

Alex Callejas

Que hacer cuando algo falla: Episodio II

2BvbQ

No es desesperación, la desesperación es sólo para los que ven el final más allá de toda duda. Nosotros no lo hacemos…

Gandalf [J.R.R. TolkienLa Comunidad del Anillo]

Hace unos días, el buen Rod me comentó que tenía algunos problemas creando relaciones de confianza entre servidores utilizando llaves de SSH. La referencia obligada fueron dos posts anteriores: Mecanismos de confianza con llaves de SSH, donde compartí el procedimiento básico para generarlos, y Que hacer cuando algo falla, en caso de necesitar algún análisis de falla y poder encontrar la causa raíz de la misma, para solucionarla.

Sin embargo, después de varios días, el mecanismo seguía sin funcionar correctamente, por lo que hubo que analizar más a fondo el caso.

Escenario

El userA desde el serverA se debe conectar al serverB como el userB de forma automática sin contraseña.

esquema

Ambos servidores están instalados igual, en el mismo segmento. La única diferencia entre ellos, era que el home de userB en serverB se encontraba bajo /opt.

Primer Análisis

De inicio, no obviamos nada y revisamos lo básico:

En serverA

  • Que exista la llave privada
  • El contenido de la llave pública sea una sola línea y sea el mismo en el serverB
[userA@serverA ~]$ ls -la .ssh/
total 20
drwx------. 2 userA userA 4096 Dec 11 10:32 .
drwx------. 3 userA userA 4096 Dec 11 11:08 ..
-rw-------. 1 userA userA 1675 Dec 11 10:32 id_rsa
-rw-r--r--. 1 userA userA 410 Dec 11 10:32 id_rsa.pub
-rw-r--r--. 1 userA userA 796 Dec 11 19:24 known_hosts
[userA@serverA ~]$ wc -l .ssh/id_rsa.pub
1 .ssh/id_rsa.pub
[userA@serverA ~]$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz59j3eSrdkgnQPvYpiFXL3EVqdgCE8Q7v4hFfCzORxXxSprXNpZW18L2BkEfo5P/JO//qGTyFSMrZbqRHAm6s7PR/idWbSGtZfXLt3ri5Rw4OUyLcDrXVqzhbBo3bvSADksXXYVcjDu2h0P8p70EOc1mouRsOph5bE0l4Yk2/RYZ6JfMI8DDbtpU/nKfPfdsysjeLQwOJ7XiXrKWwnqSZ+rP3Irol336RkPrgMpoQDzenkoMiAkc68cUYy1K85k1kv34gxWLFYK9riiXp4OriUFm62z7Fx2jaeDNPbLndDOBzCcm65P4b2j8K5vv8MshJtddWUypen+cB34lH7rjbw== userA@serverA.example-rh.com

En serverB

  • Que los permisos del home de userB sean 700 y exclusivos del dueño
  • La llave pública se llame authorized_keys, en una sola línea y  con el mismo contenido que en el serverA
[userB@clientB ~]$ ls -ld ~/
drwx------. 3 userB userB 4096 Dec 11 19:20 /opt/userB/
[userB@clientB ~]$ ls -la .ssh/
total 16
drwx------. 2 userB userB 4096 Dec 11 19:20 .
drwx------. 3 userB userB 4096 Dec 11 19:20 ..
-rw-------. 1 userB userB 410 Dec 11 19:20 authorized_keys
-rw-r--r--. 1 userB userB 391 Dec 11 19:18 known_hosts
[userB@clientB ~]$ wc -l .ssh/authorized_keys 
1 .ssh/authorized_keys
[userB@clientB ~]$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz59j3eSrdkgnQPvYpiFXL3EVqdgCE8Q7v4hFfCzORxXxSprXNpZW18L2BkEfo5P/JO//qGTyFSMrZbqRHAm6s7PR/idWbSGtZfXLt3ri5Rw4OUyLcDrXVqzhbBo3bvSADksXXYVcjDu2h0P8p70EOc1mouRsOph5bE0l4Yk2/RYZ6JfMI8DDbtpU/nKfPfdsysjeLQwOJ7XiXrKWwnqSZ+rP3Irol336RkPrgMpoQDzenkoMiAkc68cUYy1K85k1kv34gxWLFYK9riiXp4OriUFm62z7Fx2jaeDNPbLndDOBzCcm65P4b2j8K5vv8MshJtddWUypen+cB34lH7rjbw== userA@serverA.example-rh.com

Al comparar el md5 de ambos archivos de llave pública daba el mismo hash:

b02e3cc11c58c8ba36677316bf52ed74  .ssh/id_rsa.pub
b02e3cc11c58c8ba36677316bf52ed74  .ssh/authorized_keys

Sin embargo, al hacer pruebas, el mecanismo de confianza no funcionaba:

[userA@serverA ~]$ ssh userB@serverB hostname
userB@serverb's password:

[userA@serverA ~]$ ssh -v userB@serverB hostname
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
...
debug1: Next authentication method: publickey
debug1: Trying private key: /home/userA/.ssh/identity
debug1: Offering public key: /home/userA/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/userA/.ssh/id_dsa
debug1: Trying private key: /home/userA/.ssh/id_ecdsa
debug1: Next authentication method: password
userB@serverb's password:

[userA@serverA ~]$

Al revisar /var/log/messages y /var/log/secure no se encontraba evidencia alguna de la falla:

[root@clientB ~]# tail -f /var/log/messages /var/log/secure
==> /var/log/messages <==
Dec 12 12:33:30 clientB kernel: type=1305 audit(1418409210.149:4): audit_pid=952 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
Dec 12 12:33:30 clientB kdump: No crashkernel parameter specified for running kernel

==> /var/log/secure <==
Dec 12 12:33:31 clientB sshd[1050]: Server listening on 0.0.0.0 port 22.
Dec 12 12:33:31 clientB sshd[1050]: Server listening on :: port 22.
Dec 12 12:33:40 clientB sshd[1192]: Accepted password for root from 192.168.122.1 port 40110 ssh2
Dec 12 12:33:41 clientB sshd[1192]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 12 12:54:30 clientB sshd[1212]: Connection closed by 192.168.122.110
Dec 12 12:54:38 clientB sshd[1214]: Connection closed by 192.168.122.110
^C
[root@clientB ~]#

Segundo Análisis

Entonces revisamos la configuración de ssh, /etc/ssh/sshd_config, y lo modificamos para que sólo permita autenticación por llave y amarramos el nombre de la misma como authorized_keys2, para tratar de delimitar la falla:

[root@clientB ~]# cat /etc/ssh/sshd_config | grep ^[A-Z]
Protocol 2
SyslogFacility AUTHPRIV
AuthorizedKeysFile %h/.ssh/authorized_keys2
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
[root@clientB ~]#

Generamos otra llave, de tipo dsa, y la copiamos en el serverB como authorized_keys2:

[userA@serverA ~]$ ssh-keygen -t dsa -b 1024
[userA@serverA ~]$ cat .ssh/id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAOpcPejQC+G/jRz3v9gUhaJy/CogjtOmXQG9zoL69pIOhKcMfjJy21GED49tS9kAw857WTpjEVzF3ssLJlS2LMqxIervQ/bsaH8WKSqUvueTMOw/4+fiwECbllCPE/g/ULozqJFssDUJlNdTAc+yA6qVbldqT69HVbNjyWeZc3dbAAAAFQDKiDJ5GwkZLiuXbYcJaElS881GtQAAAIEApXBcAfXHfewuQiHLHrBvnd0SePgjJmU8bUgfjWjwu4yoT4Z1aWy+FmtYoQGfc9SUHq4/u6EhwVUz9i7UXLW+WrEA+OtsAftEo0TjKjG8OeH4igcqsoSkosrj2QxLrf6I8l6YQnVIt5ufVtLoE4ZqCVrLtTnsS4elFeaR56hKKT8AAACAA83nEJaqK9tWm3k8RJQJZB5sEY/DAI0ZYd/TTtCKWIOXACz+G0iK+jj1JZtV40gZyJKzIFoD89FJh3RV8PZp1+UosK4kBYsxtP4WXvUjkhwVzh6PPu8A1/BJeEq/RvCqwBPinCY0rnAQrGwLCocMNkpnJxyqjg6ZLu2bsQo1HvE= userA@serverA.example-rh.com
[userA@serverA ~]$ 

[userB@clientB ~]$ cat .ssh/authorized_keys2 
ssh-dss AAAAB3NzaC1kc3MAAACBAOpcPejQC+G/jRz3v9gUhaJy/CogjtOmXQG9zoL69pIOhKcMfjJy21GED49tS9kAw857WTpjEVzF3ssLJlS2LMqxIervQ/bsaH8WKSqUvueTMOw/4+fiwECbllCPE/g/ULozqJFssDUJlNdTAc+yA6qVbldqT69HVbNjyWeZc3dbAAAAFQDKiDJ5GwkZLiuXbYcJaElS881GtQAAAIEApXBcAfXHfewuQiHLHrBvnd0SePgjJmU8bUgfjWjwu4yoT4Z1aWy+FmtYoQGfc9SUHq4/u6EhwVUz9i7UXLW+WrEA+OtsAftEo0TjKjG8OeH4igcqsoSkosrj2QxLrf6I8l6YQnVIt5ufVtLoE4ZqCVrLtTnsS4elFeaR56hKKT8AAACAA83nEJaqK9tWm3k8RJQJZB5sEY/DAI0ZYd/TTtCKWIOXACz+G0iK+jj1JZtV40gZyJKzIFoD89FJh3RV8PZp1+UosK4kBYsxtP4WXvUjkhwVzh6PPu8A1/BJeEq/RvCqwBPinCY0rnAQrGwLCocMNkpnJxyqjg6ZLu2bsQo1HvE= userA@serverA.example-rh.com
[userB@clientB ~]$ 

Sin embargo, la falla seguía presentándose:

[userA@serverA ~]$ ssh  -v userB@serverB hostname
...
debug1: Offering public key: /home/userA/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Offering public key: /home/userA/.ssh/id_dsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/userA/.ssh/id_ecdsa
debug1: No more authentication methods to try.
Permission denied (publickey).
[userA@serverA ~]$ 

Aumentamos el nivel de log de sshd:

[root@clientB ~]# grep LogLevel /etc/ssh/sshd_config
LogLevel DEBUG
[root@clientB ~]#

Al hacer pruebas, continúa la falla, pero el /var/log/secure ya nos daba indicios de lo que estaba sucediendo:

[userA@serverA ~]$ ssh userB@serverB hostname
Permission denied (publickey).
[userA@serverA ~]$

[root@clientB ~]# tail /var/log/secure 
Dec 12 15:40:29 clientB sshd[1432]: debug1: trying public key file /opt/userB/.ssh/authorized_keys2
Dec 12 15:40:29 clientB sshd[1432]: debug1: Could not open authorized keys '/opt/userB/.ssh/authorized_keys2': Permission denied
Dec 12 15:40:29 clientB sshd[1432]: Failed publickey for userB from 192.168.122.1 port 40376 ssh2
Dec 12 15:40:29 clientB sshd[1433]: Connection closed by 192.168.122.1
Dec 12 15:40:29 clientB sshd[1433]: debug1: do_cleanup
Dec 12 15:40:29 clientB sshd[1432]: debug1: PAM: cleanup
[root@clientB ~]# 

Revisamos los permisos especiales, y validamos las opciones de montado del filesystem:

[root@clientB ~]# lsattr /opt/userB/
[root@clientB ~]#
[root@clientB ~]# getfacl /opt/userB/
getfacl: Removing leading '/' from absolute path names
# file: opt/userB/
# owner: userB
# group: userB
user::rwx
group::---
other::---

[root@clientB ~]# df -hP /opt/userB
Filesystem                    Size Used Avail Use% Mounted on
/dev/mapper/vg_opt-userB_home 988M 1.3M 936M    1% /opt/userB
[root@clientB ~]#
[root@clientB ~]# tune2fs -l /dev/mapper/vg_opt-userB_home | grep -i options
Default mount options: (none)
[root@clientB ~]#

Tercer Análisis

Al no encontrar indicios en los permisos básicos y extendidos, procedimos a revisar los permisos desde el punto de vista de seguridad:

[root@serverA ~]# getenforce
Enforcing
[root@serverA ~]# ls -lZd /home/userA/
drwx------. userA userA unconfined_u:object_r:user_home_dir_t:s0 /home/userA/
[root@serverA ~]#

[root@clientB ~]# getenforce
Enforcing
[root@clientB ~]# ls -lZd /opt/userB/
drwx------. userB userB system_u:object_r:file_t:s0 /opt/userB/
[root@clientB ~]#

Al parecer, teníamos diferencia en los contextos de SELinux; entonces realizamos una prueba, deshabilitando momentáneamente la seguridad:

[root@clientB ~]# setenforce 0
[root@clientB ~]#
[root@clientB ~]# getenforce
Permissive
[root@clientB ~]#

[userA@serverA ~]$ ssh userB@serverB hostname
clientB.example-rh.com
[userA@serverA ~]$

Al deshabilitar SELinux la conexión se realizaba de forma exitosa; sin embargo, era un requisito del cliente tenerlo habilitado.

Para conocer exactamente el comando a ejecutar y restablecer el contexto correctamente; instalamos setroubleshoot, esta herramienta nos ayuda a diagnosticar los problemas con SELinux a partir de las alertas AVC generadas en el log de audit y las parsea para entregarnos información legible en /var/log/messages. Al hacer pruebas, encontramos dicho mensaje:

[root@clientB ~]# yum -y install setroubleshoot
...
[root@clientB ~]#
[root@clientB ~]# setenforce 1
[root@clientB ~]#
[root@clientB ~]# getenforce
Enforcing
[root@clientB ~]#

[userA@serverA ~]$ ssh userB@serverB hostname
Permission denied (publickey).
[userA@serverA ~]$ 

[root@clientB ~]# tail /var/log/messages 
Dec 12 16:56:32 clientB kernel: type=1305 audit(1418424992.590:4): audit_pid=952 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
Dec 12 16:58:26 clientB setroubleshoot: SELinux is preventing /usr/sbin/sshd from search access on the directory /opt/userB. For complete SELinux messages. run sealert -l f963dd2e-ab81-4c3a-99ad-4d4d1e6736d5
[root@clientB ~]# 

Al ejecutar el comando recomendado, éste nos decía:

[root@clientB ~]# sealert -l f963dd2e-ab81-4c3a-99ad-4d4d1e6736d5
SELinux is preventing /usr/sbin/sshd from search access on the directory /opt/userB.

***** Plugin restorecon (82.4 confidence) suggests *************************

If you want to fix the label.
/opt/userB default label should be usr_t.
Then you can run restorecon.
Do
# /sbin/restorecon -v /opt/userB
...
[root@clientB ~]#

Ejecutamos la recomendación:

[root@clientB ~]# ls -lZd /opt/userB/
drwx------. userB userB system_u:object_r:file_t:s0 /opt/userB/
[root@clientB ~]#
[root@clientB ~]# restorecon -v /opt/userB
restorecon reset /opt/userB context system_u:object_r:file_t:s0->system_u:object_r:usr_t:s0
[root@clientB ~]#
[root@clientB ~]# ls -lZd /opt/userB/
drwx------. userB userB system_u:object_r:usr_t:s0 /opt/userB/
[root@clientB ~]#

Y al hacer pruebas:

[userA@serverA ~]$ ssh userB@serverB hostname
clientB.example-rh.com
[userA@serverA ~]$ 

Causa Raíz

El home del usuario esta montado en un volumen sobre /opt, realizamos una prueba, desmontando el volumen y revisando el contexto del directorio y encontramos:

[root@clientB ~]# umount /opt/userB/
[root@clientB ~]#
[root@clientB ~]# ls -lZd /opt/userB/
drwx------. userB userB system_u:object_r:usr_t:s0 /opt/userB/
[root@clientB ~]#

Lo que nos indica que, cuando el usuario fue creado, al montar el volumen no se restablecieron los contextos de su home.

Gracias Rod por la confianza! fue un gusto apoyarte a resolver este caso y poder compartir la experiencia.

Espero les sirva…

Fco. de la Torre Inguanzo

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

Como resolver problemas del reloj en Manjaro

Los problemas con el reloj que muestra una hora incorrecta es muy común en Manjaro particularmente si se tiene un equipo que arranca también con Windows.

Supongamos que el equipo inicia en Windows y todo normal, pero al entrar nuevamente a Manjaro podemos ver un desfase en el reloj que puede ser de varias horas.

Para resolver problemas del reloj en Manjaro me he valido de una herramienta que incluye la misma distribución y una instrucción que se ejecuta desde la terminal.

La explicación

Verán, existen dos estándares para el control del reloj, uno de ellos es localtime utilizado por Windows y el otro es UTC (Tiempo Universal Coordinado) que es el que usa Mac OS X, UNIX y muchas versiones de Linux.

UTC se obtiene a partir del Tiempo atómico internacional y como pueden suponer es el estándar mundial.

UTC almacena la hora local en el reloj del hardware

UTC almacena la hora local en el reloj del hardware

Ahora viene el problema, el estándar utilizado por el reloj del hardware se establece por el sistema operativo. Es decir cada sistema operativo controla el reloj de hardware para intentar mostrar la hora correcta en el reloj.

Linux sincroniza la hora correcta en el reloj de hardware, mientras que Windows hace lo contrario, sincroniza la hora UTC y hace el ajuste de zona horaria dentro del sistema operativo. Por eso al reinicar en Linux aparece la hora desfasada por varias horas.

Existe una forma para hacer que Windows utilice UTC en lugar de localtime haciendo ajustes en el registro, pero para ser honesto, son muy pocas veces las que inicio mi computadora con el sistema de Redmond y si lo llegara a hacer con un par de teclas corrijo el problema.

Timeset

Timeset es la navaja suiza para revisar y administrar la configuración de la hora de Manjaro.

Timeset se puede instalar directamente gracias a pacman.

sudo pacman -S timeset

Menú de opciones de Timeset

Menú de opciones de Timeset

En su pantalla inicial pueden ver un menú con varias opciones, pero lo que me interesa revisar antes que nada es el Time zone, porque si esta incorrecto de nada servirá actualizar la sincronización de la hora si el huso horario es incorrecto.

Claro que el Time zone se elige durante la instalación y en teoría no se cambia de manera frecuente, pero si existiera un error se puede ajustar buscando la Zona horaria correcta con la opción 2 Mostrar conocido Timezones(sic) y estableciendo la correcta con la opción 3 Establecer Zona Horaria del Sistema.

Verificando que la zona horaria este correcta

Verificando que la zona horaria este correcta.

Con la zona horaria correcta le toca el turno a la opción 4 Sincronizar hora de la red (NTP), eso hará que el sistema se sincronice con un servidor de horario estableciendo la hora correcta del sistema.

Escribiendo la hora al reloj de hardware

Otra opción es hacerlo “a manita”, si el Time zone es correcto, entonces se puede ajustar el reloj ejecutando la siguiente instrucción desde la terminal:

sudo ntpdate -u 0.pool.ntp.org && sudo hwclock -w

Sincroniza la hora desde un servidor ntp y además escribe esta hora en el reloj de hardware del sistema.

Esto resolverá muchos problemas de la hora, al menos hasta la próxima vez que se inicie la computadora con Windows, entonces solo se tiene que ejecutar nuevamente la instrucción y asunto arreglado.

Espero que este consejo les sea de utilidad.

The post Como resolver problemas del reloj en Manjaro appeared first on LINUXMANR4.

Miércoles 10 de diciembre de 2014

Xenode Systems: Mejorar rendimiento de drivers MESA en Fedora 21
Xenode Systems: Cómo instalar drivers propietarios NVIDIA en Fedora 21
Xenode Systems: Cómo instalar drivers propietarios ATI en Fedora 21

Viernes 05 de diciembre de 2014

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

Simposio de Tecnologias de Software Libre



El Opensource Technology Center @ Intel tendra el proximo viernes 5 de Diciembre y sabado 6 de Diciembre de 2014 el Simposio de Tecnologias de Software Libre en las instalaciones del Intel GDC 9am a 4:30pm.


Programa completo:



https://01.org/stsl

Direccion:



Avenida del Bosque 1001, Colonia El Bajío, Zapopan, Jalisco


Martes 02 de diciembre de 2014

Fco. de la Torre Inguanzo

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

El problema /var/lib/pacman/db.lck

El problema /var/lib/pacman/db.lck es muy común en Manjaro. Ayer me dejó un comentario el buen amigo Holmes preguntando como solucionarlo y afortunadamente la solución es muy pero muy sencilla.

El problema de /var/lib/pacman/db.lck

El problema dice:

“if you’re sure a package manager is not already running, you can remove /var/lib/pacman/db.lck”

A veces pasa que por alguna razón se interrumpe el proceso de actualización, puede ser por un apagón, un reinicio forzoso o simplemente se presionó Ctrl+C para interrumpir de manera inesperada la tarea de actualización.

¿Se han fijado que no se pueden instalar otros paquetes mientras se esta actualizando el sistema? Eso es gracias al bloqueo que ejerce el archivo db.lck y como se interrumpió el proceso este archivo no fue eliminado.

La solución.

La solución es muy sencilla y esta en el mismo mensaje de error, si no se esta ejecutando otra tarea con un manejador de paquetes (pacman, octopi, pamac) simplemente hay que borrar el archivo db.lck:

sudo rm /var/lib/pacman/db.lck

Con eso es más que suficiente para quitar el bloqueo y la próxima vez que instalen un paquete o actualicen el sistema lo hará sin problemas.

The post El problema /var/lib/pacman/db.lck appeared first on LINUXMANR4.

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

.NET Foundation: Advisory Council

Do you know of someone that would like to participate in the .NET foundation, as part of the .NET Foundation Advisory Council?

Check the discussion where we are discussing the role of the Advisory Council.

Viernes 28 de noviembre de 2014

Fco. de la Torre Inguanzo

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

FreeFileSync una herramienta para sincronizar archivos

Freefilesync una herramienta para sincronizar archivos, es de esos programas que te preguntas porque no sabías de ellos antes.

Es realmente muy útil y fácil de utilizar, al principio llama la atención la interfaz un poco espartana pero al poco tiempo de usarlo te das cuenta de que todo esta en su sitio y perfectamente bien explicado.

Esta herramienta es ideal para sincronizar dos directorios y se puede usar también sin mucho problema como una herramienta de respaldos.

Lo mejor es que corre en todos los sistemas operativos principales, Windows , Linux o Mac OS X tanto en 32 como en 64 bits.

Tengo poco usándolo pero tengo que decirles que es simplemente genial.

Origen y Destino

FreeFileSync Paneles de Origen y Destino

Como pueden ver el diseño del programa tiene dos paneles, a la izquierda el origen, a la derecha el destino y entre ellos las opciones de copia.

En la esquina superior izquierda esta el botón azul de Comparar y en la esquina superior derecha el botón de Sincronizar ambos con sus respectivos botones de configuración.

El progreso

FreeFileSync - avance de la sincronización

Una parte importante del proceso de sincronización es poder vigilar el avance de la copia, información sobre el Tiempo Restante (ETA) y la velocidad de la misma, pero sobre todo si existe algún problema durante la copia de los archivos.

Al finalizar también entrega un registro (log) de la copia que podemos analizar detenidamente.

Guardar tareas

Todas las tareas de sincronización se pueden guardar en la interfaz para mandarlas llamar posteriormente, pero además tiene una opción de Guardar como tarea por lotes lo que facilita enormemente ejecutar una tarea de sincronización desde la terminal o programarla para que se ejecute cada cierto tiempo.

Todo esto lo hace la herramienta ideal para copias masivas de archivos tanto ocasionales como para aquellas tareas que son frecuentes como las de respaldo.

The post FreeFileSync una herramienta para sincronizar archivos appeared first on LINUXMANR4.

Martes 25 de noviembre de 2014

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Teorema de Hasse para curvas elípticas, núcleo de la demostración pero desde el twist cuadrático de la curva 1/2

Vamos a explorar un teorema que es una consecuencia directa de las Conjeturas de Weil demostradas por Pierre Deligne, si nos da tiempo veremos un sketch de como demostrar las conjeturas de André Weil en general.

El teorema de Hasse es muy importante en criptografía con curvas elípticas, ya que nos permite aproximar o incluso saber el número de elementos que tiene el grupo que forma una curva elíptica, este número de elementos en función del tamaño del campo finito, esto tiene aplicaciones a la ingeniería en la implementación, y también nos puede decir, si la curva es segura o no , es decir que su grupo no sea isomorfo a algo trivial.

El problema de la demostración de Helmut Hasse en 1936 es que es muy larga y complicada, aquí trataremos de dar los elementos necesarios, pero también extenderemos el teorema a otro espacio el cual nos permitirá analizar la estructura desde los endomorfismos de la curva.

Primero, trabajemos en un campos $latex \mathbb{F}_q$ con $latex q$ impar y con la forma de una curva elíptica $latex E$ en su forma reducida de Weierstrass, es decir $latex y^2 = x^3 + Ax + B$ , pero esta forma reducida de Weierstrass tiene el problema de que $latex j(E)=1728\equiv 0$ mod $latex 3$ lo que nos limita a trabajar con cierta familia (0) de curvas en característica 3, necesitamos que el $latex j$ invariante tome todos los valores de $latex \mathbb{F}_q$ entonces consideraremos las curvas $latex y^2 = x^3 + a_{2}x^2 + a_{4}x + a_6$ , pueden demostrar que el $latex j$ invariante de esta curva ya cubre todas las curvas elípticas de característica impar.

El teorema de Hasse dice.

Teorema (Helmut-Hasse, 1936): Sea $latex E$ una curva elíptica sobre un campo
$latex \mathbb{F}_q$, si $latex N_q$ representan el número de puntos de $latex E$ sobre $latex \mathbb{F}_q$ entonces:

$latex \mid N_q-(q+1)\mid \leq 2\sqrt{q}$

Este teorema se ve muy infensivo, pero no lo es... de hecho de manera preliminar podríamos comenzar a atacarlo

Si la ecuación de $latex E$ es $latex y^2 = x^3 + Ax +B =f(x)$ y $latex q$ es impar, entonces vamos a

suponer que el número de puntos que cumplen $latex f(x)$ están distribuidos uniformemente al ser evaluado $latex f$  $latex \forall x\in \mathbb{F}_q$ , por lo que tenemos que hay una raíz que es un punto de $latex E$ y como $latex q$ es impar, existen $latex \frac{q-1}{2}$ elementos que no son cuadrados en $latex \mathbb{F}^{*}_q$  lo que nos deja con los otros $latex \frac{q-1}{2}$ puntos que sí son cuadrados, pero hay 2 por cada uno ya que en $latex E$  tenemos $latex (\pm y)^2$ por lo que el valor esperado de $latex N_q$ es   $latex 1+2\frac{q-1}{2}=q$

Esto nos da la desviación de $latex N_q$ y nos muestra la parte izquierda de la desigualdad de hasse que es $latex \mid N_q-(q+1)\mid$ donde el $latex +1$ es porque se consideran los puntos de $latex \mathbb{F}_q$ sobre la linea proyectiva la cual tiene otro punto adicional en el infinito.

Teoría necesaria.

En el post anterior hablamos del anillo de endomorfismos de una curva, el j-invariante e isogenias.
Te recomiendo lo leas antes, aquí recordaremos algunas cosas pero si crees que falta algo, el artículo anterior tiene más detalles.




Sean $latex E_1, E_2$ dos curvas elípticas definidas sobre $latex \mathbb{K}$ y $latex \psi:E_1\rightarrow E_2$ un homomorfismo separable de curvas elípticas, es decir... que si consideramos el functor contravariante $latex \psi^{*}:\mathbb{K}(E_2)\rightarrow \mathbb{K}(E_1)$ que manda $latex f\mapsto f\circ \psi$ entonces $latex \mathbb{K}(E_1)/\psi^{*}\mathbb{K}(E_2)$ es una extensión de campos separable (i.e. los polinomios minimos de elementos de el campo grande con coeficientes en el campo chico no tienes raíces repetidas) , y definimos el grado del mapeo $latex \psi$ como:  $latex \partial\psi=[\mathbb{K}(E_1):\psi^{*}\mathbb{K}(E_2)]$



Motivación de la demostración de Hasse

Sea $latex \psi:E_1 \rightarrow E_2$ un morfismo separable entre curvas elípticas, tenemos que $latex \partial \psi=\sum_{P\in \psi^{-1}(Q)}e_{\psi}(P)$  $latex \forall Q\in E_2$ con $latex e_\psi(P)=\nu_P(\psi^{*}t_{\psi(P)})$ el índice de ramificación [Silverman II , 2.6a], ahora, si usamos [Silverman III 4.10 a,c] tenemos que $latex \psi$ es separable $latex \Rightarrow \psi$ no tiene ramificación lo que implica que $latex e_{\psi}(P)=1$, y como $latex \psi(P+Q)=\psi(P)+\psi(Q)$ es un homomorfismo de grupos tenemos que $latex \psi^{-1}(\infty_{E_2}) = Ker\psi \Rightarrow$  $latex \partial \psi=\sum_{P\in Ker\psi}e_\psi(P) = \sum_{P\in Ker\psi}1 =$ #$latex Ker\psi$


Sabiendo esto, podemos deducir algo interesante sobre la cardinalidad de la curva elíptica $latex E$, si usamos [Silverman III, 5.5] tenemos que si $latex \phi:E\rightarrow E$ es el endomorfismo de Frobenius que actúa en las coordenadas de los puntos elevándolos a la $latex q$ entonces el mapeo
$latex Id-\phi$ es separable y tenemos que $latex \phi(P)=P \Leftrightarrow P\in E(\mathbb{F}_q)$ y usando el párrafo anterior, $latex Ker(Id-\phi)$ consta de todos los puntos $latex \mathbb{F}_q$ racionales de la curva ya que se anulan con la identidad, lo que nos dice que $latex Ker(Id-\phi)=E(\mathbb{F}_q)$ por lo que igual con el párrafo anterior, $latex \partial(Id-\phi)=$#$latex E(\mathbb{F}_q)$



Me he tardado en escribir en mi blog, pero por ahora dejo sólo esta parte, después vamos a terminar la demostración, pero falta relacionar los morfismos de la curva elíptica con elementos de una torcedura cuadrática de la curva, y con eso, construiremos $latex Id-\phi$ pero visto desde puntos en otra curva definida sobre $latex \mathbb{F}_q(s,t)$ tal que $latex s^2 = f(t)$ es decir la misma curva $latex E$ será  $latex E^{TW}: f(t)y^2 = f(x)$ y los puntos equivalentes a la identidad y el mapeo de frobenius ahí serán $latex (t,1)$ y $latex (t^q,s^{\frac{q-1}{2}})$ , pero esto será después de establecer este isomorfismo $latex Mor_{\mathbb{F}_q}(E,E) \cong E^{TW}(\mathbb{F}_q(s,t)) \cong E(\mathbb{F}_q(s,t))$ el cual nos permitirá calcular la cardinalidad del Kernel que necesitamos mediante otra función entre puntos sobre la curva con puntos en el campo de funciones racionales utilizando el grado de los puntos Id y Frobenius (los puntos ya no son numeros... son cocientes de polinomios en la torcedura cuadrática).


Espero les haya servido.

Lunes 24 de noviembre de 2014

Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

Bloquear y desbloquear direcciones IP con iptables

Una de situaciones más importantes como Administrador de sistemas es la seguridad, es por eso que en este post les mostraré como bloquear direcciones ip en un servidor para que no tengan acceso a el   o bien bloquear las conexiones salientes hacia una IP determinada (en el caso de que se use ese servidor como gateway/router)


BLOQUEAR

Bloquear acceso a ip: 

iptables -A INPUT -s 189.240.240.8 -j DROP

Bloquear acceso a ip pero en un puerto y protocolo especifico:

iptables -A INPUT -s 189.240.240.8 -p tcp --destination-port 25 -j DROP

Bloquear conexión hacia IP: 

iptables -A INPUT -d 189.240.240.8 -j DROP

DESBLOQUEAR

Desbloquear acceso de IP:

iptables -D INPUT -s 189.240.240.8 -j DROP

Desbloquear conexión a hacia IP:

iptables -D INPUT -d 189.240.240.8 -j DROP



Ver reglas de iptables:
iptables --list



REGLAS PERMANENTES

Si deseas que estas reglas se queden de manera permanente es necesario instalar :

apt-get install iptables-persistent

para luego ingresar las reglas que iptables cargará desde el inicio de el equipo.

Archivo para IPv4: /etc/iptables/rules.v4 

Archivo para IPv6: /etc/iptables/rules.v6




Domingo 16 de noviembre de 2014

Héctor Bautista

Héctor Bautista
Soy un Jedi » Gnu/Linux

Skype 4.3 en Debian Jessie AMD64

Resulta que en alguna de las actualizaciones de mi escritorio, la versión de skype que estaba usando dejó de funcionar. Como no recordaba como lo había hecho funcionar en un inicio, y recordando que al menos en Redhat, el rpm proporcionado por el sitio oficial, me dio un poco de lata, así que tienen una versión “dinámica”.

Luego entonces, fui a la web de Skype y me descargué la versión dinámica, como se muestra en las siguientes imágenes:

Skype Linux 01Skype Linux 02

Skype Linux 03Skype Linux 04

Una vez terminada la descarga, procedí a descomprimir el archivo, y ejecuté el binario:

 

hbautista@kenobi:~/Descargas/skype$ ./skype
./skype: error while loading shared libraries: libQtWebKit.so.4: cannot open shared object file: No such file or directory
hbautista@kenobi:~/Descargas/skype$

 

Y me encontré con ese error, el detalle es que el paquete que se necesita es: libqtwebkit4 y no se encuentra en los repositorios de la arquitectura de 64 bits, pero sí en la arquitectura i386. Por si no tienen habilitada la opción de multi-arquitectura en Debian, estos son los pasos a seguir:

root@kenobi:~# dpkg --add-architecture i386
root@kenobi:~# aptitude update

Una vez que se hayan actualizado los paquetes, procederemos a instalar el paquete requerido de la siguiente forma, lo cuál también nos mostrará todas las dependencias:

root@kenobi:~# aptitude install libqtwebkit4:i386
Se instalarán los siguiente paquetes NUEVOS:
gstreamer1.0-plugins-base:i386{a} libaudio2:i386{a} libavahi-client3:i386{a} libavahi-common-data:i386{a} libavahi-common3:i386{a} libcdparanoia0:i386{a}
libcups2:i386{a} libfontconfig1:i386{a} libgssapi-krb5-2:i386{a} libgstreamer-plugins-base1.0-0:i386{a} libgstreamer1.0-0:i386{a} libk5crypto3:i386{a}
libkeyutils1:i386{a} libkrb5-3:i386{a} libkrb5support0:i386{a} libmng1:i386{a} libqt4-opengl:i386{a} libqt4-xmlpatterns:i386{a} libqtgui4:i386{a}
libqtwebkit4:i386 libsqlite3-0:i386{a} libxt6:i386{a}
0 paquetes actualizados, 22 nuevos instalados, 0 para eliminar y 29 sin actualizar.
Necesito descargar 22.5 MB de ficheros. Después de desempaquetar se usarán 72.9 MB.
¿Quiere continuar? [Y/n/?] y

Skype Linux 05En mi caso, también me descargué el paquete deb, así que procedí a instalarlo con dpkg:

root@kenobi:~# dpkg -i /home/hbautista/Descargas/skype
skype/                            skype-debian_4.3.0.37-1_i386.deb
root@kenobi:~# dpkg -i /home/hbautista/Descargas/skype-debian_4.3.0.37-1_i386.deb
Seleccionando el paquete skype previamente no seleccionado.
(Leyendo la base de datos ... 252325 ficheros o directorios instalados actualmente.)
Preparing to unpack .../skype-debian_4.3.0.37-1_i386.deb ...
Unpacking skype (4.3.0.37-1) ...
Configurando skype (4.3.0.37-1) ...
Processing triggers for dbus (1.8.8-2) ...
Processing triggers for mime-support (3.57) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
root@kenobi:~#
Skype Linux 06Ya nada más nos queda ejecutarlo como un usuario normal

Skype Linux 09 Skype Linux 10

Y con eso se resuelve dicho problema

Fuente: LinuxQuestions

Notas relacionadas:

The post Skype 4.3 en Debian Jessie AMD64 appeared first on Soy un Jedi.

Viernes 14 de noviembre de 2014

Oswaldo Villa

Oswaldo Villa
Villatux Blog <--

Realizar conexiones SSH sin password

En este post le mostraré como hacer conexiones SSH sin utilizar password de manera permanente.


Escenario:



PC2 necesita conectarse a PC1 por ssh sin utilizar password



Procedimiento:

1 ) Generar la llave pública (en PC2)

ssh-keygen -b 4096 -t rsa

Te pedirá tres datos,  en todos ellos solo es necesario dar [ENTER] sin introducir información

2 )  Mandar la llave pubica de PC2 a PC1

ssh-copy-id root@192.168.0.2

Te pedirá por única ocasión la contraseña de PC1

A partir de este momento podemos hacer una conexion SSH a PC1 sin utilizar password:
Ejemplo:
ssh root@192.168.0.2


NOTAS:
* En ambos equipos es necesario tener el servidor ssh
* Se deben respetar los usuarios con los que se generan las llaves públicas ya que con esos mismos usuarios deberás hacer la conexión SSH para que no te pida password.  si usas otros usuarios te lo pedirá.








Miguel Barajas

Miguel Barajas
GnuOwned's Blog

Querido HeadHunter...

Hoy por la mañana hice un rant en Twitter en 10 tuits, en los cuales di un pequeño feedback a nuestros siempre amigos HeadHunter, sobre todo orientado a tecnología, a continuación esos tuits.

¿Qué opinas? ¿Qué otro agregarías?

Lunes 03 de noviembre de 2014

Marco Islas

Marco Islas
Marco Islas Blog

Cleaning the PS3

My PS3 is basically a Netflix client (the Wii do the same thing) for my wife and kids, but for me this is where I play, my MacBook Pro sucks at games because of the shitty HD3000 video chip which is fine for video play but not that good for gaming, which in some way Read More →

Sábado 01 de noviembre de 2014

Marco Islas

Marco Islas
Marco Islas Blog

Another thing that iOS needs to improve

I have to create an email for work, I usually respond to email in my computer but since it have no power (I left it like that, I’m doing the monthly maintenance), I tried to do it I my iPad. The message must contain a PDF file, the good thing is: that file is in Read More →