viernes, 21 de agosto de 2015

La neutralidad de Telemadrid y Onda Madrid

Escribo esta entrada debido a que no me dejan enviar un comentario al post "Los presos del Valle de los Caídos" escrito por Miguel Platón en la web de telemadrid.es accesible en la URL:

La excusa que da el formulario es que mi dirección IP está excluida por ser origen de spam. Después de cambiar de IP varias veces (apagando y encendiendo el router) me sigue dando el mismo error. Por supuesto huelga decir que yo no me dedico a enviar spam a la web de Telemadrid. Intentaré escribir a los administradores de la página como sugieren pero soy muy escéptico.

Comentario al post de M. Platón :

Desde luego el libro tiene que conseguir explicar muchas cosas.

Como por ejemplo:

- Las cifras de siniestralidad durante esos 20 años, ¿quién las recopilaba? No me vale como respuesta que era el gobierno franquista.

- La conclusión de que en la realización de la obra los obreros  participaban de forma voluntaria me parece obscena. Supongo que el autor se apoyará en testimonios corroborables de trabajadores.

- Que un libro tan controvertido se publicite en un medio público con un comentario tan sesgado también me parece muy cuestionable.

Ahí queda mi opinión, si no es vetada de antemano.

Guillermo.

Actualización 8-9-2015: No, parece que lo tienen configurado por defecto para que no podamos opinar. Así es la libertad de expresión. Todavía tengo pendiente lo de pedírselo a los administradores. Pobrecitos, ¿qué excusa me pondrán?

Actualización 22-9-2015: Cualquier intento de contactar con los administradores de sistemas ha sido infructuoso. Esperado, pero no por ello menos decepcionante ;) Me pregunto desde qué rangos denegarán los comentarios. Ya que lo he intentado desde muchos sitios y desde todos se deniega. No hay más que decir. Adjunto captura con el error que me da. Por cierto, como chascarrillo: la IP que figura en el error está mal ya que ahora mismo lo estoy haciendo desde una IP estática y no es la que me están indicando.

Actualización 20-01-2016: Nada, parece que con el cambio de año tampoco deja. Lo dejaré por imposible. Malas noticias para la libertad de expresión.



Actualización 05-09-2016: Ahora da otro error. Bravo por los administradores de esta página. Aunque conociendo a Telemadrid seguro que los ha despedido.



viernes, 26 de diciembre de 2014

Lenguajes de alto nivel para microcontroladores

Últimamente estoy bastante interesado en la búsqueda de algún lenguaje funcional que me pueda servir para programar microcontroladores. En concreto investigo acerca de lenguajes funcionales que se puedan usar para programar las dos familias más populares de microcontroladores: los PIC y los Atmel AVR.

Hay muchas opiniones en internet sobre cuál de las dos familias es mejor que la otra. Después de leer varios post sobre este tema, mi conclusión es que ambas están muy parejas y que la elección tal vez dependa de nuevo de los gustos de cada cual. Aunque si me tuviera que decantar por alguno de los dos yo tiraría por los Atmel quizás porque últimamente son más populares que los PIC (con el apoyo de la comunidad que tiene detrás) y porque tienen algunas versiones que pueden funcionar con 0.7V de alimentación (para poder alimentarlos con una celda solar barata).

Como resultado de mi investigación (no muy fructífera) he encontrado algunos proyectos interesantes. Enumero a continuación no sólo lenguajes funcionales sino toda la variedad de lenguajes de alto nivel que he encontrado para programar microcontroladores (a parte del ensamblador del propio microcontrolador que no lo considero de alto nivel, aunque en él hay que programar las partes que requieren mayor rendimiento):
  • OCaPIC (OCaml)
  • PicoBIT (Scheme) - PIC
  • Forth: (la opción más viable, porque al menos a priori puede caber fácilmente en un micro)
    • avrforth 
    • amforth (8 a 12 KB de flash, 80 bytes de EEPROM, y 200 bytes de RAM). El amforth es muy prometedor.
    • rforth1: Un compilador de Forth para la familia 18Fxxx de microcontroladores PIC. Este mismo autor tiene también un Forth para la familia 16Fxxx de PICs.
  • .NET Micro - Aunque no investigado mucho este, parece que es sobre dispositivos más grandes.
  • uJ (Java) - PIC
  • NanoVM (Java) - Atmel.
  • B#: la "huella" en memoria es un poco grande (<24KB de flash y <2KB de RAM). Pero es un lenguaje de programación orientado a objetos específicamente diseñado para MCUs.
  • PyMite (Python): Huella de memoria grande (64KB de flash, 4KB de RAM).
  • eLua. Para MCUs muy grandes, me da la impresión.
  • ¿Alguna opción más? Seguro. Dejádmelo en los comentario y la pongo ;)
En uno de los enlaces que refiero abajo también sugieren programarse un intérprete personalizado de "pcode" que interprete un conjunto de instrucciones que tú definas.

Esto último parece una idea interesante así como también suena bien eso de poder crearse una especificación de máquina virtual que pudiera correr sobre dispositivos como MCUs. Hay algunas ya, pero visto que la JVM de Oracle/Sun son unas 200 microinstrucciones en la capa de VM parece factible poder generar un estándar o conjunto de instrucciones que pudiera servir para dispositivos de recursos más limitados.

¿Existe ya ese estándar? Porque estos dispositivos tienen una serie de características hardware que se podrían abstraer para luego poder programarlos más fácilmente.

Por último, hace poco terminé de leer y entender (que son dos cosas distintas) el paper de investigación que propició la creación del lenguaje Lisp y toda la belle époque de la inteligencia artificial de los años 80 y 90. Se trata de un artículo del gran John McCarthy titulado "Recursive Functions of Symbolic Expressions and Their Computation by Machine" (¡del año 1960! y todavía hoy en día relevante, que se lo apunten algunas mentes pensantes de nuestra época).

A partir de este paper se pueden extraer las operaciones fundamentales que dieron lugar a las primeras implementaciones del lenguaje Lisp. Con este germen tan prometedor: ¿se podría definir una VM basada en estas operaciones sobre MCUs?

En resumen:
Aunque parezca contradictorio, el poder programar un microcontrolador (MCU) con un lenguaje de alto nivel diferente a C (y al ensamblador, que de por sí no se puede calificar de alto nivel) aunque pueda resultar una idea peregrina a mí al menos me resulta altamente interesante. Máxime cuando la tendencia es que haya cada vez más dispositivos "embebidos" / empotrados / móviles como son los que constituyen la "Internet de las cosas" (IoT ó Intenet of Things en inglés).

¿El futuro o el pasado? Dejo al lector elegir.

Enlaces:

miércoles, 4 de diciembre de 2013

Características de las diferentes versiones de Java

A partir de Java 5 (1.5 en la numeración estándar de Oracle/Sun) se añaden a este lenguaje algunas características muy interesantes que intentan acercarlo a otros lenguajes "más modernos" diseñados "para el siglo XXI". Me refiero por ejemplo a Ruby, Python, Scala, etc. Enumero a continuación cada una de ellas, con la esperanza de poder hacer un artículo de cada una en el futuro.


Java 1.5


  • Genéricos (generics)
  • Bucle "for/in" (for/in loop)
  • Autoempaquetado/desempaquetado (autoboxing/unboxing)
  • Enumeraciones seguras con tipo (typesafe enums)
  • Argumentos variables (varargs)
  • Importaciones estáticas (static imports)
  • Anotaciones/metadatos (annotations/metadata)

Java 1.6


  • Servicios web y procesado de XML (web services and XML processing)
  • JDBC 4.0
  • Programación basada en anotaciones (annotation-based programming)
  • APIs de compilación de Java (Java compiler APIs)
  • APIs de escritorio (desktop APIs)
  • Scripting


Java 1.7


Las características de Java 7 y 8 están sacadas de la página web de OpenJDK, que tiene un formato bastante interesante en plan tabla "plain text".

Category    Description
================================================================================
vm          JSR 292: Support for dynamically-typed languages (InvokeDynamic)
            Strict class-file checking
lang        JSR 334: Small language enhancements (Project Coin)
core        Upgrade class-loader architecture
            Method to close a URLClassLoader
            Concurrency and collections updates (jsr166y)
i18n        Unicode 6.0
            Locale enhancement
            Separate user locale and user-interface locale
ionet       JSR 203: More new I/O APIs for the Java platform (NIO.2)
            NIO.2 filesystem provider for zip/jar archives
            SCTP (Stream Control Transmission Protocol)
            SDP (Sockets Direct Protocol)
            Use the Windows Vista IPv6 stack
            TLS 1.2
sec         Elliptic-curve cryptography (ECC)
jdbc        JDBC 4.1
client      XRender pipeline for Java 2D
            Create new platform APIs for 6u10 graphics features
            Nimbus look-and-feel for Swing
            Swing JLayer component
            Gervill sound synthesizer [NEW]
web         Update the XML stack
mgmt        Enhanced MBeans [UPDATED]

Java 1.8


Category    JEP     Description
================================================================================
--/--       126     Lambda Expressions & Virtual Extension Methods
            138     Autoconf-Based Build System
            160     Lambda-Form Representation for Method Handles
            161     Compact Profiles
            162     Prepare for Modularization
            164     Leverage CPU Instructions for AES Cryptography
            174     Nashorn JavaScript Engine
            176     Mechanical Checking of Caller-Sensitive Methods
            179     Document JDK API Support and Stability
vm/--       142     Reduce Cache Contention on Specified Fields
vm/gc       122     Remove the Permanent Generation
            173     Retire Some Rarely-Used GC Combinations
vm/rt       136     Enhanced Verification Errors
            147     Reduce Class Metadata Footprint
            148     Small VM
            171     Fence Intrinsics
core/--     153     Launch JavaFX Applications
core/lang   101     Generalized Target-Type Inference
            104     Annotations on Java Types
            105     DocTree API
            106     Add Javadoc to javax.tools
            117     Remove the Annotation-Processing Tool (apt)
            118     Access to Parameter Names at Runtime
            120     Repeating Annotations
            139     Enhance javac to Improve Build Speed
            172     DocLint
core/libs   103     Parallel Array Sorting
            107     Bulk Data Operations for Collections
            109     Enhance Core Libraries with Lambda
            112     Charset Implementation Improvements
            119     javax.lang.model Implementation Backed by Core Reflection
            135     Base64 Encoding & Decoding
            149     Reduce Core-Library Memory Usage
            150     Date & Time API
            155     Concurrency Updates
            170     JDBC 4.2
            177     Optimize java.text.DecimalFormat.format
            178     Statically-Linked JNI Libraries
            180     Handle Frequent HashMap Collisions with Balanced Trees
core/i18n   127     Improve Locale Data Packaging and Adopt Unicode CLDR Data
            128     BCP 47 Locale Matching
            133     Unicode 6.2
core/net    184     HTTP URL Permissions
core/sec    113     MS-SFU Kerberos 5 Extensions
            114     TLS Server Name Indication (SNI) Extension
            115     AEAD CipherSuites
            121     Stronger Algorithms for Password-Based Encryption
            123     Configurable Secure Random-Number Generation
            124     Enhance the Certificate Revocation-Checking API
            129     NSA Suite B Cryptographic Algorithms
            130     SHA-224 Message Digests
            131     PKCS#11 Crypto Provider for 64-bit Windows
            140     Limited doPrivileged
            166     Overhaul JKS-JCEKS-PKCS12 Keystores
web/jaxp    185     JAXP 1.5: Restrict Fetching of External Resources



Semántica de las categorías:

vm:     comp, gc, rt, svc
core:   lang, libs, i18n, net, sec, svc
client: gui, sound
web:    jaxp, jaxb, jaxws, corba

lunes, 9 de septiembre de 2013

Error 404 friki

Retomando un poco este mi blog, os pego un error 404 (página no encontrada) que me pasaron el otro día. Es del sitio web GitHub (para colgar código y gestionar proyectos de software libre, uno de los sitios más populares). Siesque, al final, somos todos igual de frikis :D

Error 404 friki

domingo, 18 de noviembre de 2012