Kamis, 08 Mei 2008

MaGang SeTelaH UAN.....

Jumat ini Q magang,Setelah murid2 smp pada UAN..
Tau gk? Baru aja Q masuk ke skul,selesai parkir motor,ank2 langsung pada nyerbu Q bilang gini nich......"mba' Doakan kami yaa..moga aja LULUS..."tyuz mereka pada takut karena waktu yang digunakan buat ngerjakan soal kurang banyak gt....
Q kasihan ma mereka,Tapi Q juga sama takutnya ma mereka,soalnya Q juga lagi nunggu hasil ujian di kampus."YA TUHAN MOGA AJA Q DAN TEMEN2 LULUS SEMUA...AMIN."

Selasa, 06 Mei 2008

LIBUR NIEH......

puih,,,setelah beberapa hari msuk kuliah tyuz...
Akhirnya libur juga...tapi libur gak nasional sieh.....hehe

Sabtu, 03 Mei 2008

Praktikum PBOnya BERHASIL!

hari ni Q praktek PBO(pemrograman berorientasi obyek),tentang FirstFont.....
ih,eru bgt pokonya.....Q compile sebanyak 2x akhirnya phone mobileku jadi sukses dengan mulus...
halahhhhhhhhhh............hehe

Kamis, 01 Mei 2008

Global Warming - Apa dan mengapa

global_warming.gifSejak dikenalnya ilmu mengenai iklim, para ilmuwan telah mempelajari bahwa ternyata iklim di Bumi selalu berubah. Dari studi tentang jaman es di masa lalu menunjukkan bahwa iklim bisa berubah dengan sendirinya, dan berubah secara radikal. Apa penyebabnya? Meteor jatuh? Variasi panas Matahari? Gunung meletus yang menyebabkan awan asap? Perubahan arah angin akibat perubahan struktur muka Bumi dan arus laut? Atau karena komposisi udara yang berubah? Atau sebab yang lain?

Sampai baru pada abad 19, maka studi mengenai iklim mulai mengetahui tentang kandungan gas yang berada di atmosfer, disebut sebagai gas rumah kaca, yang bisa mempengaruhi iklim di Bumi. Apa itu gas rumah kaca?

Sebetulnya yang dikenal sebagai ‘gas rumah kaca’, adalah suatu efek, dimana molekul-molekul yang ada di atmosfer kita bersifat seperti memberi efek rumah kaca. Efek rumah kaca sendiri, seharusnya merupakan efek yang alamiah untuk menjaga temperatur permukaaan Bumi berada pada temperatur normal, sekitar 30°C, atau kalau tidak, maka tentu saja tidak akan ada kehidupan di muka Bumi ini.

Pada sekitar tahun 1820, bapak Fourier menemukan bahwa atmosfer itu sangat bisa diterobos (permeable) oleh cahaya Matahari yang masuk ke permukaan Bumi, tetapi tidak semua cahaya yang dipancarkan ke permukaan Bumi itu bisa dipantulkan keluar, radiasi merah-infra yang seharusnya terpantul terjebak, dengan demikian maka atmosfer Bumi menjebak panas (prinsip rumah kaca).

Tiga puluh tahun kemudian, bapak Tyndall menemukan bahwa tipe-tipe gas yang menjebak panas tersebut terutama adalah karbon-dioksida dan uap air, dan molekul-molekul tersebut yang akhirnya dinamai sebagai gas rumah kaca, seperti yang kita kenal sekarang. Arrhenius kemudian memperlihatkan bahwa jika konsentrasi karbon-dioksida dilipatgandakan, maka peningkatan temperatur permukaan menjadi sangat signifikan.

Semenjak penemuan Fourier, Tyndall dan Arrhenius tersebut, ilmuwan semakin memahami bagaimana gas rumah kaca menyerap radiasi, memungkinkan membuat perhitungan yang lebih baik untuk menghubungkan konsentrasi gas rumah kaca dan peningkatan Temperatur. Jika konsentrasi karbon-dioksida dilipatduakan saja, maka temperatur bisa meningkat sampai 1°C.

Tetapi, atmosfer tidaklah sesederhana model perhitungan tersebut, kenyataannya peningkatan temperatur bisa lebih dari 1°C karena ada faktor-faktor seperti, sebut saja, perubahan jumlah awan, pemantulan panas yang berbeda antara daratan dan lautan, perubahan kandungan uap air di udara, perubahan permukaan Bumi, baik karena pembukaan lahan, perubahan permukaan, atau sebab-sebab yang lain, alami maupun karena perbuatan manusia. Bukti-bukti yang ada menunjukkan, atmosfer yang ada menjadi lebih panas, dengan atmosfer menyimpan lebih banyak uap air, dan menyimpan lebih banyak panas, memperkuat pemanasan dari perhitungan standar.

Sejak tahun 2001, studi-studi mengenai dinamika iklim global menunjukkan bahwa paling tidak, dunia telah mengalami pemanasan lebih dari 3°C semenjak jaman pra-industri, itu saja jika bisa menekan konsentrasi gas rumah kaca supaya stabil pada 430 ppm CO2e (ppm = part per million = per satu juta ekivalen CO2 - yang menyatakan rasio jumlah molekul gas CO2 per satu juta udara kering). Yang pasti, sejak 1900, maka Bumi telah mengalami pemanasan sebesar 0,7°C.

Lalu, jika memang terjadi pemanasan, sebagaimana disebut; yang kemudian dikenal sebagai pemanasan global, (atau dalam istilah populer bahasa Inggris, kita sebut sebagai Global Warming): Apakah merupakan fenomena alam yang tidak terhindarkan? Atau ada suatu sebab yang signfikan, sehingga menjadi ‘populer’ seperti sekarang ini? Apakah karena Al Gore dengan filmnya “An Inconvenient Truth” yang mempopulerkan global warming? Tentunya tidak sesederhana itu.

Perlu kerja-sama internasional untuk bisa mengatakan bahwa memang manusia-lah yang menjadi penyebab utama terjadinya pemanasan global. Laporan IPCC (Intergovernmental Panel on Climate Change) tahun 2007, menunjukkan bahwa secara rata-rata global aktivitas manusia semenjak 1750 menyebabkan adanya pemanasan. Perubahan kelimpahan gas rumah kaca dan aerosol akibat radiasi Matahari dan keseluruhan permukaan Bumi mempengaruhi keseimbangan energi sistem iklim. Dalam besaran yang dinyatakan sebagai Radiative Forcing sebagai alat ukur apakah iklim global menjadi panas atau dingin (warna merah menyatakan nilai positif atau menyebabkan menjadi lebih hangat, dan biru kebalikannya), maka ditemukan bahwa akibat kegiatan manusia-lah (antropogenik) yang menjadi pendorong utama terjadinya pemanasan global (Gb.1).

Hasil perhitungan perkiraan agen pendorong terjadinya pemanasan global dan mekanismenya (kolom satu), berdasarkan pengaruh radiasi (Radiative Forcing), dalam satuan Watt/m^2, untuk sumber antropogenik dan sumber yang lain, tanda merah dan nilai positif dari kolom dua dan tiga  berarti sumbangan pada pemanasan, sedangkan biru adalah efek kebalikannya. Kolom empat menyatakan dampak pada skala geografi, sedangkan kolom kelima menyatakan tingkat pemahaman ilmiah (Level of Scientific Understanding), Sumber: Laporan IPCC, 2007.
Hasil perhitungan perkiraan agen pendorong terjadinya pemanasan global dan mekanismenya (kolom satu), berdasarkan pengaruh radiasi (Radiative Forcing), dalam satuan Watt/m^2, untuk sumber antropogenik dan sumber yang lain, tanda merah dan nilai positif dari kolom dua dan tiga berarti sumbangan pada pemanasan, sedangkan biru adalah efek kebalikannya. Kolom empat menyatakan dampak pada skala geografi, sedangkan kolom kelima menyatakan tingkat pemahaman ilmiah (Level of Scientific Understanding), Sumber: Laporan IPCC, 2007.

Dari gambar terlihat bahwa karbon-dioksida adalah penyumbang utama gas kaca. Dari masa pra-industri yang sebesar 280 ppm menjadi 379 ppm pada tahun 2005. Angka ini melebihi angka alamiah dari studi perubahan iklim dari masa lalu (paleoklimatologi), dimana selama 650 ribu tahun hanya terjadi peningkatan dari 180-300 ppm. Terutama dalam dasawarsa terakhir (1995-2005), tercatat peningkatan konsentrasi karbon-dioksida terbesar pertahun (1,9 ppm per tahun), jauh lebih besar dari pengukuran atmosfer pada tahun 1960, (1.4 ppm per tahun), kendati masih terdapat variasi tahun per tahun.

Sumber terutama peningkatan konsentrasi karbon-dioksida adalah penggunaan bahan bakar fosil, ditambah pengaruh perubahan permukaan tanah (pembukaan lahan, penebangan hutan, pembakaran hutan, mencairnya es). Peningkatan konsentrasi metana (CH4), dari 715 ppb (part per billion= satu per milyar) di jaman pra-industri menjadi 1732 ppb di awal 1990-an, dan 1774 pada tahun 2005. Ini melebihi angka yang berubah secara alamiah selama 650 ribu tahun (320 - 790 ppb). Sumber utama peningkatan metana pertanian dan penggunaan bahan bakar fosil. Konsentrasi nitro-oksida (N2O) dari 270 ppb - 319 ppb pada 2005. Seperti juga penyumbang emisi yang lain, sumber utamanya adalah manusia dari agrikultural. Kombinasi ketiga komponen utama tersebut menjadi penyumbang terbesar pada pemanasan global.

Kontribusi antropogenik pada aerosol (sulfat, karbon organik, karbon hitam, nitrat and debu) memberikan efek mendinginkan, tetapi efeknya masih tidak dominan dibanding terjadinya pemanasan, disamping ketidakpastian perhitungan yang masih sangat besar. Demikian juga dengan perubahan ozon troposper akibat proses kimia pembentukan ozon (nitrogen oksida, karbon monoksida dan hidrokarbon) berkontribusi pada pemanasan global. Kemampuan pemantulan cahaya Matahari (albedo), akibat perubahan permukaan Bumi dan deposisi aerosol karbon hitam dari salju, mengakibatkan perubahan yang bervariasi, dari pendinginan sampai pemanasan. Perubahan dari pancaran sinar Matahari (solar irradiance) tidaklah memberi kontribusi yang besar pada pemanasan global.

Dengan demikian, maka dapat dipahami bahwa memang manusia yang berperanan bagi nasibnya sendiri, karena pemanasan global terjadi akibat perbuatan manusia sendiri. Lalu bagaimana dampak Global Warming bagi kehidupan? Alur waktu prediksi dan dampak dari perspektif sains dapat dibaca pada bagian kedua tulisan ini.

Rabu, 30 April 2008

Membuat Animasi Sederhana (PacMan)

Animasi 2D mau bagaimana bentuknya pada dasarnya sama saja yaitu menampilkan gambar-gambar secara bergiliran. Untuk membuat animasi pada game 2D pada umumnya, sedikitnya ada tiga class yang terlibat. Ketiga class tersebut adalah:

  1. Class yang merepresentasikan citra/image yang akan dianimasikan. Biasanya disebut sprite. Dalam hal ini adalah TSprite.

  2. Container untuk menampung sprite objects. Container ini juga berperan sebagai sprite manager. Pada contoh code diberi nama TSpriteContainer.

  3. Class yang melakukan animasi. Bisa disebut sprite engine. Pada contoh code disebut TSpriteEngine.

Berikut adalah contoh code yang menampilkan teknik untuk melakukan animasi sederhana. Kelihatannya ribet yah. Mungkin iya karena code berikut adalah implementasi sederhana dari sebuah sprite engine untuk game 2D. Walaupun sederhana, mestinya sih sudah cukup untuk menjelaskan konsep animasi dan memperlihatkan bagaimana animasi berjalan tanpa flicker (bug paling menyebalkan dalam animasi). Contoh berikut terdiri atas dua unit, yaitu Sprite.pas dan Main.pas. Unit Sprite berisi empat buah class, yaitu:

  1. TUtils yang berisi method untuk yang bersifat utilisasi dan dipakai bersama-sama oleh semua class.

  2. TSprite yang merupakan class yang berisi informasi image yang akan digambar.

  3. TSpriteContainer yang berfungsi sebagai sprite container dan sprite manager.

  4. TSpriteEngine yang berfungsi melakukan animasi. Berisi sebuah method, yaitu OpenMouth.

Gambar-gambar yang akan di-raster di-load dan ditampung pada TSpriteContainer. Misalkan keempat file gambar tersebut bernama pac-1.bmp, pac-2.bmp, pac-3.bmp, pac-4.bmp, dan bg.bmp. Semuanya disimpan dalam directory “img\” yang path-nya relative terhadap .exe file.

File Sprite.pas:


unit Sprite;

interface

uses Windows, Graphics, Classes;

const
BACKGROUND_PATH = ‘img\\bg.bmp’;

type

TUtils = class
public
class procedure ReleaseItems(AList: TList);
end;

TSprite = class

private
FName: string;
FImage: TGraphic;
FTop: Integer;
FLeft: Integer;
FWidth: Integer;
FHeight: Integer;
public

constructor Create(AImgPath: string);
destructor Destroy; override;

property Name: string read FName write FName;
property Image: TGraphic read FImage;
property Top: Integer read FTop write FTop;
property Left: Integer read FLeft write FLeft;
property Width: Integer read FWidth write FWidth;
property Height: Integer read FHeight write FHeigth;
end;

TSpriteContainer = class

private
FSprites: TList;
public
constructor Create;
destructor Destroy; override;
function Add(ASprite: TSprite): Integer;
function Remove(ASprite: TSprite): Integer;
function GetSprite(ASpriteName: string): TSprite;
procedure Clear;

property Sprites: TList read FSprites;
end;

TSpriteEngine = class

private
FContainer: TSpriteContainer;
FScreen: TCanvas;
FBackground: TGraphic;
public
constructor Create(AContainer: TSpriteContainer);
destructor Destroy; override;
procedure OpenMouth(ADuration: Integer);

property Container: TSpriteContainer read FContainer;
property Screen: TCanvas read FScreen write FScreen;
end;

implementation

{TUtils}

class procedure TUtils.ReleaseItems(AList: TList);
begin
while AList.Count > 0 do

begin
Dispose(AList.First);
AList.Delete(0);
end;
AList.Capacity := 0;
end;

{TSprite}

constructor TSprite.Create(AImgPath: string);

begin
FImage := TBitmap.Create;
FImage.LoadFromFile(AImgPath);

Fwidth := FImage.Width;
FHeigth := FImage.Height;
FTop := 0;
FLeft := 0;
end;

destructor TSprite.Destroy;
begin
FImage.Free;
inherited;

end;

{TSpriteContainer}

constructor TSpriteContainer.Create;
begin
FSprites := TList.Create;
end;

destructor TSpriteContainer.Destroy;

begin
FSprites.Free;
inherited;
end;

function TSpriteContainer.Add(ASprite: TSprite): Integer;
begin
Result := FSprites.Add(ASprite);

end;

function TSpriteContainer.Remove(ASprite: TSprite): Integer;
begin
Result := Fsprites.Remove(ASprite);
end;

function TSpriteContainer.GetSprite(ASpriteName: string): TSprite;

var
i: Integer;
sprite: TSprite;
begin
Result := nil;
for i := 0 to FSprites.Count-1 do

begin
sprite := FSprites.Items[i];
if sprite.Name = ASpriteName then
begin
Result := sprite;
Exit;
end;
end;

end;

procedure TSpriteContainer.Clear;
begin
TUtils.ReleaseItems(FSprites);
end;

{TSpriteEngine}

constructor TSpriteEngine.Create(AContainer: TSpriteCOntainer);

begin
FContainer := AContainer;
FBackground := TBitmap.Create;
FBackground.LoadFromFile(BACKGROUND_PATH);
end;

destructor TSpriteEngine.Destroy;
begin
FBackground.Free;
inherited;
end;

procedure TSpriteEngine.OpenMouth(APosition: TPoint;
ADuration: integer);
var
startTick, deltaTick: Cardinal
frameDuration: Cardinal;
spriteIndex: Integer;
buffer: TBitmap;

begin
startTick := GetTickCount;
spriteIndex := 0;
desltaTick := 0;
frameDuration := ADuration div FContainer.Sprites.Count;

buffer := TBitmap.Create;
buffer.Width := FBackground.Width;
buffer.Height := FBackground.Height;

while (deltaTick <= ADuration) and

(spriteIndex < color="#ff0066">-1) do
begin
deltaTick := GetTickCount - startTick;
spriteIndex := deltaTick div frameDuration;

{ Teknik double buffer, yaitu gambar diolah dulu dimemory
sebelum ditampilkan. Teknik ini digunakan untuk menghindari
flicker }

buffer.Canvas.Draw(0, 0, FBackground);
buffer.Canvas.Draw(APosition.X, APosition.Y,
TSprite(FContainer.Sprites.Items[spriteIndex]).Image);

{ Screening }
FScreen.Draw(0, 0, buffer);
end;

buffer.Free;
end;

end.

Syntax Highlighted with http://delphi-id.org/syntax


Unit Main.pas terdiri dari sebuah form yang berisi sebuah control bertipe TPainBox yang berfungsi sebagai screen, dan sebuah tombol bertipe TButton. Penggalan Main.pas adalah sebagai berikut:


unit Main;

interface

uses Windows, …, ExtCtrls, Sprite;

const
IMAGES_NUMBER = 4;
PLAYING_DURATION = 200;
LOOP_DELAY = 100;
X = 200;
Y = 100;

type
TformMain = class(TForm)
PaintBox: TPaintBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private

procedure LoadAllImages(AContainer: TSpriteContainer);


end;

implementation

{ TformMain }

constructor TformMain.Create(AOwner: TComponent);
begin
inherited;
FContainer := TSpriteContainer.Create;
{ Load semua image yang akan di-raster, Kemas menjadi object
bertipe TSprite, kemudian simpan di dalam container menjadi
data yang siap raster }
LoadAllImages(FContainer);

FSpriteEngine := TSpriteEngine.Create(FContainer);
FSpriteEngine.Screen := PaintBox.Canvas;

end;



procedure LoadAllImages(AContainer: TSpriteCOntainer);
var
i: Integer;
sprite: TSprite;
spriteName: string;
begin
for i := 0 to IMAGES_NUMBER-1 do

begin
spriteName := ‘pac-’ + IntToStr(i+1) + ‘.bmp’;

sprite := TSprite.Create(‘img\\’ + spriteName);
sprite.Name := spriteName;
AContainer.Add(sprite);
end;

end;

procedure TFormMain.Button1Click(Sender: TObject);
begin
while True do
begin
FSpriteEngine.OpenMouth(Point(X, Y), PLAYING_DURATION);
Sleep(LOOP_DELAY);
end;

end;

end.

Syntax Highlighted with http://delphi-id.org/syntax


Gambar-gambar yang akan dianimasikan adalah:

Yang perlu diingat, code di atas hanyalah prototipe dari sprite engine sebuah dimensi dua yang memperlihatkan bagaimana memanipulasi sprite sehingga bisa menjadi gambar yang bergerak (animasi). Semoga bermanfaat dan silakan dimodifikasi sesuai dengan kebutuhan.

Tags: animasi, game, Object Pascals, pacman, programming, sprite
Posted in Object Pascals | No Comments »

Cara Mendapatkan MAC Address

Aku punya info lagi nich yaitu: fungsi untuk mengambil MAC Address dari ethernet card. Fungsinya beri nama GetMacAddress(AEthNumber: Byte). Kembalian dari fungsi ini adalah string dari MAC address ethernet card ber-index AEthNumber. Kalau PC hanya mempunyai sebuah ethernet card, AEthNumber bisa diisi dengan 0 (nol). Fungsi GetMacAddress memanfaatkan unit NB30 bawaan delphi yang berisi beberapa record serta fungsi untuk mengambil informasi network device melalui NetBios.


uses NB30;

function GetMacAddress(AEthNumber: Byte): string;
var
ncb: PNCB;
errorCode: Char;
adapter: PAdapterStatus;
begin

New(ncb);
{ Inisiasi isi memory pada pointer ncb dengan char 0 };
FillChar(ncb^, SizeOf(TNCB), 0);
ncb^.ncb_command := Char(NCBRESET);
ncb^.ncb_lana_num := Char(AEthNumber);
errorCode := NetBios(ncb);

{ Reset kembali isi memory pointer nbc dengan char 0 };
FillChar(ncb^, SizeOf(TNCB), 0);
ncb^.ncb_command := Char(NCBASTAT);
ncb^.ncb_lana_num := Char(AEthNumber);
{ Harus berisi 16 karakter }

StrPCopy(ncb^.ncb_callname, ‘* ‘);

New(adapter);
FillChar(adapter^, SizeOf(TAdapterStatus), 0);
ncb^.ncb_buffer := Pointer(adapter);
ncb^.ncb_length := SizeOf(TAdapterStatus);

errorCode := NetBios(ncb);
if (errorCode = Char(NRC_GOODRET)) or
(errorCode = Char(NRC_INCOMP)) then

Result := IntToHex(Ord(adapter^.adapter_address[0]), 2) + ‘-’ +
IntToHex(Ord(adapter^.adapter_address[1]), 2) + ‘-’ +
IntToHex(Ord(adapter^.adapter_address[2]), 2) + ‘-’ +
IntToHex(Ord(adapter^.adapter_address[3]), 2) + ‘-’ +
IntToHex(Ord(adapter^.adapter_address[4]), 2) + ‘-’ +
IntToHex(Ord(adapter^.adapter_address[5]), 2)
else

Result := ‘00-00-00-00-00-00′;

Dispose(ncb);
Dispose(adapter);
end;

Syntax Highlighted with http://delphi-id.org/syntax


Begitu saja, semoga bermanfaat. Kali aja ada yang mo ikutan nambahin.

Single Instance Application

Ada beberapa cara yang bisa digunakan untuk membuat single instance application. Saya hanya mau membagi sedikit info gratis yaitu dengan memanfaatkan API dari windows. Fungsi yang digunakan adalah CreateFileMapping dengan sedikit memodifikasi isi dari file project. Cara menggunakannya adalah sebagai berikut:


...

uses Windows, … ;

const
MAX_SIZE_HIGH = 0;
MAX_SIZE_LOW = 32;
{ Bisa diganti dengan string apa saja yang akan menjadi Id
dari aplikasi.}
APP_IDENTIFIER = ‘th3-4ppl1c4t10nk3y’;

var
hMap: THandle;

begin
Application.Initialize;

hMap := CreateFileMapping(0, nil, PAGE_READONLY, MAX_SIZE_HIGH,
MAX_SIZE_LOW, APP_IDENTIFIER);
if (hMap <> 0) and (GetLastError = ERROR_ALREADY_EXIST) then

begin
CloseHandle(hMap);
Application.Terminate;
end;



Application.Run;
end.

Syntax Highlighted with http://delphi-id.org/syntax


Semoga bermanfaat. :)

Rabu, 23 April 2008

ngenet di kmpus abis ujian

ehh..hari ni Q ujian matkul sistem operasi...
Q seneng bgt ujian hari ini adalah open book,
abs ujian hari ni Q ngenet di kmps pakai laptop temen sich...hehehe...
tapi sayangnya bsk matematika,kan pusing lau matkul itu,,hoho