Syntax Error se une al imperio

Con este título un tanto extraño doy por cerrado el blog.

Los motivos son diversos pero básicamente se reducen a que no podré mantener el ritmo de tutoriales e información como lo he estado haciendo hasta ahora y por eso decidimos unirnos al imperio skamasle.

Me podreis encontrar siempre en dicho imperio, sobretodo en la zona de programación web o en el foro.

Ante todo agradecer a las personas que me visitaron casi diariamente durante el período que permaneció el blog abierto y les invito a pasarse periódicamente por skamasle.

Seguiré con los tutoriales que empecé y con todos aquellos scripts que rondan en mi acbeza y algún día sacaré tiempo para publicar.

Hasta siempre
nax
Follow us at: www.skamasle.com

El equipo de traducción de PHP.net busca colaboradores

A través de la lista de correo de PHPBarcelona me llega un email de yago con el siguiente contenido:


Hola,
hace un tiempo ya envié un mensaje parecido a esta lista, pero me gustaría refrescar por si os animáis!

Después de varios años de parón, el manual oficial de PHP está siendo revisado y traducido al Castellano a su última versión.
Por ahora hemos traducido un 21% http://doc.php.net/php/es/revcheck.php?p=graph y subiendo pero nos gustaría llegar al 100% y superar otros idiomas.

Si tienes nociones de Inglés y sabes usar SVN (Subversion) no te puedes perder esta oportunidad para ayudarnos a traducir y colaborar con la comunidad Open Source.
Solo que traduzcas un fichero o una función eres más que bienvenido luego ya decidirás si quieres colaborar de forma constante o no.

Contacta conmigo para que te envié instrucciones a yago@php.net.

Si conoces a alguien que le pueda interesar, por favor reenvía este correo.

Saludos y gracias a todos!

Así que desde aquí os animo a que contacteis con yago para poder colaborar en este proyecto.

En mi opinión es una muy buena oportunidad y una buena ayuda para aquellos que no dominan tanto el inglés

UPDATE: Formación Profesional de Informática: SMR, ASIR, DAM y DAW

Ha día de hoy, en lo que Formación Profesional orientado a la informática se refiere, solo tenia conocimiento de 3 cursos.

  • 1 de Grado Medio:
    • ESI: Explotación de Sistemas Informáticos.

  • 2 de Grado Superior:
    • DAI: Desarollo de Aplicaciones Informáticas.
    • ASI: Administración de Sistemas Informáticos.

Es decir, en GS disponemos uno de Administración y otro de Programación, todo depende de hacia donde nos queramos decantar.
El lunes se abrieron las inscripciones a las pruebas de acceso a GS, así que ayer me disponía a inscribirme en ellas cuando de repente me encuentro con que DAI no era una opción a elejir, en cambio habia Desarollo de Aplicaciones Web (DAW) y Desarollo de Aplicaciones Multiplataforma (DAM).

Un poco desorientado, y otro tanto preocupado, esta mañana me dirijí a hablar con la jefa de estudios, que casualmente es la encargada del departamento de informática (o lo era el año pasado), y me comentó que este curso (2009-2010) es el último en el que se realiza DAI y nacen dos ramificaciones de este DAM y DAW.

La jefa de estudios ya me advirtió que aún siquiera saben si darán los dos cursos o solo uno, muy posiblemente DAM, (en ese centro obviamente) así que en ese momento toda la información que disponia era esa.

Así que hace un rato me puse a investigar en www.gencat.cat (la página de educación en Cataluña) y realmente no encontré nada sobre DAM ni DAW, buscaba el programa de estudios, calificaciones y demás...

Es decir, no solo en el instituto no saben que cursos van a hacer sino que el único sitio de cataluña donde encontré referencias sobre DAM y DAW fué en la inscripción a la prueba de acceso.

Así que opté por lo más fácil, buscar en el señor google, y los primeros resultados me llevan a Madrid más concretamente a ApiMadrid.org (Asosiación de Profesores de Informática de Madrid) encontré algún PDF y algun que otro comentario y más o menos pude hacerme a la idea de cómo funcionará el curso 2010-2011.

Cito textualmente la introducción del PDF:

Los cambios más significativos de los títulos LOGSE con respecto a los nuevos títulos LOE son debidos al nuevo marco de referencia: EL CNCP. Catálogo nacional de cualificaciones profesionales.

  • Formación Profesional Grado Medio (Técnico en...)
    • SMR (Sistemas Microinformáticos y Redes): substituye a ESI (Explotación Sistemas Informáticos)
  • Formación Profesional Grado Superior (Técnico superior en...)
    • ASR (Administración de Sistemas en Red: substituye a ASI (Administración de Sistemas Informáticos)
    • DAW (Desarollo de Aplicaciones Web): es un nuevo modelo
    • DAM (Desarollo de Aplicaciones Multiplataformas): substituye a DAI (Desarollo de Aplicaciones Informáticas)

Cito la nota de estos dos últimos:

DAW Y DAM tienen una estructura que permitiría su implantación estableciendo un 1º curso común para ambos títulos, y un 2º curso específico para cada título. La decisión última de la distribución de módulos en 1º y en 2º está en manos de lo que cada comunidad autónoma establezca.

También aclarar que ASR, DAW y DAM están pendientes de publicación en la BOE y puede que ese sea el motivo de la poca información de la que se dispone.

Es decir que muy posiblemente tengamos un 1er curso común tanto para DAM como DAW y un 2do curso a elección de los estudiantes, aunque la cosa está por ver aún.

El resto del PDF son datos sobre asignaturas y cambios respecto a sus antecesores, dejo el link para los interesados en cursar un Grado Superior en los cursos futuros:


Ponencias Informáticas y cualificaciones.pdf

Cómo actualizar a Simple Machines Forums 2.0 RC3

Hoy recibí el anuncio desde el foro de SMF sobre la disponibilidad de la nueva RC3.

Incluye 350 entradas en el change log, mayormente bugs.

Por lo tanto se recomienda su actualisación inmediata a usuarios de SMF 2.0 RC2 o inferior.

Ver anuncio de smf

Como actualizar mi versión RC2 a RC3?

Los pasos son muy sencillos, primero que nada vamos a la sección downloads de SMF y elejimos "large update" de la versión 2.0 RC3.

Subimos los archivos al servidor y entramos en update.php, se nos abrirá un panel donde nos pedirá los datos del administrador y podremos configurar un backup (recomendado).

Pasado este punto empezará el backup y luego el upgrade (tanto de DB como de Templates), una vez finalizado seleccionamos borrar update.php y ya tenemos el foro en la versión 2.0 RC3


9 sistemas de rankeo/votos para tu wordpress

 Dejo esta lista de 9 buenos sistemas de votos y rankeo para wordpress sacados de "webdesignbooth"

1. JR_Ratings


2. WP-Polls

3. GD Star Rating


4. Democracy AJAX Poll


5. WP Easy Polls

6. SodaHead


7. PollDaddy Polls & Ratings


8. Star Rating for Reviews


9. Vote-The-Post

30 plantillas estilo de revistas para tu Wordpress

Introducción a AJAX 2/2 Codigos de ejemplo

Antes de empezar esta segunda parte de la introducción a AJAX donde nos meteremos de lleno en la programación en sí y dejaremos de lado la teoría, querría prevenir a los lectores que en una primera lectura el código y los ejemplos no sean comprensibles, pero se les anima a releerlos e intentar trazarlos para así llegar a una mayor comprensión del algoritmo utilizado.

Funciones comunes

Primero que nada vamos a revisar las 2 funciones que usaremos siempre en nuestro sistema AJAX.
//Funciones comunes
function addEvent(elemento,nomevento,funcion,captura)
{
if (elemento.attachEvent)
{
elemento.attachEvent('on'+nomevento,funcion);
return true;
}
else
if (elemento.addEventListener)
{
elemento.addEventListener(nomevento,funcion,captura);
return true;
}
else
return false;
}

function crearXMLHttpRequest()
{
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}
La función addEvent se encarga de ejecutar una 'funcion' al suceder un 'evento' sobre un 'elemento' es decir si tenemos el boton1 y queremos que en la acción 'onclick' se ejecute la función 'comprobar()', lo llamaremos de la siguiente forma:
addEvent(boton1, 'click', comprobar, false);
La función crearXMLHttpRequest() es la encargada de crear nuestro módulo AJAX para hacer peticiones de fondo. Básicamente se crea una función gracias al "amado" Internet explorer que usa un ActiveX, el resto de navegadores utilizan windows.XMLHttpRequest como marcan los estándares.

30 plugins útiles para Administradores Wordpress

1. FireStats y FireStats Charts


firestats-admin-plugins-for-wordpress

5 plugins para hacer buckups de tu Wordpress

1. WP-DB-Backup




 2. Wordpress EZ Backup




   

Top 10 addons SEO para Joomla

. SEOSimple

 Un complemento que se encarga de poner tus meta en todas las noticias y páginas de joomla



 Precio: Free




  

50 animaciones sorprendentes con CSS3 !!

1. CSS3 Clock With jQuery



2. Analogue Clock

Analogue clock created using webkit transition and transform CSS. JavaScript is only used to pull in the current time.

3. 3D Cube That Rotates Using Arrow Keys



PHP ocupa el 3er puesto en la tabla de lenguajes mas usados de Febrero

Haciendo un pequeño review a las gráficas que sacó TIOBE hace escasos días me llevo una grata sorpresa en cuanto al progreso de PHP que voy a compartir con vosotros.

Tomemos una primera idea del progreso de PHP a lo largo del mes con esta primera imagen:




Grafica lenguajes mas usados


Como se puede apreciar PHP sube 2 posiciones frente a C++ y Visual Basic. A destacar también que progresa un 1.22%  frente a Febrero del año pasado.
Como curiosidad vemos que Java baja un -2.05% frente al año pasado y en las gráficas se puede ver como está tendiendo a perder su popularidad:


En la siguiente imagen podemos ver como PHP ha ido mejorando su "status" desde el año 2000 pasando de una 17ª posicion a un respetable 3er puesto.


PHP fué nombrado en el año 2004 como lenguaje del año y este año pasado go (el lenguaje de google) fue el que se llevó dicho reconocimiento.

Introducción a AJAX 1/2

¿Qué significa AJAX?

Si bien mucha gente ha escuchado alguna vez en su período como programador web la palabra AJAX pocos saben que significa. Ajax es el acrónimo de Asynchronous Javascript And XML es decir, Javascript asíncrono y XML.

Según la RAE la definición de asíncrono es:
"Se dice del proceso o del efecto que no ocurre en completa correspondencia temporal con otro proceso u otra causa."

Es decir mientras trabajemos con ajax, Javascript no cargará ciertas informaciones cuando se carga la página principal sino cuando sean requeridas (Javascript asíncrono)

Pero, ¿Qué es realmente AJAX?

Como su propio nombre indica AJAX no es una sola tecnología sino que es la unión de muchas tecnologías muy populares que trabajan de forma conjunta logrando un potencial realmente increíble en una página web.

Las tecnologías que intervienen en AJAX son:

  •  Javascript
  • HTML
  • XML
  • CSS
  • PHP
  •  ASP

No todas son necesarias para el desarrollo óptimo de nuestra aplicación con AJAX pero si se recomienda su conocimiento.
Las más utilizadas son: Javascript, HTML, PHP y CSS, para estructuras de datos grandes se usa mucho XML.

¿Cómo funciona?

Quizá podamos simplificar la explicación imaginando iframes. El uso de iframes nació como una buena alternativa (ya prácticamente obsoleta) de mantener una sección de la página estática y solo recargar el resto.
Un ejemplo muy clásico es el menú de una web en un iframe y en otro iframe la web en sí.

Como ya he dicho esta práctica está casi obsoleta, pero AJAX tiene un concepto similar.
Con AJAX tenemos la posibilidad de consultar/mostrar/enviar datos sin necesidad de recargar la página por completo y en "background".

Un ejemplo simple puede ser el envío de un comentario.
En vez de actualizar por completo la página ejecutamos un script que nos envíe "de fondo" el comentario y a la vez lo cargue en nuestra página para su visualización.

Hay ciertas ventajas, así como desventajas.

Entre las ventajas podemos encontrar:

  • Mayor velocidad en la carga de la página: Siguiendo el ejemplo anterior, al no tener que cargar la página por completo al enviar el mensaje el tiempo de carga disminuye bastante.
  • Menos transferencia de datos en el servidor: Por el mismo motivo que nuestra web nos ofrece mayor velocidad, también nos ofrece una transferencia de datos menor a la correspondiente sin dicha tecnología.

Entre las desventajas podemos encontrar:

  • Pérdida del concepto "atras": Con esta tecnología el concepto de atrás se pierde, depende donde apliquemos AJAX ésta no nos afectará.
  • Marcadores indirectos: Ésta se produce en páginas completamente con AJAX como podria ser Gmail. Al crear un marcador, por ejemplo, en el correo 23 y abrir dicho marcador, este nos lleva a la página principal de Gmail y no a dicho mensaje.

¿Quién usa AJAX?

Hay muchas empresas que a día de hoy usan AJAX, algunas de ellas pueden ser:

  • Google (Orkut, Gmail, Google Groups, Google Map, Google Suggest)
  • Flickr (algunas funciones)
  • Amazon (motor de búsqueda)

Introducción a AJAX 2/2 (En redacción)

Entradas recomendadas: Febrero

Este mes ha habido más de 15 feeds diarios por lo que una selección básica se me hace difícil espero no dejarme ninguno importante:

Programación:

Seguir traza de tus scripts
Comentarios condicionales de IE
PHP File Upload
Resetear autoincrement de MySQL
Best PHP Frameworks To build quickly complex web app
Free JS WYSIWYG Editor
Stop Spammer with Blacklist
Open Source Mysql Backup APP
Videos de seguridad para desarrolladores


SEO:

Los 200 parámetros del algoritmo de google
Open Site explorer. Herramienta para analizar enlaces y popularidad
Monitoreo Web con Specto
Recursos SEO Goggle para principiantes


Ubuntu:

Remover repositorios PPA
Actualiza tu ubuntu

Redes Sociales:

Rumor: twitter sin mysql?

Otros:

Firefox 3.6 Personalisación con Personas
Alternativas a Chrome más seguras
IfreeTable vs Ipad
[Humor] Tú que sabes de esto, ¿Me ayudas?

Por supuesto hay muchos más... pero tampoco tengo espacio para meterlos todos :P

Saludos

PHP 5.2.13 Release parchea 30 bugs y medidas de seguridad

PHP.net anunciaba hoy la salida de la versión 5.2.13 de PHP solucionando más de 30 bugs en el funcionamiento de PHP y reparando algunas fallas de seguridad.

Entre ellas errores en las funciones strip_tags, DOMDocument::LoadXML, filter_input, etc..

Se recomienda, como en cada nueva versión la actualisación de los sistemas PHP 5.x.x

Reporte de PHP.net

SyntaxHighlighter formata tus códigos de forma sencilla.

Hace ya mucho me vi en la obligación de crear un pequeño script para formatar correctamente códigos y así poder publicarlos en blogger.

Hace uno o dos días, hablando con yoyahack me explicó que existia una alternativa para "colorear" los códigos en tu blog o web independientemente del cms o la distribución.

Su nombre es SyntaxHighlighter

Su instalación es simple, solo debemos agregar estos códigos js en nuestras cabeceras:

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeRDark.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script>

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>


y a la hora de redactar encerraremos nuestro códgio entre:
<pre class="brush: js">

</pre>

o

<pre class="brush: php">

</pre>

Hay más lenguajes que estos dos, solo son los que yo uso más... también podemos omitir los scripts js de los lenguajes que no vayamos a utilizar.

El único inconveniente es que aún necesitamos un pequeño script para hacer la función htmlentities() y así no tener problemas con los símbolos < >.

El script que yo uso es:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" style="margin-bottom:40px">

<div id="formulario">

<textarea rows="20" cols="80" name="codigo"></textarea> <br />
<input type="submit" name="enviar" value="Formatear" /></div>

</form>

<?php

if (!empty($_POST['codigo'])) {

$codigo = $_POST['codigo'];
$codigo = str_replace("t", " ", $codigo);
$codigo = htmlentities(stripslashes($codigo));

$file = fopen("tmp.txt", "w");
fwrite($file, $codigo);
fclose($file);

$lineas = file('tmp.txt');
unlink('tmp.txt');

for ($i = 0; $i < count($lineas); $i++)
$resultado = $resultado.htmlentities($lineas[$i])."<br />";

echo '<h3> Inserta ste codigo en tu site: </h3>' .$resultado.'</div>';
}

?>

Eso es todo.

nax

Sistema de coordenadas y representación de puntos en esta [PHP y 1/2 Ajax]

pantallazo de coordenadas y ejes


El script nace con la idea de crear una representación de rectas según una equación tipo: y = 5x+2

La idea era generar dinámicamente una gráfica donde se representara dicha recta y se calcularan diversos valores como su pendiente y una tabla de valores.

También incluía un sistema ajax con un panel bastante completo para representar puntos, rectas y vectores y poder trabajar con los mismos en tiempo real, es decir, cada ves que se modifica un valor la imagen se actualiza.

El problema surge cuando me entero que js no puede convertir el binario de mi php a una imagen.. ahí se arruina la idea, al menos de momento.

Ideo una segunda forma, guardar el .png y cargarlo en el mismo script y devolver el string listo para insertar en el html. Perfecto! se carga la imagen sin problemas, pero no se actualiza al enviar las coordenadas... así que el sistema ajax a la porra hasta que encuentre un método eficaz para actualizar la imagen...

Así que de momento el script se queda en un simple sistema de coordenadas al cual hay que hacer un 'refresh' cada vez que se quiere modificar la imagen, eso si, la primera ves la carga con ajax o.O"

El script:

- Geometria.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Graficas by Nax</title>
<script language="javascript" src="ajax.js"></script>
</head>

<body>

<div id="opciones">
<b>Puntos:</b><br />
Inserta los puntos (0,0):<br />
<textarea name="puntos" id="puntos" cols="10" rows="5">0,0</textarea><br /><br />
<input type="button" id="enviar" value="Crear" />
</div>

<br />
<br />
<div id="grafica">Aqui va la grafica</div>
</body>
</html> 

- ajax.js
addEvent(window,'load',cargar,false);

function cargar() {
var but = document.getElementById('enviar');
addEvent(but, 'click', creargrafica,false);
}

function enviarcomentario(e) {

if(window.event)
window.event.returnValue = false;
else
if (e)
e.preventDefault();
enviarFormulario();
}

var conexion;
function creargrafica() {
var points = document.getElementById('puntos');
var ran = Math.random();
conexion=crearXMLHttpRequest();
conexion.onreadystatechange = procesarEventos;
conexion.open('GET','grafica.php?points=' + encodeURIComponent(points.value) + '&'+ ran + '=' + ran, true);
conexion.send();

}

function procesarEventos() {
var graf = document.getElementById('grafica');
if (conexion.readyState == 4) {
graf.innerHTML = conexion.responseText;
} else{
graf.innerHTML = "wait";
}

}

//Funciones comunes de ajax
function addEvent(elemento,nomevento,funcion,captura)
{
if (elemento.attachEvent)
{
elemento.attachEvent('on'+nomevento,funcion);
return true;
}
else
if (elemento.addEventListener)
{
elemento.addEventListener(nomevento,funcion,captura);
return true;
}
else
return false;
}

function crearXMLHttpRequest()
{
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}

- grafica.php
<?php
@unlink('test.png');

$points = explode(' ',preg_replace('/rn|r|n/',' ',$_GET['points']));

$y = 400; $y0 = $y / 2; //coordenadas 0,0
$x = 500; $x0 = $x / 2;

$cm = 10; //1 cm = 10 px

//basic
$img = imagecreate($x,$y);
$background = imagecolorallocate($img, 0, 0 , 0);
$color = imagecolorallocate($img, 255, 255, 255);
$green = imagecolorallocate($img, 50, 255, 0);
$red = imagecolorallocate($img, 255, 50, 0);

imagestring($img, 2, 10 ,$y-50, "http://nax-syntaxerror.blogspot.com/", $red);
//ejes basicos
imageline($img, $x0, 0, $x0, $y, $color);
imageline($img, 0, $y0, $x, $y0, $color);

// Lineas de X
for ($i = 0; $i <= $x; $i +=10)
imageline($img, 0+$i,$y0+5,0+$i, $y0-5, $color);

//Lineas de Y
for ($i = 0; $i <= $y; $i += 10)
imageline($img, $x0+5, 0+$i, $x0-5, 0+$i, $color);

//puntos
foreach ($points as $key => $value) {
$ejes = explode(',', $value);
$ejes[0] = $ejes[0] * $cm; $ejes[1] = $ejes[1] * $cm;
imageline($img, $x0+$ejes[0], $y0+(-$ejes[1]), $x0+$ejes[0], $y0+(-$ejes[1])+3, $green);
}

imagepng($img,"test.png");
echo '<img src="test.png" />';
imagedestroy($img);
?>

Cualquier duda o aporte es bien recibido
nax

Criptografía escalar [ PHP ]

Sería muy osado por mi parte decir que el método es mío, aunque quizá lo sea, la verdad se me ocurrió en clase de matemáticas.

El método se basa en el cálculo del producto escalar mediante dos vectores y me atrevo a decir, sin demasiado convencimiento, que es de vía única pero que los expertos comenten…

Un ejemplo:

Teniendo los vectores v(1,3) y w(2,1).

El producto escalar se calcula de la siguiente forma:
v*w = (1*2) + (3*1) = 2 + 3 = 5

Esta fórmula de vectores y puntos la aplicamos a una serie de símbolos siguiendo estructuras de vectores.

Es decir, a cada símbolo le asignamos un valor y dos símbolos representan un vector.

La cadena de símbolos es la siguiente:

!"#$%&'()*+-./0123456789:;<=>
?@ABCDEFGHIJKLMNOPQRSTUVWX
YZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Siguiendo el orden de la tabla ascci y quitando algún que otro carácter.

Así en la cadena “Programmers Team

Los 2 primeros vectores son:
v = (p,r)
w= (o,g)

Los substituimos por su correspondiente valor numérico v=(78,80), w=(77,69) {si no me equivoqué} y se aplica la fórmula.

v *w = (78*77) + (80*69) = 6006 + 5520 = 11526

La conversión toma de dos en dos números. 11 (-), 52 (V), 6 (')

siendo su conversión a string -V'
En definitiva, la encriptación escalar de Prog es -V’
De Programmers team |`!+j&-(T;!
De Latino Hack q3!oI!!
De Bl4ck-P0rtal Wx!C\!-+)
de CUH .X!
y para finalizar de ~ Syntax - Error ~ -j)oO!{^!!

Ahora solo resta dejar el código:

<?php
form
();
$cad explode(' ',"! \" # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~");
$men str_replace(' ','',$_POST['message']);

for (
$i 0$i strlen($men); $i += 4) {
   
$cod substr($men$i4);

   for (
$x 0$x <= 3$x ++) {
      if (! 
$cod[$x]) {
         
$cod[$x] = "!";
      }
   }

   
$v1 explode(',',array_search($cod[0], $cad).','.array_search($cod[1], $cad));
   
$v2 explode(',',array_search($cod[2], $cad).','.array_search($cod[3], $cad));
   
   
$escalar $v1[0] * $v2[0] + $v1[1] * $v2[1];

   for (
$y 0$y <= strlen($escalar); $y += 2)
      
$final .= $cad[substr($escalar$y2)];

}

echo 
'<b>Resultado encriptado:</b><br />'.$final;

function 
form() {
   echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post">
         Mensaje: <input type="text" name="message" value="'
.$_POST['message'].'" />
         <input type="submit" name="send" value="Enviar">
        </form>
   '
;   
}
?>


Cualquier duda, sugerencia o comentario es bien recibido

Apple Safari 4 y Google Chrome 4 CSS style Stack Overflow Dos/Poc

Hace cosa de 2 horas me llegaba este retweet de Dragon sobre esta vulnerabilidad.

Lastimosamente tengo el chrome 5 y no dispongo de safari así que no lo he probado.

Link del exploit: http://url4.eu/1TCJS

Trabajando con Subversion

Este es un articulo que escribí para el Programmers Team, dejo una parte y el link debajo.


Qué es subversión?

Según Wikipedia Subversión es un software de sistema de control de versiones.
Un sistema de control de versiones (RCS) es una implementación de software para el control de versiones que automatiza las tareas de guardar, recuperar, registrar, identificar y mezclar versiones de archivos.
Es decir, con SVN podemos llevar un registro de quien efectuó que cambio a cual archivo y cuando lo efectuó. En definitiva es una herramienta ideal para el trabajo en equipos de desarrollo.

Porqué usar subversión?

Como he dicho, su principal ventaja es que nos proporciona un control absoluto de los cambios que el software ha sufrido, quien los ha realizado y cuando. Aparte de estas características también podemos acceder a cualquier revisión que necesitemos con unos simples clics.
Por ejemplo si desarrollamos un software y descubrimos que a partir de la versión 23 hay un bug que nos obliga a replantearnos completamente la estructura, en dicho caso podemos volver a la versión 23 y seguir desarrollando a partir de esta.

Qué necesito para usar subversión?

Para utilizar repositorios SVN necesitaremos un host:
  • Google code
  • Source Forge
Hay muchos más, pero estos son los que a mí me han gustado.
Un cliente de subversión, a mi parecer el mejor es TortoiseSVN

Estructura de nuestro Repositorio SVN

La estructura de un SVN es completamente libre, pero se suele seguir este modelo:
Repositorio SVN (/):
  • Trunk: El tronco es la carpeta donde se ejecutan todas o casi todas las modificaciones del software, se podría considerar la carpeta de desarrollo.
  • Tags: La etiqueta se utiliza para almacenar una versión estable o con un objetivo importante realizado.
  • Branches: Las ramas se utilizan cuando queremos implementar una característica al proyecto pero no queremos hacerlo en el Trunk dada su magnitud.

Trabajar con nuestro Repositorio

Una vez creado nuestro repositorio e instalado nuestro cliente vamos a aprender a crear, configurar y trabajar con nuestro repositorio.

Crear un repositorio

Para crear el repositorio creamos una carpeta donde queremos tenerlo, en mi caso en mi localhost.
Clicamos el botón derecho y elegimos la opción SVN Checkout
se ve como hacemos un SVN checkout


En la ventana que se nos abrirá ponemos la url de nuestro host SVN agregando /trunk, ya que tomaremos y guardaremos los datos en la carpeta de desarrollo.
Imagen donde configuramos el repositorio

Recibir y enviar archivos

El comando para recibir los archivos se llama “SVN Update” así que en nuestra carpeta hacemos clic derecho y elegimos dicha opción.
Y se nos abrirá un cuadro de texto dándonos un reporte de los archivos que se modificaron, agregaron o borraron y la versión que disponemos.
Imagen donde se ve el update realizado
En mi caso no se habían ejecutado por lo que no hay archivos y solo me indica la versión actual.
Para enviar los archivos usamos la opción “SVN Commit”, así que ejecutamos dicha acción.
La ventana que se nos abrirá contiene 2 secciones. En la primera podemos agregar un mensaje a la nueva versión del repositorio, normalmente se escribe un texto explicando los cambios, o podemos agregar un mensaje anterior con el botón “Recent Message”.
En la segunda sección tenemos una lista con todos los archivos, si no recuerdo mal dispone de 3 status:

Ausente y buscado colaborador

Bueno al abrir el blog creo que pensé en una via de expresar mis conocimientos y dejar constancia de ellos...

A la ves a sido una forma de practicar un poco de SEO y ver los resultados de diversas estrategias de posicionamiento.

Durante estos 3 o 4 meses que he tenido el blog puedo decir, orgulloso, que he ido incrementando lectores poco a poco (nada exajerado pero yo no esperaba ni 5 personas).
También puedo decir que mis conocimientos se han ido incrementando a causa de este blog.
La necesida de conocer más para poder contarselo al que le interesa me ha dado las ganas de seguir avanzando y no estancarme.

Por todo ello me da cierta pena que, por motivos de estudio, este blog tenga que estar parado durante dos meses. Si que actualizaré cada semana un par de artículos, pero no los 2 artículos por día que llevaba este mes.


Por dichos motivos he pensado que seria buena idea tener un co-productor en el blog.
Es decir, si algún lector de este blog tiene ganas de escribir sobre Programación Web, SEO, vulnerabilidades o cualquier otra temática que involucre directamente el Webmastering que se ponga en contacto conmigo en esta entrada y llegaremos a un acuerdo para ser co-productor de forma indefinida.

Mientras tanto y hasta abril yo me despido y prometo, al menos, esos 2 aportes mensuales.

Un cordial saludo
nax

Vulnerabilidad en Wordpress 2.9

Thomas Mackenzie ha encontrado un bug del tipo Failure to Restrict URL Access en Wordpress 2.9 y superiors.

Los post que están en la basura pueden ser cambiados de usuarios por usuarios logueados en el sistema. Este problema sólo afecta a aquellos sitios que tengan escritores y colaboradores ajenos al círculo íntimo del blogger principal. No es un error de importancia para aquellos blogs como este en el que escribimos un número reducido de personas y que además todas somos administradoras.

Fuente: Segu-info y Linux Hispano

Uniform: Forms elegantes con JQuery

Hace unos días me llego un tweet sobre este script de JS.

Se trata de dar un punto de vista diferente a nuestros formularios, algo elegante, simple y vistoso.

La demo así como la descarga se encuentran en su página oficial:

Uniform - Sexy forms with jQuery

Minify para PHP [Optimización SEO]

Minify es una APP para PHP 5 que nos ayudará a seguir muchas de las reglas SEO de Yahoo!

Combina muchos archivos CSS y JS, elimina espacios en blanco y comentarios innecesarios y los deja en el servidor con compresión gzip y unos headers óptimos para el cliente.

Esto se resume en mayor velocidad de carga y cumplimiento de las reglas SEO de yahoo!

Antes de usar Minify:
 
Después de su uso:

El proyecto se publicó recientemente en google code: Minify on google code

Previsualizar un formulario mediante JavaScript

Hoy me pidieron ayuda con este código y lo dejo por si a alguien le es de utilidad.

Lo que hace es mostrar un "preview" de los datos de un formulario usando la propiedad .innerHTML

<html>
<head>
</head>
<script language="javascript">

function preview() {
   div = document.getElementById('previewform')
   text = "----------------" + 
         "<br /> Formulario <br />" +
         "Nombre: " + document.forms.form1.nomb.value +
         "<br />Apellido: " + document.forms.form1.apell.value +
         "<br />----------------";
   div.innerHTML = text;

}
</script>

<body>

<form id="form1" name="form1" method="get" action="pagina.php">
 <p><strong>Tú Nombre:</strong><input type="text" name="n" id="nomb"></p>
<p><strong>Tú Apellido:</strong><input type="text" name="a" id="apell"></p>
<input type="submit" value="Enviar" style="font-family: Verdana; font-size: 12px; text-align: center; width: 80; height: 25; font-weight: bold"><br>
<input type="reset" value="Borrar" style="font-family: Verdana; font-size: 12px; text-align: center; width: 80; height: 25; font-weight: bold">
<input type="button" value="Preview" style="font-family: Verdana; font-size: 12px; text-align: center; width: 80; height: 25; font-weight: bold" onclick="javascript:preview()" />
</center>
</form>

<div id="previewform"> </div>
</body>

</html>

El creador de MySQL lanza MariaDB, el sustituto de MySQL

¡Así es! El creador de MySQL Michael Wideniur, anunció en su blog personal el lanzamiento de un nuevo producto, un motor de bases de datos basado en el mismo MySQL y nos invita a testearlo.
En el sitio oficial, se puede ver toda la documentación de este nuevo motor de bases de datos. Aunque hay que tener en cuenta que este aplicativo no fue desarrollado desde cero ya que como hemos mencionado está basado en MySQL.

Leer entrada completa: Programando ideas

Vulnerabilidad en Wordpress: Full Path Disclosure

Hoy revisando los mensajes en elhacker.net leo un pequeño aviso de full path disclosure en Wordpress.

No comenta si son solo algunas versiones o todas, lo que es evidente es la vulnerabilidad.

El FPD se proudce en el directorio /wp-includes/.

El motivo, sospecho, se debe a que Wordpress trabaja mesclando varias páginas, y al abrir una de estas sin las demás se produce un error al intentar cargar una función como es el caso:

Fatal error: Call to undefined function add_filter() in /home/-censored-/public_html/wp-includes/user.php on line 70

Como se puede apreciar se produce un error intentando cargar una función llamada add_filter y eso nos da el FPD.

La solución:

Se me ocurren dos:

La primera podría ser agregar error_reporting(0); en cada linea del documento.

La segunda, depende más de la forma de trabajar de Wordpress, pero sería imitar en parte el método de SMF con un define('WP', 1) y en cada página comprobar si está definida o die();

La forma de encontrar el FPD fué al entrar al directorio /wp-includes/ y desde allí ir abriendo archivos hasta que uno de error, en caso de que no apache no nos indexen los archivos también podemos buscar los archivos afectados.

Entre los archivos afectados están update.php, user.php y rss.php por citar tres de ellos.

Ahora que conocemos el problema y la solución, solo falta protejer nuestro blog de wordpress, si lo tenemos.
Saludos

Redirecciones 301, una ves ya indexado...

Aveces en nuestro camino por mejorar el SEO descubrimos que las url actuales de las cuales disponemos (.php?var=data&other=something) no son una buena elección para indexar en un buscador y optamos por dar el paso a las url amigables (/data/something)

El principal problema viene cuando estamos indexados y dicha indexación ocupa lugares relativamente buenos en algunos buscadores.

La solución a estos problemas es la redirección 301, lo que hace esta redirección es decirle al buscador "esta url a partir de ahora será esta otra" y el bot indexa y rankea nuestra web de una forma óptima, el desastre que podriamos causar sin redirecciones 301 es inmenso...

.htaccess y la redirección 301:

Nota: Se recomiendan conocimientos previos en el manejo de htaccess


Un primer ejemplo de redirección permanente:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} !^mysite.com [NC]
   RewriteRule ^(.*)$ http://mysite.com/$1 [L,R=301]
</IfModule>



Lo que estamos haciendo es redirijir http://mysite.com hacia http.//www.mysite.com

PHP y la redirección 301:

En el documento de php colocamos:

<?php
   Header
"HTTP/1.1 301 Moved Permanently" );
   
Header"Location: http://www.mysite.com/newUrl" ); ?>


ASP y redirección 301:

<%
   Response.Status="301 Moved Permanently"
   Response.AddHeader "Location", " http://www.mysite.com/page.asp"
%>


ASP.net y redirección 301:

private void Page_Load(object sender, System.EventArgs e)
{

   Response.Status = "301 Moved Permanently";
   Response.AddHeader("Location","http://www.new-url.com");
}


Existen mas formas de redirijir con otros lenguajes, como por ejemplo HTML

pero la forma de HTML no está bien vista por los bots.

Día por la Seguridad en Internet: Piensa antes de publica

Hoy 9 de febrero, organizado por INSAFE, se celebra simultáneamente en más de 60 países la séptima edición del "Día Internacional por la Seguridad en Internet". Este año el lema escogido es "Piensa antes de publicar (Think B4 U Post!)".

INSAFE es una iniciativa Europea cuyo objetivo principal es concienciar a instituciones, educadores y padres con el fin de promover el uso seguro y responsable de las Tecnologías de la Información entre menores y adolescentes.

Leer completo en seguinfo

Chuleta vulnerabilidades OWASP Top 10 2010



Hoy en Google Reader me encuentro que Jeff Williams compartia este pdf proveniente del blog greeboo.net bajo la licencia de Creative Commons Attribution-Share.

El PDF trata de un TOP 10 de vulnerabilidades/errores a la hora de la programación de aplicaciones.

Desde las ya más que conocidas Injections y XSS pasando por sessiones de usuario desprotejidas, poca encriptación, etc.

Son 2 hojas que realmente vale la pena tener cerca a la hora de programar nuestra aplicación.

Descargar: OWASP 2010 TOP 10

0day en base de datos oracle

Un experto en seguridad informática considera que nueve de cada diez bases de datos Oracle son vulnerables a un ataque que podría dar a los hackers el acceso y control de la sensibilidad de las empresas y los sistemas de base de datos del gobierno, sin la necesidad de una identificación de usuario o contraseña.

David Litchfield, jefe de investigación en NGSSoftware Ltd, una compañía con sede en Reino Unido dijo haber reportado a Oracle la vulnerabilidad desde Noviembre (Oracle 10.2.0.4), pero no fue solucionado en los parches de seguridad de enero. Por lo que ha decidido hacerlo público (”11g 0day exploit”) durante la conferencia Black Hat en Washington el miércoles.

Litchfield dijo que “permite a un atacante sin un ID de usuario y contraseña tomar el control completo. Todos los firewalls se vuelven irrelevantes”.

Aunque es posible prevenir la explotación cambiando la configuración por defecto del software, Litchfield cree que nueve de cada diez bases de datos son vulnerables. Añadió que no había manera de saber si los hackers ya aprovechan la vulnerabilidad para acceder a una base de datos.

Mientras tanto Black Hat retiró el video de David Litchfield donde se mostraba el código y Oracle no ha hecho algún comentario al respecto.

Fuente: latinohack.com

Obtener la dirección IP [PHP]

Hoy vamos a comentar una función con la que me topé por internet para obtener una ip


<?php
function getIP() {
    if (isset(
$_SERVER)) {
    if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {
    return 
$_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    return 
$_SERVER['REMOTE_ADDR'];
    }
    } else {
    if (isset(
$GLOBALS['HTTP_SERVER_VARS']['HTTP_X_FORWARDER_FOR'])) {
    return 
$GLOBALS['HTTP_SERVER_VARS']['HTTP_X_FORWARDED_FOR'];
    } else {
    return 
$GLOBALS['HTTP_SERVER_VARS']['REMOTE_ADDR'];
    }
    }
}
 
$ip getIP();  
?>


Es una función muy simple, primero comprueba si existe el array global $_SERVER en caso de que no exista intenta hacerlo lo mismo pero mediante el array $GLOBALS.
Algunos proxyes dejan la ip del usuario en HTTP_X_FORWARDED_FOR, por esta razón primero comprobamos si exsite, en caso de que exista esa es la IP real.
Sino tomamos el valor REMOTE_ADDR.

Este script, como todos los de GETIP, no garantiza que la ip tomada sea la verdadera pero tienes mas probabilidades que con otros que he visto en la red

Las variables variables de PHP

Aunque suene un tanto raro existen y quizá cueste un poquito de captar a la primera, así que recomiendo la doble lectura.

En algún momento dado podemos necesitar que el contenido de una variable sea el nombre de la varable.
Ejemplo:
tenemos la variable $boque =  "arbol";
queremos asignarle a una variable $arbol = "verde"; pero no siempre será arbol también podria ser planta.

Entonces, como lo hacemos? Ya que:

<?php

  $bosque 
$arbol "verde"; ?>


solo conseguimos 2 variables con el valor verde, que no es lo que buscamos.
Aquí entran las variables variables.

Asignación de una variable normal:

<?php

  $bosque 
"arbol"; ?>


Ahora una variable variable siguiendo el ejemplo anterior:


<?php

  
$$bosque "verde"; ?>


Y el efecto es asignar la variable $arbol = "verde";

Saludos
Nax

Rotación de imagenes con JavaScript

Hoy es domingo y he tenido un día ajetreado así que a diferencia de otros días les dejo un code muy sencillo en javascript del cual pedian una ayuda en LH

Hace una rotación de X imágenes cada Y segundos durante un tiempo indefinido.

<html>
<head>
<title>Secuencia</title>

<script language="javascript">

var SecuenciaEjecutandose = false
var SecuenciaID = null
var imagen = 4
var duracion = 1000

if ( CompruebaVersion() ) {
imagenes = new CreaArray( 4 )
imagenes[1].src = "imagen1.jpg"
imagenes[2].src = "imagen2.jpg"
imagenes[3].src = "imagen3.jpg"
imagenes[4].src = "imagen4.jpg"
}

function CompruebaVersion() {
if (navigator.appVersion.charAt(0) >= 3 && document.images) 

return true
else return false
}

function CreaArray(n) {
this.length = n
for (var i = 1; i<=n; i++) {
this[i] = new Image()
}
return this
}

function DetenerSecuencia () {
if( SecuenciaEjecutandose )
clearTimeout(SecuenciaID)
SecuenciaEjecutandose = false
imagen = 0
}

function MostrarSecuencia () {
if (CompruebaVersion()) {
document.images["secuencia"].src = imagenes[imagen].src
imagen++
if ( imagen == 5 )
imagen = 1
}
SecuenciaID = setTimeout(" MostrarSecuencia() ", duracion)
SecuenciaEjecutandose = true
}

function IniciarSecuencia () {
DetenerSecuencia()
imagen = 1
MostrarSecuencia()
}

</script>

</head>

<body onLoad="IniciarSecuencia()">
<img src="imagen1.jpg" width="100" height="100" alt="Secuencia" 

name="secuencia"> 

</body>
</html>

 

Como se aprecia en el code el script carga 4 imágenes en un array y esas imágenes las va pasando por una etiqueta llamada secuencia.

saludos
nax

Cifrado vigenère [code PHP]

Hoy os presento un code sencillo que se comentó por DragonJAR y como estaba aburrido decidí crear un cifrador.

El cifrado es vigenerè y es, básicamente, el cifrado cesar un poco mas avanzado.

Como yo no soy bueno comentado la historia me centro en las matemáticas:

El cifrado recive 3 parámetros:

- Mensaje a cifrar
- Clave
- Cantidad de letras del abecedario (este 3er parámetro es una constante)

La fórmula del cifrado vigenère es:

Yi = (Xi + Zi) mod T

Donde:

Xi = letra original
Zi = letra clave

T = 26 (letras alfabeto -1 , ya que empezamos de 0)

Un ejemplo:

Xi = A
Zi = B

Yi = (A + B) mod 26
Yi = (0 + 1) mod 26

Yi = 1 = B

Siendo:
A = 0
Z = 26

El código es:

<?php

form
();
$message strtolower(str_replace("n"," ",$_POST['message'])); $clavestrtolower($_POST['clave']); $final "";
$letters explode(' ',"a b c d e f g h i j k l m n o p 

q r s t u v w x y z"); $saltar explode(' ''º Âª  ! | " @ Â· # $ ~ % 
â�¬ & Â¬ / ( ) = ? ' Â¿ Â¡ ^ ` [ ] + * Â¨ Â´ { } Ã§ - _ . : , ;');

for (
$i = 0, $x = 0 ; $i < strlen($message); $i++, $x++) {
   
   if (
$x >= strlen($clave))
      
$x = 0;
   
   if (in_array(
$message[$i],$saltar) || $message[$i] === ' ') {
      
$final .= $message[$i];
      
$x--;
   }else {
      
      
$vigenere = (array_search($message[$i],$letters) + 

array_search($clave[$x],$letters) ) % 26 ;

      
$final .= $letters[$vigenere];

   }
}

echo '<b>Resultado encriptado:</b><br />'.strtoupper(
$final);

function form() {
   echo '<form action="'.
$_SERVER['PHP_SELF'].'" method="post">
         Mensaje: <br /> 
            <textarea name="message">'.
$_POST['message'].'</textarea><br />
         Clave: <input type="text" name="clave" value="'

.$_POST['clave'].'" />
         <input type="submit" name="send" value="Enviar">
        </form>
   ';   
}

?>


La cadena $saltar se ha desformatado al convertir el código así que la dejo aparte:

$saltar = explode(' ', 'º ª \ ! | " @ · # $ ~ % € & ¬ / ( ) = ? \' ¿ ¡ ^ ` [ ] + * ¨ ´ { } ç - _ . : , ;');


Explicación:

Básicamente lo que hacemos es crear un array del abecedario, para asignar de forma rápida el 0 = a y z = 26.
Después de eso tomamos un bucle donde usaremos 2 contadores, $i para el mensaje y $x para la clave.

La variable que hará salir del bucle es $i, ya que cuando se acabe el mensaje se acabará el bucle.
$x sin embargo se repetirá cada vez que se termine.

La variable $saltar nos permite saltarnos ciertos carácteres que no forman parte del abecedario y disminuimos $x en 1 ya que no usamos la letra clave para encriptar.

Luego ya solo es cuestión de buscar la letra del mensaje en el array y tomar el valor de la key sumarlo al valor de la letra clave y hacer mod entre 26.

Ejemplo de uso:


Espero que les guste y quizá con mas tiempo hago el decrypter.

Cambiar mayúsculas y minusculas en la clave de un array

Hoy me vi en el aprieto de hacer una búsqueda de la clave de un array y retornar el valor.

El problema viene generado porque la clave puede estar tanto en mayúsculas como en minúsculas y eso puede afectar negativamente en la búsqueda de la clave probocando un resultado FALSE incorrecto.

Ejemplo: si busco A pero en el array existe a, dará false cuando en realidad es true.

Para hacer la búsqueda opté por una función quizá poco conocida: array_change_key_case()

Funciona de la misma manera que strtolower() y strtoupper() pero en las claves del array.

Un ejemplo de la función:

<?php

$var 
= array("Una" => 1"dOs" => 2);
var_dumparray_change_key_case($var,CASE_LOWER));
// Salida: array(2) { ["una"]=>  int(1) ["dos"]=>  int(2) }
?>


como se puede apreciar las keys ahora son en mínusculas.

Tenemos las dos posibilidades: CASE_LOWER y CASE_UPPER

Ahora podemos hacer búsquedas en arrays sin miedo a dar falsos negativos.

Rainbow Login con JQuery y PHP

Login Rainbow es un efecto del borde con varios colores simulando un arcoiris.

Me parece muy bueno estéticamente y se le puede sacar gran partido.

El código no estaba al acceso público (los JS si pero la parte php no..)

Pero un usuario a simulado los PHP y nos ha dejado este gran efecto con JQuery.

Source code

forgot.php script: http://www.manifestinteractive.com/usenet/login...
checklogin.php script: http://www.manifestinteractive.com/usenet/login...

Demo

Página de Dragon Labs

Blend: Efecto con Jquery

Este también me topé buscando sobre lightbox

Se trata de efectos de botones y fondos.

Están muy interesantes y bonitos


La demo

La descarga

En la demo vemos varios efectos, el primero es solo css

El segundo es css y jquery con el efecto blend

El tercero es css y jquery con blend y pulse (como si se encendiera y se apagara)

El cuarto es css y jquery con reverse (el mismo efecto pero al revés)

espero les guste

ColorBox un LightBox con JQuery

Cuando estaba escribiendo sobre Lightbox 2 topé con esta biblioteca que me pareció muy atractiva.

Funciona de forma similar a Lightbox 2 aunque en mi opinión es más rápida y estética.

La demo

La descarga

Para más información visiten su página web.

web: www.colorpowered.com

LightBox 2 expandir imágenes con JavaScript

Lightbox 2 es una de esas aplicaciones para poder ver la imagen en grande a partir de una miniatura en la misma página web sin necesidad de cargar un pop-up y de una forma elegante.

Lightbox 2 utiliza el framewor Prototype y Scriptaculous Effects Library.

La demo

la descarga

Un ejemplo de código:

<html>
<head> </head>
<body>
<script type=\"text/javascript\" src=\"js/prototype.js\"></script>
<script type=\"text/javascript\" src=\"js/scriptaculous.js?load=effects,builder\"></script>
<script type=\"text/javascript\" src=\"js/lightbox.js\"></script>
<link rel=\"stylesheet\" href=\"css/lightbox.css\" type=\"text/css\" media=\"screen\" />

<a href=\"images/image-1.jpg\" rel=\"lightbox\" title=\"my caption\">image #1</a>

<a href=\"images/image-1.jpg\" rel=\"lightbox[roadtrip]\">image #1</a>
<a href=\"images/image-2.jpg\" rel=\"lightbox[roadtrip]\">image #2</a>
<a href=\"images/image-3.jpg\" rel=\"lightbox[roadtrip]\">image #3</a>

</body></html>


Nota: el primer <a href=""> hace referencia a una imagen unica

los siguientes lo hacen a un grupo de imagenes (por lo cual tenemos un botón next y prev.

Web del autor

PHP 5 stars un rating con estilo

PHP 5 stars es una aplicación del tipico "rate me" con 5 estrellas.

Es algo diferente a las demás y me gusta el toque que deja

Para usarlo se necesita sqlite en el apartado PDO de nuestro hosting.

Saberlo es muy simple, simplemente creamos un script

<?php phpinfo(); ?>

lo subimos al hosting y buscamos sqli en el apartado PDO

Click here to enlarge

Ejemplo de uso:

Agregamos esto al head:



<link rel="stylesheet" type="text/css" href="rating/rating.css" media="screen"/>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" >google.load("jquery","1.3.2");</script>
<script type="text/javascript" src="rating/rating.js"></script>
<?php include('rating/rating.php'); ?>


y agregamos esto a cada objeto que queremos que tenga las estrellas:

<?php rating_form("unique_table_name"); ?> a cada elemento que queramos tener las estrellas.

donde unique_table_name es el nombre de la tabla en slqi

Demo, descarga y web del autor

saludos

La clase MySQLi

Hoy mismo hablé sobre el uso de mysql_connect pero ahora quiero hablaros de la clase MySQLi que un user de CUH (p3ll3) comentó sobre ella y yo no la habia tenido en mente.

Un código básico de MySQLi:

<?php
$con 
= new MySQLi('host''usuario''pass''db');
$query $con->Query("SELECT algo, otro FROM tabla WHERE id = 1");

while (
$q $query->fetch_object()) {
    echo 
"Hola soy ".$q->algo." y "$q->otro;

}
$query->close(); $con->close();
?>


Como se puede comprobar es bastante sencillo, creamos un objeto con la sentencia new, le decimos que se trata de MySQLi y le pasamos los parámetros de conexión: host, usuario, contraseña y base de datos, aquí ya se nota una mejora por el hecho de no tener que usar mysql_select_db().

Luego para ejecutar una consulta simplemente tomamos el objeto y le indicamos la acción Query seguida de la consulta.

Para accesar a los datos lo hacemos igual que con mysql_query solo que en el while en ves de poner mysql_fetch_array() ponemos la variable y fetch_object().

A la hora de acceder a los datos normalmente lo hariamos como un array $q['algo'] pero con MySQLi se hace así $q->algo.

Eso es todo referente a MySQLi

La Función mysql_connect

No hace mucho publiqué el siguiente artículo en el foro de CUH, el cual se ve que agradó y me solicitaron un poco mas de información, así que os dejo el post completo por si es de ayuda para alguno.

Para establecer una conexión a una base de datos mysql utilizaremos myql_connect().

Esta función se suele almacenar en una variable ya que en futuras acciones debemos decirle cual es la conexion.

Sintaxis:

$variable = mysql_connect([$host],[$usuario],[$password],[$nuevolink],[$flags])

todo es muy simple... un ejemplo de variables sería:

<?php

$host
="localhost"; $usuario="root"; $password=""//sin pass $nuevolink=true; $flags=MYSQL_CLIENT_SSL  
?>


Todos los parámetros de esta función son opcionales... y direis: COMO???, así no hay forma de saber donde conectar...

Bien, hay un detalle que parece ser que mucha gente no usa en cuanto a $host $usuario y $password...

Existe ese maravilloso PHP.ini que tiene unas directivas especialmente para esta función, y en caso de que no se pase un parámetro conectará mediante dichas directiva. Las directivas son:

mysql.default_host =
mysql.default_user =
mysql.default_password =


si les ponemos valores a estas directivas ya no hará falta especificar datos de conexión.

$nuevolink

Por defecto es false y su utilidad en true es que si hacemos otra llamada con los mismos argumentos no establecerá un nuevo link sino que utilizará el que ya se habia creado previamente, por eso no se suele usar..

$flags

Las flags de mysql_connect son:

MYSQL_CLIENT_COMPRESS
Protocolo de compressión

MYSQL_CLIENT_IGNORE_SPACE
Permitir espacios después de nombres de funciones

MYSQL_CLIENT_INTERACTIVE
Permitir los segundos interactive_timeout (en ves de wait_timeout) de inactividad antes de cerrar la conexión

MYSQL_CLIENT_SSL
Encriptación SSL

Eso es todo para mysql_connect() normalmente se usan los 3 primeros parámetros así que si no entendeis el resto no os comais mucho la cabeza