BAYU BLOG'S
this site the web

Recent Photos

image
image
image

Pointer pada c++

Penjelasan tentang pointer
pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan “Abstract C Machine”, yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk menginterpretasikan stream of instruction, dan addressable memory yang terbagi kedalam 3 bagian : automatic memory, static memory dan free memory. Addressable memory adalah memory yang konten-nya dapat diambil jika diketahui alamatnya. Lebih jauh lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat.Hal ini disebut dengan Random Access Memory.

— Penggunaan Awal Pointer
Jika variabel merupakan isi memori, dan untuk mengakses isi memori tersebut diperlukan address, lalu bagaimana cara kita mengetahui alamat dari suatu variabel ? Jawabannya adalah : untuk kebanyakan kasus kita sama sekali tidak perlu tahu alamat dari sebuah variabel. Untuk mengakses sebuah variabel kita hanya perlu nama dari variabel tersebut. Tugas kompiler lah yang mentranslasikan nama ke alamat mesin yang diperlukan oleh komputer.

Akan tetapi terdapat beberapa kasus dimana kita tidak mungkin memberi nama pada sebuah entitas di program kita. Hal ini terjadi terutama saat kita menggunakan data struktur dinamis seperti linked list, resizeable array, tree dan lain sebagainya. Hal ini karena kita tidak mungkin memberi nama terhadap entitas yang mungkin ada atau tidak ada. Struktur seperti linked list hampir mustahil dibuat tanpa pointer tanpa harus mendefinisikan LISP-like list.

Inilah awal mula penggunaan pointer sebagai moniker. Istilah moniker di sini berarti sesuatu yang menunjuk atau mengacu kepada entitas lain. Istilah moniker ini bukanlah istilah standard dan lazim , tetapi sesuatu yang saya pilih impromptu untuk membedakan dengan pointer atau reference yang sudah memiliki arti tersendiri.

Penggunaan lain pointer sebagai moniker adalah untuk mengatasi kelemahan bahasa C awal : Dahulu fungsi – fungsi di C hanya mengerti pass by value. Pointer digunakan untuk mengemulasi pass by reference karena pointer berisi alamat ke objek lain, sehingga fungsi tersebut dapat mengubah objek tersebut dengan memanipulasi pointer.

Pertanyaanya : siapa yang bertugas menentukan alamat objek yang di tunjuk oleh pointer dalam kasus ini ? jelas bukan kompiler karena objek tersebut tidak bernama. Apakah kita sebagai programmer menentukannya sendiri ? ternyata tidak. Hal tersebut ditentukan oleh fungsi malloc dan sejenisnya (dan juga new di C++), atau untuk kasus passing pointer ke dalam fungsi, operator &. Jadi dalam hal ini kita tidak juga menentukan alamat sebuah objek.

— Builtin Array di C dan C++
Sebelum membahas array di C dan di C++, ada baiknya kita membahas tentang array. Array adalah asosiasi antara sebuah index dengan nilai. Jika diketahui sebuah index, kita akan mengetahui nilainya. Dari definisi ini :
1. Tidak disebutkan bahwa index harus integer, atau tipe tertentu.
2. Tidak disebutkan range dari indexnya dimulai dari nilai tertentu, Bahkan tidak disebutkan bahwa indeks nya memiliki batas bawah maupun batas atas.
3. Tidak disebutkan bahwa nilai harus disimpan secara contigous, bahkan tidak disebutkan bahwa nilainya harus di simpan sama sekali.

akan tetapi :
1. Banyak bahasa pemrograman yang di desain tahun 60-an hingga tahun 70-an menentukan bahwa index array adalah integer atau sesuatu yang bisa dikonversi menjadi integer atau sesuatu yang memiliki nilai berurutan seperti integer.

2. Beberapa bahasa menentukan bahwa array dimulai dengan nilai tertentu. contohnya di C, array dimulai dari 0 sementara di Pascal Array dimulai dari 1. Dalam Algo-68 programmer dapat menentukan sendiri batas- batas array. Akan tetapi dalam semua bahasa pemrograman mengakses nilai dengan indeks yang di luar batas dianggap sebagai programming error.

3. Semua bahasa pemrogramman yang saya tahu menyimpan elemen – elemen array di memory. beberapa bahasa, misalnya C, menjamin bahwa elemen – elemen tersebut disimpan dalam memory yang contigous.

Sekarang tipe yang lebih mendekati definisi awal array tersedia dengan nama associative array. Tipe ini didukung oleh beberapa bahasa seperti PHP dan JavaScript, dan juga tersedia dalam beberapa bahasa lain sebagai library ( seperti std::map di C++).

Kembali ke C dan C++ array, kita dapat tentukan beberapa property array : zero based, contigous dan convertible to pointer. Banyak alasan dengan dipilihnya property seperti ini, tapi yang paling penting adalah efisiensi, yang akan kita bicarakan sebentar lagi. setiap array dapat dikonversi menjadi pointer yang menunjuk ke elemen pertama. Hal ini sangat konvenien mengingat dynamic array diciptakan dengan alokasi memori dari free memory (dengan fungsi calloc, yang berarti contigous alloc. yang aneh adalah fungsi ini berperilaku mirip dengan malloc kecuali dia menginisialisasi memori dengan nol. ). Kemudian kita tahu bahwa elemen dalam array di simpan secara berurutan, dengan demikian alamat semua elemen array adalah ptr + n * sizeof(elemen). Dengan mendefinisikan pointer arithmatic, didapat kesamaan ar[idx] == *(ar + idx). hal ini menimbulkan sesuatu yang menarik , ar[idx] == *(ar + idx) == *(idx + ar) == idx[ar] (yes, it is valid C !!).

Operasi pointer arithmatic lain juga didefinisikan untuk pointer. yang menarik adalah increment dan decrement. programmer dapat memeriksa semua elemen dalam array dengan cara menginkremen pointer dari pointer penunjuk elemen pertama. Tentu saja hal yang sama dapat dilakukan dengan indexing biasa, ar[idx], akan tetapi dengan operasi pointer bisa lebih efisien. Alasannya terletak pada bagaimana cara komputer membaca data di ar[idx]. Untuk mesin yang memiliki indexed addressing hal ini cukup sederhana dan efisien (ar jadi base, idx jadi index, fetching cukup 1 instruksi mov). Tetapi untuk mesin yang tidak memiliki indexed addressing, akan ada operasi ADD antara ar dan idx, lalu simpan hasilnya ke suatu tempat (register), lalu baru mov. Kadang – kadang register tersebut digunakan untuk operasi ADD sehingga terdapat beberapa mov untuk menyimpan state. Akan tetapi jika menggunakan pointer arithmatic, cukup meng-increase nilai yang sudah ada di register, lalu mov. Tentu saja instruksi di dalam loop juga mempengaruhi efisiensi ini, tetapi untuk mesin yang mendukung operasi increment langsung, iterasi lewat pointer biasanya lebih efisien.

Ini adalah penggunaan pointer sebagai iterator. Nama iterator diambil dari STL, dan iterator di STL adalah abstraksi dari pointer. Yang menakjubkan adalah konsep iterator, yang digeneralisasi dari pointer, adalah konsep yang cukup powerful untuk merepresentasikan semua algoritma yang bekerja untuk linear container ( linear container adalah semua container yang memiliki iterator yang menunjuk pada elemen pertama, memiliki iterator yang menunjuk pada elemen one-past-end, dan semua elemen dapat dicapai dengan melakukan operasi incremen dari iterator penunjuk elemen pertama sebanyak yang diperlukan. Contoh linear container adalah array, vector, linked – list, dan deque. contoh yang bukan linear container adalah graph dan forest.).

—Fixed memory Location
Dalam pemrograman, kita dihadapkan pada beberapa situasi seperti :
- setelah startup, prosesor 80386 akan memulai eksekusi pada alamat ( … lupa).
- Interrupt vector beberapa prosesor ditaruh pada alamat yang ditentukan oleh pembuat prosesor tersebut.
- Video Memory di DOS dimulai pada alamat (… lupa).

Situasi – situasi tersebut hanya mungkin terjadi jika kita memrogram “close to metal” e.g membuat operating system, atau kita memrogram dalam OS yang super primitif seperti DOS. Dalam kasus – kasus ini kita memerlukan pointer dengan alamat di set ke nilai tertentu. Ini adalah penggunaan pointer sebagai abstraksi alamat di hardware. Penggunaan ini adalah penggunaan pointer paling jarang.

— So, What’s a big deal about it ?
Ketiga fungsi pointer di atas memerlukan operasi yang berbeda- beda. Contohnya jika pointer berfungsi sebagai moniker, operasi yang sangat diperlukan adalah fungsi malloc, calloc, free, new, delete, operator ->, operator * dan operator &. sebagai moniker pointer tidak memerlukan konvertability ke integer dan operasi pointer arihmatic (walaupun ada trik mengakses field struct dari pointer dengan meng-cast pointer to struct menjadi char*, tambahkan offsetnya, lalu baca dengan operator * dan di cast ke tipe field tersebut. trik ini sangat berbahaya dan sebaiknya tidak dipakai ).
Jika pointer berfungsi sebagai iterator, operasi pointer arithmatic adalah esensial. Tetapi operasi new dan delete sama sekali tidak di perlukan (kecuali untuk array of pointer). bottom line is: you do not do memory management via iterator.
Sifat konvertibilitas antara integer dan pointer hanya diperlukan jika pointer tersebut dipakai sebagai abstraksi fixed address. Dua fungsi lain tidak memerlukan sifat ini.

— Pointer in OOP
C++ mendukung OOP, akan tetapi pada saat yang sama juga kompatibel dengan C. Hal ini menimbulkan masalah. Akan tetapi sebelum melihat apa masalahnya, ada baiknya kita bahas sedikit tentang Polymorphism.

Polymorphism adalah jawaban untuk pertanyaan: bagaimana cara menulis fungsi atau prosedur yang tidak dibatasi oleh tipe. contohnya adalah fungsi average, fungsi ini menjumlahkan sejumlah elemen dan membaginya dengan banyaknya elemen. hal ini benar untuk banyak tipe termasuk integer, koordinat kartesian, bilangan kompleks, kuartenion, matrix ,dsb walau aturan penjumlahan tipe – tipe tersebut berbeda. Untuk bahasa yang tidak mendukung polymorphism, anda harus menulis fungsi seperti averageInt, averageMatrix, averageComplex, etc.

Dari sifatnya, polymorphism terbagi dua: ad-hoc polymorphism dimana polymorphism hanya bekerja pada tipe yang sudah ada. contoh mekanisme ad-hoc polymorphism adalah function dan operator overloading. Sedangkan true polymorphism atau parametric polymorphism dapat digunakan bahkan untuk tipe yang belum dispesifikasi. Perbedaan lainnya adalah untuk ad-hoc polymorphism biasanya anda harus menulis fungsi untuk semua tipe yang berpartisipasi dalam mekanisme polymorphism, sperti menulis average untuk integer, lalu untuk quartenion, lalu satu lagi untuk complex, dll. Sedangkan untuk parametric polymorphism anda hanya perlu menulis satu fungsi.

Dari binding-time nya, polymorphism dapat dibagi 2: static dan dynamic polymorphism. Static polymorphism menentukan fungsi mana yang akan di panggil (atau mungkin di generate ) pada saat kompilasi. Sedangkan dynamic polymorphism menentukan fungsi yang di panggil pada saat run-time. contoh static polymorphism adalah template, sedangkan contoh dynamic polymorphism adalah virtual function.

static polymorphism dapat dibagi menjadi predicative atau impredicative, tetapi hal ini tidak ada hubungannya dengan diskusi kita.

Untuk dynamic polymorphism, dapat dibagi lagi berdasarkan berapa banyak parameter yang berpengaruh dari penentuan fungsi. Jika hanya parameter pertama yang berpengaruh, hal ini disebut dengan single dispatch. Jika lebih dari satu, hal ini disebut dengan multimethod. multimethod yang dipengaruhi oleh dua parameter mempunyai nama khusus yaitu double dispatch. Harap perhatikan bahwa p->somefunc(a,b) itu secara prinsip sama dengan somefunc(p,a,b) dimana p adalah this parameter (walaupun semua kompiler akan mereject kalau anda mengganti fungsi seperti itu).

Dynamic Polymorphism juga dapat dibagi berdasarkan constraint nya menjadi dua: Subtyping Polymorphism dimana polymorphic type harus merupakan turunan dari satu base class yang merupakan sebuah interface yang menentukan sifat mana yang polymorphic. Yang lainnya adalah DuckTyping yang tidak memerlukan base class yang berfungsi sebagai interface. Dalam DuckTyping sebuah object dapat menerima message apa saja, walau jika object tersebut tak dapat merespond message tersebut objeck yang bersangkutan akan mengeluarkan error seperti DoesNotUnderstand message di SmallTalk. Untuk subtype polymorphism, hal ini tidak mungkin karena sebuah object hanya akan menghandle message yang didefinisikan di base class, dan kompiler akan mereject message lain.

Kembali ke bahasan kita, C++ mendukung Subtyping single dispatch dynamic Polymorphism. Jadi untuk dynamic polymorphism, semua tipe yang ingin digunakan secara polymorphic harus diturunkan dari satu base class. C++ juga mengharuskan semua fungsi yang bisa dipanggil secara polymorphic harus dideklarasikan virtual. Dan pemilihan fungsi yang diperlukan hanya ditentukan oleh satu parameter (this parameter) melalui mekanisme vtable.

So, what’s the big deal ?
Masalahnya adalah untuk semua bahasa yang menggunakan subtype polymorphism, semua object harus bisa di akses melalui base class nya. Jadi kode berikut harus valid:

Parent p = create_child(); // asumsi nya create child menghasilkan
// object child;

Hal ini menimbulkan pertanyaan : Bagaimana caranya membuat kode di atas valid ?
Dalam bahasa pemrograman tradisional, ketika anda mendeklarasikan sebuah variabel, anda menciptakan instance dari sebuah tipe, kecuali jika dideklarasikan khusus. Di C

Sometype somevar;

artinya anda menciptakan sebuah objek somevar bertipe Sometype.

Sometype somevar2 = somevar;

artinya anda mengkopi nilai somevar ke somevar2

somevar2 == somevar; // OK, ini tidak didefinisikan di C untuk User Defined Type,
// but you got the idea

artinya anda membandingkan nilai somevar dengan nilai somevar2. Mari kita sebut ini value semantic, dimana sebuah variabel mengandung isi instance dari tipe tertentu.
Lalu perhatikan kode berikut :

Child child;
Parent parent = child;

See the problem ? Masalahnya adalah anda mencoba mengkopi nilai child ke variabel parent, tapi apa artinya operasi kopi tersebut ? jika berarti mengopi nilai byte by byte, implikasinya adalah ukuran parent dan child harus sama. Akan tetapi hal ini sulit atau tidak mungkin dipenuhi. Bila parent adalah pure interface, parent hampir tidak memiliki data member, tapi child akan memiliki data member untuk mendukung operasi – operasi method-nya.

Bagaimana cara mengatasinya ? salah satu cara yang populer adalah dengan tidak menggunakan value semantic. Di bahasa seperti Java, setiap variable adalah reference ke sebuah instance. Artinya:
1. Ketika anda mendeklarasikan sebuah variabel, anda tidak menginstansiasi sebuah object. object harus di instansiasi secara terpisah, biasanya lewat operator new.
2. Ketika anda mengkopi dua buah variabel, anda tidak mengkopi instance byte by byte, tapi hanya membuat dua reference mengacu pada object yang sama. Jika ingin menghasilkan kopi dari instance, biasanya anda menggunakan method seperti clone.
3. Ketika anda membandingkan dua buah variabel, anda hanya mengetahui apakah dua variabel tersebut merujuk pada objek yang sama atau tidak. jika anda ingin membandingkan nilainya, anda harus menggunakan method seperti equal.
let’s call this reference semantic.

Masalahnya C++ karena berbagai alasan (salah satunya kompatibilitas dengan C) tidak mungkin mengadopsi reference semantic dan harus tetap menggunakan value semantic. Akan tetapi reference semantic sepertinya diperlukan untuk subtype polymorphism. so, what to do ? Ternyata Pointer adalah object yang dapat dipakai untuk mengemulasi reference semantic tanpa harus mengubah bahasa menggunakan reference semantic.
Dengan demikian dynamic polymorphism di C++ harus menggunakan pointer (atau reference, yang sebenarnya adalah pointer dengan sedikit perubahan sifat).

— Bahaya Pointer
1. Bahaya yang mungkin ada dengan pointer sebagai moniker: memory leak, double delete, invalid memory access. Semuanya dapat dihindari dengan ownership analysis yang bagus (pada setiap saat, harus diketahui pihak mana yang bertanggung jawab mendelete sebuah object). Jika hal ini sulit dilakukan, misalnya karena shared ownership, anda dapat menggunakan smart pointer atau garbage collector.
2. Bahaya yang mungkin ada dengan pointer sebagai iterator: array out of bound. Salah satu cara yang efektif menghindari hal ini adalah dengan menggunakan standard algorithm.
3. Bahaya yang mungkin ada dengan pointer sebagai abstraksi fixed memory : Tidak tahu, tetapi ini bukan mainan sembarang programmer.

— Bahasa Pemrograman tanpa pointer ?
1. Semua Bahasa pemrograman Fungsional, terutama yang murni , tidak mengenal pointer atau memerlukan pointer. Akan tetapi bahasa ini menggunakan model komputasi yang jauh berbeda, bukan abstract C machine.

2. Beberapa bahasa pemrograman dengan reference semantik dapat mengklaim mereka tidak memiliki pointer, akan tetapi setiap variabel sebenarnya adalah pointer. Secara fisik mungkin reference tidak memiliki struktur seperti pointer (biasanya merupakan data struktur yang lebih kompleks sehingga lebih friendly terhadap garbage collector) tapi reference tersebut memiliki fungsi yang mirip dengan pointer di C atau C++. Ada yang bilang bahwa reference dalam bahasa – bahasa ini menyebabkan optimasi lebih mudah karena tidak menyebabkan aliasing, tetapi optimasi tersebut juga mungkin dilakukan di C dan C++ ( dengan restrict pointer, sayangnya belum merupakan bagian dari standard C++).




Sambil bermain dengan Facebook Chat saya bertanya-tanya apakah didukung emoticon. Ternyata memang. Tapi ketika saya mencoba> :-) emoticon (a 'setan') dan melihat itu dicetak sebagai teks yang membosankan, aku bertanya-tanya, "apa yang sebenarnya facebook smilies tidak mendukung?"

Jadi dengan bantuan Safari dan beberapa javascript hacking aku hadir untuk anda daftar lengkap emoticon facebook.


smile
:-) :) :] =)
frown
:-( :( :[ =(
tongue
:-P :P :-p :p =P
grin
:-D :D =D
gasp
:-O :O :-o :o
wink
;-) ;)
glasses
8-) 8) B-) B)
sunglasses
8-| 8| B-| B|
grumpy
>:( >:-(
unsure
:/ :-/ :\ :-\
cry
:'(
devil
3:) 3:-)
angel
O:) O:-)
kiss
:-* :*
heart
<3
kiki
^_^
squint
-_-
confused
o.O O.o
upset
>:O >:-O >:o >:-o
pacman
:v
curly lips
:3
robot
:|]
Chris Putnam
:putnam:
Shark
(^^^)
Penguin
<(")

program penghitung luas with C++

MENGHITUNG LUAS BUJUR SANGKAR
#include
#include
#include
main()
{
int S,L;
cout<<"================================================================================"<<<"\t\t\t MENGHITUNG LUAS BUJUR SANGKAR"<<<"================================================================================"<<<"=>Masukan Sisi :";cin>>S;
L = S*S;
cout<<"--------------------------------.=HASIL=.---------------------------------------"<< MENGHITUNG LUAS LINGKARAN

#include
#include
#include
main()
{
const float phi = 3.14;
int jari,L;
cout<<"================================================================================"<<<"\t\t\t MENGHITUNG LUAS LINGKARAN"<<<"================================================================================"<<<"=>Masukan Jari-jari :";cin>>jari;
L = phi*jari*jari;
cout<<"--------------------------------.=HASIL=.---------------------------------------"<< Menghitung Luas Segitiga

#include
#include
#include
main()
{
int A,T,L;
cout<<"================================================================================"<<<"\t\t\t Menghitung Luas Segitiga"<<<"================================================================================"<<<"=>Masukan Alas :";cin>>A;
cout<<"=>Masukan Tinggi :";cin>>T;
L = A*T/2;
cout<<"--------------------------------.=HASIL=.---------------------------------------"<< MENGHITUNG LUAS PERSEGI PANJANG

#include
#include
#include
main()
{
int A,T,L;
cout<<"================================================================================"<<<"\t\t\t MENGHITUNG LUAS PERSEGI PANJANG"<<<"================================================================================"<<<"=>Masukan Alas :";cin>>A;
cout<<"=>Masukan Tinggi :";cin>>T;
L = A*T;
cout<<"--------------------------------.=HASIL=.---------------------------------------"<
cout<
getch();
}

Pembalasan Untuk Nyamuk Jahat

Si Tono yang kelelahan sesampainya di rumah berniat untuk cepat-cepat istirahat Setelah membersihkan diri si Tono langsung bergegas untuk tidur.Beberapa saat kemudian si Tono sudah terlelap. Tapi tiba-tiba datanglah seekor nyamuk yang mondar-mandir di telinga si Tono

NGIIIINNNNGGGG....!!!!!

Awalnya si Tono cuek dan hanya membalikkan posisi tidurnya untuk 5 menit aman....Untuk kedua kalinya nyamuk itu datang mengganggu lagi, tidak menyengat tapi hanya mondar-mandir di depan telinga si Tono

NGIIINNNNGGGGG....!!!!!

Tono coba mengusirnya dengan tangan.... untuk 5 menit aman....Nyamuk itu datang kembali ketiga kalinya, dan si Tono sangat geram lalu Ia bangkit dari tempat tidurnya lalu duduk di kursi kamarnya.

Si Tono memikirkan suatu pembalasan buat nyamuk itu.....!!!! selagi Tono berpikir, nyamuk tadi hinggap di paha si Tono. Dan kali ini nyamuk ini mungkin udah lapar dan haus sehingga di menghisap darah si Tono.

Si Tono terpikir sebuah ide!!!! si Tono tidak memukul atau membunuh nyamuk itu, tapi dibiarkan nyamuk itu makan sampai kenyang.

Setelah kenyang nyamuk ini terkena syndrom yaitu abis makan-kenyang-ngantuk

Si Tono memperhatikan dengan seksama dan disaat nyamuk itu mulai terlelap dengan ditandai kepala nyamuk itu mulai ngangguk-ngangguk gak jelas, si Tono memanfaatkan situasi ini.

si Tono mulai mendekat ke nyamuk itu...Semakin dekat....Tambah dekat....Dan...

NGGGIIIIIINNNNNNNGGGGGG...
.....!!!!

si Tono Berteriak sekeras mungkin di Telinga si Nyamuk!!!!!!!!

lalu berkata,"Rasain lu!!! Emang enak apa lagi tidur trus di teriakin di telinga??"

Sambil Tertawa Puas...."Hahahaha...?@#$!!!????"



Croping Rambut On Photoshop

Ketika Pemangkasan keluar gambar di Photoshop, rambut manusia atau bulu hewan selalu membuktikan merepotkan dan dapat sulit untuk mencapai pandangan yang realistis. Berikut adalah dua teknik saya gunakan pada gambar dengan kedua polos latar belakang, dan mereka dengan latar belakang yang bervariasi nada, masing-masing mencapai hasil akhir cukup baik.

Teknik Satu: Foto dengan Plain Backgrounds

Foto yang terbaik adalah mereka tipe studio profesional gambar yang diambil terhadap latar belakang putih polos. Tembakan ini membuatnya lebih mudah untuk menemukan tepi subjek, tetapi pemangkasan keluar bulu-bulu halus masih dapat sedikit rumit. Dalam contoh ini kita akan menggunakan teknik Saluran umum untuk memangkas keluar wanita cantik ini.

Bukalah gambar Anda di Photoshop. Gambar khusus ini tidak memiliki latar belakang putih murni, tetapi merupakan warna polos dan memiliki kontras yang baik antara subjek dan latar belakang abu-abu.

Kepala ke palet Saluran dan meninjau masing-masing Merah, Hijau dan Biru saluran. Masing-masing akan terdiri dari nada sedikit berbeda, pilih salah satu yang paling kontras antara latar depan dan latar belakang. Drag channel ini ke saluran baru untuk meniru ikon itu.

Dengan hanya saluran baru dipilih, sesuaikan Levels (CMD + L) untuk secara dramatis meningkatkan kontras antara area terang dan gelap. Namun, jangan pergi terlalu jauh, karena Anda akan melihat beberapa pixilation menghebohkan muncul di daerah baik-baik saja.

Karena nada sedikit variasi dari latar belakang, tampak abu-abu di daerah yang lebih gelap. Gunakan alat Dodge mengatur Opacity yang rendah untuk menargetkan highlights dan sikat atas latar belakang ini area yang benar-benar mencerahkan itu.

Beralih ke alat Burn dan target bayangan gelap secara dramatis di daerah-daerah dalam gambar hitam murni.

Gunakan kuas alat untuk menyelesaikan orang kulit hitam dengan mengecat di atas bidang yang tersisa dari bagian dalam gambar.

Terbalik gambar untuk beralih di atas hitam dan daerah putih (CMD + I), dan memberikan cek cepat untuk daerah-daerah liar yang mungkin telah terjawab oleh kuas.

CMD Channel + Klik thumbnail untuk memuat seleksi, kemudian menghidupkan kembali visibilitas saluran asli. Kembali ke palet Layer dan salin seleksi. Paste di layer baru dan menyembunyikan asli untuk melihat memotong gambar terhadap transparansi.

Seleksi telah berhasil keluar bahkan memangkas rambut terbaik untuk memberikan potongan yang realistis. Tempel foto terhadap alternatif latar belakang. Zoom in dan check untuk setiap rumbai berwarna muda di sekitar tepi, terutama jika ditempatkan terhadap latar belakang lebih gelap. Ini dapat dikurangi dengan menggunakan alat Burn set ke Highlights dan lembut mengusap di atas garis besar gambar.

Teknik Dua: Foto dengan Backgrounds Detil

Saluran Teknik ini semua baik dan bagus untuk studio fotografi dengan plain latar belakang, tetapi menjadi sedikit lebih sulit pada gambar standar dengan latar belakang terperinci menghalangi.

Bukalah gambar Anda di Photoshop. Gambar ini mempunyai kontras yang baik antara latar depan dan latar belakang, tetapi daerah-daerah tertentu dari rambut lakukan berbaur dengan nada yang lebih gelap dari latar belakang.

Mulailah dengan pemangkasan luar tepi jelas dengan Pen Tool, tetapi ketika Anda mencapai rambut cukup buat melacak kasar.

Sekitar bagian rambut, hanya bertujuan untuk mencakup daerah-daerah padat rambut yang tidak menyatu dengan latar belakang, jika tidak nada yang lebih ringan akan mengacaukan segalanya nanti.

Tentukan pilihan dengan bulu-bulu 0,2 pixel untuk menghilangkan tepi kasar kemudian menyisipkannya ke layer baru. Mengurangi transparansi gambar sehingga garis rambut asli hanya dapat dilihat.

Di sinilah dimulai yang menyenangkan! Gunakan Smudge Tool untuk menggambar dalam bidang rambut baru, dengan menggunakan kerangka asli sebagai template. Mulailah dengan sebuah kuas 4px untuk menyempurnakan dasar tebal rambut dan menyamarkan garis bergerigi dari jalan. Sebuah Wacom Graphics Tablet benar-benar sangat berguna di sini untuk mempercepat proses dan membantu menambah baris ketebalan bervariasi.

Rambut baru akan segera menyempurnakan gambar kembali ke tampilan aslinya. Tidak terlihat terlalu buruk pada tahap ini, tetapi mengulangi proses ini dengan kuas tipis akan menarik rambut dalam individu tersebut.

Gunakan sikat 2px dengan Smudge Tool untuk menarik rambut tipis tersesat dalam berbagai arah untuk menambahkan realisme ke foto tersebut.

Foto kemudian dapat ditempatkan pada latar belakang apapun dengan mudah, dan menampilkan cut-out segar tanpa renda atau kehilangan detail halus.



Hack Billing Warnet

bahan2 harus disiapkan:

1. Program ZHider. download diSini
2. Muka bego
3. Mental yang kuat

Langkah-langkahnya:

01. Masuk warnet dan pasang muka bego biar ga dicurigai operator
02. Pastikan selain box/bilik yang kita tempati masih ada box lain yang kosong. Biar ga dicurigai juga sih.
03. Usahakan cari tempat yang jauh dari op, supaya ga ketahuan box kamu kosong apa nggak.
04. Nyalakan kompi dihadapan anda bila masih dalam keadaan mati.
05. Saat masuk login screen, login aja seperti biasa.
06. Jalankan ZHider yang sudah disiapkan di disket/flashdisk. Kalo belom ada, cari aja pake google.
07. Setelah ZHider dijalankan langsung aja logout.
08. Naah, di login screen ini kita mulai aksi mendebarkan kita. Tekan Ctrl+Alt+Z.. Jreeeng, login screen telah menghilang !!!
09. Browsinglah sepuasnya, tapi tetap pastikan ada box lain yang kosong. Kan aneh kalau ada yang masuk warnet, dia lihat udah penuh. Padahal di billing server kelihatan masih ada yang belum login.
10. Kalo sudah puass tekan Ctrl+Alt+X untuk memunculkan kembali login screen yang menghilang entah kemana
11. Login seperti biasa dan browsing beberapa menit sampai penunjuk tarif sampai ke angka yang kita kehendaki. Ini supaya ga dicurigai.
12. Logout. SIapkan muka bego, lalu bayar tarif.

Cara ini lebih mudah dilalukan bila si operator ga terlalu kenal sama kamu. Apalagi bila si op sering keluyuran.

Ini beberapa hotkey ZHider yang bisa digunakan, untuk hotkey lainnya silakan baca file readme yang disertakan bersama zhider

CTRL+ALT+Z Menyembunyikan jendela aktif

CTRL+ALT+X Menampilkan kembali semua jendela yang disembunyikan

CTRL+ALT+L Menampilkan dialog zhider

CTRL+ALT+M Menampilkan kembali semua jendela yang disembunyikan, dan juga menutup zhider.

Cara 2:

Nyalain kompi .Setelah loading windows tekan tahan Ctrl+Alt+Del sebelum keluar jendela billing(harus cepet coz jendela billing muncul hanya 2 detik setelah loading windows). Setelah kluar task manager klik [ End Task ] pada aplikasi [ client 008 ].

Cara 3:

Menggunakan software Billing Hack(bisa download di www.vb-bego.com). Software ini bahkan bisa mereset time billing.
Bisa juga sebelum nyalain kompi cabut kabel LAN di belakang CPU. Biar gak terlalu mencurigakan, cabut kabelnya sambil pura-pura pasang USB ato Flash Disk (sambil nyelam mancing ikan gitu deh pepatahnya).Trus nyalain kompi tunggu sampai jendela billing keluar. Klik Admin masukkan password default008. Trus di Exit Client&Password masukkan juga password 008. Abis tu, setelah muncul kotak yang terakhir cari tanda ****** yang letaknya paling bawah kiri, delet tanda tsb dan terakhir klik Exit Client yang terletak di sebelah kanan tanda yang telah kita hapus tadi. Jadi deh….

Kalo semua cara di atas ga bisa dilakuin, hentikanlah usahamu. Sesungguhnya perbuatan jahatmu tidak diridhoi Tuhan Kalo ketahuan langsung pertebal [muka bego-mu]. Misalnya bilang… Eh, kok jadi gini ya? Kemaren ga gini kok. Ato kata-kata lain, tergantung kreatifitas kamu.


Mengoptimalkan Kinerja Windows

A. Bersihkan File RegistryRegistry Windows yang telah menumpuk dan terdapat register-register yang rusak dapat dibersihkan dengan bantuan aplikasi seperti Tweak XP atau Tune Up Utilities. Kebetulan saya menggunakan Software Tune Up Utilities untuk menjaga kebersihan registry dari register-register yang rusak. Software ini dapat Anda search di om gw…om Google,,,wkwkwkwk. Aplikasi ini tidak hanya dapat membersihkan register-register yang error, tapi juga dapat melakukan defragment hardisk.B. Matikan Background Service dan Start Up program yang tidak diperlukanAnda dapat mematikan service-service di background dan startup program yang tidak diperlukan. Langkah ini dapat meningkatkan waktu loading dan startup Windows. Caranya, klik tombol start menu dan ketikkan “msconfig” (untuk windows XP, startmenu, pilih RUN, dan ketik “msconfig”), lalu Enter.Pada jendela MsConfig yang terbuka, pilih TAB Services dan centang “Hide all Microsoft Service“. Terdapat beberapa service dari software-software yang terinstal di komputer, service ini dapat kita non-aktifkan dengan menghilangkan tanda centang pada masing-masing service. Perlu hati-hati juga dalam mematikan service ini, karena service seperti Antivirus yang kita matikan dapat menonaktifkan antivirus yang kita miliki. Saran yang saya berikan untuk menonaktifkan service yang ada dan tidak mengganggu sistem misalnya, Adobe LM service, Office Search Engine, Cyberlink, Winamp Agent, ACDSee Device Detector, dan service aplikasi yang tidak begitu penting bagi jalannya Windows.Silahkan tekan tombol APPLY setelah Anda mematikan service yang tidak diperlukan. Kemudian menuju ke tab selanjutnya yaitu tab Startup. Pada bagian ini digunakan untuk memilih program-program yang akan berjalan ketika memasuki Windows. Matikan startup program-program yang tidak diperlukan. Contohnya dapat Anda lihat pada gambar. Proses ini dapat mempercepat waktu startup ketika memasuki WindowsSetelah selesai tekan tombol OK, maka Windows akan meminta restart karena file system telah dikonfigurasi ulang. Silahkan restart komputer Anda.C. Hapus File Perfetch pada Folder WindowsFile perfetch ini berisi data-data program yang sering dipakai di Windows, dan akan di load pada saat Windows melakukan booting. Penghapusan file-file yang ada pada folder Perfetch ini tidak akan merusak Windows, dan dapat membuat proses booting lebih cepat. Buka Explorer kemudian masuk ke dalam folder Windows di drive C:, pilih folder perfetch dan hapus semua file yang ada didalam folder tersebut. Untuk Windows Vista jangan menghapus folder ReadyBoost yang ada di dalam folder perfetch, karena folder itu nanti bisa digunakan untuk melakukan readybooster melalui flashdisk. Lihat gambarD. Hapus Aplikasi yang Tidak DiperlukanKadangkala karena seringnya kita menginstal aplikasi-aplikasi di komputer, aplikasi tersebut ternyata memang tidak begitu kita perlukan. Sebaiknya hapus aplikasi-aplikasi yang tidak terpakai agar beban komputer semakin berkurang.E. Perhatikan Free Space Harddisk.Hal yang penting dan sering tidak diperhatikan oleh pengguna komputer adalah kapasitas ruang kosong di harddisk atau di tiap partisi melebihi batas minimalnya. Bisa Anda bayangkan jika didalam suatu ruangan, dan ruangan tersebut penuh sesak terisi oleh barang-barang Anda, dan ketika Anda mencari suatu barang, tentu betapa sulitnya mencari barang tersebut. Lain halnya jika ruangan tersebut lebih lega, maka dengan mudah Anda dapat menemukan barang yang Anda cari, ditambah lagi jika meletakkan barang-barang tersebut secara rapih dan teratur (defrag), maka akan lebih mudah lagi mencarinya.Minimal ruang kosong (free space) di harddisk Anda adalah 10% dari total kapasitas harddisk, atau untuk tiap partisi 10% dari total kapasitas partisi tersebut. Contoh, jika drive C: Anda memiliki kapasitas 40GB, maka ruang kosong minimal yang ada di harddisk adalah sebesar 4GB. Pada windows Vista, ketika Anda buka explorer, dapat dilihat status dari masing-masing partisi, jika berwarna merah maka ruang kosong sudah melewati angka minimal. Hapus file-file yang sudah tidak diperlukan lagi, misalnya file-file film atau lagu yang sudah usang.Anda juga bisa memanfaatkan tools Disk Cleanup bawaan Windows. Buka explorer, klik kanan drive C: dan pilih properties, pilih Disk Cleanup. Pada tools ini Anda dapat menghapus file-file yang sudah tidak diperlukan lagi di Windows, hasilnya pun lumayan menambah ruang kosong di harddisk Anda. Beri centang semua file yang ingin Anda bersihkan. Anda juga dapat menghapus file System Restore yang terbentuk secara otomatis oleh windows, file System Restore ini bermanfaat untuk mengembalikan fungsi dan file system Windows yang rusak. jadi jika suatu saat Windows Anda mengalami gangguan atau kerusakan, dapat memanfaatkan tools ini untuk memperbaiki Windows yang rusak tersebut. Namun adakalanya file ini tidak diperlukan jika Anda merasa sudah yakin bahwa Windows dalam keadaan sehat. Ukuran filenya lumayan besar, bisa sampai 5 GB untuk file System Recovery saja.F. Defrag HarddiskSetelah Anda melakukan semua proses diatas, barulah ketahap yang terakhir yaitu Disk Defrag. Proses defrag harddisk dilakukan untuk merapikan file-file yang ada pada harddisk Anda. Mulailah dengan mendefrag drive C tempat terinstallnya Windows. Tool yang dipakai cukup dengan tool defragmenter bawaan Windows. Caranya klik kanan pada drive C, pilih properties dan pilih tab Tools, kemudian pilih defragment Now (lihat gambar). Untuk Windows XP dapat melihat pada proses defragment harddisk, jika cluster yang berwarna merah sangat banyak, maka hasil defragment akan lebih optimal. Untuk Windows Vista dinyatakan dengan bilangan persen, semakin tinggi prosentasenya maka semakin perlu dilakukan defragment harddisk.Lamanya proses defrag tergantung dari kapasitas partisi harddisk yang Anda defrag, juga banyaknya file yang ada. Untuk harddisk dengan kapasitas 20-40 GB membutuhkan waktu sekitar 1 jam. Untuk hasil yang lebih baik lagi, Anda bisa menggunakan aplikasi defragment pihak ketiga seperti Diskeeper Professional atau aplikasi lainnya. Sebaiknya lakukan proses defrag setiap ada perubahan besar di partisi harddisk Anda, untuk rutinitas bisa mendefrag harddisk setiap satu bulan sekali.Seperti yang telah dijelaskan pada point sebelumnya, fungsi defrag harddisk ini untuk merapikan file di harddisk agar waktu akses jarum harddisk lebih cepat lagi…---// CLUE Bagi komputer atau notebook yang telah terjangkit penyakit alias sudah kena virus, sebaiknya hilangkan dulu virus-virus yang ada di komputer Anda. Baru kemudian ikut langkah-langkah yang telah saya berikan, virus dapat menyebabkan banyak file-file registry akan rusak, dan ini perlu dibersihkan dan diperbaiki.Good Luck...!!!
 

W3C Validations

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi dapibus dolor sit amet metus suscipit iaculis. Quisque at nulla eu elit adipiscing tempor.

Usage Policies