Mariano Guerra: Improving Official Erlang Documentation

Many times I've heard people complaining about different aspects of the Official Erlang documentation, one thing that I find interesting is the fact that the Erlang documentation is really complete and detailed, so I decided to dedicate some time to other parts, to get familiar with it I decided to start with an "easy" one, it's presentation.

So I downloaded erlang/otp:

git clone https://github.com/erlang/otp.git

And did a build:

# to avoid having dates formated in your local format
export LC_ALL="en_US.utf-8"
cd otp
./otp_build setup
make docs

Then I installed the result in another folder to see the result:

mkdir ../erl-docs
make release_docs RELEASE_ROOT=../erl-docs

And served them to be able to navidate them:

cd ../erl-docs
python3 -m http.server

If you want to give it a try you need to install the following deps on debian based systems:

sudo apt install build-essential fop xsltproc autoconf libncurses5-dev

With the docs available I started looking around, the main files to modify are:

lib/erl_docgen/priv/css/otp_doc.css
The stylesheet for the docs
lib/erl_docgen/priv/xsl/db_html.xsl
An XSLT file to transform xml docs into html

The problem I found at first was that to see the results of my changes to db_html.xsl I had to do a clean and build from scratch, which involved recompiling erlang itself, taking a lot of time.

Later I found a way to only build the docs again by forcing a rebuild:

make -B docs

But this still involves building the pdf files which is the part that takes the most time, I haven't found a target that will only build the html files, if you know how or want to try to add it in the make file it would be great.

With this knowledge I started improving the docs, I will cover the main things I changed.

You can see all my chages in the improve-docs-style branch.

Small styling changes

  • Don't use full black and white
  • Set font to sans-serif
  • Use mono as code font
  • Improve link colors
  • Improve title and description markup on landing page
  • Update menu icons (the folder and document icons)
  • Improve panel and horizontal separator styles
  • Align left panel's links to the left

Improve code box color, border and spacing

/galleries/misc/otp-old-2.png

Old Code Examples

/galleries/misc/otp-new-2.png

New Code Examples

Improve warning and info boxes' color, border and spacing

/galleries/misc/otp-old-3.png

Old Warning Dialog

/galleries/misc/otp-new-3.png

New Warning Dialog

/galleries/misc/otp-old-4.png

Old Info Dialog

/galleries/misc/otp-new-4.png

New Info Dialog

Logo Improvements

  • Remove drop shadows from logo
  • Center Erlang logo on left panel
  • Erlang logo is a link to the docs' main page
  • Put section description after logo and before links in left panel
/galleries/misc/otp-old-1.png

Old Landing Page

/galleries/misc/otp-new-1.png

New Landing Page

Semantic Improvements

  • Use title tags for titles
  • Remove usage of <br/> and empty <p></p> to add vertical spacing
  • Use lists for link lists
  • Title case section titles instead of uppercase
  • Add semantic markup and classes to section titles and bodies
  • Add classes to all generated markup
    • The ones I couldn't figure out a semantic class I added a generic one to help people spot them in the xsl document by inspecting the generated files
  • Clicable titles for standard sections with anchors for better linking

Improve table styling

/galleries/misc/otp-old-5.png

Old Tables

/galleries/misc/otp-new-5.png

New Tables

Improve applications page

/galleries/misc/otp-old-7.png

Old Applications List

/galleries/misc/otp-new-7.png

New Applications List

Improve modules page

/galleries/misc/otp-old-8.png

Old Modules List

/galleries/misc/otp-new-8.png

New Modules List

Add "progressive enhanced" syntax highlighting

At the bottom of the page there's a javascript file loaded, if successful it will load the syntax highlighter module and css and then style all the code blocks in the page, if it fails to load, is blocked or no js is enabled then the code blocks will have a default styling provided by CSS.

The markup was not modified in any way to add this feature.

Make code tokens easier to differentiate from standard text

The previous style for inline code was a really light italic font, I changed it to monospace but it was hard to distinguish, so I got some inspiration from slack and surrounded the inline code words in a light box to make them stand out.

Indent Exports and Data Types' section bodies

/galleries/misc/otp-old-6.png

Old Data Types and Exports Sections

/galleries/misc/otp-new-6.png

New Data Types and Exports Sections

This is all for now, I have some other ideas for future improvements but they involve changes to the documentation so I will submit them separatedly.

If you have any feedback please let me know!

Patricio Molina: Pet Valu Celebrates Their Grand Opening at Bristol Plaza

Pet Valu Celebrates Their Grand Opening at Bristol Plaza, Saturday, October 22, 2016
Press Release – October 23, 2016

(October 23, 2016; Bristol, CT)—BLACKLINE Retail Group and Federal Realty proudly announce the opening of Pet Valu in Bristol Plaza.  The Pet Valu family of stores includes Pet Valu, Paulmac’s Pet Food and Bosley’s, Tisol, Total Pet, and Jack’s Pets. Together they are the largest retail operation in North America dedicated to providing families with food and supplies for dogs, cats, companion birds, wild birds, fish, reptiles and small animals. The grand opening was on Saturday, October 22, 2016. To celebrate their grand opening Pet Valu celebrated by giving the first 50 customers who made purchases a special goody bag full of fun animal supplies.

This is the chains 27th Connecticut location. The new store is located at 594 Farmington Ave and will be open 7 days a week.

BLACKLINE Retail Group based in Newton, MA represented the Landlord in this transaction.

About Bristol Plaza

Bristol Plaza is located in Hartford County at the intersection of Farmington Avenue, Route 6 and Hefbern Road in Bristol, CT. The property has a total of 266,000 square feet of retail space and 1,244 parking spaces. The population in a 5-mile radius is 107,000 + with an average household income of $83,000 and up.
About BLACKLINE Retail Group
Based in Newton, Massachusetts, BLACKLINE Retail Group provides first class shopping center leasing and brokerage services to Landlords from Connecticut to Maine.  BLACKLINE leases over 3 Million Square Feet of premium retail in Lifestyle Centers, Power Centers & Neighborhood Centers and have completed hundreds of retail transactions with Anchor Stores, Restaurants, Junior Anchors, Fashion Tenants and Service Users of all types.

BLACKLINE’S expertise includes property marketing, strong local prospecting, lease negotiating, site planning and tenant mix advisory services. With our team’s local and regional market knowledge and range of skills including shopping center marketing, lease negotiating, site planning, engineering and real estate finance, we offer landlords and tenants alike a full picture of the opportunities associated with any particular site.  Visit www.blacklinere.com, call 617.553.1820 for more information.

CONTACTS:
BLACKLINE Retail Group, LLC
Marketing Department
617-553-1820
info@blacklinere.com

The post Pet Valu Celebrates Their Grand Opening at Bristol Plaza appeared first on Blackline Retail Group, LLC.

Manuel Kaufmann (Humitos): #PyConES16: El abrazo de Siro

Pasaron los nervios. Quedó la alegría.

A fines de Septiembre fuimos con Johanna a Madrid, España para participar de la PyConES16 como habíamos adelantado anteriormente y volvimos más contentos que nunca en nuestras vidas. ¡Nos pasó de todo!

Sabíamos que no iba a ser un viaje fácil de realizar debido a que íbamos a tener que hacer muchos trámites para que a Johanna le permitan la entrada sin complicaciones en la Unión Europea, todo iba a ser muy costoso (por eso realizamos una campaña de donaciones), yo nunca había utilizado mi pasaporte Italiano y además estábamos muy nerviosos por la charla plenaria de cierre que estaba a cargo mío.

Siempre nos gusta tomar algunos recaudos en estas situaciones, por eso salimos un día antes de Cuenca hacia Guayaquil y ese mismo día fuimos a retirar la carta de invitación que Juanlu nos había enviado. Luego nos fuimos para el hotel y esperamos la hora de salida del primero de los vuelos (el de Johanna). Vamos juntos a la madrugada y ya notamos algo sospechoso al despachar su equipaje: su maleta la dejaron a un costado sin darnos ninguna explicación. Vuelvo al hotel y ella se queda esperando la salida de su vuelo.

Una vez que llego al hotel y pasados algunos minutos recibo una llamada de Johanna diciendo que la había llamado desde la oficina de antinarcóticos, que la habían tratado re mal, le habían revisado completamente todo su equipaje y que encima no le habían dejado volver a ponerle el plástico. Estábamos un poco asustados en ese momento. Por suerte, finalmente no pasó nada "más grave".

Por la tarde, ese mismo día, voy nuevamente al aeropuerto para tomar mi vuelo y otra vez al momento de despachar la maleta me la dejan a un costado. Esta vez, pregunto porqué habían tomado esa decisión y me dicen: "Porque es un bulto no convencional. Es decir, está envuelto en film y no puedo ver qué es. No se entiende si es una maleta, un bolso o qué. Son nuestras medidas de seguridad". Así que, me quedé esperando que me llamen por el altoparlante para pasar a antinarcóticos, al igual que Johanna, aunque eso finalmente nunca sucedió por suerte.

Sin embargo, un detalle. Al llegar a España noté que una caja de preservativos que llevaba dentro de mi equipaje estaba perforada como si fuese con un punzón o algo así. No me gustó eso, me hizo dar qué pensar sobre qué hacen con las maletas de uno.

Finalmente, todo lo que siguió fue viento en popa. Llegué a Madrid y al momento de hacer migraciones presento mi pasaporte Italiano y el señor me dice: "Bienvenido Manuel. Adelante". "¿Cómo? ¿No me va poner el sellito ni nada?". Me sorprendió que no me hayan hecho ningún control. De hecho, puedo decir que al ingresar a la Unión Europea tengo menos controles que para ingresar al país en el que nací. De no creer.

Voy caminando hacia la salida del aeropuerto y ahí ya los veo a Johanna y a Juanlu que me estaban esperando. Me sentí casi como una estrella de rock :)

Inmediatamente fuimos a la casa de Juanlu en taxi y al momento de llegar confirmamos que la mala onda de los taxistas es algo internacional. Parece que hay una única academia a nivel mundial. Igual, escuchar a dos españoles discutir zeziando fue muy gracioso; así que a mi modo de ver la situación, no me pareció tan mal.

Tiramos todas los bultos en la casa y nos fuimos a pasear por diferentes lugares de Madrid, sacamos algunas fotos y hablamos a más no poder con Jualu (era algo que nos debíamos luego de aquella SciPyLA 2015). Escuchamos muchos acentos en la calle, muchos idiomas, muchas formas de vestirse, mucha gente diferente, mucho de todo pero sin que eso nos estorbe. Nos sentimos muy bien y ya nos empezábamos a dar cuenta que Madrid podría ser una ciudad en la que nos guste vivir en algún momento.

Los días pasaron, empezamos a conocer a los amigos del círculo cercano de Juanlu los que pasaron a ser nuestros amigos inmediatamente. Paseamos por diferentes lugares con Johanna y aprovechamos que los precios de muchas cosas son extremadamente más bajos que en Ecuador para realizar algunas compras y chequeos médicos.

El día de la PyConES16 se acercaba y los nervios aumentaban, pero sin embargo no encontraba el lugar adecuado para sentarme en la máquina a terminar las 5 slides que me quedaban pendientes: algunas fotos puntuales y tipografías. Le pedí ayuda a Johanna con eso ya llegando al día anterior de la partida hacia Almería. Terminé eso, pero claro, todavía me faltaba hacer una pequeña práctica ya que tenías más de 120 diapositivas y estaba muy preocupado por el tiempo -aunque por otro lado pensaba: "Pero... muchas de estas duran menos de 5 segundos. Debería estar bien".

Llegó el día del viaje para Almería. Nosotros habíamos coordinado para ir con Carla en su auto (a quien habíamos conocido una o dos noches antes y ya nos parecía una genia) y también con Ángeles (a quién pasamos a buscar por Jaén a mitad de camino). Para encontrarnos con Carla nos tomamos un tren, y para llegar a la estación de trenes utilizamos MyTaxi. Al subirnos al tren, a esto de las 5 de la mañana, ya empecé a pensar que MyTaxi no existe en Ecuador, y que además el servicio de transporte público (bus) a las 18hs deja de pasar por mi barrio. Con Johanna íbamos anotando porotos para Madrid.

Nos encontramos con Carla en las afueras de Madrid y nos subimos todos al auto. 5 horas por delante nos esperaban en la ruta. Nosotros súper contentos porque íbamos a poder ir viendo el paisaje y conocer un poco más la geografía de España. Además, ¡manejaba otro! En el viaje hablamos de un montón de cosas, me encantó ser parte de esas charlas y también poder dormir un rato en las que no entendía :D

Durante el viaje, y pensando en la semana que habíamos vivido en Madrid, ya empezamos a notar algunos de los problemas del primer mundo que nos parecían muy graciosos: el tacho de basura de la calle está lleno de basura, hay un bache/pozo en una ruta de 400Km de longitud, algunos no ponen guiño/direccionales para cambiarse de carril, etc. Y sí, a nosotros nos daba risa, pero cuando eso es lo único que conocés o incluso peor, conocés otros lugares donde las cosas funcionan mejor, tiene mucho sentido quejarse. Hablamos bastante de esto con los chicos. Estuvo bueno.

Llegamos a Almería y nos fuimos derecho para el departamento que habíamos alquilado. La PyConES se acercaba y en mi cabeza lo único que había era la preocupación de no haber podido practicar la charla. Además, seguía pensando "¿Qué le voy a ir a decir yo a esta gente? ¿Para qué me invitaron? ¿Para qué dije que sí?". Las horas pasaban y los nervios aumentaban.

Al día siguiente de llegar a Almería nos vamos bien temprano para la Universidad ya que Carla iba a participar del taller de Django Girls y Johanna y yo íbamos a ser mentores. Teníamos muchas expectativas para ver cómo era un workshop organizado por otras personas (nunca habíamos ido a un taller que no sea organizado por nosotros). En términos generales, me parece que estuvo muy bien organizado y gestionado el taller. Creo que fue muy humano. Yo participé como meta-guía y me estuve paseando por todas las mesas ayudando a los diferentes guías a resolver los problemas a los cuales no le encontraban solución. También estuve charlando con los organizadores y las participantes en los tiempos muertos. Personalmente, lo disfruté mucho y estuve muy relajado al no formar parte de la organización :)

¡Empezó la PyConES16! Había un track entero con una orientación más científica (¡genial esa idea!) y otros dos tracks más de Python en general. Yo estuve paseando por los tres tracks y viendo un poco de todo. Algunas charlas me dejaron mucho, otras nada, otras no me gustaron directamente. Había de todo y para todos los gustos. Como para que te des una idea, hasta hubo un tipo regaló "plátanos/bananas" en su charla.

Llegando al final del primer día, yo seguía sin haber encontrado un tiempo para practicar mi charla, pero ya me había anotado para dar una Ligtning Talk sobre "fades + pysenteishon". Llegó el momento del éxito. Ahí estábamos sentados con Johanna en el escenario principal junto a otros disertantes más (un punto llamativo: Johanna fue la única mujer en dar una LT). Empieza la primera y quedamos impactados de lo bien preparada que estaba. La segunda, ¡también!. La tercera, ¡increíble!. Todos los slides perfectos, los tiempos justos, las palabras adecuadas. Incluso puedo decir que esas LT tenían mucha más preparación que algunas charlas que habíamos visto durante el día. Nosotros, con Johanna, nos mirábamos y ya teníamos vergüenza de estar sentados ahí -incluso sin haber hecho nada todavía.

Llega mi turno. Yo simplemente tenía que hacer 3 o 4 preguntas sobre virtualenv, explicar un poco para qué servía, como había evolucionado con virtualenvwrapper y finalmente mostrar fades utilizando pysenteishon como ejemplo y "de paso" cambiar los slides con el celular. Era súper simple. Pero claro, siempre y cuando mi máquina se digne a clonar la pantalla hacia el proyecto. Lamentablemente, como eso no sucedió y tuve que "extender a derecha", luego de hacer las preguntas e intentar tipear algo en la máquina salió todo mal, el tiempo corría y yo no daba a las teclas adecuadas mientras quebraba el cuello para mirar la proyección. La gente empezó a aplaudir y yo seguía intentando descifrar como escribir "-d" en la terminal. Fue un fiasco mi LT.

Inmediatamente después de mí, siguió Johanna. Empezó a hablar de la comunidad de Python Argentina, dar a conocer la PyConAR 2016 y otras cosas más. No sé muy bien cómo fue la situación, pero a los 2 minutos aproximadamente dijo algo que hizo emocionar a la gente que la empezó a aplaudir, ella también se emocionó, se puso nerviosa y se fue del escenario sin más. Le quedaron varias cosas por decir y 3 minutos de sobre :P

Luego del cierre del primer día nos fuimos a cenar todos en grupo. Estuvo buenísimo, hablé con mucha gente y me hice amigo de algunos casi tan locos como nosotros. Había mucha gente interesante en la conferencia. A mí me gustó particularmente que se organice un track científico ya que hizo que asista mucha gente que "nada que ver con la programación" por decirlo de alguna forma. Entonces, había una buena diversidad de opiniones, puntos de vista y mucho para discutir.

Llegó el Día. Domingo. Tenía que dar la charla plenaria de cierre. Sí, yo. Aún no lo podía creer. Además, seguía sin haber practicado ni siquiera 3 minutos mi charla. Misteriosamente, no estaba nervioso. Aunque tampoco estaba tranquilo, digamos.

Vamos a la conferencia, me paseo entre todos los tracks. Otra vez, algunas charlas muy interesantes y otras no tanto. Sin embargo, cada vez que hablaba con Johanna me decía que había visto cosas muy interesantes en el track científico. Eso me ponía contento porque muchas de esas charlas yo no estaba a la altura para poder evaluarlas.

En uno de esos encuentros con Johanna pactamos un horario para hacer una pequeña prueba de lo que iba a ser mi charla dentro de unas horas. Sí, para este momento ya tenía el PDF listo y estaba seguro del contenido, pero nunca lo había practicado y cada vez que miraba los más de 120 slides temblaba...

Luego del almuerzo, la practicamos y tuvimos decenas de interrupciones en el lugar que elegimos para hacerlo. A tal punto que decidimos alejarnos lo más que pudimos y volver a empezar. Así y todo seguíamos con interrupciones de gente que estaba por el lugar y demás. Entre miedo, bronca y nervios yo ya estaba de mal humor a esa altura. No estaba pudiendo meterme de lleno en la charla, aunque por otro lado tenía en la cabeza todo lo que quería decir.

¡Llegó el momento! Me subo al escenario y configuro todo. Miro el proyector y dice: "Argentina en Python", una foto de una vía y yo con un perro. Me miro. Estoy en el escenario, estoy en el proyector... "¡Mierda. Es mi charla. Vamos a ponerle todas las pilas!" Me presentan y... ¡vamos al ataque!

Como ultimamente he estado viajando mucho, siempre estoy preparado para emprender un nuevo viaje. Es por eso que hoy vine con mi maleta y la voy a ubicar por aquí

—dije mientras salía de atrás del telón

Como siempre en mis charlas, utilicé pysenteishon, pero esta vez lo había configurado para que la pantalla dure encendida 5 minutos, así no tenía el problema de que se me bloqueaba mientras quería pasar los slides.

Durante la charla estuve relajado. Empecé bien y siguió bien. Estaba tranquilo. Estaba seguro. Los pocos chistes que iba haciendo funcionaban. Eso me daba más seguridad. No lloré; y eso me ayudó mucho a seguir con el ritmo adecuado y estar atento y concentrado. "Me desnudé" en el escenario. Saqué todo desde lo más profundo de mí...

... mientras tanto, el celular que estaba usando con pysenteishon no dejaba de vibrar y no entendía muy bien lo que pasaba...

Mientras contaba mi historia y me preguntaba, y les preguntaba, "¿Qué catso hacía yo como Keynote Speaker en PyConES16?"; desde la mitad del salón gritaron: "¡Te lo merecés!". Me quedé helado. La gente empezó a aplaudir y mi heladéz pasó desapercibida.

Llegué al final de la charla y mi celular no había parado de vibrar ni un segundo. Llegué muy emocionado pero pudiendo controlar las ganas de llorar. No había terminado aún y yo ya estaba muy eufórico y contento con lo que había estado viviendo durante este tiempo (que ya no sabía hace cuánto que estaba ahí). Muestro la diapositiva que dice "Gracias" y la mayoría de la gente explotó en un aplauso de pié. Otros explotaron en el llanto (¡literal!). La emoción y la energía que había en ese momento fue tan grande que yo estaba completamente desorientado y no sabía que hacer. Recordé lo que Nando siempre me dijo: "Vos siempre mantené la calma. Si la gente aplaude, no hables, no hagas nada. Esperá que terminen". Y así fue, me quedé callado con lágrimas en los ojos, mirando a la gente a la cara y escuchando esos aplausos maravillosos. Nunca en la vida me había sentido igual.

Saludo a Juanlu en el escenario y me voy a sentar en el primer lugar que encuentro. No podía creer lo que acababa de suceder. No creía que la persona que había estado en el escenario había sido yo. Todavía no lo creo. Necesito ver el video de la charla para terminar de convencerme. Miro el celular y tenía más de 100 notificaciones en Twitter. Estaba atónito.

Luego vino el cierre de la PyConES16, los sorteos y demás.

Al momento de abandonar el auditorio se me acerca mucha gente, me felicita, me pide por favor que siga adelante, me dice que fue muy motivadora la charla, me dicen que quieren trabajar conmigo en un proyecto similar en España, me ofrecen su ayuda para lo que necesite, etc. Fue un momento hermoso, aunque yo no sabía que decir más que "Gracias. Muchas gracias". Estaba como abombado, digamos.

Mientras íbamos saliendo del auditorio camino al auto para emprender nuestra vuelta a Madrid, empiezo a saludar a los amigos más cercanos de Juanlu y despedirme: "hasta la próxima visita". Hay un momento de esa despedida que tuvo mucha fuerza, mucha energía y que me va a costar mucho olvidar: el abrazo de Siro.

Mariano Guerra: Software que no falla

Reproduzco acá un post que hice en facebook después de ver la siguiente transcripción:

/galleries/misc/software-no-falla.jpg

Avisenle al señor Tonelli que el mismo día que el decía eso la agencia espacial europea perdió contacto con una sonda que mando a marte, que estuvo desarrollando por los últimos 7 anios, el proyecto salio 870 millones de euros y tiene los niveles de control de calidad mas altos de cualquier industria.

Un día después de eso, durante mas de dos horas servicios como twitter, netflix, github, paypal estuvieron fuera de servicio porque alguien hackeo webcams y otros dispositivos "inteligentes" y los uso para realizar un ataque de denegación de servicio contra un servicio que traduce lo que escribís en la barra de direcciones de tu navegador a direcciones que las computadoras pueden entender.

El que dice que el software no va a fallar es un irresponsable y no puede tener ninguna responsabilidad legislando sobre siquiera una linea de código.

Luego comencé a agregar los siguientes comentarios:

1) Mas noticias del día, se encontró hoy en el sistema operativo que van a usar las maquinas de voto electrónico un error que permite a cualquier persona obtener control total sobre el sistema, se que no lo van a leer pero acá esta:

“Most serious” Linux privilege-escalation bug ever is under active exploit

2) Hoy se informo que una empresa que distribuye certificados SSL (lo que pone el candadito verde en la dirección de tu banco y hace que sea una conexión segura, que también se usa para la transmisión de los resultados de las maquinas de voto al servidor central) permitía a personas obtener certificados para dominios que no eran de las personas que los solicitaban.

Incident Report - OCR

3) Algunos "divertidos" de la historia: Stanislav Yevgráfovich Petrov (Станислав Евграфович Петров en ruso, nacido en 9 de septiembre de 1939) es un teniente coronel retirado del ejército soviético durante la Guerra Fría. Es recordado por haber identificado correctamente una alerta de ataque con misiles como una falsa alarma en 1983, por lo que evitó lo que podía haber escalado en una guerra nuclear entre la Unión Soviética y los Estados Unidos.

4) Uno de 1998: La Mars Climate Orbiter se destruyó debido a un error de navegación, consistente en que el equipo de control en la Tierra hacía uso del Sistema Anglosajón de Unidades para calcular los parámetros de inserción y envió los datos a la nave, que realizaba los cálculos con el sistema métrico decimal. Así, cada encendido de los motores habría modificado la velocidad de la sonda de una forma no prevista y tras meses de vuelo el error se había ido acumulando.

5) En 2003 50 millones de personas se quedaron sin electricidad en Estados Unidos y Canada por un error de software: https://en.wikipedia.org/wiki/Northeast_blackout_of_2003

6) La Therac-25 fue una máquina de radioterapia producida por AECL, sucesora de los modelos Therac-6 y Therac-20 (las unidades anteriores fueron producidas en asociación con CGR). El aparato estuvo comprometido en al menos seis accidentes entre 1985 y 1987, en los que varios pacientes recibieron sobredosis de radiación. Tres de los pacientes murieron como consecuencia directa. Estos accidentes pusieron en duda la fiabilidad del control por software de sistemas de seguridad crítica, convirtiéndose en caso de estudio en la informática médica y en la ingeniería de software.

7) En 1995 un cohete (Ariane 5) que costo 7 billones de dolares de desarrollo y llevaba una carga valuada en 500 millones de dolares exploto porque se uso un numero "muy chico" para mantener la velocidad horizontal, esto resulto en la explosión del cohete.

8) Knight Capital perdió 440 millones de dolares en 45 minutos y se fue a la quiebra por un error de software que vendio acciones a precio equivocado.

9) En 2004 el sistema de trafico aéreo de Los Ángeles dejo de funcionar porque usaban un contador "muy chico", lo divertido es que el sistema de respaldo dejo de funcionar a los minutos de ser encendido.

10) En 1979 una planta nuclear en estados unidos "sufrió una fusión parcial del núcleo del reactor" causa: "La válvula debía cerrarse al disminuir la presión, aunque por un fallo no lo hizo. Las señales que llegaban al operador no indicaron que la válvula seguía abierta, aunque debía haberlo mostrado."

https://es.wikipedia.org/wiki/Accidente_de_Three_Mile_Island

11) Otras veces las causas son políticas "...fallas en la comunicación... dieron lugar a una decisión de lanzar 51-L basada en información incompleta y algunas veces engañosa, un conflicto entre los datos de ingeniería y los juicios de gestión, y una estructura de dirección de la NASA que permitió problemas internos de seguridad de vuelo para eludir las claves de traslado del transbordador."

https://es.wikipedia.org/wiki/Siniestro_del_transbordador_espacial_Challenger

Mariano Guerra: Software que no falla

Reproduzco acá un post que hice en facebook después de ver la siguiente transcripción:

../galleries/misc/software-no-falla.jpg

Avisenle al señor Tonelli que el mismo día que el decía eso la agencia espacial europea perdió contacto con una sonda que mando a marte, que estuvo desarrollando por los últimos 7 anios, el proyecto salio 870 millones de euros y tiene los niveles de control de calidad mas altos de cualquier industria.

Un día después de eso, durante mas de dos horas servicios como twitter, netflix, github, paypal estuvieron fuera de servicio porque alguien hackeo webcams y otros dispositivos "inteligentes" y los uso para realizar un ataque de denegación de servicio contra un servicio que traduce lo que escribís en la barra de direcciones de tu navegador a direcciones que las computadoras pueden entender.

El que dice que el software no va a fallar es un irresponsable y no puede tener ninguna responsabilidad legislando sobre siquiera una linea de código.

Luego comencé a agregar los siguientes comentarios:

1) Mas noticias del día, se encontró hoy en el sistema operativo que van a usar las maquinas de voto electrónico un error que permite a cualquier persona obtener control total sobre el sistema, se que no lo van a leer pero acá esta:

“Most serious” Linux privilege-escalation bug ever is under active exploit

2) Hoy se informo que una empresa que distribuye certificados SSL (lo que pone el candadito verde en la dirección de tu banco y hace que sea una conexión segura, que también se usa para la transmisión de los resultados de las maquinas de voto al servidor central) permitía a personas obtener certificados para dominios que no eran de las personas que los solicitaban.

Incident Report - OCR

3) Algunos "divertidos" de la historia: Stanislav Yevgráfovich Petrov (Станислав Евграфович Петров en ruso, nacido en 9 de septiembre de 1939) es un teniente coronel retirado del ejército soviético durante la Guerra Fría. Es recordado por haber identificado correctamente una alerta de ataque con misiles como una falsa alarma en 1983, por lo que evitó lo que podía haber escalado en una guerra nuclear entre la Unión Soviética y los Estados Unidos.

4) Uno de 1998: La Mars Climate Orbiter se destruyó debido a un error de navegación, consistente en que el equipo de control en la Tierra hacía uso del Sistema Anglosajón de Unidades para calcular los parámetros de inserción y envió los datos a la nave, que realizaba los cálculos con el sistema métrico decimal. Así, cada encendido de los motores habría modificado la velocidad de la sonda de una forma no prevista y tras meses de vuelo el error se había ido acumulando.

5) En 2003 50 millones de personas se quedaron sin electricidad en Estados Unidos y Canada por un error de software: https://en.wikipedia.org/wiki/Northeast_blackout_of_2003

6) La Therac-25 fue una máquina de radioterapia producida por AECL, sucesora de los modelos Therac-6 y Therac-20 (las unidades anteriores fueron producidas en asociación con CGR). El aparato estuvo comprometido en al menos seis accidentes entre 1985 y 1987, en los que varios pacientes recibieron sobredosis de radiación. Tres de los pacientes murieron como consecuencia directa. Estos accidentes pusieron en duda la fiabilidad del control por software de sistemas de seguridad crítica, convirtiéndose en caso de estudio en la informática médica y en la ingeniería de software.

7) En 1995 un cohete (Ariane 5) que costo 7 billones de dolares de desarrollo y llevaba una carga valuada en 500 millones de dolares exploto porque se uso un numero "muy chico" para mantener la velocidad horizontal, esto resulto en la explosión del cohete.

8) Knight Capital perdió 440 millones de dolares en 45 minutos y se fue a la quiebra por un error de software que vendio acciones a precio equivocado.

9) En 2004 el sistema de trafico aéreo de Los Ángeles dejo de funcionar porque usaban un contador "muy chico", lo divertido es que el sistema de respaldo dejo de funcionar a los minutos de ser encendido.

10) En 1979 una planta nuclear en estados unidos "sufrió una fusión parcial del núcleo del reactor" causa: "La válvula debía cerrarse al disminuir la presión, aunque por un fallo no lo hizo. Las señales que llegaban al operador no indicaron que la válvula seguía abierta, aunque debía haberlo mostrado."

https://es.wikipedia.org/wiki/Accidente_de_Three_Mile_Island

11) Otras veces las causas son políticas "...fallas en la comunicación... dieron lugar a una decisión de lanzar 51-L basada en información incompleta y algunas veces engañosa, un conflicto entre los datos de ingeniería y los juicios de gestión, y una estructura de dirección de la NASA que permitió problemas internos de seguridad de vuelo para eludir las claves de traslado del transbordador."

https://es.wikipedia.org/wiki/Siniestro_del_transbordador_espacial_Challenger

Marcos Dione: the-truth-about-bool-in-Python

I was trying to modify ayrton so we could really have sh[1]-style file tests. In sh, they're defined as unary operators in the -X form[2], where X is a letter. For instance, -f foo returns true (0 in sh-peak) if foo is some kind of file. In ayrton I defined them as functions you could use, but the names sucked a little. -f was called _f() and so on. Part of the reason is, I think, that both python-sh and ayrton already do some -/_ manipulations in executable names, and part because I thought that -True didn't make any sense.

A couple of days ago I came with the idea that I could symply call the function f() and (ab)use the fact that - is a unary operator. The only detail was to make sure that - didn't change the truthiness of bools. In fact, it doesn't, but this surprised me a little, although it shouldn't have:

In [1]: -True
Out[1]: -1

In [2]: -False
Out[2]: 0

In [3]: if -True: print ('yes!')
yes!

In [4]: if -False: print ('yes!')

You see, the bool type was introduced in Python-2.3 all the way back in 2003. Before that, the concept of true was represented by any 'true' object, and most of the time as the integer 1; false was mostly 0. In Python-2.2.1, True and False were added to the builtins, but only as other names for 1 and 0. According the that page and the PEP, bool is a subtype of int so you could still do arithmetic operations like True+1 (!!!), but I'm pretty sure deep down below the just wanted to be retro compatible.

I have to be honest, I don't like that, or the fact that applying - to bools convert them to ints, so I decided to subclass bool and implement __neg__() in such a way that it returns the original value. And that's when I got the real surprise:

In [5]: class FalseBool (bool):
   ...:     pass
   ...:
TypeError: type 'bool' is not an acceptable base type

Probably you didn't know (I didn't), but Python has such a thing as a 'final class' flag. It can only be used while defining classes in a C extension. It's a strange flag, because most of the classes have to declare it just to be subclassable; it's not even part of the default flags. Even more surprising, is that there are a lot of classes that are not subclassable: around 124 in Python-3.6, and only 84 that are subclassable.

So there you go. You learn something new every day. If you're curious, here's the final implementation of FalseBool:

class FalseBool:
    def __init__ (self, value):
        if not isinstance (value, bool):
            raise ValueError

        self.value= value

    def __bool__ (self):
        return self.value

    def __neg__ (self):
        return self.value

This will go in ayrton's next release, which I hope will be soon. I'm also working in implementing all of the different styles of expansion found in bash. I even seem to have found some bugs in it.


python ayrton


[1] I'm talking about the shell, not to confuse with python-sh.

[2] Well, there are a couple of infix binary operands in the form -XY.

Juanjo Conti: Goodreads review: Mientras escribo (Stephen King)

Como lo leí en el celular y fui marcando partes, puedo compartir relativamente fácil mis subrayados:

La idea de que la creación y las sustancias sicotrópicas vayan de la mano es uno de los grandes mitos de nuestra época, tanto a nivel intelectual como de cultura popular.

...en general nunca salgo sin un libro. Nunca se sabe cuándo apetecerá tener una válvula de escape: colas kilométricas en los peajes, las salas de embarque de los aeropuertos, las lavanderías automáticas en tardes de lluvia, o lo peor de todo: la consulta del médico cuando se retrasa y tienes que esperar media hora para que te torturen una parte sensible del cuerpo. En ocasiones así me parecen indispensables los libros.

Yo no he abierto mi boca, ni tú la tuya. Ni siquiera coincidimos en el año, y no digamos en la habitación. Y sin embargo estamos juntos. Muy cerca.

Se han tocado nuestras mentes.

El objetivo de la narrativa no es la corrección gramatical, sino poner cómodo al lector, contar una historia… y, dentro de lo posible, hacerle olvidar que está leyendo una historia.

¿Me dejas que te sea franco? Si no tienes tiempo de leer es que tampoco tienes tiempo (ni herramientas) para escribir. Así de sencillo.

Leer es el centro creativo de la vida de escritor. Yo nunca salgo sin un libro, y encuentro toda clase de oportunidades para enfrascarme en él. El truco es aprender a leer a tragos cortos, no sólo a largos.

Leer toma su tiempo, y el pezón de cristal te roba demasiado.

«La película ya tiene que ser película antes del montaje», me dijo una vez el montador Paul Hirsch. Lo mismo pasa con los libros. Dudo, salvo excepciones, que la incoherencia o la falta de interés narrativo puedan corregirse mediante algo tan secundario como la revisión.

Carrie White es una alumna de instituto solitaria, con acné y un vestuario de juzgado de guardia? Del resto puedes encargarte tú, sin necesidad de que te la describa grano a grano y falda a falda. Casos de perdedores en el instituto los conoce todo el mundo; si yo describo el mío, excluyo el tuyo y pierdo una parte del vínculo de comprensión que deseo forjar entre los dos. La descripción arranca en la imaginación del escritor, pero debería acabar en la del lector.

Mi párrafo descriptivo sobre Palm Too contiene descripción directa («algunos clientes bebiendo a solas») y otra un poco más poética («brillaba en la penumbra como un espejismo»). Son válidas ambas, pero tengo cierto gusto por la metáfora. El uso del símil y de otros recursos de lenguaje figurado, es uno de los grandes placeres de la narrativa, tanto para el escritor como para el lector.

Sí te gustan las aliteraciones («el crujido de cristales me crepitaba en el cráneo»), no dudes en insertarlas y comprobar el efecto sobre el papel.

Los mensajes, las moralejas, que se las metan donde les quepan. Yo lo que quiero es resonancia.

La investigación es historia de fondo, expresión cuya palabra clave es «fondo».

Rating: 4/5

Original: https://www.goodreads.com/review/show/1783879306

Facundo Batista: Ni una menos


Hoy es un día histórico. Las mujeres de todo el país y otros paises de latinoamérica salen a las calles para pelear por sus derechos a ser humanos.

Tenía ganas de escribir algo por acá, pero la verdad es que si quieren saber más del tema (mucho mejor escrito y tratado de lo que puedo hacerlo yo) pueden espiar las cuentas de tuiter de Luciana Peker, Paula, Caro, o tantas otras personas que están con este tema mucho (mucho) más que yo.

Pero después me crucé con este post de V que reproduce algo que está tan bueno que tuve ganas de ponerlo acá (parece que es anónimo, no pude averiguar a quien darle créditos...).


¿Y por qué no "Ni uno menos"?

Porque los varones tenemos el privilegio de caminar tranquilos por las calles sin temor a ser piropeados con palabras obscenas y expresiones repulsivas. Se nos evita lo asqueroso de tener a quienes nos apoyen en los transportes públicos o se masturben en las camionetas dedicando su semen a nuestros cuerpos.

Porque nadie critica nuestra forma de vestir ni nos hablan de cuán cortas son nuestras bermudas o nos tratan de "andar calentando genitales" si se nos ve el boxer.

Porque no se nos pasa por la cabeza salir a bailar y terminar violados porque nos pusieron algo en nuestras bebidas, ni tenemos que ubicar a decenas de desubicados durante toda la noche que se piensan que son nuestros dueños y que tenemos que obedecer y ser sumisos.

Porque, al parecer, para la sociedad las bolsas de consorcio no nos quedan tan bien a nosotros como a ellas.

Porque cuando somos chicos nadie nos regala ni escobas ni bebés ni cocinitas de juguete para que "vayamos practicando".

Porque tenemos el privilegio de que mamá nos cocine, nuestras hermanas laven los platos y papá nos invite al sillón a ver cómodamente el partido.

Porque nuestros amigos no nos tienen que avisar si llegaron bien porque ya lo damos por hecho.

Porque tenemos el privilegio de que no se nos critique por acostarnos con cuantas personas querramos (es más, cuantas más sean más capos somos).

Porque las histéricas son ellas.

Porque nosotros somos más inteligentes y hasta cobramos más haciendo el mismo trabajo.

Porque si asciendo en el trabajo es por mi capacidad y no por haberme cogido a nadie.

Porque si no queremos ser papás nos desentendemos, nos borramos y ya fue todo. Ellas quieren abortar porque son asesinas y no se hacen cargo de lo que les corresponde, que es ser madres ante todo. Porque no se cuidaron y a nosotros no nos corresponde esa parte.

Porque soy bien macho y me burlo de las travas, me las cojo y las mato para reafirmar mi masculinidad.

Porque si me gustan los tipos nadie dice que es porque todavía no me cogí una buena concha.

Porque sé más de política y sé manejarme mejor en ese mundo. Porque si ella llega a diputada es porque había que llenar el cupo o ¿adiviná? sí: se acostó con alguno.

Porque yo no cotizo en el mercado de la prostitución tanto como ellas y no tengo miedo a ser secuestrado para terminar en un puterío haciendo con mi cuerpo algo que no quiero. Porque voy al puterío y soy un campeón y ser puta es una deshonra.

Porque si me mando una cagada, con un ramo de flores y unos bombones en el día de la mujer me convierto en un serñor caballeroso, en un hombre de verdad.

Sencillamente: Porque no te das una idea de lo que es ser ellas en un mundo tan desigual como este.

A ver si lo dejamos bien clarito: todavía no hablamos de "ni uno menos" porque estamos llenos de privilegios que deberíamos cuestionarnos una y mil veces antes de hablar de feminazis exageradas antihombres o hablar de "igualismo".Porque el día en que nos empecemos a plantear una nueva masculinidad, dejemos de criar machitos heteronormativos y patriarcales y nos demos el debate que el tema se merece, el día que dejen de matarlas y humillarlas, ahí sí vamos a poder hablar de otra manera.

El machismo nos ataca a todos en general, pero las mata a ellas en particular.

No seas cómplice.

Basta de violencia machista.

Marcos Dione: privacy-and-efficiency-etensions-for-Firefox

Today I had to setup 3 Firefox profiles, because I started a new job, and I realized I never documented which extensions I use or why, so I had to work a little from memory. Hence, this post, which I plan to keep up-to-date as much as possible.

A little bit of rationale first. I'm very privacy-conscious, but at the same time very pragmatic. I use several profiles to add an extra level of data isolation. That also allows me to have different sets of extensions, because some are some intrusive that they break some non-important sites' functionality.

Finally, the list, in no particular order:

  • FlashGot, by Giorgio Maone: Better downloads handling.

  • Go-Mobile, by 'Geek in Training': A lot of sites are actually more useful (read, with less crap on them) in their Mobile versions. This plugins lets you switch from one to the other.

  • HTTPS everywhere, by EFF: Don't navigate in the clear anymore.

  • No Script, also by Giorgio Maone: A broad spectrum antibiotic. Not loading JS makes pages less CPU intensive, plus sites cannot track you if you don't make requests, plus also blocks videos.

  • Privacy Badger, also by EFF: In their own words, “protects privacy by blocking spying ads and invisible trackers”.

  • Tab Auto Reload, by 'Schuzak': I use this to reload sites that constantly log you out, but only under certain circumstances.

  • Tab mix plus, by 'onemen': Once upon a time ffox didn't have session management/recovery. Now it does, but not very good; I still think TMP's ones are better. Also, duplicate tab.

  • Toggle animated GIFs, by Simon Lindholm: Stop annoying animations. Just make sure to tick 'Pause GIFs by default'.

  • uBlock Origin, by Raymond Hill: an (ad) blocker, goodbye-adiós 15s ad videos in youtube.[1]

So that's it. Unluckily there's nothing against browser fingerprinting yet (and my browser ranks as quite unique), and I don't know how much can be/has been implemented by [Mozilla]. If you have other suggestions about plugins, please do in the comments below. As I said, I'll try to keep this post up to date.


misc


[1] I used to use ABP, but it seems it became a protection scam.