C++


20
mar 12

Phalcon PHP

No Gravatar
Phalcon PHP

Phalcon PHP

Hace algunos días atras leía sobre un nuevo framework de PHP.. como si no hubieran muchos para elegir.. pero este específicamente tenía algo diferente que llamó mi atención.. lo guarde en mis favoritos y por fin!!! este fin de semana pude probarlo.

Pues bien, este nuevo framework se llama Phalcon PHP, esta escríto en C y funciona como una extensión adicional al lenguaje PHP utilizando el patrón de diseño MVC .. lo más interesante de que presumen es la velocidad con que este framework funciona a diferencia de la competencia.

Como cultura general, PHP es un lenguaje interpretado, básicamente Apache que es el servidor debe traducir todo el código php y entregarlo al cliente en forma de HTML, lo que hace de PHP un lenguaje algunas veces lento.. buuu!!! si a eso le agregan el uso de frameworks pues puede que el desempeño se vea un poco afectado, ya que los frameworks deben cargar inicialmente un set de librerías para funcionar lo cual se traduce en tiempo de compilación de recursos extras. Phalcon siendo una extensión del lenguaje, se carga automáticamente de tal manera que ofrece casi las mismas funciones que los demás frameworks, o al menos para trabajar utilizando el patrón MVC.

Definitivamente el resultado es muy bueno, la respuesta del servidor es superior en comparación de los frameworks tradicionales, entre los puntos negativos de Phalcon es que quizás le falten muchas cosas para llegar al nivel de CodeIgniter, Zend o Yii .. digamos algunas validaciones sobre los modelos, uso de eventos sobre el controlador, actions, etc..  y sobre todo documentación (porque hay cosas que no estan muy claras como el uso de las relaciones :S), pero la idea es genial.. Si tienen oportunidad de probarlo, no dejen de hacerlo.

Por cierto, el código lo encuentran en github.. hay que descargarlo y compilarlo.. además de la guía de instalación previa.. yo les recomendaría tener instalado build-essential..

Fuente: http://phalconphp.com/

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

31
ene 12

Tipado estático VS Tipado dinámico (2 de 2)

No Gravatar

NOTA: Este post es la continuacion de este otro.

Entonces estábamos con las diferencias entre Tipado estatico y Tipado dinámico.

  • Rapidez de compilación. Los interpretes y compiladores de lenguajes con tipado dinamico, pueden obviar la pasada de chequeo de tipos, por lo que son mas rápidos cuando se les pide que generen el ejecutable o que comiencen a correr si son interpretados. En contra parte los lenguajes con Tipado estatico, tardan mucho mas en compilar. Esta rapidez es especialmente útil cuando debemos hacer cambios y correr toda la aplicación de nuevo para poder ver si los cambios son correctos. Debemos admitir  (aun que personalmente intento no hacerlo nunca) que a veces hay que hacer ciertas cosas por prueba y error.
  • Optimización de código. Los compiladores de lenguajes de Tipado estático, al compilar pueden hacer mejor las optimizaciones creando código maquina o bytecode mas adecuado a la plataforma o maquina virtual en la que van a correr, ya que conocen desde el principio el tipo y tamaño de los datos. Esto es muy importante para ciertas aplicaciones que requieren velocidad en ejecución.
  • Velocidad de implementación. Quise dejar este punto al final porque es en realidad una combinación de algunos de los puntos anteriores. El hecho de que en los lenguajes de Tipado dinámico no sea necesario especificar los tipos ahorra bastante código, aunque si no eres cuidadoso puedes cometer errores de tipado que no saldrán hasta que corras la aplicación. Es por eso que algunas personas se facilitan la vida utilizando la Notación húngara que no es mas que agregar un prefijo a las variables que declaremos, para indicar el tipo, por ejemplo iEdad o sNombre para un entero y una cadena respectivamente. Lo cual es una tontería, ya que al final si estamos declarando tipos, que era lo que no queríamos desde el principio. En los lenguajes Tipados estaticamente la Notaciónhúngara tiene aun menos sentido, ya que en los entornos actuales basta con poner el cursor sobre una variable, para que aparezca un ToolTip que nos dice el tipo de la variable. Luego hay que tener en cuenta el completado de código del que ya se hablo, que ayuda muchísimo a acelerar la programación. La rapidez de compilación te ayudara en proyectos grandes acelerando el ciclo editar-compilar-probar, en los pequeños da igual. Aunque si haces pruebas unitarias para los distintos módulos de tu aplicación, no sera necesario compilar toda la aplicación para depurar la aplicación.

Conclusiones: Mi opinión es que:

  • Si te interesa la velocidad de ejecución, debes escocer un Lenguaje de Tipado estatico sin pensarlo.
  • Si conoces un lenguaje de Tipado dinámico y las librerías o frameworks de este, a la perfección y por ello no necesitas el completado de código, sigue usándolo.
  • Si es un proyecto grande, en donde participan mas de dos o tres programadores, escoge un lenguaje de Tipado estatico. Por el contrario si es un proyecto pequeño escoje el Tipado dinamico.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

10
ene 12

¿Como formatear un numero con comas en C++?

No Gravatar

Tenia pensado escribir sobre lo que estoy haciendo, pero hoy no tengo cabeza para eso, así que me he puesto en modo automático y les traigo un poco de código.

Problema: Convertir un numero a cadena, insertando comas en cada millar y truncando hasta las decimales.

C++ es un lenguaje muy poderoso, pero a veces cuando se trata de hacer cosas que son muy sencillas en otros lenguajes C++ no hace mas que resistirse. Claro que podríamos ocupar una librería que nos resuelva las cosas, siempre cuidando que sea multiplataforma y que sea opensource y de preferencia que ya este compilada, por ejemplo Boost, la cual recomiendo ampliamente. Pero no parece ser buena idea ocupar una librería para algo que inicialmente parece sencillo.

Entonces te pones a escribir código …

#include
#include 
using namespace std;
 
string ponleComas(double Numero)
{
	stringstream flujo;
	flujo << fixed << Numero;
	string s = flujo.str();
 
	string ns;
		if (s.find(".") != string::npos) {
		ns = s.substr(s.find("."), 3);
		s = s.substr(0, s.find("."));
	}
 
	int c = 0;
	for (int i=s.length()-1; i>=0; i--) {
		if (c % 3 == 0 && c != 0) {
			ns = "," + ns;
		}
		c++;
		ns = s[i] + ns;
	}
	return ns;
}

Listo, se usa así:

	double x = 950123.8384;
	double y = 83838347.123;
	double z = 45027456475345.56345;
 
	cout << ponleComas (x) << endl;
	cout << ponleComas (y) << endl;
	cout << ponleComas (z) << endl;

ESPERA!!! , tranquilo, no copies código aun. ¿Por que hacernos la vida fácil? Aquí va la segunda versión de este código:

#include 
#include 
#include 
class coma_numpunct : public std::numpunct
{
	protected:
	virtual char do_thousands_sep() const { return ','; }
	virtual std::string do_grouping() const { return "\03"; }
};
 
string ponleComas2 (double Numero)
{
	locale coma_locale(locale(), new coma_numpunct());
	stringstream flujo;
	flujo.imbue(coma_locale);
	flujo << setprecision(2) << Numero;
	string s = flujo.str();
	return s;
}

Mira que bonito código !! se ve bien PRO … y ademas funciona :D

¿Y como funciona? Pues lo primero que vemos es la clase coma_numpunct la cual sobre escribe algunos metodos de la clase numpunct, si juegas un poco puedes cambiar el caracter de separacion y el numero de caracteres que van entre una coma y la siguiente.

Luego, en la función ponleComas2, instanciamos un objeto de tipo locale y usamos en el constructor una instancia de la clase coma_numpunct que habiamos creado anteriormente.

Los objetos locale definen varias características de la forma en que se presentan los datos, con respecto a la cultura. Por ejemplo en algunos países se usa el punto en lugar de la coma para separar las decimales, o en las fechas se pone el mes/dia/año en lugar de dia/mes/año.

Creamos un objeto de tipo stringstream, que nos sirve como una especie de buffer, en el cual podemos imprimir cosas como si fuera cout, pero no se imprimiran en pantalla.

Ahora viene la impresion del numero, y vemos que aparece un setprecision(2) que es muy obvio y ademas un fixed que evita que se use la notacion cientifica, ya sabes 9.5e+05 en lugar de 950,123.83.

Finalmente usamos el método str() para convertir el stringstream a string y retornamos el valor.

Seria muy interesante medir tiempos, para ver cual de las dos implementaciones funciona mejor, pero eso ya es de verdad no tener nada que hacer :P . Espero que el código les sirva. Si conocen otra forma de hacerlo póngalo en los comentarios, sera interesante darle un vistazo.

 

 

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

28
oct 08

BEA Tuxedo

No Gravatar

Tuxedo es un producto de la empresa BEA recientemente en proceso de fusión con Oracle.

Tuxedo es un framework que se encarga de administrar transacciones, te permite concentrarte en la funcionalidad y no tener que inventar la parte de transacciones que es muy compleja. Imagina que requieres hacer un proceso compuesto de 4 o 5 pasos, cada paso es ejecutado en sitios distintos, cada paso hace algo muy particular como actualizar un archivo, insertar un registro en una base de datos, dar aviso a otro proceso, etc etc. Si alguno e estos pasos falla, la transacción debe ser deshecha, por ejemplo si el paso 4 falla, el paso 3, 2 y 1 no sirven de nada y debe hacerse un rollback. Ideal para usarse en bancos. Actualmente es muy utilizado en instituciones financieras donde se tiene alto flujo transaccional.

Tuxedo es va bastante viejo, existe desde hace mas de 10 años, lo cual no es necesariamente malo. Otra cualidad importante es que puede ser accesado desde distintos lenguajes y se puede comunicar con otros procesos mediante IPC.

¿Que tiene que ver todo esto con Qbit? A uno de nuestros cliente le fue encargada la tarea de substituir Tuxedo por … otra cosa. Pero… uno de los requerimientos es no reescribir el conjunto de procesos actuales, escritos en C y que están hecho especialmente para poder ser invocados y administrados por Tuxedo. Es decir, lo que se pretende es prácticamente, hacer un clon de Tuxedo, por supuesto únicamente de la parte de Tuxedo que sea esencial, pues sustituirlo todo seria muy complicado, Tuxedo es enorme.

Nuestro cliente nos ha encargado la parte de C y C++, mientras que ellos se encargaran de la parte en Java. Hay que reescribir un subconjunto del API de Tuxedo y recompilar los procesos escritos en C, haciendolos creer que estan en Tuxedo. Hasta al momento vamos muy bien, es un trabajo muy interesante.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

Qbit Mexhico Blog is using WP-Gravatar