Mostrando entradas con la etiqueta informática. Mostrar todas las entradas
Mostrando entradas con la etiqueta informática. Mostrar todas las entradas

jueves, 20 de agosto de 2015

allRGB mediante algoritmo genético

Como continuación a mi anterior entrada, en esta voy a mostrar mi progreso con respecto a la creación de imágenes allRGB (con todos y cada uno de los colores existentes en informática). En esta ocasión he utilizado un algoritmo genético (evolutivo) ya que, a diferencia de mi algoritmo anterior, es muchísimo más rápido y se obtienen mejores resultados que con un algoritmo en el que los pasos son definidos estrictamente por el programador. Este es el resultado y a continuación explicaré cómo lo he realizado:



Está disponible en la web allRGB con el título "Globos 2":

http://allrgb.com/globos-2

A diferencia de mi anterior algoritmo, en el que analizaba píxel a píxel buscando el color más cercano sin utilizar (para que no se repitan), en este caso he partido de una imagen que ya contenía todos los colores (16.777.216) pero repartidos de forma aleatoria por la imagen. Se ve algo así como el ruido de los antiguos televisores analógicos. Luego selecciono dos píxeles de la imagen al azar y los intercambio. Si este intercambio hace que la imagen de ruido se parezca más a la original, entonces hago el cambio efectivo. Si no se produce una mejoría, busco otros dos píxeles distintos. Conforme se analizan más y más parejas de píxeles, la imagen se va acercando a la original. Aquí una animación en la que se ve el proceso paulatinamente:




La fórmula que he utilizado para calcular la diferencia ("dif") entre dos colores es esta:

Dif_total = (dif_L^2 + dif_a^2 + dif_b^2) + (dif_R^2 + dif_G^2 + dif_B^2)/10

L, a y b son las coordenadas del espacio de color "Lab", basado en estudios de la percepción humana. El canal L representa la luminosidad del color, y los canales a y b representan el tono del color. Aquí podemos ver una animación de este espacio de color:


Imagen obtenida de la web www.brucelindbloom.com

R, G y B son las coordenadas de color usadas en informática por defecto. Las utilizo en mis cálculos pero dividido entre 10 para darle menor importancia, ya que utilizando el espacio de color Lab se obtienen mejoresa resultados visuales. Además he utilizado las coordenadas elevadas al cuadrado por el mismo motivo, para obtener mejores resultados visuales y mejorar la imagen como conjunto, y no unos píxeles más que otros. En mis primeros intentos utilicé un algoritmo evolutivo que sólo medía la diferencia RGB, y sin elevar al cuadrado. Los resultados no fueron todo lo bueno que me esperaba. Pronto me di cuenta de que debía afinar el algoritmo para hacer que funcionase bien

El último paso para mejorarlo más aún es utilizar dispersión del error (dithering), que todavía tengo que aprender a aplicar correctamente de forma que no se genere excesivo "ruido" en la imagen. También me gustaría programarlo en un lenguaje más rápido como es C++ o incluso C, el rey de la velocidad, o utilizar técnicas como el procesamiento multi-hilo o el Open-CL para usar el procesador gráfico como co-procesador en los cálculos. Poco a poco voy mejorando mis conocimientos... :)

lunes, 4 de mayo de 2015

allRGB

Las imágenes que capta nuestra cámara o las que vemos en nuestros monitores está compuesta de píxeles, y cada píxel tiene tres sub-píxeles o ingredientes: la luz roja, la verde y la azul, y aplica a cada sub-pixel una intensidad determinada para generar todos los colores posibles. Podemos ver una ampliación de cómo se ve una pantalla de cerca:



Cada sub-pixel puede iluminarse con una intensidad que va desde el 0 (totalmente apagado) hasta el 255 (totalmente encendido). Por ejemplo, si queremos ver por el monitor un color rojo oscuro, necesitaremos crear una imagen en la que los sub-píxeles verde y azul estén apagados, mientras que el rojo deberá tener un valor intermedio, por ejemplo 120.

Dicho color se expresa mediante el modelo de color RGB (Red, Green, Blue; los colores primarios en la síntesis (mezcla) aditiva (que se suma)), y quedaría así: RGB = (120,0,0)



Puede que os enseñaran que los colores primarios eran el rojo, el amarillo y el azul, pero esto no es cierto. No existen unos colores primarios mediante los cuales podamos conseguir todos los colores que existen mediante la mezcla de los mismos, y los que más se aproximan son el Rojo 700nm, el Verde 525nm y el Azul/violeta 400nm. Los colores que podemos conseguir con la suma de estos colores "primarios" son los que se encuentran dentro del siguiente triángulo llamado espacio de color CIE 1931:


Los colores que están fuera del triángulo (como por ejemplo el cyan puro 495nm) no pueden ser representados por los monitores, pero es algo complejo de entender y me llevaría mucho tiempo explicarlo.

A donde quiero llegar es que el número de colores distintos que se pueden conseguir mediante la combinación de todas las distintas intensidades de cada sub-píxel es de 256 x 256 x 256 = 16.777.216 de colores distintos para una imagen de 24 bits (profundidad del color).

Los primeros ordenadores sólo podían reproducir dos colores (profundidad de color de 1 bit), como el verde y el negro. Luego se consiguió reproducir 16 colores, posteriormente 256 colores (8 bit) y hoy día lo más común es utilizar 24 bits, aunque los fotógrafos y otros profesionales pueden llegar a usar imágenes de 48 bits (billones de colores), pero para ello se necesitan unos monitores especiales que actualmente son muy caros y están destinados a profesionales.

Pues existe una web (allRGB.com) en la que distintos artistas y programadores suben imágenes creadas por ellos en las que se cumple una característica común: poseen todos y cada uno de los colores posibles, sin que falte ninguno y sin repetir ninguno. Para conseguirlo es necesario tener conocimientos de programación, como es mi caso. Así que he presentado mi propuesta que consiste en transformar una foto normal en otra que contenga todos los colores. Para ello he creado un código que tardó una semana en ejecutarse debido a la complejidad computacional del problema a resolver. Este es el resultado una vez aceptado y publicado:

http://allrgb.com/globos

Os dejo una miniatura de la imagen original y del resultado. La original tenía unas dimensiones de 4092 x 4092 píxeles, lo que multiplicado hace un total de 16.777.216 píxeles, todos ellos distintos:






Y para ver la diferencia de una forma más clara, he creado un gif animado. He de decir que dicho gif sólo tiene 256 colores distintos, por eso se diferencia un poco del original:



El algoritmo lo he programado usando Processing por su simplicidad, aunque en un futuro usaré C# ya que es mucho más rápido ejecutándo el código. Esta primera versión del algoritmo lo que hace es:

Leer la imagen original
Crear las variables y objetos necesarios
crear matrices en las que se vuelca la información de la imagen original, como por ejemplo la posición de cada color en la imagen, etc
empezando por arriba de la imagen original, buscar el color más próximo que no haya sido usado aún.

Como es lógico, al principio no hay apenas colores usados, por tanto la imagen producida se parece mucho a la original. Pero a medida que avanzamos cada vez hay menos colores disponibles y el algoritmo tiene que recurrir a colores que se parecen menos al original. Por eso al final se obtienen colores muy distintos. Aquí una imagen creada con un algoritmo que mide la diferencia entre la imagen original y la modificada. Cuanto más diferencia haya, mas claro será el píxel correspondiente:



La siguiente versión del algoritmo (que ya he empezado) hará justo lo contrario. Buscará los colores que menos se acercan al de la imagen original y serán los primeros en usarse. El objetivo es reducir al mínimo el error cometido en conjunto. Y la última versión del algoritmo aplicará una difusión del error (dithering) para que a simple vista el conjunto tenga mucho mejor aspecto.

lunes, 22 de diciembre de 2014

¡Todos contra la pelusa asesina!

Uno de los peores enemigos de los ordenadores son las pelusas, pues inutilizan los disipadores de calor que llevan dentro, provocando un sobrecalentamiento excesivo que da lugar a fallos e incluso a la muerte del ordenador. Un técnico puede limpiar esta suciedad acumulada, pero es una solución temporal y costosa a largo plazo. Afecta por igual a ordenadores portátiles y de sobremesa, como podemos apreciar en las fotos:


Incluso puede frenar por completo los ventiladores con bolas de suciedad al mas puro estilo del oeste:

Después de muchos años experimentando soluciones he llegado a la solución definitiva, fabricar mi propio filtro antipelusas. Es efectivo, es duradero y se puede hacer con herramientas y materiales disponibles para el gran público. Empecemos...

He aquí un lateral de un ordenador de un cliente preparado para la operación quirúrgica. Es de una torre grande de aluminio que tenía bastante suciedad por dentro. (El ordenador de arriba es mío y ya está modificado)

Comparación de tamaños entre mi torre y la del cliente:


Después de una limpieza profunda llega el turno del equipo de prevención anti-pelusas. Lo primero que necesitamos es una segueta larga con un pelo para metal de esos retorcidos en espiral. Dichos pelos se beben el metal y el metacrilato (al metacrilato hay que mojarlo durante el corte o el plástico se fundirá con el calor formando una pelota que finalmente partirá el pelo). Primero corté un trozo de plástico de un agarre que tenía pues en ese lugar va un ventilador que voy a instalar.


El ventilador lateral debe ser grande (12cm mínimo) y tener suficiente flujo de aire para que entre bastante aire limpio al interior de la torre y salga por los distintos orificios de esta, impidiendo que entre aire sucio del exterior. Por el mismo motivo quité dos ventiladores pequeños que había en el frontal metiendo aire, pues eran muy ruidosos y estaban tapados, es decir apenas metían aire, y el que metían era sucio. En mi torre por ejemplo en el frontal tengo un ventilador transparente de 14cm con filtro y luces LED, para darle más alegría :D. En definitiva lo ideal es poner sólo ventiladores metiendo aire y que estos tengan filtro.

Como experimento y para elegir el ventilador más adecuado ideé un método para medir la "fuerza" del ventilador mediante una báscula de precisión. Hice una pieza de cartón pluma recortada con segueta en forma de "X" y redonda en el centro para ponerla sobre la bascula y medir el empuje de ventiladores de cualquier tamaño.

Luego con el plástico de una caja de huevos, palillos de diente, cola blanca y conos de cartón pluma hice unos soportes aerodinámicos para poner el ventilador encima. El ventilador debe estar "bocarriba" (echando aire hacia arriba) y conectado a un transformador de 12V con pinzas de cocodrilo pero apagado, para poner a cero la báscula antes de encender el ventilador y medir el empuje en gramos que produce.

Según las leyes de Newton, toda acción conlleva una reacción en la misma dirección y sentido opuesto, por tanto si un ventilador produce 11g de empuje, significa que esta moviendo el aire con una fuerza de 11g. Cuanto mayor sea el flujo, mayor fuerza hará el ventilador y más masa de aire esta moviendo. En cada ventilador apunto el empuje, el consumo en mA y el ruido percibido. Algunos ventiladores hacían ruido y producían muy poco empuje para el consumo que tenían (lo vi ordenando los ventiladores por consumo) y tiré los que estaban ya gastados. Estos ventiladores son de otros ordenadores o de fuentes de alimentación que ya no funcionaban. En cualquier tienda de informática puedes pedir una fuente estropeada para aprovechar el ventilador que tienen por poco dinero, o comprarte un ventilador nuevo...

Recortamos un folio con la forma del ventilador, por ejemplo poniendo el ventilador debajo del papel y marcando la forma con el dedo, y luego con un boli repasándola. Una vez que hemos posicionado el recorte en el lugar que queramos con cinta adhesiva, lo marcamos con un rotulador permanente (no olvidar los agujeros para los tornillos, que a mí se me olvidó).

Luego con un taladro con broca metálica hacemos un agujero cerca de la linea a cortar pero por el interior. Si hay algún agujero ya hecho lo aprovechamos y metemos por ahí el pelo:

Con paciencia vamos recortando por la línea hasta terminar, retiramos el pelo. Esta operación recomiendo hacerlo con ayuda de alguien, es complicado meter sólo el pelo y apretar la segueta sin que se rompa.

Hacemos los agujeros para los tornillos y lo probamos, que todo encaje. Limamos las asperezas con una lima.


Ya queda menos...
Ahora procedemos a instalar el filtro anti-pelusas. Si tu ordenador ya tenía ventilador lateral, todo lo anterior te lo has ahorrado, enhorabuena!!!
El filtro que voy a utilizar es una tela especial que se vende por metros cuadrados (puede salir por 1€/m2 aprox) en los mercadillos de los gitanos. Algunos la conocen como tela de cristal, es muy fina, con mucho espacio entre hilo e hilo, lo que ayuda a dejar pasar mucho aire y poca suciedad. La tela deja pasar tan bien el aire que si la dejas caer, parecerá como si no hubiera aire y estuviera en la luna. Puedes soplarte la mano fácilmente a través de esta tela:

En la imagen puede verse como hay 5 hilos por cada milímetro. Todo un atrapa-pelusas!!
Con el ventilador atornillado, procedemos a poner tiras de cinta adesiva de doble capa Ceys Tack de color rojo. Es la única que me da buenos resultados. La venden en dos formatos, uno pequeño y otro más grande reforzada con fibra de vidrio (esta última vale 7€). Cualquiera de las dos sirve:



Yo lo que hago para que me dure más la cinta es cortar los trozos a la mitad de anchura con un cutter y una regla. Lo pego primero sobre una superficie en la que no peque bien (por ejemplo en trozos de formica). Luego posiciono la regla a la mitad y luego corto. Debe quedar un cuadrado cerrado alrededor del ventilador:


Una vez pegada la cinta adhesiva, retiramos el ventilador y el plástico rojo que protege a la cinta, ponemos la tela encima y empezamos estirando la tela con los dedos y apretando en las esquinas superiores del cuadrado:

Vamos bajando por los laterales del cuadrado apretando contra la cinta con fuerza para que la tela se pegue bien, y estirando la tela para que no quede suelta. Una vez que hemos hecho dos laterales del cuadrado, hacemos los otros dos estirando también. Da mejores resultados si hacemos coincidir la dirección del hilo con el lateral del cuadrado, es decir debemos estirar el hilo siguiendo la dirección del mismo, no en diagonal porque se deforma la tela. Una vez pegado la tela debe quedar tensa, pero sin romper la tela. Apretamos por última vez la cinta para asegurarnos de que esté bien pegado por todos lados.

Una vez que estemos satisfechos, cogemos un soldador y esperamos que se caliente. En un trozo de tela que no sirva probamos el soldador, y cuando empiece a derretir la tela, sin demorarnos vamos cortando la tela sobrante con la punta del soldador, con cuidado de no agujerear la tela tensada. Este tipo de corte funde los hilos e impide que en un futuro se deshilachen. Hacemos también los agujeros para los tornillos con mucho cuidado, el tamaño justo para que pasen sin problemas. Apagamos el soldador y lo limpiamos con un estropajo metálico y lo dejamos enfriar en un lugar seguro.

Ya sólo queda atornillar el ventilador, y opcionalmente, una rejilla metálica protectora. Si el ventilador es reciclado de una fuente de alimentación, hay que soldarle un cocnector Molex o un conector de paca base, con un cable lo suficientemente largo para poder abrir el lateral sin que el cable dé tirones.





¡¡¡Y ya está!!!

Con el uso, el filtro se irá llenando de pelusas. Sólo debemos pasarle la aspiradora de vez en cuando o pasarle el dedo si no tienes aspiradora, en cuyo caso no recomiendo ponerle la rejilla metálica para no tener que desmontarla. No limpiar con un paño húmedo pues la porquería se pegaría al hilo. Si acaso cada varios años, limpiarlo con agua jabonosa quitando previamente el ventilador, pero no es necesario. Ojo con los fumadores, el humo del tabaco contiene alquitranes que podrían echar a perder la tela con el paso del tiempo. Recomiendo no fumar, o en su defecto sufrir las consecuencias en los disipadores del ordenador y en los pulmones. Una vez tuve que limpiar el ordenador de un fumador, y sólo os digo que no le deseo la experiencia ni a mis enemigos. El negro alquitrán no había forma de quitarlo.

Bueno, espero que os haya gustado el tutorial y que compartáis el enlace a esta web con vuestros amigos. Ante cualquier duda preguntad aquí abajo.

viernes, 19 de diciembre de 2014

Reparación portátil


Este es un portátil que he reparado recientemente. Se apagaba repentinamente debido a que tenía un cable flex que no hacía buen contacto, puesto que el cliente llevó el portátil a otro técnico informático que al desmontar el portátil produjo la rotura del seguro de plástico que mantenía los contactos a presión.

Para solucionarlo corté un trozo de plástico acetato flexible a medida y lo metí en la conexión para que hiciera presión y mantuviera el cable en su sitio. Una vez solucionado esto, procedí a desmontar el disipador Heat Pipe para limpiarlo, pues estaba lleno de pelusas lo que bloqueaba el flujo de aire y producía un aumento excesivo de las temperaturas. Para prevenir esto suelo montar en todos mis ordenadores un filtro antipelusas. En próximas entradas mostraré su instalación para que vosotros, lectores, podáis vencer la batalla contra las pelusas

domingo, 4 de mayo de 2014

Simulador de facturas



Más de uno se habrá hecho un lío a la hora de entender la factura eléctrica y le gustaría saber cómo ha hecho la compañía eléctrica los cálculos, o cuanto se podría ahorrar con tal o cual tarifa eléctrica o una reducción de potencia entre otras cosas.

Para esas personas he hecho un simulador de facturas en el que introduciendo unos datos puedes saber el importe de la factura.

Desde este enlace os podéis descargar un simulador de facturas que he realizado en Excel para controlar vuestros consumos en electricidad:

http://1drv.ms/1mrOLKi

El documento es gratuito, pero espero que si compartís el enlace digáis quién lo creó.

jueves, 15 de noviembre de 2012

Decodificador Orange TV


Hace varios meses que contratamos la Tv de Orange para ver algunos canales como National Geographic, Discovery Channel o Nature. El decodificador que nos dieron fué el Sagem ISD83 TDT, capaz de visualizar canales TDT (algunos usuarios afirman que no todos los canales: ADSLZone) y canales a traves del ADSL consumiendo ancho de banda.

Mi experiencia con el aparato empezó bien, pero en unos minutos empezaron los problemas: la imagen se congelaba, daba tirones, se pixelizaba, e incluso se quedaba la pantalla en negro sin ningún sonido. Otras veces aparecía un mensaje con fondo en negro diciendo que lo sentían, pero que el servicio no estaba en ese momento disponible. Era frustrante estar viendo las noticias o un documental y que se quedara colgado. A veces se solucionaba cambiando de canal, otras veces había que apagar el deco y esperar unos minutos para que volviera a funcionar bien... así un día tras otro. Llamé a que me descambiaran el aparato, pero al nuevo le ocurría exactamente lo mismo.

Según mi experiencia en hardware, componentes informáticos y refrigeración sabía que la culpa la tenía un fallo de diseño en el aparato relacionado con la disipación del calor. Ni corto ni perezoso abrí el aparato y le quité los plásticos exteriores para que el aire accediera con más facilidad al disipador interno. Eso mejoró un poco el problema, pero no lo solventaba del todo. Al cabo de media o una hora suele volver a fallar, por lo que no puedes siquiera ver una película entera :(

Hoy me he cansado y he puesto en el asador todos mis conocimientos en cuanto a refrigeración. He partido de la base de que los diseñadores no han sido capaces de hacer los cálculos necesarios para dimensionar el disipador convenientemente, y de que seguramente ni siquiera habían utilizado pasta térmica (necesaria para la correcta transmisión del calor desde el procesador hasta el aluminio o cobre del disipador), sino una solución más barata e ineficaz: pegamento. He desmontado por completo el aparato con un destornillador, incluida una tapa metálica que rodeaba el disipador (seguramente es un blindaje para las radiofrecuencias, que alguien me lo confirme). He girado con cuidado el disipador para despegarlo y, Voilà! pegamento cutre como supuse.

Despues de quitar el disipador mediocre (el cual estaba muy caliente), cogí un disipador mayor de una placa base estropeada que tenía por ahí, y le hice lapping. El lapping es una técnica avanzada de disipación que trata de pulir la base del disipador con una lija superfina en una superficie superlisa para que la base quede como un espejo y de esa forma aumentar la transmisividad térmica del disipador (por algo me llaman Lapping-Master). Aquí podéis ver algunas de mis obras anteriores:


Después limpié con alcohol y algodón las superficies y apliqué en el chip un poco de pasta térmica Artic Silver 5, hecho con plata (uno de los mejores conductores térmicos). La cantidad era como un grano de arroz, no se necesita más. Luego presioné el disipador contra el chip y apliqué termoplástico fundido con una pistola debajo y a los alrededores del disipador. Reconozco que lo ideal sería unir disipador y placa con tornillos y muelles para que se mantenga la presión adecuada contra el chip para hacer mejor contacto, pero no tenía posibilidad alguna de hacerlo. El resultado final es el que se puede ver:


Diferencia de tamaño:

Herramientas:

El resultado es que ahora el disipador esta menos caliente y no se queda la imagen congelada ni aparece el pantallazo negro, aunque a veces da algún salto pero mucho menos que antes. Lo ideal habría sido haberlo diseñado desde un principio con un disipador mayor y con más láminas y mas finas (para aumentar la superficie de disipación), y también utilizar pasta térmica en vez de pegamento y sujetarlo con tornillos y muelles que ejerzan presión. Una carcasa que permita la ventilación interna sería también importante.
 
Contador Gratis