Combinar todas las librerías externas en un sólo JAR en Netbeans
Al compilar con el script ant que trae integrado NetBeans, obtendremos un JAR con la aplicación y una carpeta "lib" con las librerías externas para hacerla funcionar. De cara a distribuir la aplicación esto no es lo más interesante, ya que si es una aplicación de escritorio será más conveniente combinarlo todo en un sólo archivo, incluídos binarios y librerías externas.
Una posibilidad para generar el archivo que incluya todo sería hacerlo a mano (renombrando el jar a .zip y editándolo, por ejemplo), aunque si se va a hacer varias veces es más cómodo hacerlo desde el propio IDE, integrado en el proceso de compilación de Netbeans. Para ello, editaremos el archivo build.xml localizado en la carpeta raíz del proyecto, y añadimos este texto antes de <project>:
<target name="-post-jar">
<jar jarfile="${dist.jar}" update="true">
<zipfileset src="${dist.jar}" includes="**/*.class" />
<zipfileset src="lib/libreria1.jar" excludes="META-INF/*"/>
<zipfileset src="lib/libreria2.jar" excludes="META-INF/*"/>
<manifest>
<attribute name="Main-Class" value="com.ejemplo.ClasePrincipal"/>
</manifest>
</jar>
</target> |
Debemos añadir cada una de las librerías a incluir en el JAR con una línea zipfileset. Este añadido al script permitirá que NetBeans genere un archivo .JAR para el proyecto, que incluye tanto nuestro código como las dependencias, al utilizar la opción "Clean&Compile" del IDE.
Acelera la carga de wordpress activando la compresión
Acelerar la carga de tu blog (hecho con wordpress) activando la compresión "zlib", siempre que tu host lo soporte, es tan sencillo como añadir lo siguiente en el header.php de tu theme:
<?php
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '1');
?>
Esto permitirá que los datos se transmitan desde tu servidor hasta el navegador del visitante comprimidos, ahorrando un tiempo de transmisión interesante. Para comprobar si tienes activado el soporte de zlib, puedes observar la salida de phpinfo en tu servidor. Y para comprobar si está funcionando la compresión, prueba la herramienta de Port80.
Vía | WPRecipes.
Acceder a una variable de scriplet con JSTL (y viceversa)
Aunque mezclar scriptlets y JSTL en las páginas JSP es una mala práctica (hace el código mucho más difícil de mantener), a veces es complicado de evitar tener que compartir variables entre código java incrustado en los JSP (scriptlets) y las etiquetas JSTL. Para poder compartir valores de variable entre ambos existe el contexto de la página:
Acceder a una variable de un scriptlet con JSTL
<% String miVariable = "Cadena"; pageContext.setAttribute("miVariable", miVariable); %> |
<c:out value="miVariable"/> |
Acceder a una variable de JSTL mediante scriptlets
<c:set var="miVariable" value="Cadena"/> |
<%
String miVariable= (String)pageContext.getAttribute("miVariable");
out.print(miVariable);
%> |
Las variables usadas pueden ser objetos complejos, siempre que se importen mediante
<%@page import="paquete.nombre.de.la.clase"%> |
Vía | Alessandro Melandri.
Obtener el espacio ocupado por las bases de datos de MySQL
En The Arctel Journal tienen un pequeño y útil fragmento de código MySQL para obtener el espacio ocupado por los datos de las distintas bases de datos MySQL de un servidor:
SELECT table_schema, count(*) TABLES, concat(round(sum(table_rows)/1000000,2),'M') rows,concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA,concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx,concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size,round(sum(index_length)/sum(data_length),2) idxfrac FROM information_schema.TABLES group by table_schema;
O la versión en Mb y miles de filas (en vez de GB y millones de filas):
SELECT table_schema, count( * )
TABLES , concat( round( sum( table_rows ) /1000, 2 ) , 'K' )
ROWS , concat( round( sum( data_length ) / ( 1024 *1024 ) , 2 ) , 'Mb' )
DATA , concat( round( sum( index_length ) / ( 1024 *1024 ) , 2 ) , 'Mb' ) idx, concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'Mb' ) total_size, round( sum( index_length ) / sum( data_length ) , 2 ) idxfrac
FROM information_schema.TABLES
GROUP BY table_schema;
Para ejecutarlo podemos recurrir a PhpMyAdmin, alguna herramienta similar, ejecutar el comando mediante la consola o crear un pequeño script que lo ejecute y muestre los resultados en pantalla...
Expresión regular para encontrar vídeos de YouTube en un texto
Con la siguiente expresión regular podremos encontrar los identificadores de los vídeos que se encuentren en vídeos de youtube (tanto como links como si están incrustados):
/youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)[&\w;=\+_\-]*/
Esto permite extraer el identificador único del vídeo, que sirve para enlazarlo, incrustarlo u obtener su imagen. Por ejemplo, para obtener la URL de la imagen thumnail del vídeo podremos usar:
preg_match('/youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)[&\w;=\+_\-]*/',$texto);
$img="http://i2.ytimg.com/vi/{$match[1]}/default.jpg";
Vía | d0t101101 en el Foro de Drupal.
Creación de un bot de twitter sencillo con PHP
Twitter tiene un API bastante sencillo sobre el cual se pueden desarrollar aplicaciones de un modo bastante fácil. Con unas pocas líneas podemos montar un bot de twitter que cada hora envíe un mensaje, como explico en BloqNum.
$username = 'nombreDeLaCuenta';
$password = 'passwordDeLaCuenta';
date_default_timezone_set('Europe/Madrid');
$hora = date('g');
if ($hora == '1')
$message = "Xa é a unha... ";
else
$message = "Xa son as ".$hora."... ";
for ($i = 0; $i < $hora; $i++){
$message .= 'TOLON! ';
}
$url = 'http://twitter.com/statuses/update.xml';
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$url");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)) {
echo '--error-'.$message;
} else {
echo '--exito-'.$message;
}
Después, con un proceso de cron se automatiza la ejecución del cliente cada hora, para que se publique el mensaje cada 60 minutos. Este archivo enviará el mensaje cada vez que se visite, con lo cual si se quiere proteger habría que añadirle una contraseña o no ponerlo en una ruta accesible públicamente.
Mostrar un listado anidado de términos de taxonomía en Drupal
Buscando cómo mostrar un listado aninado de los términos (terms) de un vocabulario (una categoría de Drupal, o taxonomy), encontré este útil fragmento de código en Drupal.org. Para que funcione esto es necesario usar el módulo Taxonomy.
<?php
// El ID del vocabulario de la taxonomia del que queremos crear la lista de terminos
$vid = 10;
$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);
print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
$diffdepth=0;
if ($term->depth > $depth) {
print "\n<ul>\n<li>";
$depth = $term->depth;
$num_at_depth = 0;
}
if ($term->depth < $depth) {
$diffdepth= $depth -$term->depth;
while ($diffdepth > 0){
print "</li>\n</ul>\n";
$diffdepth -- ;
}
$depth = $term->depth;
}
if (($term->depth == $depth) && ($num_at_depth > 0)) {
print "</li>\n<li>";
}
print l($term->name, 'taxonomy/term/' . $term->tid);
$num_at_depth ++;
}
print "</li>\n</ul>\n";
?> |
El crédito va al autor, billyboylindien
Reemplazo masivo en cadenas de texto con SQL
-
UPDATE table_name SET column_name = REPLACE(column_name,"original_string","replace_string");
-
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`,"picateclas.com/directorioantiguo/","picateclas.com/nuevodirectorio")
Vía | LiewCF.
Reemplazar saltos de línea (/n) de un textarea con JavaScript
Reemplazar los saltos de línea (\n) de un textarea en una página web mediante javascript es muy sencillo usando una expresión regular. Espero que sirva a aquellos que queráis mejorar vuestra formación en java:
<html>
<head>
<script>
function nl2br(str){
str=str.replace(/\n/gi,"<br />");
return str;
}
function reformat(){
document.dummy.area.value=nl2br(document.dummy.area.value);
}
</script>
</head>
<body>
<form name="dummy" id="dummy">
<textarea name="area" id="area" rows="10" cols="50"></textarea><br />
<input type="button" name="nl2br" id="nl2br" onclick="reformat()" value="Eliminar Saltos de Línea" />
</form>
</body>
</html> |
Rotar una BufferedImage en Java
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.
