Rotar una BufferedImage en Java

Jueves, Diciembre 11th, 2008 | fragmentos útiles, java | Sin comentarios

Me he llevado cierto tiempo encontrar una función para conseguir rotar 90 grados una imagen de tipo BufferedImage en Java, así que una vez he hallado cómo hacerlo qué menos que compartirlo por si os es útil:

	 public BufferedImage rotate90DX(BufferedImage bi)
	    	{
	    		int width = bi.getWidth();
	    		int height = bi.getHeight();
 
	    		BufferedImage biFlip = new BufferedImage(height, width, bi.getType());
 
	    		for(int i=0; i<width; i++)
	    			for(int j=0; j<height; j++)
	    				biFlip.setRGB(height-1-j, width-1-i, bi.getRGB(i, j));
 
	   		return biFlip;
	  }

Y en el sentido inverso sería así…

	    	public BufferedImage rotate90SX(BufferedImage bi)
	    	{
	    		int width = bi.getWidth();
	    		int height = bi.getHeight();
 
	    		BufferedImage biFlip = new BufferedImage(height, width, bi.getType());
 
	    		for(int i=0; i<width; i++)
	    			for(int j=0; j<height; j++)
	    				biFlip.setRGB(j, i, bi.getRGB(i, j));
 
	    		return biFlip;
	    	}

Vía | Snippet en Dzone.

Guía rápida de introducción a jQuery

Viernes, Octubre 31st, 2008 | breves, jquery, tutoriales | Sin comentarios

jQuery es una librería muy útil para desarrollos web, y sobre todo para evitar reinventar la rueda al usar javascript, ya que nos ahorra muchos problemas de compatibilidad entre navegadores, carencias o limitaciones del lenguaje, etc.

A pesar de su gran documentación online o los libros sobre la librería publicados, puede que su sintaxis resulte un tanto extraña para un novato, además de no saber muy bien cuáles son las posibilidades reales de jQuery. Para ello, es muy útil este artículo de DotNetStacklers (es la primera parte, espero que pronto publiquen la segunda). Y por cierto, los desarrolladores en .NET pueden aprovechar para darle una oportunidad a jQuery ahora que se integrará con el Intellisense en Visual Studio

Tags: ,

Opera para iPhone: Competencia imposible en la AppStore de Apple

Viernes, Octubre 31st, 2008 | actualidad, navegadores | 1 Comentario

Una de las mayores críticas que está recibiendo últimamente Apple es la de sus políticas cerradas que controla la experiencia de usuario hasta tal punto que interfieren con la libertad del mismo. Esta política de control total se traspasó también a la AppStore, la tienda de aplicaciones para iPhone / iPod Touch, de manera que los desarrolladores ven su trabajo condicionado a la aprobación de su trabajo por parte de Apple.

Este control no significaría un problema si se realizase de una forma razonada, buscando siempre la mayor satisfacción y mejor experiencia de usuario… pero no es así. Apple aprovecha que el único canal oficial de distribución de aplicaciones para la plataforma iPhone es su AppStore, creando una situación de auténtico monopolio, al no permitir la difusión de aplicaciones que puedan hacer competencia a sus desarrollos o que vayan en contra de sus intereses comerciales: el antecedente fue el caso NetShare, cuando censuraron la aplicación por ir en contra de los deseos de sus aliadas comerciales, las compañías telefónicas. Luego comenzaron con la retirada de aplicaciones que puedan competir con las propias: sucedió primero con Apple retirando del mercado una aplicación que mejoraba iTunes, al permitir sincronizar podcast mediante WiFi; y ha vuelto a pasar ahora, cuando se ha impedido la distribución de la versión de Opera para el iPhone.

Debido a la política oscurantista de Apple, no se puede saber a ciencia cierta si rechazan la aplicación por violar una política de su tienda (se supone que ninguna aplicación puede usar un motor de Javascript propio… ¿ya se blindaban contra posible competencia a Safari?), o si simplemente no permiten la difusión de Opera para evitar competencia.

En cualquier caso, si esto lo hiciese una compañía con menos factor cool, lloverían piedras sobre las cabezas de quienes toman las decisiones (igual que intentaron justificar el kill switch de Apple cuando se descubrió el kill switch de Google en Android, sin ser el mismo caso: Apple sólo permite una vía de distribución: la suya), pero a Apple se le permiten giros demasiado monopolísticos. Como se viene viendo últimamente, Apple es el nuevo Microsoft.

Vía | MacRumours.

Tags: , , ,

Visual Studio 2005: Mostrar números de línea para todos los archivos

Miércoles, Octubre 29th, 2008 | IDEs | Sin comentarios


En el IDE Visual Studio 2005 de Microsoft tienen la molesta costumbre de no activar la visualización de los números de línea por defecto para todos los archivos, lo cual resulta bastante útil a la hora de programar y depurar. Para habilitarlo sólo hay que ir a Menú Herramientas -> Opciones -> Editor de Texto -> Todos los lenguajes -> Habiltar checkbox “Números de línea”. ¡Listo!

Tags: ,

Typeface.js: generando texto con Javascript, canvas y VML

Lunes, Octubre 27th, 2008 | diseño, javascript, librerías | Sin comentarios

Un problema habitual en el diseño web es conseguir que las fuentes se dibujen de la misma manera en cada navegador, ya que, a pesar de que CSS es un estándar, la implementación de CSS que hace cada navegador dista bastante de ser uniforme (¿alguien ha dicho Internet Explorer?).

La solución tradicional a este problema solía ser la de crear los textos necesario mediante imágenes. La ventaja de esto es que el aspecto en cada navegador sería exactamente el esperado, y no hay límites en cuanto a los efectos o fuentes que se quieran usar… Pero es muy poco flexible, ya que para cada texto hay que crear la imagen correspondiente.

La siguiente solución es la creación las imágenes mediante flash. Esta solución es bastante versátil, pero tiene el problema de la accesibilidad del texto de cara a su indexación por los motores de búsqueda (aunque mitigada con las últimas actualizaciones de Google, esto sigue siendo un problema de cara a la optimización del contenido para los buscadores).

Aquí es donde entra typeface.js: nos permite de una manera sencilla (ver el código a continuación), multiplataforma (no importa el navegador) y flexible (permite aplicar diversos efectos que los navegadores no implementan de una manera uniforme) dar estilo a los textos de la página. Con algo como esto ya se dibujarían los textos…

<script type="text/javascript" src="typeface-0.10.js"></script>
<script type="text/javascript" src="helvetiker_regular.typeface.js"></script>
 
<div class="myclass typeface-js" style="font-family: Helvetiker">
	Text here in Helvetiker font...
</div>

Y uno de los resultados de uso podría ser el siguiente, sacado de su web…

Aunque evidentemente, esto no es tan maravilloso. El renderizado aún no es del todo eficiente, y aunque funciona bien para títulos y apartados concretos, dibujar toda la web mediante typeface.js es muy costoso. En cualquier caso, si os interesa no dudeis en echar un ojo a los ejemplos y a la explicación de su uso

Más información | Typeface.js
Vía | Delicious Popular.

Peppy: un motor de selectores JS ultrarrápido para tus proyectos web

Miércoles, Octubre 22nd, 2008 | javascript | Sin comentarios

El programador James Donaghue ha lanzado recientemente un motor de selectores javascript bastante interesante, sobre todo por lo rápido que resulta. En la página de pruebas que ha montado para comparar su velocidad con otros motores queda el primero, superando a jQuery, Mootols, Prototype…

Además, es multinavegador y compatible con CSS3. Sin duda, una opción interesante para incorporar un motor de selectores a los proyectos web propios en los que no se quiera incluir una librería más pesada, ya que su tamaño (10Kb) lo hace ideal para ello.

Eso sí, el motor está aún en la versión 0.1 así que es probable que vaya saliendo que otro bug…

Más información | Noticia del lanzamiento
Vía | Ajaxian.

Tags: ,

Usa Javascript para resolver 12 problemas comunes del diseño web

Jueves, Octubre 16th, 2008 | fragmentos útiles, jquery | 1 Comentario

En Noupe han hecho una útil lista de doce problemas típicos que se suelen dar en el diseño web, cada uno con su correspondiente solución usando Javascript. Las soluciones dadas se basan en plugins de jQuery, por la potencia y sencillez que ofrece este framework, pero podrían portarse a otros frameworks o desarrollarlos con javascript puro y duro (otra cosa sería aspectos como portabilidad, rendimiento, etc.).

Los problemas que han recopilado son los siguientes:

  1. Establecer alturas iguales.
  2. Solución al problema de IE6 con los PNG transparentes.
  3. Cambiar clases CSS con Javascript
  4. Selectores basados en el navegador en CSS (tan simple como: $('html').addClass($.browser);)
  5. Dar soporte a alturas y anchos mínimos/máximos
  6. Centrar elementos (vertical y horizontalmente)
  7. Mostrar etiquetas Q en Internet Explorer
  8. Aumentar el tamaño de los elementos clickeables (en los enlaces)
  9. Carga perezosa
  10. bgiframe: alivia el problema de trabajar con los z-index en Internet Explorer.
  11. ieFixButtons: arregla el comportamiento lleno de bugs de los botones en Internet Explorer (6 y 7)
  12. Arreglar el “overflow”

Sin duda, un post que conviene tener a mano.

Ultra-encadenamiento con jQuery

Miércoles, Octubre 15th, 2008 | hacks, jquery | Sin comentarios

Una de las posibilidades más interesantes que ofrece jQuery es la de encadenar funciones, que permite aplicar al mismo objeto una serie de métodos en una sóla instrucción (que al final equivale a una sola línea). Uno de los puntos donde esto se cumple en menor medida es, dentro de funciones, al tener que usar el objeto this para hacer referencia al objeto desde el que se inició el evento que realizó la llamada a la función. Con este código se ve más claro:

?Ver código JAVASCRIPT
jQuery("div").hide("slow", function(){
  jQuery(this)
    .addClass("done")
    .find("span")
      .addClass("done")
    .end()
    .show("slow", function(){
      jQuery(this).removeClass("done");
    });
});

Tras unas modificaciones realizadas a modo de prueba por el equipo de desarrollo de jQuery, el código anterior se transformaría en el siguiente, sin ser necesario hacer mención explícita al objeto this:

?Ver código JAVASCRIPT
jQuery("div").chain("hide", "slow")
  .addClass("done")
  .find("span")
    .addClass("done")
  .end()
  .chain("show", "slow")
    .removeClass("done")
  .end()
.end();

A Jonh Resig no le acaba de gustar, porque pasa como argumento una cadena a la segunda función, porque no le convence el nombre del método (“chain”) y por último, porque si modifican jQuery para que acepte este “ultraencadenamiento”, se pierde la posibilidad de invocar a funciones nativas de Javascript, como en este ejemplo:

?Ver código JAVASCRIPT
jQuery(this).html( jQuery(this).attr("href") )

Así que, de momento, la modificación se está debatiendo. A mi sí me gusta, porque puedes seguir accediendo a las funciones de Javascript mediante funciones de jQuery, y entiendo que ahorraría más líneas de código de las que costaría usarlo, pero en cualquier caso coincido con John Resig en que es un hack bastante interesante…

Vía | Blog de Jonh Resig.

Novedades sobre Firefox 3.1

Martes, Octubre 14th, 2008 | navegadores, novedades | Sin comentarios

Hay varias novedades sobre la nueva versión del navegador de la fundación Mozilla, la 3.1. Por un lado, a través de Maestros del Web, sabemos que la beta podría estar lista para descargar tan pronto como la semana que viene, y por otro nos enteramos de algunas novedades que incluirá:

  • Lifehacker nos cuenta que incluirá una gestión de sesiones más inteligente que la que hay hasta ahora: en vez de mostrar un diálogo modal permitiendo resturar la sesión, cargará una pestaña especial (about:sessionrestore) en la que se podrá escoger qué pestañas restaurar. Con ello se evita el problema de perder sesiones enteras porque una de las pestañas esté acabando con el navegador…
  • Por otro lado, a partir de la v3.1 Firefox incluirá por defecto Geode (ahora disponible como plugin), su sistema de geolocalización que ofrece a las páginas web saber desde dónde las visitamos (siempre que las autoricemos a ello).
  • Por último, Jonh Resig informa de que Firefox incluirá eventos para saber cuándo el navegador ha renderizado (“dibujado”) la página o una parte de ella.

Como vemos, Firefox intenta no quedarse atrás en la guerra de navegadores, sin dejar que Chrome gane terreno sin plantar cara. Ante esto, quienes ganamos somos los usuarios, así que…  ¡a luchar!

Tags: ,

Opera 9.60 listo para la descarga

Jueves, Octubre 9th, 2008 | aplicaciones, miniposts | Sin comentarios

Opera LogoHoy se ha puesto disponible para descarga la nueva versión del navegador Opera. No trae ninguna novedad revolucionaria, aparte de las típicas mejoras en la estabilidad y rendimiento de la aplicación y un “Marcador de la barra de desplazamiento” que, por la descripción puede que sí resulte interesante para páginas con mucha altura.

The new Opera Scroll Marker makes it easier to continue reading when you scroll through a Web page. At the end of the page it will indicate the previous position of the bottom of the screen so you can easily see where to continue reading.

Básicamente, lo que hace (según la descripción, a falta de probarlo) es recordar la última posición del scrollbar y marcarla, para que sea más fácil volver a la posición anterior.

Descarga | Opera 9.60.
Vía | Anieto2k.

Tags: , ,

Pages: Prev 1 2 3 Next