Papel de Arbol

lunes, 22 de agosto de 2016

VOCES EMERGENTES: TECNOLOGIAS DE JavaScript, por Alejandro Hernández/ Argentina

Por Jorge Zavaleta Alegre, Lima/Washington.-
El Banco Interamericano de Desarrollo-BID, cuya primera operación fue en 1960 y destinada para Arequipa (ciudad peruana afectada por un intenso terremoto  que destruyó el sistema de agua potable), viene intensificando su línea  de investigación con participación de equipos diversos de profesionales, entre ellos comunicadores y periodistas interesados en el desarrollo social, inclusivo, de  un continente donde reina hasta  ahora los índices más altos de una injusta y aterradora concentración de los ingresos nacionales y al mismo tiempo la pobreza  que sigue galopando sin piedad.

 "Voces Emergentes" para saber qué opinan los ciudadanos de nuestras ciudades sobre las prioridades de desarrollo, es un reciente libro de esta banca no privada, cuya lectura, sin duda, convocará a más de una persona.

Siguiendo esta invitación Papel de Arbol, inspirada  en la producción del árbol de papel de la milenaria comunidad mexicana de náhuatl (autoglotónimo Nāhuatlahtōlli, que deriva de nāhua-tl, «sonido claro o agradable», hoy publicamos  un  estudio, una guía de los  Init.js: Una guía de los Por Qué y Cómo en el conjunto de tecnologías de JavaScript,  del ingeniero Alejandro Hernández, con traducción de Pablo Febregat. Más información:
   

BY ALEJANDRO HERNANDEZ - JAVASCRIPT DEVELOPER @ TOPTAL(TRANSLATED BY PABLO FABREGAT)

La Historia
Entonces, tú y tu cofundador tienen esta genial idea para un negocio, ¿verdad?
Has estado agregando características en tu cabeza.
Frecuentemente, le preguntas a tus potenciales clientes sus opiniones, y todos ellos la aman.
Ok, entonces la gente la quiere. Hay hasta un poco de dinero para hacer. Y la única razón por la cual ellos no pueden obtenerla es porque no las has implementado—todavía.
Entonces, finalmente, te sientas un día y dices “¡Hagámoslo!”. Pronto, estás tratando de averiguar cómo aplicar la lógica de negocio de tu aplicación, la funcionalidad asesina que va a llevar adelante al producto: tienes una idea de cómo hacerlo, y ahora sabes que puedes hacerlo.
“¡Listo!¡Funciona!” dices. ¡Tu prueba de concepto es un éxito! Todo lo que queda por hacer es empaquetarlo en una aplicación web.
“Ok, hagamos el sitio”, dices.
Y entonces, te das cuenta de la verdad: necesitas elegir un lenguaje de programación; necesitas elegir una plataforma (moderna); necesitas elegir algunos frameworks (modernos); necesitas configurar (y comprar) espacio, base de datos y proveedores de alojamiento; necesitas una interfaz de administración; necesitas un sistema de permisos; necesitas un administrador de contenidos.
Quieres ser escueto, quieres ser ágil. Quieres usar tecnologías que te ayudaran a tener éxito en el corto-y largo-plazo. Y no son siempre fáciles de elegir
Tienes que tomar decenas y decenas de decisiones de arquitectura . Y quieres tomar las correctas: quieres usar tecnologías que te permitan desarrollo rápido, iteración constante, máxima eficiencia, velocidad, robustez y más. Quieres ser escueto, quieres ser ágil. Quieres usar tecnologías que te ayudaran a tener éxito en el corto-y largo-plazo. Y no son siempre fáciles de elegir.
“Estoy abrumado”, dices, mientras te vas sintiendo abrumado. Tu energía no es la misma de antes. Tratas de encajar las piezas, pero es demasiado trabajo.
Tu prueba de concepto se marchita y muere lentamente.

La Propuesta
Luego de abandonar toneladas de ideas de esta forma, decidí diseñar una solución. La llamo el proyecto ‘Init’ (Inicio)(ó init.js).
El corazón de la idea es tener un simple proyecto que inicie todos los demás, dejar que el desarrollador o el fundador técnico tomen esas decisiones al mismo tiempo y recibir una plantilla apropiada para empezar basada en esas decisiones. Se lo que van a decir los detractores, “Una solución no puede aplicarse a todos los problemas” (Odiadores odiarán). Y puede que estén en lo cierto. Pero podemos hacer nuestro mejor esfuerzo para crear una solución aproximada, y creo que Init se acerca bastante.
Para lograr mejor este objetivo, tenemos que tener algunas ideas claves en mente. Cuando estaba desarrollando Init, consideré:
·         Componentes
La modularización es una característica clave de cualquier sistema ya que te permite reusar componentes de software a través de distintos proyectos—lo cual es el principal objetivo de Init. Pero la modularización también viene con una “reemplazabilidad” por producto, la cual será nuestra mejor aliada a la hora de atacar varios tipos de problemas con “casi” la misma solución.
·         Facilidad de Desarrollo
Para algunos problemas, en algún lado hay una mejor solución escrita en [Brainf*ck](https://en.wikipedia.org/wiki/Brainfuck). ó jodecerebros). Pero implementar esa solución (en Brainf*uck) sería casi imposible de escribir, y mucho menos de leer. Te costaría tiempo y una enorme cantidad de esfuerzo. En general, deberías usar lenguajes y plataformas que hagan al desarrollo fácil, y no difícil para tí (o alguien que puede trabajar con él más tarde).
·         Comunidad
Cualquier plataforma que elijas, asegúrate que tenga una gran comunidad, y una que te pueda ayudar con los problemas más comunes y con los que no lo son tanto. Recuerda: jQuery puede no ser la librería másrápida, la más limpia, o la más elegante—pero es un ganador sólo por su comunidad.


Teniendo estos objetivos en mente, voy a mostrarte como hice mis propias decisiones al crear Init.

En su núcleo, Init se aprovecha del paradigma ‘full-stack JavaScript’ (algunas personas se refieren a él, o a una parte de él, como el MEAN Stack). Al trabajar con este conjunto, Init es capaz de usar solamente un sólo lenguaje mientras crea un ambiente increíblemente flexible y con todas las funciones para desarrollar aplicaciones web. En resumen, Init te permite usar JavaScript no solamente para desarrollo del lado cliente y servidor, pero también para construir, testear, maquetar, y más.
https://assets.toptal.io/uploads/blog/image/238/toptal-blog-image-1387836588078.png
Pero bajemos un poco la velocidad y preguntémonos: ¿es realmente una buena idea usar JavaScript?
Por qué elegí JavaScript
Soy desarrollador web desde 1998. Por esas épocas usabamos Perl para la mayoría de nuestro desarrollo del lado del servidor, y aún desde esos tiempos teníamos JavaScript del lado del cliente. Las tecnologías web del lado servidor han cambiado inmensamente desde entonces: fuimos a través de oleada tras oleada de distintas tecnologías y lenguajes cómo PHP, ASP, JSP, .NET, Ruby, Python, solo por nombrar algunas. Los desarrolladores comenzaron a darse cuenta que usando dos distintos lenguajes para ambientes cliente y servidor estaba complicando las cosas. Los intentos iniciales para unificar bajo un mismo lenguaje intentaban crear componentes cliente del lado del servidor y compilarlos en JavaScript. Esto no funcionaba como se esperaba y muchos de esos proyectos fallaron (por ejemplo, ASP MVC reemplazando los formularios web de ASP.NET, y podría decirse queGWT será reemplazado por Polymer). en un futuro cercano). Pero era una excelente idea, en esencia: un lenguaje único en el cliente y el servidor, permitiéndonos reusar componentes y recursos (esta es la clave:recursos).
La respuesta era simple: usar JavaScript en el servidor.
De hecho, JavaScript nació con JavaScript Server Side en Netscape Enterprise Server, pero el lenguaje simplemente no estaba listo en esa época. Luego de años de prueba y error, Node.js finalmente emergió, lo cual no solo puso a JavaScript en el servidor, pero además promovió la idea de programación no-bloqueante, cambiando la forma en la que escribimos “fread”(I/O) para siempre (lee más aquí.

En una oración: la programación no-bloqueante apunta a poner tareas que consumen tiempo a un lado, usualmente especificando que se debería hacer una vez que estas tareas se hayan completado, y permitiendo que el procesador maneje otros pedidos mientras tanto.

Pero esas ideas no eran nuevas—entonces, ¿por que se volvieron tan populares con Node.js? Simple, la programación no-bloqueante puede ser alcanzada de distintas formas. Tal vez la más fácil es usar callbacks y un evento en bucle. En la mayoría de los lenguajes, esa no es una tarea fácil: mientras que los ‘callbacks’ son una característica común en algunos lenguajes, un evento en bucle no lo es y usualmente te encuentras aferrándote a librerías externas (por ejemplo: Python, con Tornado). Pero en JavaScript, los callbacks son construidos dentro del lenguaje, como también el evento en bucle, y casi cualquier programador que haya incursionado en JavaScript está familiarizado con ellos (o al menos los han usado, aunque no entiendan del todo que significa un evento en bucle). De repente, cada una de las startup en el Planeta Tierra podía reusar desarrolladores (por ej., recursos) tanto en el lado cliente cómo en el lado del servidor, resolviendo el problema de “Se necesita Gurú Python”.

De repente, cada una de las startup en el Planeta Tierra podía reusar desarrolladores (por ej., recursos) tanto en el lado cliente cómo en el lado del servidor, resolviendo el problema de “Se necesita Gurú Python”.

Entonces, ahora tenemos una plataforma increíblemente rápida (gracias a la programación no-bloqueante) con un lenguaje de programación que es increíblemente fácil de usar (gracias a JavaScript). Pero, ¿Es suficiente? ¿Perdurará? Estoy seguro que JavaScript va a tener un importante lugar en el futuro. Déjame decirte por qué:
·         Programación Funcional
JavaScript fue el primer lenguaje de programación que llevó el paradigma funcional a las masas (por supuesto, Lisp llegó primero, pero la mayoría de los desarrolladores nunca han construido una aplicación en Lisp lista para ser usada en producción). Lisp y Self, influencias principales de Javascript, están llenos de ideas innovadoras. Esas ideas pueden liberar nuestras mentes para explorar nuevas técnicas, patrones y paradigmas. Y todos ellos llevan a JavaScript. Mira monads, codificación Church, o incluso (para un ejemplo más práctico) la colección de funciones](http://underscorejs.org/#collections), de Underscore.js las cuales pueden salvarte líneas y líneas de código.
·         Objetos Dinámicos y herencia Prototipada
La programación orientada a objetos sin clases (y sin las interminables herencias de clases) permite rápido desarrollo (crear objetos, agregar métodos y usarlos) pero, lo más importante, reduce el tiempo de refactorización durante tareas de mantenimiento dejando que el desarrollador modifique instancias de objetos en vez de clases. Esta velocidad y flexibilidad pavimenta el camino para el desarrollo rápido.
·         JavaScript es Internet
JavaScript fue diseñado para Internet, ha estado aquí desde el principio, y no va a irse. Todos los intentos por destruirlo han fallado, mira, por ejemplo, la caída de los Applets Java, el reemplazo de VBScript de Microsoft, TypeScript (que compilaba a JavaScript), y la caída de Flash en manos del mercado móvil y HTML5. Es imposible reemplazar Javascript sin romper millones de páginas web, así que nuestro objetivo a largo plazo debería ser el de mejorarlo. Y no hay nadie mejor para esa tarea que el Technical Committee 39 de ECMA.
Ok, alternativas a JavaScript nacen todos los días, cómo CoffeeScript, TypeScript, y los los millones de lenguajes que compilan a JavaScript. Esas alternativas pueden ser útiles para etapas de desarrollo (por medio de mapeos de código fuente), pero fallarán al tratar de suplantar JavaScript a largo plazo por dos razones: sus comunidades nunca serán más grandes, y sus mejores funcionalidades serán adoptadas por el script de ECMA (por ej., JavaScript). JavaScript no es como un lenguaje ensamblador: es un lenguaje de programación de alto nivel con código fuente que puedes entender—entonces deberías entenderlo.

Ahora, gracias al proyecto Esprima, puedes crear tus propias herramientas para jugar con el código fuente, modificándolo, cambiando su estilo, agregando comentarios, instrumentando, y todo de tipo de cosas que puedas imaginar al jugar con el Árbol de Sintaxis Abstracta de tu programa como si estuvieses jugando con un Árbol DOM.
JavaScript de extremo a extremo: Node.js y MongoDB
Entonces, esas son las razones para usar JavaScript. Ahora, voy a usar JavaScript como una razón para usar Node.js y MongoDB.
·         Node.js
Node.js es una plataforma para construir aplicaciones de red rápidas y escalables—eso es básicamente lo que dice el sitio de Node.js. Pero Node.js es más que eso: es el entorno de ejecución preferido por cualquier aplicación con acceso de E/S en JavaScript. Incluso si no planeas escribir tu aplicación del servidor principal con Node.js, puedes usar herramientas creadas construidas encima de Node.js para mejorar tu proceso de desarrollo. Por ejemplo: Mocha.js para unit testing, Grunt.js para tareas de construcción automatizadas, o incluso Brackets para completar edición de código.
Entonces, si vas a escribir aplicaciones de JavaScript para servidor o cliente, deberías familiarizarte con Node.js, porque vas a necesitar usarlo diariamente. Hay algunas interesantes alternativas), pero ninguna de ellas llega siquiera al 10% de la comunidad de Node.js.
·         MongoDB
MongoDB es una base de datos NoSQL basada en documentos que usan JavaScript como su lenguaje de consultas, permitiendo completar de extremo-a-extremo la plataforma JavaScript. Pero esa no es siquiera la razón principal para elegir esta base de datos.
MongoDB es una base de datos sin esquema que permite persistir tus objetos de una manera flexible y por lo tanto adaptarse más rápidamente a los cambios en los requisitos. Además, es altamente escalable y basado en map-reduce, lo cual lo hace adecuado para aplicaciones con muchos datos. MongoDB es tan flexible que puede ser usado como una base de datos de documentos sin esquema, un almacén de datos relacional (aunque le faltan transacciones),o incluso almacenamiento de clave-valor para respuestas de caché.
Modularización de Servidor con Express.js
Modularización en el lado del servidor nunca es fácil. Pero con Express.js (y Connect.js) vino la idea de‘middleware’(ó software intermedio). En mi opinión, middleware es la mejor forma de definir componentes en el servidor. Si quieres compararlo con un patrón conocido, se acerca bastante a los tubos y filtros.
La idea básica es que tu componente es parte de una tubería. La tubería procesa el pedido (entrada) y genera una respuesta (salida), pero tu componente no es responsable por la respuesta completa. En cambio, solo modifica lo que necesita y luego delega hacia la otra pieza de la tubería. Cuando la última pieza de la tubería termina su proceso, la respuesta se envía al cliente.
Nos referimos a estas ‘piezas de tubería’ como ‘middleware’. Claramente, podemos crear dos tipos demiddleware:
·         Intermedios: Esos que procesan el pedido y la respuesta, pero no son del todo responsables por la respuesta en sí, entonces delegan al siguiente middleware.
·         Finales: Esos que toman la responsabilidad por completo en la respuesta final. Ellos procesan y modifican el pedido y la respuesta, pero no necesitan delegar al siguiente middleware. En la práctica, se recomienda que delegues a un siguiente middleware, de todas maneras, para permitir flexibilidad en la arquitectura (por ej., agregar más middleware después), aunque ese middleware no exista (en ese caso la respuesta irá directamente al cliente)

Como ejemplo concreto, considera un componente ‘usuario administrador’ en el servidor. En términos de middleware, tendríamos tanto finales como intermediarios. Para nuestros finales, tendríamos características tales como crear un usuario y listar usuarios. Pero antes que podamos realizar esas acciones, necesitamos nuestros intermediarios para autenticación (ya que no queremos pedidos que creen usuarios sin autenticar). Una vez que creamos estos intermediarios para autenticación, podemos simplemente conectarlos en cualquier lado que queramos para convertir una característica sin autenticación existente en una con autenticación.
Principio del formulario
Like what you're reading?
Get the latest updates first.

Aplicaciones de una sóla página
El proyecto Init enfoca en crear aplicaciones de una sóla página (SPAs-Single-Page Applications). Muchos desarrolladores web se han tentado más de una vez en probar construir SPAs. Desarrollé usando varias (principalmente propietarias), y puedo decir con confianza que son simplemente el futuro de las aplicaciones web. ¿Alguna vez comparaste una SPA con una aplicación web regular en una conexión móvil? La diferencia de respuesta es de decenas de segundos.
¿Alguna vez comparaste una SPA con una aplicación web regular en una conexión móvil? La diferencia de respuesta es de decenas de segundos.
Las SPA son el futuro de la web—¿entonces por que harías tu producto en un formulario antiguo? Un argumento común que escucho es que la gente está preocupada por el SEO. Pero si manejas las cosas correctamente, esto no debería ser un problema: Google mismo tiene un muy buen tutorial sobre como hacerlo, y hay muy buenos comentarios aquí también.
MV* del lado del cliente con Backbone.js, Marionette.js y Twitter Bootstrap
Mucho se ha dicho acerca de los MVC* frameworks para SPAs. Es una decisión complicada, pero voy a decir que el top 3 son Backbone.js, Ember.js, y Angular.js.
Los tres son bien considerados. ¿Pero cual de ellos es el mejor para tí?
Desafortunadamente, tengo que admitir que tengo una experiencia muy limitada con Angular.js, así que voy a dejarlo fuera de esta discusión. Ahora, Ember.js y Backbone.js representan dos maneras distintas de atacar el mismo problema.
Backbone.js es minimalista, simplista y te ofrece lo suficiente para crear una simple SPA. Por otro lado, Ember.js es un framework completamente profesional para crear SPAs. Tiene más adornos, pero también una curva de aprendizaje más grande.
Dependiendo del tamaño de tu aplicación, la decisión puede ser tan fácil como mirar el ratio de featuresUsed/featuresAvailable(características Usadas/Disponibles), lo cual te dará una gran pista.
En el caso de Init, quería cubrir la mayoría de los escenarios, así que elegí Backbone.js para creación fácil de SPAs, con Backbone.Marionette.View para modularización. De esta forma, cada componente es una simple aplicación, y la aplicación final puede ser tan compleja como queramos que sea.
Estilizar es también un desafío, pero podemos, de vuelta, contar con frameworks para rescatarnos. Para CSS, no hay nada mejor que Twitter Bootstrap, que ofrece un completo set de estilos que ya están listos para usar y sonfáciles de personalizar.
Booststrap fue creado usando el lenguaje LESS que es de código abierto, así que podemos modificarlo si así lo necesitasemos. Viene con una tonelada de controles de usabilidad que están bien documentados en el sitio de Bootstrap. Además, hay un modelo de personalización que te permite crear tus propios controles. Definitivamente es el hombre para este trabajo.
Mejores prácticas: Grunt.js, Mocha.js, Chai.js, RequireJS y CoverJS
Finalmente, deberíamos definir algunas de nuestras mejores prácticas, y buscar en como Init puede ayudarte a implementarlas y mantenerlas. Nuestra solución está centrada en varias herramientas, que están basadas en Node.js.
·         Mocha.js and Chai.js:
Estas herramientas te permiten mejorar tu proceso de desarrollo aplicando TDD o BDD, proveyendo la infraestructura para organizar tus tests unitarios y un lanzador para correrlos automáticamente.
Hay miles de frameworks para test unitarios para JavaScript. ¿Entonces, por que usar Mocha.js? La respuesta corta: es flexible y completo.
La respuesta larga: tiene dos características importantes (interfaces, reporters) y una ausencia importante (assertions). Déjenme explicarles.
o    Interfaces: tal vez estés acostumbrado a los conceptos de TDD de suites y tests unitarios, o tal vez prefieras ideas BDD de especificaciones de comportamiento con “describe” y “it should”. Mocha.js te permite usar los dos acercamientos.
o    Reporters: correr tu test generará reportes de resultados, y puedes darle formato a esos resultados usando varios reporters. Por ejemplo, si tienes que alimentar un servidor de Integración Continua, puedes encontrar un reporter para hacer exactamente eso.
o    Falta de una librería de assertions: : lejos de ser un problema, Mocha.js fue diseñado para dejarte usar la librería de assertions que prefieras, ofreciendo más flexibilidad. Hay muchas opciones, pero ahí es donde Chai.js entra en acción.
Chai.js es una librería de assertions flexible que permite usar cualquiera de los tres más importantes estilos de assertions:
o    Assert: Estilo de assertion clásico de la vieja escuela. Ej.:
o   assert.equal(variable, ”valor”); 
o    Expect: Tipo de assertion encadenable más comúnmente usado en BDD. Ej.:
o   expect(variable).to.equal(“valor”);
o    Should: También usado en BDD, pero prefiero Expect porque Should porque suena repetitivo con la especificación de comportamiento _’it _(“should do something..”-” eso debería hacer algo”). Ej.:
o   variable.should.equal(“valor”);
Chai.js se combina perfectamente con Mocha.js. Usando solamente estas dos librerías, puedes escribir tus test en TDD, BDD, o cualquier estilo imaginable.
·         Grunt.js:
Grunt.js permite automatizar tareas de construcción, cualquier cosa desde simples archivos concatenados copiados y pegados, a plantillas precompiladas, estilo compilado de lenguaje (por ej., SASS y LESS), test unitario (con mocha.js), linting y compresión de código (ej., con UglifyJS o Closure Compiler). Puedes agregar tu propia tarea automatizada a Grunt, o buscar en el registro de Grunt, donde hay cientos y cientos de plugins disponibles (de vuelta, usando herramientas con grandes comunidades detrás paga bien). Grunt también puede monitorear tus archivos y disparar acciones cuando estos son modificados.
·         RequireJS:
RequireJS puede sonar como otra forma de cargar modulos con AMD, pero puedo asegurarte que es mucho más que eso. Para entender por qué, primero debemos mencionar la idea del namespacing de modulos (ej., demo.views.hola), lo que evita contaminar el namespace global envolviendo cada módulo en su propio namespace. El problema es, estos módulos no son reusables: si modificas el namespace de una ‘instancia’, estás modificando el namespace de todas las ‘instancias’. En contraste con eso, RequireJS permite definir módulos reusables desde el principio. (Además, te ayudará a adoptar Dependency Injection para evitar que tus modulos accedan variables globales).
·         CoverJS:
Cobertura de código es una medida métrica para evaluar tu testing. Como el nombre implica, te dice cuanto código está cubierto en tu conjunto de tests actual. CoverJS mide la cobertura de código de tus tests instrumentando declaraciones (en vez de líneas de código cómo JSCoverage) y generando una versión instrumentada de tu código. También genera reportes para alimentar tu servidor de integración continua.
Usando _Branches_ (_ramas_) para alternar características
Cuando empecé Init, necesitaba una manera para que los usuarios activen y desactiven varias características que podrían llegar a querer en su proyecto. Decidí tomar un enfoque radical con el sistema de ramas de git para implementar esta funcionalidad.

En esencia, cada rama representa una característica o funcionalidad que un usuario podría querer incluir. Si estás empezando un proyecto desde el principio, empieza por la rama mínima que necesitas, y luego agrega otras tecnologías fusionando la rama con las otras deseadas. Por ejemplo, digamos que quieres empezar tu proyecto con Backbone.js y Marionette.js. Bueno, puedes empezar en la rama Backbone.js y fusionarla con la rama Marionette, continuando desde ahí para cada pedazo de funcionalidad que quieras agregar.
Por ahora, la idea de fusionar para agregar funcionalidad puede solo ser usada para plantillas de tecnología (ej., Backbone, Node, Express). Pero en el futuro, serás capaz de alternar entre back-end (ej., desde MongoDB a Postgres) e implementaciones del lado
Empieza un proyecto con Init y haz un deploy en Heroku hoy
Nunca ha habido una manera más fácil de empezar un proyecto. Dirígete al repositorio de GitHub, fijate la rama con los últimos commits (ahora mismo es usermanager, aunque esto puede cambiar en el futuro) y entonces:

1.    Crea un directorio para tu proyecto (o usa uno existente).
2.    Crea tu repositorio con “git init” (o usa un repositorio existente)
3.    Agrega un servidor remoto con Init
4.   git remote add init git: //github.com/picanteverde/init.git
5.    Descarga la rama que quieras
6.  git pull init usermanager
7.    Obtén el archivo de procesos de Heroku
8.   git pull init heroku-webprocess
9.    Con el Heroku Toolbelt instalado, crea una aplicación
10.      heroku create
11. Haz un push a la rama master a Heroku
12.      git push heroku master
13. Visita tu aplicación en funcionamiento en Heroku!
Ahora puedes empezar a desarrollar tu característica asesina con solo unas líneas de código. No solo eso, sino que estarás desarrollando con las últimas y más eficientes tecnologías en una suite de desarrollo lo más automatizada posible.
Espero que puedas usar Init para comenzar tu próxima gran idea. Recuerda Revisar el repositorio de Init para ver correcciones y características—su desarrollo es bastante activo, y espero con ansias escuchar sus comentarios.


Remite: Irina Papuc, trabaja con un empresa cuyo blog cubre una variedad de temas de programación y diseño/desarrollo, puedes verlo en “Toptal Engineering blog.” He notado que compartimos diferentes áreas de enfoque, incluyendo competitividad tecnologia, que encontré aquí. Contamos con un artículo reciente sobre este tema "Init.js: Una guía de los Por Qué y Cómos en el conjunto de tecnologías de JavaScript", que tiene un enfoque similar a competitividad tecnologia.

Contenido traducido por Pablo Fabregat, miembro de TransBunko, un mercado de traducciones técnicas.

MEMBER SINCE AUGUST 30, 2012
Alejandro got his Bachelor's in software engineering eleven years ago, and since then has been working for software companies of all sizes from all around the globe as a freelancer. Currently, he enjoys working as the technical lead on JavaScript projects, where his deep understanding of architecture and theory is most impactful. [click to continue...]


domingo, 21 de agosto de 2016

EL MERCURIO DIGITAL



J
Jorge Zavaleta Alegre /Lima/Madrid/Washington

En los años sesenta, cuando visitamos Cuba, con  July Balarezo, profesora de  Historia y años después pintora que recreó el paisaje andino y marino  de América Latina , formo parte del   Taller de   Teresa Mestres, quien había vivido desde muy niña en la  Habana  y exhibía como un valioso  recuerdo la copia de un cheque que el ministro de  Economía de Cuba, Ernesto  Che  Guevara, había entregado a su padre, ingeniero agrícola que dejó  la España de la Guerra Civil, de la implacable persecución  franquista. Que un periódico sea literario no depende de que se vierta en él mucha literatura, sino que se escriba literariamente todo. El periódico debe estar siempre como los correos antiguos, con el caballo enjaezado, la fusta en la mano, y la espuela en el tacón. Al menor accidente, debe saltar sobre la silla, sacudir la fusta, y echar a escape el caballo para salir pronto y para que nadie llegue antes que él. Debe, extractando libros, facilitar su lectura a los pobres de tiempo. O de voluntad o de dinero. Hacer asistir a los teatros, como sentados en cómoda butaca que este efecto hace una alineada y juiciosa revista, a los pobres y a los perezosos. Deber desobedecer los apetitos del bien personal, y atender imparcialmente al bien público. Debe ser coqueta para seducir, catedrático para explicar, filósofo para mejorar, pilluelo para penetrar, guerrero para combatir. Debe ser útil, sano, elegante, oportuno, saliente. En cada artículo debe verse la mano enguantada que lo escribe, y los labios sin mancha que lo dicta. No hay cetro mejor que un buen periódico".

Leer más: http://www.monografias.com/trabajos23/palabra-pluma-marti/palabra-pluma-marti.shtml#ixzz4HzrBaire

Y en una de las clases,  Teresa nos obsequió  un hermoso lienzo de 2x2ms, que recreaba una fila de  caballos  2x2ms y un libro de José Martí, el gran poeta caribeño.

El martes día 12 de noviembre de 2002 comenzaba a publicarse con periodicidad diaria. El proyecto respondía a dos necesidades principales: la propia de sus creadores para desarrollar la profesión periodística sin los condicionantes que atan actualmente a los periodistas de los grandes diarios impresos y de las empresas informativas en general, y la observación de un hueco informativo en el medio (muchos portales de información, pero contenidos de una uniformidad asombrosa y una limitación decepcionante).

EL MERCURIO DIGITAL se comprometía entonces a responder sólo ante sus lectores, a hacer un periódico de contenido amplio, heterogéneo, en el que tuvieran protagonismo los asuntos que de una forma global preocupan a la persona crítica de este principio de milenio.

EL MERCURIO DIGITAL se comprometía entonces y sigue comprometido a informar sobre y para las minorías, a la protección de las menores y los menores, a informar y defender la igualdad de la mujer, a la defensa de los animales y el medio ambiente y a la utilización de un lenguaje no sexista.
......

Código de Etica: UNESCO
Principios internacionales de ética profesional en periodismo
Publicado por la cuarta reunión consultiva de periodistas internacionales y regionales, en París, en 1983, bajo los auspicios de la UNESCO.

 Participantes: La Organización Internacional de Periodistas (IOJ), la Federación Internacional de Periodistas (IFJ), la Unión Católica Internacional de la Prensa (UCIP), la Federación Latino-Americana de Periodistas (FELAP), la Federación Latino-Americana de los Trabajadores de la Prensa (FELATRAP), la Federación de Periodistas Árabes (FAJ), la Unión de Periodistas Africanos (UJA), y la Confederación de Periodistas de la Asociación de Naciones del Sureste Asiático (CAJ) - representando, en total, 400.000 periodistas de todo el mundo.


Principio I: El derecho de la gente a la información veraz. La gente y los individuos tienen el derecho a adquirir una visión objetiva de la realidad por medio de la información exacta y comprensiva, así como a expresarse libremente a través de los medios de cultura y de comunicación.


Principio II: La dedicación del periodista a la realidad objetiva. La principal tarea del periodista es servir a la gente en su derecho a la verdad y la información auténtica con una dedicación honesta a la realidad objetiva, de manera que los hechos estén divulgados conscientemente en un contexto apropiado, precisando sus conexiones esenciales y sin causar distorsión, con el despliegue debido de la capacidad creativa del periodista, para proporcionar al público el material adecuado que le permita formarse una idea exacta y comprensiva del mundo, en la cual, el origen, la naturaleza y la esencia de los acontecimientos, procesos y estados de eventos estén comprendidos del modo más objetivo posible.


Principio III: La Responsabilidad Social Del Periodista. La información en periodismo se entiende como bien social y no como un producto, lo que significa que el periodista comparte la responsabilidad de la información transmitida y es, por lo tanto, responsable, no solamente, ante ésos que controlan los medios sino principalmente, ante el público, incluyendo varios intereses sociales. La responsabilidad social del periodista requiere que él o ella actúen, bajo todas las circunstancias, en conformidad con el sentido ético personal.


Principio IV: La Integridad Profesional Del Periodista. El papel social del periodista exige que la profesión mantenga los mayores niveles de integridad, incluyendo el derecho del periodista de rechazar aquel trabajo que vaya en contra de sus convicciones o de divulgar fuentes de la información, así como el derecho de participar en la toma de decisión del medio en el cual está empleado. La integridad de la profesión no permite que el periodista acepte ninguna forma de soborno o ventaja de ninguna persona contrario al bienestar general. Asimismo pertenece a la ética profesional el respeto a la propiedad intelectual y, concretamente, a rechazar el plagio.


Principio V: Acceso público y Participación. La naturaleza de la profesión exige que el periodista promueva el acceso del público a la información y a la participación de éste en los medios, incluyendo el derecho a la corrección o a la rectificación y el derecho a la replica.


Principal VI: Respeto a la intimidad y a la dignidad humana Una parte fundamental de los valores profesionales del periodista es el respeto al derecho del individuo a la intimidad y a la dignidad humana, en conformidad con las provisiones del derecho internacional y nacional referente a la protección de los derechos y de la reputación de otras, prohibiendo la difamación, la calumnia, el soborno y la difamación.


Principal VII: Respeto por el interés público. Los principios profesionales del periodista prescriben el respecto debido a la comunidad nacional, sus instituciones democráticas y la moral pública.


Principal VIII: Respeto por los valores universales y la diversidad de culturas. Un periodista de verdad defiende los valores universales de la humanidad, sobretodo la paz, la democracia, los derechos humanos, el progreso social y la liberación nacional, mientras que respeta el carácter, el valor y la dignidad distintivos de cada cultura, así como el derecho de cada persona a elegir y desarrollar libremente sus sistemas políticos, sociales, económicos y culturales. Así el periodista participa activamente en la transformación social hacia la mejora democrática de la sociedad y contribuye con el diálogo a un clima de confianza en las relaciones internacionales que guían hacia la paz y la justicia para todos, a la distensión, al desarme y al desarrollo nacional. Pertenece a la ética de la profesión que los periodistas conozcan las disposiciones relevantes contenidas en convenciones, declaraciones y resoluciones internacionales.


Principio IX: Eliminación de la guerra y de otros grandes males que enfrenta la humanidad. El compromiso ético con los valores universales de la humanidad llama a que el periodista se abstenga de cualquier justificación para la incitación a las guerras de agresión y a la carrera de armamento, especialmente en el caso de armas nucleares, y el resto de las demás formas de violencia, odio o discriminación, especialmente el racismo y el apartheid, así como la opresión por regímenes tiránicos, el colonialismo y neo-colonialismo, y otros grandes males que afligen a la humanidad, tal como la pobreza, la desnutrición y las enfermedades. Haciendo así, el periodista puede ayudar a eliminar la ignorancia y el desentendimiento entre la gente, hacer a los ciudadanos de un país sensibles ante las necesidades y deseos de otros, asegurar el respecto a los derechos y la dignidad de todas las naciones, de toda la gente y de todos los individuos sin la distinción de raza, sexo, lengua, nacionalidad, religión o convicción filosófica.


Principio X: Promoción de un nuevo orden de información y de comunicación mundial. El periodista funciona en el mundo contemporáneo dentro del marco de movimiento hacia nuevas relaciones internacionales, en general, y un nuevo orden de información en concreto. Este nuevo orden, entendido como la parte fundamental del nuevo orden económico internacional, se dirige a la descolonización y la democratización del campo de la información y de la comunicación, nacional e internacionalmente, en base a la coexistencia pacífica entre la gente y con el respeto completo a su identidad cultural. El periodista tiene una obligación especial de promover el proceso de la democratización de las relaciones internacionales en el campo de la información, en concreto y sobre todo fomentando las relaciones pacíficas y amistosas entre los estados y la gente.
....


FAPE - FEDERACIÓN DE ASOCIACIONES DE PERIODISTAS DE ESPAÑA
CÓDIGO DEONTOLÓGICO

PREÁMBULO. En el marco de las libertades civiles consagradas en la Constitución, que constituyen la referencia necesaria para una sociedad plenamente democrática, el ejercicio profesional del Periodismo representa un importante compromiso social, para que se haga realidad para todos los ciudadanos el libre y eficaz desarrollo de los derechos fundamentales sobre la libre información y expresión de las ideas.

Como su sujeto e instrumento de la libertad de expresión, los periodistas reconocen y garantizan que su ejercicio profesional es el cauce de manifestación de una opinión pública libre dentro del pluralismo de un Estado democrático y social de Derecho.

Pero los periodistas, también, consideran que su ejercicio profesional en el uso y disfrute de sus derechos constitucionales a la libertad de expresión y al derecho a la información, está sometido a los límites que impidan la vulneración de otros derechos fundamentales.

Por ello, a la hora de asumir estos compromisos, y como verdadera garantía que ofrece a la sociedad española, a la que sirve, la profesión periodística entiende que le corresponde mantener, colectiva e individualmente, una intachable conducta en cuanto se refiere a la ética y la deontología de la información.

En este sentido, los periodistas, integrados en la Federación de Asociaciones de Periodistas de España, se comprometen con la sociedad a mantener en el ejercicio de su profesión los principios éticos y deontológicos que le son propios.

En su virtud, la Asamblea General de la Federación de Asociaciones de Periodistas de España promulga los siguientes principios y normas deontológicas de la profesión periodística:
I
PRINCIPIOS GENERALES
El Periodista actuará siempre manteniendo los principios de profesionalidad y ética contenidos en el presente Código Deontológico, cuya aceptación expresa será condición necesaria para su incorporación al Registro Profesional de Periodistas y a las Asociaciones de la Prensa federadas.

Quienes con posterioridad a su incorporación al Registro y a la correspondiente Asociación actúen de manera no compatible con estos principios, incurrirán en los supuestos que se contemplen en la correspondiente reglamentación.

El primer compromiso ético del periodista es el respeto a la verdad.
De acuerdo con este deber, el periodista defenderá siempre el principio de la libertad de investigar y de difundir con honestidad la información y la libertad del comentario y la crítica.
Sin perjuicio de proteger el derecho de los ciudadanos a estar informados, el periodista respetara el derecho de las personas a su propia intimidad e imagen, teniendo presente que:
Solo la defensa del interés público justifica las intromisiones o indagaciones sobre la vida privada de una persona sin su previo consentimiento.

En el tratamiento informativo de los asuntos en que medien elementos de dolor o aflicción en las personas afectadas, el periodista evitará la intromisión gratuita y las especulaciones innecesarias sobre sus sentimientos y circunstancias.

Las restricciones sobre intromisiones en la intimidad deberán observarse con especial cuidado cuando se trate de personas ingresadas en Centros hospitalarios o en instituciones similares.
Se prestará especial atención al tratamiento de asuntos que afecten a la infancia y a la juventud y se respetará el derecho a la intimidad de los menores.

El periodista debe asumir el principio de que toda persona es inocente mientras no se demuestre lo contrario y evitar al máximo las posibles consecuencias dañosas derivadas del cumplimiento de sus deberes informativos. Tales criterios son especialmente exigibles cuando la información verse sobre temas sometidos al conocimiento de los Tribunales de Justicia.

El periodista deberá evitar nombrar en sus informaciones a los familiares y amigos de personas acusadas o condenadas por un delito, salvo que su mención resulte necesaria para que la información sea completa u equitativa.

Se evitará nombrar a las víctimas de un delito, así como la publicación de material que pueda contribuir a su identificación, actuando con especial diligencia cuando se trate de delitos contra la libertad sexual.

Los criterios indicados en los dos principios anteriores se aplicarán con extremo rigor cuando la información pueda afectar a menores de edad. En particular, el periodista deberá abstenerse de entrevistar, fotografiar o grabar a los menores de edad sobre temas relacionados con actividades delictivas o enmarcables en el ámbito de la privacidad.

El periodista extremará su celo profesional en el respeto a los derechos de los mas débiles y los discriminados. Por ello, debe mantener una especial sensibilidad en los casos de informaciones u opiniones de contenido eventualmente discriminatorio o susceptibles de incitar a la violencia o a prácticas humanas degradantes.
Debe, por ello, abstenerse de aludir, de modo despectivo o con prejuicios a la raza, color, religión, origen social o sexo de una persona o cualquier enfermedad o minusvalía física o mental que padezca.
Debe también abstenerse de publicar tales datos, salvo que guarden relación directa con la información publicada.
Debe, finalmente, y con carácter general, evitar expresiones o testimonios vejatorios o lesivos para la condición personal de los individuos y su integridad física y moral.

II
ESTATUTO
Para garantizar la necesaria independencia y equidad en el desempeño de su profesión, el periodista deberá reclamar, para sí y para quienes trabajen a sus órdenes:

El derecho a unas dignas condiciones de trabajo, tanto en lo que se refiere a la retribución, como a las circunstancias materiales y profesionales en las que debe desempeñar su tarea.

El deber y el derecho de oposición a cualquier intento evidente de monopolio u oligopolio informativo, que pueda impedir el pluralismo social y pollítico.
El deber y el derecho de participación en la empresa periodística, para que se garantice su libertad informativa de manera compatible con los derechos del medio informativo en que se exprese.
El derecho a invocar la cláusula de conciencia, cuando el medio del que dependa pretenda una actitud moral que lesione su dignidad profesional o modifique sustantivamente la línea editorial.
El derecho y el deber a una información profesional actualizada y completa.
El periodista tiene derecho a ser amparado tanto en el marco de su propia empresa como por las organizaciones asociativas o institucionales, frente a quienes, mediante presiones de cualquier tipo, pretendan desviarle del marco de actuación fijado en el presente Código Deontológico.
El secreto profesional es un derecho del periodista, a la vez que un deber que garantiza la confidencialidad de las fuentes de información.
Por tanto, el periodista garantizará el derecho de sus fuentes informativas a permanecer en el anonimato, si así ha sido solicitado. No obstante, tal deber profesional podrá ceder excepcionalmente en el supuesto de que conste fehacientemente que la fuente ha falseado de manera consciente la información o cuando el revelar la fuente sea el único medio para evitar un daño grave e inminente a las personas.
Corresponde al periodista vigilar escrupulosamente el cumplimiento por parte de las Administraciones Públicas de su obligación de transparencia informativa. En particular, defenderá siempre el libre acceso a la información proveniente o generada por aquéllas, a sus Archivos o Registros Administrativos.
El periodista respetará y hará respetar los derechos de autor que se derivan de toda actividad creativa.
III
PRINCIPIOS DE ACTUACIÓN
El compromiso con la búsqueda de la verdad llevará siempre al periodista a informar sólo sobre hechos de los cuales conozca su origen, sin falsificar documentos ni omitir informaciones esenciales, así como a no publicar material informativo falso, engañoso o deformado. En consecuencia:
Deberá fundamentar las informaciones que difunda, lo que incluye el deber que contrastar las fuentes y el de dar la oportunidad a la persona afectada de ofrecer su propia versión de los hechos.
Advertida la difusión de material falso, engañoso o deformado, estará obligado a corregir el error sufrido con toda rapidez y con el mismo despliegue tipográfico y/o audiovisual empleado para su difusión. Asimismo difundirá a través de su medio una disculpa cuando así proceda.
Asimismo, y sin necesidad de que los afectados acudan a la vía judicial, deberá facilitar a las personas físicas o jurídicas la adecuada oportunidad de replicar a las inexactitudes de forma análoga a la indicada en el párrafo anterior.
En el desempeño de sus obligaciones profesionales, el periodista deberá utilizar métodos dignos para obtener la información, lo que excluye los procedimientos ilícitos.
El periodista reconocerá y respetará a las personas físicas y jurídicas su derecho a no proporcionar información, ni a responder a las preguntas que se les formulen, sin perjuicio del deber profesional de atender el derecho de los ciudadanos a la información.
Con las mismas excepciones previstas para el secreto profesional, el periodista respetará el off the record cuando haya sido expresamente invocado o se deduzca que tal fue la voluntad del informante.
El periodista establecerá siempre una clara e inequívoca distinción entre los hechos que narra y lo que puedan ser opiniones, interpretaciones o conjeturas, aunque en el ejercicio de su actividad profesional no está obligado a ser neutral.
 A fin de no inducir a error o confusión de los usuarios, el periodista está obligado a realizar una distinción formal y rigurosa entre la información y la publicidad.
Por ello, se entiende éticamente incompatible el ejercicio simultaneo de las profesiones periodísticas y publicitarias.
Igualmente, esta incompatibilidad se extenderá a todas aquellas actividades relativas a la comunicación social que supongan un conflicto de intereses con el ejercicio de la profesión periodísticas y sus principios y normas deontológicas.
El periodista no aceptará, ni directa ni indirectamente, retribuciones o gratificaciones a terceros, por promover, orientar, influir o haber publicado informaciones u opiniones de cualquier naturaleza.
El periodista no utilizará nunca en beneficio propio las informaciones privilegiadas de las que haya tenido conocimiento como consecuencia del ejercicio profesional. En particular, el periodista que habitual u ocasionalmente informado sobre asuntos financieros estará sujeto a las siguientes limitaciones:
No podrá utilizar en su propio beneficio económico datos financieros de los que tenga conocimiento antes de su difusión general, ni podrá tampoco transmitir tales datos a terceros.
No podrá escribir sobre acciones o valores en los que tenga un interés financiero significativo propio o de sus familiares.
No podrá negociar de ningún modo acciones o valores, sobre los que tenga intención de escribir en un futuro próximo.


El Mercurio Digital, Spain MercurioPress Desde 2002 en Internet