Hora actual

Portada

¡Un mundo de colores! y de luminosidades, contrastes, curvas, gammas…

¡Buenas tardes, queridos lectores!

Hoy, para darles un toque polícromo a vuestras vidas, os traemos un tema muy amplio, curioso, y que observamos a diario sin darnos cuenta de ello muchas veces: el maravilloso mundo del color.

Hay que decir que este tema surge a raíz de mi última adquisición tecnológica, un monitor Samsung LED de 27 pulgadas (concretamente el modelo S27A550H, cuya información podéis encontrar en este enlace). Buscaba un monitor grande, no de gama alta, pero lo suficientemente bueno para poder jugar en condiciones a mis amados videojuegos. Partiendo de la base de que no soy ningún entendido en la materia, sí que he querido realizar una correcta configuración del color de mi pantalla para obtener los mejores resultados posibles y, así, he aprendido un poco más sobre todo lo relativo al color. Por tanto lo que aquí os presentamos es sólo un resumen en el que comentaré una serie de términos muy utilizados cuando trabajamos con colores, que conviene que conozcáis si queréis comprender mejor aspectos más avanzados del tema. Os recomiendo que, para obtener una información más profunda y detallada sobre el tema, visitéis el blog dZoom, del que hemos sacado la mayor parte de información para realizar este artículo.

Así, para empezar, si os encontráis en mi situación y queréis configurar correctamente vuestra pantalla, lo primero que tendréis que aprender es qué es la calibración de color, y qué es perfilar el color. El motivo de toda esta complejidad a la hora de “simplemente mostrar imágenes por pantalla” es que los monitores no pueden ofrecer toda la gama de colores que nuestro ojo puede ver, sino que sus posibilidades están acotadas a un determinado espacio de color fruto de su propia tecnología. Lo que nosotros entendemos por rojo, verde, azul y blanco, no es entendido del mismo modo por todos los monitores. Cada uno tiene su propia respuesta, con sus matices particulares, por lo que si queremos asegurarnos de que estamos viendo (por ejemplo) una fotografía con los mismos colores con que el fotógrafo la captó en su día y decidió guardarla, tendremos que preparar nuestro monitor para ello.

Ejemplo típico de pantalla de calibración

Ejemplo típico de pantalla de calibración

Por tanto, para comenzar a tener buenos resultados, nuestra primera misión será calibrar el monitor. Esto es, ajustar correctamente la luminancia del blanco (su intensidad), el tono del blanco (su temperatura, que trataremos más adelante), el nivel del negro (su profundidad) y la compensación gamma (una curva que trata de neutralizar el efecto del monitor compensando algunos factores, también la trataremos con más detalle posteriormente). Una vez calibrados los valores, podremos comenzar a perfilar el monitor, o sea, configurar la gama de colores que mostrará el monitor, y cómo compondrá dichos colores a partir de los básicos. Al proceso de calibrado y perfilado se le conoce como ajuste del monitor, y es lo que os desglosamos en los siguientes párrafos, mediante la definición de sus principales factores.

Como comentamos, el monitor no puede trabajar con todos los posibles colores existentes en la naturaleza, al igual que nuestro ojo no puede apreciar todas las posibles longitudes de onda de la luz (no podemos ver en ultravioleta e infrarrojos, sólo en el llamado espectro visible). Su abanico de posibilidades está limitado a un conjunto más o menos extenso de colores, conocido como espacio de color, que no es más que una región de un mapa de color… ¿queda más claro así? No hasta que expliquemos qué es un mapa de color, pero no os preocupéis, porque este extraño término hace referencia simplemente a una representación gráfica en forma de ejes en la que podemos ubicar todos los colores (en teoría), y definir un color a través de sus coordenadas en los citados ejes. El mapa de color más conocido es el CIE XYZ (que cumple algunas características curiosas, como que el color blanco se encuentra en las coordenadas 0.333, 0.333, o que los colores complementarios están unidos por una línea imaginaria que atraviesa el blanco). Pues bien, si de este mapa de color nos quedamos con una región específica, estaremos trabajando con un espacio de color. Los espacios de color pueden ser dependientes del dispositivo (o sea, son los que el monitor o impresora o escáner o chisme en general puede manejar, interpretar, ofrecer…) o independientes del dispositivo (que son los estándares fijados por la industria de una u otra forma, para poder tomarlos como referencia a la hora de caracterizar dispositivos). Los espacios de color independientes más conocidos son el sRGB, el Adobe RGB y el ProPhoto RGB (RGB deriva de las iniciales de red, green y blue, o rojo, verde y azul en inglés). Los espacios de color dependientes del dispositivo son los que configuran su gama de colores posibles, y se les suele conocer como “gamut”. Normalmente el espacio de color dependiente se suele expresar como un porcentaje de un espacio de color independiente, por ejemplo podemos decir que un monitor cuyo espacio de color represente el 95% del espacio Adobe RGB es un monitor de gama alta, y bastante caro (en torno a los 1.000 €). Si conocemos el espacio de color que utiliza nuestro monitor, podremos conocer los colores primarios (rojo, verde y azul) que maneja, que vendrán dados por su tono, brillo y saturación, cambiando de una pantalla a otra.

Espacios de color

Espacios de color

Conocidos los posibles colores que puede representar nuestra pantalla, ¿cómo le indicamos qué color es cual? O sea, necesitamos saber qué valor enviar al monitor para que pinte el color del mapa que ocupe las coordenadas X, Y que queramos (que no tiene por qué ser lo que observaremos por pantalla, ya que eso vendrá a su vez afectado por otros factores que veremos, sino que simplemente es lo que nos gustaría que el monitor entienda que queremos que muestre). Pues bien, para ello se suelen usar los perfiles de color, que son ficheros .icc o .icm con información para describir la respuesta de color de un dispositivo, traduciendo para un programa los valores que él entiende a los valores que entiende el monitor.

Otro factor (nombrado anteriormente) con el que jugamos a la hora de establecer los colores lo más cercanos a la realidad posible con nuestro monitor (o con nuestra cámara de fotos) es la temperatura de color. Esta característica nos sirve para definir correctamente el blanco, o lo que nuestro dispositivo debe interpretar como blanco, y se mide en grados Kelvin, como si de una temperatura se tratase. Su importancia radica en que, a lo largo del día, la luz que observamos va cambiando. Determinadas tonalidades del espectro de luz predominan sobre las demás, tiñendo los rayos a su alrededor y afectando a la imagen percibida. Esta alteración se traduce en un desplazamiento en el espectro de color hacia el rojo o hacia el azul. La luz perfecta diurna se sitúa en 5.500 K, y su valor va cambiando según las condiciones atmosféricas, la hora del día, o dependiendo de la existencia de otras fuentes de luz.

Temperatura color

Temperatura color

Las cámaras de fotos digitales suelen incorporar una función llamada “balance de blancos”, que compensa la forma en que la cámara capta la luz, ajustando los niveles de los colores básicos para obtener resultados lo más parecidos al original posibles. El funcionamiento de las cámaras permite seleccionar unas condiciones predefinidas (día nublado, luz de bombilla, fluorescente, soleado, etc.), o bien utilizar un modo de balance automático, que suele ser menos preciso que los modos predefinidos. Dicho modo automático funciona tomando como blanco la zona más brillante de la imagen, y como negro la zona más oscura, de forma que calibra el resto de colores en función a esos valores, tratando de compensar los efectos indeseados de la iluminación. También podemos realizar un balance manual de blancos, sin más que enfocar con nuestra cámara a un objeto de color blanco como un folio, de forma que lo que para nosotros (porque sabemos que es blanco) será un objeto blanco, lo será también para la cámara, con lo que el resto de colores se parecerán más a lo que deberían ser si no existiesen efectos de iluminación añadidos. Hay otros métodos que muchos aficionados a la fotografía utilizan para realizar un balance de blancos manual, como el Expodisc (un accesorio para la cámara fotográfica que puede resultar algo caro si sólo estamos iniciándonos) o la cartulina de tonos de grises. Pero también hay otros métodos caseros más rudimentarios y que a menudo dan buen resultado, como utilizar una tapa de un bote de Pringles de las antiguas (que eran menos transparentes que las de hoy en día), o bien un filtro de café. Si enfocamos a través de estos objetos, la lente recibirá una información lumínica que le permitirá compensar correctamente los diferentes colores, para que después al realizar la fotografía sin el objeto delante podamos obtener resultados de mayor calidad.

Diferentes balances de blancos para distintas temperaturas

Diferentes balances de blancos para distintas temperaturas

Continuando con los parámetros más importantes a tratar, y sin que el orden tenga que ver con su importancia, hablaremos sobre la gamma, que ya hemos nombrado anteriormente. La gamma es un factor de compensación que forma parte de una ecuación cuya curva trata de neutralizar la respuesta no lineal que el monitor introduce a la imagen que queremos mostrar en él, en lo que a luminosidad se refiere. Y es que en las pantallas la luminosidad no depende linealmente del voltaje, sino que sirve una curva exponencial. Ello hace que cuando queremos mostrar un valor de luminosidad media por pantalla, no tengamos que enviar un voltaje medio a la misma, sino más alto. De no corregir este comportamiento, tendríamos que las imágenes que observamos son más oscuras de lo que en realidad deberían ser. Al contrarrestar este comportamiento con la curva de compensación gamma, logramos una relación más lineal entre la entrada y la salida. Los fabricantes incorporan su propia curva gamma a los dispositivos, cuya ecuación exponencial puede resumirse como:

Luminosidad=voltajeG

con un valor G=2.2 habitualmente. Hay quien dice que no debería ser necesario utilizar compensación con los nuevos monitores con conexiones digitales, ya que la información permanece incorrupta desde el ordenador a la pantalla, pero lo cierto es que ajustar el gamma puede producir muy diferentes efectos en lo que observamos, y de hecho suele usarse a menudo en juegos para conseguir una ambientación adecuada al género del que se trate.  La compensación de la gamma suele dejar el valor final (o sea, el resultante de la gamma original del monitor y la gamma de corrección) en aproximadamente G=1.14, pero esto no siempre es así, ya que para una determinada entrada, la salida no siempre puede definirse linealmente (y no hablamos ya sólo de luminosidad, sino de todos los factores que afectan a cómo se ve un pixel en pantalla). La respuesta del monitor presenta irregularidades que hacen que sea necesario aplicar una nueva curva de corrección para obtener una graduación más fina de los colores. A esta curva se le denomina curva de ajuste, y su información se almacena bien en una tabla LUT (Look-Up Table) en la tarjeta gráfica o bien en el monitor (si dispone de LUT). La tabla LUT presenta una serie de equivalencias entre los valores que se desean mostrar y los que hay que enviar al monitor para que los muestre. Cuantos más bits tenga la tabla LUT, más precisión permitirá mostrar en los resultados (no es raro encontrar tablas de 8 ó 10 bits).

Cuadro correspondencias de Gamma. El cuadro que mejor se confunda con el fondo nos da una aproximación del gamma de nuestro monitor.http://upload.wikimedia.org/wikipedia/commons/f/f2/Monitor_gamma.gif

Cuadro correspondencias de Gamma. El cuadro que mejor se confunda con el fondo nos da una aproximación del gamma de nuestro monitor.

Siguiendo la línea de lo comentado hasta ahora a la hora de realizar la calibración del monitor, hay otros dos aspectos que requerirán nuestra atención: el ajuste del punto blanco y el ajuste del punto negro. Para comprenderlos, debemos definir algunos términos:

  • Por una parte, hay que conocer qué es la luminosidad o luminancia del blanco. Se mide en cd/m2 (donde cd es la abreviatura de candelas), y nos informa de la intensidad que toma el monitor para representar el color blanco. Nos interesará que sea un valor lo más bajo posible (en monitores de buena calidad, estará entre 60 y 90 cd/m2, y en pantallas de portátiles de calidad puede superar 115 cd/m2).
  • Por otra parte, también aquí influye la temperatura de color. Normalmente resulta que para obtener un blanco lo más neutro posible, tendremos que elegir temperaturas tirando a frías. Se suele utilizar a menudo el valor de 6.500 K para obtener buenos resultados.
  • Además, también es muy importante la luminosidad del negro, que se mide en las mismas unidades que la del blanco, y que de nuevo nos interesa que sea el menor valor posible (menores de 0’5 cd/m2 si es posible). Esta magnitud cambia enormemente dependiendo de la tecnología con que esté hecho nuestro monitor (CRT, TFT, LED…).

Asociado a estos conceptos de luminosidad, está el archiconocido contraste. El contraste se define como la relación entre la luminosidad del blanco y la del negro. Nos interesa un monitor que tenga un gran contraste, pero no a costa de conseguir una gran luminosidad del blanco (que puede llegar a dañor nuestros ojos tras un uso prolongado), sino gracias a tener negros muy poco luminosos y blancos lo suficientemente bajos para obtener buenos resultados. Volviendo al ejemplo del monitor que he adquirido, presenta un brillo según sus especificaciones de 300 cd/m2, lo cual le deja totalmente fuera de la gama de monitores profesionales, porque utiliza demasiada luminosidad del blanco para obtener una buena relación de contraste.

Merece la pena comentar que, más allá de usar nuestro “ojo clínico” para tratar de encontrar los mejores valores de los parámetros que hemos comentado hasta ahora, hay una serie de ayudas técnicas y determinados dispositivos que facilitan esta tarea (y que sin duda tendremos que usar si queremos lograr resultados cuasi-profesionales, por ejemplo si nos dedicamos a la fotografía). Se trata de los colorímetros, que son herramientas capaces de identificar el color y el matiz para realizar mediciones objetivas de los mismos y así poder configurar nuestro monitor de manera óptima. Normalmente consisten en un pequeño dispositivo (del tamaño del ratón) que se sitúa pegado a la pantalla para captar el color que ésta emite, y en ocasiones también cuentan con una especie de chasis que se coloca en torno al monitor para aislarlo lumínicamente del entorno. Así, realizando diferentes pruebas, el colorímetro y su software asociado pueden saber, para un determinado estímulo, qué salida está ofreciendo el monitor, de forma que caracteriza con gran precisión sus parámetros. Sería algo así como: “Dime lo que muestras cuando te digo que muestres esto, y te diré cómo eres”.

Colorimetro

Colorimetro

Si calibramos y perfilamos nuestro monitor, identificamos su espacio de color, conseguimos un perfil de color adecuado para el programa que estemos usando, ajustamos correctamente su temperatura de color, configuramos adecuadamente su gamma, su curva de ajuste, su punto blanco y su punto negro, ajustamos su luminosidad y su contraste (quizá con la ayuda de un colorímetro), y trabajamos con imágenes con un balance de blancos adecuado, podremos disfrutar de una imagen que no podrá compararse con las que nos ofrecen las pantallas que no han pasado por este proceso. Puede resultar complicado, largo o engorroso, pero en realidad cuando nos familiarizamos con estos conceptos veremos que todo está relacionado, y que un poco de tiempo invertido en dichos ajustes nos proporcionará una experiencia de usuario mucho más rica y, lo más importante, ¡nos permitirá poder ver Átomos y Bits en todo su esplendor!  :)

¡Hasta pronto!

Recargando las pilas

Hola de nuevo queridos lectores,

Espero que estéis aprovechando bien el puente (los que lo tengáis, para los que no al menos hay un par de días libres) para recargar las pilas. Y, ya que sacáis el tema, hablemos de pilas, de combustible concretamente. Seguro que muchos de vosotros habréis escuchado hablar de las pilas de combustible, esas que van a cambiar determinados aspectos de nuestra vida. Hoy vamos a intentar ver cómo es su funcionamiento básico.

Una pila de combustible es un conjunto de células o celdas de combustible que sirven para transformar energía química en eléctrica. En este aspecto se parecen bastante a las baterías comunes aunque, a diferencia de éstas, están diseñadas para permitir el reabastecimiento continuo de los reactivos consumidos. Las baterías contienen dentro de sí mismas todos los elementos necesarios para producir electricidad. Pero estos elementos se agotan, por lo que, una vez ocurre esto, la batería deja de producir electricidad y debemos cambiarla por otra nueva. Las pilas de combustible, sin embargo, obtienen su combustible de forma externa, por lo que podrán funcionar continuamente siempre que se pueda garantizar el flujo de sus elementos químicos.

Célula de combustible

Pero… ¿y cómo genera electricidad una pila de combustible? Pues bien, hay varios tipos de células de combustible, según para el uso que esté ideada (transporte, industrial,…). Nosotros vamos a centrarnos en la llamada PEMFC (Proton Exchange Membrane Fuel Cell) o simplemente PEM, que se cree que será la utilizada definitivamente en los vehículos.

Como me gustaría que todos pudiésemos entender su funcionamiento voy a intentar explicar, aunque de forma muy superficial, determinados detalles que para otros pueden ser muy básicos y obvios. Espero no aburriros demasiado.

La idea básica consiste en descomponer átomos de Hidrógeno y Oxígeno en iones. Estos iones son átomos cargados eléctricamente (recordemos que todos los átomos, en principio, tienen carga eléctrica neutra), bien por haberles añadido electrones, o bien por habérselos quitado. Veámoslo un poco más en detalle.

Funcionamiento de una célula de combustible

En la imagen podemos ver un esquema básico de célula de combustible PEM. En ella, se inyecta Hidrógeno por la parte del ánodo (borne negativo de la pila), que se hace entrar en contacto con un catalizador (que es un material que favorece una determinada reacción química) provocando la división de los átomos de Hidrógeno. El Hidrógeno es un gas diatómico, es decir, que está formado por dos átomos del mismo elemento (H2). El resultado de la catálisis será dos iones de Hidrógeno (H+) y dos electrones (e-). Los electrones serán conducidos por el ánodo hacia un circuito externo, generando una corriente eléctrica (que puede, por ejemplo, hacer funcionar un motor), mientras que los iones de Hidrógeno llegarán al electrolito (la membrana de intercambio de protones, o PEM) que tan sólo permite el paso de partículas cargadas positivamente, atravesándolo.

En el otro extremo del electrolito ocurre algo similar con las moléculas de oxígeno. Éste se inyecta por la parte del cátodo (borne positivo de la pila) y, como también es un gas diatómico (O2), como resultado de la catálisis se obtienen dos átomos de Oxígeno con una fuerte carga negativa. Como el electrolito sólo pueden atravesarlo partículas cargadas positivamente, los átomos de oxígeno se acumulan en su borde. En él cada átomo de oxígeno se combinará con dos iones de Hidrógeno provenientes del ánodo y los electrones que vuelven del circuito externo, dando como resultado una molécula de agua (H2O).

Como vemos, a partir del Hidrógeno se obtiene una corriente eléctrica y, como residuo, simple vapor de agua. Esta reacción en una sola célula produce una tensión de 0,7 voltios. Para conseguir voltajes mayores lo que se hace es combinar muchas celdas obteniendo, así, una “pila” de células que será, en sí, la pila de combustible. Los tamaños actuales de celdas permiten obtener pilas de combustible del tamaño de una maleta que pueden hacer funcionar un coche.

Una de las desventajas de las pilas de combustible que utilizan hidrógeno es que, a pesar de ser éste el elemento más extendido del universo, no se puede recolectar libremente del entorno (o al menos aquí en la Tierra). Por ello debe ser generado, lo que resulta caro, y posteriormente almacenarse y distribuirse, que resulta difícil. El Hidrógeno no se almacena en estado gaseoso, sino líquido a muy alta presión, por lo que no podremos mantenerlo en un depósito tal y cómo lo hacemos con la gasolina.

También existen otros dispositivos, los llamados reformadores, que sirven para convertir hidrocarburos o alcohol en hidrógeno, que será usado por la pila de combustible. Con ellos se podría usar gas natural, metanol, propano… El metanol es un combustible líquido similar a la gasolina, por lo que podría almacenarse en un tanque. Sin embargo, estos reformadores producen mucho calor y otros gases además de hidrógeno (entre ellos CO2, aunque en menor medida que con la gasolina), que además no es del todo puro, con lo que la eficiencia disminuye considerablemente. Además, la inclusión de estos dispositivos incrementa los costes y necesidades de mantenimiento.

Una de las mayores ventajas del uso de pilas de combustible es su mayor eficiencia. En los motores de gasolina se pierde una grandísima parte de energía en forma de calor, estimándose su eficiencia en un 20%. Es decir, tan sólo un 20% de la energía contenida en la gasolina se convierte en trabajo mecánico. ¡No queráis traducirlo a dinero, sabiendo el precio de la gasolina! En los motores eléctricos (en su conjunto batería-motor), sin embargo, la eficiencia estimada es del 72%, y si consideramos además el proceso de generación de la energía eléctrica almacenada (la central eléctrica), es del 65% (estimaciones obtenidas de aquí). Esta última estimación también es válida para vehículos eléctricos con pilas de combustible.

Honda FCX Clarity

Vemos, pues, que las pilas de combustible nos proporcionan un método mejor, más limpio y eficiente para almacenar la energía del futuro. Y los motores eléctricos son mucho más silenciosos. ¿Os imagináis cómo estaría la Gran Vía de Madrid? Pues sí, llena de gente, como ahora, pero con menos ruido de tráfico y polución. Sin embargo, no penséis que ésta es una idea completamente nueva y novedosa, el proyecto Apolo que llevó al hombre a La Luna, ya utilizó pilas de combustible. Aunque actualmente no se comercializa en serie ningún coche con ellas, sí que hay un fabricante, Honda, que ofrece su modelo FCX Clarity en leasing (por 600$ al mes).

Si todavía os quedan ganas de saber más o no he aclarado vuestras dudas, os dejo un vídeo en el que lo explican muy muy bien, aunque, eso sí, en inglés. Pero tranquilos, las imágenes no necesitan traducción.

Aceleremos, pues, que el futuro nos aguarda… pero, eso sí, olvidémonos de la gasolina. !Hasta pronto!

Ideas básicas para programar aplicaciones para dispositivos con Jailbreak

¡Buenas tardes, estimados lectores!

Es probable que entre vosotros (dada la temática de nuestro blog) se encuentren lectores a los que les gustaría programar aplicaciones iOS para iPhone, iPod o iPad que tengan hecho el Jailbreak. Si es así, en este post os ofreceremos las ideas básicas para que sepáis al menos por dónde empezar, y qué podéis esperar encontraros.

Si decidís embarcaros en este complicado viaje, hay varias nociones que sería interesante que conozcáis antes de comenzar con el desarrollo de aplicaciones de este tipo. En primer lugar, es altamente recomendable tener algunas nociones básicas de los lenguajes C / Objective-C. Además, conviene tener un ordenador con MacOS (si bien no es imprescindible) con la versión del SDK (el kit de desarrollo) para la que queramos programar, y si queremos usarlo, necesitaremos tener Xcode instalado. Con estos elementos y algunos manuales, podemos empezar a intentar programar algo con sentido. El problema es precisamente que existen pocos repositorios de información donde vayamos a poder encontrar ayuda sobre el tema.

Para aquellos con menos conocimientos sobre el tema, Xcode es el programa proporcionado por Apple para desarrollar aplicaciones para iOS. Este software nos ofrece un entorno de programación “amigable”, muy gráfico, y con multitud de ayudas visuales que facilitan la edición del código. También incluye el Interface Builder (que hasta la versión 4 de Xcode era un programa aparte, pero ahora ambos elementos están integrados en una sola interfaz) que permite, gráficamente, diseñar el aspecto de nuestra aplicación mediante vistas, botones, sliders, menús de selección, textos, etc. El hecho de contar con Interface Builder nos ahorrara muchas horas de trabajo, más cuanto más vistosa sea nuestra interfaz de usuario. Si queremos desarrollar aplicaciones para AppStore, tendremos que usar Xcode y necesitaremos un Mac, o bien podremos instalar una máquina virtual de Mac en nuestro PC mediante herramientas como VMWare o utilizar otros métodos más peregrinos (como el hackintosh). Si tenéis un ordenador medianamente potente, la opción de la máquina virtual suele funcionar bien. El problema es que a menudo la máquina se queda congelada si no la usáis durante unos minutos (es decir, si cambiáis al sistema operativo anfitrión, Windows por ejemplo, al volver a la máquina virtual pasados unos minutos es probable que encontréis que no responde). Si esto ocurre, basta con reiniciar la máquina virtual, aunque perderéis todo el trabajo que no tengáis guardado.

Pantalla de Xcode

Pantalla de Xcode

Si somos curiosos, es probable que nos preguntemos por qué surge la necesidad de utilizar otras técnicas diferentes para desarrollar aplicaciones para iOS con jailbreak. ¿Por qué no pueden ser todas aplicaciones normales como las que encontramos en AppStore? Pues bien, la respuesta se encuentra en la propia filosofía de Apple: para la compañía de la manzana, lo principal y más importante, el motivo vital de toda su obra, es la optimización de la experiencia de usuario. Esto quiere decir que no nos van a permitir programar aplicaciones de cualquier tipo, sino que “limitan” sus funcionalidades evitando ciertos comportamientos que pudieran hacer empeorar la experiencia de uso, o comprometer en cualquier aspecto la integridad de los datos, la privacidad del usuario, información delicada del terminal, etc. Bien, aclarado esto, ¿cómo decide Apple qué aplicaciones pueden ser aptas para el App Store y cuáles no? Comprobando qué API‘s y qué métodos utiliza: hay determinadas clases que son privadas y otras son públicas. E incluso dentro de las públicas, hay determinados métodos que son privados. Cuando Apple detecta que estamos utilizando alguno de éstos métodos, rechaza nuestra aplicación y no nos permite subirla a AppStore.

En este punto, si queremos distribuir nuestra aplicación tendremos que buscar mercados alternativos para ella, como puede ser Cydia. Ahora bien, ¿cómo podemos acceder a métodos y clases privados de Apple, si no los conocemos? Mediante una técnica que se conoce como “dump“. Esta idea consiste en volcar los frameworks que tenemos embebidos en nuestro SDK de forma que podamos entrar a ellos y navegar para estudiar sus clases, sus controladores, qué parámetros recogen y qué parámetros pasan, etc. Para profundizar en este tema, recomendamos que leáis el artículo Dump Public and Private iOS Frameworks de Conor Burgess. En él, se explica cómo utilizar un script que el propio Conor ha desarrollado, y que con ayuda de la herramienta class-dump nos permite tener accesible todos los frameworks del SDK. Además necesitaremos otros dos ficheros (substrate.h y libsubstrate.dylib) que el script utiliza para el parcheo de los frameworks. Una vez seguidos los pasos que el script de volcado requiere (simplemente un par de líneas de comandos), todos los archivos de cabeceras para el SDK habrán quedado volcados, parcheados y unidos. Es importante señalar que esto no interferirá en absoluto con el correcto funcionamiento de nuestro Xcode, aclaración imporante en el supuesto de que queramos desarrollar posteriormente otras aplicaciones válidas para AppStore, en cuyo caso no tendremos ningún problema.

De acuerdo, en este punto ya tenemos disponibles todos los métodos, incluidos aquellos que Apple no quiere que veamos. Ahora, el siguiente paso lógico será comenzar a desarrollar nuestra aplicación. Ésta evidentemente es la parte más complicada, no sólo porque tendremos que pelearnos con el código, sino porque para muchas de las cosas que querremos hacer, no podremos utilizar Xcode e Interface Builder de la manera clásica. En su lugar, necesitaremos otro “entorno de desarrollo”, más adaptado a aplicaciones para jailbreak: el conocido Theos y Logos. Una vez instalado Theos, ejecutaremos el NIC (New Instance Creator), que nos preguntará qué tipo de programa queremos comenzar a desarrollar: podremos elegir entre una aplicación, una librería, un grupo de preferencias, una herramienta o un tweak.

Pantalla de Theos

Pantalla de Theos

Después de seleccionar el tipo de programa, y tras asignarle un nombre, un autor, etc., obtendremos todas las plantillas necesarias creadas sobre las que podremos comenzar a programar. A modo de referencia y para que os sirva de ejemplo, programas como LockInfo, Activator, SBSettings, etc., son todos librerías dinámicas (dylib), en vez de aplicaciones como tal. Por su parte, Logos nos ayudará cuando compilemos nuestro desarrollo, al convertir la sintaxis simple de Theos en el complejo lenguaje de Mobile Substrate, del que hablaremos a continuación.

Para finalizar esta mini-guía, es imperativo comentar brevemente una de las características fundamentales en las aplicaciones para terminales con jailbreak: la inyección de código. Una vez que tenemos nuestros frameworks disponibles, nuestro Theos instalado, y creada nuestra plantilla sobre la que trabajar, necesitaremos de alguna forma (y sobre todo si estamos programando alguna librería dinámica o algún tweak) poder interferir en la ejecución normal del código de Apple en el dispositivo. Para ello, tendremos que conocer el funcionamiento de Mobile Substrate. Esta capa  es un componente requerido por multitud de programas (como SBSettings, Winterboard, Five Icon Dock…) , y fue desarrollada por Saurik. Su forma de actuar es montar librerías cuando carga el Springboard, de forma que pueda inyectar su código en las aplicaciones que lo ejecutan. Esto es lo que se conoce como “hook“, o sea, situar anzuelos en el código en los que nosotros podremos insertar el nuestro propio para engancharlo. Por otra parte, Mobile Substrate nos protege de posibles cuelgues del terminal, poniéndolo en una especie de modo “a prueba de fallos” en caso de que haya algún error en el Springboard.

Resumiendo, como veis, el proceso para comenzar a desarrollar aplicaciones de este tipo requiere una cierta preparación, unas buenas dosis de paciencia y una visión general del proceso que estamos siguiendo. A pesar de que no hay mucha información (especialmente en castellano) al respecto, en el servidor de IRC irc.saurik.com, canal #theos, podréis recibir más ayuda especializada y concreta para cada aspecto en particular. Lo que aquí os presentamos son sólo unos primeros pasos, que esperamos os resulten útiles para saber dónde podéis buscar más información, y qué información podéis buscar.

Si alguno de vosotros se anima, y esta breve introducción le ayuda a desarrollar alguna aplicación, hacédnoslo saber. ¡Estaremos encantados de hablar de ella en Átomos y Bits! :)

Y así es como funciona el ADSL!

Buenos días estimados lectores.

En esta calurosa tarde de verano, os traigo un post que quizá no aporte muchas novedades a algunos de vosotros, pero que probablemente resultará al menos curioso para muchos otros.

A menudo, estamos tan acostumbrados a las tecnologías que utilizamos a diario, que no reparamos en la ingeniería y los avances que subyacen y que nos han permitido poder disfrutar de dichas tecnologías.

El caso concreto del ADSL es muy interesante ya que, por ejemplo, en la carrera de Ingeniería de Telecomunicación puede verse desde multitud de puntos de vista (tantos como especialidades tiene la carrera), esto es, desde la perspectiva de la electrónica base que lo soporta, desde la de las comunicaciones, teoría de la señal, modulaciones, cifrados, compresión, etc, y desde el punto de vista de la telemática que hace uso del enlace ADSL. Por tanto, aunque aquí os contaremos solo las bases del funcionamiento de esta tecnología, podéis profundizar en ella tanto como queráis, porque podría escribirse todo un libro sobre ella (de hecho, se escriben libros sólo sobre ella…). Entremos en materia.

El ADSL debe sus siglas a las palabras Asymmetric Digital Suscriber Line (línea de abonado digital asimétrica, para que nos entendamos). Y su propio nombre ya nos da algunas pistas de su funcionamiento. Se trata de una tecnología de acceso a Internet, que se da sobre los hilos convencionales de cobre que todos tenemos en casa. Estos hilos de cobre, conocidos habitualmente como el “par de cobre“, unen nuestra casa desde el PTR (punto de terminación de red, que sería el punto a partir del cual la instalación deja de depender del operador como tal, o sea, de este punto hacia dentro de nuestra casa, la instalación es cosa nuestra, en teoría) con la central  local de nuestra área. Este cable consiste en dos hilos de cobre aislados, trenzados entre sí (para evitar acoplamientos indeseados y no funcionar como una antena, básicamente), muy extendido hace unos años dado su bajo coste, y su buena respuesta en frecuencias entre los 300Hz y 3’4KHz, y por tanto, muy convenientes para la comunicación vocal (humana), cuyo rango de inteligibilidad se encuentra entre frecuencias de 1 KHz a 4 KHz. Posteriormente, como se ha podido ir comprobando, hemos aprovechado dicho par para frecuencias incluso superiores a 1MHz (el cable de cobre debería funcionar bien hasta los 6 MHz aproximadamente).

Red básica de ADSL

Red básica de ADSL (Fuente: http://www.ayuda-internet.net/)

Sobre el par de cobre, vamos pues a transmitir información digital mediante señales eléctricas analógicas, y para ello vamos a necesitar un módem (modulador/demodulador). Pero, ¿en qué se diferencia un módem ADSL de los módems de 9600 bps que usábamos hace unos años? Pues fundamentalmente, en que dichos módems trabajaban en la banda de frecuencias vocales, y por tanto la velocidad disponible estaba muy limitada por trabajarse con anchos de banda tan pequeños. Además, conectarse a Internet impedía poder usar simultáneamente la línea para llamar por teléfono, con lo que en casa nos quedábamos incomunicados, o eso decían nuestros padres. El ADSL, por su parte, aplica una modulación en una banda de frecuencia superior a la que utilizan las comunicaciones vocales, reservando además un rango para el enlace ascendente y otro para el descendente, además de dejar libre la zona de frecuencias vocales (si bien para garantizar el mejor funcionamiento posible y las mínimas interferencias, se nos suelen proporcionar  microfiltros paso-bajo que conectamos al teléfono para asegurarnos que no interferimos en otros rangos de frecuencia, y viceversa).  Los rangos reservados para el enlace ascendente y descendente son diferentes, porque se concibió la red de forma que los usuarios tuvieran mayor capacidad de descarga que de subida de información. De ahí el apellido de asimétrica que tiene nuestra conexión a Internet. A continuación, podéis observar una gráfica del rango de frecuencias que se manejan en el ADSL tradicional:

Bandas de frecuencia en el ADSL tradicional

Bandas de frecuencia en el ADSL tradicional (Fuente: Wikipedia)

En la imagen, en rojo vemos la banda de frecuencias vocales, en verde el canal de subida y en azul el canal de bajada.

Sin embargo, insaciables de nosotros, estos anchos de banda y sus velocidades de transferencias asociadas, pronto se nos quedaron pequeños. Así nació el ADSL2/2+, que duplica el ancho de banda máximo utilizable hasta la frecuencia de 2’2MHz. Esto nos ofrece teóricamente unas velocidades de descarga en torno a 24Mbps, frente a los 8Mbps que nos ofrecía el ADSL normal. Para realizar esta proeza tecnológica (los padres del par de cobre nunca habrían imaginado que podría enviarse tal cantidad de información sobre dicho medio… fijaos si no en Imagenio), el ADSL2+ se sirve de una mayor eficiencia de modulación/codificación (utiliza modulazión de amplitud en cuadratura QAM con constelaciones de 1 bit, y codificación Trellis), además de unos algoritmos de tratamiento de señal mejorados con respecto al ADSL tradicional. Como os comenté en la introducción, el tema del ADSL es todo un mundo, así que os invito a que leáis algunos artículos sobre tratamiento digital de señales, teoría de la señal, codificación y modulación, para conocer un poco más en qué consisten todos estos extraños términos.

Otra mejora introducida desde el ADSL2 fue la posibilidad de cambiar dinámicamente la tasa de transferencia de datos entre el usuario y la central. Esto era un problema en el ADSL 1, ya que la alta diafonía que se registraba en el canal causaba muchos errores de transmisión y limitaba la calidad de la comunicación. ADSL 2 por su parte puede ajustar la velocidad, y reaccionar a la relación señal/ruido que observa en el medio.

En cuanto al funcionamiento en sí del ADSL, debemos saber que nuestro módem ADSL está conectado con un equipo en la central de nuestro proveedor, llamado DSLAM, que consiste en una serie de nodos ATU-C a los que se conectan (nos conectamos) los usuarios. El DSLAM agrega multitud de conexiones y las gestiona, sincronizándose con nuestro módem ADSL, entre otras cosas para establecer una tasa de transferencia adecuada y otros parámetros de la conexión. Además, el DSLAM envía el tráfico de voz a la central de conmutación para su tratamiento. Desde el DSLAM hacía “arriba” en la red, podemos considerar que se sigue una política jerárquica, que va agrupando conexiones de usuarios en enlaces cada vez de mayor capacidad, llegando a grandes enlaces troncales internacionales. Al ser una red de conmutación de paquetes, se obtiene una gran eficiencia, ya que generalmente (al menos ha sido así hasta los últimos años, en los que las descargas de grandes ficheros desde Internet se han hecho más habituales entre los usuarios) el tráfico generado/enviado por/hacia los usuarios tiene un comportamiento de ráfagas, por lo que no es habitual que un usuario esté utilizando la conexión permanentemente, mientras que los paquetes de otros usuarios sí lo hacen; así se comparte el canal más eficientemente (al contrario de lo que ocurre con una llamada telefónica tradicional sobre una red de conmutación de circuitos, en la que cuando marcamos el número de teléfono de otra persona, aunque no hablemos, tenemos reservado el canal hasta que uno de los dos interlocutores finalice la conexión).

 

Ejemplo de DSLAM en una central

Ejemplo de DSLAM en una central (Fuente: http://dougonipcomm.com/)

Pero toda esta tecnología y avance tiene sus inconvenientes. Y es que, aunque el ADSL2 nos permita trabajar con canales de peores características, y aunque intenten minimizarse los errores producidos en la transmisión sin sacrificar en la medida de lo posible velocidad y prestaciones, las conexiones tienen unos límites más allá de los cuáles se hace inviable manejar esas tasas binarias. Para empezar, es necesario que el par de cobre tenga una cierta calidad, tanto en lo que respecta al ruido como a la atenuación debida a la distancia hasta la central. A partir de los 5 kilómetros aproximadamente, ya tendremos un servicio de bastante mala calidad. Y viceversa: entre los 500 metros y 1 kilómetro de la central, obtendremos la máxima velocidad porque la atenuación será prácticamente inexistente. Podéis ver una gráfica resumen a continuación:

 

Distancia/Velocidad de las conexiones ADSL

Distancia/Velocidad de las conexiones ADSL (Fuente: http://www.supernerd.com.au/)

Bueno, queridos lectores, esto ha sido una brevísima introducción a la tecnología ADSL. De aquí podríamos derivar a hablar sobre TCP/IP , UDP, puertos, LAN’s, backbones y multitud de temas que de una u otra forma están relacionados con el ADSL. ¡Pero tenemos que dejar asuntos para otros días!

Hasta entonces, ¡podéis seguir usando (muchos de vosotros) vuestra conexión ADSL para acceder a páginas tan interesantes como Átomos y Bits!

¡Hasta pronto!

 

 

 

AppInstaller 1.0

Hola a todos y bienvenidos de nuevo a Átomos y bits. Parece que estamos en la racha de los scripts, y es que, tras el MataProcesos 1.0 hoy quisiera mostraros otro script,  al que he llamado AppInstaller 1.0, que podéis usar todos aquellos que uséis Android (del que ya hemos hablado en una entrada anterior), y que podéis descargar aquí.

No quiero entrar en detalles, pero para aquellos que no lo conozcáis Android es un Sistema Operativo para móviles (en realidad smartphones). En estos móviles podemos instalar infinidad de aplicaciones, por ejemplo desde el Market. Pero claro, todos aquellos a los que nos gusta enredar bastante con nuestros terminales, modificar cosas, probar nuevas configuraciones, nuevas roms… nos encontramos con que el sistema puede volverse inestable y nos toca restaurarlo a sus valores iniciales (lo que comúnmente se denomina hacer un “wipe”). Esto puede resultarnos muy pesado, porque muchas veces el número de aplicaciones que tenemos instaladas es muy elevado y, sobre todo, no queremos perder sus datos ni sus configuraciones. Para ello hay algunas opciones en el Market, como por ejemplo Titanium Backup, una gran aplicación que nos hace copias de seguridad tanto de las aplicaciones como de sus datos.

Sin embargo, puede que a alguno de vosotros os haya pasado, como a mí, que no siempre funciona correctamente. Los backups los crea correctamente, pero a la hora de restaurarlos últimamente no me encuentra ningún backup que restaurar, lo que es curioso, pues he comprobado que las copias se han hecho y están donde deben estar. Me planteé la posibilidad de volver a descargarlas e instalarlas todas una a una, pero enseguida deseché la idea dado su elevado número. Después intenté simplemente instalarlas manualmente, extrayendo las aplicaciones del backup de Titanium Backup, pero tampoco me agradó la idea. Seguía siendo demasiado pesado.  Finalmente, como me gusta automatizar cosas, decidí hacer un proceso automático que cogiese todas las aplicaciones de una carpeta concreta definida por mí y las instalase una a una él solito. Además, si en esa misma carpeta hubiese una subcarpeta con el mismo nombre que la aplicación (su configuración y datos) debería restaurarlos también.

También es conveniente saber que Titanium Backup tiene dos versiones, una gratis y otra de pago. Las dos realizan los backups correctamente. La diferencia está a la hora de restaurar las aplicaciones, pues, mientras que en la de pago el proceso es completamente automático, en la versión gratis debemos ir aceptando manualmente una a una todas las aplicaciones a restaurar, y bueno, ya sabemos lo aburrido y cansado que eso puede llegar a ser…

Por todo ello, he tenido esto en cuenta para que AppInstaller 1.0 sea compatible con los backups resultantes de Titanium Backup, o al menos en parte. Hablaremos de ello más tarde. Posiblemente no sea el proceso de backup más completo, pero a mí me funciona perfectamente y me automatiza todo el proceso. Con una ROM limpita, como recién salida de fábrica, lo ejecuto y… Voilà! Vuelvo a tener todas mis aplicaciones y mis datos (Como he hecho esta misma mañana).

Quiero repetir de nuevo, que esto también lo hace Titanium Backup (la versión de pago), y hasta hace un tiempo a mí me funcionaba correctamente, así que puede que a vosotros no os sirva en absoluto. También quiero aclarar que para que este script funcione se necesita hacer uso de las herramientas “adb” del kit de desarrollo de Android (Android SDK), que es la manera en la que el ordenador puede conectarse al móvil y ejecutar comandos sobre su sistema. Si no sabéis como instalarlo, echadle un ojo a la era del androide 2.0.

Es posible que esta no sea la versión definitiva, ya que una vez puestos intenté, además, que el propio script tuviera la capacidad de realizar él mismo los backups. Y en principio, también lo hace (la versión 2.0), pero no funciona bien en algunos casos y debo dedicarle algo más de atención, por lo que sólo publico la parte que realiza la restauración.

El programa consta principalmente de tres partes, un fichero de líneas de comandos (AppInstaller1.0.cmd), un script en Visual Basic Script (..\bin\AppInstaller.vbs) y la carpeta “Apps” donde pondremos las aplicaciones a restaurar. Adicionalmente se crea un fichero de texto (“..\bin\resultados.txt”) en el que se introducen datos auxiliares intermedios. Este fichero se borra automáticamente al finalizar la ejecución del programa.

Para que todo funcione correctamente, en el fichero “..\bin\AppInstaller.vbs” deberemos configurar algunos parámetros.

DIR=”Apps”

SDK=”C:\SDK\platform-tools”

VISIBLE=”NO”

Estos parámetros son:

DIR: es la ruta de la carpeta “Apps” relativa a la carpeta donde se encuentra “AppInstaller1.0.cmd”.

SDK: es la ruta dónde hemos instalado el SDK de Android, en concreto la ruta donde se encuentra el ejecutable “adb.exe”.

VISIBLE: esta opción permite configurar si queremos que se vean o no, los procesos que el programa lleva a cabo en cada caso. Personalmente, recomiendo la opción “NO” , pues en caso contrario se abrirá una ventana por cada proceso de cada aplicación, que, aunque se cerrará también por sí sola, nos impedirá seguir haciendo otras tareas en nuestro ordenador con tranquilidad. En cualquier caso está disponible por si queremos observar con más detalle lo que la aplicación está realizando en cada momento.

Con todo esto, ya podremos ejecutar AppInstaller1.0.cmd. Si lo hacemos veremos la siguiente pantalla:

Pantalla principal de AppInstaller 1.0

Como podemos observar el funcionamiento es bastante simple. Tan sólo deberemos introducir el número correspondiente a la opción deseada. Con la primera opción tan sólo se intentarán instalar las aplicaciones encontradas en “Apps”. Con la segunda opción tan sólo se intentarán restaurar sus datos.  Sobra decir que esta opción es útil únicamente si las aplicaciones estaban instaladas con anterioridad. La tercera opción nos permitirá instalar las aplicaciones a la vez que se restauran sus datos, en el caso de que los tenga.

Es importante destacar que para que todas las aplicaciones de las que se han restaurado datos funcionen correctamente el script necesita restaurar sus permisos necesarios. Para ello se ayuda de un script conocido como “fix_permissions”, que algunos ya conoceréis. En mi caso tengo instalada una rom de Cyanogen (CM 6.1) que lleva incorporado dicho script. Si vuestra rom no lo lleva incluido de serie, supongo que no hay ningún problema en modificar AppInstaller 1.0 para indicarle manualmente dónde se encuentra “fix_permissions” (deberíais incluir dicho script a mano en vuestro terminal).

Al finalizar, el programa nos mostrará un resumen de las acciones realizadas.

Resumen de las acciones realizadas por AppInstaller 1.0

Por último, dado que se necesitan restaurar los permisos (mediante “fix_permissions”) será necesario reiniciar el terminal. Una vez hecho esto ya dispondremos de nuestras aplicaciones tal  y como estaban cuando realizamos el último backup.

Como he dicho anteriormente, mi idea fue hacerlo compatible con Titanium Backup, de manera que se pudieran restaurar cómodamente los backups hechos con esta aplicación.  Pero para poder restaurarlos necesitaremos reorganizar un poco estos backups. Veamos cómo.

Lo primero que haremos será copiar en la carpeta Apps de nuestro ordenador el contenido de la carpeta “TitaniumBackup” que encontraremos en la SD de nuestro terminal. A continuación borraremos los ficheros *.properties, que no necesitaremos. Seguidamente seleccionaremos todos los ficheros *.apk.gz (Organizar -> Seleccionar todo) y (con winrar instalado) mediante botón derecho del ratón seleccionaremos “Extraer aquí”.

Selección de ficheros APK

Por último, y de la misma forma, seleccionaremos todos los ficheros *.tar.gz y mediante botón derecho del ratón seleccionaremos “Extraer cada archivo en carpetas separadas”. De esta manera tendremos, dentro de la carpeta Apps, todos los ficheros *.apk (instaladores de los programas)  y una subcarpeta por cada aplicación con su mismo nombre (datos de los programas).

Selección de los datos de las aplicaciones.

Como último apunte os diré que también es posible utilizarlo para instalar aplicaciones sin que provengan de Titanium Backup, tan sólo necesitamos tener sus correspondientes .apks y seguir el mismo procedimiento (sin tener en cuenta sus datos, por supuesto).

Al comienzo lo utilizaba creando “lotes” de carpetas categorizando por contenido. En concreto, la idea principal era hacer una carpeta de aplicaciones básicas o indispensables que pudiera ejecutar tras hacer wipe. Puede seguir siendo buena idea, tan sólo habría que ir modificando los nombres de las carpetas.

Pues nada, ahí lo tenéis, quizá nadie lo use nunca (yo ya lo he usado unas cuantas veces) pero si puede serle de alguna utilidad a alguien en algún momento habrá merecido la pena publicarlo.  Por supuesto está a vuestra libre disposición, podéis descargarlo e incluso modificarlo según vuestros intereses, pero si que me gustaría pediros que siempre nos hagáis referencia, citando al autor original y la web o bien con un enlace para que otros lo puedan descargar desde aquí.

¡Hasta pronto!