Clasificación de lenguajes de programación
1 abr
Un lenguaje de programación es un lenguaje inventado para controlar una máquina, (normalmente, un ordenador). Hay muchísimos, de toda clase de tipos y características, inventados para facilitar el abordaje de distintos problemas, el mantenimiento del software, su reutilización, mejorar la productividad, etc.
Los lenguajes de programación se pueden clasificar según varios criterios. He encontrado doce en total: Nivel de abstracción, propósito, evolución histórica, manera de ejecutarse, manera de abordar la tarea a realizar, paradigma de programación, lugar de ejecución, concurrencia, interactividad, realización visual, determinismo y productividad.
Hay que tener en cuenta también, que en la práctica, la mayoría de lenguajes no pueden ser puramente clasificados en una categoría, pues surgen incorporando ideas de otros lenguajes y de otras filosofías de programación, pero no importa al establecer las clasificaciones, pues el auténtico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay.
1. Nivel de abstracción.
Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina: o Lenguajes de bajo nivel: La programación se realiza teniendo muy en cuenta las características del procesador. Ejemplo: Lenguajes ensamblador. o Lenguajes de nivel medio: Permiten un mayor grado de abstracción pero al mismo tiempo mantienen algunas cualidades Más >
iTalc HiHack by Khronos
31 mar
Esta es una aplicación programada por el español Khronos. Cito al autor:
Historia de porqué cree este programa: estoy estudiando el ciclo superior de informática y las aulas de informática cuentan con este maldito programa xD. Cuando un profesor me aburria o contaba cosas que ya sabía me ponía a navegar en internet o a hacer cualquier otra cosa en el pc, pero siempre me llamaban la atención por no atender. En la clase de Redes de Área local, la profesora estaba explicando el temario e impidió la conexión a nuestras cuentas de usuario así que abrí la máquina virtual y me puse a navegar xD, pero se me cerro la máquina virtual de repente. No sabía que es lo que pudo pasar, y la profesora dijo luego: “Yo de vosotros no usaría el msn, tuenti y demás en clase porque os podeis quedar sin cuentas”. Ante eso, miré los procesos del sistema y me puse a buscar en google uno a uno (los que no conocia) y me encontre con el maldito iTalc xD.
El programa dispone de 3 métodos para terminar/asesinar el proceso:
- El primero es para cuentas con privilegios y usa las típicas APIs de Windows (AdjustTokenPrivileges, OpenProcess, TerminateProcess…) Más >
Mostrar propiedades de un archivo
31 mar
Bueno, esta función lo que hace es usar la Shell API (ShellExecuteInfo) para mostrarnos las propiedades del archivo.
Es realmente sencilla, pero aclaro que no la he programado yo, tampoco recuerdo el nombre del autor así que disculpen.
function ShowProperties(hWndOwner: HWND; const FileName:string): boolean; var Info: TShellExecuteInfo; Handle : THandle; begin { Fill in the SHELLEXECUTEINFO structure } with Info do begin cbSize := SizeOf(Info) ; fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI; wnd := hWndOwner; lpVerb := 'properties'; lpFile := pChar(FileName) ; lpParameters := nil; lpDirectory := nil; nShow := 0; hInstApp := 0; lpIDList := nil; end; Result := ShellExecuteEx(@Info) ; end;
Les dejo la descarga de un ejemplo un poco más explícito.
Para descargar hacer click aquí
Notepad en GNU/Linux – Lazarus
31 mar
Estaba instalando el Lazarus en mi PC, y apenas finalizó la instalación me dió por estrenarlo programando un Notepad sencillo.
(* Programado por .:WindHack:. The Notepad GNU... Fecha de COmpilacion: 09 - 19 - 2009 IDE: Lazarus *) unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Menus, StdCtrls, ActnList,unit2; type { TForm1 } TForm1 = class(TForm) MainMenu1: TMainMenu; MenuItem11: TMenuItem; MenuItem9: TMenuItem; MText: TMemo; MenuItem1: TMenuItem; MenuItem10: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem; MenuItem7: TMenuItem; MenuItem8: TMenuItem; Open: TOpenDialog; Save: TSaveDialog; procedure FormCreate(Sender: TObject); procedure MenuItem10Click(Sender: TObject); procedure MenuItem11Click(Sender: TObject); procedure MenuItem2Click(Sender: TObject); procedure MenuItem4Click(Sender: TObject); procedure MenuItem6Click(Sender: TObject); procedure MenuItem7Click(Sender: TObject); procedure MenuItem8Click(Sender: TObject); procedure MenuItem9Click(Sender: TObject); procedure MenuItem20Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; const Espacio = ' - '; implementation { TForm1 } procedure TForm1.MenuItem4Click(Sender: TObject); var FileName:String; begin if Open.Execute then MText.Lines.LoadFromFile(Open.FileName); FileName := Open.FileName; Caption := ExtractFileName(FileName+Espacio+'Ejemplo Notepad Ubuntu by .:WIndHack:.'); end; procedure TForm1.MenuItem6Click(Sender: TObject); begin MText.CopytoClipBoard; end; procedure TForm1.MenuItem7Click(Sender: TObject); begin MText.CutToClipboard; end; procedure TForm1.MenuItem8Click(Sender: TObject); begin MText.PasteFromClipboard; end; procedure TForm1.MenuItem9Click(Sender: TObject); begin MText.Undo; end; procedure TForm1.MenuItem20Click(Sender: TObject); begin Application.Terminate; end; procedure TForm1.FormCreate(Sender: TObject); begin MText.Align:=alClient; end; procedure TForm1.MenuItem10Click(Sender: TObject); begin MText.SelectAll; end; procedure TForm1.MenuItem11Click(Sender: TObject); begin Form2.ShowModal(); end; procedure TForm1.MenuItem2Click(Sender: TObject); var FileName:String; begin if Save.Execute then begin FileName := Save.FileName; MText.Lines.SaveToFile(SAve.FileName); Caption :=ExtractFileName(FileName+Espacio+'Ejemplo Notepad Ubuntu by .:WIndHack:.'); end else Exit; end; initialization {$I unit1.lrs} end.
Bien, solo hay una falla…¿Cuál?, el tamaño del compilado, pues Lazarus o mejor dicho FreePascal, genera ejecutables extremadamente grandes.
Si desean descargar el source, solo presionen aquí
Más >
Funciones sencillas y simples
31 mar
Aquí dejaré algunas funciones sencillas que me han sacado de varios apuros.
1º – Calcular múltiplo. Función para calcular los múltiplos en un rango determinado.
function CalcularMultiplo(Desde,Hasta,Multiplo:Integer):String; var I:Integer; begin for I:=Desde to Hasta do begin if I mod Multiplo = 0 then Result := Result + IntToStr(I) +',' end; end;
2º – Factorial. Función para calcular el factorial de un número.
function Factorial(Num:Integer):String; var I:Integer; B:Extended; begin B := Num; For I:=1 to Num - 1 do B := B * I; Result := FloatToStr(B); if Num > 170 then Result := 'Numero Infinito...' end;
3º – Par o Impar. Función para saber si un número es par o impar.
function ParOImpar(Num:Integer):String; begin if Num mod 2 = 0 then Result := IntToStr(Num)+' Es un número par' else Result := IntToStr(Num)+' Es un número impar' end;
4º – Es divisible. FUnción para saber si un número es divisible por otro.
function EsDivisible(Num1,Num2:Integer):String; begin if (Num1 mod Num2 = 0) then Result := 'Es divisible.' else Result := 'NO es divisible.'; End;
Espero les sea de ayuda.
Saludos,
Aplicación que habla [SAPI]
31 mar
Mirando por ahí me encontré con una librería de Microsoft muy interesante, es la “Microsoft Speech Object Library“, pero ¿Qué hace exactamente?, pues lo que hace ésta librería es permitirnos hacer o divertirnos con nuestra aplicación agregándole un “modulador” de voz.
En fin, me tomé el trabajo de hacer una aplicación de ejemplo:
Agrego el código…
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleServer, SpeechLib_TLB, ComCtrls, Buttons, ShellAPI; type TFrm_Speech = class(TForm) SPVoice: TSpVoice; Memo_Hablar: TMemo; Track_Velocidad: TTrackBar; Lb_Rate: TLabel; Lb_Volume: TLabel; Track_Volume: TTrackBar; Btn_Speak: TBitBtn; Spd_Web: TSpeedButton; procedure Btn_HablarClick(Sender: TObject); procedure Track_VelocidadChange(Sender: TObject); procedure Track_VolumeChange(Sender: TObject); procedure Spd_WebClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Frm_Speech: TFrm_Speech; implementation {$R *.dfm} procedure TFrm_Speech.Btn_HablarClick(Sender: TObject); begin SPVoice.Speak(Memo_Hablar.Text,0) end; procedure TFrm_Speech.Spd_WebClick(Sender: TObject); begin ShellExecute(0,'open','http://foro.latinohack.com/',nil,nil,0); end; procedure TFrm_Speech.Track_VelocidadChange(Sender: TObject); begin SPVoice.Rate := Track_Velocidad.Position end; procedure TFrm_Speech.Track_VolumeChange(Sender: TObject); begin SPVoice.Volume := Track_Volume.Position end; end.
También pueden crearlo llamando a la función CreateOleObject que es idéntica a la función CreateObject de muchos lenguajes como VBS.
uses ComObj; var Voice: OLEVariant; begin Voice := CreateOLEObject('SAPI.SpVoice'); Voice.Speak('Hello LatinoHack!', 0); end;
Les dejo el link de descarga de la aplicación de ejemplo más la SAPI.
-Descarga:
http://www.box.net/shared/rdzuulmv14
Más >
Serie Fibonacci en Pascal
30 mar
Uno de los retos o mejor dicho ejercicio que realiza todo programador, es la famosa sucesión Fibonacci. Para los que no saben que es pueden visitar la Wikipedia.
He desarrollado una aplicación en consola que la realiza, espero les sea de utilidad.
program Fibonacci; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; var A,B,C,D,I:Integer; Salir:Boolean = False; Opcion: ShortInt; J:String; begin Writeln('Obtener la serie Fibonacci'); Writeln; repeat I := 3; J := '.:WindHack:.'; Writeln; Writeln('Seleccione una opción'); Writeln; Writeln('1. - Calcular Fibonacci'); Writeln('2. - Salir'); Writeln; while 0 = 0 do begin Write('Introduce la opción: '); Readln(Opcion); if (Opcion > 0) and (Opcion <= 2) then Break; end; Case Opcion of 1:begin Writeln('Ingrese el número hasta donde se calculará...'); Readln(A); while A<1 do begin Writeln('Ingrese un número mayor a 0...'); Readln(A); Writeln; end; B := 0; C := 1; D := B+C; Writeln('Serie Fibonacci con ',A,' términos'); Writeln; if A=1 then Write(B); if A=2 then Write(B,' ',C); if A=3 then Write(B,' ',C,' ',D); if A>3 then while I<a></a>
Kryptix v1.0
30 mar
Kryptix es una aplicación que permite encriptar o desencriptar una cadena de texto usando algunos cifrados como el Caesar (César), Vigenère, XOR y un simple Reverser (mejor conocido como StringReverse).
Desarrollé dos nuevas funciones: la primera es una función que realiza exactamente lo mismo que la “ReverseString” encontrada en la unidad “StrUtils.pas“, pero esta es un poco más rápida.
ReverseStringM
function ReverseStringM(const AText:String):String; var I:Integer; Tmp:String; begin for I:= Length(AText) downto 0 do Tmp := Tmp + AText[I]; Result := Tmp; end;
Y la segunda, es una que genera una contraseña (Key) aleatoria con el número de caracteres deseados (Count).
function GenerateRandomString(Count:Integer):String; const Alphabet: Array [0..25] of Char = ('a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z'); var I:Integer; iTmp:String; begin Result := ''; Randomize; for I:=1 to Count do begin iTmp := iTmp + Alphabet[Random(25)]; Result := iTmp end; end;
Por último, les dejo algunas capturas del Kryptix…
Descargar
Efecto SplashForm
30 mar
Un efecto muy parecido al zumbido del MSN. El original estaba hecho en VB, por lo cual decidí traducirlo a Delphi.
(*-----------------------------------------------*) (*| - [Efecto] SplashForm *) (*| - [Autor Original (VB)] The Swash *) (*| - [Traducción a Delphi] .:WindHack:. *) (*| - [Fecha] 23/03/2010 *) (*-----------------------------------------------*) procedure SplashForm(hForm:TForm); var hTop,hLeft,I:Integer; begin hTop := hForm.Top; hLeft := hForm.Left; if (hForm.WindowState = wsNormal) And (hForm.Visible = True) then For I := 1 to 60 do begin hForm.Top := hForm.Top + 10; hForm.Left := hForm.Left + 10; hForm.Top := hTop; hForm.Left := hLeft; end; end;
Para usarlo es muy sencillo:
SplashForm(Form1);
Obtener el nombre de la ventana activa
30 mar
¿Alguna vez han querido obtener el nombre de la ventana activa?, pues si es así, les servirá ésta función, la cual emplea algunas API’s para obtener el título de la ventana que se está ejecutando.
Primero creemos nuestro proyecto y en él agregamos:
1 TTimer 1 TListBox 1 TLabel
Nos quedará algo como ésto:
Ahora vamos a la parte buena, programar.
Vamos a declarar una función que la llamaremos “GetActiveCaption” y pondremos el siguiente código…
function GetActiveCaption: string; var Handle: THandle; Len: LongInt; Title: String; begin Result := ''; Handle := GetForegroundWindow; if Handle <> 0 then begin Len := GetWindowTextLength(Handle) + 1; SetLength(Title, Len); GetWindowText(Handle, PChar(Title), Len); ActiveCaption := TrimRight(Title); end; end;
Con ésta función obtenemos el nombre de la ventana. Para obtener el nombre de la que está activa pues simplemente agregamos en el evento OnTimer del TTimer éste código.
procedure TForm1.Timer1Timer(Sender: TObject); begin ListBox1.AddItem(ActiveCaption,nil); end;
Listo, eso es todo.
Saludos,

