Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/asterion/asterion.almadark.com/wp-settings.php on line 18

Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/asterion/asterion.almadark.com/wp-includes/comment-template.php on line 0

Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/asterion/asterion.almadark.com/wp-includes/comment-template.php on line 0

Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /home/asterion/asterion.almadark.com/wp-includes/comment-template.php on line 0

Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /home/asterion/asterion.almadark.com/wp-includes/comment-template.php on line 0

Strict Standards: Declaration of Walker_Category_Checklist::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/asterion/asterion.almadark.com/wp-admin/includes/template.php on line 430

Strict Standards: Declaration of Walker_Category_Checklist::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/asterion/asterion.almadark.com/wp-admin/includes/template.php on line 430

Strict Standards: Declaration of Walker_Category_Checklist::start_el() should be compatible with Walker::start_el(&$output) in /home/asterion/asterion.almadark.com/wp-admin/includes/template.php on line 430

Strict Standards: Declaration of Walker_Category_Checklist::end_el() should be compatible with Walker::end_el(&$output) in /home/asterion/asterion.almadark.com/wp-admin/includes/template.php on line 430

Warning: Cannot modify header information - headers already sent by (output started at /home/asterion/asterion.almadark.com/wp-settings.php:18) in /home/asterion/asterion.almadark.com/wp-includes/feed-rss2.php on line 8
asterion » PROGRAMACION http://asterion.almadark.com Y la Reina dio a luz un hijo que se llamo Asterion Thu, 14 Jun 2012 02:08:50 +0000 http://wordpress.org/?v=2.7.1 en hourly 1 Huevos de pascua en Google http://asterion.almadark.com/2008/08/21/huevos-de-pascua-en-google/ http://asterion.almadark.com/2008/08/21/huevos-de-pascua-en-google/#comentarios Thu, 21 Aug 2008 13:25:28 +0000 asterion http://asterion.almadark.com/2008/08/21/huevos-de-pascua-en-google/ Primero enterémonos que es un huevo de pascua por medio de nuestra enciclopedia favorita:

Un huevo de pascua virtual es un mensaje oculto, o una capacidad escondida, contenido en un objeto, como una película, un disco compacto, DVD, programa informático, o videojuego. El origen del término es a menudo atribuido falsamente a la película El regreso de los muertos vivientes, pero mucho antes del lanzamiento de ésta, el videojuego de Atari: Adventure de 1978, contenía el primer huevo de pascua virtual que se conoce, introducido por el programador Warren Robinett (su propio nombre).

Entre los programadores, parece haber una motivación en dejar una marca personal, casi un toque artístico sobre un producto intelectual, el cual es por naturaleza estándar y funcional. Pero el motivo de Warren Robinett parece haber sido el de obtener reconocimiento por su trabajo, porque en ese entonces no se les daba crédito a los programadores de videojuegos. Es una acción análoga a la de Diego Rivera al incluirse en sus murales, o a la de Alfred Hitchcock colocándose como extra en sus propias películas (lo que luego se llamaría cameo). Wikipedia

Ok, ya que lo tenemos, debemos saber que los programadores de Google no son ajenos a esos «bajos instintos» y dejan también su sello personal en el buscador. Empecemos con uno sencillo:

Abramos por ejemplo http://www.google.com.pe
Luego digitamos: google 133t y le damos al botón: «Voy a tener suerte» que dicho sea de paso es el que siempre apretaremos, salimos a esta pantalla:

Google 133t

Si ahora regresamos a la pantalla de búsqueda normal del google y escribimos google gothic y le damos al botón de la derecha (Voy a tener suerte), salimos a esta extraña página de busqueda:

Google Gothic

Esta en mantenimiento dicen. Bueno, ahora volvamos a la pantalla inicial y digitemos: ewmew fudd, nos llevara a esta pantallita:

Ewmew Fudd

Ahora en esta misma extraña página de búsqueda, escribamos: xx-klingon y veremos esto:

Xx Klingon

Ahora en esta misma pantalla digitemos: xx-piglatin (siempre presionando el botón de la derecha eh) y nos encontraremos con esto:

Xx Piglatin

Por si eso fuera poco, en esta misma pantalla digitemos: google bsd, y tendremos esta novedad:

Google Bsd

Ahora como homenaje al linux, retrocedamos una página y en lugar de poner google bsd, pongamos google linux.

Google Linux

Ok, ahora retrocedemos y en lugar de poner google linux, ponemos: google easter egg

Google Easter Egg

Por alguna razon no me sale el conejito que salta (que deberia salir junto con el huevo de pascua), pero bueno, basicamente esos son todos los huevos de pascua funcionales (porque he sabido que habian algunos mas, pero que acabo de probar que no funcionan) que encontré por la red.
Enjoy...

]]>
http://asterion.almadark.com/2008/08/21/huevos-de-pascua-en-google/feed/
Encripto 1.0 http://asterion.almadark.com/2008/07/09/encripto-1-0/ http://asterion.almadark.com/2008/07/09/encripto-1-0/#comentarios Wed, 09 Jul 2008 20:31:14 +0000 asterion http://asterion.almadark.com/2008/07/09/encripto-1-0/ Hace poco necesite un programa que encripte archivos, y que no haga mella en mi economía, y luego de revisar algunos freeware's que andan por ahí, decidí usar código libre de encriptación y compilar mi propio y simple encriptador de archivos.

Tendrá solo lo básico y será fácil usar, me dije, y bueno luego de encontrar el código necesario, aquí tienen el resultado para aquellos que como yo, necesitan seguridad en la transferencia o almacenamiento de sus datos.

Encripto

Lo llame Encripto 1.0, desconozco si algún día compilare una versión 2.0, pero la llamo así por cuestión de orden. El código fuente pertenece,-salvo pequeños cambios míos- a Uri Fridman, y lo puede revisar en este link.

Funcionamiento

El funcionamiento es casi intuitivo:

Encriptar archivo:
Denle clic al botón «Buscar» y se abrirá una ventana, en la cual deben buscar el archivo a encriptar, una vez hallado le hacen doble clic o presionan el botón «abrir».
Luego de esto introducen la Contraseña que evitara que el archivo sea leído por el que la desconozca (no olvide su contraseña, perdería su información). Luego de esto presione el botón «Encriptar», y le saldrá un mensaje informándole del éxito de la operación y el nombre del archivo (este será reemplazado por el encriptado).

Desencriptar archivo:
Los pasos son muy parecidos a los anteriores:
Denle clic al botón «Buscar» y se abrirá una ventana, en la cual deben buscar el archivo a desencriptar, una vez hallado le hacen doble clic o presionan el botón «abrir».
Luego de esto introducen la Contraseña con la que encriptaron el archivo. Luego de esto presione el botón «Desencriptar», y le saldrá un mensaje informándole del éxito de la operación y el nombre del archivo (el encriptado será reemplazado por el desencriptado).

Crear Hash:
¿Que es el hash antes que nada?
Pues en pocas palabras, es una serie de extraños caracteres que identifican al archivo encriptado para que si alguien lo modifica antes de llegar a su destinatario, pueda identificar su adulteración.

Deben saber que en el hash no se encuentra el password, solo referencias a la cantidad de datos en hexadecimal o base64 (puede ser cualquiera de los dos) de su archivo, y solo de él, por lo tanto es como su huella digital.

Si usted, manda el archivo encriptado junto con el hash, la persona que lo recibe (que debe saber la contraseña) lo abrirá, comparara hash y sabrá que no ha sido corrompido (ya se sabe que no puede ser abierto, pero podría ser adulterado a nivel binario o hexadecimal).
Termino la explicación, si quieren una explicación mas profunda lean wikipedia.

Bueno, para crear un hash lo único necesario es que este seleccionado el achivo en cuestión por medio del botón «Buscar», y una vez que su ruta este en el Edit de «Archivo», presiona el botón «Crear hash» y el hash se producirá en el Edit llamado «Hash».
Eso es todo, garantizo que no existe ningún virus ni troyano ni nada fuera del encriptador en el ejecutable. Pero no me responsabilizo por el mal uso de el o perdida de información producida por olvido de contraseñas.

Descargalo aquí

Enjoy…

]]>
http://asterion.almadark.com/2008/07/09/encripto-1-0/feed/
Roadrunner de IBM marca record de cálculo http://asterion.almadark.com/2008/06/09/roadrunner-de-ibm-marca-record-de-calculo/ http://asterion.almadark.com/2008/06/09/roadrunner-de-ibm-marca-record-de-calculo/#comentarios Mon, 09 Jun 2008 20:50:01 +0000 asterion http://asterion.almadark.com/2008/06/09/roadrunner-de-ibm-marca-record-de-calculo/ Correcaminos

Los militares norteamericanos encargaron a IBM el diseño y construcción de una supercomputadora que les permitiera alcanzar la marca de mil billones de cálculos por segundo, denominado petaflop. La cual ha alcanzado con ayuda de sus tres tipos de procesadores y una energía de 3 megavatios consumidos.

«Flop» es la sigla en inglés que corresponde a operaciones de punto flotante por segundo, y un «petaflop» equivale a 10 «flop» elevado a la décimo quinta potencia (mil billones).

A pesar del gusto que me da el saber que llegamos cada vez mas lejos con la tecnología, me da que pensar el hecho que tuvo que ser financiado militares, ósea con fines de control militar y guerra. Tenia que ser…

]]>
http://asterion.almadark.com/2008/06/09/roadrunner-de-ibm-marca-record-de-calculo/feed/
Serie admin / Programando con APIS en Delphi http://asterion.almadark.com/2007/06/22/serie-admin-programando-con-apis-en-delphi/ http://asterion.almadark.com/2007/06/22/serie-admin-programando-con-apis-en-delphi/#comentarios Fri, 22 Jun 2007 15:21:19 +0000 asterion http://asterion.almadark.com/2007/06/22/serie-admin-programando-con-apis-en-delphi/ Cuando milite en el grupo [aRC] programe una serie de pequeñas aplicaciones a manera de ejercicio para mostrar a newbies el manejo del Registro de Windows.
La llame serie «admin». Todas fueron programadas en Delphi 6 y usando las Apis de Windows por lo cual mis ejecutables empacados ocupan tan solo 54 Kb la mayoría de ellos.
La manera de crear programas en delphi sin hacer uso del entorno visual (me refiero a crear ventanas y botones por código) esta explicada a grosso modo en mis anteriores post llamados:

Programando con APIS en Delphi cap. 01
Programando con APIS en Delphi cap. 02

Ok, ahora hablaremos del admin1 que es el que nos ocupa en esta ocasión.
Se trata de una sencilla aplicación que nos permite bloquear o desbloquear la opción de editar el registro de Windows (el famoso Regedit), tan usado por administradores de sistemas que coactando nuestra libertad nos muestran el famoso cuadrito:

El administrador ha bloqueado la modificación del Registro

Les pondré el código en delphi (prácticamente pascal) y el ejecutable para que lo usen para los fines que consideren convenientes. Yo lo programe con fines educativos y solo de esa manera lo he usado.
Ok sin más preámbulo veamos el código:

program admin1;

{Código fuente: a573r10n [aRC]
Compilador : Delphi 6
Funcion : Activa o desactiva la edición del regedit
Nombre : admin1}

uses
Windows,
Messages,
SysUtils,
registry;

{$R *.RES}

var
WinClass: TWndClassA;
Inst, Handle, Button1, Button2, Label1: Integer;
Msg: TMsg;
hFont: Integer;

//******************************************************************
procedure activa;
var
Ole: OleVariant;
reg:tregistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('00');
reg.WriteInteger('DisableRegistryTools',ole);
reg.RootKey:=HKEY_local_machine ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('00');
reg.WriteInteger('DisableRegistryTools',ole);
reg.Free;
end;
//******************************************************************
Procedure desactiva;
var
Ole: OleVariant;
reg:tregistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('01');
reg.WriteInteger('DisableRegistryTools',ole);
reg.RootKey:=HKEY_local_machine ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
ole:= ('01');
reg.WriteInteger('DisableRegistryTools',ole);
reg.Free;
end;
//******************************************************************
{ funcion WindowProc }
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
{ mensajes }
if (lParam = Button1) and (uMsg = WM_COMMAND) then
activa;
if (lParam = Button2) and (uMsg = WM_COMMAND) then
desactiva;
if uMsg = WM_DESTROY then
Halt;
end;
//******************************************************************
////////////////////////////// Comienzo //////////////////////////////////
begin

//******************************************************************
Inst := hInstance;
with WinClass do
begin
hIcon := LoadIcon(Inst,'MAINICON');
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := 'AG_TESTWINDOW';
hCursor := LoadCursor(0, IDC_ARROW);
end;
RegisterClass(WinClass);

//******************************************************************

{ ** Creamos la ventana principal ** }
Handle := CreateWindowEx(WS_EX_WINDOWEDGE, 'AG_TESTWINDOW', ' aRC - admin1',
WS_VISIBLE or WS_CAPTION or WS_SYSMENU,
(GetSystemMetrics(SM_CXSCREEN) div 2)-195,
(GetSystemMetrics(SM_CYSCREEN) div 2)-55,
235, 95, 0, 0, Inst, nil);
{ ** Creamos el primer boton ** }
Button1 := CreateWindow('Button', 'Activar regedit', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
8, 8, 115, 25, handle, 0, Inst, nil);
{ ** Creamos el texto1 (estatico) ** }
Label1 := Createwindow('Static', '', WS_VISIBLE or WS_DISABLED or WS_CHILD or SS_LEFT,
140, 50, 76, 13, Handle, 0, Inst, nil);

{ ** Fuentes ** }
hFont := CreateFont(-11, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

{ ** Creamos el segundo boton ** }
Button2 := CreateWindow('Button', 'Desactivar regedit', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
8, 40, 115, 25, handle, 0, Inst, nil);

//******************************************************************
{ Fuentes }
if hFont <> 0 then
begin
SendMessage(Button1, WM_SETFONT, hFont, 0);
SendMessage(Label1, WM_SETFONT, hFont, 0);
SendMessage(Button2, WM_SETFONT, hFont, 0);
end;

SetWindowText(Label1, 'a573r10n [aRC]');
UpdateWindow(Handle);

while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.

Si quieren bajar el ejecutable lo pueden hacer desde aquí.

admin1.zip

Saludos a todos y espero sus comentarios acerca del código y posibles mejoras al mismo.

]]>
http://asterion.almadark.com/2007/06/22/serie-admin-programando-con-apis-en-delphi/feed/
Una pequeña aplicación: El URLes http://asterion.almadark.com/2007/01/04/una-pequena-aplicacion-el-urles/ http://asterion.almadark.com/2007/01/04/una-pequena-aplicacion-el-urles/#comentarios Thu, 04 Jan 2007 19:48:01 +0000 asterion http://asterion.almadark.com/2007/01/04/una-pequena-aplicacion-el-urles/ granicononuevo.jpg

Hola a todos, uno de mis anteriores hobbies era Programar en un lenguaje visual llamado: Delphi. Bueno, cree esta aplicación hace algunos años para poder almacenar todas mis direcciones web, sin tener que llevármelas escritas en un papelito, o en un archivo de texto cuando salía de mi casa y tenia que entrar a Internet desde un Ciber o cabinas de internet.
Acabo de actualizar el programita, mejorando un poco el codigo. Échenle una mirada en este link:

http://asterion.almadark.com/urles/

En caso que llegue a tener algún usuario que no sea Yo o mi amigo Sergio, pueden comentar cualquier mejora que quisieran que tuviera el programa :D.

]]>
http://asterion.almadark.com/2007/01/04/una-pequena-aplicacion-el-urles/feed/
Dilo en binario http://asterion.almadark.com/2006/12/07/dilo-en-binario/ http://asterion.almadark.com/2006/12/07/dilo-en-binario/#comentarios Thu, 07 Dec 2006 16:42:41 +0000 asterion http://asterion.almadark.com/2006/12/07/dilo-en-binario/ El titulo de este post se escribiría en lenguaje binario de esta manera:

01000100011010010110110001101111001000000110010101101110001000000110001001101001
0110111001100001011100100110100101101111

Como iba diciendo:

01000101011011100010000001100101011100110111010001100101001000000111000001101111
01110011011101000010000001101100011001010111001100100000011100000110111101101110
01100100011100100110010100100000011011000110000100100000011100000110000101100111
01101001011011100110000100100000011101110110010101100010001000000110010001100101
01110011011001000110010100100000011001000110111101101110011001000110010100100000
01110000011011110110010001110010011000010110111000100000011000110110111101101110
01110110011001010111001001110100011010010111001000100000011101000110010101111000
01110100011011110010000001100101011011100010000001101100011001010110111001100111
01110101011000010110101001100101001000000110001001101001011011100110000101110010
01101001011011110010000001111001001000000111011001101001011000110110010101110110
01100101011100100111001101100001001011100010000001011001001000000110110101100001
01110011001000000110000101100010011000010110101001101111001000000110110001100101
01110011001000000111000001101111011011100110010001110010011001010010000001101100
01100001001000000110110001101001011100110111010001100001001000000110010001100101
00100000011011000110111101110011001000000110001101100001011100100110000101100011
01110100011001010111001001100101011100110010000001100001011100110110001101101001
01101001001000000111100100100000011100110111010100100000011001010111000101110101
01101001011101100110000101101100011001010110111001110100011001010010000001100101
01101110001000000110001001101001011011100110000101110010011010010110111100101110
01000011011101010110000101101100011100010111010101101001011001010111001000100000
01100011011011110110110101100101011011100111010001100001011100100110100101101111
00100000011001000110010100100000011100000111001001100101011001100110010101110010
01100101011011100110001101101001011000010010000001100101011011100010000001100010
011010010110111001100001011100100110100101101111001000000011101001010000

Esta es la web donde podrán acceder a la traducción:

http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/Binary_To_Text.asp


Aca una pequeña lista de los caracteres en codigo ASCII y su equivalente en binario:

Text ASCII Binary
n/a chr(0) 00000000
n/a chr(1) 00000001
n/a chr(2) 00000010
n/a chr(3) 00000011
n/a chr(4) 00000100
n/a chr(5) 00000101
n/a chr(6) 00000110
n/a chr(7) 00000111
n/a chr(8) 00001000
n/a chr(9) 00001001
n/a chr(10) 00001010
n/a chr(11) 00001011
n/a chr(12) 00001100
n/a chr(13) 00001101
n/a chr(14) 00001110
n/a chr(15) 00001111
n/a chr(16) 00010000
n/a chr(17) 00010001
n/a chr(18) 00010010
n/a chr(19) 00010011
n/a chr(20) 00010100
n/a chr(21) 00010101
n/a chr(22) 00010110
n/a chr(23) 00010111
n/a chr(24) 00011000
n/a chr(25) 00011001
n/a chr(26) 00011010
n/a chr(27) 00011011
n/a chr(28) 00011100
n/a chr(29) 00011101
n/a chr(30) 00011110
n/a chr(31) 00011111
n/a chr(32) 00100000
! chr(33) 00100001
» chr(34) 00100010
# chr(35) 00100011
$ chr(36) 00100100
% chr(37) 00100101
& chr(38) 00100110
' chr(39) 00100111
( chr(40) 00101000
) chr(41) 00101001
* chr(42) 00101010
+ chr(43) 00101011
, chr(44) 00101100
- chr(45) 00101101
. chr(46) 00101110
/ chr(47) 00101111
0 chr(48) 00110000
1 chr(49) 00110001
2 chr(50) 00110010
3 chr(51) 00110011
4 chr(52) 00110100
5 chr(53) 00110101
6 chr(54) 00110110
7 chr(55) 00110111
8 chr(56) 00111000
9 chr(57) 00111001
: chr(58) 00111010
; chr(59) 00111011
< chr(60) 00111100
= chr(61) 00111101
> chr(62) 00111110
? chr(63) 00111111
@ chr(64) 01000000
A chr(65) 01000001
B chr(66) 01000010
C chr(67) 01000011
D chr(68) 01000100
E chr(69) 01000101
F chr(70) 01000110
G chr(71) 01000111
H chr(72) 01001000
I chr(73) 01001001
J chr(74) 01001010
K chr(75) 01001011
L chr(76) 01001100
M chr(77) 01001101
N chr(78) 01001110
O chr(79) 01001111
P chr(80) 01010000
Q chr(81) 01010001
R chr(82) 01010010
S chr(83) 01010011
T chr(84) 01010100
U chr(85) 01010101
V chr(86) 01010110
W chr(87) 01010111
X chr(88) 01011000
Y chr(89) 01011001
Z chr(90) 01011010
[ chr(91) 01011011
\ chr(92) 01011100
] chr(93) 01011101
^ chr(94) 01011110
_ chr(95) 01011111
` chr(96) 01100000
a chr(97) 01100001
b chr(98) 01100010
c chr(99) 01100011
d chr(100) 01100100
e chr(101) 01100101
f chr(102) 01100110
g chr(103) 01100111
h chr(104) 01101000
i chr(105) 01101001
j chr(106) 01101010
k chr(107) 01101011
l chr(108) 01101100
m chr(109) 01101101
n chr(110) 01101110
o chr(111) 01101111
p chr(112) 01110000
q chr(113) 01110001
r chr(114) 01110010
s chr(115) 01110011
t chr(116) 01110100
u chr(117) 01110101
v chr(118) 01110110
w chr(119) 01110111
x chr(120) 01111000
y chr(121) 01111001
z chr(122) 01111010
{ chr(123) 01111011
| chr(124) 01111100
} chr(125) 01111101
~ chr(126) 01111110
n/a chr(127) 01111111
Text ASCII Binary
n/a chr(127) 01111111
€ chr(128) 10000000
n/a chr(129) 10000001
‚ chr(130) 10000010
ƒ chr(131) 10000011
„ chr(132) 10000100
… chr(133) 10000101
† chr(134) 10000110
‡ chr(135) 10000111
ˆ chr(136) 10001000
‰ chr(137) 10001001
Š chr(138) 10001010
‹ chr(139) 10001011
Πchr(140) 10001100
n/a chr(141) 10001101
Ž chr(142) 10001110
n/a chr(143) 10001111
n/a chr(144) 10010000
' chr(145) 10010001
' chr(146) 10010010
« chr(147) 10010011
» chr(148) 10010100
• chr(149) 10010101
– chr(150) 10010110
— chr(151) 10010111
˜ chr(152) 10011000
™ chr(153) 10011001
š chr(154) 10011010
› chr(155) 10011011
œ chr(156) 10011100
n/a chr(157) 10011101
ž chr(158) 10011110
Ÿ chr(159) 10011111
chr(160) 10100000
¡ chr(161) 10100001
¢ chr(162) 10100010
£ chr(163) 10100011
¤ chr(164) 10100100
¥ chr(165) 10100101
¦ chr(166) 10100110
§ chr(167) 10100111
¨ chr(168) 10101000
© chr(169) 10101001
ª chr(170) 10101010
« chr(171) 10101011
¬ chr(172) 10101100
­ chr(173) 10101101
® chr(174) 10101110
¯ chr(175) 10101111
° chr(176) 10110000
± chr(177) 10110001
² chr(178) 10110010
³ chr(179) 10110011
´ chr(180) 10110100
µ chr(181) 10110101
¶ chr(182) 10110110
· chr(183) 10110111
¸ chr(184) 10111000
¹ chr(185) 10111001
º chr(186) 10111010
» chr(187) 10111011
¼ chr(188) 10111100
½ chr(189) 10111101
¾ chr(190) 10111110
¿ chr(191) 10111111
À chr(192) 11000000
Á chr(193) 11000001
 chr(194) 11000010
à chr(195) 11000011
Ä chr(196) 11000100
Å chr(197) 11000101
Æ chr(198) 11000110
Ç chr(199) 11000111
È chr(200) 11001000
É chr(201) 11001001
Ê chr(202) 11001010
Ë chr(203) 11001011
Ì chr(204) 11001100
Í chr(205) 11001101
Î chr(206) 11001110
Ï chr(207) 11001111
Ð chr(208) 11010000
Ñ chr(209) 11010001
Ò chr(210) 11010010
Ó chr(211) 11010011
Ô chr(212) 11010100
Õ chr(213) 11010101
Ö chr(214) 11010110
× chr(215) 11010111
Ø chr(216) 11011000
Ù chr(217) 11011001
Ú chr(218) 11011010
Û chr(219) 11011011
Ü chr(220) 11011100
Ý chr(221) 11011101
Þ chr(222) 11011110
ß chr(223) 11011111
à chr(224) 11100000
á chr(225) 11100001
â chr(226) 11100010
ã chr(227) 11100011
ä chr(228) 11100100
å chr(229) 11100101
æ chr(230) 11100110
ç chr(231) 11100111
è chr(232) 11101000
é chr(233) 11101001
ê chr(234) 11101010
ë chr(235) 11101011
ì chr(236) 11101100
í chr(237) 11101101
î chr(238) 11101110
ï chr(239) 11101111
ð chr(240) 11110000
ñ chr(241) 11110001
ò chr(242) 11110010
ó chr(243) 11110011
ô chr(244) 11110100
õ chr(245) 11110101
ö chr(246) 11110110
÷ chr(247) 11110111
ø chr(248) 11111000
ù chr(249) 11111001
ú chr(250) 11111010
û chr(251) 11111011
ü chr(252) 11111100
ý chr(253) 11111101
þ chr(254) 11111110
ÿ chr(255) 11111111
]]>
http://asterion.almadark.com/2006/12/07/dilo-en-binario/feed/
Programando con APIS en Delphi cap.02 http://asterion.almadark.com/2006/11/16/programando-con-apis-en-delphi-cap02/ http://asterion.almadark.com/2006/11/16/programando-con-apis-en-delphi-cap02/#comentarios Thu, 16 Nov 2006 18:08:04 +0000 asterion http://asterion.almadark.com/?p=11 Message Box

En el próximo programa usaremos las famosas MessageBox para lograr alguna intervención del usuario. Si ahora buscamos la función en el Win32s Programmer's References, encontraremos sus parámetros y su forma de uso:
int MessageBox(

HWND hWnd, // handle of owner window, osea el handle de la ventana principal
LPCTSTR lpText, // address of text in message box, osea el texto en la ventana
LPCTSTR lpCaption, // address of title of message box , el titulo de la ventana
UINT uType // style of message box, se refiere al estilo que tendra la ventana
);

El primer parámetro es el nombre de la ventana principal de nuestro programa, ya que una vez que cerremos el messagebox el systema le dará el enfoque de teclado a la ventana que se encuentre especificada acá; si no tenemos una ventana después de ella ponemos el valor a 0. Los dos parámetros cuya funcion esta especificada en el comentario que puse al lado son del tipo PChar. El cuarto parámetro es de tipo cardinal, en el podemos incluso usar valores numéricos usando las banderas. Hay básicamente 2 parámetros que debemos incluir en esta zona, el primero es el tipo de Botón que tendrá la ventana y el segundo es el tipo de Icono. Ahora veamos el código de un messagebox:
MessageBox(hMainWindow, 'Hay un error en alguna parte',' Error', MB_OK or MB_ICONERROR);
Esto creara una ventana con un botón de OK y con el icono de Error. Si por ejemplo usásemos los parámetros «MB_OKCANCEL or MB_ICONQUESTION» generaremos un botón de OK, un botón de CANCELAR y un icono de signo de Interrogación. Pero existen muchas formas de usar los Messageboxes, si leemos la ayuda de Delphi encontraremos los parámetros que debemos incluir para controlar la forma de despliegue de la ventana, los botones y los iconos; podemos divertirnos probando cada una de ellas.
Usando las banderas
Se pueden usar en lugar del cuarto parámetro valores numéricos que tengan el mismo resultado. En el fichero window.pas algunas de las Banderas de los messagesboxes se definen asi:
const
MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;

MB_ERROR = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONWARNING = $00000030;
MB_ICONASTERISK = $00000040;

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;

MB_APPLMODAL = $00000000;
MB_SYSTEMMODAL = $00001000;
MB_TASKMODAL = $00002000;
El valor numérico de MB_OK, MB_DEFBUTTON1 y MB_APPLMODAL son todos igual a 0 (hex $00000000). Esto es porque todos éstas son opciones de la función Predefinidas, mientras que poniendo el MB_OK en el parámetro u omitiéndolo, realmente no cambie el valor pero le da un indicador en su código de lo que la función hará. vamos con un poco de código para entender esto:
MessageBox(hWindow,'Tenemos un error', ' ERROR', MB_OK or MB_ICONERROR);
O
MessageBox(hWindow,'Tenemos un error', ' ERROR', 16); //16 es el valor en decimal de MB_ERROR = $00000010;
Podemos usar el OR para sumar propiedades que queramos darle a nuestros botones por ejemplo:
MB_OKCANCEL or MB_ERROR or MB_OKCANCEL es igual a 17
1 or 16 or 1 = 17 , , , pero
MB_OKCANCEL + MB_ERROR + MB_OKCANCEL es igual a 18
1 + 16 + 1 = 18
Si queremos un messagebox con 4 botones en él, un botón de «OK» y un botón de la Cancelación y un «Sí» el botón y un «No», para lo que usaríamos «MB_OKCANCEL or MB_YESNO or MB_ERROR». Esto no produciría una messagebox con 4 botones, lo que usted conseguiría es solo 2 botones, un botón del Reintento y un botón de la Cancelación. ¿Y eso por qué? porque MB_OKCANCEL or MB_YESNO es igual a 5 (1 or 4 = 5) y 5 es el valor constante de Reintento y boton de Cancelación. ¿Qué si usted combinara el MB_OKCANCEL or MB_YESNOCANCEL, qué botones conseguiríamos? Si usted piensa que serian los botones de «SI» y «NO» (MB_YESNO = 4) estaría equivocado, porque «1 or 3 = 3». El «OR» trabaja en forma binaria (bit), el decimal «1 or 3» es binario «0001 o 0011», (para esto debemos leer un poco sobre operaciones binarias) y tenemos que el bit 0001 ya se encuentra en 0011 por lo que no lo podemos poner alli de nuevo. Así que debemos usar sólo una sola bandera. Esto es por qué en la ayuda de las API dice «Especifique una de las banderas siguientes para indicar los botones contenidos en la caja del mensaje (o messagebox): » Muchos de los valores están ya combinados tendrán los valores del bitmask de 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, etc... Esto es por que las constantes se definen en Hexadecimal en el cual es mas fácil de ver las relaciones binarias que si lo tuviésemos en decimal.

]]>
http://asterion.almadark.com/2006/11/16/programando-con-apis-en-delphi-cap02/feed/
Programando con APIS en Delphi cap. 01 http://asterion.almadark.com/2006/11/15/programando-con-apis-en-delphi-cap-01/ http://asterion.almadark.com/2006/11/15/programando-con-apis-en-delphi-cap-01/#comentarios Wed, 15 Nov 2006 19:27:47 +0000 asterion http://asterion.almadark.com/?p=7 El Archivo DPR... En el momento en que se crea una nueva aplicación en Delphi tendremos en forma visible el Form1 que es el formulario sobre el que trabajamos normalmente, y el código para este Formulario se encuentra en la llamada Unit1, si ahora abrimos el código perteneciente a todo el Proyecto ósea el project1 veremos el contenido de un fichero DPR (Delphi Project File o Archivo de proyecto Delphi), esto lo hacemos haciendo click en el menú VIEW en la opción UNITS y le damos doble click a Project1. Lo que veremos se parecerá a esto:

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Este código utiliza el objeto Application, que pertenece a la clase TApplication y esta definido por la VCL (Visual Component Library o Biblioteca de componentes visuales) en la unidad Forms. Este objeto es un componente, aunque no se pueden ver sus propiedades con el Object Inspector. Las propiedades incluyen el nombre del ejecutable (Exename), el Title de la aplicación y el Icon que aparece en la barra de tareas.
La ventana relativa al objeto Applicacion (ósea la ventana de la aplicación) sirve para mantener unidas todas las ventanas pertenecientes a la aplicación. Aunque esta ventana permanezca oculta es fundamental cuando la aplicación esta activa. De hecho, cuando las ventanas del programa se encuentran detrás de otras, al hacer click en una de las ventanas de la aplicación trae todas las ventanas de esta aplicación al frente. En otras palabras, la ventana oculta de la aplicación se emplea para conectar los diferentes Forms de la aplicación. En realidad, la ventana de la aplicación no esta oculta, ya que esto afectaría su comportamiento; simplemente tiene 0 de altura y 0 de anchura y por lo tanto no es visible.
Si queremos trabajar usando solamente las Apis de windows, creando por medio de código nuestras propias ventanas debemos eliminar el Form, para esto le hacemos click al menú Project en la opción Remove from Project... y nos saldrá un cuadro donde elegimos la Unit1 para ser eliminada y le damos OK, luego nos saldrá un cuadro preguntándonos si queremos guardar la Unit, le decimos que no y tendremos algo parecido a esto:
program Project1;

uses
Forms;

{$R *.RES}

begin
Application.Initialize;
Application.Run;
end.

Obsérvese que ya no existe la línea «Application.CreateForm(TForm1, Form1);» ya que fue eliminado el formulario. Pero aun tenemos un exceso de tamaño en el ejecutable (271 kb), esto esta ligado directamente al uso de la Unidad Forms; la única razón por la cual desearíamos adicionar la unit Forms a nuestra aplicación, sería para proporcionar acceso a la variable Application, que es una instancia del objeto TApplication. Asi que eliminaremos los usos de nuestro programa (ósea uses Forms), También podemos borrar la directiva del compilador ( {$R *.RES} ) a menos que quieran darle un icono a su aplicación :-), y quitemos las líneas Application. Tendremos algo así:
program Project1;

begin

end.
Esto aunque usted no lo crea se puede ejecutar a pesar que no tiene ningún código escrito, por solo unos milisegundos . Esto se debe a que a diferencia de las unidades Unit1.pas este fichero se ejecuta línea por línea hasta terminar, a menos que se encuentre con un loop que lo atrape. El resultado es un ejecutable que tiene solo 16 Kb (en Delphi5) en el cual no solo podremos crear ventanas para nuestra aplicación sino botones y todo lo que necesite nuestra interfaz.
Nuestro Primer programa DPR
Bien entendido todo lo anterior, vamos con una pequeña aplicación sin interfaz grafica. Empecemos agregándole la cláusula Uses que le quitamos anteriormente y le ponemos Windows para añadir en nuestro Ficherito las funciones api que necesitamos en este primer programa.
Lo que haremos será, crear una carpeta, poner un archivo de texto dentro de ella y escribir dentro del archivito de texto pondremos la información que nos de el ParamStr(0) el cual retorna el nombre de la aplicación con el camino completo desde la carpeta en que reside. Ahora echemos un vistazo a los que nos dice sobre la función createdirectoy (que es una de las cosas que queremos hacer) el Help que delphi tiene sobre el uso de las apis, para llegar a el vamos a Inicio > Programas > Borland Delphi 5 > Help > MS SDK Help Files > Win32s Programmer's References, ahi buscamos createdirectoy y encontramos esto:

BOOL CreateDirectory(LPCTSTR lpszPath, LPSECURITY_ATTRIBUTES lpsa)

Que en buen romance quiere decir que llamamos a la función createdirectoy y le damos 2 parámetros, que serian la path o dirección del nuevo directorio y sus atributos. Veremos una muestra clara en el código.
En nuestro programita incluiremos la directiva de compilador {$R *.RES} para poder ponerle un icono (entre otras cosas) a nuestro programa; Eso se hace haciendo click en el menu Project > Options > Application ahi le podemos asignar un icono como lo hariamos si programaramos con las VCL. En esta aplicación, un archivo de texto se creará y escribiremos en el usando los procedimientos AssignFile (), Rewrite () y CloseFile (). La directiva de compilador {$I -} se usa con el Rewrite ()para impedir al programa hacer una Excepción si fracasamos en este procedimiento.
program Project1;

uses
Windows;

{$R *.RES}

var
File1: TextFile; //aqui ponemos las variables

begin // aca empieza el cuerpo del programa
if CreateDirectory('C:\Folder de prueba', nil) then
{como no necesitamos darle al directorio ningún atributo especial lo ponemos en nil}
begin
AssignFile(File1, 'C:\Folder de prueba\prueba.txt');
{$I-}
Rewrite(File1);
{ponemos la directiva de compilador $I para evitar que alguna excepción que se genere nos
detenga el programa}
{$I+}
if IOResult = 0 then
Write(File1,'ParamStr 0 is '+ ParamStr(0));//escribimos en el fichero de texto
{$I-}
CloseFile(File1);//lo cerramos
{$I+}
end;

end.

Si ahora compilamos y ejecutamos el programa, habremos creado en la raíz del disco duro 'C:/' una carpeta llamada 'Fólder de prueba' y dentro de el se habrá creado un fichero de texto con la dirección completa del programa desde el disco duro hasta la carpeta donde se halla, mas el nombre del ejecutable. Como habrá notado no hubo ningún despliegue grafico; podemos hacer programas que cumplan muchas tareas y nunca muestren un entorno grafico ;-).

]]>
http://asterion.almadark.com/2006/11/15/programando-con-apis-en-delphi-cap-01/feed/
Programando con APIS en Delphi http://asterion.almadark.com/2006/11/14/programando-con-apis-en-delphi/ http://asterion.almadark.com/2006/11/14/programando-con-apis-en-delphi/#comentarios Tue, 14 Nov 2006 17:10:16 +0000 asterion http://asterion.almadark.com/?p=4 Introducción
Saludos soy a573r10n (se lee asterion), decidí escribir este pequeño curso por la dificultad que tuve de encontrar información sobre el uso de las Apis en delphi de una forma sencilla y practica. En este curso pondré toda la información que recopile y algunas acotaciones mías, así como código fuente recopilado y creado por mi.

Pero hagamos un poco de historia para tener mas claro el concepto de lo que son las Librerias API. Esto empezó en los antiguos programas de MS-DOS generados en Turbo Pascal ó C, muchos usaban las famosas librerías TVision ó Turbo Power para darle belleza y colorido a sus aplicaciones. Esto por supuesto tenía el inconveniente de mientras más unidades (units) usábamos, mas grande se nos hacia el .EXE resultante.

Con la llegada de Windows al mercado, la programación tradicional de MS-DOs quedó obsoleta y entró un nuevo modo de programar el cual abstraía mucho más a los usuarios de sus aplicaciones en general, se trataba del Sistema de manipulación de Mensajes de Windows, en el que Windows es el que manda un mensaje a la aplicación, la aplicación espera por ese mensaje y si lo conoce y tiene un manipulador de este mensaje, sencillamente le da respuesta. Con esta gran ventaja surgió adjunto el desarrollo de la Programación visual Orientado a Objetos que ya venía desde el Ms-DOS y surgieron las librerías de Windows llamadas API. Pero la API no era POO y tenía muchas dificultades al expresar cosas evidentes y muy sencillas, además del tiempo que el usuario gastaba en realizar una sencilla aplicación. Surgieron las MFC (Microsoft Fundation Class) que no son más que las mismas funciones de la API creadas por Microsoft pero ahora con POO y de Borland la VCL (Visual Component Library).

Por supuesto que a partir de ese momento todos los productos de Microsoft soportaban la API que era la librería que ya venía implícita en Windows. Por eso si se desarrolla una aplicación con un producto de Microsoft, el EXE generado es relativamente más pequeño que si se hace con un producto Borland con la VCL, porque ya las DLLs de MFC están en Windows, mientras que la VCL no y hay que distribuirlas.

Como todos conocemos, Dephi es un compilador de código nativo, o sea, no necesita ninguna DLL acompañada del .EXE para ejecutarse en una PC sacada de la caja. Esto es una gran ventaja, pero al mismo tiempo nos produce un problema al generar un ejecutable relativamente grande. Por eso nosotros estudiaremos la forma de usar las apis de windows en nuestro provecho y reducir la cantidad de librerías de Delphi en nuestra aplicación, con lo cual se reducirán dramáticamente los Kb's de nuestro proyecto.

A los lectores de este curso quiero decirles que, debido a que soy autodidacta en lo referente a programación aceptare cualquier sugerencia y critica a este curso, así como aportes y correcciones en los códigos que se incluyen.

La entrega del curso será quincenal, pero la ire revisando y renovando todo el tiempo con la ayuda de sus correcciones y de las mías.

Agradecimientos

Gracias a todos los que apoyan la libertad de información y a todos los que distribuyen su trabajo de forma gratuita sin mayor interés que el de educar. Gracias a ellos sin los cuales muchos de nosotros no hubiésemos tenido acceso a valiosa información.

nota
Este curso lo escribi hace ya varios años, pero su informacion no es
obsoleta. Me parece util contar con esta informacion, ya que mi antigua pagina web ya no existe.

]]>
http://asterion.almadark.com/2006/11/14/programando-con-apis-en-delphi/feed/