Domingo 18 de febrero de 2018

Marco Islas

Marco Islas
Marco Islas

Apple should include this in the Apple TV package

Gustavo Rubio

Gustavo Rubio
Ahí vamos

2017 en resúmen

Hace casi exactamente un año que no escribo y la verdad es que además de que han sido falta de tiempo sobre todo han sido falta de ganas. 2017 fue particularmente un año digamos complicado; trabajo en exceso, enfermedades propias y ajenas y en general poca energía para escribir. Aunque no todo fue malo por supuesto.

Escribir un blog o llevar un “diario” parecería una actividad inútil en tiempos de microblogging, twitter, medium y otros medios de comunicación donde usualmente las personas sintetizan contenido porque simplemente vivimos en tiempos donde consumimos tanto contenido digital que no nos podemos dar el lujo de leer un buen artículo y preferimos lo fácil, algo así como cocinar en casa VS comida chatarra. Ojo, que no infiero con ello que sea escritor o mi contenido sea de alta calidad editorial pero es que se que la brevedad no es lo mio, aunque sigo trabajando en ello.

Para mi, escribir siempre ha sido mas un ejercicio de auto-evaluación y una clase de terapia personal para hablar en voz alta, de manera digital, sobre los temas que me interesan, pero, como comenté anteriormente, la cantidad de “cosas” que tenemos, o que creemos que tenemos que consumir sobre todo en esta era digital, vuelve complicado enfocarse en este tipo de actividades. El simple hecho de dejar de consumir redes sociales no solo me ha ahorrado tiempo que ahora puedo invertir en otras actividades sino que además me ha liberado de esa ansiedad de vivir en una época de notificaciones reactivas. Ni que decir de la calidad del contenido de dichos medios de lo que ya he hablado en varios posts. Usualmente me gusta participar en debates pero hacerlo en redes sociales se ha vuelto una actividad gris que personalmente no me aporta nada. Creo que la única razón por la cual sigo utilizando Twitter, por ejemplo, es para mantenerme al tanto de noticias y contenido de personas que realmente me interesan pero dejé atrás esa necesidad de estar revisando como loco el timeline solo por buscar algo que hacer.

En fin, que he tratado de “desintoxicarme” de malos hábitos, no solo de los que tienen que ver con el Internet sino con el estilo de vida en general que llevamos y aun falta mucho por hacer pero 2017 fue un buen año de experimentación; he comenzado a leer mucho más, actividad que siempre me gustó y dejé a un lado por creer que no tenía tiempo, he vuelto a tomar mis viejos hobbies como la aviación y en general, tratar de disfrutar las cosas simples como el hecho de llevar una libreta de notas conmigo en vez de depender siempre de un dispositivo digital para algo tan sencillo como eso. Ya iré desarrollando esos temas supongo en otros posts.

Una de las cosas que más disfruto es viajar. La mayoría de la lectura que realizo es histórica ya que no soy fan de la literatura honestamente así que es natural que viajar sea una de las actividades que mas me apasionan pues poder ver y sentir lugares que solo conocemos en tinta es una experiencia muy gratificante, más que el hecho de tomar 800 fotos de un lugar que no conocimos por estar pegados al teléfono para conocerlo viendo dichas fotos cuando regresamos de ese viaje. En 2017 tuvimos la oportunidad Yari y yo de realizar varios viajes interesantes, como cada año, y en particular un viaje “largo” que comenzó en Guadalajara, pasando por CDMX, Paris, Bruselas, Brujas y terminó en Londres. Tenemos “otros” planes de familia este año así que supongo que tendremos que limitar dichos viajes pero hemos disfrutado cada año como pareja sin hijos desde que nos casamos y 2017 no fue la excepción.

Finalmente la mejor manera de cerrar el año fue con un nuevo empleo. El año pasado fue un año de mucho estrés laboral, horas extras y poca satisfacción con lo que hacía. Toda la vida he sido agradecido con quien me ha brindado una oportunidad para demostrar mis habilidades profesionales y de paso pagarme por ello, sin embargo decidí que seguir en la industria del “Outsourcing” ya no era para mi. Tuve buenas ofertas (muy buenas diría yo) para laborar en otras empresas pero el factor siempre era el mismo: trabajar subcontratado. No importa que tan hip sea la empresa, al final seguimos siendo el aparato operacional de grado económico para startups en una industria donde no hay mucho para donde hacerse o crecer. Tomé una decisión y dije que no volvería a trabajar en esta industria, la del outsourcing/nearshoring de software y la única manera de volver a desarrollar software sería integrándome a una empresa con un producto que se dediqué a solucionar problemas y no a “rentar gente” o bien en mis propios proyectos y es así como llegué a Conekta donde no solo me ha acogido una gran empresa sino un gran equipo con metas claras y sobre todo con un producto interesante, en un mercado emergente como lo son las “fintech” y que finalmente tiene como objetivo solucionar algunos de los grandes problemas que tiene la industria de pagos en línea en México los cuales me han frustrado desde que tengo usando dichos servicios con banca tradicional así que ahora no solo tendré oportunidad de quejarme sino de tratar de hacer algo al respecto.

Oh, sí, también este será el año que lance algunos proyectos y productos, lo decreto!

Viernes 16 de febrero de 2018

Improve WD MyCloud performance

I’ve just noticed that my NAS a Western Digital My Cloud EX2 is going slower, so I decided to investigate about what can I do to improve its performance.

I assume that you already configure ssh on your NAS device. If is not configured you can follow the next instructions: https://support.wdc.com/knowledgebase/answer.aspx?ID=14952

Stop Indexing Services

/etc/init.d/wdmcserver stop
/etc/init.d/wdphotodbmerger stop

To do it forever, you should create the cronjob as:

crontab -e

And add the following lines:

@reboot /bin/sh /etc/init.d/wdmcserverd stop
@reboot /bin/sh /etc/init.d/wdphotodbmerger stop

Martes 13 de febrero de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Is it an upgrade, or a sidegrade?

I first bought a netbook shortly after the term was coined, in 2008. I got one of the original 8.9" Acer Aspire One. Around 2010, my Dell laptop was stolen, so the AAO ended up being my main computer at home — And my favorite computer for convenience, not just for when I needed to travel light. Back then, Regina used to work in a national park and had to cross her province (~6hr by a combination of buses) twice a week, so she had one as well. When she came to Mexico, she surely brought it along. Over the years, we bought new batteries and chargers, as they died over time...

Five years later, it started feeling too slow, and I remember to start having keyboard issues. Time to change.

Sadly, 9" computers were no longer to be found. Even though I am a touch typist, and a big person, I miss several things about the Acer's tiny keyboard (such as being able to cover the diagonal with a single hand, something useful when you are typing while standing). But, anyway, I got the closest I could to it — In July 2013, I bought the successor to the Acer Aspire One: An 10.5" Acer Aspire One Nowadays, the name that used to identify just the smallest of the Acer Family brethen covers at least up to 15.6" (which is not exactly helpful IMO).

Anyway, for close to five years I was also very happy with it. A light laptop that didn't mean a burden to me. Also, very important: A computer I could take with me without ever thinking twice. I often tell people I use a computer I got at a supermarket, and that, bought as new, costed me under US$300. That way, were I to lose it (say, if it falls from my bike, if somebody steals it, if it gets in any way damaged, whatever), it's not a big blow. Quite a difference from my two former laptops, both over US$1000.

I enjoyed this computer a lot. So much, I ended up buying four of them (mine, Regina's, and two for her family members).

Over the last few months, I have started being nagged by unresponsivity, mainly in the browser (blame me, as I typically keep ~40 tabs open). Some keyboard issues... I had started thinking about changing my trusty laptop. Would I want a newfangle laptop-and-tablet-in-one? Just thinking about fiddling with the OS to recognize stuff was a sort-of-turnoff...

This weekend we had an incident with spilled water. After opening and carefully ensuring the computer was dry, it would not turn on. Waited an hour or two, and no changes. Clear sign, a new computer is needed ☹

I went to a nearby store, looked at the offers... And, in part due to the attitude of the salesguy, I decided not to (installing Linux will void any warranty, WTF‽ In 2018‽). Came back home, and... My Acer works again!

But, I know five years are enough. I decided to keep looking for a replacement. After some hesitation, I decided to join what seems to be the elite group in Debian, and go for a refurbished Thinkpad X230.

And that's why I feel this is some sort of "sidegrade" — I am replacing a five year old computer with another five year old computer. Of course, a much sturdier one, built to last, originally sold as an "Ultrabook" (that means, meant for a higher user segment) much more expandable... I'm paying ~US$250, which I'm comfortable with. Looking at several online forums, it is a model quite popular with "knowledgeable" people AFAICT even now. I was hoping, just for the sake of it, to find a X230t (foldable and usable as tablet)... But I won't put too much time into looking for it.

The Thinkpad is 12", which I expect will still fit in my smallish satchel I take to my classes. The machine looks as tweakable as I can expect. Spare parts for replacement are readily available. I have 4GB I bought for the Acer I will probably be able to carry on to this machine, so I'm ready with 8GB. I'm eager to feel the keyboard, as it's often repeated it's the best in the laptop world (although it's not the classic one anymore) I'm just considering to pop ~US$100 more and buy an SSD drive, and... Well, lets see how much does this new sidegrade make me smile!

Lunes 12 de febrero de 2018

Rusia y la red TOR

Rusia no es conocida como un lugar muy democrático, la mayoría conocerá la red TOR [1][2] y al menos sabrá que de quienes han propuesto el colocar nodos de salida en casa en México ha sido Gunnar Wolf [3][4], bueno en Rusia varios operadores de nodos de salida han sido arrestados [5] el ultimo caso el de Dmitry Klepikov del que ni siquiera hay noticias que estén en ingles o español, mayormente la información todavía en ruso no ha permeado este lado del mundo y sera interesante el difundir[6][7] ya que en el caso del operador anterior también Dmitry Bogatov fue acusado por contenido que se genero y fue rastreado a su salida de TOR, pero que no fue generado por él que es de lo que se le acusó, ahora el caso más nuevo es un tanto más interesante ya que Klepikov además de ser operador de TOR esta registrado como observador electoral, lo cual se antoja como una coincidencia demasiado grande.

[1] https://es.wikipedia.org/wiki/Tor_(red_de_anonimato)
[2] https://www.torproject.org/about/overview.html.en
[3] http://gwolf.org/node/3929
[4] http://gwolf.org/node/4094
[5] https://techcrunch.com/2017/04/24/dmitry-bogatov-tor-russia/
[6] https://share.riseup.net/#pxoC4nPXgyQla1yzXJl06w
[7] https://lists.torproject.org/pipermail/tor-talk/2018-February/043981.html

Vim one liner

Never learned visual mode of vim: Disable vim automatic visual mode on mouse select issue: :set mouse-=a
add to ~/.vimrc:
set mouse-=a

Sábado 10 de febrero de 2018

Marco Islas

Marco Islas
Marco Islas

Installing the tower

Having a new tower in my house so I can get more internet (Telmex sucks ) and a chance to improve the business

Viernes 09 de febrero de 2018

Marco Islas

Marco Islas
Marco Islas

Trying iOS 11.3 beta 2… getting back a. Bit of the speed

Jueves 08 de febrero de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

AWS lambda functions and internal reusable containers

Some time has happened from the last post, but today I have some information that is not relevant to anyone and that's the main purpose of this blog.

Okay this is the deal. I was following one of the amazon web services posts on how-to-receive-alerts-when-specific-apis-are-called-by-using-aws-cloudtrail-amazon-sns-and-aws-lambda. Translated into "my grandmother" language: being alerted when some AWS events are happening.

The flow on how the services work together is shown on this diagram:

Diagram showing how the AWS services from this blog post work together

But why am I writing about this? Well I've faced an issue while building this setup, actually opened a support case with amazon and since I'm not an expert with AWS lambda, they clarified to me some of the lambda nature that cause my function not to work properly.

The expectation: Receive an email once an event happened on AWS coming from route53 each time a bucket object was created
The issue: The email was sent only for the first time the lambda function was invoked, but it didn't send an email on second time and any other subsecuent time
The problem: AWS Lambda reuse their containers to run the code, and the environment variables as well. The cloudtrail.js code use a FILTER_CONFIG global variable, and the logic of the code says that it will run some code if FILTER_CONFIG is empty. But since this global variable is kept on the container, none of the following code is being executed.
The solution: Set the FILTER_CONFIG as empty just at the beginning of the init function

After doing this change the lambda function worked just like a charm. 

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Viernes 02 de febrero de 2018

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Stop loss en Bitso

Hot:

Bitso es un portal que permite la compra de algunas monedas virtuales mediante la transferencia de pesos.

 

Adicionalmente, permite realizar transacciones de compra/venta de estas monedas, el portal funciona bien, sin embargo, solo permite colocar ordenes de compra o venta de manera fija.

 

En el mercado existe un concepto llamado STOP LOSS, el cual implica que cuando el valor del activo en el cual se invirtió, llega a un limite inferior previamente definido, se coloque una orden de compra.

 

Esta operación permite detener las perdidas (he ahí la relación del nombre) de una manera ordenada y con un riesgo calculado.

 

Bitso no ofrece la posibilidad de programar ordenes de tipo STOP LOSS, las cuales son muy útiles.

 

En un tiempo de ocio, desarrolle una pequeña aplicación de consola que permite realizar esta programación de ordenes.

 

Su uso es muy sencillo, solo es necesario definir los siguientes parámetros:

  • Libro sobre el cual se realiza la operación
  • Precio de compra de la orden
  • Porcentaje de perdida aceptable
  • Monto en la moneda virtual a vender
  • Tiempo en segundos para consultar la cotización de la moneda a verificar.

 

Ahora bien, como funciona:

 

Con el precio de compra y el porcentaje de perdida aceptable se calcula el precio que la moneda debe tener para realizar la orden de venta, de tal forma, cuando la cotización en tiempo real de la moneda esta por debajo de este valor, se crea una orden de venta por el monto definido, al último valor cotizado.

 

Aun así, es posible que la venta no logre concretarse, por lo que también es capaz de esperar un tiempo definido en minutos y verificar si la orden ya fue cerrada o sigue abierta, en caso de seguir abierta, se eliminará y se creará una orden a precio de mercado.

 

Esa herramienta permite ayudar en la definición de las estrategias de inversión y evitar el estar al tanto del valor del activo constantemente.

 

Mayor información, visite la página de bitsoStopLoss.

 

Miércoles 31 de enero de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

100,000 TPS en el año 2020?

Si NEO cumple su promesa de llegar a las 100,000 transacciones por segundo para el año 2020. Estaríamos hablando de algo E-NOR-ME.

Imagen capturada del NEO DevCon
Para ponerlo en perspectiva:


  • VISA TPS: 1667
  • Paypal TPS: 193
  • Bitcoin TPS: 4
  • Ethereum TPS: 20

Viernes 26 de enero de 2018

Fco. de la Torre Inguanzo

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

Mejorar el tiempo de arranque de Manjaro

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

Ayer estaba leyendo esta nota en la Mirada del Replicante: Canonical quiere que Ubuntu arranque más rápido ¡Y yo también!, pero existe el problema de que yo no utilizo Ubuntu desde hace varios años. En su lugar tengo instalado Manjaro como mi distro linuxera de cabecera para mis equipos de uso personal.

No es que mi equipo arranque lento, generalmente enciendo el equipo, me voy a preparar un café y cuando llego ya esta la pantalla que me pide iniciar sesión. Unos minutos después ya estoy listo para empezar a trabajar.

De hecho vino a mi memoria un momento en el que Ubuntu arrancaba endemoniadamente rápido, pero no era con systemd así que ese dato no me era útil.

updatedb y man-db.

Investigando di con otro artículo de La mirada del replicante: Analizar el tiempo de arranque de tu sistema con systemd-analize . Ahí fue donde conocí el comando systemd-analyze.

Al ejecutar el comando systemd-analyze blame en la terminal me di cuenta de dos procesos que en conjunto ocupaban ¡más de 5 minutos del arranque!.

Estos son los culpables:

  • updatedb.service
  • man-db.service

El servicio updatedb se encarga actualizar una base de datos que sirve para localizar archivos (es parte del paquete mlocate).

man-db se utiliza para inicializar o actualizar las cachés de la base de datos que normalmente son mantenidas por man (que muestra las ayudas de los comandos de la terminal).

Updatedb le agregaba en mi caso más de 4 minutos al proceso de arranque, man-db sólo 1, pero comparado con los demás procesos que se inician durante el arranque que duran segundos simplemente era demasiado.

Tuneando systemd.

Me di cuenta que no era el único con este problema. Después de buscar un poco en Google di con una solución sencilla que fue indicarle a systemd que ejecutara esos servicios a cierta hora o mucho después de iniciado el proceso de arranque.

Para eso es necesario crear estos archivos.

Nota: Las carpetas man-db.timer.d y updatedb.timer.d no existen hay que crearlos desde la terminal.

# /etc/systemd/system/man-db.timer.d/man-db.timer.conf

[Timer]
OnCalender=
OnCalendar=13:00
OnBootSec=120
# /etc/systemd/system/updatedb.timer.d/updatedb.timer.conf

[Timer]
OnCalender=
OnCalendar=13:05
OnBootSec=180

Claro que estos valores son ajustables. De esta forma logré disminuir mi tiempo de arranque a tan solo 1 minuto y medio, que no esta nada mal cuando se requiere un arranque veloz.

Espero que este artículo les sea de utilidad.

Enlaces de interés.

Mejorar el tiempo de arranque de Manjaro
linuxmanr4.

Jueves 25 de enero de 2018

Alcance Libre: Promoción Curso Global de Servidores con CentOS 7, modalidad online, febrero de 2018.

Lunes 15 de enero de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

No me he enterado de algo?

Si los siguientes sitios personalizan el contenido para que su base de usuarios sea tan grande:

  • facebook
  • twitter
  • linkedin
  • google ads
¿Por qué ningún startup ha empezado a hacer algo de dietas a domicilio basado en la misma persona y sus características (edad, peso, raza, preferencias, etc)?

Big profit. 
Cristian Trujillo

Filtrado de contenido

El internet es parte inherente del negocio. Ahora se dice que el negocio es internet.

Es decir, todo lo relacionando con el negocio esta ligado a las redes. Con ello llegaron muchos aspectos en seguridad. Uno de ellos es lo que pueden navegar los usuarios dentro de la empresa.

Los usuarios al interior de la empresa pueden tener la sensación de estar en el anonimato, dentro de una mampara, cubículo u oficina.

Unas de las justificaciones para tener filtrado de contenido  es la productividad.

Los usuarios pueden llegar a perder demasiado tiempo en paginas que no estan relacionadas con el negocio. Incluso pueden estar descargando pirateria. Que pudiera llegar a comprometer directamente a la empresa.

Aunado a que usuarios que si requieren ancho de banda lo vean disminuido por usuario que lo consumen en ocio.

Las soluciones van desde lo mas laborioso hasta lo mas industrual.

Ediitar el archivo de hosts, los sistemas operativos pueden ser enga;anados al medifical la tabla de DNS local. Haciendo una relacion falsa entre un dominio poco productivo hacia alguna direccion interna o cualquier otra.

Instalando un antivirus. Algunos de estos productos ya cuentan con filtrado de contenido administrado con contrase;a para evitar que el usuario tenga acceso a modificar.

Instalando un servidor proxy. Queda en el punto intermedio entre la red de los usuarios y la nube de internet. Es la solucion mas ampliamente utilizada. Se puede administrar de forma centralizada.

Instalando hardware especializado.

Integrando servicios de la nube.

Viernes 12 de enero de 2018

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Interactive Line Editing in .NET

Even these days, I still spend too much time on the command line. My friends still make fun of my MacOS desktop when they see that I run a full screen terminal, and the main program that I am running there is the Midnight Commander:

Every once in a while I write an interactive application, and I want to have full bash-like command line editing, history and search. The Unix world used to have GNU readline as a C library, but I wanted something that worked on both Unix and Windows with minimal dependencies.

Almost 10 years ago I wrote myself a C# library to do this, it works on both Unix and Windows and it was the library that has been used by Mono's interactive C# shell for the last decade or so.

This library used to be called getline.cs, and it was part of a series of single source file libraries that we distributed with Mono.

The idea of distributing libraries that were made up of a single source file did not really catch on. So we have modernized our own ways and now we publish these single-file libraries as NuGet packages that you can use.

You can now add an interactive command line shell with NuGet by installing the Mono.Terminal NuGet package into your application.

We also moved the single library from being part of the gigantic Mono repository into its own repository.

The GitHub page has more information on the key bindings available, how to use the history and how to add code-completion (even including a cute popup).

The library is built entirely on top of System.Console, and is distributed as a .NET Standard library which can run on your choice of .NET runtime (.NET Core, .NET Desktop or Mono).

Check the GitHub project page for more information.

Jueves 11 de enero de 2018

Fco. de la Torre Inguanzo

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

Convertir imágenes de formato HEIC a JPG con Linux

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

Hace unos días tuve un problema muy interesante. Les cuento, ustedes saben que buena parte del negocio de Apple es aumentar el tamaño del espacio de almacenamiento rentado en iCloud.

Me parece que de inicio dan 5 GB que es claramente insuficiente y se llena con mucha facilidad. Es por eso que muchas personas optan por comprar un plan de almacenamiento que varía un poco de país en país.

Planes de almacenamiento de iCloudPrecios a Enero del 2018.

Un compañero llegó a mi por una advertencia de que su espacio en iCloud ya estaba lleno. Le expliqué que si quería almacenar sus fotos en iCloud tendría que pagar a menos que …

Google Fotos

Se que existe una versión de Google Fotos para iOS, solo se necesita una cuenta de Google para que empiece a almacenar las fotos que se toman en el iPhone o en el iPad y se sincronizan automáticamente.

Tengo entendido que el espacio es ilimitado si se guardan en formato de alta calidad, pero no muy alta calidad (estos aparatos nuevos abusan).

Mi compañero me dijo que no importaba, solo quería tener un respaldo de sus fotos por si algún dispositivo se pierde o descompone.

Y funcionó muy bien !!! De inmediato las fotos se empezaron a subir a la nube de Google, lo mejor es que también tiene acceso mediante el sitio web así que todo era miel sobre hojuelas hasta que un día …

HEIC ¿Qué demonios es eso?

Un buen día quiso descargar un álbum de imágenes selectas y ¡Oh sorpresa! nos dimos cuenta de que los archivos tenían una extensión extraña, todos las imágenes tenían la extensión .heic .

Pues resulta que HEIC (High Efficiency Image File Format) es el nuevo formato que utilizan los dispositivos Apple, creo que a partir de iOS 11. Y por lo visto todavía no es muy conocido y algunos no están muy contentos con “la novedad” (léase HEIC file format is Unwelcomed!).

Google Fotos no tiene problemas para mostrar los archivos, pero al descargarlos lo hace en su formato original y actualmente no es muy conocido. Ninguno de mis programas para visualizar imágenes en Linux lo reconocía ¡Ni siquiera GIMP! y eso amigos, eso si que es un problema.

Intenté un cambio de formato con ImageMagick pero tampoco. Así que era tiempo de buscar opciones.

Tifig

Afortunadamente me encontré en GitHub con un programa muy verde pero que en mi caso funcionó muy bien llamado tifig.

Tuve que instalarlo a mano, porque todavía no existe un paquete en AUR para este programa. Hay un repositorio para Ubuntu, pero en mi caso tuve que instalar algunos programas dependientes.

En la misma página del proyecto se ofrecen las distintas opciones de instalación.

De HEIC a JPG por montones

Una vez instalado tifig todo es más sencillo.

Forma de uso:

Converts iOS 11 HEIC images to practical formats
Usage:
  tifig [OPTION...] input_file [output_file]

  -i, --input arg            Input HEIF image
  -o, --output arg           Output image path
  -q, --quality [=arg(=90)]  Output JPEG quality (default: 90)
  -v, --verbose              Verbose output
  -w, --width arg            Width of output image
  -h, --height arg           Height of output image
  -c, --crop                 Smartcrop image to fit given size
  -p, --parallel             Decode tiles in parallel
  -t, --thumbnail            Use embedded thumbnail
      --version              Show tifig version 

Sin embargo, ejecutar un comando por cada archivo es tardado y tedioso. Al principio pensé en alguna solución con Bash, pero luego apareció parallel como una alternativa más eficiente.

Por ejemplo, esta instrucción convierte todos los archivos .heic del directorio actual a jpg y además los redimensiona a 1200 pixeles de ancho.

parallel -j 3 --eta tifig -w 1200 '{}' '{.}.jpg' ::: *.heic

A parallel le indiqué que utilizara 3 núcleos del microprocesador con -j 3 (tengo un microprocesador de 4 núcleos) y que me mostrara un tiempo aproximado de finalización con –eta.

De este modo la conversión es mucho más veloz.

La solución web

Existe una página que ofrece la conversión de heic a jpg que se llama heictojpg.com que hace un excelente trabajo.

HeictojpgHeic to JPG para trabajos pequeños.

El único problema es que esta limitado a 50 imágenes por lote.

Supongo que con el tiempo el formato heic se agregará a los formatos soportados por los principales programas de edición gráfica. Pero por el momento esto es lo que hay.

¡Felices conversiones!.

Imagen destacada de Medhat Dawoud en Unsplash

Convertir imágenes de formato HEIC a JPG con Linux
linuxmanr4.

Miércoles 03 de enero de 2018

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Viernes 15 de diciembre de 2017

Alcance Libre: AlcanceLibre.org en Github.

Viernes 08 de diciembre de 2017

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Default ColorSpaces

Recently a user filed a bug where the same RGB color when converted into a UIColor, and later into CGColor is different that going from the RGB value to a CGColor directly on recent versions of iOS.

You can see the difference here:

What is happening here is that CGColors that are created directly from the RGB values are being created on kCGColorSpaceGenericRGB colorspace. Starting with iOS 10, UIColor objects are being created with a device specific color space, in my current simluator this value is kCGColorSpaceExtendedSRGB.

You can see the differences in this workbook

Miércoles 06 de diciembre de 2017

Visualización de trabajo distribuido

Hace mucho tiempo vi una visualización de como se desarrolla Moodle [0], lo cual es muy interesante, de hecho me pareció tan interesante que le dedique un rato a eso y cree un par de visualizaciones de proyectos en los que estaba trabajando o a los que tenia acceso con gource [1] y hasta me sentí tentado a probar la versión para logs de servidores [2], pero ya no me dio tiempo hoy que estaba buscando un correo de otra cosa dí con mi mensaje en su momento, aquí lo reproduzco.

from: Victor Martinez
to: yoreme
date: Sun, Nov 11, 2012 at 2:33 PM
subject: Visual representation of yoreme repo

Recently one Moodle developer posted one nice video about the history of Moodle via the actions on the code repository, well, after three days playing with the tool (gource) I finally got one myself from our own repo… I will not enter too much in details but each second passes a day and if there is not activity in a second skip to the next activity (let’s say we skip the time the repo is idle or without modifications) in any case its interesting to watch is a 75MB ogv and only last 2 minutes, but hey! the original output was 17.5GB. Here is the link http://vic.jerx.net/yoreme.ogv

Making takes lots of cpu and hdspace, as you need first to pipe all images to disk and then compress… I just noticed that forgot to link the page for the package gource [1] there are very good examples on their wiki to use it, on Debian you may need to change codecs I used, also you need first to get a log from the repo you want to visualize its well documented, if you only want to see the video is very easy, if you want to write it to disk I have done this:

gource yoreme.log –seconds-per-day 1 –camera-mode overview –auto-skip-seconds 1 -o yoreme.ppm

and then

ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i yoreme.ppm -crf 1 -bf 0 -b 5000k yoreme.ogv

As Debian don’t have some of the libs and codecs mentioned in the gource page, also gource exists as Debian package.

El día de hoy Debian incluye muchas más cosas sobre gource y ffmpeg y también mi CPU en casa es mucho más rápido por lo mismo estoy haciendo uno de planetalinux [3] que probablemente termine en youtube dependiendo del tamaño del archivo, si quieren ustedes probar, que hoy en día es bastante fácil, simplemente instalando gource.

gource planetalinux/ -f –auto-skip-seconds 1 –seconds-per-day 1

Es decir que cree la visualización de planetalinux en pantalla completa, se salte cuando no haya actividad en un segundo y que cada segundo presente un día… lo cual con todo es largo, mhhh tendré que subir el resultado de la oficina 2.2GB no es algo que en DSL con 383kbs sea placentero subir.

La encantación fue:

gource -1280×720 –auto-skip-seconds 1 –seconds-per-day .09 –stop-at-end -o – | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i – -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 planeta.mp4

Archivo fuente 2.2 GB Planeta.mp4

[0] https://www.youtube.com/watch?v=Ut5JoqIaUHs
[1] http://gource.io/
[2] http://logstalgia.io/
[3] http://planetalinux.org

Domingo 03 de diciembre de 2017

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Viernes 01 de diciembre de 2017

Héctor Daniel Cortés

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

Rumbo al Mundial 2018

Cada Mundial de futbol nos quejamos del sorteo y los equipos que nos tocaron. Ob-vi-o. Acostumbrados a la mediocridad de la CONCACAF...

Pero ¿realmente nos tocó un grupo difícil? Veamos los grupos acompañados del raking mundial de la FIFA . Frente a cada grupo un par ordenado con el promedio del ranking y la desviación estándar del grupo correspondiente.

Grupo C: (17.75,14.22)
[9] Francia
[11] Perú
[12] Dinamarca
[39] Australia

Grupo E: (18.25,16,13)
[2] Brasil
[8] Suiza
[26] Costa Rica
[37] Serbia

Grupo B: (20.25,18.52)
[3] Portugal
[6] España
[32] Irán
[40] Marruecos

Grupo D: (23.25,19.38)[4] Argentina
[17] Croacia
[22] Islandia
[50] Nigeria

Grupo F: (23.5,24.85)
[1] Alemania
[16] México
[18] Suecia
[59] Korea

Grupo H: (24.5,21.38)
[7] Polonia
[13] Colombia
[23] Senegal
[55] Japón

Grupo G: (25.75,22.08)
[5] Bélgica
[15] Inglaterra
[27] Túnez
[56] Panamá

Grupo A: (45,22.33)
[21] Uruguay
[31] Egipto
[63] Arabia Saudí
[65] Rusia 

Podemos suponer que los grupos con promedios más altos, y menor desviación son los grupos más difíciles. Por el contrario, los grupos con promedios más bajos y mayor desviación serían los más fáciles.

Si además consideramos que la casa siempre tiene ventaja, no es de extrañar que Rusia se encuentre en el grupo más fácil: el grupo A. Junto con Uruguay podrían pasar a la siguiente ronda.

El grupo C sería el más difćil: cualquiera de los tres, Francia, Perú y Dinamarca podría pasar a la siguente ronda.

Los grupos E, B y G comparten una distribución de rankings parecida: los dos primeros son mucho más fuertes que los demás, así que podríamos esperar por parte del grupo E a Brasil y Suiza, por el grupo B a Portugal y España, y por el grupo G a Bélgica e Inglaterra.

Por último, en los grupos F, D y H, se podría esperar en la segunda vuelta al equipo con el mejor ranking: Alemania, Argentina y Polonia respectivamente, dejando a dos equipos pelear por el segundo puesto: entre México y Suecia, Croacia e Islandia, y Colombia con Senegal.

En cuanto al quinto partido de la Selección Nacional Mexicana, por el momento mejor ni hablamos.


Sábado 25 de noviembre de 2017

Excel 2013, convertir mes en texto a numero

Si tienes un mes en formato ENERO este lo cambiara a 02, funciona en la versión de Excel 2013, solo se tienen que reemplazar J2 por la celda que contenga el mes en formato de texto, espero que le sea de ayuda a alguien.

=SI(J2="ENERO","01",SI(J2="FEBRERO","02", 
SI(J2="MARZO","03",SI(J2="ABRIL","04", 
SI(J2="MAYO","05",SI(J2="JUNIO","06", 
SI(J2="JULIO","07",SI(J2="AGOSTO","08", 
SI(J2="SEPTIEMBRE","09", 
SI(J2="OCTUBRE","10", 
SI(J2="NOVIEMBRE","11", 
SI(J2="DICIEMBRE","12","ERROR"))))))))))))

Miércoles 22 de noviembre de 2017

Mover ‘logical volume’ de un disco a otro con pvmove en línea

Hace meses decidi eliminar completamente Windows de mi laptop de trabajo, despues de eliminar Windows y sus particiones tuve ganas de probar ZFS, por lo que tuve la necesidad de reacomodar datos en el disco pero no queria reinstalar y como afortunadamente siempre uso Volume Groups pues decidi mover algunos LV aka Logical Volume, el procedimiento que voy a realizar solo voy a mover datos dentro de un mismo disco a diferente particion, pero sirve para mover datos entre discos.

Layout de Particiones actual

  • /dev/sda1 -> 40MB (diag)
  • /dev/sda2 -> 16GB (Recovery)
  • /dev/sda3 -> 100GB (NTFS Windows c:\)
  • /dev/sda4 -> 350GB (Particion Extendida)
    • /dev/sda5 -> 150GB (el Volume Group vg_DragonBorn, con 4 LV)
    • /dev/sda6 -> 200GB (NTFS Windows d:\)

El Volume Group esta distribuido de la siguiente forma

  • lv_root -> 37GB para /
  • lv_swap -> 10GB para SWAP
  • lv_home -> 50GB para /home
  • lv_opt -> 50GB para /opt

Objetivo

La idea es que la particion /dev/sda3 contenga el volume group, eliminar la particion extendida /dev/sda4 y crear una particion para ZFS y ahi poner /opt

Primeros Pasos

Despues de eliminar las particiones windows asi se veian en gparted

Estado actual de particionesEstado actual de particiones

Procedemos a crear una particón, en la primer sección de sin asignar

Crear nueva particiónCrear nueva partición

Seleccionamos tipo lvm2 en sistema de archivos y le damos a añadir

Seleccionamos tipo lvm

 

Despues damos en aplicar cambios en gparted

aplicar cambios

con lo anterior se ha cread /dev/sda3 por lo que procedemos a cerrar gparted y abrir una consola y primero inicializamos la partición /dev/sda3 para el uso con LVM.

Incializacion de particion o disco

Si tu deseas mover de disco y no de particion como es mi caso, reemplazar /dev/sda3 por tu nuevo disco, si es el disco completo no requiere una particion podrias incializar por completo el disco

sudo pvcreate /dev/sda3

pvcreate /dev/sda3

Extendemos el volume group con la nueva particion inicializada

sudo vgextend vg_DragonBorn /dev/sda3

vgextend vg_DragonBorn /dev/sda3

Mover los datos con pvmove

Mi primer logical volume a mover es lv_swap,

sudo pvmove -v (verbose) -n (nombre de logical volume) /disco/fuente /disco/destino

sudo pvmove -v -n lv_swap /dev/sda5 /dev/sda3

Despues de unos minutos u horas dependiendo del tamaño del logical volume o de los discos a mover, veremos una pantalla simliar

pvmove success

Hacer esto por los volumenes logicos que se quieran migrar

 

Martes 21 de noviembre de 2017

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Mono's TLS 1.2 Update

Just wanted to close the chapter on Mono's TLS 1.2 support which I blogged about more than a year ago.

At the time, I shared the plans that we had for upgrading the support for TLS 1.2.

We released that code in Mono 4.8.0 in February of 2017 which used the BoringSSL stack on Linux and Apple's TLS stack on Xamarin.{Mac,iOS,tvOS,watchOS}.

In Mono 5.0.0 we extracted the TLS support from the Xamarin codebase into the general Mono codebase and it became available as part of the Mono.framework distribution as well as becoming the default.

Viernes 10 de noviembre de 2017

José Oviedo

José Oviedo
oviedo.mx

Certificados SSL Gratis con Let’s Encrypt

Let’s Encrypt es un esfuerzo, impulsado por la Fundación Linux, para crear una entidad certificadora que ofrezca certificados SSL abiertos, libres, gratuitos y automáticos.

Para instalar Let’s Encrypt en nuestra distribución Ubuntu/Debian ejecutamos lo siguiente:

apt install letsencrypt
apt install python-letsencrypt-apache

Y después para iniciar la configuración de nuestros dominios ponemos:

letsencrypt –apache –redirect -d DOMINIO.COM

Y listo!!.., con eso tenemos redireccionamiento desde HTTP > HTTPS y el HTTPS configurado correctamente.

Lo único es que el certificado no dura 1 año, pero para renovarlo ejecutar este comando:

letsencrypt renew

Pueden ponerlo en el CRON y listo otra vez

Sí su distribución no cuenta con el programa letsencrypt pueden utilizar otro llamado certbot, las instrucciones son las mismas:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get install python-certbot-apache
sudo certbot –apache -d DOMINIO.COM

Fuente:
https://ayudawp.com/lets-encrypt-certificado-ssl-libre-y-gratuito-para-asegurar-tu-web-con-https/
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

Fco. de la Torre Inguanzo

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

Impresora compartida con samba pide usuario y contraseña

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

A lo mejor el título de este artículo no es muy claro. Voy a intentar explicar la situación. Generalmente mando mis trabajos de impresión a la impresora compartida de un equipo que utiliza Windows 7. Usualmente no había tenido problemas hasta después de la última actualización de Manjaro en la que para mandar imprimir me pide un nombre de usuario y una contraseña.

Al principio creí que era la contraseña de root, pero luego me la volvía a pedir. Intenté con mi usuario de linux y tampoco. Lo único que funcionó era el nombre de usuario y contraseña de la computadora con Windows. Bueno ya era un avance.

En ocasiones anteriores este tipo de problemas se arreglaban solos o bastaba con dar de alta nuevamente la impresora para que desaparecieran pero ese no fue el caso.

Durante más de una semana me acostumbré a teclear el usuario y la contraseña. Funcionaba pero era poco práctico, ya era hora de buscar una solución.

Configuración de impresión.

Manjaro tiene un programa que se llama Configuración de impresión que es donde administro las impresoras que tengo dadas de alta en mi sistema. Supuse que la solución era un poco obvia, decirle a mi Manjaro que almacenara el nombre de usuario y contraseña en lugar de teclearlo cada vez que quería imprimir.

Cambiar el URI del dispositivoNo almacena el usuario y la contraseña.

Incluso existe un espacio en donde se puede especificar un usuario y contraseña en donde dice Autenticación, lamentablemente después de varios intentos me di cuenta de que no guarda esa información y en la siguiente impresión la vuelve a pedir. Así que era necesario probar otro enfoque.

Mediante la página de CUPS.

Para entrar a la página de CUPS solo hay que visitar http://localhost:631/ , luego el menú AdministraciónAdministrar Impresoras .. MantenimientoModificar Impresora (o ya de plano dar de alta una nueva impresora).  Seleccionar la opción que dice: Windows Printer via SAMBA y en ese lugar se le puede especificar el usuario y contraseña de la conexión a la impresora.

Modificar impresora en CUPSAquí es donde va a guardar la información de la conexión.

La conexión quedaría más o menos así:

smb://usuario:contraseña@ip_computadora/impresora_compartida

Me pasó que el nombre de usuario de la computadora con Windows incluía un espacio, en ese caso, se agrega un %20 en el lugar donde va el espacio, algo más o menos así:

smb://usuario%20con%20espacio:contraseña@ip_computadora/impresora_compartida

Lo que sigue es guardar los cambios, hacer algunas pruebas y si todo salio bien, ya no pedirá el usuario y la contraseña. Bueno, hasta la próxima actualización de Manjaro.

Espero que este consejo les sea de utilidad. ¡Hasta la próxima!.

Enlaces.

 

Impresora compartida con samba pide usuario y contraseña
linuxmanr4.

Viernes 03 de noviembre de 2017

Jonathan Hernández

Jonathan Hernández
Ion

Hola

alert("hola");
 

Miércoles 25 de octubre de 2017

Alcance Libre: Promoción servicio de configuración de servidor de correo electrónico.

Viernes 20 de octubre de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Excercising my trollerance at #EDUSOL

EDUSOL is back to life!

The online encounter I started together with my friend Pooka twelve years ago (Encuentro en Línea de Educación y Software Libre, Online Encounter of Education and Free Software) was held annually, between 2005 and 2011 if I recall correctly. Then, it went mute on a six year hiatus. This year it came back to life. Congratulations, Pooka, Sheik and crew!

Anyway, this is a multimodal online encounter — They managed to top the experience we had long time ago. As far as I can count, it now spans IRC, Telegram, Twitter, YouTube chat, plus a Google Hangouts → Youtube videoconference... And I am pushing for some other interaction modes to be yet added (i.e. using Meet Jitsi as well as Google Hangouts as the YouTube source)... ... ...

Anyway, between sessions and probably thanks to a typo, I was described as Siempre eres trolerante. I don't know if the person in question wanted to say I'm always trolling or always tolerant, but I like the mix, plus the rant part once it is translated to English.

So, yes, I enjoy being trollerant: I am a ranting troll, but I excercise tolerance towards others. Yay!

Lunes 09 de octubre de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Achievement unlocked - Made with Creative Commons translated to Spanish! (Thanks, @xattack!)

I am very, very, very happy to report this — And I cannot believe we have achieved this so fast:

Back in June, I announced I'd start working on the translation of the Made with Creative Commons book into Spanish.

Over the following few weeks, I worked out the most viable infrastructure, gathered input and commitments for help from a couple of friends, submitted my project for inclusion in the Hosted Weblate translations site (and got it approved!)

Then, we quietly and slowly started working.

Then, as it usually happens in late August, early September... The rush of the semester caught me in full, and I left this translation project for later — For the next semester, perhaps...

Today, I received a mail that surprised me. That stunned me.

99% of translated strings! Of course, it does not look as neat as "100%" would, but there are several strings not to be translated.

So, yay for collaborative work! Oh, and FWIW — Thanks to everybody who helped. And really, really, really, hats off to Luis Enrique Amaya, a friend whom I see way less than I should. A LIDSOL graduate, and a nice guy all around. Why to him specially? Well... This has several wrinkles to iron out, but, by number of translated lines:

  • Andrés Delgado 195
  • scannopolis 626
  • Leo Arias 812
  • Gunnar Wolf 947
  • Luis Enrique Amaya González 3258

...Need I say more? Luis, I hope you enjoyed reading the book :-]

There is still a lot of work to do, and I'm asking the rest of the team some days so I can get my act together. From the mail I just sent, I need to:

  1. Review the Pandoc conversion process, to get the strings formatted again into a book; I had got this working somewhere in the process, but last I checked it broke. I expect this not to be too much of a hurdle, and it will help all other translations.
  2. Start the editorial process at my Institute. Once the book builds, I'll have to start again the stylistic correction process so the Institute agrees to print it out under its seal. This time, we have the hurdle that our correctors will probably hate us due to part of the work being done before we had actually agreed on some important Spanish language issues... which are different between Mexico, Argentina and Costa Rica (where translators are from).

    Anyway — This sets the mood for a great start of the week. Yay!

AttachmentSize
Screenshot from 2017-10-08 20-55-30.png103.1 KB

Jueves 28 de septiembre de 2017

Héctor Daniel Cortés

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

Héctor y el secreto de la felicidad

Ayer ví una película de Simon Pegg titulada Héctor y el secreto de la felicidad.

Debo decir que me gustó.

«Un psiquiatra busca en el mundo para encontrar el secreto de la felicidad»

Aunque no voy a platicar la película, sí voy a mencionar las quince notas en el cuaderno de Héctor, así que, estimados lectores (¿todavía queda alguno por aquí?), están advertidos.

  1. Hacer comparaciones puede estropear tu felicidad.
  2. Mucha gente piensa que la felicidad es ser rico o importante.
  3. Muchas personas ven la felicidad sólo en su futuro.
  4. La felicidad podría ser la libertad de amar a más de una mujer al mismo tiempo.
  5. A veces la felicidad es no saber toda la historia.
  6. Evitar la infelicidad no es el camino hacia la felicidad.
  7. ¿La persona con la que te encuentras te trae predominantemente A): Arriba o B): Abajo?
  8. La felicidad es responder a tu vocación.
  9. La felicidad es ser amado por ser quien eres.
  10. Sweet Potato Stew!
  11. El miedo es un impedimento para la felicidad.
  12. La felicidad es sentirse completamente vivo. 
  13. La felicidad es saber celebrar.
  14. Escuchar es amar.
  15. La nostalgia no es lo que solía ser.
Y aunque no lo escribe en el cuaderno, termina diciendo «Todos tenemos la obligación de ser felices».

Ver en NetFlix

Domingo 24 de septiembre de 2017

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Terremoto 19S17

Hot:

Soy una persona afortunada, muy afortunada, no solo estoy vivo, si no que todas las personas a las que amo también lo están, tengo un techo donde dormir, y acceso a todos los servicios.
Sobreviví al terremoto del 19 de septiembre de 1985, cuando apenas contaba con 12 años, en su momento no alcance a visualizar el tamaño real del desastre que se provocó, sin embargo, por mucho tiempo no hubo escuela, no había agua, y teníamos escases de comida.

Hoy me congratulo de haber sobrevivido al terremoto del 19 de septiembre de 2017, si bien el daño no fue tan grande como el de 1985, si fue, a mi juicio, el terremoto que más temor me ha causado, y ello se debe a que lo sentí en un séptimo piso, en frente del WTC, y muy cerca del lugar (escasas cuadras) en donde muchos edificios se derrumbaron.

Por las condiciones del edificio, nuestro protocolo de protección civil, indica que debemos esperar hasta que pase el movimiento telúrico para hacer el desalojo, ello implica que debes de confiar a ojos cerrados que la integridad estructural del edificio se conservará, solo te acercas a una de la columnas principales y esperas, esperas y observas todo el movimiento a tu alrededor, esperas y escuchas los ruidos que emite el edificio al resistirse al movimiento, esperas, y tratas de conservar la calma.

Los segundos son eternos, y el proceso de desalojo tiende a ser frustrante, si bien estamos organizados, sabemos que hacer y cómo hacerlo, ello no implica que por nuestra mente pasen muchas ideas, donde las principales son el comunicar nuestro estado a los seres amados y esperar lo mismo de ellos.

Como es de esperarse, las comunicaciones fallaron, y había acceso esporádico a datos por medio del celular, las actividades comerciales fueron suspendidas, y de pronto, todos pensaban en como regresar a sus hogares.

He caminado por muchos kilómetros, hasta un lugar en donde el transito permitía avanzar, en mi trayecto, logre observar lo que para muchos es difícil de entender, lo que los extranjeros no comprenden y admiran, y me refiero al hecho de que la sociedad civil tomo el control del proceso de ayuda.

No solo observe a gente con polines de madera, civiles controlando el tránsito de las principales avenidas de la ciudad, niños ofreciendo agua a la gran cantidad de personas que caminan buscando llegar a su destino, todo esto en menos de una hora después del suceso.

Mas tarde, ya más organizados, la ayuda se concentró en la misión principal, búsqueda y rescate de las víctimas, adicionalmente a ello, una red de soporte de creo, para llevar víveres, comida y medicamentos.
Y al igual que en 1985, somos y seremos ejemplo de solidaridad, de organización, y de un fuerte sentido de comunidad, como en ese momento, hoy día me siento orgulloso de vivir en donde vivo, de ser lo que soy, un mexicano.
Los temblores siguen, y al menos a nivel personal, estamos subsanando los errores que encontramos en este evento, a fin que, en caso de requerirse nuevamente, estos no se presenten.

Ello no implica que no sienta un temor terrible al escuchar la alerta sísmica, consientes que tarde o temprano llegara una réplica de una intensidad suficiente como para volver la activar.

Como lo dije en el inicio, soy una persona afortunada, muy afortunada.

Martes 19 de septiembre de 2017

Héctor Daniel Cortés

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

2017-09-19 18:14:39 (M7.1) PUEBLA, MEXICO 18.6 -98.4 (82934)

== PRELIMINARY EARTHQUAKE REPORT ==



Region: PUEBLA, MEXICO
Geographic coordinates: 18.584N, 98.399W
Magnitude: 7.1
Depth: 51 km
Universal Time (UTC): 19 Sep 2017 18:14:39
Time near the Epicenter: 19 Sep 2017 13:14:39
Local standard time in your area: 19 Sep 2017 12:14:39

Location with respect to nearby cities:
8 km (5 miles) ESE (111 degrees) of Iz�car, Puebla, Mexico
22 km (14 miles) ENE (71 degrees) of Atencingo, Puebla, Mexico
36 km (22 miles) ENE (75 degrees) of Axochiapan, Morelos, Mexico
56 km (35 miles) SSW (202 degrees) of Puebla, Puebla, Mexico
123 km (76 miles) SE (139 degrees) of MEXICO CITY, D.F., Mexico


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us 2000ar20

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/us2000ar20
or
https://earthquake.usgs.gov/

National Earthquake Information Center
U.S. Geological Survey


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

Lunes 18 de septiembre de 2017

Promoviendo Software Libre: Conocer el total de memoria RAM en SOLARIS

Miércoles 13 de septiembre de 2017

OSI Model Cheat Sheet

If anyone need a good OSI Model cheat sheet, as me:

OSI Model

Domingo 03 de septiembre de 2017

WordPress with Let's Encrypt SSL Certificate on a Load Balancer

Hi again,

As many of you know a lot of “Production” applications need to be configured to provide High Availability. With that in mind, a best practice architecture to your application is to add a Load Balancer as a front end who distribute your traffic between your application nodes, as you can appreciate on the next image:

Load Balancer HA

SSL Offloading

In this case, my “Production” application is my blog, and I will install a SSL Certificate on the Cloud Load Balancer(CLB) to offloading the encryption/decryption to the CLB instead of doing it on the webserver. That way your webservers uses port 80 (HTTP), as always, and you serve your content trought port 443(HTTPS).

SSL-Offloading

Here are the what I use to configure my WordPress with SSL Certificate:

  • SSL Certificate issued using Let’s Encrypt
  • A Client of Let’s Encrypt called acme
  • A Cloud Load Balancer
  • A WordPress installation

Step 1: Install acme.sh client

There is a lot of ACME clients supported by Let’s Encrypt, the most popular is Certbot. However, I prefer to use acme.sh.

Let’s install it:

git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
# Create a data home directory
sudo mkdir /opt/acme/data
# Actual command to install it
bash acme.sh --install --home /opt/acme --config-home /opt/acme/data --certhome /opt/acme/data/ssl-certs --accountemail your@email.com

Step 2: Issue SSL Certificate

Once acme.sh is installed, we proceed to issue our first SSL Certificate:

/opt/acme/acme.sh --issue -d example.com -w /var/www/vhosts/example.com/public_html
[Mon Aug 25 06:04:07 UTC 2017] Creating domain key
[Mon Aug 25 06:04:07 UTC 2017] The domain key is here: /opt/acme/data/ssl-certs/example.com/example.com.key
[Mon Aug 25 06:04:07 UTC 2017] Single domain='example.com'
[Mon Aug 25 06:04:07 UTC 2017] Getting domain auth token for each domain
[Mon Aug 25 06:04:07 UTC 2017] Getting webroot for domain='example.com'
[Mon Aug 25 06:04:07 UTC 2017] Getting new-authz for domain='example.com'
[Mon Aug 25 06:04:08 UTC 2017] The new-authz request is ok.
[Mon Aug 25 06:04:08 UTC 2017] Verifying:example.com
[Mon Aug 25 06:04:11 UTC 2017] Success
[Mon Aug 25 06:04:11 UTC 2017] Verify finished, start to sign.
[Mon Aug 25 06:04:11 UTC 2017] Cert success.
-----BEGIN CERTIFICATE-----
MIIE/zCCA+egAwIBAgISA2AIs/G8gWjkRkNOUb7zmqh1MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzA4MjgwNTA0MDBaFw0x
NzExMjYwNTA0MDBaMBkxFzAVBgNVBAMTDmNvb2tpZWxhYnMubmV0MIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8/4fXH0dOHcSlyXpsBoULhwQYkz4m0J
MegRHU2mhyy/jfKWM6KHDxHpFWUFajLJ/ORE4uncvjmRYeSVBxgv2R2cYoZyKd6v
txT+Cdj3jD9fBfDerfdfsdfsd6Y6mlr6Im61afKsFXIgLsprBpK22JU6HOz+0Fdo
lan09aaF8zLPtVzdfJw9MU55K7nzerxO8j4ro2lve0PHExkMIBCrXey50wcuqQRY
hwkbbXsm+wTES7TCn3tooSzFq6ore3JrSckxhFQ96EOea0s9CgYnw4d9rU/b3jyK
bFCILEJK64vgFHx0qvd0hBJFJG/HUtAXAVrFQjjlZlCmCMbnee1UTQIDAQABo4IC
DjCCAgowDgYDVR0pasoasoasogWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
BQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBR2KRpXKKgTorwfXpo44wgKyFUl
QzAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRj
MGEwLgYIKwYBBQUHMAASdTdddHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5v
cmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v
cmcvMBkGA1UdEQQSMBCCDmNvb2tpZWxhYnMubmV0MIH+BgNVHSAEgfYwgfMwCAYG
Z4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcCARYaaHR0cDovL2Nw
cy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGbVGhpcyBDZXJ0aWZp
Y2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5aW5nIFBhcnRpZXMg
YW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0aWZpY2F0ZSBQb2xp
Y3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcvcmVwb3NpdG9yeS8w
DQYJKoZIhvcNAQELBQADggEBAFVGs82tzyVER6U0x7p/Q+6xplDFd6ap/dVX9G6i
eRPf4ayGykPSH9J3ewu398LOQd3DE93oWbqc7PfEC40Z5HqvCEY3fl9auep99/IF
rwhf36J7PXvEsPrUB6pxNFSBw9WX366Z1MP8qoIzm3XYEpp2D/SPniWY5+eQ42Pj
WNxxVksA4kFUF9wgKcrsCNTm0X8GZj5HUXC1OwtlopY2w42QrAMGwz1jM4nxv5Mc
Jim+nT0zmJUhAdQi8ocDjAl2PvcfdgfmkMr9IWH3al/GJSKy3a9Cq+BaIsIUYi6E
8M8Mj+00ONNn1folm9aVn+FW5fVCaxYN32ir8PnoTWkOXK8=
-----END CERTIFICATE-----
[Mon Aug 25 06:04:11 UTC 2017] Your cert is in  /opt/acme/data/ssl-certs/example.com/example.com.cer 
[Mon Aug 25 06:04:11 UTC 2017] Your cert key is in  /opt/acme/data/ssl-certs/example.com/example.com.key 
[Mon Aug 25 06:04:11 UTC 2017] The intermediate CA cert is in  /opt/acme/data/ssl-certs/example.com/ca.cer 
[Mon Aug 25 06:04:11 UTC 2017] And the full chain certs is there:  /opt/acme/data/ssl-certs/example.com/fullchain.cer 

Where the explained options are:

-issue: Issue a new certificate

-d (-domain) : Specifies a domain, used to issue, renew or revoke, etc.

-w (-webroot) : Specifies the web root folder for web root mode. This is the DocumentRoot where your site is hosted and it is necessary to verify it by Let’s Encrypt.

Step 3: Install SSL Certificate on Cloud Load Balancer

So, at this moment we have our SSL Certificate, Private Key, and Intermediate CA Certificate ready to install on our Cloud Load Balancer (CLB)

Your cert is in /opt/acme/data/ssl-certs/example.com/example.com.cer
Your cert key is in /opt/acme/data/ssl-certs/example.com/example.com.key
The intermediate CA cert is in /opt/acme/data/ssl-certs/example.com/ca.cer

So we should go to https://mycloud.rackspace.com -> Rackspace Cloud -> Networking -> Cloud Load Balancers:

Cloud Load Balancer

Then, to Optional Features and Enable/Configure on “Secure Traffic SSL”

Cloud Load Balancer

Finally, we add our SSL Certificate, Private Key, and Intermediate CA Certificate to the CLB and save the configuration:

Cloud Load Balancer

Step 4: Configure WordPress

We are almost done, at this time we already have configured our SSL on the CLB to provide WordPress over HTTPS, however, WordPress is still with HTTP, so we need to reconfigure our WordPress with SSL.

Database queries

First of all, we should update the links from http to https; we are going to do it directly on the database doing the following queries:

Warning: Change all instances of example.com to your own. If you have the www as part of your WordPress Address(URL) in the WordPress Settings, add the ‘www’.

Also, if you have a custom table prefix in the WordPress database, something other than the default ‘wp’, then you must change all the instances of ‘wp’ to your own table prefix.

  1. Update any embedded attachments/img that use http:This one updates the src attributes that use double quotes:
  UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'src=\"http://example.com', \ 
  'src=\"https://example.com') WHERE post_content LIKE '%src=\"http://example.com%';

This one takes care of any src attributes that use single quotes:

  UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'src=\'http://example.com', \ 
  'src=\'https://example.com') WHERE post_content LIKE '%src=\'http://example.com%';
  1. Update any hard-coded URLs for links.This one updates the URL for href attributes that use double quotes:
  UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'href=\"http://example.com', \
  'href=\"https://example.com') WHERE post_content LIKE '%href=\"http://example.com%';

This one updates the URL for href attributes that use single quotes:

  UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'href=\'http://example.com', \
  'href=\'https://example.com') WHERE post_content LIKE '%href=\'http://example.com%';
  1. Update any “pinged” links:
  UPDATE `wp_posts` SET pinged = REPLACE(pinged, 'http://example.com', \
  'https://example.com') WHERE pinged LIKE '%http://example.com%';
  1. This step is just a confirmation step to make sure that there are no remaining http URLs for your site in the wp_posts table, except the GUID URLs.

    You must replace WP_DB_NAME, near the beginning of the query, with the name of your database.

    This will confirm that nowhere in the wp_posts table is there a remaining http URL, outside of the GUID column. This ignores URLs in the GUID column.

    This query only searches; it does not replace anything, nor make any changes. So, this is safe to run. It’s a safe and quick way to check the wp_posts table while ignoring the guid column.

    This SQL query should return an empty set. That would mean that it found no http URLs for your site. (This is all just 1 query. It’s 1 very, very long line.)

    Warning: Remember to replace WP_DB_NAME, near the beginning of the query, with the name of your database.

    SELECT *  FROM `WP_DB_NAME`.`wp_posts` WHERE (CONVERT(`ID` USING utf8) LIKE \
    '%%http://example.com%%' OR CONVERT(`post_author` USING utf8) LIKE '%%http://example.com%%' \ 
    OR CONVERT(`post_date` USING utf8) LIKE '%%http://example.com%%' \ 
    OR CONVERT(`post_date_gmt` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_content` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_title` USING utf8) LIKE '%%http://example.com%%' \ 
    OR CONVERT(`post_excerpt` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_status` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`comment_status` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`ping_status` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_password` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_name` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`to_ping` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`pinged` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_modified` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_modified_gmt` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_content_filtered` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_parent` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`menu_order` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_type` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`post_mime_type` USING utf8) LIKE '%%http://example.com%%' \
    OR CONVERT(`comment_count` USING utf8) LIKE '%%http://example.com%%');
    
  2. Now, we move to the wp_comments table. This changes any comment author URLs that point to the http version of your site. This is in case you’ve ever replied to a comment while your URL was pointing to http.

  UPDATE `wp_comments` SET comment_author_url = REPLACE(comment_author_url, \ 
  'http://example.com', 'https://example.com') WHERE comment_author_url \ 
  LIKE '%http://example.com%';
  1. This updates the content of the comments on your site. If there are any links in the comments that are linking to an http URL on your site, they will be updated to https.
  UPDATE `wp_comments` SET comment_content = REPLACE(comment_content, 'http://example.com', \ 
  'https://example.com') WHERE comment_content LIKE '%http://example.com%';
  1. Now we move to the wp_postmeta table. This takes care of any custom post meta that points to the http version of your site.
  UPDATE `wp_postmeta` SET `meta_value` = REPLACE(meta_value, 'http://example.com', \ 
  'https://example.com') WHERE meta_value LIKE '%http://example.com%';
  1. Now we move to the wp_options table. Update the “WordPress Address (URL)” and “Site Address (URL)”.

    For the WordPress Address URL, you may have to modify example.com. If you have WordPress installed in some other directory, then modify this according to your own WordPress URL. For example, some people have WordPress installed in a subdirectory named “blog”, and so their WordPress Address would be https://example.com/blog.

    UPDATE `wp_options` SET `option_value` = "https://example.com" \ 
    WHERE `wp_options`.`option_name` = 'siteurl';
    

    This one will update the Site Address URL (this is the home page of your site):

    UPDATE `wp_options` SET `option_value` = "https://example.com" \
    WHERE `wp_options`.`option_name` = 'home';
    

WordPress Control Panel

Besides, with run the queries directly on the database, we can update, or verify,  the blog URLs, by going to Settings > General

And updating your WordPress Address (URL) and Site Address (URL) address fields.

Updating URLs

WordPress Config File

Finally, we should add the following line to our wp_config.php file

$_SERVER['HTTPS']='on';

Now, you have configured WordPress with Let’s Encrypt SSL Certificate on a Load Balancer.

Miércoles 16 de agosto de 2017

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

Fork Bomb

Fork bomb is an infinite loop that repeatedly launches the same process.

:() Defining a function called :

{:|: &} means run the function : and send its output to the : function again and run that in the background.

The ; is a command separator, like &&

: runs the function the first time.

!b00m

#/bin/sh if for comment!! ;-)

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

Notas del Curso de Docker: Principiante

El fin de semana pasado, tuve la fortuna de poder asistir al meetup de Docker, donde nos dieron un curso de Docker para principiantes. A pesar de las dificultades presentadas, ya que al ser un curso totalmente gratuito, a base del esfuerzo de la comunidad se logró bastante bien.

En este primer post, les compartiré mis notas del curso.

En el #SysArmyMxTalks previo, el buen Iván Chavero, nos habló de los fundamentos de los contenedores, si quieren revisar el material, lo encuentran en los enlaces:

Durante el curso, nos dieron una breve introducción a docker, además de ver un fragmento del vídeo de la presentación de Jessie Frazell:

Ver en Youtube

Después de esto, iniciamos con la parte práctica:

Comandos básicos

1. Después de instalar docker, es necesario habilitarlo e iniciarlo

user@computer:$ sudo systemctl status docker
[sudo] password for alex.callejas:
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: dis
Active: inactive (dead)
Docs: http://docs.docker.com
$ sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
$ sudo systemctl start docker

2. Para correr un contenedor mediante docker con nginx, ejecutamos

user@computer:$ sudo docker run nginx
Unable to find image 'nginx:latest' locally
Trying to pull repository registry.fedoraproject.org/nginx ...
Trying to pull repository registry.access.redhat.com/nginx ...
Trying to pull repository docker.io/library/nginx ...
sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3: Pulling from docker.io/library/nginx
94ed0c431eb5: Pull complete
9406c100a1c3: Pull complete
aa74daafd50c: Pull complete
Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3
Status: Downloaded newer image for docker.io/nginx:latest
$

Como es una imagen que no tenemos en un repositorio local, la descarga del repositorio oficial de docker.

3. Si abrimos una terminal alterna, podemos observar que el contenedor se esta ejecutando

user@computer:$ sudo docker ps
[sudo] password for alex.callejas:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2127ad18758a nginx "nginx -g 'daemon ..." 30 seconds ago Up 29 seconds 80/tcp cocky_joliot
$

Se observa que, por default, docker nombra el contenedor como cocky_joliot, esto es debido a que si no especificamos un nombre del contenedor, docker por convención utilizará un adjetivo y el apellido de algún científico (según el código fuente de docker)

4. También podemos ejecutar un contenedor de forma interactiva con una TTY

user@computer:$ sudo docker run ubuntu bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository registry.fedoraproject.org/ubuntu ...
Trying to pull repository registry.access.redhat.com/ubuntu ...
Trying to pull repository docker.io/library/ubuntu ...
sha256:34471448724419596ca4e890496d375801de21b0e67b81a77fd6155ce001edad: Pulling from docker.io/library/ubuntu
d5c6f90da05d: Pull complete
1300883d87d5: Pull complete
c220aa3cfc1b: Pull complete
2e9398f099dc: Pull complete
dc27a084064f: Pull complete
Digest: sha256:34471448724419596ca4e890496d375801de21b0e67b81a77fd6155ce001edad
Status: Downloaded newer image for docker.io/ubuntu:latest
$ sudo docker run -it ubuntu bash
root@a656df585428:/#
root@a656df585428:/# ps
PID TTY TIME CMD
1 ? 00:00:00 bash
11 ? 00:00:00 ps
root@51728d60a8a8:/# pwd
/
root@51728d60a8a8:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@51728d60a8a8:/# exit
exit
$

Se observa que, dentro del contenedor, solamente existe el proceso de bash que ejecutamos, además de contar con toda la estructura de directorios del sistema.

5. En la terminal alterna, podemos observar la ejecución del contenedor

user@computer:$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a656df585428 ubuntu "bash" 45 seconds ago Exited (0) 28 seconds agonifty_payne
2127ad18758a nginx "nginx -g 'daemon ..." 3 minutes ago Exited (0) 2 minutes ago cocky_joliot
$

Con la opción -a, podemos ver todos los contenedores que hemos ejecutado, por default solo se muestran los que se encuentran en ejecución actualmente.

6. Si queremos eliminar un contenedor, utilizamos su CONTAINER ID, de la salida del ps ejecutando

user@computer:$ sudo docker rm 2127ad18758a
2127ad18758a
$ sudo docker rm a656df585428
a656df585428
$

Al revisar en la terminal alterna, ya no se observa dicho contenedor

user@computer:$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$

7. Se le puede indicar al contenedor que se ejecute en background y que utilice un puerto local en particular

user@computer:$ sudo docker run -d -p 80:80 nginx
c81ee76d8cd0b3180b4d543c9d266d13dc1302d396207412eab80d10b091d269
$

Se observa en la terminal alterna, que el proceso se ejecute en el puerto asignado

user@computer:$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c81ee76d8cd0 nginx "nginx -g 'daemon ..." 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp tender_montalcini
$

Podemos revisar con el navegador o con curl que el contenedor nos muestre la página de prueba de nginx en el puerto local configurado

Para detener el contenedor, sin eliminarlo, utilizamos su CONTAINER ID o su nombre

user@computer:$ sudo docker stop tender_montalcini
tender_montalcini
$

8. Si lo deseamos, podemos ejecutar un contenedor con un nombre en particular

user@computer:$ sudo docker run --name test -d -p 80:80 nginx
a13f3e75ea522646ca6b1b6a926cdf680b636924bdbf2c2942b7249acff0e513
$

Lo revisamos en la terminal alterna

user@computer:$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a13f3e75ea52 nginx "nginx -g 'daemon ..." 3 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp test
$

También podemos obtener estadísticas ejecutando

user@computer:$ sudo docker stats

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a13f3e75ea52 0.01% 1.969 MiB / 7.493 GiB 0.03% 7.68 kB / 936 B 0 B / 0 B 2

Estas se muestran en tiempo real.

9. Con el contenedor ejecutándose, también podemos indicarle que corra algún comando en particular, por ejemplo

user@computer:$ sudo docker exec -it test bash
[sudo] password for alex.callejas:
root@a13f3e75ea52:/#
root@a13f3e75ea52:/# ps
bash: ps: command not found
root@a13f3e75ea52:/# exit
exit
$

En este caso en particular, le indicamos que ejecutara, de forma interactiva bash, sin embargo se observa que la imagen del contenedor no tiene el comando ps. Esto puede ser debido a que cuando se creo la imagen, no se le incluyó dicho comando o comandos; esto se puede realizar para que la imagen del contenedor tenga una característica de seguridad en caso de ser necesario.

El proceso para generar la imagen de esta forma se profundizará en una sesión posterior.

10. Para revisar la configuración general del contenedor, ejecutamos

user@computer:$ sudo docker inspect test
[
{
"Id": "a13f3e75ea522646ca6b1b6a926cdf680b636924bdbf2c2942b7249acff0e513",
"Created": "2017-08-12T15:37:29.101171417Z",
"Path": "nginx",
"Args": [
"-g",
"daemon off;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 6912,
"ExitCode": 0,
"Error": "",
"StartedAt": "2017-08-12T15:37:29.606735048Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448",
"ResolvConfPath": "/var/lib/docker/containers/a13f3e75ea522646ca6b1b6a926cdf680b636924bdbf2c2942b7249acff0e513/resolv.conf",
...

Salida completa de la inspección: inspect_test.txt

También podemos obtener información de la inspección en formato de Go

user@computer:$ sudo docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test
172.17.0.2
$ sudo docker inspect --format='{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' test
172.17.0.1
$

11. Para listar las imágenes que hemos utilizado, ejecutamos

user@computer:$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest ccc7a11d65b1 43 hours ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
$

Creación de imágenes

12. La primer opción, aunque no la mejor nos comentaron, es utilizar una imagen básica de algún Sistema Operativo y adecuarla a nuestras necesidades. Por ejemplo, si queremos una imagen de vim, primeramente ejecutamos de forma interactiva una imagen base, para nuestro caso, de fedora e instalamos el paquete de forma tradicional

user@computer:$ sudo docker run -it fedora bash
[root@057ce3fd873e /]# dnf install vim
Fedora 25 - x86_64 2.7 MB/s | 50 MB 00:18
Fedora 25 - x86_64 - Updates 3.8 MB/s | 25 MB 00:06
Last metadata expiration check: 0:00:06 ago on Sat Aug 12 15:51:37 2017.
Dependencies resolved.
=======================================================================================
Package Arch Version Repository Size
=======================================================================================
Installing:
gpm-libs x86_64 1.20.7-9.fc24 fedora 36 k
perl-Carp noarch 1.40-365.fc25 fedora 29 k
perl-Exporter noarch 5.72-366.fc25 fedora 33 k
perl-libs x86_64 4:5.24.2-387.fc25 updates 1.5 M
vim-common x86_64 2:8.0.823-1.fc25 updates 6.7 M
vim-enhanced x86_64 2:8.0.823-1.fc25 updates 1.3 M
vim-filesystem x86_64 2:8.0.823-1.fc25 updates 35 k
which x86_64 2.21-1.fc25 fedora 46 k

Transaction Summary
=======================================================================================
Install 8 Packages

Total download size: 9.6 M
Installed size: 37 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): which-2.21-1.fc25.x86_64.rpm 71 kB/s | 46 kB 00:00
(2/8): gpm-libs-1.20.7-9.fc24.x86_64.rpm 56 kB/s | 36 kB 00:00
(3/8): perl-libs-5.24.2-387.fc25.x86_64.rpm 1.0 MB/s | 1.5 MB 00:01
(4/8): perl-Carp-1.40-365.fc25.noarch.rpm 213 kB/s | 29 kB 00:00
(5/8): perl-Exporter-5.72-366.fc25.noarch.rpm 244 kB/s | 33 kB 00:00
(6/8): vim-enhanced-8.0.823-1.fc25.x86_64.rpm 524 kB/s | 1.3 MB 00:02
(7/8): vim-filesystem-8.0.823-1.fc25.x86_64.rpm 249 kB/s | 35 kB 00:00
(8/8): vim-common-8.0.823-1.fc25.x86_64.rpm 1.3 MB/s | 6.7 MB 00:05
---------------------------------------------------------------------------------------
Total 1.3 MB/s | 9.6 MB 00:07
warning: /var/cache/dnf/updates-87ad44ec2dc11249/packages/vim-enhanced-8.0.823-1.fc25.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fdb19c98: NOKEY
Importing GPG key 0xFDB19C98:
Userid : "Fedora 25 Primary (25) <fedora-25-primary@fedoraproject.org>"
Fingerprint: C437 DCCD 558A 66A3 7D6F 4372 4089 D8F2 FDB1 9C98
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-25-x86_64
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Installing : perl-Carp-1.40-365.fc25.noarch 1/8
Installing : perl-Exporter-5.72-366.fc25.noarch 2/8
Installing : perl-libs-4:5.24.2-387.fc25.x86_64 3/8
Installing : vim-filesystem-2:8.0.823-1.fc25.x86_64 4/8
Installing : vim-common-2:8.0.823-1.fc25.x86_64 5/8
Installing : which-2.21-1.fc25.x86_64 6/8
Installing : gpm-libs-1.20.7-9.fc24.x86_64 7/8
Installing : vim-enhanced-2:8.0.823-1.fc25.x86_64 8/8
Verifying : vim-enhanced-2:8.0.823-1.fc25.x86_64 1/8
Verifying : gpm-libs-1.20.7-9.fc24.x86_64 2/8
Verifying : which-2.21-1.fc25.x86_64 3/8
Verifying : vim-common-2:8.0.823-1.fc25.x86_64 4/8
Verifying : perl-libs-4:5.24.2-387.fc25.x86_64 5/8
Verifying : perl-Carp-1.40-365.fc25.noarch 6/8
Verifying : perl-Exporter-5.72-366.fc25.noarch 7/8
Verifying : vim-filesystem-2:8.0.823-1.fc25.x86_64 8/8

Installed:
gpm-libs.x86_64 1.20.7-9.fc24 perl-Carp.noarch 1.40-365.fc25
perl-Exporter.noarch 5.72-366.fc25 perl-libs.x86_64 4:5.24.2-387.fc25
vim-common.x86_64 2:8.0.823-1.fc25 vim-enhanced.x86_64 2:8.0.823-1.fc25
vim-filesystem.x86_64 2:8.0.823-1.fc25 which.x86_64 2.21-1.fc25

Complete!
[root@057ce3fd873e /]# exit
exit
$

Identificamos el nombre del contenedor, con ayuda de la terminal alterna

user@computer:$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
057ce3fd873e fedora "bash" 2 minutes ago Exited (0) About a minute ago infallible_fermat
a13f3e75ea52 nginx "nginx -g 'daemon ..." 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp test
$

Y hacemos commit al cambio en la imagen, identificándola con un mensaje descriptivo y un nuevo nombre

user@computer:$ sudo docker commit -m "testvim" infallible_fermat imagenvim
sha256:663643920fdd5323b62b0e088a3233a4c95affd91b98b23e5ec25e8cddfd12c3
$

Al revisar las imágenes observamos

user@computer:$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagenvim latest 663643920fdd 12 seconds ago 452 MB
docker.io/ubuntu latest ccc7a11d65b1 43 hours ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
registry.fedoraproject.org/fedora latest 7f17e6b4a386 6 weeks ago 232 MB
$

Existe una importante diferencia en el tamaño de la imagen base contra la imagen que creamos, esto depende de los paquetes que instalamos.

Al ejecutar vim dentro del contenedor, funciona correctamente

user@computer:$ sudo docker run -it imagenvim
[root@c4e11a2ac378 /]# vim

~
~
~
~
~ VIM - Vi IMproved
~
~ version 8.0.885
~ by Bram Moolenaar et al.
~ Modified by <bugzilla@redhat.com>
~ Vim is open source and freely distributable
~
~ Become a registered Vim user!
~ type :help register<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version8<Enter> for version info
~
~

:q!

[root@c4e11a2ac378 /]# exit
exit
$

Podemos revisar la diferencia de imágenes usando el id del contenedor:

user@computer:$ sudo docker ps -a
[sudo] password for alex.callejas:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4e11a2ac378 imagenvim "bash" 41 minutes ago Exited (0) 40 minutes ago clever_meitner
057ce3fd873e fedora "bash" 44 minutes ago Exited (0) 42 minutes ago infallible_fermat
$
$ sudo docker diff c4e11a2ac378
C /root
C /root/.bash_history
A /root/.viminfo
$ sudo docker diff 057ce3fd873e
C /etc
C /etc/ld.so.cache
C /etc/pki/nssdb
C /etc/pki/nssdb/cert9.db
C /etc/pki/nssdb/key4.db
C /etc/profile.d
A /etc/profile.d/vim.csh
A /etc/profile.d/vim.sh
A /etc/profile.d/which2.csh
A /etc/profile.d/which2.sh
A /etc/vimrc
C /root
A /root/.bash_history
D /root/.pki
...

Salida completa de la diferencia: diff_imagenvim.txt

13. La otra forma de crear una imagen, es generando un archivo Dockerfile con las instrucciones de personalización del contenedor. Utilizando el mismo ejemplo, creamos el archivo Dockerfile (por convención, así debe llamarse) con la información necesaria

user@computer:$ vim Dockerfile
FROM fedora
RUN dnf update -y && dnf install -y vim
$

Y ejecutamos la construcción de la imagen

user@computer:$ sudo docker build -t imagenvim:2 .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM fedora
---> 7f17e6b4a386
Step 2/2 : RUN dnf update -y && dnf install -y vim
---> Running in 8b8e9e66ca8a
Last metadata expiration check: 0:00:18 ago on Sat Aug 12 16:01:33 2017.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Upgrading:
curl x86_64 7.51.0-8.fc25 updates 307 k
dbus x86_64 1:1.11.16-1.fc25 updates 255 k
dbus-libs x86_64 1:1.11.16-1.fc25 updates 175 k
emacs-filesystem noarch 1:25.2-3.fc25 updates 66 k
expat x86_64 2.2.3-1.fc25 updates 86 k
file-libs x86_64 5.29-7.fc25 updates 497 k
glibc x86_64 2.24-9.fc25 updates 3.3 M
glibc-common x86_64 2.24-9.fc25 updates 879 k
glibc-langpack-en x86_64 2.24-9.fc25 updates 282 k
gnutls x86_64 3.5.14-1.fc25 updates 754 k
krb5-libs x86_64 1.14.4-8.fc25 updates 741 k
libcrypt-nss x86_64 2.24-9.fc25 updates 44 k
libcurl x86_64 7.51.0-8.fc25 updates 267 k
libdb x86_64 5.3.28-24.fc25 updates 750 k
libdb-utils x86_64 5.3.28-24.fc25 updates 139 k
libgcc x86_64 6.4.1-1.fc25 updates 95 k
libgcrypt x86_64 1.7.8-1.fc25 updates 435 k
libidn2 x86_64 2.0.3-1.fc25 updates 97 k
libsolv x86_64 0.6.28-5.fc25 updates 366 k
libsss_idmap x86_64 1.15.3-1.fc25 updates 83 k
libsss_nss_idmap x86_64 1.15.3-1.fc25 updates 81 k
nspr x86_64 4.15.0-1.fc25 updates 137 k
nss x86_64 3.31.0-1.1.fc25 updates 862 k
nss-softokn x86_64 3.31.0-1.0.fc25 updates 385 k
nss-softokn-freebl x86_64 3.31.0-1.0.fc25 updates 224 k
nss-sysinit x86_64 3.31.0-1.1.fc25 updates 61 k
nss-tools x86_64 3.31.0-1.1.fc25 updates 504 k
nss-util x86_64 3.31.0-1.0.fc25 updates 87 k
openldap x86_64 2.4.44-11.fc25 updates 352 k
pcre x86_64 8.41-1.fc25 updates 199 k
sqlite-libs x86_64 3.14.2-2.fc25 updates 454 k
sssd-client x86_64 1.15.3-1.fc25 updates 134 k
systemd x86_64 231-17.fc25 updates 2.8 M
systemd-libs x86_64 231-17.fc25 updates 421 k
systemd-pam x86_64 231-17.fc25 updates 178 k
tar x86_64 2:1.29-4.fc25 updates 814 k
vim-minimal x86_64 2:8.0.823-1.fc25 updates 525 k

Transaction Summary
================================================================================
Upgrade 37 Packages

Total download size: 18 M
Downloading Packages:
/usr/share/doc/file-libs/ChangeLog: No such file or directory
cannot reconstruct rpm from disk files
...

Verifying : vim-filesystem-2:8.0.823-1.fc25.x86_64 8/8

Installed:
gpm-libs.x86_64 1.20.7-9.fc24 perl-Carp.noarch 1.40-365.fc25
perl-Exporter.noarch 5.72-366.fc25 perl-libs.x86_64 4:5.24.2-387.fc25
vim-common.x86_64 2:8.0.823-1.fc25 vim-enhanced.x86_64 2:8.0.823-1.fc25
vim-filesystem.x86_64 2:8.0.823-1.fc25 which.x86_64 2.21-1.fc25

Complete!
---> 6306acd85190
Removing intermediate container 8b8e9e66ca8a
Successfully built 6306acd85190
$

Salida completa de la construcción de la imagen: build_imagenvim2.txt

Al ejecutar vim dentro del contenedor, funciona correctamente

user@computer:$ sudo docker run -it imagenvim:2
[root@aa039e84b63b /]# vim
~
~
~
~
~ VIM - Vi IMproved
~
~ version 8.0.885
~ by Bram Moolenaar et al.
~ Modified by <bugzilla@redhat.com>
~ Vim is open source and freely distributable
~
~ Become a registered Vim user!
~ type :help register<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version8<Enter> for version info
~
~

:q!

[root@aa039e84b63b /]#
[root@aa039e84b63b /]# uname -a
Linux aa039e84b63b 4.11.11-300.fc26.x86_64 #1 SMP Mon Jul 17 16:32:11 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@aa039e84b63b /]# exit
exit
$

Al listar las imágenes, observamos

user@computer:$ sudo docker images
[sudo] password for alex.callejas:
REPOSITORY TAG IMAGE ID CREATED SIZE
imagenvim 2 6306acd85190 26 minutes ago 519 MB
imagenvim latest 663643920fdd 35 minutes ago 452 MB
docker.io/ubuntu latest ccc7a11d65b1 44 hours ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
registry.fedoraproject.org/fedora latest 7f17e6b4a386 6 weeks ago 232 MB
$

A esta nueva imagen, le podemos asignar una etiqueta diferente para poder diferenciarla

user@computer:$ sudo docker tag imagenvim:2 axl/imagenvim2
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
axl/imagenvim2 latest 6306acd85190 28 minutes ago 519 MB
imagenvim 2 6306acd85190 28 minutes ago 519 MB
imagenvim latest 663643920fdd 37 minutes ago 452 MB
docker.io/ubuntu latest ccc7a11d65b1 44 hours ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
registry.fedoraproject.org/fedora latest 7f17e6b4a386 6 weeks ago 232 MB
$

Podemos, además, guardar esta imagen como archivo

user@computer:$ sudo docker save -o imagenvim2 axl/imagenvim2
$ ls
Dockerfile imagenvim2
$ sudo file imagenvim2
imagenvim: POSIX tar archive
$ du -sh imagenvim2
509M imagenvim2
$

Con lo cual, podríamos portar la imagen a algún lugar, incluso por USB y exportarla. Para este ejemplo, primero eliminamos la imagen

user@computer:$ sudo docker rmi axl/imagenvim2
Untagged: axl/imagenvim2:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagenvim 2 6306acd85190 2 days ago 519 MB
imagenvim latest 663643920fdd 2 days ago 452 MB
docker.io/ubuntu latest ccc7a11d65b1 4 days ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
registry.fedoraproject.org/fedora latest 7f17e6b4a386 6 weeks ago 232 MB
$

Para cargar esta imagen en algún otro equipo, después de transferir dicha imagen, utilizamos el comando

user@computer:$ sudo docker load -i imagenvim2
Loaded image: axl/imagenvim2:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cosasaxl latest 2b76fbb9ebba 2 days ago 147 MB
axl/imagenvim2 latest 6306acd85190 2 days ago 519 MB
docker.io/ubuntu latest ccc7a11d65b1 4 days ago 120 MB
docker.io/nginx latest b8efb18f159b 2 weeks ago 107 MB
docker.io/debian latest a20fd0d59cf1 3 weeks ago 100 MB
registry.fedoraproject.org/fedora latest 7f17e6b4a386 6 weeks ago 232 MB
$

Volúmenes

La información de los contenedores es efímera, pero si requerimos que se monte algún directorio en particular o que los datos sean persistentes, utilizamos volúmenes.

14. Si requerimos que nuestro contenedor incluya algún directorio en particular, ejecutamos

user@computer:$ sudo docker run -it -v /directorio ubuntu bash
[sudo] password for alex.callejas:
root@46e6e1cc5fc1:/# ls
bin boot dev directorio etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@46e6e1cc5fc1:/# ls directorio/
root@46e6e1cc5fc1:/# touch directorio/hola
root@46e6e1cc5fc1:/# ls directorio/
hola
root@46e6e1cc5fc1:/# mkdir -p directorio/test
root@46e6e1cc5fc1:/# touch directorio/test/hola
root@46e6e1cc5fc1:/#
root@46e6e1cc5fc1:/# ls -l directorio/*
-rw-r--r--. 1 root root 0 Aug 12 02:24 directorio/hola

directorio/test:
total 0
-rw-r--r--. 1 root root 0 Aug 12 02:25 hola
root@46e6e1cc5fc1:/# exit
exit
$

En la terminal alterna, inspeccionamos el contenedor, para revisar los montajes

user@computer:$ sudo docker ps
[sudo] password for alex.callejas:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
540ee1c3cc95 ubuntu "bash" 25 seconds ago Up 24 seconds gracious_lamarr
$ sudo docker inspect --format='{{range .Mounts}}{{.Destination}}{{end}}' gracious_lamarr
/directorio
$ sudo docker inspect --format='{{range .Mounts}}{{.Source}}{{end}}' gracious_lamarr
/var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data
$

Por default, docker crea un directorio en el host para poder montarlo en el contenedor. Esto lo podemos revisar,como root, directamente en el host

user@computer:$ # ls -ld /var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data
drwxr-xr-x. 2 root root 4096 Aug 12 21:32 /var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data
# ls /var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data
hola test
# ls /var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data/*
/var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data/hola

/var/lib/docker/volumes/4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323/_data/test:
hola
#

15. Si queremos que el contenedor utilice algún directorio del host en particular, ejecutamos

user@computer:$ mkdir directorio
$ ls
directorio Dockerfile imagenvim2
$ sudo docker run -it -v $PWD/directorio:/directorio ubuntu bash
root@4230a22ebcd5:/# ls
bin boot dev directorio etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4230a22ebcd5:/# ls directorio/
ls: cannot open directory 'directorio/': Permission denied
root@4230a22ebcd5:/# touch directorio/hola
touch: cannot touch 'directorio/hola': Permission denied
root@4230a22ebcd5:/#

Se montó correctamente el directorio dentro del contenedor, pero no tenemos permiso de escritura debido a que el daemon de docker lo monta como root, como se observo en la inspección anterior. Para poder escribir, necesitamos indicarle al contenedor los permisos que requerimos, ejecutando

user@computer:$ sudo docker run -it -v $PWD/test:/prueba:ro ubuntu bash
root@59c188463618:/# ls
bin boot dev etc home lib lib64 media mnt opt proc prueba root run sbin srv sys tmp usr var
root@59c188463618:/# ls prueba/
ls: cannot open directory 'prueba/': Permission denied
root@59c188463618:/# cd prueba
root@59c188463618:/prueba# ls
ls: cannot open directory '.': Permission denied
root@59c188463618:/prueba# touch hola
touch: cannot touch 'hola': Read-only file system
root@59c188463618:/prueba# exit
exit
$

En la inspección se observa

user@computer:$ sudo docker inspect --format='{{range .Mounts}}{{.Source}}{{end}}' dazzling_franklin
/home/alex.callejas/Devel/docker/test
$ sudo docker inspect --format='{{range .Mounts}}{{.Destination}}{{end}}' dazzling_franklin
/prueba
$ sudo docker inspect --format='{{range .Mounts}}{{.Mode}}{{end}}' dazzling_franklin
rw
$ sudo docker inspect --format='{{range .Mounts}}{{.RW}}{{end}}' dazzling_franklin
true
$

16. Los volúmenes los podemos crear antes de usarlos, ejecutando

user@computer:$ sudo docker volume create --name myvol
myvol
$ sudo docker volume ls
DRIVER VOLUME NAME
local 4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323
local 5e76c5028ea86b1671837372c914d1603944dbf7d4676d0ee49740920756da24
local a909d99c5b8cab582d7c7a5c8e8dc21ed75f0a0ff8df15040906ab34fc67f142
local d840fde43be8d06fa06448478755f414de20c00705d27928ac5a8e0bba140d02
local myvol
$

Para asignarlo al contenedor, ejecutamos

user@computer:$ sudo docker run -it -v myvol:/stuff ubuntu bash
root@6b2116af2431:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv stuff sys tmp usr var
root@6b2116af2431:/# cd stuff/
root@6b2116af2431:/stuff# touch test{1..7}
root@6b2116af2431:/stuff# ls
test1 test2 test3 test4 test5 test6 test7
root@6b2116af2431:/stuff#

En la inspección observamos donde se creo el volumen y los archivos creados

user@computer:$ sudo docker inspect distracted_franklin | grep Mounts -A 11
"Mounts": [
{
"Type": "volume",
"Name": "myvol",
"Source": "/var/lib/docker/volumes/myvol/_data",
"Destination": "/stuff",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
$
# ls /var/lib/docker/volumes/myvol/_data
test1 test2 test3 test4 test5 test6 test7
#

17. Para eliminar el volumen, después de eliminar el contenedor, ejecutamos

user@computer:$ sudo docker volume rm myvol
myvol
$ sudo docker volume ls
DRIVER VOLUME NAME
local 4f3eb21be35f9b49ecc082592a47587253785ead6937f6352e434db2b8d6a323
local 5e76c5028ea86b1671837372c914d1603944dbf7d4676d0ee49740920756da24
local a909d99c5b8cab582d7c7a5c8e8dc21ed75f0a0ff8df15040906ab34fc67f142
local d840fde43be8d06fa06448478755f414de20c00705d27928ac5a8e0bba140d02
$

18. Si se requiere copiar archivos del host al contenedor, la mejor práctica es realizarlo desde su creación mediante Dockerfile, suponiendo que en el host tenemos un directorio archivos que deseamos tener en el contenedor dentro del directorio stuff, ejecutamos

user@computer:$ ls archivos/
notas1.txt notas2.txt
$ cat Dockerfile
FROM debian
RUN apt-get update && apt-get install vim -qqy
COPY ./archivos/ /stuff
$ sudo docker build -t cosasaxl .
[sudo] password for alex.callejas:
Sending build context to Docker daemon 556 kB
Step 1/3 : FROM debian
---> a20fd0d59cf1
Step 2/3 : RUN apt-get update && apt-get install vim -qqy
---> Running in d095c62569fa
Ign:1 http://deb.debian.org/debian stretch InRelease
Get:2 http://deb.debian.org/debian stretch-updates InRelease [88.5 kB]
Get:3 http://security.debian.org stretch/updates InRelease [62.9 kB]
Get:4 http://deb.debian.org/debian stretch Release [118 kB]
Get:5 http://deb.debian.org/debian stretch Release.gpg [2373 B]
Get:6 http://security.debian.org stretch/updates/main amd64 Packages [169 kB]
Get:7 http://deb.debian.org/debian stretch/main amd64 Packages [9497 kB]
Fetched 9938 kB in 5s (1799 kB/s)
Reading package lists...
debconf: delaying package configuration, since apt-utils is not installed
...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
---> 56193462f153
Removing intermediate container d095c62569fa
Step 3/3 : COPY ./archivos/ /stuff
---> 83e969244bce
Removing intermediate container 0a687e1b1998
Successfully built 83e969244bce
$ sudo docker run -it cosasaxl bash
root@7f3d34dfa53a:/# ls
bin   dev  home  lib32 libx32 mnt  proc  run srv sys  usr
boot  etc  lib lib64 media opt  root  sbin  stuff tmp  var
root@7f3d34dfa53a:/# ls stuff/
notas1.txt notas2.txt
root@7f3d34dfa53a:/# exit
exit
$

19. Suponiendo que necesitamos que el contenedor ejecute un script al arrancarlo, lo construimos con la opción ENTRYPOINT 

user@computer:$ cat entrypoint.sh
#!/bin/bash
ls -la
echo "Hola desde entrypoint"
$ cat Dockerfile
FROM debian
RUN apt-get update && apt-get install vim -qqy
COPY ./archivos/ /stuff
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
$ ls
archivos Dockerfile entrypoint.sh
$ sudo docker build -t cosasaxl .
[sudo] password for alex.callejas:
Sending build context to Docker daemon 557.1 kB
Step 1/5 : FROM debian
---> a20fd0d59cf1
Step 2/5 : RUN apt-get update && apt-get install vim -qqy
---> Using cache
---> 56193462f153
Step 3/5 : COPY ./archivos/ /stuff
---> Using cache
---> 83e969244bce
Step 4/5 : COPY entrypoint.sh /entrypoint.sh
---> e403afe2511c
Removing intermediate container b0c28c21c8ff
Step 5/5 : ENTRYPOINT /entrypoint.sh
---> Running in 4ad3f139001d
---> 2b76fbb9ebba
Removing intermediate container 4ad3f139001d
Successfully built 2b76fbb9ebba
$ sudo docker run -it cosasaxl bash
total 68
drwxr-xr-x. 1 root root 4096 Aug 12 17:18 .
drwxr-xr-x. 1 root root 4096 Aug 12 17:18 ..
-rwxr-xr-x. 1 root root 0 Aug 12 17:18 .dockerenv
lrwxrwxrwx. 1 root root 7 Jul 23 00:00 bin -> usr/bin
drwxr-xr-x. 2 root root 4096 Jul 13 13:04 boot
drwxr-xr-x. 5 root root 360 Aug 12 17:18 dev
-rwxrwxr-x. 1 root root 49 Aug 12 17:14 entrypoint.sh
drwxr-xr-x. 1 root root 4096 Aug 12 17:18 etc
drwxr-xr-x. 2 root root 4096 Jul 13 13:04 home
lrwxrwxrwx. 1 root root 7 Jul 23 00:00 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 23 00:00 lib32 -> usr/lib32
lrwxrwxrwx. 1 root root 9 Jul 23 00:00 lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 10 Jul 23 00:00 libx32 -> usr/libx32
drwxr-xr-x. 2 root root 4096 Jul 23 00:00 media
drwxr-xr-x. 2 root root 4096 Jul 23 00:00 mnt
drwxr-xr-x. 2 root root 4096 Jul 23 00:00 opt
dr-xr-xr-x. 337 root root 0 Aug 12 17:18 proc
drwx------. 2 root root 4096 Jul 23 00:00 root
drwxr-xr-x. 4 root root 4096 Jul 23 00:00 run
lrwxrwxrwx. 1 root root 8 Jul 23 00:00 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Jul 23 00:00 srv
drwxr-xr-x. 2 root root 4096 Aug 12 17:09 stuff
dr-xr-xr-x. 13 root root 0 Aug 12 14:27 sys
drwxrwxrwt. 1 root root 4096 Aug 12 17:09 tmp
drwxr-xr-x. 1 root root 4096 Jul 23 00:00 usr
drwxr-xr-x. 1 root root 4096 Jul 23 00:00 var
Hola desde entrypoint
$

En un siguiente post, cuando nos den la segunda parte del curso: Intermedio, les compartiré de igual forma mis notas.

P.D.: Hace ya algún tiempo, aquí en el blog, había publicado una muy buena introducción a docker [ver] 😉

Espero les sirva…

Domingo 13 de agosto de 2017

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

Defcon 25!

DEFCON 25!, muy bueno !

Miércoles 09 de agosto de 2017

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

Nuevo logo del blog!

… En ese momento nació Huitzilopochtli, se vistió sus atavíos, su escudo de plumas de águila, sus dardos, su lanza-dardos azul el llamado lanza-dardos de turquesa. Se pintó su rostro con franjas diagonales, con el color llamado “pintura de niño”. Sobre su cabeza colocó plumas finas, se puso sus orejeras.

Y uno de sus pies, el izquierdo era enjuto, llevaba una sandalia cubierta de plumas, y sus dos piernas y sus dos brazos los llevaba pintados de azul. Y el llamado Tochancalqui puso fuego a la serpiente hecha de teas llamada Xiuhcóatl, que obedecía a Huitzilopochtli. Luego con ella hirió a Coyolxauhqui, le cortó la cabeza, la cual vino a quedar abandonada en la ladera de Coatépetl….

Relato del nacimiento de Huitzilopochtli – Códex Florentinus


Desde hace mucho tiempo, quería refrescar la imagen del blog, al principio utilizaba como logo la moneda azteca de Piratas del Caribe, porque en ese momento no encontré una imagen que representará lo que quería hacer con el blog, el rumbo que quería que tomara. Además que en ese tiempo fue la única imagen que sentía que unía mi pasión por el software libre con la mitología mexica.

El nombre rootzilopochtli surge en una plática en un war room, cuyo cliente no quiero recordar 🙂 , donde los diferentes administradores (bases de datos, redes, storage, backups) debatían sobre quién de ellos era el más importante, en cierto momento de la plática, cuando entendí de lo que hablaban, sugirieron cierto sacrificio del usuario en cuestión, a lo que les comenté:

– Si van a ofrecer al usuario en sacrificio, deberían hacerlo hacía Huitzilopochtli, el dios supremo de Tenochtitlan, patrono de la guerra, el fuego y el sol. Guía, protector y patrono de los aztecas

A partir de ese día, el SysAdmin es conocido como rootzilopochtli, guardián de la palabra, señor y dador de vida a las aplicaciones, quien rige el uso correcto del sistema 😉

Después de mucho tiempo, de tratar de hacer un diseño propio con este concepto, desistí y encontré a la mejor diseñadora de elementos prehispánicos que existe en la actualidad, conocida en twitter como @monarobot. Ella es una artista conocida en el medio por el diseño de los Pokemayans, la versión maya de los Pokémon, esta es una muestra de su increíble trabajo:

Para el icono/logo, lo que le pedí fue tener su versión de Xiuhcóatl, el arma más poderosa de los dioses mexicas empuñada por el dios de la guerra Huitzilopochtli con la cual mató a 400 de sus hermanos con suma facilidad. Mítica serpiente de fuego, serpiente brillante, serpiente solar:

Y con su único estilo creo el diseño que engalana e identifica desde hoy al blog:

 

Espero les guste…

 

Martes 08 de agosto de 2017

José Oviedo

José Oviedo
oviedo.mx

Microsoft Visual Studio: Not found Microsoft.CompactFramework.VisualBasic.targets

Al iniciar un proyecto en Microsoft Visual Studio 2008 en Windows 10, aparece el siguiente mensaje de error:

Unable to read the project file ‘Proyecto.vbproj’ c:\users\Proyecto.vbproj: The imported project: “C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.VisualBasic.targets” was not found. Confirm that the path in the declaration is correct, and that the file exists on disk

Se actualizó al Service Pack 1 del Visual Studio 2008 y el error seguía, luego reinstalar .NET Compact Framework NET 3.5 y nada, y al final la solución fue instalar las Power Toys for .NET Compact Framework 3.5 desde la URL de Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=13442 y listo, asunto arreglado.

Jueves 03 de agosto de 2017

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

COMPARTE DIGITAL.

COMPARTE DIGITAL.
Contra el Capital y sus muros: todas las artes.

Convocatoria a la edición cibernética del CompArte “Contra el Capital y sus muros, todas las artes”

Julio del 2017.

Compañeroas, compañeras y compañeros de la Sexta:

Hermanoas, hermanas y hermanos artistas y no, de México y el mundo:

Avatares, nicknames, webmasters, bloguer@s, moderador@s, gamers, hackers, piratas, bucaneros y náufragos del streaming, usuari@s de las redes antisociales, antípodas de los reality shows, o como-se-diga cada quien en la red, la web, internet, ciberespacio, realidad virtual o-como-se-diga:

Les convocamos, pues, porque tenemos algunas preguntas que nos inquietan:

¿Es posible otro internet, o sea otra red? ¿Se puede luchar ahí? ¿O es que ese espacio sin geografía precisa, ya está ocupado, copado, cooptado, atado, anulado, etceterado? ¿No puede haber ahí resistencia y rebeldía? ¿Se puede hacer Arte en la red? ¿Cómo es ese Arte? ¿Y puede rebelarse? ¿Puede el Arte en la red resistir la tiranía de códigos, passwords, el spam como buscador por default, los MMORPG de las noticias en las redes sociales donde ganan la ignorancia y la estupidez por millones de likes? ¿El Arte en, por y para la red banaliza la lucha y la trivializa, o la potencia y escala, o “nada qué ver, mi buen, es arte, no célula militante”? ¿Puede el Arte en la red arañar los muros del Capital y herirlo con una grieta, o ahondar y perseverar en las que ya hay? ¿Puede el Arte en, por y para la red resistir no sólo a la lógica del Capital, también a la lógica del Arte “conocido”, el “arte real”? ¿Lo virtual es también virtual en sus creaciones? ¿Es el bit la materia prima de su creación? ¿Es creado por un ser individual? ¿Dónde está el soberbio tribunal que, en la Red, dictamina qué es y qué no es Arte? ¿El Capital cataloga el Arte en, por y para la red como ciberterrorismo, ciberdelincuencia? ¿La Red es un espacio de dominación, de domesticación, de hegemonía y homogeneidad? ¿O es un espacio en disputa, en lucha? ¿Podemos hablar de un materialismo digital?

En realidad, real y virtual, es que sabemos poco o nada de ese universo. Pero creemos que, en la geografía inasible de la red, hay también creación, arte. Y, claro, resistencia y rebeldía.

Ustedes que crean ahí, ¿ven la tormenta?, ¿la padecen?, ¿resisten?, ¿se rebelan?

Para tratar de encontrar algunas respuestas, es que les invitamos a que participen… (íbamos a poner “desde cualquier geografía”, pero creemos que la red es donde tal vez importa menos el lugar).

Bueno, les invitamos a construir sus respuestas, a construirlas, o deconstruirlas, con arte creado en, por y para la red. Algunas categorías en las que se puede participar (seguramente hay más, y usted ya está señalando que la lista es corta, pero, ya sabe, “falta lo que falta”), serían:

Animación; Apps; Archivos y bases de datos; Bio-arte y arte-ciencia; Ciberfeminismo; Cine interactivo; Conocimiento colectivo; Cultural Jamming; Cyber-art; Documental web; Economías + finanzas experimentales; Electrónica DIY, máquinas, robótica y drones, Escritura colectiva; Geo-localización; Gráfica y diseño, Hacking creativo, graffiti digital, hacktivismo y borderhacking; Impresión 3D; Interactividad; Literatura electrónica e Hipertexto; Live cinema, VJ, cinema expandido; Machinima; Memes; Narrative media; Net.art; Net Audio; Performance, danza y teatro mediáticos; Psico-geografías; Realidad alterna; Realidad aumentada; Realidad virtual; Redes y Translocalidades colaborativas (diseño de comunidades, prácticas translocales); Remix culture; Software art; Streaming; Tactical media; Telemática y telepresencia; Urbanismo y comunidades online/offline; Videojuegos; Visualización; Blogs, Flogs y Vlogs; Webcomics; Web Series, Telenovelas para Internet, y eso que usted ve que falta en esta lista.

Así que bienvenid@s aquellas personas, colectivos, grupos, organizaciones, reales o virtuales, que trabajen desde zonas autónomas en línea, quienes utilicen plataformas cooperativas, open source, software libre, licencias alternativas de propiedad intelectual, y los etcéteras cibernéticos.

Bienvenida toda participación de todoas, todas y todos los hacedores de cultura, independientemente de las condiciones materiales desde las que trabajen.

Les invitamos también para que distintos espacios y colectivos alrededor del mundo puedan mostrar las obras en sus localidades, según sus propios modos, formas, intereses y posibilidades.

¿Tienen ya en algún lugar del ciberespacio algo qué decirnos, contarnos, mostrarnos, compartirnos, invitarnos a construir en colectivo? Mándanos tú link para ir construyendo la sala de exhibición en línea de este CompArte digital.

¿No tienes todavía un espacio donde subir tú material? Podemos proporcionártelo, y en la medida de lo posible archivar tú material para que quede registrado a futuro. En ese caso necesitaríamos que nos den un link a la nube, hospedaje cibernético o cosa similar de su preferencia. O que nos lo manden por correo electrónico, o lo suban a una de nuestras nubes o al FTP.

Aunque nos ofrecemos a hospedar todo el material, porque nos gustaría que formara parte del archivo de arte en red solidario, también vamos a ‘linkear’ a otras páginas o servidores o geo-localizaciones, porque entendemos que, en la época del capital global, es estratégico descentralizar.

Así que como gusten:

Si quieren dejar la información en sus sitios, con sus formas y sus modos, podemos linkearlos.

Y si necesitan espacio, también estamos para hospedarlos.

Bueno, pueden escribirnos un correo con la información de su participación. Por ejemplo, el nombre de los creadores, título, y la categoría en la que quieren que esta sea incluida, así como una pequeña descripción y una imagen. También díganos si tienen espacio en internet y sólo necesitan que pongamos un link, o bien si prefieren que la subamos al servidor.

El material que se vaya recibiendo desde el momento que aparezca la convocatoria, se irá clasificando en distintos apartados según su (in)disciplina. Las participaciones se harán públicas durante los días del festival para que cada individuo o colectividad lo navegue, use (o abuse) y difunda en sus espacios de reunión, calles, escuelas, o donde prefiera.

Las participaciones se publicarán como entradas y links.

También se publicará un programa de streaming en directo. Las actividades serán archivadas por si alguien no alcanza a verlas en vivo.

El correo al cual tienen que escribir para mandarnos sus links y comunicarse con nosotros es:

compas@comparte.digital

La página donde se irán montando los links a las participaciones, y la cual estará en pleno funcionamiento a partir del 1º de agosto de este año de 2017, es:

http://comparte.digital

Desde ahí también se harán transmisiones y exposiciones, del 1º de agosto y hasta el 12 de agosto, de distintas participaciones artísticas desde su ciberespacio local, en distintas partes del mundo.

Bienvenidoas pues a la edición virtual del CompArte por la Humanidad:

“Contra el Capital y sus muros, todas las artes… también las cibernéticas”

Vale, salud y no likes, sino dedos medios up and fuck the muros, delete al capital.

Desde las montañas del Sureste Mexicano.

Comisión Sexta, Newbie but On-Line, del EZLN.

(Con mucho ancho de banda, mi buen, al menos en lo que a la cintura se refiere -oh, yes, nerd and fat is hot-)

Jueves 27 de julio de 2017

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

Celebremos el 18o Día del SysAdmin

Como ya es toda una costumbre, el próximo 28 de Julio, se celebrará internacionalmente el Día del Administrador de Sistemas. Para esta su 18a edición, con el apoyo de varios patrocinadores a SysArmy México, nos reuniremos para compartir historias y anécdotas al lado de una buena botana y una ronda de retas al estilo de la vieja escuela 😉 , la invitación es extendida a quién guste acompañarnos; a los primeros en llegar, SysArmy México les tiene preparadas varias sorpresas:

La cita es en el Arkeid Bar,  cerca de las 7 PM y hasta que las obligaciones nos lo permitan. La dirección es:

Monterrey 230,
Roma Norte,
Cuauhtémoc, CDMX

La reservación esta a nombre de Wendy Fabela.

Allá nos vemos!! 🙂

Lunes 26 de junio de 2017

¿Realmente te conoce? –AdsBlock

Este post nace a través de este enlace Dataselfie, conociendo al Algoritmo de Facebook y su Machine Learning. en el que hablan de como funciona el proceso de la publicidad que te sale en facebook,  a través del tiempo ya has dibujado tu perfil en facebook sea por búsqueda o por likes todo lo que hagas dentro de esa red social te va a salir, luego que ya saben que es lo que te gusta te empiezan a mandar publicidad acorde a ella, nunca se habían realizado esa pregunta ¿Por que me sale esto?. si quieren conocer que facebook sabe mas que ustedes tranquilamente, pueden abrir  este enlace Preferencias Ads en Facebook

El cual con la sesión abierta de facebook, desglosan en Intereses, y veras todo tus gusto, lo que por alguna razón buscaste o le diste por omisión. Ahí te conocerás realmente que es lo que te gusta.

Ya que donaste los datos, que puedo hacer.

Lo mas sensato es darse de baja de una red social donde juegan con tu información. si quieres seguir usándolo lo mas lógico seria usar AdsBlock  que lo puedes instalar en firefox y chrome, no vas a ver mas publicidad pero igual en cualquier momento que abras un enlace vas a empezar a crear nuevamente tu perfil.

Hace años 10 años una persona que respeto me compartió este video sigue vigente creemos que los servicios que usamos son gratis realmente.
https://www.youtube.com/watch?v=6bYLRGS3vFs

 

 

 

 

 

 

 

 

 

Domingo 25 de junio de 2017

Activar/desactivar registro de usuarios en WordPress

Registro WordPress

La solución es de forma inmediata, dentro del Escritorio (al que accedas administración del WordPress), le vas hacer click en  a Ajustes, Generales y activas o desactiva el checkbox de: Cualquiera puede registrarse. depende para lo que requieras.

Si lo que tienes  problema con usuarios que se registran y en realidad son robots o personas spammers, usa el plugin que mencione anteriormente  http://blog.julioh.com.ve/?p=476 en el cual se hace ocultar la url de wp-admin  otra forma es usando .httpass dentro de los directorios y bloqueando su acceso, o en su momentos podrías saber cual es tu ip para indicarle desde donde te conectas por ejemplo algo así.


order allow,deny
deny from 8.8.8.8
deny from 8.8.8.9
allow from all

Sábado 24 de junio de 2017

Seguridad en WordPress , Garantizar el acceso a wp-admin

WordPress por ser un CMS mas usado pues tienes vulnerabilidades y necesitamos blindarlo en seguridad y que mejor usando plugins para que no tengas una mala experiencia.

Esta es una de esas en la cual la ruta  ../wp-admin/ la remplazas para evitar acceso a ella.

En el caso el plugin WPS Hide Login no vas a eliminar /wp-login.php o /wp-admin , pero si lo va remplazar para no sea visible y colocaremos una url que solo sabremos nosotros.

Lo buscamos  WPS Hide Login en plugins  haz clic en Instalar y posteriormente en Activar.

En el plugin accede a Ajustes, Generales y establece la palabra de paso que sustituirá al clásico:

wp-admin por no-vasaentrar guardas los cambios y pruebas.

Configuración del plugin

Cuando intentas acceder a  http://tu-dominio.com/wp-admin
Te dará un 404 not found

De igual forma  también para  /wp-login.php no existen.

 

Prueba de acceso incorrecta

Si por el contrario pones la url de tu dominio con la palabra de paso establecida:

http://tu-dominio.com/?no-vasaentrar

Te va a salir tu panel para acceder, que se busca con esto, evitar ataques de diccionario, evitar suscripciones y proteger tu CMS de la mejor manera.

si por casualidad no te acuerdas de la url, puedes borrar el plugin en la carpeta wp-content y vuelve a la ruta original

 

Miércoles 21 de junio de 2017

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como Instalar Spotify en Debian 9 Stretch

Si ya instalaste Debian 9 Stretch en tu escritorio, siempre es bueno tener buena música para disfrutar tu trabajo por eso es indispensable tener Spotify en tu Debian. Para lograr instalar Spotify en Debian 9 solo sigue estos paso que … Continue reading

Martes 20 de junio de 2017

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Instalar VirtualBox Guest Additions en Debian 9

Si quiere probar Debian 9 Stretch en una máquina virtual es importante que instales los Guest Additions para que puedas disfrutar de todas las ventajas de Debian 9, que el video se vea bien y en general tenga todos los … Continue reading
Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Instalar Debian 9 Stretch en tu Escritorio

Muchas Distribuciones Linux se centran en el Escritorio, buscan ofrecen una experiencia agradable y sencilla, sin embargo hay quienes optan por las opciones más puritanas, por llamarlas de alguna manera, quienes buscan trabajar con distribuciones base como Debian en las que … Continue reading

Jueves 15 de junio de 2017

Promoviendo Software Libre: Liberar memoria en GNU/Linux

Martes 13 de junio de 2017

José Oviedo

José Oviedo
oviedo.mx

Aplicación para contar las líneas de códigos de tu proyecto

Algún día te has preguntado, ¿Cuantas líneas de código he programado?, ¿Este proyecto cuantas líneas de código tiene? entonces tienes 2 formas de hacerlo.

MÉTODO 1
1.- Preparar tu libreta (o un Excel)
2.- Abrir cada archivo en tu editor de texto favorito y contar línea por línea.
3.- Hacer las sumas en tu libreta y listo.

MÉTODO 2.
1.- Descargar el programa CLOC de http://cloc.sourceforge.net/ o en GitHub https://github.com/AlDanial/cloc
2.- Ejecutar el comando cloc CARPETA_PROYECTO
3.- Listo!!

Aquí esta la versión para Windows: https://sourceforge.net/projects/cloc/files/ o en GitHub tiene más opciones para su instalación para diferentes sistemas.

Y al final tendremos algo así:

Como pueden observar clasifica por diferentes lenguajes de programación y hasta pasar los resultados a una base de datos SQL.

Viernes 09 de junio de 2017

Cristian Trujillo

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

Lunes 15 de mayo de 2017

Planeta Gruslic: Iván Alemán: Games that rock: Smash TV (Arcade)

Domingo 14 de mayo de 2017

Planeta Gruslic: Iván Alemán: Feeling chatty: Quassel IRC

Viernes 12 de mayo de 2017

Planeta Gruslic: Iván Alemán: Neat Hardware: Novena

Lunes 08 de mayo de 2017

En serie

 

Desde que se hicieron populares los proveedores de Internet, y la llegada en masa de servicios a los negocios y a las casas. Se entregaron “terminales” o modems o ADSL…

Con la llegada de los inalámbricos, la se;an poda llegar a los vecinos. Con lo que se hizo popular la “robadera” de intenret, programas, para descifrar la password del vecino, principalmente los modems con la tecnología WEP, al parecer esta quedando en el pasado, como un hecho de bíblico, miles de usuario cambiaron su antiguo modem con una nueva tecnología WAP, poco susceptible al robo de password.

Bien, resulta que por razones no muy claras, algunos modems vienen de fabrica pro configurados con un password por default. Es decir desde que son programados se le asigna un password siguiendo un sencillo algoritmo.

Siempre inicia con 03, luego 4 octetos de la mac addres, y los 2 últimos numeros del SSID.

Asi que desde que solo es necesario scanear la red wifi y encontrar estos modems.

No contentos con eso, el password permite el acceso al modem, por medio de la pagina de administración. Y desde ahí ganar mas privilegios. (se pueden revertir haciendo un hard reset desde el modem)

Bien, si por alguna rozan cambias el password que viene de fabrica para administrar el moden y requieres de soporte técnico de la empresa, te diren por que le cambiaste?

y no pueden ayudarte…. hasta que le pongas el password original. (–)

 

The post En serie appeared first on Apuntes tecnologias de la información.

Jueves 20 de abril de 2017

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Why finding big prime numbers? why study weird arithmetic sequences?

Now I am sitting on my desk thinking on a technique to help me to identify BIG prime numbers in certain arithmetic sequences using algebraic geometry.

This is part of my last project for my PhD, which I think will be very interesting. When I say "BIG" I mean thousands of digits, maybe millions.  When I say "primes in arithmetic sequences" I mean to separate prime numbers in a list like $latex \{ \alpha_n \}_{n=0}^\infty$.

A popular, a prostituted, an important and a "dumb" sequence.

Now we will describe some non trivial sequences and we will see a glimpse of why they are important (or not).

This is of course in my opinion, since there are infinitely many sequences which I ignore and could be more interesting. In fact there is a sequence of "uninteresting numbers" which contains all numbers which appear to not have known/interesting properties (like being prime, Mersenne prime, triangular number, cube, etc...).
But well, this sequence then..., is interesting as is unique, and then we get a paradox.

The popular sequence

The popular is a very famous arithmetic sequence, and is the "Mersenne Sequence", $latex \{ 2^n-1\}_{n=1}^\infty\subset\mathbb{N}$.

$latex \{ 2,7,15,31,63,127,255,...\}$

This is the sequence of all Mersenne numbers.  We denote by $latex M_n$ to the number $latex 2^n-1$.
To identify the primes in this sequence, note that if $latex n=2k$ (is even) then $latex 2^n-1=(2^k-1)(2^k+1)$ and hence... not a prime number. This means that in the sequence we can discard all the values $latex n\in 2\mathbb{Z}$, that is $latex M_{2k}$ is not prime. A less trivial fact is that if $latex n$ is composite, namely $latex n=ab$ then we have that:

 $latex 2^n-1=2^{ab}-1=(2^a-1)(\sum_{k=0}^{b-1}2^{ka})=(2^b-1)(\sum_{k=0}^{a-1}2^{kb})$

and then also $latex M_{pq}$ is not prime. So, we are left with all the elements in the sequence of the form $latex M_p$ for $latex p$ a prime number. A quick inspection says that $latex M_2, M_3, M_5, M_7$ are Mersenne primes. But $latex M_{11} = 2047 =23\cdot 89$ which is not prime. So, which Mersenne numbers are prime ?

This is a difficult question, there are big computer grids working in this, trying to find the most spectacular prime. The biggest Mersenne prime known, (and Biggest Prime in general) is $latex 2^{74207281}-1$. which has 22.3 million digits approximately. The way to check it without putting so much effort in the algebraic geometric or number theory rigor is the following:

 To check that $latex 2^p -1$ is prime:

Consider the sequence $latex \{ \sigma_1=4, \sigma_2=14,...,\sigma_j=(\sigma_{j-1}^2)-2...\}$
then $latex M_p=2^p-1$ is prime if and only if $latex \sigma_{p-1}\equiv 0 \bmod M_p$.

This is the fastest way known today. is called the Lucas-Lehmer test.
There are other elegant tests (but not necessarily faster) using elliptic curves which I knew its existence when I was talking with Benedict Gross at the conference on L-Functions at Harvard the past year, and in some sense I have to do something similar as part of my PhD program.

The prostituted

Another famous and prostituted sequence is the so called "Fibonacci sequence".

$latex \{ 1,1,2,3,5,8,13,...,F_{n-1}+F_{n-2}, ...\} $

This is famous and is always presented as the building blocks of beauty in the universe. This just an exaggeration, but well, that is another story.

Is known that $latex \lim_{n\to\infty} \frac{F_{n}}{F_{n-1}}=\phi=1.618033...$.

This number $latex \phi$ has the property that squared is equal to $latex \phi+1$ so, is appears as a root of the polynomial $latex x^2 -x -1=0$.
The value of $latex \phi$ can be found when you divide lengths of middle lines in some polygons by the length of the sides. Also in your body, if you divide your height by the distance of your feet to your belly button, and in a lot of parts of our body. This number can be analyzed in a Leonardo da Vinci drawing called "Le proporzioni del corpo umano secondo Vitruvio" which can be seen here.
This is why $latex \phi$ has some kind of mystic and esoteric significance for some people, and that is why is called sometimes The Golden Ratio. 

To identify primes in the Fibonacci sequence, there are no good ways. This is mainly because the sequence highly depends on the "addition" operation and not "multiplication", and believe it or not, addition in number theory is a mystery.
A very important Conjecture in mathematics about this mystery, predicts the possible relation between the multiplication and the addition of integers, through its prime factorization, called the abc conjecture, so Fibonacci, is difficult as a problem in terms of primality, but as seen, has more significance in geometry.

The important sequence

Now for the important sequence is this

$latex \{2, 1729, 87539319, 6963472309248, 48988659276962496, 24153319581254312065344...\}$

Do you see it?

Well, is not too easy to see, is called the "Hardy-Ramanujan sequence", if you denote by $latex \tau(n)$ the $latex n^{th}$ element of the sequence, it means that $latex \tau(n)$ can be written in $latex n$ different ways as a sum of two cubes. Fermat Proved that there are infinitely many of these numbers hundreds of years before, but they caught the attention of Hardy by Ramanujan in a very nice story.

When Ramanujan was dying at the hospital in England, Hardy went to visit him. Hardy told him that the number in his taxi to the hospital was a dull, boring number, 1729. Ramanujan said:

 'No, Hardy, it is a very interesting number. It is the smallest number expressible as the sum of two cubes in two different ways' 


That is why we use the letter $latex \tau$ because these numbers are called "taxicab numbers" because of this story.

The importance of these numbers, is the new theory in arithmetic geometry that arose,  which in fact I am very interested personally, and professionally.

Practically Ramanujan discovered in his way of thinking, an integral solution to the equation $latex x^3+y^3=z^3+w^3$ which nowadays is studied over $latex \mathbb{Q}$ and then twisted.
This kind of surfaces are called K3 Surfaces (Kodaira-Kummer-Kahler, smooth minimal complete surface with trivial canonical bundle), there is no smart way of obtaining these numbers other than using this algebraic geometry in these surfaces. An example of these surfaces with a family of rational curves parametrized  (the curves may contain taxicab solutions in it) is:

  


And yeah 1729 has the desired property, that is, $latex \tau(2)$ is a sum of two cubes in only two different ways. 
Srnivasa Ramanujan was a human computer, in fact to verify this, we check for the $latex \tau(2)=1729$ and $latex \tau(6)=24153319581254312065344$ can be written as the sum of 2 cubes in 2 and 6 different ways respectively:

$latex \begin{matrix}\tau(2)&=&1729&=&1^3 + 12^3 \\&&&=&9^3 + 10^3\end{matrix}$
...
$latex \begin{matrix}\tau(6)&=&24153319581254312065344&=&582162^3 + 28906206^3 \\&&&=&3064173^3 + 28894803^3 \\&&&=&8519281^3 + 28657487^3 \\&&&=&16218068^3 + 27093208^3 \\&&&=&17492496^3 + 26590452^3 \\&&&=&18289922^3 + 26224366^3\end{matrix}$

The "dumb" sequence

There are plenty other sequences, for example, there are some "dumb" sequences that at the end... they are not so dumb, for example, consider the following sequence:

$latex \{1, 11, 21, 1211, 111221, 312211, 13112221, ... \}$

Do you see the pattern?

Well, the pattern is visual, you begin with "1" and then the following will be the "description of the previous", that is, you ask yourself "What symbols are in the preceding element of the sequence?", and you say "one one" (11) then the next is "two ones"  (21), and so on... This sequence is called "look and say sequence".

There are a lot of things you can do in your spare time with this sequence, for example, prove that a "4" cannot appear in any element of the sequence. The number 13112221 is in fact the biggest prime known in this sequence, are there others?

This apparently dumb sequence has an amazing property which transforms it from dumb to analytic and it was due to John Conway.
Consider the $latex k^{th}$ element of that sequence, call it $latex a_k$  , and define $latex \ell(a_k)=$number of digits of $latex a_k$.
Is proved that $latex \lim_{n\to\infty} \frac{\ell(a_k)}{\ell(a_{k-1})}=\lambda=1.303577269034...$. The surprising thing is that $latex \lambda$ is an algebraic number that can be found as a root of a polynomial of degree 71. This was proved by John Conway, for more information, look at wikipedia.


But why?, why you want to find big primes or classify properties of sequences?


 I have been questioned plenty of times "Why you want to find big primes?", today was one of these days where a master student asked me.
There is a FALSE answer which is very popular among a lot of people, namely

 "It has cryptographic applications, since prime numbers are the basis for today's e-commerce and the development of cryptographic schemes" 

This is false, since cryptographic schemes for public key cryptography need prime numbers with no more than 1000 decimal digits (and this is already too long). Using more than 1000 digits maybe would be more secure, but the speed will decrease exponentially, that is why you don't use 1 million bits of security.

 Identifying these "cryptographic" prime numbers at random with certain properties (Like being a Sophie-Germain prime) to generate a public key with 4096 bits which has approx 1234 digits, (which is already paranoid for the public techniques of cryptanalysis) takes less than a second in my workstation (try: time openssl genrsa 4096).
 So, cryptography is not a good excuse to generate BIG prime numbers, when I say big, I mean thousands of digits, millions.


The answer in my case is easy... To collect them...  they are difficult to find, but they are present in a lot of shapes, for example in the last sequence, which elements are prime ? which is the biggest known ? how to identify them with geometric techniques?.

That is how the theory in mathematics is born, with a question regarding classification.

So, finding big primes is difficult, so is valuable, there are only 49 Mersenne Primes and nobody has proved that they are infinite. (but is believed heuristically that they are).

A couple of years ago I wrote here about finding a big prime of the form $latex 3\cdot 8^n -1$ , which I found here, there are a lot of possible primes disguised in infinitely many shapes, you could just define whatever recursive relation and analyze it.

Other people could say to test a big cluster, or to get some money (yes you get money if you break the records). Maybe an analytic number theorist could say To understand more the distribution of prime numbers which is unknown.

Conclusion

So well in conclusion, I think is good to collect primes and analyze sequences. This to find something hidden in the unknown nature of the logic of sequences of natural numbers, since, we don't know yet how the prime numbers arise. There is still a mystery of how the prime numbers are distributed among all the natural numbers,  even with quantum computers is hard to find them arbitrarily large, so there are still work to do in mathematics.

For more information of all the known published sequences (yes, whatever you think will be there) go to www.oeis.org, this is the Online Encyclopedia of Integer Sequences.


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