CodePress, editor con resaltado de código en tiempo real

CodePress is un editor de código para el web, con resaltado de sintaxis escrito en Javascript. Algunas de sus características son:

  • Mientras escribes el código, los colores son aplicados.
  • Esquemas de código predefinidos, si escribes if y luego presionas tab te agrega if () { }, lo mismo para for, while, do-while entre otros
  • Autocompletado de ‘, “, <, { y [.
  • Auto numeración de lineas.
  • Soporte para varios lenguajes: HTML, ASP, C#, CSS, Java, JavaScript, Perl, PHP, SQL, Ruby y VBscript.

CodePress

En el sitio web de CodePress hay una demo para verlo en acción y la verdad que quisiera tener algo así dentro del editor de código de WordPress :D. CodePress, está disponible bajo licencia LGPL o CC-by-Atrribution según se ajuste a tus necesidades.

PD: Despues de todo no hay nada mejor que VI =P

Etiquetas de búsqueda: , , , ,

Cambios en el acceso SVN de SourceForge

En Diciembre de 2006, Sourceforge agrego un nuevo método de acceso hacia los repositorios SVN de los proyectos hospedados, debido a misteriosos problemas:

( 2006-12-01 06:50:42 – Project Subversion (SVN) Service ) As of 2006-11-31 the Subversion access method has been changed to resolve a number of problems relating to the previous Subversion access method. This new method uses the same data as the old, it just provides a less trouble-prone method of access. All users of the old access method (https://svn.sourceforge.net/svnroot/PROJECTNAME) should switch to the new access method immediately. Instructions for doing so can be found here: https://sourceforge.net/docs/E09#notice . A timetable for deprecating the old access method has not been set yet, but you should update all scripts and other programs to use this new method immediately to ensure future functionality. The old ViewVC URLs are currently being rewritten to ensure they function into the future.

Ahora según informan en el boletín de SourceForge, el viejo método de acceso al SVN será eliminado a partir del 28 de Junio, y por tanto cualquier script o repositorio que lo use dejará de funcionar.

Si has trabajado con algún repositorio SVN en SourceForge desde antes de Diciembre de 2006 es probable que aún uses el viejo método de acceso, será mejor que lo actualices para no llevarte sorpresas. Según está explicado en Sourceforge, todo lo que debe hacer es:

  1. Ejecutar svn info en el raíz del repositorio
  2. Si la URL es similar a:
    https://svn.sourceforge.net/svnroot/PROJECTNAME/trunk entonces
  3. debes ejecutar:
    svn switch --relocate https://svn.sourceforge.net/svnroot/PROJECTNAME/trunk https://PROJECTNAME.svn.sourceforge.net/svnroot/PROJECTNAME/trunk

Etiquetas: , hosting,

¿Como matarías al dragón?

Hablando la vez pasada del Libro del Dragón, me recordé de una serie de chistes de como diferentes programadores de cierto lenguaje matarían al Dragón:

Java – Llega, encuentra al dragón, desarrolla un framework para aniquilación de tragones en múltiples capas, escribe varios artículos sobre el framework… pero no mata al dragón.

.NET – Llega, ve la idea del desarrollador de Java y la copia, intenta matar al dragón, pero el bicho se lo come

C – Llega, mira al dragón con mirada de desprecio, tira de espada, degolla al dragón, encuentra a la princesa… y la ignora para ver los últimos checkins del cvs del kernel de linux

C++ – Crea un pincho básico y va juntando funcionalidades hasta tener una espada compleja que apenas consigue entender… mata al dragón pero se atasca en medio del puente por culpa de pérdidas de memoria (memory leaks)

COBOL – Llega, ve al dragón y piensa que es demasiado viejo para conseguir matar un bicho de ese tamaño y quedarse con la princesa, y entonces se va.

Read More

El Libro del Dragon

En los últimos semestres de la Universidad, lleve varios cursos difíciles como: Compiladores 1era EdiciónTeoría de autómatas, Inteligencia Artificial, Complejidad de Algoritmos y Compiladores. En este ultimo curso usamos, quizás uno de los libros más legendarios de la Teoría de la Computación (no, no es de esa teoría de aprender a usar Word, sino de la teoría ruda y cruel 😛 ), El libro de Compiladores: Principios, Técnicas y Herramientas (inglés) de Alfred Aho, Ravi Sethi, y Jeffrey Ullman; mejor conocido como el Libro del Dragón Rojo debido a su particular portada de un caballero con armadura (el programador) y un dragón rojo (el compilador). El libro del dragón no es facil de digerir, si pasaste de noche la Teoría de Autómatas y Matemática Discreta, ya te fregaste jaja; cuando llegas al capítulo 4: Análisis Sintáctico la cosa se pone peluda, peluda!.

Afortunadamente el curso no era de crear un compilador y correr programas traducidos por el mismo, sino “solo” crear un analizador sintáctico. Regresando al tema, el Libro del Dragón cual su única edición (en ese entonces) fue publicada en 1986 y aún 20 años después no hay nada nuevo y el libro aún es válido, eso no le pasa a cualquier libro de Computación 😉 . Es más el dicho libro fue el sucesor de otro escrito casi 10 años atrás, Principios de Diseño de un Compilador (inglés) también conocido como el Libro del Dragón Verde, para que vean lo “poco” que cambia la teoría de compiladores.

Pues bien, ahora resulta que 20 años después editan y actualizan el Compiladores - Seguna EdiciónLibro del Dragón (¿parece que los dragones son el fetiche de alguien no?) en una segunda edición, incluyendo nuevos temas como: Traducción dirigida, Máquinas en paralelo, Recolección de Basura (Garbage collection), entre otros; pero la teoría sigue siendo la misma de siempre, ah! y también se les ha unido una nueva autora: Monica Lam. Como es costumbre en cada edición le cambian el color al dichoso dragón esta vez toco el púrpura, pasando a ser ahora El Libro del Dragón Purpura.

El Libro del Dragón es un libro maldito, no es para cualquiera, es solo para programadores de verdad 😀 . Yo ando en busca de mi copia, no se si ya exista una en español de la Segunda edición, pero por si la ven se las encargo sino de todas formas la primera edición me sirve. El Libro es tan legendario que es considerado uno de los libros que un Ingeniero de la Computación debe tener (y entender, claro), jaaa que tal!.

Etiquetas: , ,

Lenguajes de programación y otras hierbas

Hoy vi en menéame una nota interesante sobre el uso de algunos lenguajes de programación, basado en las estadísticas que publico SourceForge hasta Febrero del 2006:

el uso de algunos lenguajes de programación

También existe TCPI, solo que este basado en buscadores y algunos otros proveedores. Interesante no? ver como lenguajes de programación más fáciles de usar como Java y PHP adquieren mucha fuerza y los lenguajes más tradiciones (y robustos) como C pasan al olvido… o al menos son para usos mas exóticos 😛 .

Pero de la nota de menéame, me causo mucha gracias ver estos comentarios:

#8 <flame>
#2: Todo lenguaje que no soporte herencia múltiple y encima lleve un garbage colector es un lenguaje orientado a nenazas (como Java). Los programadores de pelo en pecho seguirán usando C/C++.
</flame>

a lo que otro responde:

#11 #8 Los programadores de pelo en pecho seguirán usando C/C++.

Mientras que los programadores de verdad seguirán usando ensamblador.

LOL. A mi querido C, hace ratos que no lo uso… aun que no me quejo de php, si extraño bastante hacer llamadas a malloc/free y manejar punteros (hasta dobles) a todo lujo. Con eso de que los lenguajes se vuelven de más alto nivel, ahora cualquiera puede programar; ya no tienes que reparar en tantos detalles para poder hacer un simple programa hola mundo.
Bah! y yo que nunca me lleve bien con las clases y sus herencias :S . Todavía me recuerdo de mis aventuras con Microsoft Fundation Classes… vaya si no me desvele tratando de entender ese HORRIBLE código! nunca dí bola con MFC y mejor preferí trabajar con C y llamadas directas a las APIs de Windows, facilito como el agua clara jejeje. También me aventuré en el mundo de ensamblador, pero no fui muy bueno manejando la pila… varias vece mande a freír patatas a Windows 9x con fallos de página :D; al menos recuerdo que pude manejar a inyección de procesos hacia otros y hacer “encriptaciones” con XOR usando varias claves… en eso si admire a la gente de 29A que podía (y pueden) hacer estragos con sus virus desde ensamblador puro! Programadores de verdad 😛

Ah tiempos aquellos. Aún sigo sin usar clases en php, por que me parecen un verdadero desperdicio de código: constructores y métodos; claro para ahorrarte tiempo son una maravilla, pero aún prefiero invertar la rueda una y otra vez 😉

lenguajes de programación, los viejos tiempos, troll, flamewar

El valor del CMS de BlogsChapines

Hace unos dias recibí un correo de Koders.com, confirmándome que BlogsChapines BlogsChapines - Costo del CMS(el CMS) fue agregado a su índice de proyectos. Lo he agregado  a koders no solo para que otra gente pueda encontrar código que les sea útil, sino también para obtener algunas estadísticas interesantes del código: total de archivos en el repositorio, lineas de código (sin contar comentarios, claro), lenguajes de programación utilizados, y la más curiosa, el costo del desarrollo del software.

Según Koders, BlogsChapines cuesta $27,780!! jaaaa ya la hice 😛 solo tengo que encontrar un comprador jejeje. No, ya enserio el valor es tan alto por la pequeña cifra que asigna al costo por mes, tan solo $5000.  Si fuera con los precios de Guatemala, con suerte llegaríamos a los Q3,000/mes, y caro todavía ;).

Koders debe utilizar el popular método para calcular hombres-mes y de allí costos del desarrollo de software, COCOMO (COnstructive COst MOdel). Cocomo tiene 3 niveles de exactitud para realizar la estimación en base a una serie de coeficientes ya establecidos y tipos de software. En su nivel básico se basa únicamente en la cantidad de miles de líneas de código y el esfuerzo que se requieren para llegar a tal cantidad de código. Hay quienes dicen que Cocomo no es práctico aplicarlo a proyectos de software libre, dado que estos siempre están en desarrollo y no están sujetos a tiempos de entreda rigurosos. Aun así, Cocomo bien sirve para darnos una idea de cuanto podría llegar a constar nuestro programa si fuera uno comercial.

Por cierto, la NASA tiene un pequeño script para facilitar los cálculos utilizando Cocomo básico… por si quieren jugar un poco 😛

Gráficas Flash desde PHP

Hace varios días platicando con Oscar en el chat estaba buscando una buGráficas Flash desde phpena librería para generar gráficas desde php, él me recomendó una que genera gráficas completamente Falsh desde PHP. Al principio no muy me parecía usar flash, pero bueno dije demos le su oportunidad… y la verdad es muy buena!. Se llama PHP/SWF Charts, es bastante personalizable tanto en colores como en estilos, por mencionar cuenta con al menos 20 tipos de gráficas, pasando por los tradicionales de Barras, Líneas, De Pie, De Área, Polares y sus respectivas versiones en 3ra Dimensión (si aplica). En los colores me gusta el soporte Alpha, es decir, Transparencias para todos los elementos de la gráfica, muy útil para ir más allá de los simples colores sólidos.

Pero quizás su mayor potencial son las animaciones que hace al presentar la gráfica, ya saben son esos detalles que endulzan el ojo. Les recomiendo ver la galería tienen muy buenos ejemplos, como estos que he reproducido.

La configuración es muy sencilla, aún que por tener tantas opciones es mejor ver los ejemplos y ver como hacen cada cosa viendo la referencia, que intentar hacer una maravilla a la primera. Todo se hace mediante arrays y strings, simplemente super sencillo.

El único defecto: No es Software Libre, de hecho por usarla gratuitamente deben soportar que al hacer click en la gráfica este se convierta en un link hacia el sitio de la librería. Si quieren quitar ese link, les cuesta $45. Pero si lo vemos como YouTube que todo mundo usa y tiene un link al hacer click en el control, me parece soportable.

La próxima vez que quieran lucirse haciendo gráficas para su sitio web, les recomiendo considerar esta librería, en verdad lo vale.

Etiquetas de búsqueda: , , ,

BlogsChapines Fellowship Casi listo

Ayer les comentada que ya habia logrado imprimir el texto sobre el png que hice. El avance de hoy fue usar Cookies y redireccionar hacia el blog en cuestion. El código necesario para que funcione es muy simple y creo que cualquier hosting paranoico lo permitirá:

<a href=”http://blogschapines.mayix.net/redir.php”><img src=”http://blogschapines.mayix.net/fellowship.png&#8221; alt=’blogschapines fellowship’ /></a>

Como funciona?
Cuando se llama a fellowship.png se genera un ID aleatorio y se utliza este para imprimir el título del blog sobre la imagen y se envia una cookie con el ID que se utilizo. Cuando se hace click sobre la imagen se dirige hacia redir.php en donde lee el ID usado en la cookie y redirecciona hacia el blog sugerido. Si la cookie no fue válida o ya expiro, solo redirecciona al index.php.

Que esta pendiente?
Hacer que solo sugiera blog de la misma categoria del blog de donde se carga la imagen…

Quieren Contribuir?
Adicionalmente estamos pensando en agregar más diseños para la imagen que podemos usar de fondo. Requisistos:

  1. El tamaño de la imagen no puede sobre pasar los 2.5 KB
  2. El formato de la imagne debe ser PNG
  3. Debe transmitir el mensaje de que son blogs de guatemala, es decir usar colores de la bandera nacional, quizas usar la cilueta dle pais, o un quetza…. ve! ya les dí ideas jaja.

Dejen un comentario si ya tienen una propuesta.

Ping via XML-RPC

Desde hace varios dias andaba buscando como es que funciona lo de los pings via RPC-XML, vaya fue algo dificil encontrarlo pero ya se como esta esa onda.

Hace ya tiempo atras escuche de servicios como weblogs.com donde listan los ultimos blogs actualizados, solo que el metodo de actualizacion es mucho mas automatico ya que es posible hacerlo via XML-RPC. El ping via XML-RPC consite en una llamada a un procedimiento en un serividor remoto, a través del protocolo HTTP. Decide buscar mas hacerca del tema y encontre en el sitio web de la implementacion, la especificacion de como se realiza el proceso del ping en weblogs.com:

Lo que se debe hacer es una llamada a un procedimiento como este:

weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname=”none”) returns struct

donde:

  • weblogname, es el nombre del blog
  • weblogurl, es la url del blog.
  • changesurl, es la url donde buscar nuevos cambios
  • categoryname, es el nombre de la categoria del blog

los primeros 2 parametros son requeridos y todos son de tipo cadena. Esta funcion debe devolver 2 parametros, uno indicando si tuvo exito o no y el otro un mensaje descriptivo del error en inglés.

Este es un ejemplo de la comunicación entre el cliente (quien solicita el ping) y el servidor (quien buscará cambios en el blog):

POST /RPC2 HTTP/1.0
User-Agent: Radio UserLand/7.1b7 (WinNT)
Host: rpc.weblogs.com
Content-Type: text/xml
Content-length: 250

<?xml version=”1.0″?>
<methodCall>

  <methodName>weblogUpdates.ping</methodName>
  <params>
  <param>
  <value>Scripting News</value>
  </param>
  <param>
  <value>http://www.scripting.com/</value&gt;
  </param>
  </params>
  </methodCall>

HTTP/1.1 200 OK
Connection: close
Content-Length: 333
Content-Type: text/xml
Date: Sun, 30 Sep 2001 20:02:30 GMT
Server: UserLand Frontier/7.0.1-WinNT

<?xml version=”1.0″?>
<methodResponse>

  <params>
  <param>
  <value>
  <struct>
  <member>
  <name>flerror</name>
  <value>
  <boolean>0</boolean>
  </value>
  </member>
  <member>
  <name>message</name>
  <value>Thanks for the ping.</value>
  </member>
  </struct>
  </value>
  </param>
  </params>
  </methodResponse>

Bueno y como se implementa un servidor XML-RPC en PHP? Me puese a buscar una librería escrita en php, para no tener que lidiar con un extensión para PHP que seria una solución mucho mas robusta, seria un poco más complicada de instalar en los servidores de hosting. Me tope con una implementacion del protocolo y en php: phpxmlrpc. Luego de una exporacion rápida, la libreria parecia muy completa y con unos 5 años de desarrollo… pero tambien bastante complicada para hacer algún servidor ping en un corto tiempo.

Para comprender mejor como se da esta comunicación en tiempo real, me di a la tarea de buscar en WordPress como se realiza esta función. Se que WordPress tiene la opcion de que cada vez que se realiza un nuevo post, este automáticamente envia el ping a las direcciones que se le han especificado. Despues de urgar mucho en el codigo y buscar en vano en codex.wordpress.com, encontre la función en functions.php:

function weblog_ping($server = '', $path = '') {
	global $wp_version;
	include_once (ABSPATH . WPINC . '/class-IXR.php');

// using a timeout of 3 seconds should be enough to cover slow servers
	$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
	$client->timeout = 3;
	$client->useragent .= ' -- WordPress/'.$wp_version;

// when set to true, this outputs debug messages by itself
	$client->debug = false;
	$home = trailingslashit( get_option('home') );
	if ( !$client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
		$client->query('weblogUpdates.ping', get_settings('blogname'), $home);
}

Ya viendo esta funcion vi que primero intenan llamando a una funcion extendida del ping que donde le especifican la URL del feed ademas del nombre y la url del blog. Si esta funcion no es posible ejecutarla, entonces se llama a la version normal de ping, que solo toma 2 parametros: el nombre del blog y la URL del mismo. Tambien descubrí que incluyen el archivo class-IXR.php, que para sorpresa mia es una libreria que implementa el protocolo XML-RPC pero lo interesante es que contiene 2 clases: una cliente y otra servidor, esta última es la que me interesa. La libreria se llama IXR – The Inutio XML-RPC Library y su sitio oficial es: http://scripts.incutio.com/xmlrpc/.

En un vistazo rápido a la pagina de la librería encontré lo que estaba buscando, con un pequeño ejemplo se puede ver todo:

<?php

include('IXR_Library.inc.php');

function sayHello($args) {
    return 'Hello!';
}
function addTwoNumbers($args) {
    $number1 = $args[0];
    $number2 = $args[1];
    return $number1 + $number2;
}
$server = new IXR_Server(array(
    'demo.sayHello' => 'sayHello',
    'demo.addTwoNumbers' => 'addTwoNumbers'
));

Super sencillo! Bueno este es solo un ejemplo que dan ellos no se si funciona pero tengo grandes esperanzas de que sea algo de copiar & pegar y ya tenga mi servidor de ping XML-RPC funcionando.

Si este último código funciona, en unos dias estare poniendo este servicio en blogschapines para que le den una probadita….