Recuperar datos en InnoDB

Data Recovery Toolkit for InnoDB es un conjunto de herramientas que comprueba los tablespaces de InnoDB y recuperan datos de un tablespaces dañado o de tablas que han sufrido drop o truncate.

Entre las características que ofrece nos encontramos con:

  • Soporte para REDUNDANT (anterior a MySQL 5.0) y COMPACT (posterior a MySQL 5.0).
  • Funciona con un tablespace único o un tablespaces de un fichero por tabla.
  • Recupera datos incluso cuando una página InnoDB has sido reasignada a otra tabla o fue parcialmente destruida.
  • Permite todos los tipos de datos de MySQL excepto BLOBs, SETs y BITs, aunque está previsto para la próxima versión.
  • Tiene un conjunto de filtros de datos para definir rangos de datos (para números), longitud de campos (para campos de longitud variable), juegos de caracteres (para strings), periodos de datos, etc…
  • Viene acompañado de una herramienta que permite definir tablas InnoDB, así no es necesario implementarlas directamente mediante sentencias SQL.
  • Los datos se devuelven en formato CSV por lo que luego pueden ser importados facilmente.

Data Recovery Toolkit for InnoDB

Vía / Homo-Adminus Blog

Slider accesible y no obstrusivo

Un gran script que nos permite insertar sliders en nuestras webs, que sean accesibles y no obstrusivos. A parte, permiten ser manejados por las flechas del cursor, por las teclas de inicio y fin, o el ratón, incluido el scroll.

El script le asigna automáticamente a cada slider el rol slider requerido por ARIA y los estados valuemax, valuemin y valuenow.

Un ejemplo de uso para un slider horizontal con una llamada de función sería la siguiente:

class="fd_range_0_255 fd_classname_extraclass fd_callback_updateColor"

slider.png

Slider

Vía / WebAppers

links for 2007-11-26

TwitterPoster Groups

Hemos querido darle un cambio a TwitterPoster para dejar de ser únicamente un top de usuarios de Twitter. Se trata de la posibilidad de crear y pertenecer a grupos de usuarios de Twitter.

¿Para qué quiero pertenecer a un grupo de usuarios de Twitter? Pongamos un ejemplo, has acudido a Evento Blog España y quieres que tus opiniones se puedan leer dentro de un contexto, tan solo tienes que unirte al grupo de EBE07 y los usuarios podrán ver en una especie de agrupación de feeds tus mensajes junto al resto de los usuarios del grupo.

Para crear o unirse a un grupo tan solo hay que enviar un mensaje directo al usuario @poster con el siguiente formato:

join #[nombre del grupo]

Por ejemplo si deseas pertenecer al grupo EBE07 escribirás:

join #ebe07

Para poder acceder a los contenidos del grupo solo se deberá acceder a la ruta:

http://twitterposter.com/group/[nombre del grupo]

La única dificultad es que para mandar un mensaje privado a @poster tiene que seguirte, pero eso no es problema, porque en el momento que TwitterPoster detecte que eres follower suyo, en ese momento se hará follower tuyo.

El único problema lo impone el API de Twitter, el cual solo permite 70 peticiones en 1 hora, en esto no podemos hacer nada.

Existen dos grupos creados, uno de ellos pertenecientes a Com’n’Click Networks la empresa propietaria de TwitterPoster y Bitacoras.com (come_n_click) y otro grupo de prueba (test_groups).

Copy/paste / mi otro blog

Texto explicativo en las cajas de los formularios

Dentro de una serie de artículos sobre Javascript he encontrado este script que permite mostrar un texto explicativo en las cajas de texto y que desaparezca cuando el usuario ha escrito algo.

Primeramente necesitamos el HTML que se mostrará, se trata de un formulario normal, pero el texto explicativo, mediante estilos, en vez de aparecer debajo como se vería sin estilos, al darle posición absoluta, se mostrará sobre la caja de texto.

<style type="text/css">
.helptext {
position: absolute;
color: #999999;
z-index: 10;
font-size: small;
overflow: hidden;
}
</style>
<form action="" method="post">
<input type="text" name="login" value="" onkeyup="UpdateHelpText(this);" onmouseup="UpdateHelpText(this);" />
<div class="helptext" id="label_login" onclick="ChangeFocus(this);">
Enter Login Name
</div>
  
<input type="password" name="password" value="" onkeyup="UpdateHelpText(this);" onmouseup="UpdateHelpText(this);" />
<div class="helptext" id="label_password" onclick="ChangeFocus(this);">
Enter Password
</div>
  
<input type="submit" name="submit" value="Login" onclick="return false;" />
</form>
<script type="text/javascript" language="JavaScript">
UpdateHelpText(document.getElementsByName('login')[0]);
UpdateHelpText(document.getElementsByName('password')[0]);
</script>

Acto seguido, se necesitan las funciones javascript, en este caso son dos, una de ella que pasa el foco a la caja de texto cuando se pincha en el texto explicativo (recordad que está encima de la caja de texto):

function ChangeFocus(el) {
while (el.tagName != 'INPUT')
el = el.previousSibling;
el.focus();
}

Y la otra función que oculta el texto explicativo dependiendo del contenido de la caja de texto:

function UpdateHelpText(el)
{
var label = el;
while (label.tagName != 'DIV')
label = label.nextSibling;
if (el.value == '') {  // Field is empty; show text
label.style.left = getElementAbsPosX(el) + 'px';
label.style.top = (getElementAbsPosY(el) - 7) + 'px';
label.style.visibility = 'visible';
}
else { // Field is not empty; hide text
if (label)
label.style.visibility = 'hidden';
}
}

Advanced JavaScript III

Vía / AjaxLine

WampServer 2.0: el nuevo WAMP5

WAMP5 ha cambiado y ahora se llama WampServer 2.0, el cambio no solo ser refiere al nombre, sino a una gran novedad, permite instalar distintas versiones de Apache, MySQL y PHP, pudiendo elegir la que más nos convenga en cada situación, teniendo en cuenta que no todas las versiones de PHP son compatibles con todas las versiones de Apache.
wampserver.png
Este cambio es muy importante, ya que los entornos de trabajo no son siempre los mismos y debido a imcompatibilidades es necesario crear nuestras aplicaciones en entornos de trabajo exactos al real.
Nos permite modificar las opciones de las versiones de MySQL, PHP y Apache que estén seleccionadas en ese momento, aunque aún echo en falta poder visualizar los logs de apache que desee (no solo el por defecto), elegir la aplicación para ver los logs y poder permitir modificar los virtual hosts de apache.
WampServer 2.0
Vía / OpenSourceCommunity.org

phpRemoteShell: ejecución remota mediante PHP

phpRemoteShell es una aplicación que permite ejecutar comandos de shell y código PHP en un host remoto sobre HTTP.
prs.png
Además permite encriptarse y desencriptarse en la petición, PRS se puede alojar a sí mismo en en otro script PHP del servidor para poder restablecerse durante el tiempo de ejecución. Ademas permite modificar el crontab entre otras cosas.
phpRemoteShell
Vía / International PHP Magazine

|

Hadoop: plataforma para trabajar con gran cantidad de datos

hadoop.pngHadoop es una plataforma que nos permite desarrollar aplicaciones que tengan que tratar con grandes cantidades de datos, hasta petabytes. Se trata de un subproyecto de Lucene, un proyecto de Apache que desarrolla software para realizar búsquedas.
Hadoop es muy útil cuando vamos a realizar proyectos que necesiten de escalabilidad, ya hemos dicho que puede almacenar y procesar petabytes de informacion. A su vez, es perfecto para un cluster de servidores, distribuyendo la información entre los nodos, siendo posible disponer de miles de nodos. Al disponer los datos de forma distribuida, la búsqueda se puede realizar muy rápidamente ya que Hadoop puede acceder a ella de forma paralela. Y aunque los datos estén distribuidos, no hay que preocuparse de fallos ya que dispone de un sistema de seguridad.
hadoop.gif
Hadoop implemente el MapReduce de Google, usando un sistema distribuido para dividir las aplicaciones en pequeñas tareas.
Hadoop se ha llegado a probar en un cluster de 2.000 máquinas y se está intentando alcanzar la cifra de 10.000 máquinas. Es necesario Java para su desarrollo y Linux, aunque se puede usar Windows para desarrollo, aunque el cluster no funciona del todo bien.
Hadoop

Bitacoras.com reborn

bits2.pngDespués de muchos meses de trabajo, hemos lanzado la nueva versión de Bitacoras.com. Antes de nada, estamos en beta, por lo que vuestra ayuda nos vendrá muy bien para mejorar.

bits1.png

Quisimos salir antes, pero no siempre es posible hacerlo cuando uno quiere, problemas ajenos a nosotros nos han obligado a retrasar la salida todo un mes.
Bitacoras.com no ha sufrido solamente un cambio de cara, que es lo más evidente, sino que el cambio principal ha sido interno. La filosofía ha cambiado, pasamos de portal a web2.0, y para ello era necesario una programación desde cero de todo el core de la aplicación. Con esta nueva versión podremos ir añadiendo nuevas funcionalidades cada poco tiempo, evitando la falta de renovación que desgraciadamente sufrió Bitacoras.com en el pasado, y así intentar seguir siendo una referencia de los blogs en la comunidad hispana.
El giro que hemos dado está centrado en los usuarios, podremos ver la ficha de los usuarios inscritos y sus bitácoras. Nuestra intención es que Bitacoras.com dependa de los usuarios y los usuarios tengan cierta dependencia de Bitacoras.com 🙂
¿Faltan cosas por hacer?. Muchas. Cada día trabajamos en añadir cosas nuevas, algunas ya están en desarrollo, por lo que según vayan apareciendo las iremos anunciando. Por ejemplo los RSS, al tratarse de RSS que pueden ser muy específicos, por ejemplo para usuarios, para bitacoras, para tags, para úlimos posts, para geo, nos está llevando su tiempo integrarlos todos, pero en ello estamos.
También estamos detectando pequeños errores, algunos producidos por el cambio de DNS, tened paciencia con nosotros 🙂
Bitacoras.com

Beautify Javascript: aclara código Javascript

Normalmente lo que intentamos es comprimir nuestro código Javascript o bien para que ocupe menos, o bien para ofuscarlo. En este caso se trata de un script que nos permite embellecer scripts comprimidos.

Así, por ejemplo, el código de Google Reader, el cual, como todos los de Google son casi imposibles de seguir, lo veríamos así:

...
function nd(a, b) {
a = String(a);
return (new Array(Math.max(0, b - a.length + 1))).join(mc) + a
}
var l = "";
function tj() {
return Array.prototype.join.call(arguments, l)
}
var R = " ",
nc = ", ",
Jc = ":";
function zQ(a) {
...

Beautify Javascript

Vía / Ajaxian