Mudah - mudahan blog ini memberi nilai manfaat untuk siapa pun anda,RAHASIA TERBESAR SEBUAH ILMU ADALAH KEMAUAN UNTUK MENCARINYA !
Thursday, May 24, 2012
Procedure Untuk Mengecek Status Koneksi Internet
.
.
.
Uses WinInet
.
.
.
procedure CheckConnection;
var
dwFlags: DWORD;
begin
if InternetGetConnectedState(@dwFlags, 0) then begin
if (dwFlags and INTERNET_CONNECTION_MODEM)=INTERNET_CONNECTION_MODEM then
ShowMessage('Koneksi Internet Via Modem')
else if (dwFlags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then
ShowMessage('Koneksi Internet Via LAN')
else if (dwFlags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then
ShowMessage('Koneksi Internet Via Proxy')
else if (dwFlags and INTERNET_CONNECTION_MODEM_BUSY) =
INTERNET_CONNECTION_MODEM_BUSY then
ShowMessage('Modem Sedang Sibuk');
end else
ShowMessage('Offline');
end;
//Cara Memanggil Procedurenya sbb :
procedure TForm1.Button1Click(Sender: TObject);
begin
CheckConnection;
end;
Cara Menampilkan & Menyembunyikan Cursor
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowCursor(False); // Menyembunyikan Cursor
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowCursor(true); // Menampilkan Cursor
end;
begin
ShowCursor(False); // Menyembunyikan Cursor
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowCursor(true); // Menampilkan Cursor
end;
Monday, May 21, 2012
Kisi - Kisi Soal MID Ujian - Arsitektur Dan Organisasi Komputer - STMIK HANDAYANI - MAKASSAR
1. Komponen Dasar Komputer
2. Fungsi Komputer
3. Tipe - tipe BUS
4. Memory Cache
5. Modul I/O
Sifat Ujian Close Book
Saturday, May 19, 2012
Fungsi Untuk Men-ShutDown atau Me-Restart Komputer
Berikut adalah fungsi untuk men-Shutdown atau me-Restart Komputer
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
Contoh cara memanggil fungsi diatas adalah sbb :
// *** SHURDOWN ******
procedure TForm1.Button1Click(Sender: TObject);
begin
MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;
// *** RESTART / BOOTING ******
procedure TForm1.Button1Click(Sender: TObject);
begin
MyExitWindows(EWX_REBOOT or EWX_FORCE);
end;
Wednesday, May 16, 2012
Bagaimana Cara - Agar Form Tidak Dapat Dipindahkan Atau Diresize
public
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
{..}
implementation
{..}
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if ((Msg.CmdType and $FFF0) = SC_MOVE) or
((Msg.CmdType and $FFF0) = SC_SIZE) then
begin
Msg.Result := 0;
Exit;
end;
inherited;
end;
Bagaimana Cara Me-Restart Program yang sedang berjalan
Terkadang pada saat tertentu, kita ingin program yang kita bikin me-restart dirinya (Tanpa Harus keluar dari aplikasi program yang kita bikin),
procedure TForm1.Button1Click(Sender: TObject);
var
NamaProgram: PChar;
begin
NamaProgram:= PChar(Application.ExeName);
WinExec(NamaProgram, SW_SHOW);
Application.Terminate;
end;
:) mudah2an bermanfaat
procedure TForm1.Button1Click(Sender: TObject);
var
NamaProgram: PChar;
begin
NamaProgram:= PChar(Application.ExeName);
WinExec(NamaProgram, SW_SHOW);
Application.Terminate;
end;
:) mudah2an bermanfaat
Membuat Tombol ALT+F4 menjadi tak berfungsi :)
public
procedure AppMessage(var Msg: TMSG; var HAndled: Boolean);
end;
{...}
implementation
{...}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;
procedure TForm1.AppMessage(var Msg: TMSG; var Handled: Boolean);
begin
Handled := False;
case Msg.Message of
WM_SYSKEYDOWN:
if Msg.wParam = VK_F4 then
Handled := True; // Matikan Fungsi ALT-F4
end;
end;
:))
procedure AppMessage(var Msg: TMSG; var HAndled: Boolean);
end;
{...}
implementation
{...}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;
procedure TForm1.AppMessage(var Msg: TMSG; var Handled: Boolean);
begin
Handled := False;
case Msg.Message of
WM_SYSKEYDOWN:
if Msg.wParam = VK_F4 then
Handled := True; // Matikan Fungsi ALT-F4
end;
end;
:))
Membuat Tombol ALT+TAB, CTRL+ESC, ALT+ESC menjadi tak berfungsi
Buatlah
sebuah file unit dengan nama file DisableWinKeys.Pas, simpan dalam folder LIB Delphi anda, seperti
dibawah ini :
(************************************************************
this unit migrated from dll project(by
Kambiz@delphiarea.com)
Originally created by:
Andrea Belli@delphiarea.com
March 5th, 2010, 12:51 am
enhanced: CTRL+ESC,ALT+TAB,ALT+ESC
modified by;
rehmoe@yahoo.com
11:23 29/11/2010 more key added,
enhanced: CTRL+ESC,
ALT+TAB,
ALT+ESC,
CTRL+ENTER,
WINKEY (Left / Right),
MENKEY(Left/Right)
**************************************************************)
unit
DisableWinKeys;
interface
uses
Windows;
type
PKBDLLHOOKSTRUCT
= ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT
= packed record
vkCode:
DWORD;
scanCode:
DWORD;
flags:
DWORD;
time:
DWORD;
dwExtraInfo:
DWORD;
end;
function
DisableWindowsUI: Boolean;
function
EnableWindowsUI: Boolean;
function
IsWindowsUIDisabled: Boolean;
const
WH_KEYBOARD_LL
= 13;
const
LLKHF_ALTDOWN
= $0020;
var
hKeyboardHook:
HHOOK = 0;
implementation
function
LowLevelKeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): HRESULT; stdcall;
var
pkbhs:
PKBDLLHOOKSTRUCT;
begin
pkbhs
:= PKBDLLHOOKSTRUCT(lParam);
if
nCode = HC_ACTION then
begin
//
Disable CTRL+ESC
if
(pkbhs^.vkCode = VK_ESCAPE) and WordBool(GetAsyncKeyState(VK_CONTROL) and $8000)
then
begin
Result
:= 1;
Exit;
end;
//
Disable ALT+TAB
if
(pkbhs^.vkCode = VK_TAB) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
begin
Result
:= 1;
Exit;
end;
//
Disable ALT+ESC
if
(pkbhs^.vkCode = VK_ESCAPE) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
begin
Result
:= 1;
Exit;
end;
//=============START:modified=====================================================
//
Disable CTRL+ENTER
if
(pkbhs^.vkCode = VK_RETURN) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
begin
Result
:= 1;
Exit;
end;
//
Disable winkey(Left / Right)
if
(pkbhs^.vkCode = VK_LWIN) or (pkbhs^.vkCode = VK_RWIN) then
begin
Result
:= 1;
Exit;
end;
//
Disable menukey(Left/Right)
if
(pkbhs^.vkCode = VK_MENU) or (pkbhs^.vkCode = VK_LMENU) or (pkbhs^.vkCode = VK_RMENU)
then
begin
Result
:= 1;
Exit;
end;
//==================END:Modified================================================================
end;
Result
:= CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
end;
function
DisableWindowsUI: Boolean;
begin
if
hKeyboardHook = 0 then
hKeyboardHook
:= SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardHook, HInstance, 0);
Result
:= (hKeyboardHook <> 0)
end;
function
EnableWindowsUI: Boolean;
begin
Result
:= False;
if
(hKeyboardHook <> 0) and UnhookWindowsHookEx(hKeyboardHook) then
begin
hKeyboardHook
:= 0;
Result
:= True;
end;
end;
function
IsWindowsUIDisabled: Boolean;
begin
Result
:= (hKeyboardHook <> 0)
end;
end.
Cara pemanggilannya:
(Pastikan DisableWinKeys sudah ditambahkan pada bagian uses)
(Pastikan DisableWinKeys sudah ditambahkan pada bagian uses)
//disable
procedure TForm1.btn1Click(Sender:
TObject);
begin
DisableWindowsUI
end;
//enable
procedure TForm1.btn2Click(Sender:
TObject);
begin
EnableWindowsUI
end;
Procedure Untuk Menampilkan atau menutup StartMenu Windows
procedure ShowStartMenu;
var
hSMenu: HWND;
begin
hSMenu:= FindWindow ('DV2ControlHost', 'Start Menu');
ShowWindow (hSmenu, SW_RESTORE);
end;
procedure HideStartMenu;
var
hSMenu: HWND;
begin
hSMenu:= FindWindow ('DV2ControlHost', 'Start Menu');
ShowWindow (hSmenu, SW_HIDE);
end;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kalau mau menjegal supaya penekanan startmenu tidak bisa dilakukan
manfaatkan timer, rubah interval timer sekecil mungkin, terus ketik sbb :
procedure TForm1.Timer1Timer(Sender: TObject);
begin
HideStartMenu;
end;
:)
var
hSMenu: HWND;
begin
hSMenu:= FindWindow ('DV2ControlHost', 'Start Menu');
ShowWindow (hSmenu, SW_RESTORE);
end;
procedure HideStartMenu;
var
hSMenu: HWND;
begin
hSMenu:= FindWindow ('DV2ControlHost', 'Start Menu');
ShowWindow (hSmenu, SW_HIDE);
end;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kalau mau menjegal supaya penekanan startmenu tidak bisa dilakukan
manfaatkan timer, rubah interval timer sekecil mungkin, terus ketik sbb :
procedure TForm1.Timer1Timer(Sender: TObject);
begin
HideStartMenu;
end;
:)
Sunday, May 13, 2012
Membuat Form Seukuran Layar Yang sedang Aktif & Menempatkannya Selalu Stay On Top
Mungkin temen2 pingin
bikin aplikasi yang layarnya otomatis seukuran layar windows yang sedang berjalan
dan menempatkan aplikasi selalu berada didepan (stay On Top), yang harus
dilakukan cuman nambah beberapa baris program pada procedure OnCreate Form
Utama sbb:
Klik Form, kemudian pada Object Inspector pilih Evens, dan Double klik OnCreate, terus dikalang begin dan end ketik seperti dibawah ini
procedure TForm1.FormCreate(Sender: TObject);
begin
// **** Start Script untuk stay on top ******
SetWindowPos(Form1.Handle,
HWND_TOPMOST,0,0,0,0,
SWP_NOACTIVATE+SWP_NOMOVE+SWP_NOSIZE);
// **** End Script untuk stay on top ******
// **** Start Script Merubah Form Seukuran Layar Windows Aktif ******
Form1.ClientWidth:=Screen.Width;
Form1.ClientHeight:=ScreenHeight;
// **** End Script Merubah Form Seukuran Layar Windows Aktif ******
end;
Semoga bermanfaat...
Sunday, May 6, 2012
Disable Ctrl + Alt + Del
Cara 1 :
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;
Cara 2 :
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TlHelp32, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
proc : PROCESSENTRY32;
hSnap : HWND;
Looper : BOOL;
implementation
// ------------------------------------------- //
procedure KillProcess;
begin
// Give Proc.dwSize The Size Of Its Bytes
proc.dwSize := SizeOf(Proc);
//Takes A Snapshop Of The Process And Give It To hSnap
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
// First Process
Looper := Process32First(hSnap,proc);
while Integer(Looper) <> 0 do // If The Process is not nil
begin
// Extracts the process filename and compares
if ExtractFileName(Proc.szExeFile) = 'taskmgr.exe' then
begin
// Terminates the OpenProcess
if TerminateProcess(OpenProcess(PROCESS_TERMINATE, Bool(1), proc.th32ProcessID), 0) then
//
else
// Checks for the next process
Looper := Process32Next(hSnap, proc);
end;
end;
// Closes The Handle
CloseHandle(hSnap);
end;
// ------------------------------------------- //
{$R *.dfm}
// ------------------------------------------- //
procedure TForm1.Timer1Timer(Sender: TObject);
var
keyloop, KeyResult : Integer;
begin
keyloop := 0;
repeat
KeyResult := GetAsyncKeyState(keyloop);
if KeyResult = -32767 then
begin
if (keyloop = 46) or (keyloop = 110) then KillProcess;
end;
Inc(keyloop);
until keyloop = 255;
end;
// ------------------------------------------- //
end.
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;
Cara 2 :
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TlHelp32, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
proc : PROCESSENTRY32;
hSnap : HWND;
Looper : BOOL;
implementation
// ------------------------------------------- //
procedure KillProcess;
begin
// Give Proc.dwSize The Size Of Its Bytes
proc.dwSize := SizeOf(Proc);
//Takes A Snapshop Of The Process And Give It To hSnap
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
// First Process
Looper := Process32First(hSnap,proc);
while Integer(Looper) <> 0 do // If The Process is not nil
begin
// Extracts the process filename and compares
if ExtractFileName(Proc.szExeFile) = 'taskmgr.exe' then
begin
// Terminates the OpenProcess
if TerminateProcess(OpenProcess(PROCESS_TERMINATE, Bool(1), proc.th32ProcessID), 0) then
//
else
// Checks for the next process
Looper := Process32Next(hSnap, proc);
end;
end;
// Closes The Handle
CloseHandle(hSnap);
end;
// ------------------------------------------- //
{$R *.dfm}
// ------------------------------------------- //
procedure TForm1.Timer1Timer(Sender: TObject);
var
keyloop, KeyResult : Integer;
begin
keyloop := 0;
repeat
KeyResult := GetAsyncKeyState(keyloop);
if KeyResult = -32767 then
begin
if (keyloop = 46) or (keyloop = 110) then KillProcess;
end;
Inc(keyloop);
until keyloop = 255;
end;
// ------------------------------------------- //
end.
Balajarlah dari NYAMUK
Ketika saya sedang membaca buku tentang Shell32 Windows, Anak saya yang baru berusia 7 tahun lebih, bertanya kepada saya tentang berapa usia nyamuk, setelah cari - cari informasi, akhirnya didapatlah jawaban, bahwa usia nyamuk ternyata hanya 2 minggu sampa 1,5 bulan. uppsss... penemuan jawaban sepertinya menampar saya, bahkan lebih dari itu, saya yakin buku yang saya baca pun tidak akan selesai dalam 1,5 bulan. Wow... bagaimana prioritas hidup kita jika waktu sesingkat itu ?.
Diluar kebencian saya dengan apa (penyakit) yang diakibatkan oleh keberadaan nyamuk, saya mulai berfikir, jangan-jangan akibat yang kita rasakan dari nyamuk memang menjadi prioritas dari hidup nyamuk itu sendiri..... hmmmmm,,,, ternyata nyamuk punya prioritas hidup juga dan mungkin saja kematian nyamuk akibat tepukan tangan kita adalah keberhasilan dari priorias nyamuk sebagai 'serangga pengganggu', tercapailah tujuan hidupnya,,, mati dengan perut penuh darah kita !.
Saya mulai bertanya, prioritas keilmuan apa yang sebenarnya harus saya pelajari dulu ?, Jaringan?, Multimedia? Programming ? atau Sistem Operasi ? atau masih banyak lagi ?.
Ternyata saya menyadari satu hal, Terlalu Banyak Agenda Dihidup Saya !!!
Pantas saja kita tak pernah matang dengan apa yang kita pelajari, karena kita lebih senang melompat, tanpa pernah menyadari betapa bayak hal yang penting terlewati dan kita melewatinya begitu saja karena tergoda oleh trend yang mungkin tidak penting sama sekali !!!!.
Dalam menggali profile skill kita di bidang IT, pahamilah semuanya butuh proses, tidak bisa kita persingkat begitu saja, harus ada kemauan yang keras untuk mempelajari sesuatu sampai tuntas, minimal memahami inti/core dari apa yang kita pelajari, Hilangkan kebiasaan belajar instan, insyaalloh (tanpa mendahului kekuasaan Sang Pencipta) waktu kita masih banyak ,tidak seperti usia nyamuk.
Diluar kebencian saya dengan apa (penyakit) yang diakibatkan oleh keberadaan nyamuk, saya mulai berfikir, jangan-jangan akibat yang kita rasakan dari nyamuk memang menjadi prioritas dari hidup nyamuk itu sendiri..... hmmmmm,,,, ternyata nyamuk punya prioritas hidup juga dan mungkin saja kematian nyamuk akibat tepukan tangan kita adalah keberhasilan dari priorias nyamuk sebagai 'serangga pengganggu', tercapailah tujuan hidupnya,,, mati dengan perut penuh darah kita !.
Saya mulai bertanya, prioritas keilmuan apa yang sebenarnya harus saya pelajari dulu ?, Jaringan?, Multimedia? Programming ? atau Sistem Operasi ? atau masih banyak lagi ?.
Ternyata saya menyadari satu hal, Terlalu Banyak Agenda Dihidup Saya !!!
Pantas saja kita tak pernah matang dengan apa yang kita pelajari, karena kita lebih senang melompat, tanpa pernah menyadari betapa bayak hal yang penting terlewati dan kita melewatinya begitu saja karena tergoda oleh trend yang mungkin tidak penting sama sekali !!!!.
Dalam menggali profile skill kita di bidang IT, pahamilah semuanya butuh proses, tidak bisa kita persingkat begitu saja, harus ada kemauan yang keras untuk mempelajari sesuatu sampai tuntas, minimal memahami inti/core dari apa yang kita pelajari, Hilangkan kebiasaan belajar instan, insyaalloh (tanpa mendahului kekuasaan Sang Pencipta) waktu kita masih banyak ,tidak seperti usia nyamuk.
Ajakan Bikin Kelompok Delphi Explorer
Kemarin, ada temen mahasiswa ngajak saya bikin kelompok delphi explorer,....mmm menarik juga, cuman kadang komunitas-komunitas seperti ini(apapun flatform nya) kadang pada akhirnya berujung di exclusivitas saja, membentuk kelompok - kelompok yang secara parsial hanya sekedar kumpul-kumpul,membangun produk di lingkungannya saja, atau malah akhirnya berbentuk baju atau jaket dengan label ke-khususannya.
Namun demikian, ajakan seperti ini harus disikapi secara positive, dengan harapan yang tertanam tidak lagi jenis bahasa pemograman atau pun flatform sistem operasinya, NAMUN LEBIH DARI ITU, yang terpenting bagaimana kita membangun komunitas yang kaya dengan logika, yang kaya dengan produk yang bisa dirasakan manfaatnya secara nyata oleh banyak pengguna (tidak hanya jadi koleksi).
btw... pada prinsipnya saya mau ko jadi anggotanya,, :)) and terimakasih atas ajakannya,,,,
Download Manager Versi Saya :)
Beberapa waktu terakhir, saya disibukan dengan 'little project' tentang bagaimana meningkatkan download rate speed untuk jenis download multipart [kayak IDM(Internet Download Manager)/DAP(Download Accelerator Plus)], alhamdulllah progressnya semakin baik, insyaalloh bisa lebih cepat dari IDM (mudah-mudahan). amin.
Namanya juga riset, disana-sini kadang masih banyak kekurangan, tapi gak apa-apa, karena saya yakin masih banyak perbaikan-perbaikan disana-sini, yang jelas progres hasil telah menunjukan peningkatan yang signifikan (tidak dengan niat atau gaya yang takabur). Mudah-mudahan apa yang saya lakukan bisa menambah pustaka produk software nasional, minimal temen-temen di Universitas Islam Alauddin Makassar tidak harus repot-repot 'Pause & Resume' lagi :) . Doain yah biar tambah stabil, biar bisa cepat-cepat launcing versi lite nya (untuk kalangan terbatas).
Namanya juga riset, disana-sini kadang masih banyak kekurangan, tapi gak apa-apa, karena saya yakin masih banyak perbaikan-perbaikan disana-sini, yang jelas progres hasil telah menunjukan peningkatan yang signifikan (tidak dengan niat atau gaya yang takabur). Mudah-mudahan apa yang saya lakukan bisa menambah pustaka produk software nasional, minimal temen-temen di Universitas Islam Alauddin Makassar tidak harus repot-repot 'Pause & Resume' lagi :) . Doain yah biar tambah stabil, biar bisa cepat-cepat launcing versi lite nya (untuk kalangan terbatas).
Subscribe to:
Posts (Atom)
