Ajax

[Tip-Javascript] Desempaquetando scripts

Atendiendo a un email que me llego, de parte de uno de mis lectores, he decidido hacer un post para darle seguimiento a su problema.

Resulta que hace tiempo yo puse una solucion para que si tenemos un script escrito en Javascript, lo pudieramos empaquetar, esta solucion consta de un programa, el cual mediante diversos mecanismos, comprime y por asi decirlo empaqueta nuestro codigo.

Hasta ahi todo bien, sin embargo que pasa si tenemos empaquetado nuestro codigo y deseamos hacer la inversa?, osea desempaquetar el codigo?.

Primero tenemos un programa que empaqueta codigo y tambien desempaqueta, pero solo desempaqueta el codigo, que le indicamos anteriormente que nos empaquete, este programa lo pueden localizar en la siguiente pagina web.

http://dean.edwards.name/packer/

Primero debemos bajar el codigo fuente de este programa (de preferencia en PHP), por que aun no se como programar bien en perl y quiza tengan problemas.

Si tienen dudas sobre la instalacion de apache o la configuracion de php pueden checar el manual que escribi anteriormente en el blog.

Manual de instalacion y configuracion de apache con windows

Ahora bien ya que hemos descargado nuestro codigo vamos a extraerlo y lo ponemos en nuestro servidor web, que por defualt seria Localhost

Si lo hemos hecho por default y lo descomprimimos directamente en raiz, podremos entrar usando la siguiente direccion: http://localhost/packer.php-1.0/.

Ahi veremos los siguiente archivos
Index of /packer.php-1.0

  • Parent Directory
  • class.JavaScriptPacker.php
  • class.JavaScriptPacker.php4
  • example-file.php
  • example-inline.php
  • readme.txt

abrimos el archivo example-inline.php y veremos una pagina donde podemos comprimir nuestro codigo javascript, podemos hacer la prueba con cualquier js que tengan a la mano.

Yo por ejemplo use el parte del codigo de la mini-libreria JXS, asi pues si tenemos el siguiente codigo

.
....
.......
................
Jxs=
{
_D:function(_i,_t,_d,_p,_ta)
{
if(typeof _ta!="undefined"||_ta!=0)Jxs._T(_i,_ta);
var _id=_I(_i);
_id.onkeydown=function(e)
{
var _tcl=(typeof e=="undefined")?window.event.keyCode:e.which;
switch(_t)
{
case"R":
var _ind=_d.split(",");
var _exp=(_p==true)?"_tcl<_ind[0] || _tcl>_ind[1]":"_tcl>_ind[0] && _tcl<_ind[1]";
if(eval(_exp)){if(e)e.preventDefault();return false;}
else{return true;}
break;
case"A":
var _ind=_d.split(",");
var _ctrl=0;
var _tam=_ind.length;
var _exp=(_p==true)?"_ind[i]==_tcl":"_ind[i]==_tcl";
var _ret=(_p==true)?"!_ctrl":"_ctrl";
for(i=0;i<_tam;i++)
{_ctrl+=(_ind[i]==_tcl)?1:0;}
if(eval(_ret)){if(e)e.preventDefault();return false;}else{return true;}
break;
case"U":
var _exp=(_p==true)?"_tcl!=_d":"_tcl==_d";
if(eval(_exp))
{if(e)e.preventDefault();return false;}
else{return true;}
break;
default:
var _exp=(_p==true)?"_tcl!=_d":"_tcl==_d";
if(eval(_exp))
{if(e)e.preventDefault();return false;}
else{return true;}
break;
}
}
},
_T:function(_i,_ta)
{
var _id=_I(_i);
if(typeof _ta=="undefined"||_ta==0)
{return true;}
else
{
_id.maxLength=_ta;
_id.setAttribute("size",_ta);
return true;
}
},
_V:function(_t,_i,_e,_m)
{
var _id=_I(_i);
switch(_t)
{
case"txt":
var _v=_V(_i);
var _l=(typeof _m!="undefined")?'_v=="" || _v.length<_m':'_v==""';
if(eval(_l))
{
alert(_e);
_F(_i);
return false;
}
else
{
return true;
}
break;
case"mail":
var emailStr=_V(_i);
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s"+specialChars+"\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars+'+';
var word="("+atom+"|"+quotedUser+")";
var userPat=new RegExp("^"+word+"(\\."+word+")*$")
var domainPat=new RegExp("^"+atom+"(\\."+atom+")*$")
var matchArray=emailStr.match(emailPat)
if(matchArray==null){alert(_e);_F(_i);return false;}
var user=matchArray[1];
var domain=matchArray[2];
if(user.match(userPat)==null){alert(_e);_F(_i);return false;}
var atomPat=new RegExp(atom,"g");
var domArr=domain.match(atomPat);
var len=domArr.length;
if(domArr[domArr.length-1].length<2||domArr[domArr.length-1].length>3){alert(_e);_F(_i);return false;}
if(len<2){alert(_e);_F(_i);return false;}
break;
default:
var _v=_V(_i);
var _l=(typeof _m!="undefined")?'_v=="" || _v.length<_m':'_v==""';
if(eval(_l))
{
alert(_e);
_F(_i);
return false;
}
else
{
return true;
}
break;
}
}
};
etc
etc etc etc
...................
.........................
..........................

Copiamos y pegamos el codigo y lo pegamos, despues le damos click en donde dice pack y listo con eso obtenemos nuestro codigo comprimido

Y queda asi

eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k1||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k1){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1)}}return p}('T={1b:C(6,B,l,o,c){7(y c!="w"||c!=0)T.Q(6,c);4 q=J(6);q.1i=C(e){4 9=(y e=="w")?1k.17.19:e.1c;N(B){z"R":4 a=l.O(",");4 n=(o==8)?"9<a>a[1]":"9>a[0] &amp;amp;&amp;amp; 9</a><a>3){r(m);t(6);5 b}7(10<2){r(m);t(6);5 b}j;15:4 h=G(6);4 H=(y x!="w")....

Interesante verdad??, pero como lo descomprimimos???.

Facil, notaran que hay un boton que dice decode, lo presionamos y veremos nuestro codigo tal cual fue hecho, ahora bien como notaron el campo es de solo lectura, asiq ue de momento no podremos pegar ningun tipo de codigo dentro de ese cuadro.

Entonces vamos a modificarlo:

1.- Abrimos el archivo example-inline.php, con un editor de php(o Vim/bloc de notas)

2.- En la linea 78 , veremos el siguiente codigo

 <textarea id="packed" cols="80" rows="10" readonly="readonly"></textarea>........

3.- Ahora solo quitaremos el readonly=”readonly” para que podamos escribir cualquier cosa dentro del recuadro y nos quedara asi.

<textarea id="packed" rows="10" cols="80"></textarea>

4.-Lo guardamos y listo recargamos la pagina del empaquetador en nuestro navegador, y veremos que ya podemos pegar nuestro codigo.

eval(function(p,a,c,k,e,d){e=function(c){return(c<a ?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k1||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k1){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1)}}return p}('l 14=h(1t){l 3F=h(){k(9.1l&&U[0]!=\'5t\')f 9.1l.2s(9,U);R f 9};P(l o 1f 9)3F[o]=9[o];3F.M=1t;f 3F};14.1A=h(){};14.M={J:h(1t){l 3l=Q 9(\'5t\');l 5n=h(23,1j){k(!23.2s||!1j.2s)f L;f h(){9.1k=23;f 1j.2s(9,U)}};P(l o 1f 1t){l 23=3l[o];l 1j=1t[o];k(23&&23!=1j)1j=5n(23,1j)||1j;3l[o]=1j}f Q 14(3l)},1Y:h(1t){P(l o 1f 1t)9.M[o]=1t[o]}};1I.J=h(){l O=U;O=(O[1])?[O[0],O[1]]:[9,O[0]];P(l o 1f O[1])O[0][o]=O[1][o];f O[0]};1I.4A=h(){P(l i=0;i<u .V;i++)U[i].J=14.M.1Y};Q 1I.4A(4k,1h,3N,6e,14);k(4Y 2L==\'5q\'){l 2L=14.1A;2L.M={}}R{2L.M.4C=19}T.J=B.J=1I.J;l 70=T;h $n(K){k(K===1D||K===5q)f L;l n=4Y K;k(n==\'3L\'){k(K.4C)f\'W\';k(K.1g)f\'1r\';k(K.6V){1K(K.5r){12 1:f\'W\';12 3:f K.6W.11(/\\S/)?\'6E\':\'3X\'}}}f n};h $2Y(K){f!!(K||K===0)};h $6H(K,5E){f($n(K))?K:5E};h $5k(33,1S){f u.7K(u.5k()*(1S-33+1)+33)};h $4v(1o){7t(1o);7u(1o);f 1D};k(T.5a)T.2a=T[T.4D?\'7B\':\'4j\']=19;R k(B.5Q&&!B.7J&&!7E.7q)T.29=19;.....

Nos queda algo como:

var(properties){var klass=function(){if(this.initialize&&arguments[0]!='noinit')return this.initialize.apply(this,arguments);else return this};for(var property in this)klass[property]=this[property];klass.prototype=properties;return klass};Class.empty=function(){};Class.prototype={extend:function(properties){var pr0t0typ3=new this('noinit');var parentize=function(previous,current){if(!previous.apply||!current.apply)return false;return function(){this.parent=previous;return current.apply(this,arguments)}};for(var property in properties){var previous=pr0t0typ3[property];var current=properties[property];if(previous&&previous!=current)current=parentize(previous,current)||current;pr0t0typ3[property]=current}return new Class(pr0t0typ3)},implement:function(properties){for(var property in properties)this.prototype[property]=properties[property]}};Object.extend=function(){var args=arguments;args=(args[1])?[args[0],args[1]]:[this,args[0]];for(var property in args[1])args[0][property]=args[1][property];return args[0]};Object.Native=function(){for(var i=0;i<arguments.length;i++)arguments[i].extend=Class.prototype.implement};new Object.Native(Function,Array,String,Number,Class);
if(typeof HTMLElement=='undefined'){var HTMLElement=Class.empty;HTMLElement.prototype={}}
else{HTMLElement.prototype.htmlElement=true}
window.extend=document.extend=Object.extend;
var Window=window;function $type(obj){if(obj===null||obj===undefined)return false;var type=typeof obj;if(type=='object'){if(obj.htmlElement)return'element';if(obj.push)return'array';if(obj.nodeName){switch(obj.nodeType){case 1:return'element';case 3:return obj.nodeValue.test(/\S/)?'textnode':'whitespace'}}}return type};function $chk(obj){return!!(obj||obj===0)};function $pick(obj,picked){return($type(obj))?obj:picked};

Sin duda esta herramienta es de gran ayuda para que estudiemos como estan programadas las grandes librerias, y no solo eso si no ver como podemos implementarlas mejor y quizas hasta desarrollar algun tipo de plugin, en fin solo la imaginacion puede ser nuestro limite.</p>

Un saludo especial a nuestro amigo David, que sin sus dudas, este post no hubiera sido escrito, y te mando los scripts por mail, saludos.

Leer más

[Video] Ejemplo de funcionamiento de Jaxer

¿Saben quien es Dion Almer?

Es uno de los fuindadores de Ajaxian.com, sin duda uno de los sitios mas importantes en el mundo Ajax, pues el creo un video para que veamos la funcionalidad y las grandes ventajas de Jaxer, el video esta en ingles, pero como simplemente muestra el codigo, es sumaamnete facil de entender, en este video nos muestra como hacer un proxy para tener Twitter en nuestro localhost.

chequen el video y veran hasta donde puede llegar Javascript

Leer más

[Ajax] Jaxer, ejecutando Ajax y Javascript en el servidor

En muchos blogs, he escuchado hablar sobre Jaxer, asi que, como sabran que me encanta programar en Javascript, les voy a platicar si es que no se han enterado sobre Jaxer.

Jaxer Javascript web server

¿Que demonios es Jaxer?
Jaxer es un servidor ajax el cual nos permitira ejecutar aplicaciones Javascript dentro del servidor (Server-Side), este servidor fue creado por los mismos desarrolladores de el IDE Aptana.

¿Y de que nos sirve ejecutar Javascript en el servidor?

Bueno, recordemos que hace años Javascript era un lenguaje, que practicamente estaba por desaparecer, y solo servia para la validacion de formularios, sin embargo gracias a la llegada de Ajax, el mundo cambio la forma de ver a Javascript, como una herramienta extra a verlo de forma necesaria e implementar nuevas soluciones con esta valiosisima herramienta.

Imaginemos entonces, cuanto a crecido el mundo Ajax-Javascript, tanto que hoy en dia podemos encontrar juegos desarrollados con este lenguaje(precarios pero algo es algo), animaciones, librerias, Frameworks, he inclusive hasta sistemas que emulan ser un verdadero Sistema Operativo(WEB – OS).

Lo mas avanzado sin duda que hemos visto ultimamente desarrollado con Javascript ha sido la implementacion de Ajax, Desarrollo de Juegos, Web-Os, Paginas Offline que se almacenan en una base de datos embedida(Google Gears), etc.

Entonces si Javascript ha crecido tanto en tan poco tiempo, imaginemos que pasaria si se ejecutara en el servidor, sin duda las posibilidades serian muchas.

Bueno ya sabemos para que es, que es y sus ventajas(creo), ahora vayamos a ver como funciona.

Jaxter trabaja como un servidor el cual esta implementado bajo Apache Web Server.

Lo primero que haremos sera ir a bajar el servidor web Jaxer en la siguiente direccion Web http://www.aptana.com/jaxer/, y lo bajamos a nuestro equipo.

Nota: Existen versiones para descargar tanto en Windows, Linux y Mac.

Una vez descargado lo descomprimimos, y ya que lo hemos descomprimido ejecutamos el archivo configure FireWall.exe, para que nos permita configurar el puerto donde vamos a correr nuestro servidor, que por default correra en el puerto 8081.

Ahora ejecutamos, el archivo (en caso de windows) StartServers.bat el cual (para los curiosos) contiene lo siguiente.

Leer más

[Noticia] asQuery, portando jQuery a action script

Apenas me entero de que Jquery a lierado su nueva version, la 1.2.2 de parte de Seraphinux, y me entero de esta noticia.

Resulta que “nitoyon”, ha portado Jquery a action script y ha creado asQuery, con lo cual podemos hacer, cosas como.

Creacion de instancias y monitoreo de eventos
Interpolaciones
Selectores de CSS

y con esto

function animate(f:Boolean):void {
       // Select 'RoundRect' elements using CSS selector
        $("RoundRect:" + (f ? "odd" : "even"))
                .addTween({
                        rotation: 90,
                        scaleX: 0.5,
                        scaleY: 0.5,
                        time: 0.6,
                        delay: 0.3,
                        transition: "easeOutCubic"
                })
                .addTween({
                        scaleX: 1,
                        scaleY: 1,
                        time: 0.5,
                        delay: 0.9,
                        transition: "easeOutElastic",
                        onComplete: function():void {
                                // restore the rotation and call again.
                                this.rotation = 0;
                                animate(!f);

                        }
                });
}

Podemos crear cosas como esta:

asquery

Vemos como con jQuery podremos hacer lo que uno quiera, mmm en algun lado, vi como agregar funciones PHP a Javascript paar que funcionen igual, dejenme lo checo y les aviso.

Por cierto estoy enfermo, saludos.

Via | asQuey: Port to Action Script.
Ejemplos y mas | asQuery alpha version

Leer más

[Ajax] dojo.moj.oe ¿? el script.aculo.us de dojo!!

Como todos sabemos existe una libreria que se llama script.aculo.us, la cual va de la mano con prototype(otra popular libreria), si embargo a los creadores de “dojo” se el ocurrio simular a la pagina de script.aculo.us, con un buen nombre, dojo.moj.oe.

Si antes teniamos esto:
script.aculo.us

Ahora tenemos tambien esto:

dojo.moj.oe

[corregido]Actualizacion de correccion, gracias a seraphinux[/corregido]

Via | dojo.moj.oe! – parodia de script.aculo.us pero con dojo!
Link de la imitacion
dojo.moj.oe

Leer más

[Video] Creando efectos con ajax y Dreamweaver

Sin duda, ajax es una gran forma de aplicar grandes tecnologias, tanto del lado del servidor como del lado por parte del cliente.

Sin embargo, no a todos se les puede facilitar crear efectos vistosos con ajax, por ello, me dedique a buscar, algun video que nos mostrar una forma facil de realizarlo.

Por ello encontre un video donde nos muestran, como hacer aplicaciones con efectos Ajax, usando Dreamweaver y el Framework Adobe Spry, se que muchos diran que existen otras frameworks o librerias para poder realizar algo similar o inclusive mucho mejor, pero en este blog trato de mostrar diferentes opciones para poder desarrollar nuestros proyectos.

http://www.metacafe.com/watch/808504/

Lo mas interesante de este video es que esta en español, aunque resulta curioso el tono en el cual esta grabado.

Sin duda una herramienta mas para desarrollar apliaciones ajax.

Leer más

[Recursos] EditArea, Un editor enriquecido

A veces, cuando tenemos que elejir un editor para agregarlo a una pagina web, siempre, nos surgen dudas, sobre cual usar, que si FCKEditor, o TinymcEditor entre otros.

Por eso ha surgido EditArea, un editor escrito en Javascript, el cual sin duda nos deja gran sabor de boca, por sus carateristicas este editor es, mas bien un editor de codigo fuente, el cual esta diseñado para editar archivos de codigo fuente, como php, Css, html entre otros.

Pero sin duda lo mas importante es que incorpora coloreado de sintaxis.

Edit area

Entre sus caracteristicas destacan:

  • Fácil de integrar, incluir sólo un script y una llamada a la función
  • Tabulación de apoyo (permitir a escribir bien el formato de código fuente)
  • Buscar y reemplazar (con regexp)
  • Personalizable en tiempo real de sintaxis (en la actualidad: PHP, CSS, Javascript, Python, HTML, XML, VB, C, CPP, Pascal, Basic, Brainf * ck)
  • Auto-sangrado nuevas líneas
  • Enumeracion de Línea
  • Multilenguaje soporta (en la actualidad: croata, danés, Inglés, francés, alemán, italiano, japonés, polaco, portugués)
  • Posible compresión gzip con PHP(comprimir los 12 principales archivos a un archivo de ~ 20Kb)
  • Permitir múltiples instancias
  • Modo de pantalla completa
  • Posible integración mediante plugin
  • Posibilidad de guardar y cargar las funciones de llamada
  • Posibilidad de gestión dinámica de contenidos
  • Pueden trabajar en el mismo entorno de “protype” y “mootools”.

Para usar lo es tan simple como esto, poner un id a nuestra area de texto y, a continuación, escribir nuestro siguiente codigo Javascript:

Leer más

Historico de entradas

febrero 2012
L M X J V S D
« ene    
 12345
6789101112
13141516171819
20212223242526
272829  

Ajaxman

Mi nombre es Javier, soy desarrollador web con especialización en PHP (avanzado), HTML, CSS y Javascript(Medio).

Me considero evangelizador de Kohana Framework, Mozilla Firefox y GNU/Linux Debian.

Estoy casado, y tengo dos hermosos hijos.

Todos los contenidos a menos que se exprese lo contrario estan bajo licencia Creative Commons.

Enlazanos!!

hit counters online counter