Archivo Enero, 2010
Programando en javascript en el navegador
Por Scipion - Aplicacion web, JavaScript, Navegadores, SEO - 29 Enero 2010
He probando por recomendación de ThinkWasabi una herramientilla bastante util que se llama Quix. Tiene muchisimas funcionalidades y funcina a base de comandos, por eso es interesante mirarse la ayuda que tiene para ejecutarlos. Tiene cosas utiles para SEO y reducción de URLs, en fin lo que le pedirias a un monton de addons pero solo en uno y bueno … por comandos, al que no le guste nada, pero está bastante bien.

Quix
Va directamente desde el navegador, lo arrastas y lo pegas y te sale una pantallita donde escribes el comando.
Pero lo que arrastras es en realidad un método en JavaScript que se va a ejecutar cada vez que pinches en el enlace que arrastras a la barra de marcadores (en firefox, como se llama en los otros navegadores).
En la barra de estado cuando estas encima del enlace se ve claramente que es codigo JavaScritp que va a invocar a la función ‘Quix()’ y empieza la declaración de la función. Por curiosidad me he CopiadoYPegado el codigillo para verlo.
El texto debidamente tabulado quedaria algo así:
javascript:Quix();
function%20Quix(){
var%20e=encodeURIComponent;
var%20t=window.getSelection?window.getSelection():(
document.getSelection?document.getSelection():(
document.selection?document.selection.createRange().text:''
)
);
var%20c=window.prompt('Quix:%20Type%20`help`%20for%20a%20list%20of%20commands:');
if(t!=''){
if(c){
c+='%20'+t;
}
else{
c=''+t;
}
}
if(c){
var%20u='http://quixapp.com/go/?c='+e(c)+'&t='
+(document.title?e(document.title):'')+'&s='+'&v=080'+'&u='
+(document.location?e(document.location):'');
d=''+document.location;
if(d.substr(0,4)!='http'){
window.location=u+'&mode=direct';
}
else{
heads=document.getElementsByTagName('head');
if(c.substring(0,1)=='%20'){
var%20w=window.open(u+'&mode=direct');
w.focus();
}
else%20if(heads.length==0){
window.location=u+'&mode=direct';
}
else{
q=document.getElementById('quix');
if(q){
q.parentNode.removeChild(q);
}
sc=document.createElement('script');
sc.src=u;
sc.id='quix';
sc.type='text/javascript';
void(heads[0].appendChild(sc));
}
}
}
}
La funcioncilla tiene su tela, pero lo unico que cambia respecto al javascript normal es que los espacios se cambian por %20 para que el navegador no se haga un lio. Pero a parte de esto te puedes escribir tus funciones todo lo largas que quieras e incrustarlas en el navegador tal cual.
Al fin y al cabo el navegador interpreta/ejecuta un mazo de elementos en html, css y javascript por no contar los aplets de java, los objetos flash y ahora los silverlight/moonlight que se le envia desde el servidor. Que le importa hacerlo tambien en local.
La mayoria de los add-ons de firefox se hacen de forma similar, al final siempre se llama a la maquina virtual de JS para que haga algo, ya sea conectar por ajax con algun servidor que da el servicio o con alguna clase Java compilada que te ha instalado la extensión.
Tiempo real no significa “en directo”
Por Scipion - Digresion, Programacion - 21 Enero 2010
Actualmente en el mundo de la web 2.0 donde RT se toma por ReTweet, nos dicen que en twitter se realizan busquedas en “tiempo real”. Pues hay que dejar bien claro que no es así, twitter realiza busquedas en directo (o en vivo como se prefiera).
Ahora estoy bastante sumergido en las tecnologias de tiempo real y una parte importante de información con la que me encuentro tengo que catalogarla como No-Tiempo-Real. Este NO-TR encaja con las definiciones de tiempo real de twitter, muchos de los juegos de estrategia o en red, tarjetas gráficas, etc.
Velocidad no es tiempo real. Es cierto, que algo funcione al pelo no significa que sea tiempo real, solo es que va deprisa.
¿Entonces tiempo real que es?. El hardware y software en tiempo real (a veces visto como Real Real Time por la controversia) es todo aquiello que en su ejecución se vé afectado por limitaciones temporales.
El concepto de Dead Line es algo SÍ relacionado con el tiempo real. Toda ejecución en tiempo real tiene como tiempo máximo de ejecución el valor de Dead Line.
En las aplicaciones corrientes se intenta mejorar la eficiencia reduciendo el tiempo de ejecución del caso medio. Esto es así porque el caso medio, por definición, es el que más veces va a ocurrir, hasta aqui todo bien. Pero que pasa en el peor caso. En el peor caso el software (tambien hardware) común no tenemos una certeza de cuando va a acabar.
Lo que define en realidad el Tiempo Real es la eficiencia al reducir el tiempo de ejecución del peor caso. Esto no solo nos aporta que el caso medio también va a ser de escasa duración, si no que (y más importante) aporta predecibilidad a cualquier ejecución.
Si al hacer doble click en el icono del photo shop tarda 3 segundos más o 3 segundos menos, da un poco igual, pero te aseguro que si el control de frenado de la siguiente generación de coches tarda 3 segundos más cuando vas a 140 y tienes delante un trailer volcado, como que ya no da tan igual.
Para sistemas industriales y embebidos (como se está incorporando en los coches ahora) es necesaria una precisión y un rendimiento que los Sistemas en Tiempo Real aportan.
Limitaciones temporales, mejora del peor caso y no del caso medio, y también el concepto de poder aportar mayor precision de calculo cuanto más tiempo tengamos son las caracteristicas del tiempo real en el mundillo de la ingeniería. Por lo visto las palabras Tiempo Real parecen reflejar un concepto muy bonito y por eso los medios de comunicación los han utilizado para substituir el concepto de “en directo” o “en vivo” que parecen algo anticuado y solo para temas de emisiones por televisión, de los 80 y 90 que no encajan con la informática de hoy en día.
Hay tambien otros conceptos o expresiones que se utilizan de forma erronea como segun tengo entendido “violencia de genero”, “en base a” que les pasa algo parecido, pero entran más en el caso de errores linguisticos que de significado.
Wikitexto, otro lenguaje de marcado
Por Scipion - Lenguajes de Marcado, Web 2.0 - 5 Enero 2010
El wikitexto es un lenguaje de marcado como el HTML o el XML pero solamente se usa en los wikis para darle un formato al texto y que no sea simplemente texto plano.
Lo define la wikimedia fundation. A pesar de que no existe un estandar del wikitexto (no existe el estandar que no la iniciativa de hacerlo) muchas veces se toma como referencia el que usa la wikipedia que define wikimedia (diferenciar entre P y M
).
Y tu ¿cueces o enriqueces?
Las caracteristicas hace que enriquezca en texto que se tiene. Es un sistema bastante sencillo y está completamente orientado a generar páginas web (que en definitiva son texto enriquecido).
Para que al lector le aparezca un texto en negrita el texto original debe aparecer entre tres comillas simples -> ”’negrita”’ = negrita
Para que aparezca el texto en cursiva (italic) el texto tiene que estar entrecomillado con dos comillas simples -> ”cursiva” = cursiva
Y para que aparezca en cursiva y negrita … la respuesta es obvia, hay que entrecomillarlo con cinco (3+2=5) comillas simples -> ””’cursiva y negrita””’ = cursiva y negrita
Esto es un ejemplo muy sencillo existe practicamente todo tipo de listas, enlaces y otras cosas similares al HTML pero en general de forma más intuitiva que el HTML para que quien no lo conozcan puedan darle un formato de wiki al documento que estén escribiendo, o al menos esa es la intención.
Si quieres profundizar más en el tema en wikipedia.org tienes articulos que lo describen muy bien, concretamente este es interesante porque describe las ambiguedades que pueden haber.
Interpretar o compilar
Cuando generamos un wikitexto este es almacenado tal cual en la wikipeda (o el wiki que sea) sin borrar el anterior por si fuese necesario revertir los cambios. Pero a la hora de leer esa informacion de la base de datos es necesario reinterpretar el wikitexto y mostrarlo en HTML, ya que al fin y al cabo el usuario que quiere ver la página web tiene un interprete de HTML (el navegador).
De la tarea de generar HTML correcto a partir de wikitexto se ocupa un wikiparser.
Un parser o en castellano un “analizador sintactico” es una parte de un compilador que se ocupa de transformar el código fuente de un programa y generar el código maquina (código binario) que será ejecutado por el ordenador.
En el caso de un wikiparser no genera un programa, genera otro texto. Para el caso de la wikipedia es HTML. Pero ¿puede ser otro lenguaje el que genere? claro, de hecho existen muchos parsers alternativos que generan XML, documentos pdf, LaTeX o lo que se quiera. Esta es una lista de parsers alternativos al de la wikimedia.
Por supuesto cualquiera puede escribir un parser y de hecho se hacen en muchos lenguajes como puedens ser Ruby, Delfy, C++, pyton, PHP o java. Algunos puenden generar varios textos de salida de formatos diferentes.
Siempre es curioso conocer otros lenguajes, en el caso del wikitexto no es un lenguaje de programación, en general muchos programadores consideran que el HTML tampoco es un lenguaje de programación, algo lógico porque no describe un algoritmo. Pero desde la parte del programador que se dedica a los procesadores del lenguaje (sean comipadores o no) no deja de ser un reto el meta-programar un programa que forma parte de una maquinaria compleja para hacerle la vida más fácil al usuario final. Me ha llamado la atención que se mencione en la especificación del wikitexto las sintaxis del BNF, EBNF y ANTLR que es estudian en la carrera, parece que al final si que se aprende algo útil.