DISINI BUKAN HANYA TENTANG TEKHNIK INFORMATIKA TAPI BERBAGAI MACAM SEKMEN ContactPerson : 085759898986

Jumat, 15 Mei 2009

Belajar algoritma, Siapa Takut ??

Pointers

In Ada pointer types are called access types. Access types are subject of so-called accessibility checks, which in Ada are intended to prevent appearance of dangling pointers. (Though accessibility checks can be circumvented)

Create a pool specific access type for an integer


type Int_Access is access Integer;
Int_Acc : Int_Access := new Integer (5);


A pool specific access type can be constrained to never be null. For such pointers the compiler can omit checks of being null upon dereferencing.


type Safe_Int_Access is not null access Integer;


General access types can deal with objects allocated in any pool as well as ones on the stack. For example, create a pointer to a stack-allocated integer


declare
type Int_Ptr is access all Integer;
Ref : Int_Ptr;
Var : aliased Integer := 3;
begin
Ref := Var'Access;


The attribute 'Access (and also 'Unchecked_Access) is used to get a pointer to the object. Note that the object has to be declared aliased when it has to be referenced by a pointer. General access types can also be constrained to exclude null:


type Safe_Int_Ptr is not null access all Integer;

Addresses

Ada does not provide pointer arithmetic, but does allow evaluation of the address


Var : Integer;
Var_Address : Address := Var'Address;


Addresses support operations of comparison, addition, and subtraction. Ada also supports conversion between address types and a predefined subtype of Integer named Integer_Address. This accommodates the conversion to a linear addressing of any hardware address scheme including address:offset used in the 8086 processor.

Ada allows the specification of a starting address for any object


-- Demonstrate the overlay of one object on another
A : Integer;
B : Integer;
for B'Address use A'Address;
-- A and B start at the same address


[edit] References

References in Ada are achieved through object renaming declarations. A renaming produces a new view to the object:


type Container is array (Positive range <>) of Element;
for I in Container'Range loop
declare
Item : Element renames Container (I);
begin
... -- Here Item is a reference to Container (I)
end;
end loop;

ALGOL 68

The following code creates a pointer to an INT variable:

INT var := 3;
REF INT pointer := var;

Access the integer variable through the pointer:

INT v = pointer; # sets v to the value of var (i.e. 3) #
REF INT(pointer) := 42; # sets var to 42 #

Change the pointer to refer to another object:

INT othervar;
pointer := othervar;

Change the pointer to not point to any object:

pointer := NIL; # 0 cannot be cast to NIL #

Get a pointer to the first element of an array:

[9]INT array;
pointer := array[LWB array];

There is no pointer arithmetic, eg no p +:=3

With references:

The following code creates a constant reference to an INT variable, effectively an alias:

REF INT alias = var;

Access the integer variable through the reference:

INT v2 = alias; # sets v2 to the value of var, that is, 3 #
alias := 42; # sets var to 42 #

Constand references cannot be changed to refer to other objects.

Pointers can be compared, but only for basic equality:

printf(($"alias "b("IS","ISNT")" var!"l$, alias IS var));

Output: alias IS var!

Get a reference to the first element of an array:

[9]INT array2;
REF INT ref3 = array2[LWB array2];

Changing the reference to refer to another object of the array is not possible.

ALGOL 68 also allows pointers to slices of rows and/or columns of arrays:

[9,9]INT sudoku;
REF [,]INT middle;
middle := sudoku[4:6,4:6];

This includes pointers to sliced character arrays:

[30]CHAR hay stack := "straw straw needle straw straw";
REF[]CHAR needle = hay stack[13:18];
needle[2:3] := "oo";
print((hay stack))

Output: straw straw noodle straw straw
C and C++

The following code creates a pointer to an int variable

int var = 3;
int* pointer = &var;

Access the integer variable through the pointer:

int v = *pointer; /* sets v to the value of var (i.e. 3) */
*pointer = 42; /* sets var to 42 */

Change the pointer to refer to another object

int othervar;
pointer = &othervar;

Change the pointer to not point to any object

pointer = NULL; /* needs having stddef.h included */

or

pointer = 0; /* actually any constant integer expression evaluating to 0 could be used, e.g. (1-1) will work as well */

or

pointer = (void*)0; /* C only, not allowed in C++ */

Get a pointer to the first element of an array:

int array[10];
pointer = array;
/* or alternatively: */
pointer = &array[0];

Move the pointer to another object in the array

pointer += 3; /* pointer now points to array[3] */
pointer -= 2; /* pointer now points to array[1] */

Access another object in the same array through the pointer

v = pointer[3]; /* accesses third-next object, i.e. array[4] */
v = pointer[-1]; /* accesses previous object, i.e. array[0] */
/* or alternatively */
v = *(pointer + 3); /* array[4] */
v = *(pointer - 1); /* array[0] */

[edit] C++

With pointers: See 'C' example above.

C++ specific alternative to "The following code creates a pointer to an int variable":

int* pointer2(&var);

With references:

The following code create a reference to an int variable:

int var = 3;
int& ref = var;
// or alternatively:
int& ref2(var);

Access the integer variable through the reference

int v = ref; // sets v to the value of var, that is, 3
ref = 42; // sets var to 42

References cannot be changed to refer to other objects, and cannot (legally) made to refer to no object.

Get a reference to the first element of an array:

int array[10];
int& ref3 = array[0];

Changing the reference to refer to another object of the array is not possible.

Accessing another object of the array through the reference:

v = (&ref)[3]; // read value of array[3]; however doing this is bad style

D

Grabbing variable address and placing it in a pointer


int var;
int* ptr = &var;


Depending on variable type, D will automatically pass either by value or reference by value: structs, statically sized arrays, and other primitives (int, char, etc...) by reference: classes, dynamically sized arrays, array slices


struct S{}
class C{}

void foo(S s){} // pass by value
void foo(C c){} // pass by reference
void foo(int i){} // pass by value
void foo(int[4] i){} // pass by value
void foo(int[] i){} // pass by reference
void foo(ref T t){} // pass by reference regardless of what type T really is

selengkapnya......

Selasa, 12 Mei 2009

prinsip kerja solar sel

Menjelang kenaikan harga BBM dan setelahnya, Blog ini dibanjiri oleh pengunjung yang rata-rata hendak mengetahui lebih jauh apa dan bagaimana sel surya yang konon dipercaya menjadi sumber energi di masa depan, menggantikan aneka sumber energi fosil. Dikarenakan informasi yang berkembang di tengah masyarakat bahwa bahan bakar fosil akan segera menipis, ditambah dengan kenaikan gila-gilaan harga minyak mentah dunia, agaknya sudah timbul perlahan-lahan kesadaran energi dan sikap ramah terhadap pemakaian energi, terutama listrik.

Kesadaran ini dapat dilihat dari usaha mendapatkan info berkaitan dengan bahan bakar alternatif, semisal, biodiesel, briket batu bara hingga yang paling kontroversial ialah blue energy atau banyugeni yang menghebohkan itu.

Sel surya, solar cell, photovoltaic, atau fotovoltaik sejak tahun 1970-an telah telah mengubah cara pandang kita tentang energi dan memberi jalan baru bagi manusia untuk memperoleh energi listrik tanpa perlu membakar bahan baker fosil sebagaimana pada minyak bumi, gas alam atau batu bara, tidak pula dengan menempuh jalan reaksi fisi nuklir. Sel surya mampu beroperasi dengan baik di hampir seluruh belahan bumi yang tersinari matahari, sejak dari Maroko hingga Merauke, dari Moskow hingga Johanesburg, dan dari pegunungan hingga permukaan laut.

Sel surya dapat digunakan tanpa polusi, baik polusi udara maupun suara, dan di segala cuaca. Sel surya juga telah lama dipakai untuk memberi tenaga bagi semua satelit yang mengorbit bumi nyaris selama 30 tahun. Sel surya tidak memiliki bagian yang bergerak, namun mudah dipindahkan sesuai dengan kebutuhan.

Semua keunggulan sel surya di atas disebabkan oleh karakteristik khas sel surya yang mengubah cahaya matahari menjadi listrik secara langsung. Artikel ini sengaja ditulis guna menanggapi banyaknya pertanyaan mengenai bagaimana mekanisme atau prinsip kerja sel surya. Sengaja di sini hanya melibatkan penjelasan kualitatif.

Proses konversi

Proses pengubahan atau konversi cahaya matahari menjadi listrik ini dimungkinkan karena bahan material yang menyusun sel surya berupa semikonduktor. Lebih tepatnya tersusun atas dua jenis semikonduktor; yakni jenis n dan jenis p.

Semikonduktor jenis n merupakan semikonduktor yang memiliki kelebihan elektron, sehingga kelebihan muatan negatif, (n = negatif). Sedangkan semikonduktor jenis p memiliki kelebihan hole, sehingga disebut dengan p ( p = positif) karena kelebihan muatan positif. Caranya, dengan menambahkan unsur lain ke dalam semkonduktor, maka kita dapat mengontrol jenis semikonduktor tersebut, sebagaimana diilustrasikan pada gambar di bawah ini.

Pada awalnya, pembuatan dua jenis semikonduktor ini dimaksudkan untuk meningkatkan tingkat konduktifitas atau tingkat kemampuan daya hantar listrik dan panas semikonduktor alami. Di dalam semikonduktor alami (disebut dengan semikonduktor intrinsik) ini, elektron maupun hole memiliki jumlah yang sama. Kelebihan elektron atau hole dapat meningkatkan daya hantar listrik maupun panas dari sebuah semikoduktor.

Misal semikonduktor intrinsik yang dimaksud ialah silikon (Si). Semikonduktor jenis p, biasanya dibuat dengan menambahkan unsur boron (B), aluminum (Al), gallium (Ga) atau Indium (In) ke dalam Si. Unsur-unsur tambahan ini akan menambah jumlah hole. Sedangkan semikonduktor jenis n dibuat dengan menambahkan nitrogen (N), fosfor (P) atau arsen (As) ke dalam Si. Dari sini, tambahan elektron dapat diperoleh. Sedangkan, Si intrinsik sendiri tidak mengandung unsur tambahan. Usaha menambahkan unsur tambahan ini disebut dengan doping yang jumlahnya tidak lebih dari 1 % dibandingkan dengan berat Si yang hendak di-doping.

Dua jenis semikonduktor n dan p ini jika disatukan akan membentuk sambungan p-n atau dioda p-n (istilah lain menyebutnya dengan sambungan metalurgi / metallurgical junction) yang dapat digambarkan sebagai berikut.

1. Semikonduktor jenis p dan n sebelum disambung.

2. Sesaat setelah dua jenis semikonduktor ini disambung, terjadi perpindahan elektron-elektron dari semikonduktor n menuju semikonduktor p, dan perpindahan hole dari semikonduktor p menuju semikonduktor n. Perpindahan elektron maupun hole ini hanya sampai pada jarak tertentu dari batas sambungan awal.

3. Elektron dari semikonduktor n bersatu dengan hole pada semikonduktor p yang mengakibatkan jumlah hole pada semikonduktor p akan berkurang. Daerah ini akhirnya berubah menjadi lebih bermuatan positif..
Pada saat yang sama. hole dari semikonduktor p bersatu dengan elektron yang ada pada semikonduktor n yang mengakibatkan jumlah elektron di daerah ini berkurang. Daerah ini akhirnya lebih bermuatan positif.

4. Daerah negatif dan positif ini disebut dengan daerah deplesi (depletion region) ditandai dengan huruf W.
5. Baik elektron maupun hole yang ada pada daerah deplesi disebut dengan pembawa muatan minoritas (minority charge carriers) karena keberadaannya di jenis semikonduktor yang berbeda.
6.

Dikarenakan adanya perbedaan muatan positif dan negatif di daerah deplesi, maka timbul dengan sendirinya medan listrik internal E dari sisi positif ke sisi negatif, yang mencoba menarik kembali hole ke semikonduktor p dan elektron ke semikonduktor n. Medan listrik ini cenderung berlawanan dengan perpindahan hole maupun elektron pada awal terjadinya daerah deplesi (nomor 1 di atas).

7.

Adanya medan listrik mengakibatkan sambungan pn berada pada titik setimbang, yakni saat di mana jumlah hole yang berpindah dari semikonduktor p ke n dikompensasi dengan jumlah hole yang tertarik kembali kearah semikonduktor p akibat medan listrik E. Begitu pula dengan jumlah elektron yang berpindah dari smikonduktor n ke p, dikompensasi dengan mengalirnya kembali elektron ke semikonduktor n akibat tarikan medan listrik E. Dengan kata lain, medan listrik E mencegah seluruh elektron dan hole berpindah dari semikonduktor yang satu ke semiikonduktor yang lain.

Pada sambungan p-n inilah proses konversi cahaya matahari menjadi listrik terjadi.

Untuk keperluan sel surya, semikonduktor n berada pada lapisan atas sambungan p yang menghadap kearah datangnya cahaya matahari, dan dibuat jauh lebih tipis dari semikonduktor p, sehingga cahaya matahari yang jatuh ke permukaan sel surya dapat terus terserap dan masuk ke daerah deplesi dan semikonduktor p.

Ketika sambungan semikonduktor ini terkena cahaya matahari, maka elektron mendapat energi dari cahaya matahari untuk melepaskan dirinya dari semikonduktor n, daerah deplesi maupun semikonduktor. Terlepasnya elektron ini meninggalkan hole pada daerah yang ditinggalkan oleh elektron yang disebut dengan fotogenerasi elektron-hole (electron-hole photogeneration) yakni, terbentuknya pasangan elektron dan hole akibat cahaya matahari.

Cahaya matahari dengan panjang gelombang (dilambangkan dengan simbol “lambda” sbgn di gambar atas ) yang berbeda, membuat fotogenerasi pada sambungan pn berada pada bagian sambungan pn yang berbeda pula.

Spektrum merah dari cahaya matahari yang memiliki panjang gelombang lebih panjang, mampu menembus daerah deplesi hingga terserap di semikonduktor p yang akhirnya menghasilkan proses fotogenerasi di sana. Spektrum biru dengan panjang gelombang yang jauh lebih pendek hanya terserap di daerah semikonduktor n.

Selanjutnya, dikarenakan pada sambungan pn terdapat medan listrik E, elektron hasil fotogenerasi tertarik ke arah semikonduktor n, begitu pula dengan hole yang tertarik ke arah semikonduktor p.

Apabila rangkaian kabel dihubungkan ke dua bagian semikonduktor, maka elektron akan mengalir melalui kabel. Jika sebuah lampu kecil dihubungkan ke kabel, lampu tersebut menyala dikarenakan mendapat arus listrik, dimana arus listrik ini timbul akibat pergerakan elektron.

Pada umumnya, untuk memperkenalkan cara kerja sel surya secara umum, ilustrasi di bawah ini menjelaskan segalanya tentang proses konversi cahaya matahari menjadi energi listrik.

Bagaimana cara membuat sel surya dapat dilihat di artikel Pembuatan Sel Surya Silikon : Sang Primadona

selengkapnya......

ingin belajar buat anti virus?

Kurang puas dengan antivirus yang Anda gunakan?, atau sekedar penasaran dengan cara membuat antivirus? Jika memang benar demikian kenapa tidak mencoba membuat antivirus sendiri? Pasti lebih asyik, selain menambah pengetahuan kita tentang antivirus juga untuk mengisi waktu-waktu senggang dengan mencoba bermain-main dengan virus, sehingga diharapkan tidak ada lagi ketakutan yang berarti akan virus komputer.

Dalam pemrograman antivirus memang sangat dibutuhkan pengetahuan tentang alghoritma, dimana hal ini penting untuk membangun engine detektor virus, misalnya seperti menggunakan alghoritma kalkulasi CRC atau MD5 sebagai engine detektornya. Lalu permasalahannya apa? Apakah Anda sudah cukup mengetahui tentang alghoritma yang dipakai dan tehnik yang digunakan untuk mendeteksi virus? Saya yakin belum banyak yang mengetahuinya lebih-lebih pada tehniknya, sekalipun Anda seorang programmer, mengapa? Karena walaupun Anda menguasai berbagai macam alghortima, tetapi belum tentu Anda mengetahui cara menjadikan alghoritma tersebut menjadi engine antivirus, karena selain membutuhkan pengetahuan tentang alghoritma Anda juga membutuhkan paling tidak sedikit pemahaman tentang struktur file eksekutabel. Sedangkan struktur eksekutabel akan tampak rumit untuk dipelajari bagi yang masih awam lebih-lebih yang masih belum tahu apa-apa tentang komputer.

Saya akan memberikan beberapa contoh yang mudah dan sederhana dalam membuat antivirus. Berbahagialah karena disini Anda tidak harus mengetahui banyak tentang alghoritma-alghoritma yang sulit, Anda cukup mengetahui sedikit tentang dasar-dasar pemrograman baik menggunakan bahasa Visual Basic, C, C++ atau Delphi. Kok bisa? Ya karena saya telah membangun engine ansav yang saya buat dalam bentuk file DLL (Dynamic Link Library) khusus saya buat untuk mempermudah membuat antivirus sendiri. File tersebut bisa di download di sini.

Sedikit tentang file DLL ini
File DLL yang saya buat ini mengandung engine virus detektor yang digunakan antivirus ansav untuk mendeteksi virus-virus lokal masa kini. Anda bisa dengan mudah menggunakan fungsi-fungsi yang ada pada file DLL ini untuk mendeteksi virus, contoh untuk memeriksa apakah suatu file merupakan virus, Anda hanya perlu membuat perintah seperti format berikut :

CheckWithAnsav(FileYangDicek, NamaVirus, BesarTampungan)

Sedangkan contoh penggunaanya seperti berikut :

retval = CheckWithAnsav (“C:\readme.txt”,Buffer,nSize)

Analisa :

Fungsi CheckWithAnsav akan mencoba memeriksa file “readme.txt” yang terletak pada drive “C:\”, apabila file “readme.txt” mengandung virus maka nilai pengembalian dari fungsi tersebut akan berupa nilai 1 yang pada contoh listing diatas diletakkan pada variabel “retval”, sebaliknya nilai pengembalian akan berupa 0 apabila file tidak mengandung virus. Lalu Buffer dan nSize pada listing diatas itu apa? Buffer adalah tampungan yang nantinya berisi nama virus yang terdeteksi apabila file “readme.txt” mengandung virus, tetapi tampungan ini akan kosong apabila virus tidak terdeteksi (file bersih), sedangkan nSize adalah jumlah karakter pada Buffer. Jadi apabila file “readme.txt” mengandung virus “gombal” misalnya maka Buffer akan birisi text “W32/Gombal” dan nSize akan berisi nilai 10 (jumlah dari karakter “W32/Gombal”).

Mudah bukan?

Se-instan itukah?, kalau memang benar semudah itu penggunaannya lalu bagaimana dengan kemampuannya? Tenang.., tentang kemampuan jangan khawatir, engine ansav ini merupakan engine detektor virus tercepat saat ini di Indonesia, karena pada basis pemrogramannya sendiri ansav menggunakan bahasa assembly (low level language). Pada test yang saya lakukan untuk men-scan semua virus yang saya koleksi semuanya berjumlah 314 virus dan ditest pada nootebook Pentium 2 Celleron dengan memori 128 MB, pada testnya hanya membutuhkan waktu sekitar 1,5 detik untuk men-scan semua file bervirus sampai habis. Walaupun begitu engine ini memiliki tingkat keakuratan yang tinggi. Jika Anda tidak percaya dengan yang saya katakan, Anda bisa mencobanya sendiri dengan menggunakan spek komputer yang sama dengan diatas, tetapi Anda bisa juga mencobanya pada berbagai spek yang berbeda, karena memang belum saya coba pada komputer dengan spek lain.

Dilihat dari pemrogramannya yang dibuat dengan basis low level language assembly apakah bisa DLL ini dipakai pada kompiler-kompiler tingkat tinggi seperti Visual Basic, C++, dan Delphi? Bisa!, engine ini bisa berjalan pada berbagai macam jenis kompiler yang ada saat ini, untuk itu saya sudah menyertakan contoh source codenya dalam 3 tingkatan bahasa, bahasa tingkat rendah (low level language) menggunakan Assembly 32 bit, Bahasa tingkat menengah (middle level language) menggunakan C, dan bahasa tingkat tinggi (high level language) menggunakan C++ dan Visual Basic.

Sepertinya Anda sudah mulai bosan membacanya, okeh sekarang kita mulai saja pelajarannya.

Mulai Belajar
Apa yang akan Anda lakukan untuk membuat seseorang mau membantu Anda untuk menunjukkan jalan ke suatu tempat yang Anda belum ketahui? Ya.., Anda bisa menanyakan alamat tempatnya pada orang tersebut, sukur-sukur orang tersebut sekalian bersedia mengantarkan Anda sampai tujuan. Tetapi apakah orang yang belum begitu mengenal Anda akan begitu saja bersedia untuk mengantarkan Anda? Walaupun mungkin hal ini terjadi, tetapi saya yakin prosentase kemungkinan hanya berkisar antara 1-5% saja.

Oleh karena itulah sebelum kita memulai praktek pada penulisan listing, terlebih dahulu akan saya perkenalkan Anda kepada DLL ansav ini.

Kalau yang sebelumnya pengenalan sudah saya tuliskan di atas pada bagian “Sedikit tentang DLL ini” tetapi itu hanya sedikit lihatlah kata pertama pada judul tersebut, diAndaikan Anda adalah seorang yang baru saja menemukan orang yang dianggap mampu untuk menunjukkan jalan, maka bagian diatas tadi hanya seperti Anda baru saja mengucapkan “Misi… numpang tanya…”, nah sekarang adalah saatnya Anda untuk membujuk orang itu untuk mengantarkan Anda pada tujuan, dengan cara pertama-tama berkenalan dan sedikit berbasa-basi… he..he..he.. kayaknya cara saya menggambarkan terlalu berlebihan, maklum saya oran]ngnya termasuk orang yang suka mengAndai-Andai dan menghayal tinggiiiiii banget (hanya yang + bukan yang –, kalaupun ada cuma sedikit koq. he..he..he..). Tetapi semua ini saya maksudkan agar proses belajar tidak membosankan dan berharap agar lebih mudah untuk dipahami.

Lebih detail tentang DLL ini
Dibuat menggunakan bahasa ….. (ya saya tahu Anda sudah mengetahuinya di bagian pengenalan pertama diatas)
Nama file asli : “ansavcore.dll”
Memiliki ukuran sangat kecil, pada versi awalnya memiliki ukuran16 KB. Anda tidak perlu lagi khawatir untuk membawanya kemana-mana, karena tidak berat sehingga tidak membutuhkan tukang pikul untuk membawanya. :P
Memiliki kecepatan scan tinggi. Pada core enginenya hanya menggunakan sekitar 269 instruksi dasar prosesor jenis x386, dan 18 fungsi eksternal termasuk lokal dan API-nya. Bandingkan dengan instruksi yang dihasilkan oleh kompiler bahasa tingkat tinggi yang bisa mencapai bukan hanya ratusan bahkan bisa sampai ribuan instruksi dan fungsi eksternal yang saling berlompat-lompatan walaupun dengan arsitektur kerja yang sama dengan yang saya buat. Untuk perbandingannya, Anda bisa lihat pada kompiler tingkat tinggi Visual Basic 6.
Mampu berjalan di sistem operasi Windows 98/ME/2K/XP untuk VISTA belum dicoba. Sehingga Anda lebih leluasa untuk mengembangkan antivirusnya.
Pada versi waktu artikel ini mulai ditulis yakni 1.0.0 sudah memiliki 6 fungsi yang siap untuk digunakan, diantaranya:
CheckWithAnsav
AnsavVirusFirst
AnsavVirusNext
AnsavVirusClose
AnsavVirusCount
AnsavGetVersion
Keterangan tentang fungsi-fungsi tersebut :

1. CheckWithAnsav
Membutuhkan 3 parameter, berfungsi untuk memeriksa file dari virus. Fungsi ini memiliki prototipe :

Int CheckWithAnsav (
IN LPSTR File,
OUT LPSTR VirusName,
IN OUT PULONG nSize
);

Note: Prototipe fungsi di atas ditulis dalam format bahasa C. Disini saya akan memakai standar bahasa C dalam penulisan prototipe selanjutnya.
Fungsi ini akan mencoba untuk memeriksa file yang alamat (path) nya diletakkan pada parameter File, apabila virus terdeteksi pada file yang di-scan maka nama virus akan diletakkan pada parameter kedua VirusName, sedangkan parameter terakhir yaitu nSize adalah jumlah karakter dari parameter VirusName. Untuk nSize nilai harus terlebih dahulu diset dengan 30 atau MAX_VIRUSNAME_LENGTH.

Const MAX_VIRUSNAME_LENGTH = 30

Selanjutnya nSize akan menghasilkan output berupa jumlah karakter nama virus yang terdeteksi. Apabila terdeteksi adanya virus maka nilai pengembalian dari fungsi ini adalah 1 atau AN_VIRUS_DETECTED.

Const AN_VIRUS_DETECTED = 1

Dan akan menghasilkan nilai 3 atau AN_SCAN_ERROR pada pengembaliannya apabila dalam operasinya fungsi ini mengalami kesalahan atau terjadi error. Sedangkan apabila file tidak ditemukan maka akan memberikan nilai pengembalian 2 atau ERROR_FILE_NOT_FOUND.

Const AN_SCAN_ERROR = 3
Const ERROR_FILE_NOT_FOUND = 2
2. AnsavVirusFirst
Membutuhkan 2 parameter, berfungsi untuk meng-enumerasikan, atau mendapatkan seluruh nama-nama virus yang ada pada database engine ansav. Adapun 2 parameter yang dibutuhkan adalah parameter VirusName dan nSize, parameter VirusName adalah alamat tempat tampungan untuk nama pertama virus pada data base virus ansav, sedangkan nSize adalah jumlah karakter pada tampungan VirusName.

Fungsi ini meneghasilkan nilai pengembalian berupa handel hFind yang nantinya digunakan untuk mendapatkan nama-nama virus selanjutnya menggunakan fungsi ke 3 AnsavVirusNext.

HANDLE AnsavVirusFirst (
OUT LPSTR VirusName,
IN OUT LONG nSize
);
Apabila operasi yang dilakukan fungsi ini gagal maka nilai pengembaliannya adalah 0 atau NO_MORE_VIRUSES. Dan akan menghasilkan nilai pengembalian -1 atau INVALID_HANDLE_VALUE apabila terjadi kesalahan pada waktu operasinya.
Const NO_MORE_VIRUSES = 0
3. AnsavVirusNext

Membutuhkan 3 parameter, berfungsi untuk mendapatkan nama-nama virus selanjutnya dengan berdasarkan handel yang telah didapatkan dari fungsi ke 2 (AnsavVirusFirst), handel diletakkan pada parameter pertamanya yaitu hFind, sedangkan parameter kedua File berisi alamat tampungan yang nantinya akan berisi nama virus selanjutnya, dan parameter terakhir nSize berisi jumlah karakter nama virus yang ada pada parameter VirusName.

Int AnsavVirusNext (
IN HANDLE hFind,
OUT LPSTR VirusName,
IN OUT PULONG nSize
);
Fungsi ini akan menghasilkan nilai pengembalian 0 atau NO_MORE_VIRUSES apabila daftar virus telah habis dibaca, dan akan menghasilkan nilai pengembalian -1 atau INVALID_HANDLE_VALUE apabila handel salah atau terjadi error pada waktu operasinya.

4. AnsavVirusClose

Membutuhkan 1 parameter hFind berupa handel yang didapat dari fungsi ke 2 (AnsavVirusFirst). Fungsi ini akan menutup sesi pengumpulan daftar nama-nama virus pada database engine-nya.

Fungsi ini memiliki prototipe :

Int AnsavVirusClose(
IN HANDLE hFind
);
Menghasilkan nilai pengembalian 1 apabila operasi berhasil, dan menghasilkan nilai -1 apabila operasi gagal atau terjadi kesalahan pada operasinya.

5. AnsavVirusCount

Tidak membutuhkan parameter apapun. Berfungsi untuk mendapatkan jumlah keseluruhan virus yang ada pada database ansav engine. Jumlah keseluruhan virus didapat dari nilai pengembaliannya.

Fungsi ini memiliki prototipe :

ULONG AnsavVirusCount (Void);
6. AnsavGetVersion

Fungsi terakhir ini membutuhkan parameter yang merujuk pada alamat memori berkapasitas 12 byte dan dibagikan menjadi 3 jenis versi. 4 byte untuk versi major, 4 byte selanjutnya untuk versi minor, 4 byte terakhir untuk versi revisi. Untuk ini sudah saya siapkan bentuk parameternya berupa struktur.

typedef struct _ANSAV_VERSION_INFO {
UINT dwMajor;
UINT dwMinor;
UINT dwRevision;
} ANSAV_VERSION_INFO, *PANSAV_VERSION_INFO;
VOID AnsavGetVersion (
PANSAV_VERSION_INFO lpAvi
);
Cara penggunaan fungsinya ditulis dalam bahasa Visual Basic :

Dim avi As ANSAV_VERSION_INFO
Call AnsavGetVersion(avi)

Hasil yang berupa versi engine ansav akan diletakkan pada variabel “avi”. Untuk mendapatkan versi major bisa dengan perintah “avi.dwMajor”, untuk versi minor bisa dengan perintah “avi.dwMinor”, sedangkan untuk versi revisinya bisa dengan perintah “avi.dwRivision”.

Setelah masa perkenalan dan basa-basi selesai, sebenarnya Anda harus sudah diantar ke tujuan Anda oleh orang yang baru Anda kenali tersebut, tetapi apabila tidak demikian, berarti saya salah duga, karena bisa saja ternyata yang Anda kenali adalah orang buta misalnya :D .

Sebelum Anda memulai mempraktekkannya, paling tidak Anda harus terlebih dahulu memiliki segala perlengkapan yang akan dibutuhkan nanti dalam pembelajaran ini.

Adapun perlengkapan yang dibutuhkan adalah :

1. Kompiler
Kompiler ini berfungsi untuk meng-kompil atau istilahnya membangun sebuah aplikasi software, dimana aplikasi yang dimaksud atau yang akan kita buat adalah berupa antivirus sederhana.

Kompiler yang diperlukan bisa menggunakan Visual Basic, C, C++ atau Delphi.

2. Debugger (optional)

Jika Anda memang seorang yang selalu melakukan kesalahan atau paling tidak orang yang selalu berhati-hati dalam membuat program saya sarankan untuk tidak pernah lupa melakukan debugging pada setiap aplikasi yang baru Anda buat.

Proses debugging sendiri itu digunakan untuk menganalisa jalannya suatu program dan biasanya untuk mencari letak kesalahan pada suatu sistem aplikasi. Pada beberapa kompiler tingkat tinggi biasanya sudah disertakan program debugger sendiri.

Tapi ini hanya optional, artinya Anda tidak harus atau diwajibkan untuk memiliki program debugger dengan catatan Anda memang orang yang PeDe abis dan orang yang ma’sum istilahnya orang yang tidak pernah melakukan kesalahan :D , tapi tidak ada satupun orang di dunia ini yang tidak pernah melakukan kesalahan. Jadi akan selalu saya sarankan (recommended) untuk para programmer khususnya pemula.

Adapun jenis-jenis debugger ada sangat banyak bertebaran di sana-sini, Anda bisa memilih sesuai dengan selera dan kesukaan Anda. Contoh macam-macam debugger eksternal yang nge-tren dan banyak dipakai pada abad ini : OllyDebug, IDA Pro, WinDbg dll.

3. Roti coklat (recommended)

Selain 2 perlengkapan diatas saya tambahkan lagi perlengkapan ketiga ini dengan sifat recommended yang artinya saya sarankan kepada Anda yang mudah bosan dan frustasi. Tapi walaupun begitu perlengkapan ketiga ini juga sama optionalnya dengan perlengkapan kedua yaitu program debugger, artinya Anda tidak harus tapi sangat saya sarankan, dimaksudkan untuk menghilangi kejenuhan ketika Anda sudah mulai muak membaca tutorial ini, pejamkan mata… dan makanlah satu coklat lalu ambil nafas panjang kira-kira 1-2 menit, setelah itu Anda coba pelajari kembali, pasti akan lebih plong dan lebih segar meneruskan belajarnya.

Tentang recommended coklat ini sendiri tidak harus coklat, Anda bisa dengan makanan-makanan kesukaan Anda untuk dibarengi ketika Anda sedang dalam proses belajar. Karena sebenarnya coklat itu sendiri adalah makanan kesukaan saya :P . tapi jangan salah loh.., menurut para ahli ternyata makanan yang mengandung banyak unsur coklat memiliki pengaruh tersendiri yang dapat merangsang sel-sel otak manusia, tentang benar atau tidaknya Wallahu a’lam.:D tapi bukan karena para ahli mengatakan seperti itu lalu saya ikut-ikutan makan coklat, yee… saya memang sudah mulai suka makan coklat sejak umur 5 tahun.

Okeh, dari pada banyak bicara yang gak kunjung selesai, mending kita mulai saja tutorialnya. Untuk tutorialnya akan saya berikan contoh-contohnya dalam penggunaan 6 fungsi yang sudah saya sebutkan diatas, adapun bahasa pemrograman yang akan saya gunakan untuk contoh dalam penulisan listing-nya adalah menggunakan 3 tingkatan bahasa seperti yang pernah saya singgung diatas, low, middle dan high, Assembly, C dan Visual Basic. Tetapi urutannya akan saya buat berdasarkan dengan pemrograman tingkat tinggi terlebih dahulu, yakni Visual Basic.

Oh ya…, jangan lupa sebelum Anda mulai berpraktek, terlebih dahulu letakkan file “ansavcore.dll” pada direktori tempat Anda meletakkan program yang akan Anda buat atau pada direktori project Anda.

1. CheckWithAnsav
Fungsi pertama yang akan saya contohkan adalah fungsi CheckWithAnsav, informasi tentang fungsi ini bisa Anda baca pada tulisan sebelumnya.

Contoh penggunaan fungsi CheckWithAnsav dalam bahasa Visual Basic :

Sebelum Anda bisa menggunakan fungsi ini dari file library “ansavcore.dll”, terlebih dahulu Anda harus mendeklarasikan beberapa kosntanta dan fungsinya. Adapun bentuk deklarasi fungsi ini pada bahasa Visual Basic adalah :

‘ Contoh penggunaan fungsi CheckWithAnsav
‘ pada bahasa Visual Basic

‘ Ditulis oleh : [4NV|e]

Const MAX_VIRUSNAME_LENGTH = 30
Const ERROR_FILE_NOT_FOUND = 2
Const AN_SCAN_ERROR = 3
Const AN_CLEAN = 0

Private Declare Function CheckWithAnsav Lib “ansavcore.dll” _
(ByVal FileName As String, ByVal VirusName As String, nSize As Long) As Long
Note: Karena ruang halaman yang sempit, maka tAnda “_” (underscore) pada contoh listing di atas saya pergunakan sebagai tAnda bahwa listing tersebut diteruskan pada baris selanjutnya. Cara ini akan saya pergunakan pada penulisan listing dalam bahasa Visual Basic selanjutnya.
Setelah Anda menuliskan deklarasinya langkah selanjutnya bisa langsung menuliskan listing kodenya :

Private Sub PeriksaFile()
Dim RetVal As Long
Dim nSize As Long
Dim Buff As String * MAX_VIRUSNAME_LENGTH
Dim NamaVirus As String

nSize = MAX_VIRUSNAME_LENGTH

RetVal = CheckWithAnsav(”C:\file_dicurigai.exe”, _
Buff, nSize)

If RetVal = 1 Then
NamaVirus = Left$(Buff, nSize)

Call MsgBox(”File ini mengandung virus : ” & _
NamaVirus & “, Hati-hati!! :( “)
Else
Select Case RetVal
Case ERROR_FILE_NOT_FOUND
Call MsgBox(”File yang Anda maksud tidak ditemukan!.”)
Case AN_SCAN_ERROR
Call MsgBox(”Terjadi kesalahan dalam proses scanning.”)
Case AN_CLEAN
Call MsgBox(”File ini bersih dari virus.”)
End Select
End If
End Sub
Analisa kode :
nSize = MAX_VIRUSNAME_LENGTH
RetVal = CheckWithAnsav(”C:\file_dicurigai.exe”, _
Buff, nSize)
Set terlebih dahulu variabel nSize dengan nilai 30 atau yang sudah dibuatkan konstantanya yaitu MAX_VIRUSNAME_LENGTH. Nilai 30 adalah alokasi maximal untuk menampung nama virus. Kemudian periksa file “file_dicurigai.exe” yang ada pada drive “C:\”, tentang nama file yang akan diperiksa Anda bisa menentukan namanya sendiri. Untuk memeriksa file tersebut gunakan fungsi CheckWithAnsav dan letakkan nilai pengembaliannya pada variabel RetVal.

If RetVal = 1 Then
NamaVirus = Left$(Buff, nSize)

Call MsgBox(”File ini mengandung virus : ” & _
NamaVirus & “, Hati-hati!! :( “)
Kemudian cek berapakah nilai yang dihasilkan dari pengembalian fungsi CheckWithAnsav yang ada pada variabel RetVal, jika (if) nilai pada variabel RetVal = 1 berarti file tersebut (“file_dicurigai.exe”). mengandung virus.

Kemudian apabila memang virus terdeteksi maka dapatkan nama virus yang terdeteksi tersebut menggunakan perintah Left untuk men-trim (memperpendek jangkauan string) dan letakkan nama tersebut pada variabel NamaVirus, lalu tampilkan pesan “File ini mengandung virus : “, apabila virus yang terdeteksi adalah virus “gombal” maka akan ditampilkan pesan seperti berikut :

“File ini mengandung virus : W32/Gombal, Hati-hati!! :( “

Else
Select Case RetVal
Case ERROR_FILE_NOT_FOUND
Call MsgBox(”File yang Anda maksud tidak ditemukan!.”)
Case AN_SCAN_ERROR
Call MsgBox(”Terjadi kesalahan dalam proses scanning.”)
Case AN_CLEAN
Call MsgBox(”File ini bersih dari virus.”)
End Select
End If
End Su

Apabila virus tidak atau belum terdeteksi, maka periksa status operasi. Perintah Select Case RetVal disini digunakan untuk memeriksa status operasi apakah berhasil atau terjadi error. Apabila nilai pengembalian berupa ERROR_FILE_NOT_FOUND berarti file yang dimakusd untuk di-scan tidak ada (tidak eksis) maka tampilkan pesan kesalahan “File yang Anda maksud tidak ditemukan!”. Apabila nilai pengembalian berupa AN_SCAN_ERROR berarti terjadi kesalahan dalam melakukan scanning pada file tersebut, maka tampilkan pesan “Terjadi kesalahan dalam proses scanning”. Terakhir apabila nilai pengembalian berupa 0 atau AN_CLEAN berarti file tersebut tidak mengandung virus atau bersih.

Contoh penggunaan fungsi CheckWithAnsav dalam bahasa C :

/*
Contoh penggunaan fungsi CheckWithAnsav
pada bahasa C

Ditulis oleh : [girrel13]
*/

#include
#include

int const AN_VIRUS_DETECTED = 1;
int const AN_SCAN_ERROR = 3;
int const MAX_VIRUS_LENGTH = 30;

typedef STDCALL int _CheckWithAnsav(
LPSTR FileName,
LPSTR VirusName,
PULONG nSize
);
static _CheckWithAnsav *CheckWithAnsav;

void PeriksaFile(void);

void PeriksaFile(void){
char vName[30];
unsigned long nSize=MAX_VIRUS_LENGTH;

CheckWithAnsav = (_CheckWithAnsav*)
GetProcAddress(LoadLibrary(”ansavcore.dll”),
“CheckWithAnsav”);

int RetVal = CheckWithAnsav( “C:\file_dicurigai.exe”,
vName,&nSize);

if (RetVal==AN_VIRUS_DETECTED){
printf(”\nFile ini mengandung virus : %s”
“, Hati-hati!! :( “,vName);
} else {
switch (RetVal) {
case ERROR_FILE_NOT_FOUND:
{
printf(”\nFile yang Anda maksud “
“tidak ditemukan!.”);
} break;
case AN_SCAN_ERROR:
{
printf(”\nTerjadi kesalahan dalam “
“proses scanning.”);
} break;
default:
{
printf(”\nFile ini bersih dari virus.”);
}
}
}
}
Analisa kode pada bahasa C tidak jauh berbeda dengan yang menggunakan bahasa Visual Basic, kedua-duanya hampir memiliki cara kerja yang sama, jadi tidak dibutuhkan analisa kode lagi disini. Saya yakin Anda bisa memahaminya.

Contoh penggunaan fungsi CheckWithAnsav dalam bahasa Assembly :

Comment ~
Contoh penggunaan fungsi CheckWithAnsav
pada bahasa Assembly

Ditulis oleh : [girrel13]
~
.386
.model flat, stdcall
option casemap: none

include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

.const
AN_CLEAN equ 0
AN_VIRUS_DETECTED equ 1
AN_SCAN_ERROR equ 3
MAX_VIRUS_LENGTH equ 30

.data?
_ScanWithAnsav dd ?
nSize dd ?
vName db MAX_VIRUS_LENGTH dup(?)
Buffer db 256 (?)

.data
szAppName db ‘Ansav in asm’,0
szAnsavCoreDll db ‘ansavcore.dll’,0
szScanWithAnsav db ‘CheckWithAnsav’,0
szFile db ‘C:\file_dicurigai.exe’,0
szVirusTdtks db ‘File ini mengandung virus : %s, ‘
db ‘Hati-hati!! :( ‘,0
szBersih db ‘File ini bersih dari virus.’,0
szFileTidakAda db ‘File yang Anda maksud tidak ditemukan!’,0
szError db ‘Terjadi kesalahan dalam proses scanning.’,0

.code

start:

PeriksaFile proc

push offset szAnsavCoreDll
call LoadLibrary
push offset szScanWithAnsav
push eax
call GetProcAddress

mov _ScanWithAnsav,eax
mov nSize,MAX_VIRUS_LENGTH

push offset nSize
push offset vName
push offset szFile
call _ScanWithAnsav
test eax,eax
jz bersih
cmp eax,AN_VIRUS_DETECTED
je virus_terdeteksi
cmp eax,ERROR_FILE_NOT_FOUND
je file_tidak_ada
cmp eax,AN_SCAN_ERROR
je error
jmp tamat

virus_terdeteksi:
push offset vName
push offset szVirusTdtks
push offset Buffer
call wsprintf
add esp,4*3
lea eax,Buffer
call tampilkan_pesan
jmp tamat

file_tidak_ada:
lea eax,szAppName
call tampilkan_pesan
jmp tamat

error:
lea eax,szAppName
call tampilkan_pesan
jmp tamat

bersih:
lea eax,szAppName
call tampilkan_pesan

tamat:
xor eax,eax
ret

tampilkan_pesan:
push 0
push offset szAppName
push eax
push 0
call MessageBox
ret
PeriksaFile endp
end start

Sama dengan pada bahasa-bahasa sebelumnya, cara kerjanya pada bahasa assembly juga sama.

Untuk menghemat waktu, tenaga dan pikiran :D , contoh fungsi-fungsi yang lain nantinya akan saya tulis dalam satu arsip saja, dengan pembagian berdasarkan bahasanya. Contoh akan saya tulis dengan full source code dan akan saya jadikan satu dalam file terkompresi (zip). Dan bisa di download pada postingan selanjutnya. Jadi intinya saya hanya akan mengatakan kalau artikel ini adalah “masih bersambung…” hiks… sulit banget sih ngomongnya… ~_~”

selengkapnya......

winboost2000 terproteksi bobol?

WinBoost 2000 (www.winboost.com) merupakan utility favorit bagi banyak orang, karena dapat digunakan untuk mengganti puluhan setting tersembunyi pada Windows 9x tanpa perlu susah payah otak-atik pada registry.

Program tersebut juga dilengkapi dengan fasilitas password, sehingga hanya orang yang tahu passwordnya saja yang dapat menggunakan. Tapi sayangnya proteksi tersebut sangat lemah dan mudah dibongkar. Pengen tahu caranya ?

Sekarang jalankan WinBoost Anda dan aktifkan password (terletak pada bagian WinBoost 2000 preferences). Terserah mau dikasih password apa. Kalau sudah segera tutup WinBoost-nya.

Mulai sekarang untuk menggunakan WinBoost Anda harus memasukkan Untuk "melumpuhkan" password WinBoost, hapus saja Name Password passwordnya. Nah, untuk mengakali "todongan" password tersebut, jalankan registry editor. Pindah ke key HKey_Local_Machine\Software\Magellas\WinBoost 2000. Lihat pada panel sebelah kanan. Kalau WinBoost Anda terproteksi dengan password maka akan terdapat Name bernama Password. Isi Data tersebut adalah passwordnya yang telah dienkrip. Coba hapus Name bertuliskan Password tersebut.

Sekarang jalankan lagi WinBoost-nya. Gimana hasilnya ? Ternyata Anda tidak ditodong password lagi khan ?

selengkapnya......

Anak Bawang

Yogyakarta (ANTARA News) - Ketua Majelis Pertimbangan Partai (MPP) Partai Amanat Nasional (PAN) Amien Rais menyatakan PAN terpaksa menjadi junior dalam koalisi mendatang karena suara PAN dalam Pemilu Legislatif 9 April 2009 hanya 6 persen.

"Kita terpaksa menjadi mitra yunior dengan pihak yang akan berkoalisi," kata Amien di Yogyakarta, Sabtu, dalam rapat kerja nasional PAN yang dibuka Ketua Umum DPP PAN Soetrisno Bachir dan dihadiri beberapa tokoh PAN seperti AM Fatwa, Hatta Rajasa, dan Bambang Soedibyo.

Mantan Ketua Umum DPP PAN mengatakan setelah bekerja keras dalam Pemilu 9 April, maka tugas berat berikutnya adalah memasuki pemilihan presiden dan wakil presiden pada 8 juli 2009.

"Yang masih harus kita tunggu adalah siapa yang akan mendampingi Pak Susilo Bambang Yudhoyono dan juga Ibu Megawati," katanya kepada para peserta Rakernas setelah sebelumnya menyinggung deklarasi duet Jusuf Kalla-Wiranto.

Sekalipun mengakui PAN harus menjadi yunior dalam koalisi, Amien mengatakan PAN telah dikenal sebagai partai politik yang memiliki kaum intelektual.

"Walaupun suara PAN sekitar 6 persen, PAN tetap merupakan partai besar karena di dalam PAN banyak intelektualnya," kata Amien.

Rakernas PAN ini terutama membahasa siapa mitra koalisi PAN dan penentuan calon wakil presiden dalam koalisi yang diikuti PAN.

Di dalam rapat itu, muncul beberapa nama kader PAN untuk menjadi bakal calon wakil presiden antara lain Ketua Umum Soetrisno Bachir serta Wakil Ketua Majelis Pertimbangan Partai Hatta Rajasa yang juga merupakan Menteri Sekretaris Negara.

selengkapnya......

Senin, 11 Mei 2009

Makan Kacang Bikin berjerawat??

Jangan sering makan kacang dalam jumlah yang banyak, nanti timbul jerawat di wajah. Demikian mitos seputar jerawat yang kebenarannya masih menjadi pro dan kontra di antara para pakar kecantikan. Selain kacang, konon coklat juga menjadi musuh utama bagi para wanita yang wajahnya mudah ditumbuhi jerawat.

Is it true? Well, sampai saat ini masih sering terjadi perdebatan. American Academy of Dermatology, sebuah institusi untuk urusan kecantikan kulit, adalah salah satu badan yang berpendapat bahwa jerawat tidak disebabkan oleh makanan seperti kacang, coklat atau ice cream. Namun sebuah hasil riset, membuktikan hal yang bertolak belakang.

Colorado State University Department of Health and Exercise, menyarankan untuk mengurangi gula dan makanan yang kadar karbohiodratnya tinggi. Institusi tersebut telah meneliti sekitar 1300 orang penduduk pulau Kitivan di Papua New Guinea, yang puasa makanan manis serta makanan berkarbohidrat. Seharo-harinya mereka hanya makan ikan, buah dan daging yang dimasak secara tradisional. Hasilnya? Tidak ada satu jerawat pun yang bertengger di wahaj mereka.
Mengkonsumsi terlalu banyak gula dapat meningkatkan kadar insulin dalam darah, dimana hal tersebut memicu produksi hormone androgen yang membuat kulit jadi berminyak. Demikian statement dari Howard Murad, seorang professor dari UCLA School of Medicine. Pernyataan tersebut menjelaskan mengapa para penduduk pulau tersebut bebas dari jerawat.

Untuk Anda yang masih berusaha memerangi jerawat, tak ada salahnya mencoba, bukan? Mulai hari ini, cobalah untuk mengurangi gula dalam teh atau kopi. Serta mengurangi roti-rotian, kentang atau nasi pada menu sehari-hari Anda, agar wajah bebas jerawat jadi milik Anda.

selengkapnya......

Pemeliharaan Badan Lewat BODY SCRUB

Meskipun termasuk masih baru di dunia barat, scrub tubuh ini sudah menjadi tradisi di negara-negara timur tengah selama berabad-abad. Gunakan scrub tubuh apabila Anda merasa perlu melakukan pembersihan secara mendalam untuk peredaran darah

Scrub buah jeruk
Scrub buah jeruk beraroma segar dan memiliki tekstur agak kasar yang dapat membantu membuang sel-sel kulit mati dan merangsag pasokan darah. Kulit Anda pun terasa segar dan sehat. Resep di bawah ini cukup untuk lima kali perawatan :

45 ml biji bunga matahari yang sudah dihaluskan
45 mlm bubur oat medium
45 ml garam laut kasar
45 ml kulit jeruk yang sudah diparut
15 ml kulit lemon yang diparut
3 tetes minyak essential grape fruit
botol kaca tertutup
minyak almond

Campur semua bahan hingga merata dan simpan dalam bejana kaca yang tertutup rapat. Ketika siap untuk perawatan, ambil 1/5 bagian scrub. Setelah itu, dalam sebuah mangkuk dangkal, campur bahan dengan minyak almond sampai menjadi semacam pasta. Buka semua pakaian dan berdirilah di dalam bath up. Oleskan scrub tadi di seluruh tubuh sambil dipijat dengan lembut. Berikan perhatian khusus pada area kulit kering dan keras seperti sikut, lutut dan tumit. Bersihkan sisa-sisa scrub sebelum berendam atau menyiram

selengkapnya......

My Ladies Yeuh ...........