Miércoles 20 de septiembre de 2017

Alcance Libre: La Ciudad de México nos necesita #sismo

Comunicación en caso de emergencia

Del 19 al 21 de septiembre los proveedores de celular y telefonía están proveyendo de datos gratis para facilitar la comunicación entre las personas que lo necesitan.

http://www.eluniversal.com.mx/cartera/telecom/ofrecen-att-y-unefon-llamadas-y-mensajes-gratis-tras-sismo

AT&T, Telcel, Movistar y Telmex abren sus redes por terremoto

Martes 19 de septiembre de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Call to Mexicans: Open up your wifi #sismo

Hi friends,

~3hr ago, we just had a big earthquake, quite close to Mexico City. Fortunately, we are fine, as are (at least) most of our friends and family. Hopefully, all of them. But there are many (as in, tens) damaged or destroyed buildings; there have been over 50 deceased people, and numbers will surely rise until a good understanding of the event's strength are evaluated.

Mainly in these early hours after the quake, many people need to get in touch with their families and friends. There is a little help we can all provide: Provide communication.

Open up your wireless network. Set it up unencrypted, for anybody to use.

Refrain from over-sharing graphical content — Your social network groups don't need to see every video and every photo of the shaking moments and of broken buildings. Download of all those images takes up valuable time-space for the saturated cellular networks.

This advice might be slow to flow... The important moment to act is two or three hours ago, even now... But we are likely to have replicas; we are likely to have panic moments again. Do a little bit to help others in need!

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

Se venden Mochilas 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. 5.11 Tactical Covert Boxpack Con compartimento para Laptop y para gafas, diseñada para cualquier tipo de clima.
Promoviendo Software Libre: Conocer el total de memoria RAM en SOLARIS

Miércoles 13 de septiembre de 2017

Luis Cacho

OSI Model Cheat Sheet

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

OSI ModelOSI Model

The post OSI Model Cheat Sheet appeared first on My Binary Life.

Viernes 08 de septiembre de 2017

Héctor Daniel Cortés

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

2017-09-08 04:49:17 UPDATED: (M8.0) OFFSHORE CHIAPAS, MEXICO 15.0 -93.8 (82934)

== PRELIMINARY EARTHQUAKE REPORT ==

***This event supersedes event AT00OVY2Q7,PT17251000.


Region: OFFSHORE CHIAPAS, MEXICO
Geographic coordinates: 15.029N, 93.807W
Magnitude: 8.0
Depth: 35 km
Universal Time (UTC): 8 Sep 2017 04:49:18
Time near the Epicenter: 7 Sep 2017 23:49:18
Local standard time in your area: 7 Sep 2017 22:49:18

Location with respect to nearby cities:
97 km (60 miles) SW (221 degrees) of Pijijiapan, Chiapas, Mexico
107 km (66 miles) WSW (245 degrees) of Mapastepec, Chiapas, Mexico
117 km (73 miles) S (182 degrees) of Tonal�, Chiapas, Mexico
165 km (102 miles) W (275 degrees) of Tapachula, Chiapas, Mexico
356 km (221 miles) W (278 degrees) of GUATEMALA CITY, Guatemala


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us 2000ahv0

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

National Earthquake Information Center
U.S. Geological Survey


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


Jueves 07 de septiembre de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

It was thirty years ago today... (and a bit more): My first ever public speech!

I came across a folder with the most unexpected treasure trove: The text for my first ever public speech! (and some related materials)
In 1985, being nine years old, I went to the IDESE school, to learn Logo. I found my diploma over ten years ago and blogged about it in this same space. Of course, I don't expect any of you to remember what I wrote twelve years ago about a (then) twenty years old piece of paper!

I add to this very old stuff about Gunnar the four pages describing my game, Evitamono ("Avoid the monkey", approximately). I still remember the game quite vividly, including traumatic issues which were quite common back then; I wrote that «the sprites were accidentally deleted twice and the game once». I remember several of my peers telling about such experiences. Well, that is good if you account for the second system syndrome!

I also found the amazing course material for how to program sound and graphics in the C64 BASIC. That was a course taken by ten year old kids. Kids that understood that you had to write [255,129,165,244,219,165,0,102] (see pages 3-5) into a memory location starting at 53248 to redefine a character so it looked as the graphic element you wanted. Of course, it was done with a set of POKEs, as everything in C64. Or that you could program sound by setting the seven SID registers for each of the three voices containing low frequency, high frequency, low pulse, high pulse, wave control, wave length, wave amplitude in memory locations 54272 through 54292... And so on and on and on...

And as a proof that I did take the course:

...I don't think I could make most of my current BSc students make sense out of what is in the manual. But, being a kid in the 1980s, that was the only way to get a computer to do what you wanted. Yay for primitivity! :-D

AttachmentSize
Speech for "Evitamono"1.29 MB
Coursee material for sound and graphics programming in C64 BASIC15.82 MB
Proof that I was there!4.86 MB

Martes 05 de septiembre de 2017

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Made with Creative Commons: Over half translated, yay!

An image speaks for a thousand words...

And our translation project is worth several thousand words!
I am very happy and surprised to say we have surpassed the 50% mark of the Made with Creative Commons translation project. We have translated 666 out of 1210 strings (yay for 3v1l numbers)!
I have to really thank Weblate for hosting us and allowing for collaboration to happen there. And, of course, I have to thank the people that have jumped on board and helped the translation — We are over half way there! Lets keep pushing!

Translation status

PS - If you want to join the project, just get in Weblate and start translating right away, either to Spanish or other languages! (Polish, Dutch and Norwegian Bokmål are on their way) If you translate into Spanish, *please* read and abide by the specific Spanish translation guidelines.

Lunes 04 de septiembre de 2017

¿En el límite?

Recientemente me han estado llegando correos de DreamHost, donde hospedo mis sitios de que algunos servicios se han reiniciado, pero no tenia muy claro a que se podrían referir, especialmente porque hace referencia al uso de memoria:

“Our monitoring systems show that one (or some) of your user accounts may be making your web hosting account operate inefficiently.  We took a peek and noticed you’ve frequently hit the memory limits of your shared hosting plan over the last couple weeks.  Each time that happens, our automated process watcher system stops the associated process which negatively impacts your website performance.

Here are the FTP/shell users on your account, alongside the number of times they’ve hit their memory limits:

snafu: 213, foo: 889

If you’re happy with the performance of your site, then we are too! Your site may continue to run into your shared hosting plan’s resource limits, and our automated system will restart your hosting processes as necessary.”

Y en alguna época ya tuve que revisar al respecto, ya que tenia más bien muchos procesos que consumían CPU, cosa que logre arreglar actualizando mis sitios y asegurándome que podían usar la versión mas nueva de php, que esta disponible, buscando como dice en la KB de DreamHost como optimizar mi sitio, me encuentro conque tengo activado en foo el análisis de uso de CPU [1]…

foo@bar:~/logs/resources$ more foo.sa.analyzed.*

::::::::::::::
 foo.sa.analyzed.0
 ::::::::::::::

Process               CPU seconds      user   machine   count  average
 php56.cgi               1857.7200   99.589%    7.741%     164   11.328
 php                        4.5200    0.242%    0.019%       6    0.753
 du                         1.5000    0.080%    0.006%       4    0.375
 mysqldump                  0.8700    0.047%    0.004%       3    0.290
 find                       0.5400    0.029%    0.002%      11    0.049
 sshd                       0.1500    0.008%    0.001%       1    0.150
 bash                       0.0800    0.004%    0.000%       2    0.040
 crontab                    0.0100    0.001%    0.000%       1    0.010
 perl                       0.0000    0.000%    0.000%       1    0.000
 perl                       0.0000    0.000%    0.000%       1    0.000
 dirname                    0.0000    0.000%    0.000%      12    0.000
 postdrop                   0.0000    0.000%    0.000%       1    0.000
 which                      0.0000    0.000%    0.000%       3    0.000
 sendmail                   0.0000    0.000%    0.000%       1    0.000
 wc                         0.0000    0.000%    0.000%      25    0.000
 grep                       0.0000    0.000%    0.000%      69    0.000
 sh                         0.0000    0.000%    0.000%       3    0.000
 ls                         0.0000    0.000%    0.000%      22    0.000
 readlink                   0.0000    0.000%    0.000%       3    0.000
 more                       0.0000    0.000%    0.000%      15    0.000
 basename                   0.0000    0.000%    0.000%       6    0.000
 sh                         0.0000    0.000%    0.000%      15    0.000
 ----------------------------------------------------------------------
 Total:                  1865.3900  100.000%    7.772%     369
 Average per day:        1865.3900    1 days

CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
 foo.sa.analyzed.1
 ::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               2085.8300   99.731%    8.691%     196   10.642
php                        4.8800    0.233%    0.020%       6    0.813
mysqldump                  0.7500    0.036%    0.003%       3    0.250
perl                       0.0000    0.000%    0.000%       2    0.000
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%      15    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  2091.4600  100.000%    8.714%     252
Average per day:        2091.4600    1 days
CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
foo.sa.analyzed.2
::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               1533.9300   99.564%    6.391%     223    6.879
php                        5.8200    0.378%    0.024%       6    0.970
mysqldump                  0.8900    0.058%    0.004%       3    0.297
perl                       0.0000    0.000%    0.000%       2    0.000
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%      15    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  1540.6400  100.000%    6.419%     279
Average per day:        1540.6400    1 days
CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
foo.sa.analyzed.3
::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               3101.5800   99.823%   12.923%     356    8.712
php                        4.4400    0.143%    0.018%       6    0.740
mysqldump                  1.0500    0.034%    0.004%       3    0.350
perl                       0.0100    0.000%    0.000%       1    0.010
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%      15    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  3107.0800  100.000%   12.946%     411
Average per day:        3107.0800    1 days

CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
foo.sa.analyzed.4
::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               2799.7100   99.804%   11.665%     183   15.299
php                        4.6500    0.166%    0.019%       6    0.775
mysqldump                  0.8400    0.030%    0.003%       3    0.280
perl                       0.0000    0.000%    0.000%       2    0.000
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%      15    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  2805.2000  100.000%   11.688%     239
Average per day:        2805.2000    1 days

CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
foo.sa.analyzed.5
::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               2790.0400   99.822%   11.625%     202   13.812
php                        4.1900    0.150%    0.017%       6    0.698
mysqldump                  0.7800    0.028%    0.003%       3    0.260
perl                       0.0000    0.000%    0.000%       9    0.000
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%      15    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  2795.0100  100.000%   11.646%     265
Average per day:        2795.0100    1 days
CPU percentage assumes 24000 cpu seconds per day total.

::::::::::::::
foo.sa.analyzed.6
::::::::::::::

Process               CPU seconds      user   machine   count  average
php56.cgi               2451.7000   99.793%   10.215%     287    8.543
php                        4.2900    0.175%    0.018%       6    0.715
mysqldump                  0.7900    0.032%    0.003%       3    0.263
perl                       0.0000    0.000%    0.000%       4    0.000
bash                       0.0000    0.000%    0.000%       1    0.000
dirname                    0.0000    0.000%    0.000%      12    0.000
readlink                   0.0000    0.000%    0.000%       3    0.000
postdrop                   0.0000    0.000%    0.000%       1    0.000
which                      0.0000    0.000%    0.000%       3    0.000
basename                   0.0000    0.000%    0.000%       6    0.000
sendmail                   0.0000    0.000%    0.000%       1    0.000
sh                         0.0000    0.000%    0.000%       3    0.000

----------------------------------------------------------------------

Total:                  2456.7800  100.000%   10.237%     345
Average per day:        2456.7800    1 days

CPU percentage assumes 24000 cpu seconds per day total.

foo@bar:~/logs/resources$ ls -lah

total 184K

drwxr-xr-x  2 foo root     4.0K Aug 31 07:47 .
dr-xr-x--- 15 foo dhapache 4.0K Dec 24  2011 ..
-rw-r-xr-x  1 foo root        0 Jul 18  2006 access.log
-rw-r-xr-x  1 foo root        0 Jul 18  2006 error.log
-rwxr-xr-x  1 foo root     2.5K Mar 12  2010 sa.analysis.pl
-rw-r-xr-x  1 foo root        0 Aug 31 07:47 foo.sa.analyzed
-rw-r-xr-x  1 foo root     1.9K Aug 31 07:47 foo.sa.analyzed.0
-rw-r-xr-x  1 foo root     1.2K Aug 30 07:47 foo.sa.analyzed.1
-rw-r-xr-x  1 foo root     1.2K Aug 29 07:47 foo.sa.analyzed.2
-rw-r-xr-x  1 foo root     1.2K Aug 28 07:47 foo.sa.analyzed.3
-rw-r-xr-x  1 foo root     1.2K Aug 27 07:47 foo.sa.analyzed.4
-rw-r-xr-x  1 foo root     1.2K Aug 26 07:47 foo.sa.analyzed.5
-rw-r-xr-x  1 foo root     1.2K Aug 25 07:47 foo.sa.analyzed.6

Y después de revisar esto y los errores, encuentro que del 26 al 29 de agosto:

$ zgrep ModSecurity  error.log.*.gz | wc
29    1097   13226

$ zgrep Premature  error.log.*.gz | wc
58     828    7996

Según el propio KB, cuando se queda sin memoria php se encontraran en los logs “Premature end of script headers” y a mi me interesaba saber cuantas veces ModSecuriy detuvo un proceso, ya que estoy casi seguro que eso debe de afectar también.

Es decir me quedé 58 veces sin memoria en los procesos PHP… o al menos eso dicen los logs… entonces me quedo con la idea de que no estoy tan apretado con mi sitio,  dicho sea de paso de snafu apenas active lo de la revisión del CPU tengo curiosidad de ver que tal va, según leo en la documentación se asumen como limite 300 minutos al día, en el propio reporte dice que toma 24000 segundos totales, es decir 400 minutos en mi día más ocupado utilice 3107, que son casi 52 minutos, entonces creo que estoy no tan mal.

Ya con datos de snafu, resulta que uso mucho más procesador en el mismo, estando normalmente en los 3000 segundos.

Supongo entonces que más bien me quieren vender que funciona mucho mejor su siguiente producto, el VPS, con memoria dedicada y discos duros de estado solido, lo cual es muy probable, pero el costo no me emociona.

Esto hizo que me preguntara un rato que tanto estoy hosteando e hiciera un rápido inventario de lo mismo y lo que quedo de lo que si uso:

5.61 MB         rradiko.com
103.26 MB       kermatronic.com
167.25 MB       wiki.animeproject.org
334.77 MB       historico.animeproject.org
2.01 GB          anaserradilla.org
2.38 GB          blografia.net
10.33 GB        cobacha.animeproject.org
12.05 GB        ociologia.org
22.93 GB        ociologos.org
4.40 GB          anime-project.org

Y después de quitar ociologia y ociologos que tienen fotos y/o mirror de sitios ya desaparecidos pero que si me interesan, casi que entro en un VPS con 20GB de disco duro de estado solido no necesariamente en DH, ya que para VPS se me ocurren opciones mejores como Digital Ocean, Linode o hasta OVH.

Pero Dreamhost me provee de un panel sin demasiadas complicaciones al que ya me acostumbre, bastante espacio, un desempeño aceptable para lo que realizo y un costo igual, el ejercicio me ayudo para pensar en un montón de cosas que debo de empezar a dejar ir, varios nombres de dominios y páginas que ya no uso y no parece que vaya a usar y un montón de archivos de respaldo de proyectos y trabajos que también ya acabaron y se acumularon con el tiempo, resultado, puedo moverme a un mejor servicio, pero tendría que dedicarle un tanto mas de trabajo sobre todo al migrar y configurar los mismos, cosa que pudiera ser útil, pero no urgente o necesario y que no tengo deseo de hacer.

La opción del VPS con DH no me conviene por el lado del costo, se va muy por encima de lo que me gustaría pagar y no me ofrece mayores beneficios que la competencia, para mis necesidades.

PS. foo corresponde con mi sitio de monos ojones animeproject y snafu con blografia, pero no me parece útil poner el nombre de servidor ni los usuarios que uso ;) ¡me lleve una sorpresa de que parece ser más popular y usar mayores recursos mi sitio de blogs que mi sitio de monos ojones!

Domingo 03 de septiembre de 2017

Luis Cacho

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 HALoad 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-OffloadingSSL-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 BalancerCloud Load Balancer

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

Cloud Load BalancerCloud Load Balancer

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

Cloud Load BalancerCloud 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/images 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%';
  2. 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%';
  3. Update any “pinged” links:
    UPDATE `wp_posts` SET pinged = REPLACE(pinged, 'http://example.com', \
    'https://example.com') WHERE pinged LIKE '%http://example.com%';
  4. 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%%');
  5. 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%';
  6. 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%';
  7. 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%';
  8. 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 URLsUpdating 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.

The post WordPress with Let’s Encrypt SSL Certificate on a Load Balancer appeared first on My Binary Life.

Sábado 02 de septiembre de 2017

Se vende Mochila para Laptop

Características Es una 5.11 Tactical Covert Boxpack, con compartimento para Laptop y para gafas, diseñada para cualquier tipo de clima. Está construída con Poliester balístico 1680D, correas de hombro acolchonadas, altamente resistente al agua. Gran capacidad de almacenamiento. Estado Menos de 1 año de uso, no tiene ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, precio de $ 90.00 USD (~ $ 1,604 MXN) con envío DHL incluído, se aceptan Bitcoins.

Martes 29 de agosto de 2017

La triste historia del gas

Hace mucho tiempo compraba gas por cilindro de 20 kilos y más o menos ya sabia a que atenerme, los precios más o menos estaban pegados en el camión y una forma rápida de darse cuenta de si el cilindro venia lleno o no era con el sello de garantía y por la forma en que lo cargan los repartidores… avancemos en el tiempo a ahora que tengo tanque estacionario y tuve que aprender un par de cosas, primero que con este tipo de tanque las cosas son por litro, por ejemplo el costo es por litro surtido y no por kilogramo, más divertido aún el tanque mide porcentaje de llenado, no litros…supongo que es más sencillo para leer, no así para su compra y manejo, al respecto Antonio escribió una excelente entrada que debí de leer antes de aprenderlo de primera mano y recomiendo ampliamente [1].

Total que aprender un par de trucos ayudo, como el asegurarse de cuanto marca al llamarlos y cuanto le ponen y cuanto se pide, al 80%, 85 o al 90% (no recomendable según el fabricante) y de preferencia subirse con ellos… pero esta no es la parte triste, antes de la reforma energética, el precio del gas estaba regulado y en Amexgas [2] se podía consultar el precio de gas autorizado mes a mes por entidad federativa y se podían consultar los anteriores, hasta diciembre de 2016, con la reforma el precio del gas se “libero” y cada mes o más bien cada semana se ajustan los precios del mismo, lo cual hace complicado encontrar el precio actual, entiendo que la ley dice que el camión repartidor debe exhibir el precio, en la practica muchos lo traen en la parte donde esta el medidor, es decir solo puede ser visto cuando están surtiendo gas y por ejemplo para este mes hay desde quien lo vende a 7.86 el litro hasta quien lo tiene a 8.58 el litro, ¿pero como saber? Una idea al principio fue revisar las páginas de las gaseras, mala idea, la sección amarilla tiene algunas pero no da una idea clara de cuales surten o cual es el precio que ofrecen…

Si uno intenta buscar en la red se va a encontrar muchas noticias en periódicos y fuentes de noticias al respecto del precio del gas, casi todas lejanas y no útiles para elegir el precio o para informarse de como se encuentra el día de hoy… como era de esperarse la Comisión Reguladora de Energía tiene los precios al publico reportados por los distribuidores [3] al cual de manera interesante no es sencillo acceder al buscar la comisión por si misma http://www.gob.mx/cre , donde finalmente es posible acceder a una lista de Consulta de precios vigentes de gas LP mediante planta de distribución reportados por los permisionarios [4] donde vienen los precios tanto de los litros como de los kilos según reportan por ley (la cual se encuentra citada al final de la propia página), ya con esta tabla que no se puede ordenar por precio o columna uno puede tomarla y pasarla a LibreOffice y crear un autofiltro y ordenar para ver quien es quien reporto menor precio en esos días y claro corroborarlo por teléfono, redes sociales o directamente en su sitio para ahora si hacer el pedido, no creo que fuese imposible crear una visualización o extraer los datos para construir algo como hoyodecrimen [5], que justo extrae y presenta datos oficiales de una manera que hagan puedan ser interpretados de una manera sencilla.

No me he animado a hacer revisión mayor de datos, pero sería interesante ver si dependiendo de la delegación / zona, municipio los datos cambian, pero en mi caso no es algo que tenga el tiempo o ganas de realizar, baste decir que es un ejercicio que la primera vez se antoja útil pero que seguramente será desgastante para la mayoría e inútil si uno tiene a un gasero en el que confía que da un buen servicio.

[1] https://www.libresindeudas.com/robo-de-gas/
[2] http://www.amexgas.com.mx/precioglp.php
[3] https://www.gob.mx/cre/documentos/precios-al-publico-de-gas-lp-reportados-por-los-distribuidores
[4] http://www.cre.gob.mx/ConsultaPrecios/GasLP/PlantaDistribucion.html?idiom=es
[5] https://hoyodecrimen.com/

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!! 🙂

Miércoles 19 de julio de 2017

Alcance Libre: Oferta de empleo para Administrador de Red.

Jueves 06 de julio de 2017

Fco. de la Torre Inguanzo

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

Varias formas de hacer una USB de arranque

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

Mi buen amigo Miguel tiene varios problemas con su equipo y le sugerí cambiar de distribución (igual no soluciona nada, pero se entretiene). Me dijo que no podía quemar un DVD con la imagen ISO (ese es uno de sus problemas) y  le comenté que quemar un CD o DVD ya era cosa del pasado, lo de hoy es hacer una usb de arranque.

Le iba a recomendar un artículo de mi blog, pero me di cuenta de que ya tienen mucho tiempo y mejor decidí escribir uno nuevo más actualizado con varios programas.

Si usas windows intenta con Rufus

Este pequeño programita funciona de maravilla y es mi primera recomendación para alguien que viene de Windows y quiere hacer su usb de arranque para instalar Linux.

Es muy simple,  pequeño (¡menos de 1Mb!), hace bien su trabajo, vamos que es una lástima que no tenga una versión para linux.

Es más, creo que ni siquiera requiere de instalación, solo lo ejecutas y ya. ¿Mencioné que también es software libre?

RufusRufus en acción.

El punto medular es seleccionar la opción que dice: Crear disco de arranque con Imagen ISO y luego elegir la imagen de la distribución de Linux que quieran grabar en el dispositivo USB.

Descarga Rufus.

mintstick

Una de las cosas buenas que me dejó mi paso por Cinnamon fue mintstick. Una herramienta súper minimalista, solo hace dos preguntas, ¿Dónde está el archivo ISO? y ¿En cual dispositivo USB lo quieres grabar?.

mintstickMinimalista al extremo

En manjaro está disponible en AUR y el paquete se llama mintstick-git. Supongo que también estará disponible en otras plataformas, será cosa de buscarle.

No puede faltar la terminal.

Antes de todo existió la terminal. Se puede crear perfectamente una USB de arranque solo que hay que tener algunas precauciones extras.

Lo primero que hay que hacer es averiguar EXACTAMENTE cuál es tu USB en el sistema. Para eso nos vamos a auxiliar del comando blkid.

blkidUsamos blkid para identificar el directorio del dispositivo usb.

Como pueden ver en la imagen, la usb esta en la carpeta /dev/sdd  . El número indica que es la primer particion de la unidad y no es necesario para el comando dd.

Así que para crear nuestro usb de arranque basta y sobra con invocar al comando dd y teclear algo más o menos así.

dd bs=4M if=/ruta/del/archivo.iso of=/dev/sdd

Después de unos instantes y si todo sale bien, copiará la información al dispositivo usb y podrá usarse como una usb de arranque.

usb de arranque listaListo y sin problemas.

Ahora podrán iniciar su computadora con la usb. La forma varía de equipo a equipo, algunos es con la tecla Esc durante el arranque, o puede ser F8,F11 o F12 depende del fabricante del BIOS.

Si saben de otra forma para crear una usb de arranque, no duden en comentar.

Varias formas de hacer una USB de arranque
linuxmanr4.

Miércoles 05 de julio de 2017

Emerson Posadas

Emerson Posadas
toxickore BLOG

Jugando con la API de bitso: bitso-py

Hace poco "caí en el juego" de las criptomonedas. Un poco de ETH, BTC y XRP. Como mortal comprador/vendedor hice algunas transacciones y ahí estoy esperando a que mis órdenes se ejecuten.

Pero esto es a modo manual, que tal que no quiero estar al tanto y quisiera comprar/vender en el momento oportuno basado en números y estadística real mas que en una impresión de "wow! VENDE YA!"

bitso da acceso a su API y soporta python. Hay que ir a la sección del perfil, luego en el menú API y click en el botón "add new API"


Después es instalar bitso-py con pip: sudo pip install bitso-py (para debian like distros)
Finalmente se puede empezar a interactuar con nuestra cuenta:

emerson@panopticon:~/trade$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import bitso
>>> api = bitso.Api('BLABLABLA', 'BLABLABLABLEBLEBLEBLABLABLA')

Finalmente se puede empezar a interactuar con nuestra cuenta:
Ticker:
>>> tick = api.ticker('btc_mxn')
>>> tick
Ticker(book=btc_mxn,ask=47700.00, bid=47044.21, high=48149.59, last=47699.98, low=46500.77, created_at=2017-07-05 01:25:20+00:00, vwaplow=47208.95622891)
>>> tick = api.ticker('eth_mxn')
>>> tick.last
Decimal('4990.00')
>>>

Open orders:
>>> oo = api.open_orders('xrp_mxn')
>>> oo
[Order(oid=XrVsQ9l2sfngvi7R, side=sell, type=limit, price=5.45, original_amount=110.61973300)]
>>> oo[0].price
Decimal('5.45')
>>> oo[0].original_amount
Decimal('110.61973300')
>>>

Order Book:
>>> ob = api.order_book('eth_mxn')
>>> print ('Alguien comprando ETH a :'+str(ob.bids[0].price),'Esta cantidad de ETH: '+str(ob.bids[0].amount))
('Alguien comprando ETH a :4910.00', 'Esta cantidad de ETH: 0.80090424')
>>>

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

 

Jueves 22 de junio de 2017

Fco. de la Torre Inguanzo

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

Como reemplazar el audio de un video con software libre

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

El otro día me vi en la necesidad de reemplazar el audio de un video. El original tenía una narración en español y el objetivo era de que el video final tuviera el audio en inglés.

Tarde unos momentos en averiguar una forma para abordar el problema. Como anteriormente había hecho algunos experimentos con un editor de video fue lo primero que me vino a la mente.

Usando el editor de video Openshot.

Openshot ha cambiado mucho desde la última vez que lo utilice, pero no se si para bien o para mal. Se siente raro, como que tiene vida propia y no hace lo que se espera que tiene que hacer. Simplemente quitar de la pantalla una ventana con un mensaje muy insistente dio al traste con mi apreciación hacia el programa.

Openshot - PropiedadesPara silenciar el video hay que poner la propiedad en cero. Bien intuitivo el asunto.

Como lo que quería hacer no era muy complicado decidí seguir adelante con Openshot. La idea en mi mente se antojaba muy sencilla.

Lo primero sería agregar el video original, ajustar su audio a mute (o sea ponerlo en silencio), agregar el nuevo audio y revisar su sincronización.

Al final, exportar todo el proyecto y el resultado sería un video con la nueva pista de audio.

Ahí hubiera terminado todo, de no ser que la exportación del video tardó demasiado tiempo. Y para colmo de males, a la mitad de la exportación, el tamaño del archivo generado era exagerado y superado ampliamente comparado con el tamaño del archivo original.

Así que era tiempo de cambiar de enfoque.

Usando la terminal con el comando ffmpeg.

Intenté varias cosas hasta que me encontré con este artículo: Replace the audio track in a video que utiliza la herramienta ffmpeg para completar la tarea.

FFmpeg es una navajita suiza con un montón de herramientas para archivos de video.  Con esta simple línea de código en la terminal:

ffmpeg -i audio.mp3 -i video.mp4 -c copy final_video.mp4

Reemplaza el audio original por el contenido en el archivo audio.mp3 y no solo eso, lo hace en un tiempo récord sin aumentar notablemente el tamaño del archivo final.

Al final quedé muy contento con el resultado. Un tip, si tienen problemas para sincronizar el audio con el video les recomiendo Audacity uno de esos programas insignia del software libre presente en todas las plataformas importantes. Aunque manejarlo es tema para muchos artículos una sincronización (aumentando o disminuyendo tiempos) no es complicado.

Espero que esta información les sea útil ¡Hasta la próxima! 🙂

Imagen principal del micrófono gracias a Jonathan Velasquez.

Como reemplazar el audio de un video con software libre
linuxmanr4.

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!

Martes 06 de junio de 2017

Emerson Posadas

Emerson Posadas
toxickore BLOG

On Senior Engineers

From Fer Perales twit:


Full article: https://dev.to/bhilburn/on-senior-engineers

Viernes 02 de junio de 2017

Fco. de la Torre Inguanzo

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

Como reducir de tamaño un archivo pdf ¡Sin morir en el intento!

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

Les voy a contar lo que me pasó el otro día. Un usuario me pidió ayuda para reducir de tamaño un archivo pdf ya que era muy grande para poder enviarlo por correo. Le dije — ¡No hay problema! pero después de un rato, algo que parecía sencillo, se complicó bastante.

El archivo en cuestión constaba de 26 hojas escaneadas en buena calidad y supongo que el mismo programa con el que escaneo las hojas le generó el pdf. En total el archivo era de unos 26 MB y ya había ocasionado algunos problemas para su envío. Algunas cuentas de correo tienen límites en el tamaño de los archivos adjuntos, por lo general, se recomienda enviar archivos menores a 20 MB.

Separando el PDF en varias imágenes.

Mi primer enfoque fue separar el archivo PDF generando un archivo jpg por cada una de sus hojas, para luego reducirlas de tamaño y crear nuevamente un archivo PDF. Pero por alguna razón esta tarea puso a tope los CPU’s de mi computadora al grado de afectar otros procesos. Algo parecido ya me había pasado cuando quise generar un archivo PDF a partir de las imágenes jpg.

PDF a imágenes JPG

Con mi experiencia anterior supuse que ese consumo tan exagerado de recursos era provocado por ImageMagick así que busqué una solución usando GraphicsMagick en su lugar.

Para lograr separar las imágenes usé esta instrucción:

gm convert -density 300 -resize 1200 archivo.pdf +adjoin %02d.jpg

Como pueden ver, de una vez aproveché para ajustar la densidad de la imagen a unos 300 dpi y un ajuste en el tamaño. +adjoin me permite generar un archivo por cada página del pdf y la expresión %02d.jpg nombra los archivos incrementalmente con nombres de archivos de dos dígitos (que pueden ser más).

Aún así, no me libro de un importante consumo de recursos, aunque solo por un breve instante.

equipo al tope¡Mi computadora echando humo!

Lo más importante es que el resultado de esta operación sean imágenes sean legibles, luego se hacen tantos ajustes y reducciones que el resultado es un montón de hojas borrosas que no sirven de nada.

Una vez que revisé las imágenes, que me parecieron de un tamaño adecuado y visualmente legibles iba a proceder a crear un nuevo archivo PDF usando las instrucciones de este artículo: Convertir todas las imágenes de un directorio a PDF. peeeeeeerooooo …

¡Hay una forma más simple!

PDF a PDF más pequeño

Estaba a punto pegar todas las imágenes del directorio a un pdf cuando me di cuenta de que era posible hacerlo directamente, luego entonces mi instrucción anterior se convirtió en esto:

gm convert -density 300 -resize 1200 archivo.pdf archivo_nuevo.pdf

Y así, directamente, sin pasar por la generación de archivos jpg pude crear un pdf más pequeño que el anterior.

La opción en línea.

También se pueden usar los servicios de una página como ILovePDF para hacer más pequeños los archivos. Además ofrece otras herramientas como la de combinar, girar, convertir o separar archivos PDF.  Si tu archivo no es exageradamente grande o confidencial también es una buena opción.

Usando LibreOffice

Gracias al comentario de sayozo pude comprobar que también LibreOffice hace un buen trabajo en la reducción de tamaño de un PDF. De hecho es muy simple, basta con abrir el archivo PDF usando cualquier aplicación de LibreOffice (aunque al final termina abriendo Draw).

Opciones de exportación a PDFOpciones de exportación a PDF.

Luego elegir el menú ArchivoExportar a PDF y ajustar los valores de Compresión JPEG y Reducir resolución de imágenes. Generalmente valores más bajos generar archivos más pequeños.

Solo revisen que sigan siendo legibles, bajar mucho estos valores puede generar archivos ilegibles o borrosos.

Espero que este consejo les ahorre tiempo y algo de espacio en su disco duro 😉 .

Como reducir de tamaño un archivo pdf ¡Sin morir en el intento!
linuxmanr4.

Viernes 26 de mayo de 2017

Emerson Posadas

Emerson Posadas
toxickore BLOG

Cosas por leer esta semana


Lunes 22 de mayo de 2017

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

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.

Martes 25 de abril de 2017

José Oviedo

José Oviedo
oviedo.mx

PHP: Instalar PDO_SQLSRV en Linux

Buscando en los modulos de Ubuntu/Debian no aparece la extensión para PHP de PDO_SQLSRV, solamente tenemos:

  • php7.0-pdo-firebird
  • php7.0-pdo-pgsql
  • php7.0-pdo-sqlite
  • php7.0-pdo-odbc
  • php7.0-pdo-mysql
  • php7.0-pdo-dblib

Y nada que diga php7.0-pdo-sqlsrv, pero la solución es compilar la extensión manualmente, gracias a PEAR, como root ejecutamos:

apt-get install unixodbc-dev php7.0-dev php-pear

pecl install pdo_sqlsrv-4.0.5

echo -e “; priority=20\nextension=pdo_sqlsrv.so” > /etc/php/7.0/mods-available/pdo_sqlsrv.ini

phpenmod -v 7.0 pdo_sqlsrv

/etc/init.d/php7.0-fpm restart

Y listo, deberíamos de tener en nuestro phpinfo() algo así:

Si utilizamos windows, descargamos la extensión desde aquí: Microsoft Drivers for PHP for SQL Server y este link para instalar el driver Microsoft ODBC Driver 13 for SQL Server

Y listo, ya nos podemos conectar al servidor SQL Server desde PHP.

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


Domingo 02 de abril de 2017

Utilizar un segmento de red distinto para docker

Hace unos días comentaba como hacer la instalación de docker en centos 7, pues bien al empezarlo a utilizar una de las cosas que no me gustaron es que el segmento que utiliza, el segmento que deseo utilizar para mis pruebas es un pequeño segmento /28 que ya es ruteable por mi VPN, por la VPN punto a punto y desde mi casa sin necesidad de cambiar reglas o agregar nuevas, me puse a buscar información y no encontré nada que funcionara, ni lo que menciona la pagina de docker (Build your own bridge). Ya que menciona que hay que cambiar /etc/default/docker que en parte es cierto pero no menciona que esto solo es para versions sysvinit y no aplica para los que usamos systemd.

La forma que lo pude hacer no se si sea oficial o soportada, pero es la que a mi me funciono

Primer paso

Creamos el archivo /etc/default/docker y agregamos el segmento que queremos utilizar de la siguiente forma

DOCKER_OPTS="--bip=172.20.2.65/28"

hasta aquí es lo que muestra la pagina oficial y que no funciona

Segundo Paso

Modificar la unidad que inicia el demonio de docker, este es el archivo original

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target firewalld.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

Deberá quedar de la siguiente forma

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target firewalld.service

[Service]
EnvironmentFile=-/etc/default/docker
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

En la sección de servicio se agrega EnvironmentFile=-/etc/default/docker y se modifica ExecStart=/usr/bin/dockerd $DOCKER_OPTS

En mi caso reinicie el equipo y con esto fue suficiente docker ya corre en mi segmento personalizado

Martes 28 de marzo de 2017

Instalación de Docker en Centos 7

Constantemente estoy haciendo pruebas de aplicaciones, proyectos o ideas que me parezcan interesantes, normalmente utilizo mi laptop, pero ahora que tengo un VPS para este fin se me ocurrió hacer pruebas con Docker, un extracto de la Wikipedia menciona algo así:

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de Virtualización a nivel de sistema operativo en Linux Docker utiliza características de aislamiento de recursos del kernel de Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que “contenedores” independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales. Docker en Wikipedia.

Instalación

La instalación es sumamente sencilla con un yum install docker y listo, ya que docker se encuentra en los repositorios de Centos, el único detalle es que no es la ultima versión. En este caso habrá que hacer unos pequeños pasos.

Ver si tenemos actualizaciones por aplicar

sudo yum check-update

Si se tienen actualizaciones por aplicar pues actualizamos si no se procede a ejecutar el script oficial, el cual agrega el repositorio oficial e instala los paquetes.

curl -fsSL https://get.docker.com/ | sh

Iniciamos el servicio

sudo systemctl start docker

Habilitamos para inicio automático en caso de querer que se inicie solo.

sudo systemctl enable docker

Si queremos evitar teclear sudo cada que vamos a ejecutar comandos de docker, agregamos al groupo docker al usuario que deseamos.

sudo usermod -aG docker tyo100

Y listo, con eso tenemos docker y podremos ir probando los contenedores que nos encontremos en la red o crear los nuestros.

Conforme vaya avanzando ire publicando mas cosas relacionadas a Docker.

 

Sábado 25 de marzo de 2017

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

Viernes 17 de marzo de 2017

Alejandro Acosta

Alejandro Acosta
alejandroacosta.com

Participation at Scale15x

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

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

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

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

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

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

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

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

17016790_10158268672015557_8940515797083529303_o

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

17103309_10101810968571274_3543603321226478432_n

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

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

 

 

 

 

 

 

 

 

 

 


Lunes 13 de marzo de 2017

Planeta Linux – Xanax For Sale » Reliable Online Pharmacy

Fotos y Comentarios

Domingo 26 de febrero de 2017

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Ser agradecido en tiempos de abundancia

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

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

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

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

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

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

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

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

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

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

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

Jueves 23 de febrero de 2017

Julio Poisot De María

Julio Poisot De María
Dianamo

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









hardhedgehoglife:

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

hardhedgehoglife.etsy.com

Julio Poisot De María

Julio Poisot De María
Dianamo

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







hardhedgehoglife:

hardhedgehoglife:

hardhedgehoglife:

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

“I h8 you”

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

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

For you eager romantics.

That day for eating chocolates hedgehogs is coming up again.

Lunes 30 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

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

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

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

Jueves 19 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Esperar hasta terminar la entrada estándar

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

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

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

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

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

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

¿Alguien conoce alguna mejor manera?

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

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

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

Miércoles 18 de enero de 2017

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Creating .NET Bindings for C Libraries with ObjectiveSharpie

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

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

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

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

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

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

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

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

Martes 17 de enero de 2017

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

postfix_delivery_search.bash

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

#!/bin/bash

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

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

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

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

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

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

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

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

Jueves 12 de enero de 2017

Gustavo Rubio

Gustavo Rubio
Ahí vamos

En México todos tenemos una agenda

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

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

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

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

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

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

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

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

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

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

Domingo 08 de enero de 2017

David Moreno

David Moreno
dm's blog

Thanks Debian

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

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

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

[-- The following data is signed --]

Hi,

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

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

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

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

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

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

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

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


[-- End of signed data --]

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

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

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

Peace.

Miércoles 30 de noviembre de 2016

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Las elecciones de facebook

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

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

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

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

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

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

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

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

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

Jueves 24 de noviembre de 2016

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Cita

Hot:

Siempre es bueno ver que alguien cita tu trabajo.

 

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