Codigo fuente en Delphi de un proxy



La biblioteca Synapse incorpora en la carpeta "demo" de su instalación el código fuente de un proxy realizado en Delphi, el cual me ha sorprendido por su estabilidad.
Para que funcione tenemos que configurar nuestro navegador, en el caso de IE8 desde Herramientas->Opciones->Pestaña Conexiones->Botón Configuración LAN-> servidor proxy indicando como dirección: 127.0.0.1 y puerto 3128.

Después iniciaremos la aplicación httproxy de Synapse pulsando el botón "Start" y desde ese momento todas las peticiones del navegador hacia Internet pasarán a través de nuestro proxy quedando registradas en un archivo llamado access.log.

Página web de Synapse:
http://www.ararat.cz/synapse/doku.php/start

Tarjeta controladora y tarjeta de desarrollo



DelphiController y DelphiDevBoard es un controlador de dispositivos y una tarjeta de desarrollo que permiten practicar la programación de sistemas embebidos y microcontroladores. Se proporcionan plantillas, compilador compatible en Pascal y un entorno de depuración y desarrollo basado en un IDE standard. (Delphi, FreePascal)
Más información en www.blaisepascal.eu

Hardware.
M324D40 DelphiCPU
www.blaisepascal.eu
A programmed AtMega324 40 pin dual in line controller chip measuring
50 x 17 x 4 mm. This chip contains all basic computer parts like :
- 32 kBytes Flash memory for program storage
- 2 kByte RAM for variables
- 32 general purpose registers
- 1 kByte of EeRom for non - volatile storage
- a AVR CPU
- a hardware multiplier for fast mathematics
- a clock oscillator able to run up to 20 MHz.
The chip also contains a set of input and output peripherals like :
- JTAG interface for real-time debugging
- 3 timer counters with interrupts for a system clock and delays
- 6 PWM channels which can be used for motor speed and direction
control
- 8 analog to digital converters 10 Bit with 1x, 10x and 200x amplifiers
for interfacing with analog sensors, voltages and potentiometers
- I2C interface for expanding the number of peripherals
- Watchdog timer for automatic reset when a failure is detected
- Analog comparator for accurate level detection
- 32 programmable digital in- and output lines for lamps, switches,
LCD, TCP/IP etc.
4 KByte of the 32 KByte flash is reserverved and
preprogrammed with the:
- OS : an operating system implementing a system clock, starting of
servers and user applications
- BIOS : I/O drivers for EeRom and standard hardware
- Hardware test : standard hardware test application
- M485A server : monitor for RAM and EeRom including a Flash
programmer for user applications
- I/O server : synchronized I/O with RAM records

Author:
Anton J. Vogelaar

Comprobar si un puerto remoto está abierto

uses

Winsock;



function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;

var

client : sockaddr_in;

sock : Integer;

ret : Integer;

wsdata : WSAData;



begin

Result:=False;

ret := WSAStartup($0002, wsdata); //Inicializa Winsock

if ret<>0 then exit;

try

client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)

client.sin_port := htons(dwPort);

client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));

sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket

Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket

finally

WSACleanup;

end;

end;



Ejemplo:

if PortTCP_IsOpen(113,'127.0.0.1') then



Funciones para manipular bits

//lee si un bit determinado es igual a 1



function Get_a_Bit(const aValue: Cardinal; const Bit: Byte): Boolean;

begin

Result := (aValue and (1 shl Bit)) <> 0;

end;



//pone un bit determinado a 1



function Set_a_Bit(const aValue: Cardinal; const Bit: Byte): Cardinal;

begin

Result := aValue or (1 shl Bit);

end;



//pone un determinado bit a 0



function Clear_a_Bit(const aValue: Cardinal; const Bit: Byte): Cardinal;

begin

Result := aValue and not (1 shl Bit);

end;



//Activa o desactiva un bit



function Enable_a_Bit(const aValue: Cardinal; const Bit: Byte; const Flag: Boolean): Cardinal;

begin

Result := (aValue or (1 shl Bit)) xor (Integer(not Flag) shl Bit);

end;

Números de Catalan en Delphi

En combinatoria los números de Catalan forman una secuencia de números naturales que aparecen en varios problemas de conteo que habitualmente son recursivos. Obtienen su nombre del matemático belga Eugène Charles Catalan (1814–1894).

El n-ésimo número de Catalan se obtiene, aplicando coeficientes binomiales a partir de la siguiente fórmula:

C_n = \frac{1}{n+1}{2n\choose n} = \frac{(2n)!}{(n+1)!\,n!} \qquad\mbox{ con }n\ge 0.
Existen múltiples problemas de combinatoria cuya solución la dan precisamente estos números.

El código de la función recursiva en Delphi es:

function Catalan(n:integer):real ;
begin
if n=0 then
result :=1 //Condicion de parada
else result:=(2*((2*n)-1))/(n+1)*Catalan (n-1);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin //Calcular el 16 número de catalan p.ej.
showmessage(floattostr(catalan(16)));

end;

Info:
http://www.delphiforfun.org/Programs/Math_Topics/Catalan.htm

Algoritmo de Boyer-Moore-Horspool

El algoritmo de Boyer-Moore-Horspool se utiliza para encontrar eficientemente patrones en una secuencia. Es fácil de implementar y utiliza un preprocesamiento del texto a buscar, compara de derecha a izquierda y realiza la búsqueda del patrón en un tiempo O(MN). siendo M la longitud del texto. Es considerado el mejor algoritmo de búsqueda de un patrón en un texto en aplicaciones usuales.

En caso de una no ocurrencia o una ocurrencia total del patrón se usa una función preprocesada para saltar:

  1. Salto del mal carácter(bad-character shift) (o salto de ocurrencia).

Horspool propuso utilizar solamente el salto del mal carácter para calcular los saltos en el algoritmo de Boyer-Moore.

El salto del mal carácter consiste en:

  1. Alinear cada carácter del alfabeto Σ con la ocurrencia más a la derecha en x[0, …, m-2].
  2. Si el carácter no ocurre en el patrón x, la no ocurrencia de x puede incluir el carácter, y alinearlo en el lado más izquierdo del patrón.
  3. Esta operación (usada en el algoritmo BM) no es muy eficiente para alfabetos pequeños, pero cuando el alfabeto es grande comparado con la longitud del patrón llega a ser muy útil.

Se calcula el preprocesamiento del patrón de la siguiente forma:

  1. Se calcula la distancia mínima entre el último carácter y la ocurrencia de cada carácter del alfabeto de la hilera principal.

Para la búsqueda:

  1. Consiste en la comparación de cada carácter del texto con las posiciones del patrón en el orden m-1, 0, 1, 2, …, y m-2, si se da una ocurrencia del patrón o no.
  2. Cuando se encuentra una no ocurrencia, al hacer la primera comparación entre el patrón y el texto, el salto se calcula bmBc[c], donde c es el carácter del texto.
  3. Cuando se encuentra una no ocurrencia o una ocurrencia total, al hacer las siguientes comparaciones entre el patrón y el texto, el salto se calcula bmBc[c], donde c es el carácter del patrón.

Ref:

UCR –ECCI
CI-2414 Recuperación de Información
Prof. M.Sc. Kryscia Daviana Ramírez Benavides

Implementación en Delphi:

function search(pat: string; text: string): integer;
var
i, j, k, m, n: integer;
skip: array [0..MAXCHAR] of integer;
found: boolean;
begin
found := FALSE;
search := 0;
m := length(pat);
if m=0 then
begin
search := 1;
found := TRUE;
end;
for k:=0 to MAXCHAR do
skip[k] := m; {*** Preprocessing ***}
for k:=1 to m-1 do
skip[ord(pat[k])] := m-k;
k := m;
n := length(text); {*** Search ***}
while not found and (k <= n) do begin i := k; j := m; while (j >= 1) do
begin
if text[i] <> pat[j] then
j := -1
else
begin
j := j-1;
i := i-1;
end;
if j = 0 then
begin
search := i+1;
found := TRUE;
end;
k := k + skip[ord(text[k])];
end;
end;
end;


Si queremos una medida, en millonésimas de segundo, del tiempo consumido por un algoritmo, podemos utilizar lo siguiente:

const   UnMillon = 1000000;
var Frecuencia, X, Y: Int64;
begin
QueryPerformanceFrequency(Frecuencia);
QueryPerformanceCounter(X);
Algoritmo;
QueryPerformanceCounter(Y);
ShowMessage(FormatFloat('0,', (Y - X) * UnMillon div Frecuencia));
end;





Capacidades Touch and Gesture

El nuevo RAD Studio 2010 incorpora las capacidades "Touch and Gesture " permitiendo que las aplicaciones puedan ser totalmente independientes del teclado, como puede ser en el caso de una aplicación que se ejecute en modo kiosko, ya que incorpora un componente llamado TTouchKeyboard que simula un teclado en pantalla, para utilizar en pantallas táctiles.

Video-Tutorial de Andreano Lanusse en español donde explica detalladamente estas capacidades.
http://cc.embarcadero.com/Item/27622

Comentario en DrBob:
http://www.drbob42.com/examines/examinB6.htm

Código fuente con ejemplos para Delphi 2010






Google Static Map con Delphi







El servicio Google Static Map permite obtener una imagen estática de una localización sin requerir Javascript y sin cargar ninguna página web. Este servicio crea un mapa basado en los parámetros de la URL enviados desde una petición HTTP estándar.



Lo único que necesitamos es un componente TidHttp y un Timage.



Primeramente necesitamos poner la propiedad UserAgent de TidHttp p.ej: Mozilla/3.0, después se necesita construir la url con los parámetros correctos como puede ser lo siguiente:

http://maps.google.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&sensor=false

Ahora utilizando el componente TidHttp enviamos la Url anterior y obtenemos la imagen del mapa.



var

StreamData :TMemoryStream;

JPEGImage : TJPEGImage;

begin

EditURL.Text:=buildUrl; //Construye la url con los parámetros

StreamData := TMemoryStream.Create;

JPEGImage := TJPEGImage.Create;

try

try

idhttp1.Get(EditURL.Text, StreamData); /Envía la petición y obtiene la imagen

StreamData.Seek(0,soFromBeginning);

JPEGImage.LoadFromStream(StreamData);//carga la imagen en el stream

ImageMap.Picture.Assign(JPEGImage);//Asigna la imagen al objeto ImageMap

Except On E : Exception Do

MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);

End;

finally

StreamData.free;

JPEGImage.Free;

end;

end;



Código fuente



Guía para desarrolladores de Google Static Map

http://code.google.com/intl/es-US/apis/maps/documentation/staticmaps/













Programar add-in con Delphi para MS Outlook



Aquí tienen unos videos-tutoriales en inglés que enseñan a programar un complemento (add-in) para el programa MS Outlook con Delphi.


Para ello es necesario importar el componente Microsoft Add-in Designer desde el menú Component->Import Component. En la explicación muestra cómo utilizar los objetos ActiveX y los cambios que hay que hacer en el regedit.



Parte 1:

http://www.giesen-edv.com/~ogiesen/demos/Part1a.html



Parte 2:

http://www.giesen-edv.com/~ogiesen/demos/Part2.html






Descripción de los formatos de archivos


¿No han sentido curiosidad por saber cómo es el formato interno de un archivo doc , xls, pdf, wav, bmp, jpg, psd, etc.? pues en el siguiente link tienen la información que buscan, en algunos casos remiten a una página web y en otras a un documento de texto que contiene una descripción detallada de la estructura del fichero.

En algunos casos como excel, photoshop, word, postscript también describe el formato de archivo de antiguas versiones.

Es un link que deberían guardar en su carpeta de favoritos.



http://www.wotsit.org

Búsqueda de partners

El siguiente link nos ofrece un listado de partners tecnológicos de Embarcadero y que por tanto han desarrollado productos para Delphi, Delphi Prism, JBuilder, etc., podemos buscar por versión, plataforma, países, tipo de producto.
Ofrecen una descripción detallada del tipo de empresa que es, a qué se dedican, qué desarrollan y dan información del componente que han programado que es lo que nos interesa.


http://tp.embarcadero.com/partnercentral.exe/default


Detección de colisiones 2D



El componente TRSCollisionMap implementa las clases necesarias para la detección de colisiones en objetos 2D, así que si se animan a programar un juego aquí tienen parte del trabajo hecho.


Por lo que he visto en la documentación es útil en el caso de que no existan muchos objetos moviéndose en pantalla.



Código fuente y ejecutable:

http://www.riversoftavg.com/Files/RSCollisionDetection.zip









Integrar GoogleEarth en una aplicación Delphi




En esta web indican cómo integrar GoogleEarth en una aplicación realizada con Delphi. De antemano advierto que no es sencillo, es necesario seguir paso a paso cada uno de los 5 apartados en que se divide la explicación, lo bueno que tiene es que dan el código fuente.

Para que funcione hay que instalar el plugin de GoogleEarth, en caso de que no tenerlo, al iniciar la aplicación te muestra una pantalla desde la que se puede descargar.

Probado en Delphi 7.



Explicación (en inglés):

http://www.delphidabbler.com/articles?article=26&part=1



Código fuente:

http://www.delphidabbler.com/download?id=art-26














Funciones matemáticas, estadísticas, XML en Delphi




Navegando por Internet me encontré con está página que contiene una extensa cantidad de utilísimas funciones:

Están agrupadas en units: cUtils.pas, cMaths.pas, cMaths3D.pas, cStrings.pas, cXMLparser.pas,


cUnicode.pas, cStreams.pas, cUnixUtils.pas, cXMLFunctions.pas, cStatistics.pas, cComplex.pas, cMatrix.pas, cVectors.pas


¡ Cuánto tiempo he perdido programando cosas parecidas sin darme cuenta que alguien altruistamente las ponía a disposición de todos !



Referencia:

http://www.eternallines.com



Última versión:

http://fundementals.sourceforge.net/dl.html



Sourceforge page:

http://sourceforge.net/projects/fundementals/



E-mail:

fundamentals@eternallines.com

david@e.co.za







LIBROS:



Matemáticas, el fascinante mundo de los números



Matrix computations (Matematical Science)



Geometría analítica del plano y del espacio



Mecánica de fluidos



Geometría Afín y Euclidea

Computación distribuida en Delphi





Para los interesados en computación distribuida aquí tienen un interesante artículo que muestra cómo utilizar la librería open-source hxGrid paso a paso.

En resumen lo que hace es:


Inicialmente cada uno de los equipos "Agente" envía paquetes de broadcast para localizar al equipo "Coordinador" y cuando lo encuentra le envía su status periódicamente (porcentaje de CPU libre, RAM libre, número de tareas en cola)


Para comenzar a usar el grid la aplicación inicializa la librería hxGrid, después conecta con un coordinador solicitando la lista de los agentes para conectarse a ellos. Desde ese momento el equipo está preparado para ejecutar tareas remotas, además solicita continuamente la lista de nuevos agentes que podrían unirse a la sesión activa.


La aplicación grid añade tareas a la cola de ejecución, dichas tareas son enviadas continuamente a los agentes en background. Si la conexión con algún agente se ha perdido, la equipo es capaz de reasignar tareas a otro agente.



Página web:

http://www.codeproject.com/KB/threads/hxgrid.aspx



ClubDelphi

http://www.clubdelphi.com/foros/showthread.php?t=69899










Interactive Brokers con Delphi ( TWS )

.



En el fichero tienen ejemplos sobre cómo utilizar la API de la Trader Workstation de Interactive Brokers con Delphi con el fin de conseguir una completa automatización de la compra-venta de accciones, contratos, etc. En concreto se basan en el emini-sp500 código "ES" vencimiento septiembre 2010.
Con un poco de habilidad pueden programar sus estrategias, lanzar órdenes cuando se alcance un nivel de precios determinado, definir órdenes limitadas, etc.
No olviden que antes de utilizar sus procedimientos en la cuenta real deben probarlos en la cuenta simulada de IB.

Descargar el fichero




Reloj binario



Este programa muestra un reloj binario. Sirve para aprender a manejar el objeto tImage mediante el que se representa de forma gráfica los datos binarios.

Link de descarga

Autor: Sami
sami_inf@hotmail.fr



Controlar 8 inputs / 16 outputs del PIC18F4550 desde USB





Aquí se muestra la forma para manejar 8 entradas y 16 de salidas del microprocesador PIC18F4550 desde el puerto USB. Se necesita cargar previamente el fichero PIC.HEX en el micro.

Existen 2 versiones, en una utilizan la API de Windows y en la otra el componente TJvHidController que se puede descargar desde aquí:

http://www.soft-gems.net/index.php?option=com_content&task=view&id=14&Itemid=33



Código fuente en Delphi



Autor: rylryl

Página personal: http://pageperso.aol.fr/CRylou/TC_UNIV_rylryl.html







Notificar cambios en ficheros

Con este código se utilizan funciones callback para detectar cualquier cambio en los ficheros (creado, borrado, renombrado) que se produzca por cualquier aplicación o por el usuario en las carpetas que previamente seleccione, también informará si una unidad ha sido conectada o desconectada (red, usb) , si un CD o DVD ha sido insertado o expulsado, etc.
La aplicación utiliza las funciones del API de Windows: SHChangeNotifyRegister, SHChangeNotifyDeregister, SHILCreateFromPath. Que son las encargadas de detectar cualquier cambio en el shell del sistema, mediante "interrupciones".

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=427

Ver mapa de Google Maps dando coordenadas


Con este código veremos el mapa de Google Maps, tecleando las coordenadas de un punto de la Tierra (latitud y longitud) tanto si son en el sistema decimal o sexagesimal.
Lo interesante de esto es que uno mismo puede combinar los datos de su GPS portátil con GMaps.
Se necesita obtener una Key (la da Google gratuitamente) desde aquí:
http://code.google.com/apis/maps/signup.html

Se necesita naturalmente tener una cuenta de Google.




Link de descarga




Autor: Amine (Argelia)


Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...