• Shortcuts : 'n' next unread feed - 'p' previous unread feed • Styles : 1 2

» Publishers, Monetize your RSS feeds with FeedShow:  More infos  (Show/Hide Ads)


Date: Tuesday, 15 Jul 2014 16:30

Si hace unos años os hubiera dicho que en mi último viaje a Irlanda llevaba en la mochila una cámara full frame con tamaño compacto y calidad profesional, me habríais tomado por loco; con razón. Y sin embargo, hoy en día, gracias a los ingenieros de Sony, que llevan largo tiempo intentando hacerse un hueco en un mercado tan inamovible como es el de la fotografía, es posible esto y mucho más.

Cervezas en Porterhouse (Sony RX1)

Si os digo que la Sony RX1 es la mejor cámara compacta del mercado, y la mejor cámara que yo, personalmente, he tenido entre las manos, no estaría exagerando. Así de revolucionaria me ha parecido esta cámara.

Abrir la caja es un poco decepcionante, porque el contenido se limita a la cámara, la batería y un cable para cargar, pero es tener la RX1 en las manos por primera vez y olvidarse de todo. Extremadamente robusta, con materiales de primera calidad, y líneas muy atractivas; el cuerpo es de metal, de alguna aleación de magnesio seguramente, bastante ligero y de tacto agradable.

En un segundo vistazo descubrimos un objetivo fijo Carl Zeiss Sonnar 35mm f/2, que da un rendimiento espectacular y que es ideal para acompañar su sensor de tamaño completo, que es una versión modificada del de la A99. Una combinación ganadora que dejará a más de uno con la boca abierta. No en vano, es el 5º sensor con mayor puntuación de todos los analizados en la reputada DxOMark con un 93 sobre 100.

Conchas (Sony RX1)

También llama la atención lo personalizable que es la cámara, con 5 botones configurables a los que se puede asociar 27 funciones, y 3 modos en el dial en los que poder guardar combinaciones de ajustes que utilicemos frecuentemente.

Todo esto unido al dial de ajuste del tiempo de exposición, los anillos para regular el enfoque y la apertura en la lente y la rueda para regular la compensación de la exposición (que yo no utilizo demasiado) hacen su manejo bastante flexible y rápido, sobre todo para un cuerpo tan pequeño.

Lo que sí echo en falta es una empuñadora para un mejor agarre. Aunque es posible comprar una a parte, da una imagen un poco contradictoria sobre cuál es el público objetivo que busca Sony, y cambiar las líneas no es algo que debiera haber encarecido demasiado el precio del producto.

The Spire (Sony RX1)Acantilados de Howth (Sony RX1)

Aunque la pantalla, de 3” y 1,2M de resolución, es bastante buena, también he echado en falta un visor electrónico integrado, aunque es algo que entiendo, porque podría haber aumentado el tamaño considerablemente. En todo caso, y si supone un verdadero problema, son cosas que son subsanables fácilmente rascándonos un poco más el bolsillo. Nadie dijo nunca que la fotografía fuese un hobby barato.

Y en el caso de la RX1 esto es doblemente cierto porque aquí viene el golpe de realidad directo a la mandíbula. Como decía, esta cámara es una maravilla de la técnica. Y eso, amigos, se paga. Es un precio hasta barato, si tenemos en cuenta lo que ofrece, pero es lo suficiente alto para que los simples aficionados tengan que pensárselo dos veces antes de hacer el desembolso. 2300€ a la hora de escribir estas líneas. Y con un desembolso así, sí, es probable que tu mujer o marido te eche de casa, pero habrá merecido la pena.

A la hora de sacarla de paseo, uno puede guardarla en los bolsillos de la chaqueta, siempre que estos sean relativamente anchos. Lo reducido de su tamaño, su aspecto poco amenazador y el sonido del obturador, que es prácticamente imperceptible, la convierte en una cámara ideal para fotografía cándida y para aquellos que quieran emular a Robert Capa.

Hormigón (Sony RX1)Tréboles (Sony RX1)

La duración de la batería no es muy alta, permite disparar unas 270 fotografías en el estándar CIPA, por lo que es recomendable tener 1 ó 2 de repuesto. El modelo que utiliza es el NP-BX1, de ión-litio y 4,5Wh de capacidad; la misma que las RX100.

En condiciones normales la cámara es bastante rápida y precisa al enfocar, pero como la mayoría de las cámaras que utilizan enfoque por contraste, el funcionamiento es más errático en condiciones de poca luz. En general no me ha parecido un gran problema, sobre todo teniendo un enfoque manual tan funcional gracias al focus peaking y la vista magnificada.

La calidad de imagen, que al fin y al cabo es lo que nos interesa, es excepcional. Muy buen rango dinámico, rendimiento a ISOs altas genial, un bokeh precioso, … Quitando las pocas pegas que os he comentado, es casi una cámara perfecta.

Author: "Zootropo" Tags: "General, analisis, camara, dublin, fotog..."
Comments Send by mail Print  Save  Delicious 
Date: Friday, 20 Jun 2014 15:57

Hace unas semanas el humorista John Oliver comentaba en un monólogo que Apple podría incluir el “Mein Kampf” de Hitler en sus términos de uso y nadie se daría cuenta.

No es de extrañar, ya que se calcula que necesitaríamos 76 días laborales para poder leer todas las licencias que aceptamos en 1 año.

Y tampoco sería tan insólito, porque más de uno ha vendido ya su alma literalmente a una empresa sin saberlo y, de hecho, la licencia de iTunes y Quicktime ya incluyen rarezas tales como la prohibición de su uso para la creación de misiles, armas nucleares o armas bacteriológicas.

Author: "Zootropo" Tags: "General, licencias, Software, terminos"
Comments Send by mail Print  Save  Delicious 
Hackers   New window
Date: Wednesday, 28 May 2014 08:30

La diferencia entre hacker y consumidor es que el consumidor dice “Desearía que funcionara de tal forma” y el hacker “Tengo un destornillador y unos pocos minutos”

~ Rael Dornfest

Author: "Zootropo" Tags: "General, citas, consumidores, hackers"
Comments Send by mail Print  Save  Delicious 
Date: Friday, 16 May 2014 17:37

Leyendo Menéame me entero de que la Comisión Federal de Comunicaciones de Estados Unidos ha dado el primer paso para acabar con la neutralidad en la red. Yo por mi parte, todavía recuerdo cuando un Barack Obama en plena campaña presidencial juraba defenderla si alguna vez llegaba a presidente.

Sí, soy un gran defensor de la neutralidad en la red. (…) Algunos lobis dicen que los servidores y los portales a través de los que obtienes la información de Internet deberían poder actuar como guardianes y cobrar tasas distintas según la página web… de forma que podrías obtener mucha mejor calidad en el sitio de Fox News y tendrías un servicio desastroso en páginas modestas (…) Y creo que esto destruye una de las mejores cosas acerca de Internet, que es la increíble igualidad que hay en ella.

Author: "Zootropo" Tags: "General, internet, leyes, neutralidad, p..."
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 06 May 2014 11:35

Además de ayudar a resolver dudas sobre programación, a veces Stackoverflow también sirve para echar unas risas. Pero sólo si tienes un sentido del humor un tanto especial, y te hacen gracia las discusiones prácticas sobre la eficiencia de los algoritmos para el emparejamiento de calcetines.

Algoritmos para emparejar calcetines

Y es que, como bien explica el usuario Amit Gross en su pregunta, usar una búsqueda simple, seleccionando un calcetín e iterando sobre la pila de calcetines restantes en busca de su pareja, es una operación muy costosa, que requeriría iterar sobre n/2 * n/4 = n2/8 calcetines de media.

La respuesta más votada sugiere utilizar un particionado recursivo basándose en un hash, como hace, por ejemplo, SQL Server cuando trabaja con grandes volúmenes de datos. Con este algoritmo clasificaríamos los calcetines en distintas pilas según su color, y distribuiríamos estos calcetines en pilas más pequeñas basándonos en otros criterios, como el dibujo, hasta tener pilas lo suficientemente pequeñas para poder procesarlas visualmente rápidamente.

Author: "Zootropo" Tags: "General, algoritmos, calcetines, stackov..."
Comments Send by mail Print  Save  Delicious 
Date: Monday, 05 May 2014 15:29

Todavía con resaca por el Día de Star Wars y las ponzoñosas bebidas de dudoso origen que sirven en la cantina de Mos Eisley, llega el momento de celebrar el no menos importante Revenge of the Fifth, o lo que a mí me gusta llamar el Día del Sith.

Star Wars The Phantom edit

Y qué mejor manera de hacerlo que redescubrir “The Phantom Edit” y “Attack of the Phantom”, los montajes no oficiales de “La Amenaza Fantasma” y “El Ataque de los Clones” que solucionan algunas de las principales quejas de los fans y que convierten estas dos cintas en películas (casi) dignas de aparecer en un pack junto a la trilogía original.

Author: "Zootropo" Tags: "General, conmemoraciones, festividades, ..."
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 01 May 2014 08:46

Un simpático ensayo de Peter Welch sobre todo lo malo que tiene la programación y cómo a pesar de todo, por alguna razón, nos gusta. A continuación os dejo algunas citas destacadas para animaros a leerlo.

La programación apesta

La mayoría de la gente ni si quiera sabe qué hace un administrador de sistemas, pero créeme, si todos se tomaran un descanso para comer al mismo tiempo, no habrían llegado al restaurante antes de que te quedaras sin balas protegiendo tus latas de comida de bandas de mutantes merodeadores.

En este preciso instante alguien que trabaja para Facebook está recibiendo decenas de miles de mensajes de error e intenta encontrar el problema de manera frenética antes de que toda la farsa se colapse. Hay un equipo en una oficina de Google que no duerme desde hace 3 días. En algún lugar hay una programadora de bases de datos rodeada de botellas vacías de Mountain Dew cuyo marido piensa que está muerta. Y si esta gente se parara, el mundo ardería.

Páginas web que no son más que carritos de la compra glorificados con tres páginas dinámicas son mantenidas por equipos de personas que trabajan contra reloj, porque la verdad es que todo está rompiéndose todo el tiempo, en todos sitios, para todo el mundo.

Estas son algunas de las reglas secretas de Internet: cinco minutos después de que hayas abierto un navegador por primera vez, un crío en Rusia ya tiene tu número de la seguridad social. ¿Te has inscrito en alguna web? Un ordenador de la NSA puede rastrear tu ubicación precisa para el resto de tu vida. ¿Has enviado un correo electrónico? Tu dirección de correo ya está impresa en una valla publicitaria en Nigeria.

¿Qué te parece la diatriba? ¿es así tu día a día? ¿alguna vez te has encontrado en una situación parecida?

Author: "Zootropo" Tags: "General, frustracion, programacion"
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 29 Apr 2014 11:17

En Agosto de 1994, hace ya 20 años, Pizza Hut se convertía en la primera empresa del mundo que contaba con una plataforma de comercio electrónico. Sólo unos minutos después, se convertía en la primera empresa de la historia en hacer una venta online (Mmmm… ¡pizza!).

Primera venta online de la historia

En Mayo de 1995, casi un año después, Bill Gates enviaba a sus directivos el famoso memorándum interno “Internet Tidal Wave” en el que reconocía que el éxito de Internet les había cogido por sorpresa y advertía de la necesidad de asignarle la mayor prioridad posible de ahí en adelante. Unos meses después, en Agosto de 1995, Microsoft publicaba la primera versión de Internet Explorer, basada en el código del Mosaic de Spyglass, y que se distribuía como parte del paquete Microsoft Plus!

Author: "Zootropo" Tags: "General, comercio, innovacion, internet,..."
Comments Send by mail Print  Save  Delicious 
Date: Friday, 25 Apr 2014 08:00

¿Qué mejor forma de conmemorar el 25 aniversario del lanzamiento de esta famosa consola portátil que haciendo un top de los que, para mí, fueron los 10 mejores juegos de Game Boy?

¿Estás de acuerdo con la lista? ¿cuáles son los juegos de Game Boy con los qué más disfrutaste en su día?

Pokémon azul / Pokémon rojo

Pokémon El juego que hizo de la Game Boy una compra obligada. Todo un fenómeno de masas que generó películas, series de televisión, y todo clase de merchandising. Para volver a la época en que la tu mayor preocupación era si debías escoger a Charmander, a Squirtle o a Bulbasaur.

¡Hazte con todos!

The Legend of Zelda: Link’s Awakening

Legend of Zelda: Link's Awakening Un juego un poco extraño, porque la acción no transcurre en Hyrule, no aparece la trifuerza, ni Ganon, ni Zelda; así y todo, este juego, que empezó siendo un port de “A Link to the Past”, sigue siendo uno de los mejores de la saga.

Tetris

Tetris Este juego tipo puzzle es, más que un videojuego, un pedacito de historia. ¿Quién no se ha desesperado alguna vez esperando a que llegara la dichosa pieza de 1×4? Tiene además el honor de ser el videojuego de Gameboy más vendido de todos los tiempos (más de 35 millones de unidades)

Super Mario Land 2

Super Mario Land 2 Si nunca has jugado a un Super Mario Land encontrarás nuevos enemigos, nuevas mecánicas y un nuevo espíritu. No en vano Shigeru Miyamoto no estuvo involucrado en su creación, sino que el productor fue el igualmente genial Gunpei Yokoi. Tiene el encanto adicional de suponer el debut de Wario.

Kirby’s Dream Land

Kirby's Dream Land El primer título de la serie; cuando aún no sabíamos qué color se suponía que tenía este globo con ojos y el personaje no podía absorber las habilidades de los enemigos. Un juego muy sencillo y corto pero muy alegre y simpático.

Donkey Kong

Donkey Kong Mucho más que un port del clásico de los arcades en el que un carpintero rechoncho de nombre Mario debe esquivar los barriles que lanza un enorme simio en su intento de rescatar a su novia. Nuevas mecánicas, nuevos niveles y nuevas cotas de diversión

Mega Man 5

Mega Man 5 El malvado Dr. Wily vuelve a intentar conquistar el mundo y, de paso, arrebatar al Doctor Robotnik el título de mejor científico loco del mundo de los videojuegos. Como siempre, ahí estará Mega Man para evitarlo.

Bionic Commando

Bionic Commando ¿Quién necesita gráficos 3D, sonido envolvente y otras frivolidades cuando se tiene un diseño de niveles y una jugabilidad tan apasionante como la de este port del arcade original?

Metroid II: Return of Samus

Metroid II: Return of Samus Aunque es un juego sobre el que los fans tienen una opinión dividida, principalmente por la ausencia de mapa, no se puede negar que es uno de los mejores títulos de la plataforma, y uno de los más importantes juegos de la saga a nivel de historia.

Dr. Mario

Dr. Mario Nintendo siempre tuvo muy buena mano con los juegos de puzzles, desde Yoshi’s Cookie a Mario’s Picross, pasando por este Dr. Mario, que hizo que alguno (es decir, yo) llegara a cuestionarse su lealtad absoluta hacia Tetris.

Author: "Zootropo" Tags: "General, game boy, Juegos, mejores, top,..."
Comments Send by mail Print  Save  Delicious 
Date: Monday, 21 Apr 2014 08:16

En ocasiones, programar puede llegar a ser muy frustrante. No es de extrañar que los comentarios de algunos proyectos de software estén llenos de quejas, lamentos, maldiciones, blasfemias y groserías varias. Este es un listado de los 20 más repetidos en Github.

  1. culo (31518)
  2. puta (30548)
  3. puto (24942)
  4. polla (17494)
  5. concha (14283)
  6. tonto (11305)
  7. mierda (8823)
  8. maldito (8538)
  9. pene (8783)
  10. idiota (8714)
  11. maldita (7425)
  12. pinche (4328)
  13. carajo (3811)
  14. joder (2987)
  15. cojones (2894)
  16. verga (2838)
  17. tonta (2604)
  18. hostia (1791)
  19. jodido (1758)
  20. cabrón (1548)
Author: "Zootropo" Tags: "General, frustracion, github, improperio..."
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 16 Apr 2014 15:53

Una de las definiciones más originales de lo que es un programador es la que da la uncyclopedia: un organismo pluricelular que convierte la cafeína en código fuente.

Protocolo cafetera

No sé si esta supuesta afición de los programadores por el café tiene algún fundamento real, pero está tan arraigada en el imaginario colectivo que incluso existe una parodia del protocolo HTTP orientado a cafeteras: el Hyper Text Coffee Pot Control Protocol (HTCPCP).

Este protocolo, que tiene hasta su propio RFC, nace de una broma por el Día de los Inocentes anglosajón, que algunos bromistas llevaron un poquito más allá. Existen, por ejemplo, implementaciones completas del protocolo, registros de bugs sugiriendo que Mozilla lo soporte en sus productos y algún que otro popular sitio de Internet que devuelve el código de error 418 (Soy una tetera) en determinadas circunstancias.

Author: "Zootropo" Tags: "General, cafe, cafetera, inocentes, prot..."
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 15 Apr 2014 09:57

Bill Gates cuando Steve Jobs acusó a Microsoft de haber robado a Apple tras el lanzamiento de Windows 1.0:

Bueno, Steve, creo que hay varias formas de verlo. Es como si ambos tuviéramos un vecino rico llamado Xerox y yo me colara en su casa para robarle el televisor, sólo para descubrir que ya lo habías robado tú.

Author: "Zootropo" Tags: "General, apple, citas, microsoft, window..."
Comments Send by mail Print  Save  Delicious 
Date: Tuesday, 01 Oct 2013 16:01

Marvel’s Agents of S.H.I.E.L.D. es sin duda una de las series más esperadas de la temporada. El miércoles los fanáticos de los cómics, los apasionados de las películas de super héroes y los seguidores de Joss Whedon se reunieron todos juntos delante de la pantalla: casi 12 millones de telespectadores, convirtiendo a Agents of S.H.I.E.L.D. en el mejor estreno de drama de la cadena desde 2009.

Agents of SHIELD

Muchos televidentes y muchas expectativas, la mayoría de las cuáles, en mi opinión, se han cumplido con creces. Tenemos el típico humor un poco tonto pero absurdamente divertido al que nos tiene acostumbrados Joss Whedon, multitud de referencias a las películas, al genial agente Coulson (Clark Gregg) y a la atractiva Maria Hill (Cobie Smulders). Combinada con una banda sonora compuesta por el ganador de un Emmy Bear McCreary (Battlestar Galactica, The Walking Dead), tenemos un cóctel tan explosivo como el Extremis.

Las continuas referencias, por cierto, es algo que he disfrutado sobremanera. Artefactos de tecnología Chitauri que desprenden radiación gama, mezclados con extremis, imbuidos con el suero del super soldado: una genial ida de olla. Y “With great power comes… a lot of weird stuff” simplemente, debería ser el lema oficial de la serie.

Equipo de Agents of SHIELD

Obviamente el piloto tiene sus defectos, pero en general son cosas sin demasiada importancia que se pueden ir limando. Los personajes parecen un poco planos y arquetípicos, por ejemplo, pero es algo de esperar en un piloto y siendo uno de los puntos fuertes de Whedon, no parece preocupante. Es seguro que Whedon también sabrá encontrar un buen equilibrio entre el procedimental (monstruo o misión de la semana) y un arco continuado, como ya hiciera con Buffy, Firefly (R.I.P) o Dollhouse.

Lo que no creo que vaya a cambiar, y tampoco creo que desentone con el tono general de la serie, son detalles como el coche volador de Coulson (otra referencia a los cómics). Habiéndome criado con películas como Regreso al Futuro, es algo que no solo no me resulta casposo o ñoño, si no que disfruto enormemente. Si este tipo de detalles te producen urticaria, simplemente, es probable que esta no sea tu serie.

En definitiva, Agents of S.H.I.E.L.D. es una serie con un gran potencial y tengo mucha curiosidad por ver hacia dónde la dirigen. Sólo espero que hagan algún cameo con algún super héroe menor de Marvel, del tipo de los que nunca podrían tener su propia película. Y alguno de Stan Lee. Y Nick Furia en un par de episodios. Eso sería fantástico.

Author: "Zootropo" Tags: "General, comics, marvel, reviews, series..."
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 26 Sep 2013 16:12

Desde hace un tiempo vengo utilizando una Sony NEX 5R como cámara principal, una cámara que siempre me llamó la atención desde que Sony la anunciara, y que ahora parece aún más interesante después de la rebaja de precio que ha sufrido al presentarse su sucesora, la NEX 5T, una revisión que añade pequeños detalles a una ya de por sí magnífica cámara.

Lo que más llama la atención de la NEX 5R es la excelente calidad de imagen junto a su reducido tamaño. Sus dimensiones son similares a una cámara compacta, aunque los objetivos, a excepción del pancake, son algo voluminosos si los comparamos con el cuerpo. Si no tienes interés en los objetivos intercambiables y sólo necesitas una cámara con la mejor calidad de imagen y el tamaño más pequeño posible, quizás te interese en su lugar la Sony RX100 o la RX100 II.

Český Krumlov

Su peso también es bastante más ligero que el de una réflex, siendo más parecido a una compacta algo pesada. Combinada con una correa Black Rapid, uno se puede olvidar totalmente de que está ahí hasta que la necesita.

El sensor, de tamaño APS-C, como la mayoría de las réflex no profesionales, obtuvo una notable puntuación de 77 en DxOMark. La calidad de imagen es sobresaliente para su rango de precios, con muy buena definición, muy buen rango dinámico y muy poco ruido a sensibilidades ISO altas. Las fotografías son perfectamente usables hasta ISO 6400, sobre todo en RAW, con un poco de magia de Lightroom, y siempre dependiendo, claro está, del celo del consumidor.

Cisnes

El autofoco es bastante efectivo gracias a una de las novedades respecto de su predecesora, un sistema de enfoque híbrido combinando el enfoque por contraste con algunos píxeles del sensor de imagen dedicados a la detección de fase, el sistema utilizado por las réflex tradicionales. Así y todo, como la cámara no puede adivinar nuestras intenciones, a los usuarios que vengan de compactas y no estén acostumbrados a profundidades de campo bajas, les recomendaría habilitar la opción de enfocar y disparar pulsando sobre la pantalla táctil; de esta forma no nos encontraremos con que la cámara ha decidido enfocar el fondo en lugar del motivo principal de la fotografía.

En lo que al enfoque manual se refiere, la cámara tiene un modo de ayuda en pantalla muy útil, con una visualización ampliada del motivo y bordes que parpadean cuando la cámara detecta que están enfocados (focus peaking). También tenemos por último el enfoque manual directo, con el que la cámara enfocará automáticamente y podremos hacer pequeños ajustes manuales después para mejorar aún más la precisión.

Puente de Carlos

El diseño de la cámara está muy cuidado. Cuenta con unas líneas agradables, materiales que parecen de calidad y una buena ergonomía, aunque a veces se puede echar en falta algún botón extra si estamos acostumbrados a utilizar réflex más o menos avanzadas. Uno de sus peros, aunque no se le puede echar mucho en cara dado su precio, es que no tiene EVF integrado, aunque se puede comprar por separado y montarlo en la misma zapata que el flash, que también es externo pero sí está incluido en el pack.

Tiene una pantalla abatible hasta 180º, que puede llamar mucho la atención a los amantes de los auto retratos y que también es muy útil para composiciones en ángulos complicados. Por defecto, cuando la pantalla se gira 180º, la cámara toma una fotografía automáticamente a los 3 segundos. La cámara también tiene los típicos automatismos a los que nos han acostumbrado las compactas y los móviles últimamente, como captura automática al detectar una sonrisa, prioridad de enfoque y brillo a las caras conocidas, efecto de piel suave que reduce las arrugas y mejora el contraste entre los ojos y la boca, etc.

Mariánské Lázně

En lo que a modos se refiere, además de los habituales auto, programa, prioridad a la apertura, prioridad al tiempo de exposición y manual tenemos una opción para realizar barridos panorámicos y un modo automático superior, que, por ejemplo, utiliza HDR automáticamente cuando lo considera necesario y elige la mejor imagen. Entre los modos de escena, además de los sospechosos habituales, el más interesante es el de anti movimiento, que toma 6 fotografías y las combina para reducir al máximo el desenfoque y el ruido.

Además los principiantes también agradecerán las opciones de “Creatividad fotográfica”, a las que se puede acceder desde los modos de Auto inteligente y Auto superior. Estas permiten ajustar fácilmente el nivel de desenfoque de fondo, el brillo, la temperatura de color y el contraste que queremos, así como aplicar varios efectos, como cámara de juguete, color pop, posterización, retro o miniatura (tilt-shift)

Si lo que te va es grabar vídeos, la calidad es igual de impresionante, aunque se encuentra algo por debajo de la celebrada Panasonic Lumix GH2. Se puede grabar vídeos en AVCHD (50i 24M, 50i 17M, 50p 28M, 25p 24M, 25p 17M) o MP4 (1440×1080 o VGA) hasta 29 minutos, y hasta 2 GB si se usa el formato MP4, aunque en condiciones de altas temperaturas es posible que haya que dejarla descansar antes para evitar que el sensor se caliente demasiado.

En definitiva, una cámara que te permitirá tomar excelentes instantáneas sin tener que cargar con el peso de una réflex.

Nuestra Señora de Tyn Cabaña en el lago Fuente cantante

Cementerio judío Postres Candados

Author: "Zootropo" Tags: "General, analisis, fotografía, nex, rev..."
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 28 Aug 2013 15:06

Da igual que te acabes de comprar un móvil, que ya tengas dos Nexus 4, o que vivas en algún lugar recóndito sin cobertura. ¿Cómo no vas a comprarte un Nexus 4 ahora que Google ha rebajado 100€ más su ya de por si escandaloso precio?

¿199€ por uno de los mejores teléfonos del mercado? ¿por un procesador quad-core y 2GB de RAM? ¿por un Android actualizado siempre a la última versión y sin capas extra que lo ralenticen? Parece mejor negocio que la famosa compra de Manhattan por unos cuantos abalorios.

Author: "Zootropo" Tags: "General, android, chollos, google, movil..."
Comments Send by mail Print  Save  Delicious 
Date: Wednesday, 26 Jun 2013 17:51

En su artículo What Languages Fix, Paul Graham, autor de Hackers & Painters y fundador de Y Combinator examinaba hace unos años algunos de los lenguajes de programación más conocidos desde una óptica interesante: los problemas que sus creadores intentaban solucionar al crearlos.

Hoy me he vuelto a encontrar con este texto y he dedicado unos minutos a traducirlo y a crear una representación gráfica en forma de línea de tiempo que podéis ver a continuación.

  • Algol: Ensamblador trabaja a muy bajo nivel
  • Pascal: Argol no tiene suficientes tipos de datos
  • Modula: Pascal es limitado para programación de sistemas
  • Simula: Algol no es lo bastante bueno para simulaciones
  • Smalltalk: No todo en Simula es un objeto
  • Fortran: Ensamblador trabaja a muy bajo nivel
  • Cobol: Fortran da miedo
  • PL/1: Fortran no tiene suficientes tipos de datos
  • Ada: A todos los lenguajes que existen les falta algo
  • Basic: Fortran da miedo
  • APL: Fortran no es lo bastante bueno manipulando arrays
  • J: APL requiere su propio juego de caracteres
  • C: Ensamblador trabaja a muy bajo nivel
  • C++: C trabaja a muy bajo nivel
  • Java: C++ es una chapuza. Y Microsoft nos va a aplastar
  • C#: Sun controla Java
  • Lisp: Las máquinas de Turing son una forma extraña de describir computación
  • Scheme: MacLisp es una chapuza
  • T: Scheme no tiene librerías
  • Common Lisp: Hay demasiados dialectos de Lisp
  • Dylan: Scheme no tiene librerías, y la sintaxis de Lisp da miedo
  • Perl: Los shell scripts/awk/sed no parecen lenguajes de programación
  • Python: Perl es una chapuza
  • Ruby: Perl es una chapuza, y la sintaxis de Lisp da miedo
  • Prolog: La programación no se parece lo suficiente a la lógica
Author: "Zootropo" Tags: "General, lenguajes, programacio"
Comments Send by mail Print  Save  Delicious 
Date: Friday, 03 May 2013 18:16

Aunque en España sigue costando 300€, en Amazon UK ya podemos encontrar el modelo de 8GB de Wii U por sólo 149£. 177€ al cambio. Un 40% más barato que en España.

Oferta de Wii U

¿177€ por una consola que acaba de salir? Con un precio así puedo hacerme ya con mi primera consola de octava generación, y comprar una PS4 o una XBOX 720 en el futuro.

Juegos de Wii U

Además, para hacer la oferta aún más tentadora, los creadores de Wiikey anunciaron hace unos días que ya tienen casi lista la primera solución para cargar copias de seguridad en Wii U. ¡Desde disco externo USB y sin soldaduras!

Author: "Zootropo" Tags: "General, amazon, consolas, nintendo, ofe..."
Comments Send by mail Print  Save  Delicious 
Date: Thursday, 02 May 2013 15:06

Si llevas un tiempo programando en Java recordarás esas decenas de líneas de código de inicialización y aquellos enormes XML de configuración con los que teníamos que lidiar en frameworks como Spring, JPA o JSF antes de que se popularizaran las anotaciones. En Android esa tendencia todavía no ha impuesto, pero os alegrará saber que sí existen librerías externas con las que reducir enormemente el código auxiliar y centrarnos en lo que realmente importa.

La opción más interesante es AndroidAnnotations, ya que es muy completa, no impone penalización alguna en el rendimiento y no nos obliga a que nuestras actividades extiendan de una cierta clase, lo que al carecer Java de herencia múltiple complicaría ligeramente el uso de librerías como ActionBarSherlock. ¿Suena bien? Entonces genera un proyecto con AndroidAnnotations en AndroidKickstarR y sigue leyendo; te aseguro que no te vas a arrepentir.

Asociar un layout a una actividad o fragmento

Sin AndroidAnnotations:

public class Actividad extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad);
    }
}

Con AndroidAnnotations podemos usar la anotación @EActivity (de enhanced activity o actividad mejorada) y pasarle el identificador del layout:

@EActivity(R.layout.actividad)
public class MyActivity extends Activity {}

De forma parecida a las actividades, con la anotación @EFragment podemos obviar el método onCreateView del fragmento. Sin AndroidAnnotations:

public class Fragmento extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragmento, container, false);
        return view;
    }
}

Con AndroidAnnotations:

@EFragment(R.layout.fragmento)
public class Fragmento extends Fragment {
}

Inyección de vistas

Sin AndroidAnnotations:

public class Actividad extends Activity {
	Button btnGuardar;
	EditText txtNombre;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad);
		
		btnGuardar = (Button) findViewById(R.id.btnGuardar);
		txtNombre = (EditText) findViewById(R.id.txtNombre);
    }
}

Con AndroidAnnotations usaríamos la anotación @ViewById pasando como parámetro el identificador de la vista

@EActivity(R.layout.actividad)
public class Actividad extends Activity {
	@ViewById(R.id.btnGuardar)
	Button btnGuardar;
	
	@ViewById(R.id.txtNombre)
	EditText txtNombre;
}

Si el nombre de la variable es igual al identificador de la vista el parámetro se puede obviar:

@EActivity(R.layout.actividad)
public class Actividad extends Activity {
	@ViewById Button btnGuardar;
	@ViewById EditText txtNombre;
}

También podemos inyectar fragmentos con @FragmentById

@EActivity(R.layout.actividad)
public class Actividad extends Activity {
	@ViewById Button btnGuardar;
	@ViewById EditText txtNombre;
	@FragmentById Fragmento fragmento;
}

Manipular las vistas

Si usamos @ViewById para inyectar la vistas, por la manera que tiene de funcionar AndroidAnnotations, no tendremos todavía las instancias asociadas en onCreate, por lo que si tenemos que hacer algo con las vistas tendremos que anotar uno o varios métodos con @AfterViews. Esto, que a alguno le puede parecer un incordio, a mí personalmente me gusta, porque prefiero extraer el resto del código a otros métodos siguiendo el Principio de Responsabilidad Única.

De esta forma un código como

public class Actividad extends Activity {
	TextView txtVersion;
	TextView txtFecha;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad);
		
		txtVersion = (TextView) findViewById(R.id.txtVersion);
		txtFecha = (TextView) findViewById(R.id.txtFecha);
		
		establecerVersion();
		establecerFecha();
    }
	
	void establecerVersion() {
		try {
			PackageInfo infoPaquete = getPackageManager().getPackageInfo(getPackageName(), 0);
			txtVersion.setText(infoPaquete.versionName);
		} catch(NameNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	void establecerFecha() {
		DateFormat formato = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
		Date fecha = new Date();
		String strFecha = formato.format(fecha);
		txtFecha.setText(strFecha);
	}
}

se convertiría en lo siguiente

@EActivity(R.layout.actividad)
public class Actividad extends Activity {
	@ViewById TextView txtVersion;
	@ViewById TextView txtFecha;
	
	@AfterViews
	void establecerVersion() {
		try {
			PackageInfo infoPaquete = getPackageManager().getPackageInfo(getPackageName(), 0);
			txtVersion.setText(infoPaquete.versionName);
		} catch(NameNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	@AfterViews
	void establecerFecha() {
		DateFormat formato = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
		Date fecha = new Date();
		String strFecha = formato.format(fecha);
		txtFecha.setText(strFecha);
	}
}

Eventos

Android cuenta con un atributo XML android:onClick con el que es muy rápido y sencillo asociar un listener a un evento clic. El equivalente en AndroidAnnotations es la anotación @Click, a la que se le pasa el identificador de la vista a la que se asocia el listener (se puede obviar en caso de que el nombre del método coincida con el identificador de la vista o que sea igual pero con el sufijo Clicked).

@EActivity(R.layout.actividad)
public class Actividad extends Activity {
	@Click(R.id.button1)
	void mostrarVersion() {
		// ...
	}

	@Click
	void mostrarFecha() {
		// ...
	}

	@Click
	void guardarClicked() {
		// ...
	}
}

En este caso la ventaja de las anotaciones no es tan obvia; quizás el poder ver la asociación entre la vista y el método en un golpe de vista. Tiene mayor interés el que podamos asociar listeners para unos pocos eventos más de forma igual de sencilla, con @LongClick para pulsaciones largas o @TextChange para cambios de texto.

Menús

Con la anotación @OptionsMenu podemos inflar el XML de menú, ahorrándonos sobreescribir onCreateOptionsMenu. Con @OptionsItem asociamos las distintas opciones de menú con distintos listeners, pasando el id de la opción a la anotación (también se puede obviar el id si coincide con el nombre del método, o si es igual pero con el sufijo Selected).

Versión sin anotaciones:

public class Actividad extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.actividad);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.actividad, menu);
		return true;
	}

	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
			case R.id.actualizar:
				actualizar();
				return true;
			case R.id.acercaDe:
				acercaDeSelected();
				return true;
			default:
			  return false;
		}
	}

	
	void actualizar() {
		// ...
	}	

	
	void acercaDeSelected() {
		// ...
	}	
}

Versión con anotaciones:

@EActivity(R.layout.actividad)
@OptionsMenu(R.menu.actividad)
public class Actividad extends Activity {
	@OptionsItem(R.id.actualizar)
	void actualizar() {
		// ...
	}	

	@OptionsItem
	void acercaDeSelected() {
		// ...
	}	
}

Inyección de recursos

Para cada tipo de recurso existe una anotación que permite inyectar dicho recurso en nuestra clase pasándole simplemente el identificador (o sin pasarle nada si el nombre del recurso coincide con el de la variable): AnimationRes, BooleanRes, ColorRes, ColorStateListRes, DimensionPixelOffsetRes, DimensionPixelSizeRes, DimensionRes, DrawableRes, HtmlRes, IntArrayRes, IntegerRes, LayoutRes, MovieRes, StringArrayRes, StringRes, TextArrayRes, TextRes.

De esta forma en lugar de:

String nombreApp = getResources().getString(R.string.nombreApp);

simplemente podríamos escribir:

@StringRes String nombreApp;

Además, en el caso concreto de que queramos obtener una cadena HTML de un archivo de recurso y establecerla como texto en un TextView, podemos llevar a cabo ambos pasos con una simple anotación @FromHtml.

Hilos de ejecución

¿Harto de usar AsyncTask o similares para ejecutar un cierto código en un hilo distinto del principal o de interfaz de usuario?

void ejecutarTareaSegundoPlano(URL urls) {
	new AsyncTask<URL, Integer, Long> {
		protected Long doInBackground(URL... urls) {
			int numUrls = urls.length;
			Long tamanyoDescarga = 0;
			for (int i = 0; i < numUrls; i++) {
				tamanyoDescarga += ClienteHttp.descargar(urls[i]);
				publishProgress((int) ((i / (float) numUrls) * 100));
			}
			return totalSize;
		}

		protected void onProgressUpdate(Integer... progreso) {
			actualizarProgreso(progreso[0]);
		}

		protected void onPostExecute(Long tamanyoDescarga) {
			mostrarDialogo("Descargados " + tamanyoDescarga[0] + " bytes");
		}
	}.execute();
}

¿Qué tal si pudieras usar la anotación @Background para indicar que un método debe ejecutarse en un hilo en segundo plano y @UiThread para que se ejecute en el hilo de interfaz de usuario? De esta forma el ejemplo anterior se reduciría a:

@Background
void descargarArchivos(URL urls) {
	int numUrls = urls.length;
	Long tamanyoDescarga = 0;
	for (int i = 0; i < numUrls; i++) {
		tamanyoDescarga += ClienteHttp.descargar(urls[i]);
		actualizarEstadoDescarga((int) ((i / (float) numUrls) * 100));
	}
	mostrarDialogoFinDescarga(tamanyoDescarga);
}

@UiThread
void actualizarEstadoDescarga(int progreso) {
	actualizarProgreso(progreso);
}

@UiThread
void mostrarDialogoFinDescarga(Long tamanyoDescarga) {
	mostrarDialogo("Descargados " + tamanyoDescarga + " bytes");
}

Guardar y recuperar el estado

Esta es otra de esas tareas repetitivas que suponen gran cantidad de código. Comparemos una implementación típica con su correspondiente versión con anotaciones.

public class Actividad extends Activity {
    Jugador jugador;
    int puntuacion;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        if(savedInstanceState != null) { 
            jugador = (Jugador)savedInstanceState.getSerializable("jugador");
			puntuacion = savedInstanceState.getInt("puntuacion");
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("jugador", jugador);
        outState.putInt("puntuacion", puntuacion);
    }
}
@EActivity(R.layout.actividad)
public class Actividad extends Activity {
    @InstanceState
    Jugador jugador;

    @InstanceState
    int puntuacion;
}

Otras funcionalidades de interés

  • @Trace nos permite trazar la ejecución de un método escribiendo una entrada en el log cuando se entra y se sale del método.
  • @HierarchyViewerSupport permite utilizar la herramienta Hierarchy Viewer aunque no dispongamos de un teléfono con permisos de root o de desarrollo
  • @RoboGuice nos permite integrar AndroidAnnotation con el framework de inyección de dependencias del mismo nombre (basado en Guice, de Google)
  • @OrmLiteDao nos permite integrar AndroidAnnotation con el framework de mapeo objeto-relacional OrmLite
  • @EView y @EViewGroup facilitan la creación de vistas personalizadas
  • @SystemService nos permite inyectar un servicio del sistema


Author: "Zootropo" Tags: "General, android, anotaciones, desarroll..."
Comments Send by mail Print  Save  Delicious 
Date: Sunday, 28 Apr 2013 15:35

Decía Larry Wall, el creador de Perl, que las tres virtudes principales de un programador son la pereza, la impaciencia y el orgullo desmedido. Pereza e impaciencia suficientes para querer invertir una gran cantidad de tiempo y esfuerzo en minimizar tareas repetitivas. Y de eso es de lo que vamos a hablar hoy.

Considera este fragmento de código, que podríamos encontrar varias veces repetido en una página JSF y que genera una caja de texto HTML con una etiqueta asociada y con un span en el que mostrar errores de validación para ese campo:

<h:outputLabel value="Nombre:" for="nombre"/>
<h:inputText id="nombre" label="Nombre" required="true" value="#{controlador.entidad.nombre}"/>
<h:message for="nombre"/>

NetBeans, y casi todo IDE que se precie, tiene una característica de plantillas de código con la que insertar automáticamente el código de la plantilla escribiendo una abreviatura que le hayamos asignado y pulsando Tab.

Pero casi todos los IDE van un paso más allá y permiten parametrizar estas plantillas de código, de forma que podamos sustituir estos parámetros por sus respectivos valores antes de la inserción final.

En NetBeans podemos consultar las plantillas de código predefinidas y añadir otras nuevas en Tools -> Options -> Editor -> Code Templates. La plantilla correspondiente al fragmento anterior tendría este aspecto, con los parámetros a sustituir siguiendo la sintaxis ${nombre del parámetro}:

<h:outputLabel value="${nombre}:" for="${id}"/>
<h:inputText id="${id}" label="${nombre}" required="true" value="#{controlador.entidad.${id}}"/>
<h:message for="${id}"/>

Al escribir el atajo que hayamos asociado al fragmento de código, NetBeans insertará el fragmento en esa línea y moverá el cursor al primer parámetro. Sólo tendremos que escribir el valor que queramos darle y pulsar Enter para que se cambie el valor en ese parámetro y todos los del mismo nombre. NetBeans situará el cursor en el siguiente parámetro para que podamos darle un valor, y así sucesivamente.




Author: "Zootropo" Tags: "General, codigo, desarrollo, netbeans, p..."
Comments Send by mail Print  Save  Delicious 
Date: Saturday, 27 Apr 2013 10:49

Cuando publiqué la entrada de las que, para mí, eran las 10 mejores canciones de videojuegos de la historia, me quedé con mal sabor de boca por haber dejado fuera a tantísimos de mis favoritos. Para remediarlo he montado una pequeña lista en mi adorado Spotify; tarea que, por cierto, es harto complicada al no ser tan habitual que se publicaran las bandas sonoras de los juegos antiguos.

Echadle una oída ;)

Author: "Zootropo" Tags: "General, canciones, listas, música, spo..."
Comments Send by mail Print  Save  Delicious 
Next page
» You can also retrieve older items : Read
» © All content and copyrights belong to their respective authors.«
» © FeedShow - Online RSS Feeds Reader