Javascript

[Manual-Javascript] Adentrandonos a Javascript [2]

Hoy pensando en algo que postear, me decidi a postear la segunda parte de nuestro manual de Javascript.

Asi que empecemos cuanto antes.


Los identificadores en Javascript

Para empezar a trabajar con Javascript primero que nada trataremos a los identificadores.

Identificadores en Javascript, es como se les conoce a todos los nombres que representan funciones, objetos, metodos, o Variables.

Estos identificadores pueden poseer cualquier nombre, desde una letra hasta una serie de caracteres,
sin embargo para que podamos trabajar correctamente con estos indentificadores, debemos seguir ciertas reglas.

Estos nombres o identificadores, deberan iniciar con una letra o con un guion bajo(_), posteriormente el texto puede ser el que uno desee, pero no debe contener espacios en blanco.
Los nombres a usar en estos identificadores, pueden ser cualquier menos alguna palabra reservada, la cual tiene un significado especial en Javascript(el cual veremos mas adelante)
Se puede tambien usar signos de pesos ($) como identificadores.

Para ubicar mejor lo que acabamos de ver veamos los siguientes ejemplos

IDENTIFICADORES VALIDOS

  1. nombre
  2. _fecha
  3. _I
  4. segmento4500
  5. _reservado
  6. otros
  7. $nuevo
  8. $


IDENTIFICADORES NO VALIDOS

  1. -nuevo
  2. .hola
  3. function //Esta es una palabra reservado
  4. 56zona
  5. ++
  6. alert //Otra palabra reservada

Las palabras reservadas en Javascript.

Com mencione anteriormente, en Javascript existen palabras que se conocen como reservadas, estas palabras tienen este nombre por que precisamente, se trata de palabras a las cuales Javascript les da un significado especial.

Estas palabras son las siguientes

Leer más

[Recursos] Analisis de la velocidad de carga de la librerias JS

John Resig nos sorprende nuevamente, ahora nos platica sobre PBWiki team, que nos es otra cosa mas que un completo analisis de las diferentes librerias Javascript que hoy en dia tenemos presentes.

Claro, como se imaginaran no es un analisis de todas las librerias, solo de las mas importantes o mas conocidas.

Como son:

  • jquery-1.2.1
  • dojo-1.0.1
  • prototype-1.6.0
  • yahoo-utilities-2.4.0
  • protoculous-1.0.2

Sin embargo que tiene de especial, este analisis que, otros no hayan hecho?.

Eso es lo mas interesante, ya que no es un analisis, realizado por los creadores del sistema, si no que es un analisis realizado por los usuarios.

Asi de esta forma, el resultado creo yo, sera mas eficaz y mas real.

Pueden checar como van los analisis en la sigueinte direccion

http://jst.pbwiki.com/summary.php

En el momento que yo entre las cosas estaban asi.

Toolkit Time Avg Samples
jquery-1.2.1 728.0895 3296
dojo-1.0.1 907.9133 3287
prototype-1.6.0 918.4553 3288
yahoo-utilities-2.4.0 922.3513 3285
protoculous-1.0.2 1131.3293 3280

Esto por supuesto es refiriendose a las librerias para Ajax-Javascript, sin duda, sera interesante esperar a ver como se va actualizando este analisis.

De momento yo me quedo con Jquery, no hay mas, aunque quizas pronto le de un chance a Mootools, la que por cierto no esta en el test.

Via | JavaScript Library Loading Speed

Leer más

[Noticias] Programar Js con Dreamweaver usando XTND

Esto si que suena super interesante.

Resulta que revisando el blog de iGeek, me encuentro con que un tal Chris Charlton, ha desarrollado una extension para Dreamweaver, la cual nos permitira trabajar mas comodamente con Javascript.

Sin meabrgo se ve que su verdadero potencial, es que nos ofrece muchisima ayuda para trabajar con algunas de nuestras librerias Javascript.

De momento XTND, da soporte a jQuery 1.2, Prototype 1.6, MooTools, Ext, y YUI.

Les dejo uan animacion para que vean su potencial, yo personalmente no me gusta mucho trabajar con Dreamweaver, por su excesivo consumo de recursos, prefiero, usar RAPID PHP, por cierto mmuy recomendable, aunque con estas mejoras quiza lo use mas seguido.

Esperemos que la proxima version de Dreamwevaer pese menos para que sea un verdadero IDE completo.

Via | XTND:Dreamweaver soporta librerias JS

Leer más

[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

[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

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