Archive for the ‘Trucos’ Category

Eclipse: Acceder a recursos de un plugin

Wednesday, July 28th, 2010

A menudo resulta útil guardar ficheros (por ejemplo, de configuración) en el bundle y leerlos durante la ejecución de ciertas tareas de nuestro plugin. Para ello podemos utilizar el siguiente código (reemplazando el nombre del bundle, claro):

Bundle bundle = Platform.getBundle("com.ilikeblues.example.readfile");
URL fileURL = bundle.getEntry("files/test.txt");
File file = null;
try {
	file = new File(FileLocator.resolve(fileURL).toURI());
} catch (URISyntaxException e1) {
	e1.printStackTrace();
} catch (IOException e1) {
	e1.printStackTrace();
}

Otra opción es utilizar la URL directamente:

(more…)


CSS: resetear los estilos de navegador por defecto

Wednesday, July 7th, 2010

La siguiente hoja CSS permite resetear los estilos por defecto del navegador que estés usando. Con esto podemos evitar las inconsistencias en la presentación del sitio web en distintos navegadores.

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}

/* remember to define focus styles! */
:focus {
outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
text-decoration: none;
}
del {
text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}

Vía | http://www.webspeaks.in


jQuery: mejorar rendimiento en selectores

Friday, July 2nd, 2010

El siguiente código es correcto:

$("div#elem").hide();
$("div#elem").css("width","200");
$("div#elem").show();

Pero presenta un problema: cada vez que se especifica un selector, jQuery recorre todo el DOM en busca de los elementos correspondientes.

Tenemos dos posibles soluciones para mejorar el rendimiento. La primera es “encadenar” las llamadas:

$("div#elem").hide().css("width","200").show();

La segunda es guardar el objeto devuelto por jQuery en una variable:

var myElement = $("div#elem");
myElement.hide();
myElement.css("width","200");
myElement.show();

Esto también es aplicable al objeto “this”. Por ejemplo, para este loop:

$("div").each(function(i) {
   $(this).addClass("myClass");
   if($(this).hasClass("newClass") {
      $(this).addClass("anotherClass");
   }
});

Podríamos implementar algo como esto:

$("div").each(function(i) {
   var $this = $(this);
   $this.addClass("myClass");
   if($this.hasClass("newClass") {
      $this.addClass("anotherClass");
   }
});

Nota: la variable ha sido nombrada $this, en lugar de this, porque esta última es una palabra reservada.

Vía | http://www.thewebsqueeze.com


SUID: permisos para otros usuarios

Thursday, July 1st, 2010

El bit SUID activado sobre un fichero indica que todo aquél que ejecute el archivo va a tener durante la ejecución los mismos privilegios que quién lo creó.

Supongamos. por ejemplo, que el usuario user1 crea un script “test.sh” que tiene como resultado una escritura sobre un fichero cuyo propietario es el mismo usuario.


#!/bin/bash
dt=`date`
echo $USER $dt >> /home/user1/log
echo "Updated the log file sucessfully."

Supongamos, además, que el usuario quiere dar permiso a otros usuarios para ejecutar este script. En este caso hay dos opciones:
(more…)


CSS: crear reflejos en navegadores con soporte WebKit

Tuesday, June 8th, 2010

El efecto “reflejo” es uno de los más interesantes que podemos crear usando WebKit.

Antes sólo era posible utilizando javascript (este es el método que utiliza, o al menos utilizaba, iWeb, para crear esos efectos).

El código a utilizar es:

<br />
-webkit-box-reflect: <direction> <offset> <mask -box-image><br />

dónde indicamos la dirección en la que mostramos el reflejo, la distancia respecto al objeto original y la máscara que se va a aplicar al reflejo, si es que se aplica alguna.

Ya que podemos crear gradientes usando WebKit, un buen ejemplo sería:

(more…)


Slider con CSS3 puro y funcionalidad de Back Button

Wednesday, April 28th, 2010

Neil Grosskopf muestra en su blog una solución para crear un slider típico de jQuery usando CSS3 puro.

Pero es que además, su solución evita el problema del “Back Button” en aplicaciones que utilizan jQuery, consistente en que mostrar una parte “oculta” usando jQuery no modifica el historial de navegación, de manera que si el usuario presiona el botón “atrás”, no se vuelve a la situación anterior, sino que el navegador pasa a otra localización.

En fin, veamos un ejemplo (aquí una demostración online, más sencilla que la de la entrada original de Neil).

Primero creamos la lista con los elementos, en este caso 3:

<div id="content">
   <ul>
      <li>
         Text 1
      </li>
      <li>
         Text 2
      </li>
      <li>
         Text 3
      </li>
   </ul>
</div>

Aplicamos las siguientes reglas CSS:

#content, ul, li {
   height: 400px;
   padding: 10px;
}

#content, li { position: relative; width: 500px; }

#content {
   overflow: hidden;
   padding: 10px;

   float:left;
}

ul {
   list-style-type: none;
   position: absolute;
   left: 0px;
   top: 0px;
   width: 500px;
   height: 2000px;
}

Con este CSS conseguimos que, de los tres elementos li apilados en vertical, sólo se vea uno a un tiempo. Inicialmente el primero, de manera que ahora tenemos que proporcionar el mecanismo para desplazar el elemento ul las cantidades suficientes para ver los elementos 2 y 3, respectivamente.

Empezamos colocando los “anchors” al principio de la página. Serán divs sin contenido, ya que su único propósito es que sirvan como selectores CSS:

<div><div id="p1"></div>
<div><div id="p2"></div>
<div><div id="p3"></div>

Y ahora añadimos las reglas CSS, basadas en esos anchors para desplazar el elemento ul:

#p1:target ul { top: 0px; }
#p2:target ul { top: -420px; }
#p3:target ul { top: -840px; }

Listo. Cuando nuestro navegador apunte al anchor #p1 (o simplemente no apunte a ninguno), veremos el primer elemento. Cuando apunte al #p2, al segundo, y así sucesivamente.

Por último, si queremos dar sensación de fluidez al cambio de un elemento a otro, añadimos la siguiente regla CSS:

ul { -webkit-transition: top .3s linear; }

Pero ojo, esto último sólo funciona para navegadores con soporte WebKit.

Eso es todo. En este link podéis encontrar una demostración (a la que se ha añadido unos enlaces muy simples para permitir pasar de un elemento a otro sin necesidad de modificar la URL) y en este otro un zip con el código.

Via | http://www.nealgrosskopf.com


Aplicación Offline para iPhone

Monday, March 29th, 2010

Ya son varios los artículos que he leído acerca del tema de creación de aplicaciones Web Offline para iPhone  (aquí el último) y, generalmente, dejan de lado un tema importante, obviándolo o dándolo por supuesto, que suele dar quebraderos de cabeza (al menos a mí me los ha dado).

El tema es que, es imprescindible configurar correctamente el servidor en que está colgada la aplicación para que, al cargarla en el iPhone, éste la “cachee” adecuadamente.

El “quid”: el fichero declarado como manifest debe ser interpretado por el servidor con el MIME type “text/cache-manifest”. En otro caso, por ejemplo “text/plain”, al intentar abrir la aplicación en ausencia de conexión, obtendremos un error.

Si el servidor es Apache (no conozco ninguno más, al fin y al cabo, soy desarrollador, no administrador) es relativamente sencillo. Necesitamos un fichero .htaccess en la misma carpeta en que se encuentre la aplicación, con el sigueinte contenido:

AddType text/cache-manifest .manifest

Por supuesto el fichero manifest deberá tener la extensión “.manifest”, en otro caso la directiva no sirve para nada.

Además, el servidor Apache debe estar correctamente configurado para que interprete nuestro fichero .htaccess.


Generar sombra usando CSS puro

Friday, March 19th, 2010

En CSS3 es bastante simple:

.shadow {
   box-shadow: 3px 3px 4px #000;
}

El significado de los valores es más o menos fácil de adivinar: desplazamiento vertical, desplazamiento horizontal, radio de desenfoque y color.

Sin embargo, los navegadores aún no soportan por completo el nuevo estándar. Ahí va una solución:

.shadow {
   -moz-box-shadow: 3px 3px 4px #000;
   -webkit-box-shadow: 3px 3px 4px #000;
   box-shadow: 3px 3px 4px #000;
   /* For IE 8 */
   -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
   /* For IE 5.5 - 7 */
   filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
}

Vía | Robert’s talk


Google Chrome Hackaton – Madrid

Friday, March 19th, 2010
Google Chrome Hackaton - Madrid

Ayer, 18 de marzo de 2010, tuvo lugar en Madrid (en la Facultad de Informática de la Universidad Complutense de Madrid), el Google Chrome Hackaton, al que muy amablemente me invitaron.

Hay que decir que la organización fue buena, excepto por un par de cosillas, como que empezaron una hora tarde y que el sitio para la “merienda” era un poco pequeño.

Los ponentes fueron Ernest Delgado y Arne Roomann-Kurrik, ingenieros de desarrollo en la empresa de Mountain View, y la verdad es que lo hicieron muy bien (insisto, excepto por los problemas de tiempo, que hicieron que tuvieran que ir un poco deprisa en algunas partes de la conferencia).

Después de las conferencias estuvieron echando una mano a los presentes en el desarrollo de extensiones, resolviendo dudas, mostrando las herramientas de debug, etc. Muy cercanos, muy al estilo de Google.

En fin,  enhorabuena a los organizadores y a los ponentes. Fue un “hackaton” ameno e instrucitvo.

Dejo algunos enlaces con la documentación:


Conversión de archivos de audio en linux

Wednesday, February 24th, 2010

La herramienta SoX, multiplataforma, permite realizar varias operaciones muy interesantes sobre ficheros de audio:

  • Obtener información:
     $ sox fichero.wav
  • Reproducir audio:
    $ play fichero.wav
  • Grabar archivo:
    $ rec -r 8000 -c 1 fichero.wav

    → graba con un muestreo de 8 kbps y a un canal (la extensión determina el formato).

  • Convertir:
    $ sox fichero.wav fichero.ogg

    → convierte el fichero del formato “wav” a “ogg”

  • Acelerar:
    $ sox fichero.wav acelerado.wav speed 2.0
  • Recortar:
    $ sox fichero.wav recortado.wav trim 60 10

    → devuelve los 10 segundos posteriores al primer minuto.

  • Escuchar podcast:
    $ play http://dondesea.com/ficheros/audio/podcast.mp3

La instalación de Ubuntu es muy sencilla:

$ sudo apt-get install sox libsox-fmt-all

Para otras plataformas: http://sox.sourceforge.net

La reproducción, grabado y/o conversión desde/hacia mp3 requiere de la librería lame.

Via | http://bitelia.com


Get Adobe Flash playerPlugin by wpburn.com wordpress themes