Hace un par de días exactamente el martes 27 de Julio del 2010, un programador me dijo que AJAX es para gente que sabe programar, esto debido a que yo le dije, que se me hace demasiado ostentoso tratar de imitar una aplicación de escritorio en el navegador, que AJAX es una ilusión, las conexiones siguen existiendo al servidor pero en background, realmente no le encuentro mucha utilidad a recargar completamente la pagina a que se recargue una zona de ella, de hecho.
Yo soy muy fan de las cosas originales, me gusta el ICQ sobre el MSG, el IRC sobre los WEBCHAT, por una razón, no hay nada nuevo bajo el sol, me gustan los mapas de bits en la WEB en lugar del flash o la “súper innovación” de silverligth , porque todo lo que existe como innovación ha existido en el pasado de una forma o de otra y sin requerir ningún tipo de plugins, la verdad es que no veo ninguna tecnología nueva desde 1996 todo ya existía, solo se las han arreglado para hacerlo más complejo y patentar cosas que siempre han sido libres y estándares
Dicho lo anterior es muy fácil imitar el AJAX usando simples frames que podría ejecutar sin problemas un internet Explorer 2 o un Netscape 2.0 de hace más de 15 años, solo para que se den una idea que lo que el AJAX representa se puede imitar a simple HTML un poco de JavaScript y un par de Frames, ejecutado por el navegador más viejo que puedas imaginar.
La respuesta de este programador a mi argumento fue, es que no defiendo AJAX porque seguramente es tan complicado de usar para mí que prefiero decir que es basura. Le tomo poco más de una semana hacer algo útil con AJAX y que yo no podría aprenderlo ni en 6 meses. Mi respuesta fue, todo ha existido de una forma u otra, para mañana a esta hora tendré una pequeña aplicación en AJAX, su respuesta fue un JAJA OK, Mañana.
El 28 de Julio del 2010 le presente una simple y pequeña aplicación en AJAX y no podía dar crédito y le volví a decir, aunque ya hice una aplicación en AJAX, esto es basura, pero trabajare con esta basura para hacer algo útil con él para mañana de lo que a ti te tomo 2 semanas.
Hoy es mi tercer día 29 de Julio del 2010, la aplicación que iré a mostrarle es un buscador que hace consultas a la base de datos activado por los eventos del teclado al presionar teclas
A pesar de estos 3 días en AJAX y de las complicaciones adicionales que lleva, sigo pensando que es algo innecesario, insisto HTML con Frames + JavaScript hacen un efecto AJAX 15 años en el pasado
La aplicación buscador de artículos es la siguiente
La siguiente reliquia es mi libreta de anotaciones para programar en C y aun una más antigua donde tenía mi primer código en Pascal, esta última no la encuentro aun.
Estos códigos fueron investigados en una poderosísima 80286
Desafortunadamente, nunca están a salvo de una mujer sin que hacer, como se puede ver, tuvo sus firmas y intento de chismografía por una quinceañera sin amor a la informática…. JAJA saludos mely donde quiera que estés. Aproximadamente 12 generaciones de procesador en el pasado. Los programas compilados en aquel entonces cabían perfectamente en 640kb de ram incluido el sistema operativo que el común era el MS-DOS 5.x y los compiladores indiscutibles eran de borland y para aplicaciones bonitas con menús , clippper todo en un area de trabajo de 80 filas con 24 lineas
Para un total de 1920 caracteres en pantalla incluidas el entorno en el que debía estar, muy poco y aun asi mis primeros video juegos los programe en modo texto, aun recuerdo el battlespace un juego de naves espaciales que tenían que destruirse unas a otras
También recuerdo juegos como el lisa o 666 que eran lisa.exe o 666.exe y la tercera generación el bart, como resultado de que bart es el hermano de lisa Simpson, eran juegos esotéricos, con creaciones como el bart, jajajaja como tuve chicas y tuve lo que quise de ellas, especialmente si un espíritu les decía que tenían que darme lo que pidiera o una maldición les caería, jajaja, ahí si podías obtener algo de lo esotérico, no como estas cadenas actuales que las debes reenviar… para provecho de sabrán quien… el bart era la onda, me pregunto si escribiera una nueva versión de esos programas, habrá todavía alguien que caiga y crea que un espíritu diabólico le habla por medio de la pc y también recuerdo que tuve que abandonar el juego por que alguna conto del juego a su mama ya que se sentía mal tenía miedo de ser poseída por algún demonio y de pronto todas las señoras decían que se sentían mal que estaban embrujadas, jaja cuando yo sabía que lo único inexplicable de un juego que yo mismo había programado es, como alguien podría creer semejante sandez, que un espíritu te habla por una computadora. Algunas señoras llevaron a bendecir las computadoras de sus hijas donde habíamos jugado, JAJAJAJA no pare de reír en semanas con ese asunto… la creencias esotéricas siempre han sido un lastre para los pueblos y en algunos casos como el mío, causante de abusos para quienes las creen, ya que algunas chicas hicieron cosas que nunca habrían hecho y no necesariamente sexuales, sino mandarlas a besar un sapo o comer algún insecto para que el demonio en su computadora no les atormentara por toda la eternidad JAJAJAJAJA
No es para nadie un secreto que yo apoyo al software libre en muchos sentidos, desde ideológicos y pasando por tecnológicos, la capacidad de evolución del software libre, difícilmente será superada por algún paquete comercial.
Ahora veremos por que GNU/Linux puede superar fácilmente a cualquier Windows en rendimiento y mientras Windows no entregue su código fuente, jamás podrá superar a GNU/Linux, en desempeño.
En un sistema operativo comercial como lo es Windows y algunas distros de Linux, dígase RedHat, la intención siempre será que el sistema operativo corra en la mayor cantidad posible de computadoras, pero, por regla general, siempre hay mas computadoras “obsoletas” que de de nueva generación. Cuando las compañías compilan su código, lo hacen pensando en el procesador mas disponible, por ejemplo. Hoy tenemos un QUADCORE o los XEONES, pero no todos tienen un QUADCORE, algunos tienen CoreDUO o algunos aun conservan sus Pentium IV y hay muchas computadoras ahí a fuera con procesadores mas viejos. Todos sabemos que los procesadores mas nuevos siempre mantienen compatibilidad con los viejos, asi que compañías como Microsoft en lugar de sacar una versión de Windows orientada a cada procesador, dígase Core 2 Duo o Pentium IV, mejor sacan una sola línea, Pentium IV, saben que correrá a partir del Pentiun IV en adelante. Que pasa con los flamantes procesadores Core 2 Duo, pues sus bondades de desperdician, muchos de sus nuevos registros jamás son usados, al menos no por el sistema operativo. Algunos juegos usaran los nuevas bondades pero finalmente también harán uso de las Apis del sistema operativo quien no hara uso completo de las bondades del procesador.
Las versiones comerciales de Linux tambien tienen ese problema, compañías como RedHat esperan que su OS corra en el mayor numero de computadoras disponibles, asi que aunque existen Core 2 Duo, a la hora de compilar su kernel y sus programas lo hacen especificaandole a compilador un procesador mas viejo.
Por ejemplo el Centos 5.2 clónico del RedHat 5.2 tiene un kernel que puede ser ejecutado a partir de un Pentium Pro, desde 1995 que existe ese procesador, estamos en el 2009, el kernel tiene una obsolencia de código de 14 años
Afortunadamente GNU/Linux nos da acceso a todos los códigos fuentes, desde el ls hasta el mismo kernel y el compilador GNU, que es una maravilla ese compilador nos permite especificar el procesador para que el compilara algún código.
Dicho lo anterior es posible tomar el kernel de Linux y recompilarlo pero en lugar de usar instrucciones de procesador de hace 14 años, se le dice que use las de un Core 2 Duo actual o un Xeon actual, el resultado sera un nuevo kernel pero sacando provecho al procesador con toda sus capacidades.
Otra ventaja de disponer del código fuente es la personalización, por ejemplo Windows viene con cientos de controladores, para floppy , tarjetas de video, tarjetas de red, n cantidad de driver, de los cuales usara solo uno. Sin embargo tiene que cargar con el resto de driver, y aveces hasta con drivers obsoletos, por ejemplo Windows esta listo para usar floppys drivers, pero la mayoría de las nuevas pcs ya ni traen la disquetera. Aun asi Windows tiene el driver Listo para controlarla, la mayoría usa NTFS en sus sistemas de archivos, sin embargo Windows esta preparado para usar FAT, VFAT, FAT32, NTFS versiones viejas y su propio NTFS Actual, tiene que lidear con todos esos sistemas de archivos que tal vez ni use jamás.
Algo similar ocurre en Linux, Linux viene listo para usar cientos de tarjetas, cientos de drivers para controlar muchas cosas en la PC, el problema es que muchas de esas cosas, tal vez ni las tenemos, al igual que Windows, viene preparado para leer FAT, VFAT, NTFS, etc ,etc, en sus propios sistemas de archivos Ext2, Ext3, Ext4, está listo para usar drivers de disquetera, en fin puede usar tantos drivers como Windows, sin embargo a la hora de instalar usaremos una sola tarjeta de red y los demás drivers solo estarán ahí sin hacer nada, ocupando espacio y distrayendo al kernel.
Otra ventaja de OS libres como Linux sobre sistemas operativos cerrados es, la capacidad de decidir como construir el kernel, que drivers seusaran realmente.
Si yo se que mi equipo solo va a usar Ext3, no necesito soportar Ext2, ni Ext4, quito ese código y cuando se compile no estara el kernel esperando controlar Ext2 y Ext4.
Si yo se que tengo una tarjeta de red, por ejemplo una 3com, no necesito drivers para HP, Pcnet32, etc, etc, las cientos de tarjetas que soporta, para que, requiero solo la 3com
Si la computadora solo tiene discos SATA y ya no usa los viejos IDE, no hay necesidad de ponerle drivers para IDE, al punto en que podemos tener un kernel que solo controla el hardware especifico en la computadora.
El resultado será un kernel VELOZ, no se trata de ganar un segundo o dos, se trata de ganar 20 segundos o mas y en un sistema que estará operando indefinidamente, esta velocidad tiende a infinito.
Para ejemplificar
Un carro va a 20 kilometros por hora con el kernel gnerico
Otro carro va a 25 kilometros por hora con el kernel personalizado.
No parece mucho, pero cada hora el carro con el kernel personalizado avanzara 5 kilometros mas, al final de un año de producción, podría encontrarse a miles de kilómetros de distancia del kernel genérico.
Esto no es aplicable solo al kernel, está disponible el código de SSH, Apache y prácticamente de todo programa en un OS Linux.
Por ejemplo el apache, un apache genérico, puede resultar mas lento que un apache compilado con las bondades del procesador que lo ejecutara.
Si para Dosear un apache genérico se requiere 10 computadoras, con uno personalizado se requerirán 30
Un kernel compilado a la medida, un apache con instrucciones del procesador actual, lo podras dosear, pero te costara mayor trabajo.
Algunos se han de preguntar que hace tan difícil dosear la cueva, la respuesta es en parte que tengo personalizado mucho de lo que corre en el servidor desde el kernel, hasta el apache, muchos programas, por lo que el servidor es capaz de reaccionar más rápido ante un ataque.
Ahora la comprobación.
Hare un programa que cuente los segundos, y solo eso hará, podre a grabar el arranque de un Kernel genérico y contare los segundos que le toma llegar al prompt para pedir usuario y clave, luego hare lo mismo con el kernel personalizado en ese mismo hardware y se podrá observar, cuanta velocidad se gana tan solo con compilar el kernel. Cuanta mas si recompilamos apache, sendmail y otros servicios que vienen genéricos.
Como se puede ver en el video, no se gana uno o dos segundos, se ganan casi 30 segundos de diferencia…. eso es MUCHO.
Mosix es un parche para el kernel de Linux que le da capacidad de ejecusion distribuida de procesos, de esta forma se puede armar una “SUPER COMPUTADORA” de un laboratorio de computo o de TODAS las computadoras existentes en una red, asiéndolas trabajar como si se tratara de una sola.
Si en una red de investigación, o redes universitarias donde los equipos conectados pueden ser del orden de los cientos y a veces miles, se pueden unificar todos para crear una computadora formada de miles de computadoras. De esta forma cualquier programa de investigación que sea requiera gran poder de proceso puede ser usado sin modificación alguna en su código, la computadora que terminara haciendo las operaciones será cualquiera de la red, la que se encuentre con menos estrés
Ahora he comprobado que es más fácil instalar el Mosix, cuando lo instale en producción por ultima vez para una universidad hace, por el 2001 era más problema por que había que escribir los .conf de su configuración y de los nodos en el cluster uno a uno, ahora mosix.install lo hace todo muy fácilmente
La ventaja de no tener que modificar los programas para usar este tipo de cluster también tiene cierto tipo de lastre, muchos procesos no pueden ser movidos a otros CPUs si están anclados por uso de hardware o uso de memoria compartida.
Sin embargo, si los programas son de investigación estan haciendo cálculos, los investigadores no tienen que aprender a programar para algún cluster, solo programación simple y el kernel se encarga de distribuir la carga.
En este tipo de cluster cada PC es una terminal de una SUPER COMPUTADORA, es decir, en cualquier terminal puedes lanzar programas, pero estos emigraran a otro CPU, cualquiera que se encuentre más relajado, esto da la sensación de que la computadora mas humilde una pequeña 80386 puede hacer cálculos como si una QUADCORE/XEON.
http://www.mosix.org/mos2/MOSIX-2.25.0.0-i386.for_Linux_kernel-2.6.28.tbz
Tip
Para lanzar programas en el cluster se usa el comando mosrun que como parámetro lleva el programa que se lanzara, si se lanzara mosrun con bash y se le colocara como Shell de un usuario, todos los hijos de bash que serian todos los hijos del proceso musrun bash estarían dentro del cluster
Mosix no es software libre y la versión que permite descargarse ahora esta limitada a 6 computadoras como máximo, sin embargo existe el OpenMosix, aunque este aun es un parche para los kernel de la serie 2.4.x y es que el desarrollo de OpenMosix esta parado, por lo tanto no ha evolucionado la serie 2.6.x
He visto muy pocos desarrollos en que usen base de datos como MYSQL que no estén ligados a la WEB ya sea con PHP (Principalmente) o ASP.NET, para escritorio lo más cercano es C#, sin embargo casi nada en los lenguajes tradicionales como C.
En este artículo mostrare como hacer conexiones a la base de datos, como agregarle un registro y luego consultarlo, para los que ya han conectado en PHP notaran que básicamente es igual, de hecho prácticamente las mismas funciones.
Antes de ejecutar este programa cree una base de datos en mi servidor llamada cmysql, del mismo valor cree el usuario y la clave, luego cree una tabla llamada tabla con 2 campos uno llamado visitante de tipo text y otro contador de tipo int ( que por cierto no va a contar )
El código fuente en C
#include <stdio.h>
#include <mysql.h>
int main ()
{
// Tipos de Mysql
MYSQL *conexion;
MYSQL_RES *R;
MYSQL_ROW COL;
// Inicializa ? JAJAJA OK,
la funcion es mas clara que el comentario
conexion = mysql_init(NULL);
// Se conecta a la DB con
las variables previas o usar aqui mismo STRINGs
mysql_real_connect(conexion,
servidor, usuario, clave, db, 0, NULL, 0);
// se agrega un registro por
cada ejecutsion del programa
mysql_query(conexion,
“insert into tabla (visitante,contador) values(’Mysql C en
localhost’,100);”);
// Consulta de la tabla, en
esta y la linea a anterio igual podria usarse una varaible STRING para
el Query
mysql_query(conexion,
“select * from tabla;”);
// Resultados y ciclo para
mostrar el resultado, COL es de izquierda a derecha en la tabla
R =
mysql_use_result(conexion);
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Consultando desde el cliente Mysql
mysql> insert into tabla (visitante,contador) values(’Last Dragon’,1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tabla;
+———————-+———-+
| visitante | contador |
+———————-+———-+
| Last Dragon | 1 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
+———————-+———-+
5 rows in set (0.00 sec)
mysql>
La compilación es algo aparatosa afortunadamente mysql incluye el comando mysql_config que dependiendo el parámetro nos entrega las banderas para el compilador
Mysql_config –cflags y mysql_config –libs
Tips bashero
Cualquier comando con un símbolo de dólar encerrado entre paréntesis arroja su salida al standart output, por ejemplo echo $(ls) daría un echo del echo del ls, mysql_config tira muchos parámetros asi que, podemos resumirlos con esto $(mysql_config –cflags) $(mysql_config –libs) al pasarlos directamente como parámetros de compilador
Despues de leer en el “nuevo” cofradía, acerca de SolarSocketsque es una librería para manejar conexiones TCP de forma sensilla y basada en clases o código lineal, vi que efectivamente la programación en esta librería era demasiado fácil para lo que respecta a C, sin embargo la clase en si misma no es una idea original, es el mismo mecanismo que usa C# para manejar conexiones TCP
El video de uso de SolarSockets:
En este articulo, escribo un código similar al sugerido por SolarSockets ,en GNU/Linux y ademas en Windows escribo un par de programas cliente – servidor, para un programa de chateo entre 2 puntos.
El siguiente código, imita al código de SolarSockets
using System;
using System.Net.Sockets;
namespace sockets1
{
class Program
{
public static void Main(string[]
args)
{
TcpClient servidor;
try
{
// Creando conexion al servidor
servidor = new TcpClient(”www.google.com”, 80);
}
catch
{
Console.WriteLine(”Fallo la conexion”);
Console.ReadKey(true);
return;
}
// Creando flujo de red y de el la lectura y escritura del mismo
NetworkStream flujodered = servidor.GetStream();
System.IO.StreamReader leerflujo = new
System.IO.StreamReader(flujodered);
System.IO.StreamWriter escribirflujo = new
System.IO.StreamWriter(flujodered);
String datos = “”;
try
{
// Lee del flujo de datos, en este caso , leera lo que envie
www.google.com y lo imprimira en pantalla
// para provochar que google envie algo, se envian 2 nuevas lineas y 2
retornos de carro “enters”
{
escribirflujo.WriteLine (”\n\r\n\r”);
escribirflujo.Flush();
datos = leerflujo.ReadToEnd();
Console.WriteLine(datos);
}
}
catch
{
Console.WriteLine(”Error al recibir el flujo de datos”);
}
if
(cliente.Connected)
{
// Terminar si
la conexion falla
}
else return;
NetworkStream
flujodered = new NetworkStream(cliente);
System.IO.StreamWriter escribirflujo = new
System.IO.StreamWriter(flujodered);
System.IO.StreamReader leerflujo = new
System.IO.StreamReader(flujodered);
try
{
escribirflujo.WriteLine (”Saludos desde la red”);
escribirflujo.Flush();
Console.WriteLine (leerflujo.ReadLine());
}
catch(Exception e)
{
}
System.Console.ReadLine();
}
}
}
Ahora que la forma básica ha quedado clara de cómo conectarse o recibir conexiones, voy a escribir un programa en Windows que haga un chat
Para este programa, lo único adicional, será que le programare un hilo que se encargara de escuchar las conexiones, este hilo tiene un propósito, separa la ejecución del programa principal mientras espera recibir datos, porque de no hacerlo así, el programa se pasmaría, ya que se quedaría esperando la conexión y no atendería ni eventos, a la vista de quien lo usa, parecería que el programa se congelo. Así que al separar esa parte del código en un hilo, el hilo se queda esperando dato todo el tiempo y cuando los recibe, se los pasa por medio de variables estáticas al código principal
El código y los programas están dentro del siguiente ZIP, un video de cómo funciona a continuación.
Estuve por días pensnado como haría para portar a C# el código del convertidor de temperatura y es que a diferencia de Java, C# no tiene APIS portables de forma oficial para la creación de GUIs, por lo que el código de C# para Linux incluso puede ser diferente para el de Windows y sin contar que seria totalmente diferente al código de Java, como puede verse en este articulo que escribi hace ya mucho tiempo.
http://www.lastdragon.net/?p=60
En conclusión, No hay respuesta esclarecedora para transcribir los artículos de Javasonico a C# con respeto al GUI y el asunto del convertidor de temperatura.
Entre otros artículos, me encontré que continua la explicación del ciclo for, asi que he transcrito a C# el código sencillo pero que explica el básico for
El código en C#
class ClaseFor
{
public static void Main(string[]
args)
{
for (int
x=0;x<=100;x++)
{
System.Console.WriteLine (”No debo gritar en clase”);
}
}
}
El código en Java
public class Clasefor {
public static void main(String[] args) {
for(int x=0;x<=100;x++){
System.out.println(”No debo gritar en clase”);
}
}
Salida esperada.
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
No debo gritar en clase
Acabo de descubrir en la página de JavaSonicos, mencionan una lista de IDES para programar en Java, Lo primero que recordé de Eclipse fue que el diseñador de GUIs es bajo licencia o con un trial de 30 días. Por lo que no le veía realmente la utilidad, asi que durante años continúe programando a base de VIM en GNU/Linux y a bloc de notas en Windows, a algunas nenas les parecerá una salvajada, pero así programan los hombres =) , bueno ahora empezare a usar NetBean, me convertiré en el metrosexual del Java jejeje, es incrible lo que puede hacer este IDE, en 3 minutos escribí el código del Applet y en 2 mas lo subía al servidor, es muy fácil escribir el código en los eventos, vaya me ahorre mucho tiempo de tipeado. 5 minutos, No esta mal, el siguiente applet captura alguno de los eventos del ratón.
Si por ahí hay algún otro programando a base de VIM, les recomiendo netbean, es libre e incluye diseñadores de GUI tanto para aplicaciones de escritorio como Applets , además de que como al VIM se le puede configurar que reconozca otros lenguajes como PHP, C y C++