lunes, 9 de octubre de 2017

Programación en la Mac: los editores básicos.

La Macintosh y su sistema operativo macOS X (la X en un número diez romano, no debe pronunciarse "equis" sino "diez": macOS Diez) es un poderoso sistema basado en el sistema operativo Darwin (es un SO tipo UNIX compatible con POSIX que a su vez está basado en NeXTSTEP, Mach,BSD y otros proyectos de software libre. Aunque Darwin fue liberado como un proyecto libre de código abierto, macOS también está formado por componentes y bibliotecas –conocidas como "librerías" en el bajo mundo informático– de código propietario, es decir, bajo licencia de Apple, como Cocoa y Carbon). Como SO tipo Unix, también se puede manejar mediante línea de comandos (la aplicación Terminal sirve para esto, está en Aplicaciones → Utilidades:

Ubicación de la aplicación Terminal para accesar la línea de comando.

Dentro del ambiente de línea de comando ya se tienen instalados y accesibles los editores:

vi:
El editor clásico vi en la terminal.
vim:
El editor vim (vi improved) en la terminal.
emacs:
El editor emacs en la terminal.

Aparte de los filtros y editores clásicos de Unix: ed, cat, ....



5608.22

sábado, 9 de septiembre de 2017

El peligroso, salvaje e indispensable GOTO

Para Dante,
aunque sea con cerca de
30 años de retraso.


En marzo de 1968, el científico de computación holandés Edsger W. Dijkstra (conocido en occidente como Edgar Dijkstra) publicó el influyente artículo "Go To statement considered harmful" (La instrucción Go To considerada dañina) en el boletín de Comunicaciones de la ACM (Association for Computing Machinery), también conocida como CACM. En este artículo señalaba que el uso creciente del salto incondicional estaba ocasionando que los programas se volvieran ilegibles y muy propensos a errores y reflexionaba y disertaba como el mantener cierta disciplina en la programación permitiría hacer no solamente programas legibles y confiables, sino hacerlos más grandes y propensos a modificarlos en vez de rehacerlos (es decir, hacerlos más flexibles).

Por un lado, esto dio inicio a la disciplina llamada Programación Estructurada donde todo el flujo del programa está basado en bloques bien definidos y que no deben traslaparse ni intereferir entre sí.

Pero esto también ocasionó una gran polémica que, aunque es muy técnica y se ha ido acallando, sigue siendo escabrosa.
Desde el principio muchos programadores protestaron porque la sentencia GO TO era su principal herramienta de control de flujo, no había otra cosa; en 1974 el propio Donald Kunth (matemático considerado el mayor experto en algoritmos computacionales y profesor emérito en Stanford) argüía que a veces el uso del GO TO mejoraba la eficiencia de ejecución, de forma era mejor alternativa que el detrimento en legibilidad; en 1978 los diseñadores del lenguaje C, Brian Kernighan y Dennis Ritchie dijeron que "se podía abusar infinitamente del GO TO", pero de todas maneras lo incluyeron en las especificaciones de C.
El también científico de la computación, el suizo Niklaus Wirth, jefe del equipo de diseño de los lenguajes académicos Euler, Algol W, Pascal, Modula, Modula-2 y Oberon (que por cierto era el editor del CACM cuando se publicó la carta de Dijkstra), diseñó los lenguajes para impulsar la disciplina del estructuralismo en la programación, aunque incluyó el GO TO por si acaso. Esto dio origen a una de las preguntas más peliagudas y difíciles que influyen aun ahora en el diseño de lenguajes modernos: ¿las reglas en la sintaxis del lenguaje usado fomentan la buena programación?

El lenguaje JAVA, por ejemplo, tiene reservada la instrucción goto aunque no la usa. Esto es principalmente porque en los lenguajes modernos se usa pero con formatos muy específicos y con nombres diferentes: son la sentencias exit, continue, break y exception (o try-catch); esto es, hay que ver su uso, es equivalente a la función que desempeñaba el goto:

exit. Salida incondicional de un programa.
continue. Salta incondicionalmente a la siguiente iteración en un ciclo.
break. Sale incondicionalmente de un ciclo.
exception (o try-catch). Esta es la instrucción menos parecida al GO TO, aparentemente, pero si uno analiza su funcionamiento, su objetivo es casi el mismo: cuando se ejecutan algunas sentencias y operaciones ocasionan errores (por ejemplo, en una operación cuando se intenta dividir ente cero o cuando se le pide a la máquina que lea un número, pero la entrada contiene letras o símbolos no numéricos) y en este caso, se ejecuta la sentencia exception (o la parte equivalente, catch) que sirve como etiqueta o punto de entrada para ejecutar una subrutina o un bloque para manejar el error (recuperarse o al menos morir graciosamente). Esto es el equivalente a una sentencia GO TO condicionada y la ejecución de un bloque etiquetado:

if [ocurrió un error] goto excepcion
excepcion:
{ ....
   líneas de código para manejar el error
   ....
   ....
}

En resumen:

  • La sentencia GO TO no es mala per se, solamente cuando se usa sin control y en exceso es cuando es dañina.
  • La sentencia GO TO ya amaestrada se usa actualmente para manejo de excepciones, por ejemplo, mediante sentencias ejecutables ya más evolucionadas.
  • La sentencia GO TO se puede usar cuando el uso de otras sentencias o estructuras de control puedan conducir a un flujo complejo del programa (nota. Cuidado en este caso, si pasa esto, puede ser indicador de que el flujo completo del programa necesite rediseñarse, si nos gana la flojera, puede pasarnos lo mismo que al monito de la historieta del principio del post: en vez de un bug horriblito, le salió un velocirraptor salvaje).



5582.30

domingo, 25 de junio de 2017

IAs al rescate (o no le tengo miedo a las IAs, es solamente precaución).




Una de las tendencias tecno-sociales en este principio de siglo es el miedo a las Inteligencias Artificiales (IAs en español, AIs en inglés). Miedos que van desde la mítica y paranoica singularidad (las IAs se van a volver tan poderosas y capaces que van a igualar y a superar al ser humano [ver el post del blog hermano “El blog de GodMakers: De singularidades muy singulares]) hasta los muy reales temores de que muchos trabajos que antes realizaban los humanos, ahora ya van a ser hechos por las IAs. Este miedo existe desde el s. XVIII (centuria de 1700) en los albores de la revolución industrial, cuando se empezaron a usar telares mecánicos operados a pedales y maquinas de vapor para perforar y operar pozos de agua y, sobre todo, para servir de motor en lanchas y barcos. En el s.XIX (centuria de 1800), de hecho, surgió un movimiento llamado Ludismo que defendía las ideas antimáquinas y pro-trabajo humano. Pero existe el pequeño detalle que matemáticamente se puede demostrar que todas las protestas luditas son inútiles e incluso dañan la economía. Tal como lo pregonaba el buen Dr. A (Isaac Asimov), el progreso tecnológico no se puede parar, es como pedirle al cuerpo humano que consuma menos oxígeno mientras tratamos de correr más rápido (en mi otro blog, “Entre la Maldición y las Estrellas” tengo una serie de ensayos que tratan sobre este tema (Futuro I, II, III y IV). No se puede para el avance de la automatización, no se van a poder parar la implantación de agentes IA para la ciberseguridad industrial, tal como lo muestra este post. El avance tecnológico y su interacción con los seres humanos hace que la tecnología sea tan complicada que solamente puede ser manejada y mantenida de forma eficiente por las IAs (por ejemplo, las tecnologías de la nube y los ciberataques de parte de hackers y terroristas hacen que este punto se vuelva tan complejo, que su desarrollo y mantenimiento de parte de las IAs es casi obligatorio). Por supuesto que los beneficios económicos van a ser enormes (se calcula un impacto de 1.1 trillones de dólares en la economía global). Socialmente, se han hecho a un lado los temores y se han hecho estudios tanto a favor como en contra del desplazamiento laboral de las IAs, tal como lo muestra este artículo. No son noticias ni buenas ni malas, lo único que se muestra es información que muestra tendencias que tienen más de 200 años. Quizá lo que se necesite sea un cambio de modelo económico en vez de estarle poniendo parches.


5516.64

domingo, 17 de julio de 2016

Leído: “Hackers: Héroes de la Revolución de la Computadora” de Stephen Levy.

Escrito y publicado en 1984 publicado por Dell, una división de Bantam Doubleday Dell Publishing Group. Con un epílogo escrito en 1994 por el propio Levy, esta edición se publicó en 1994.

Hubo una época, por allá a fines de los 50s y las décadas de los 60s y 70s del siglo XX en que la palabra hacker estaba envuelta en una mística casi religiosa; se refería a personas muy hábiles en el manejo de maquinaria, con conocimientos bastos y muy detallados que son capaces de hacer cosas con esa máquina que rebasan incluso el objetivo original del diseño. Este libro se enfoca en tres oleadas de hackers de la computación que hicieron una contribución significativa al desarrollo de la computación: los hackers de fines de la década de 1950 y la década de 1960, los hackers de fines de los 60s y la década de los 70s y los hackers de fines de los 70s y la década de los 80s.
A la primera oleada hacker se le podría llamar “hackers técnicos” puesto que su atención estaba enfocada total y exclusivamente a las computadoras. El autor, Stephen Levy, se enfoca en los sucesos que ocurrieron en el campus del MIT (Massachusetts Institute of Technology) desde fines de los 50s hasta fines de los 60s del siglo XX; lo que se podría llamar la oleada de “hackers técnicos”. La segunda olada ocurre en la costa oeste de EUA desde fines de los 60s y casi toda la década de 1970s y se les podría llamar “hackers sociales”. La tercera oleada ocurrió ya cuando las Pcs (computadoras personales) eran una realidad, desde fines de los 70s y casi toda la década de los 80s y se les podría denominar “hackers de software”.

Hackers técnicos. A principios de la era de la computación, se pensaba que las computadoras siempre serían armatrostes mounstrousos, gigantescos cuyo costo sería siempre de cientos de miles o millones de dólares y que su uso siempre sería para cosa “serias” y complejas, en grandes empresas mundiales o para el ejército. Levy cuenta el asombro que causó la primera computadora que se instaló en el MIT, cómo los nerds más fanáticos y hábiles ignoraron los “límites” del diseño original y se abocaron a hacer cosas para que la máquina hiciera cosas que mucho ni siquiera imaginaban posibles: que tocara música, que tuvieran videojuegos, simulaciones matemáticas, que corriera rutinas de inteligencia artificial..., en fin, lograron abrir caminos y posibilidades en el diseño de hardware que muchos no se habían imaginado.
Levy cambia su centro de atención cuando los laboratorios del MIT se vieron en medio de la vorágine social que ocurrió desde mediados de la década de los 60s en EUA. Ellos simplemente no entendían porqué los consideraban malvados, si solamente eran un montón de locos fanáticos de las matemáticas, informática y la electrónica; sin emargo, para ellos tampoco era importante el pequeño asunto de que eran financiados por el ejército. De forma explícita, por el DARPA (Depatamento de Proyectos Avanzados por sus siglas en inglés).

Hackers sociales. Igual que todos los hackers y nerds, sus habilidades sociales son casi nulas, los llamo así porque, a diferencia de los hackers del MIT, ellos sí pudiero adaptarse a los cambios sociales; es más, su propuesta principal fue que las computadoras deberían dejar de ser esos armatrostes exclusivos a grandes universidades, empresa y dependencias oficiales y deberían estar al alcance de cualquiera. El poder computacional no debería reservarse al poder, sino socializarse, ser de todos. Estos son los hackers que iniciarían la revolución de las PCs y la electrónica de consumo, construyendo sus propias tarjetas madre, memorias, enchufes, etc. Son los hackers que iniciaron compañías como Atari, Commodore, Apple y Microsoft (aunque queda muy claro que Bill Gates no encajaba muy bien dentro de la filosofía libertaria hacker).

Hackers de software. A fines de la década de 1970 el mercado de la informática ya estaba establecido, incluso el mercado para las PCs. Los hackers de software ya son más o menos como el estereotipo hacker que conocemos: son los que conocían a fondo el hardware y el software del sistema de alguna máquina; son aquellos que leían todos los manuales aplicables a su area de interés y hacían rutinas en lenguaje ensamblador que aprovechaban hasta el más mínimo recurso de la máquina. Llegaron al grado de escribir sus propios compiladores optimizados para el manejo de gráficas y sonido; lo que hacían ya era comparable a reescribir gran parte del sistema operativo. Se reconoce su gran aportación al avance de la computación porque llevaban al hardware de las PCs a su límite y así se logró que, poco a poco, el hardware de las computadores evolucionara hasta las posibilidades que ahora tenemos.

El libro no es una novela ni ensayo. Ni siquiera podría englobarse como biografía o crónica. Personalmente lo describiría mejor como “obra divulgativa”. Como muchas obras divulgadoras tiene un enfoque muy tendencioso respecto al tema principal del libro; en este caso, los hackers. A lo largo del relato los muestra como verdaderos héroes y sabios en su campo.
A pesar de que muy correctamente narra y describe sus limitaciones y obsesiones sociales, las ignora totalmente sin darles importancia. También muy correctamente narra la problemática que diluyó el impulso de la 1a oleada hacker (los hackers técnicos o de software), cuando los movimientos sociales de fines de la década de los 60s enfocaron sus protestas contra ellos, también narra la confusión y frustración de los hackers al no comprender porqué protestaban contra ellos: no hace conclusiones del hecho de que desarrollaron un elitismo intelectual y social al llamar “ganadores” a los que pensaban como ellos, eran buenos en matemáticas, física, electrónica y lógica y “perdedores” a todos los demás, toca muy lateralmente el pequeño hecho de que el laboratorio del MIT estaba financiado por el DARPA, el departamento de proyectos avanzados del ejército de EEUU y que las protestas estaban contra todo lo que tuviera fines militares. Stepehen Levy tampoco llega a alguna conclusión cuando muesta la admiración y sorpresa del hacker principal del laboatorio MIT al encontrarse personas igual de inteligentes y háblies que él en la NASA. Tampoco menciona el pequeño detalle de que los verdaderos avances e hitos en el mundo de la computación (UNIX y el compilador C, por ejemplo) NO fue un invento o impulso hacker, fue un diseño disciplinado y cuidadoso hecho en laboratorios profesionales por profesionales en informática.
La narración también cojea un poco al hacer la crónica de los hackers sociales al ensalzar a hackers cuyo único objetivo era diseñar y construir cosas que nadie había hecho, y cómo con el paso del tiempo todos sus esfuerzos fracasaron y cayeron en el olvido, quizá huera sido bueno un pequeño análisis de las bases del éxito del mercantilista Bill Gates (totalmente contrario a la ética hacker) y el hacker-no hacker, genio-no genio Steve Jobs que condujeron sus empresas a buen puerto, aunque esto es excusable porque de haberlo hecho, el libro hubiera sido interminable (tan sólo el análisis de la obra de Jobs ya lleva muchos libros, y apenas estamos entendiendo la genialidad que imprimió en Apple).
La sección de los hackers de software también es extrensa y detallada y también falla al mostrarnos las fallas y manías de muchos de estos hackers y el porqué alguno de ellos triunfaron y la mayoría fracasaron con el tiempo (unos pocos se adaptaron a las rigurosidades del mundo comercial, pero la mayoría seguía viendo lo que hacía como un juego o reto indisciplinado) aunque tiene la ventaja que presenta tanta información que es fácil para el lector atento deducir sus propias conclusiones.

Estudié mi carrera profesional en informática durante la segunda mitad de la década de los 80s, y en varios libros de ingeniería de software aprendí la diferencia entre un hacker y un ingeniero: un hacker sería el equivalente a un ninja y un ingeniero el equivalente a un samurai: los dos tienen la misma capacidad y habilidades, pero el ingeniero tiene disciplina. Si esto es bueno o malo, se los dejo de tarea.

El libro está escrito por un entusiasta de la informática, y tiene mucha información y alabanzas al mundo y filosofía del hacking, pero fue escrito en 1984, antes de que los hackers fueran considerados un fuerza maliciosa y como herramienta delicuencial; en el libro no hay reflexiones ni conclusiones ni nada. Información y nada más.
Hay mucho, muchos libros de narraciones y crónicas del mundo hacker, pero hay uno que destaca al narrar el lado oscuro del hackeo: The hacker crackdown de Bruce Sterling (traducido al español como “La caza del hacker”), en 1994 Sterling liberó el libro para su uso no comercial, así que lo pueden descargar y leer libremente. Éste sí es bastante entretenido e informativo.


5220.28

jueves, 4 de abril de 2013

La Mac lectora

iMac Lectora
 Existen programas que no siguen los estándares de Apple y no muestran la opción "Habla" del menú de edición, tal como mostré en el post pasado, "Apple y los eBooks".


Uno de esos programas es NeoOffice (la versión adaptada al ambiente Mac de OpenOffice). En este punto vale aclarar que muchos programas o aplicaciones fueron diseñados "OS agnostic", es decir, sin estar apoyado por las características de algún sistema operativo en particular, pero teniendo la misma interfaz en todas las plataformas.

Lo que hay que hacer es meterse al menú de control de la aplicación (en el caso de NeoOffice, el menú se llama "NeoOffice"), ahí escoger el submenu "Servicios" y la opción "Preferencias de los Servicios".

Se abre una ventana de opciones con los servicios disponibles. (Nota: esta ventana también se puede accesar a través de "Preferencias del Sistema" -> Teclado).
Ahí hay que buscar la seccción "Texto" y seleccionar el servicio "Añadir a iTunes como pista de voz" y opcionalmente asignarle un atajo (shortcut) del teclado.



¡Y vualá!, la próxima vez que accesen el menú servicios, la Mac está disponible para leer el texto seleccionado y mandarlo de forma automática a iTunes como un archivo de sonido.


4183.48

lunes, 11 de marzo de 2013

Apple y los eBooks


Ante las facilidades enormes y la conveniencia de leer eBooks, han surgido algunas voces que han puesto a la luz algunos peros, principalmente en el sentido de que leer en pantallas LCD (aunque sean retroiluminadas) no es muy amigable con la vista (lei algunas opiniones en facebook).

El ejemplo en concreto fue la revista argentina de CiFi Axxón, la decana de las CiFi latinoamericana, distribuyéndose desde 1990, al principio como un EXE para MS-DOS, después como un EXE para windows y desde hace ya varios años en formato HTML (onLine, es decir, accesible desde web); desde hace pocos años para tabletas y smartphones (formatos MOBI, Plucker y ePUB) y recientemente en formato de árbol muerto (papel, formato material).
En la década de 1990 la lectura en pantlla era todavía más dura para la vista, considerando que Axxón solamente estaba disponible para PC y que los monitores de PC eran de fósforo monocromático (verde, ámbar o blanco) y esto, aunado al hecho de que muchos de sus lector@s ahora estamos arriba de los cuarenta y que nuestra visión a no es la de antes, ha resultado en que la lectura en pantalla y en muchas tablets ya es incómoda.

En el post "El regreso de la mac parlanchina" explico como configurar el sistema para asignarle una voz a la computadora para que pueda avisar verbalmente cuando hay alguna alerta, para decir la hora o para leer textos. Los textos pueden ser archivos TXT, RTF, DOC, ODT, PDF y formatos de eBook (como ePUB usado por iBooks y MOBI usado por Kindle), simplemente:

1. Abrir el archivo, en este caso es mi cuento "ARCOIRIS.txt" en formato de texto. Nota: Los archivos TXT se abren por default en TextEdit, que es la pantalla que se muestra aquí; los archivos RTF y DOC también toman por default TextEdit si no se tiene instalado MS Office (que es mi caso).

2. Seleccionar el texto que uno quiere que lea la máquina.

3. Decirle a la comptadora que lo lea (Edición -> Habla -> Iniciar locución),  para esto la Mac ya debe tener configrada una voz del sistema.
Generalmente esta opción está en el menú edición, pero la aplicación que abre el archivo podría no estar bien programada (no seguir los estándares de Apple), por ejemplo, OpenOffice no tiene esta opción por default, pero NeoOffice (la versión adaptada para Mac) SÍ tiene esta capacidad (voy a tener que dejar la explicación de la forma en cómo se hace para el siguiente post si no, éste va a quedar muy grandote).
Los PDF se abren por default en Vista previa que es una aplicación de Apple y tiene la opción de habla en el menu Edición igual que TextEdit.

La habilidad de lectura de la computadora depende de la aplicación y de qué tan bien siga los estándares de programación, no del formato del archivo.
Menciono esto porque la mayoría de los programas lectores de eBook para OS X no tienen opciones para leer textos ni capacidad para configurarlos -obviamente que no puedo probarlos todos-, ni el lector de Kindle (amazon), ni Calibre ni Sigil (ambos código abierto, aunque hay que notar que Sigil es un editor de eBooks en ePUB, no fue diseñado como lector) ni Digital Editions (Adobe); en el lector Kitabu existe la capacidad, aunque no la opción (hay que hacer lo mismo que en NeoOffice), solamente el lector Ehon ofrece esta posibilidad en forma directa.

La configuración de voz también se puede hacer en el iPad: la voz asignada en el iPad ya está fija (es la que usa Siri en iPhone), así que solamente hay que configurar el iPad para que tenga capacidad de leer textos (esto aplica también para iPhone, en general para iOS).

1. Entrar a la sección de Ajustes en iPad.


2. En la sección General se entra a la parte de "Accesibilidad".



3. En Accesibilidad se encuentra la opción para leer textos. Simplemente hay que entrar a esa opción y activarla.



3a. Opciones disponibles para la configuración de la lectura en voz alta.

4. Una vez configurado "Leer selección", se abre un libro en iBooks, se selecciona el texto que uno quiere que lea la máquina e iOS automáticamente muestra una barra de herramientas con la opción "Voz" -esta es la opción para que iPad lea en voz alta.

Como colofón a este post me gustaría comentar que la lectura en voz alta de parte de los dispositivos de computación es una herramienta extremadamente útil para los escritores, editores y todo aquél que se dedique a las letras como una forma de proof reading.

4162.75

domingo, 16 de septiembre de 2012

GIMP

GIMP = GNU Image Manipulation Program, es un programa de edición gráfica tan poderoso com Photoshop, con la ventaja de que es open source.

Fue desarrollado inicialmente para Linux usndo los widgets GTK. Igual que todos los programas de Linux, estuvo disponible para Mac OS X desde el principio, aunque necesitaba algunas adaptaciones, a partir de Mac OS X 10.2 (Jaguar) estuvo disponible en versión adaptada, aunque necesitaba que estuviera instalado X11.
Con el paso del tiempo, GIMP se fue adaptando al ambiente gráfico y forma de trabajo de Mac OS X (antes tenía todo el aspecto y funcionalidad de una aplicación para Xwindows), aunque todavía necesitaba X11.

El 9 de mayo de 2012 se liberó la versión 2.8 que contiene muchas mejoras que, en su versión para Mac OS X Lion y Mountain Lion, ya presente una interfaz de usuario mucho más amigable e integrada con OS X y (¡al fin!)  el 2 de septiembre de 2012 se liberó la versión 2.8.2 que ya es COMPLETAMENTE nativa de OS X, ya no necesita ni X11 ni las ventanas son entes separados, reconoce los shortcuts estándar de Mac OS X... Sobre todo: eso de X11, Xwindows, compatibilidad nativa, etc., está bien para los macqueros fanáticos de la informática, pero los artistas gráficos solamente quieren un ambiente de trabajo que funcione como ellos quieren sin tener que convertirse en especialistas en sistemas. Y al fin GIMP ya les abrió las puertas.


 4011.41