Comparacion de String con Javascript

Una de las cosas raras que me ha pasado con js fue una comparación de string.

Para los que han programado en otros lenguajes mas o menos  "modernos" saben que uno puede saber si un string es mayor que otro solo colocando la expresion "string1 > strin2" o "string1 < string2", esto en sí debería devolver 1 o 0 dependiendo de los strings ingresados. Yo pensaba que esta "regla" también se respetaba para js, GRAN ERROR SEÑOR, osea, no es TAN error, porque como siempre hay excepciones a la regla.

En firefox me funcionaba, en chrome y en ie6 no.

Ahora la solución.

Cachureando por ahi y por alla, recordando funciones de otros lenguajes(java más especificamente)  llegue a una página en la que implementó la función "compareTo", la cuál por ejemplo en java existe. Lo que hace esto es comparar caracter por caracter el unicode de cada uno y entregando el resultado. Con esto se dejan de lado los errores (que pienso que es donde se marean los navegadores) que se pueden producir por caracteres extraños, acentos por ejemplo, mayúsculas u otra cosa.

Vamos al código

JavaScript:
  1. function compareTo( s )
  2. {
  3.   var len1 = this.length;
  4.   var len2 = s.length;
  5.   var n = ( len1 <len2 ? len1 : len2 );
  6.  
  7.   for( i = 0 ; i <n ; i++ )
  8.   {
  9.     var a = this.charCodeAt( i );
  10.     var b = s.charCodeAt( i )
  11.     if( a != b )
  12.     {
  13.       return( a - b );
  14.     }
  15.   } 
  16.   return( len1 - len2 );
  17. }
  18. String.prototype.compareTo = compareTo;

Lindo no :D

Cualquier duda o sugerencia no dudes en comentar

Saludos tuto

En Defensa de los Derechos Fundamentales en Internet

Este post es por que una cosa parecida están tratando de realizar en Chile, por suerte hasta el momento no han podido.

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que:

  • Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  • La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  • La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  • La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  • Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  • Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  • Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  • Exigimos que el Gobierno garantice por ley la neutralidad de la Red, en España ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  • Proponemos una verdadera reforma del derecho de propiedad intelectualorientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  • En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Se ha publicado en multitud de sitios web. Si estás de acuerdo y quieres sumarte a él, difúndelo por Internet.

Primeros pasos con WebGl

¿Web..Como?

Webgl viene a proponer una nueva revolución en gráficos 3d en la web. Desde hace mucho tiempo que la idea estaba en el aire y faltaba alguien que la llevara a cabo, es ahi donde aparece el grupo Kronos, un conjunto de empresas relacionadas con aplicaciones basadas en graficos 3d, en donde por ejemplo está incluidas AMD, Nvidia, Intel, ARM, etc. Este grupo hace muy poco que está empezando a mostrar los resultados en torno al proyecto Webgl y los resultados que están empezando a verse dan realmente para pensar.

Existen muchos ejemplos que se están empezando a ver en la Web sobre webgl, eso que aún no muchos navegadores soportan esta tecnología, es más, solo Webkit en sus ultimas versiones y Gekko en firefox 3.7( si lo se recien están en la version 3.5.x estable) lo están implementando. Si quieres ver estos ejemplos que andan pululando por ahí te conviene instalar firefox minifield, el cuál puedes bajar de esta dirección:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/

Existen varias páginas que hablan sobre esto pero sin dudas la mejor y en la que voy a basarme para hacer los demos y esas cosas( si leiste bien, este no va a ser el primer post sobre esto :D ) es

http://learningwebgl.com/blog/

Tengo el Firefox Minifield, ¿ahora que?

Bueno ahora debes activarlo, esto se realiza:

  • Ejecuta Minifield
  • Escribe en la barra de direcciones about:config
  • Filtra por Webgl
  • Busca el comando "webgl.enabled_for_all_sites" y hazle doble click para que cambie a "true"
  • Ves que no era dificl :D

    Ahora si quieres ver algunos ejemplos mira estos:
    http://learningwebgl.com/blog/?p=11#examples

    Eso por ahora, prometo muy pronto poner un ejemplo para empezar a entender de que se trata todo esto

    Saludos tuto

    Codigo postal Valparaiso, Santiago, Curico y todo Chile

    En el blog anterior tenia este post asi que aquí está por si les sirve

    Código Postal de Algarrobo 2710000

    Código Postal de Alto Hospicio 1130000

    Código Postal de Angol 4650000

    Código Postal de Antofagasta 1240000

    Código Postal de Arica 1000000

    Código Postal de Buin 9500000

    Código Postal de Calama 1390000

    Código Postal de Calera 2290000

    Código Postal de Calera De Tango 9560000

    Código Postal de Calle Larga 2130000

    Código Postal de Cartagena 2680000

    Código Postal de Casablanca 2480000

    Código Postal de Catemu 2230000

    Código Postal de Cerrillos 9200000

    Código Postal de Cerro Navia 9080000

    Código Postal de Chiguayante 4100000

    Código Postal de Chillan 3780000

    Código Postal de Chillan Viejo 3820000

    Código Postal de Colina 9340000

    Código Postal de Concepcion 4030000

    Código Postal de Conchali 8540000

    Código Postal de Concon 2510000

    Código Postal de Copiapo 1530000

    Código Postal de Coquimbo 1780000

    Código Postal de Coronel 4190000

    Código Postal de Curacavi 9630000

    Código Postal de Curico 3340000

    Código Postal de El Bosque 8010000

    Código Postal de El Monte 9810000

    Código Postal de El Quisco 2700000

    Código Postal de El Tabo 2690000

    Código Postal de Estacion Central 9160000

    Código Postal de Hijuelas 2310000

    Código Postal de Hualpen 4600000

    Código Postal de Huara 1140000

    Código Postal de Huechuraba 8580000

    Código Postal de Independencia 8380000

    Código Postal de Iquique 1100000

    Código Postal de Isla De Maipo 9790000

    Código Postal de La Cisterna 7970000

    Código Postal de La Cruz 2280000

    Código Postal de La Florida 8240000

    Código Postal de La Granja 8780000

    Código Postal de La Pintana 8820000

    Código Postal de La Reina 7850000

    Código Postal de La Serena 1700000

    Código Postal de Lampa 9380000

    Código Postal de Las Condes 7550000

    Código Postal de Limache 2240000

    Código Postal de Linares 3580000

    Código Postal de Llay-llay 2220000

    Código Postal de Lo Barnechea 7690000

    Código Postal de Lo Espejo 9120000

    Código Postal de Lo Prado 8980000

    Código Postal de Los Andes 2100000

    Código Postal de Los Angeles 4440000

    Código Postal de Lota 4210000

    Código Postal de Macul 7810000

    Código Postal de Maipu 9250000

    Código Postal de Maria Pinto 9620000

    Código Postal de Melipilla 9580000

    Código Postal de Nogales 2300000

    Código Postal de Ñuñoa 7750000

    Código Postal de Osorno 5290000

    Código Postal de Padre Hurtado 9710000

    Código Postal de Padre Las Casas 4850000

    Código Postal de Paine 9540000

    Código Postal de Panquehue 2210000

    Código Postal de Pedro Aguirre Cerda 8460000

    Código Postal de Peñaflor 9750000

    Código Postal de Peñalolen 7910000

    Código Postal de Penco 4150000

    Código Postal de Pica 1170000

    Código Postal de Pirque 9480000

    Código Postal de Pozo Almonte 1180000

    Código Postal de Providencia 7500000

    Código Postal de Puchuncavi 2500000

    Código Postal de Pudahuel 9020000

    Código Postal de Puente Alto 8150000

    Código Postal de Puerto Montt 5480000

    Código Postal de Punta Arenas 6200000

    Código Postal de Putaendo 2190000

    Código Postal de Quilicura 8700000

    Código Postal de Quillota 2260000

    Código Postal de Quilpue 2430000

    Código Postal de Quinta Normal 8500000

    Código Postal de Quintero 2490000

    Código Postal de Rancagua 2820000

    Código Postal de Recoleta 8420000

    Código Postal de Renca 8640000

    Código Postal de Rinconada 2140000

    Código Postal de San Antonio 2660000

    Código Postal de San Bernardo 8050000

    Código Postal de San Esteban 2120000

    Código Postal de San Felipe 2170000

    Código Postal de San Fernando 3070000

    Código Postal de San Joaquin 8940000

    Código Postal de San Jose De Maipo 9460000

    Código Postal de San Miguel 8900000

    Código Postal de San Pedro De La Paz 4130000

    Código Postal de San Ramon 8860000

    Código Postal de Santa Maria 2200000

    Código Postal de Santiago 8320000

    Código Postal de Santo Domingo 2720000

    Código Postal de Talagante 9670000

    Código Postal de Talca 3460000

    Código Postal de Talcahuano 4260000

    Código Postal de Temuco 4780000

    Código Postal de Tiltil 9420000

    Código Postal de Valdivia 5090000

    Código Postal de Valparaiso 2340000

    Código Postal de Villa Alemana 6500000

    Código Postal de Viña Del Mar 2520000

    Código Postal de Vitacura 7630000

    Documentando Código con Natural Docs

    Para leer este post debes haber tenido que al menos pasar por algunas de las siguientes situaciones:

    • Haber programado al menos el reloj despertador
    • Haber tenido que explicarle al menos a tu mama como se programaba la tele
    • Haber tenido que explicarle a algún cliente por correo que su página web es mejor sin flash
    • Haber tenido que realizar algún manual de usuario
    • Haber tenido que explicar por msn como conectar un pc a internet
    • Realizar un mapa a alguien para que llegue a alguna parte
    • Haber escrito a una polola en una carta las razones por las que no quieres estar con ella
    • Haber tenido que dejar un papel explicando que el almuerzo lo dejaste listo y que en la olla grande esta el plato fuerte, en la chica la sopa y en el refri la ensalada
    • Escribir un cheque

    ¿Qué tiene que ver todo esto con Natural Docs?

    :D , Bueno si se fijan, todas las opciones exceptuando las 2 primeras, son acciones en las que has tenido que dejar constancia, tanto en papel, como en digital, de algún procedimiento o acción que realizaste.  Ahora por otra parte, cuando programas o realizas proyectos de software también debemos dejar constancia de lo que hemos realizado, esto se realiza por varias razones: Mejorar la comprensión del problema, Tener registro de lo que se realizó, Poder mejorarlo en el futuro,  Pensar en los que tomaran el código en futuras generaciones( Uno de los mas importantes :p), etc. Todo lindo hasta aquí pero ¿A los computines les gusta realizar esta tarea?, la respuesta obviamente es no, muchas veces llega a ser un martirio, otras no hay tiempo y otras simple y llanamente nos hacemos los lesos y no la hacemos :D . ¿Alternativas?, si,  buscar metodologías agiles de desarrollo, las cuales no se basan( no se mal entienda, no las dejan de lado) en la documentación y prefieren dar prioridad a escribir el código, la comunicación con el cliente entre otras. En mi trabajo nosotros utilizamos estas formas de trabajar, pero esto trae consigo que muchas veces no tienes idea nisiquiera de cuál es la magnitud de lo que estás desarrollando y el código que están realizando llega a ser mostruosamente grande.   Por todas estas razones una forma de crear documentación y no "invadir" en demasía al programador su "valioso" tiempo es utilizar los mismos comentarios que el utiliza en su código para generar una documentación que permite observar funciones, clases, métodos, con sus respectivos atributos y otras cosas que puedan tener.

    Ahora a lo que vinimos, despues de esa introducción, vamos a revisar uno software que te toma los comentarios en el código y los transforma en una documentación de muy buena calidad .

    Natural Docs

    Desarrollado por Greg Valure es un generador de documentación escrito en PERL. Su forma de uso es muy simple( Suponiendo que estas en linux y tienes instalado PERL) bajamos el archivo comprimido desde aquí(en la versión estable actual 1.4).  Una vez que descomprimimos el interior te darás cuenta que posee una serie de archivos y carpetas,junta todo en una carpeta por ejemplo con nombre "NaturalDocs". Ahora le das permiso de ejecución al archivo NaturalDocs ( chmod 755 NaturalDocs), con esto ya estamos casi listos para tener nuestra documentación, pero aún faltan algunas cosas por responder.

    ¿Soporta todos los lenguajes de programación?

    Casi :D , bueno en realidad en la página de NaturalDocs aparece que soporta 19 lenguajes, pero existe un truco, si leen bien la documentación existe la posibilidad de que se agreguen mas lenguajes de manera muy simple, solo debes en un archivo de configuración darle la extención de los archivos y la forma en que se comenta.

    ¿Los comentarios no deben tener alguna estructura?

    Jejeejej, creian que todo iba a ser tan fácil, pero no se preocupen no es la gran cosa. Por ejemplo si queremos comentar una clase

    /*
    Class: Counter
    A class that manages an incrementing counter.
    */
    class Counter
    {
    public:
    /*
    Constructor: Counter
    Initializes the object.
    */
    Counter()
    { value = 0; };
    /*
    Function: Value
    Returns the value of the counter.
    */
    int Value()
    { return value; };
    /*
    Function: Increment
    Adds one to the counter.
    */
    void Increment()
    { value++; };
    protected:
    /*
    Variable: value
    The counter's value.
    */
    int value;
    };

    Como ven no es nada del otro mundo y estoy seguro que muchos de ustedes ya usan comentarios parecidos, ahora existen muchas otras formas de realizar esto y darle mas potencia a la documentación por ejemplo miren con una función

    /*
    * Function: Multiplicar
    *
    * Multiplica dos enteros.
    *
    * Parameters:
    *    x - El primer entero.
    *    y - El segundo entero.
    *
    * Returns:
    *    El producto de ambos enteros.
    *
    * Ver también:
    *
    */
    int Multiplicar (int x, int y)
    {  return x * y;  };

    Ahora le dimos una breve descripción de la funcion, que los parametros que recibe son x e y, que es lo que retorna y que esa función esta relacionada con otra, la idea es que todo eso despues queda reflejado en la documentación generada.

    La gamma de diferentes cosas que puedes realizar con los comentarios descubranlos en la pagina del soft.

    Ahora como ejecuto tal maravilla.

    Bueno esto es muy simple, anteriormente le habíamos dado permisos de escritura al script NaturalDocs, bueno ahora debemos ejecutarlo con los siguientes parámetros como mínimo

    NaturalDocs -i [input (source) directory]
    -o [output format] [output directory]
    -p [project directory]
    [options]

    Como eso no dice mucho un ejemplo

    NaturalDocs -i home/tuto/My Project/Source
    -o FramedHTML home/tuto/My Project/Docs
    -p home/tuto/My Project/Natural Docs

    Un poco de explicación: La primera dirección que le damos es la carpeta donde tenemos el código que queremos documentar, la segunda direccion es la carpeta donde guardaremos nuestra documentación y la tercera es una carpeta que debemos crear para que NaturalDocs escriba unos archivos( como una carpeta temporal). Existen muchas otras opciones que puedes agregarle pero eso véanlo aca y eso es todo, el soft se encarga de todo, es muy configurable y puedes crear documentaciones muy profesionales ,algunos ejemplo aquí.

    Ahora una última pregunta para terminar

    ¿Existen otros documentadores de código?
    Por supuesto y algunos muy o más buenos que este( lo publiqué porque a mi me gusta mucho este soft), por ejemplo aquí puedes ver una comparativa entre los más populares

    Bueno eso por hoy

    El link de la página es LINK

    Espero les sirva

    saludo tuto

    Algunas cosas indispensables para comenzar tu desarrollo web …Libres, PARTE I –Editores de texto–

    Bueno, muchos discreparán conmigo de las cosas que utilizan para llevar a cabos sus proyectos web, pero no está mal como un comienzo, así que la lista que aquí voy a comentar es la que en particular utilizo para gran parte de mis proyectos. En este primer post veremos los editores de texto.
    Una observación es que yo no soy diseñador, yo desarrollo más del lado de la programación, soy de los que cree "pastelero a tus pasteles", así que seguramente aquí me faltarán una serie de otras herramientas que seguramente existen pero listaré las que son más de mi agrado.

    Editores de código

    NOTEPAD++

    http://notepad-plus.sourceforge.net/commun/images/cameleon.jpg

    El clásico editor de windows "upgradeado" un millón de veces :P . Realmente es un gran editor, el soporte de una lista interminable de lenguajes te permite trabajar en muchos archivos y de diferentes cosas ( por ejemplo, html, css y js) al mismo tiempo, yo sé que esto lo puedes lograr con una serie de otros programas, pero sinceramente en ningún otro he visto tanto soporte de diferentes lenguajes y en tan poco peso( Kb). Su manejo de tags es otra gracia, ya que en lo personal no me gusta los editores que te autocompletan los tags de html por ejemplo, para mi es un poco incomodo, en cambio aca lo que realiza notepad++ es ir remarcando el tags que estas cerrando al momento que lo vas escribiendo. Las sugerencias por parte de los editores a lo que vamos escribiendo también es diferenciador acá, ya que la opción está, pero solo saldrá cuando nosotros queramos ya que combinando la tecla Crtl+Barra espaciadora te aparecerá lo que Notepad++ te sugiere, esto lo encuentro super útil ya que a veces el proceso de abrir la sugerencia por parte de otros editores hace que se produscan lags al momento de escribir. Trae un buscador que permite realizar estas búsquedas en archivos, por ejemplo le damos una palabra y una carpeta en donde buscar y nos dará todos los resultados encontrados, muy buena opción. El resto de las opciones les toca a ustedes encontrarlas, son muchas y se necesitaría un post completo para explicarlas todas, lo importante es que es muy bueno y totalmente recomendable.

    Geany

    http://www.geany.org/images/geany.png

    Este editor lo utilizo cuando uso Linux( si lo reconosco, a veces uso windows), me gusta al igual que Notepad++ porque es muy liviano y puedes realizar muchas cosas. Por ejemplo algunos de los lenguajes soportados son C, Java, JavaScript, PHP, HTML, CSS, Python, Perl, Ruby, Pascal y Haskell (según Wikipedia).  Tiene características muy parecidas a Notepad++, pero la diferencia es que al estar hecho en GTK2 tiene versiones en linux y windows. Soporta projectos y tiene una terminal incluida, muy bueno cuando quieres ir compilando de inmediato.

    VIM

    Vim logo

    Hablar de Vim es hablar de un grande entre los grandes,  sucesor del editor de los sistemas Unix VI, tiene todo lo que un programador necesita y de forma rápida y optimizada. Al principio un poco complicado de utilizar, a medida que se va tomando "ritmo" el potencial crece y crece, sorprende  por la gran cantidad de funcionalidades que posee y de lo sencilla que es su manera de editar los textos. A diferencia de los anteriores editores Vim se utiliza en una consola de comandos, teniendo que realizar la mayoría de las opciones mediante la combinación de teclas. La posibilidad de poder formatear el texto mediante expresiones regulares es muy potente y se pueden obtener resultados sorprendentes con unas pocas intrucciones. Estas son solo algunas características, se podrían escribir 1000 posts para eso, como conclusión se podría decir que si no tienes mucha experticia en el manejo de consolas de comandos, primero prueba uno de los editores anteriores, pero sí aún te gustan los desafíos adelante, totalmente recomendado.

    Sin duda existen mas de 1 millón de editores más que podrían utilizar( por ejemplo se me viene Emacs a la cabeza), pero con cualquiera de estos tres puedes comenzar sin problemas, si tienes algún otro que te guste anótalo en los comentarios( Recuerda que deben ser libres :D ).

    En el próximo post veremos editores de imágenes libres.

    Espero les haya servido

    Saludos tuto