Senin, 31 Desember 2012

Cara Verifikasi Paypal dengan VCC

verifikasi paypal
Postingan ini berkaitan tentang pengalaman saya untuk verifikasi paypal dengan VCC, yang mana dulu sekali saya juga pernah membuat tutorial bagaimana mendaftar paypal namun disitu belum sempat saya kasih info untuk verifikasi paypalnya sebab dulu masih bingung. Sekarang saya menggunakan paypal sebagai media transaksi online yang bermata uang dollar amerika. Sebelumnya bagi yang belum paham apa itu VCC, saya akan jelaskan.

Pengertian VCC.
Apa itu VCC? VCC adalah singkatan dari Virtual Credit Card yang berfungsi untuk memverifikasi akun Paypal yang masih unverified (belum terverifikasi) dan berbentuk virtual atau tidak mempunyai bentuk fisik seperti halnya kartu kredit sesungguhnya. VCC hanya memiliki data berupa angka beberapa digit sama seperti kartu kredit yang nantinya bisa diinputkan ke akun Paypal.

Kenapa harus menggunakan VCC untuk verifikasi Paypal?
Seperti yang kita ketahui sebelumnya, bahwa dulu untuk verifikasi paypal cukup menggunakan data bank lokal yang dimiliki namun sekarang cara tersebut tidak bisa lagi, lalu pihak paypal mewajibkan untuk verifikasi paypal dengan kartu kredit. Anda juga tahu bahwa tidak semua orang bisa memiliki kartu kredit karena syarat-syaratnya yang merepotkan (misal tagihan, dll). Kemudian jika anda masih memakai akun paypal yang unverified, maka anda tidak bisa menarik dana ke rekening bank milik anda serta anda akan dibatasi sebesar $100 saja jika ingin mengirim balance dollar paypal ke orang lain, setelah itu paypal akan menagih anda untuk verifikasi akun paypal (saya dulu dibatas $500 tapi sekarang hanya $100). Maka, solusinya adalah menggunakan VCC.

Keuntungan menggunakan VCC
  • Anda dapat mempunyai akun paypal yang sudah verified tanpa harus memiliki kartu kredit yang asli.
  • Harga VCC yang relatif terjangkau, biasanya mulai dari Rp. 75ribu sudah dapat vcc selama setahun.
  • Proses verifikasi paypal dengan vcc bisa lebih cepat (biasanya biaya vcc lebih mahal sedikit).
  • Anda dapat menggunakan vcc untuk nama dan alamat yang sesuai dengan akun paypal.
Manfaat memiliki akun paypal yang berstatus “verified”
Anda dapat mengirimkan uang dalam jumlah yang tak terbatas jika status anda adalah terverifikasi, Namun transfer dana anda akan terbatas jika masih berstatus belum terverifikasi (unverified). Anda dapat melakukan withdraw paypal jika sudah terverifikasi. Dengan kata lain, anda tidak dapat melakukan withdraw jika akun anda masih berstatus “unverified”.

Dimana tempat membeli VCC?
Kalau saya kemarin beli vcc di fjb kaskus, seharga 75ribu. Atau anda bisa searching dulu di google mengenai jasa verifikasi akun paypal.

Bagaimana cara verifikasi paypal dengan VCC?
Berikut cara singkat untuk memverifikasi akun paypal anda. Bagi yang belum mendaftar paypal, silahkan baca panduan mendaftar paypal disini, gratis kok.

1. Login ke akun paypal dengan alamat https://www.paypal.com/id/
kemudian klik link seperti gambar dibawah ini.
Cara Verifikasi Paypal dengan VCC

2. Setelah itu anda akan diminta memasukkan nomor kartu kredit, tapi disini yang dipakai adalah vcc, jadi anda tinggal memasukkan sesuai kolom di halaman paypal. data-data yang dibutuhkan biasanya akan dikirimkan oleh penjual jasa vcc, seperti jenis kartu (card type) bisa visa atau mastercard, nomor kartu (card number), tanggal kadaluwarsa (expiry date), dan 3 digit nomor verifikasi kartu. Data VCC ini hanya bersifat sementara yang berlaku dalam beberapa hari saja, bila sudah menerima data vcc, segera saja menggunakannya. Kemudian untuk alamat penagih (billing address), sesuaikan dengan ktp anda. klik selanjutnya.
Cara Verifikasi Paypal dengan VCC


3. Jika data yang anda submit sukses, maka akan muncul halaman notifikasi "4-angka kode anda telah diminta". Itu artinya kode vcc anda telah diterima dan anda harus menunggu selama 2-3 hari kerja dahulu untuk memperoleh 4 digit kode yang akan digunakan untuk tahap akhir verifikasi akun paypal anda. Anda bisa menanyakan langsung kepada penjual vcc tersebut.
Cara Verifikasi Paypal dengan VCC

4. Apabila anda sudah menerima 4 digit kode tersebut dari penjual vcc, anda bisa langsung segera login kembali akun paypal, dan klik link dapatkan status Diverifikasi seperti langkah nomor 1. Maka akan muncul pop-up seperti berikut, masukkan 4digit kode tersebut. dan klik Konfirmasi Kartu.
Cara Verifikasi Paypal dengan VCC

5. Dan akhirnya, selamat akun paypal anda sudah terverifikasi sekarang. notifikasi akan muncul seperti gambar dibawah ini.
Cara Verifikasi Paypal dengan VCC

6. Setelah itu, pihak paypal akan mengembalikan tagihan untuk verifikasi paypal dengan vcc sekitar kurang dari $2 (biasanya dalam euro, lalu di konversi). Status paypal anda kini sudah terverifikasi, link status bisa anda klik dan akan muncul seperti ini.
Cara Verifikasi Paypal dengan VCC

Sampai langkah ini, sudah selesai, anda tidak akan di limit atau dibatas lagi kalau ingin melakukan transaksi, baik itu kirim dana atau tarik dana ke rekening bank. Namun, ada beberapa hal yang harus anda perhatikan jika sudah menjadi verified. berikut tips supaya akun anda tidak kena limit dari paypal. sebab jika sampai kena limit, anda bakal susah untuk menghilangkan limit tersebut.

Tips menghindari Limited Access setelah berhasil verified:
1. Setelah paypal anda verified, Usahakan 7 hari untuk tidak bertransaksi terlebih dulu.
3. Sementara terima pembayaran jangan langsung dari banyak client, karena akun paypal anda masih baru.
4. Transaksi kesesama paypal yang verifed saja.
5. Jangan transaksi di atas $10 karena akun masih baru.
7. Untuk transaksi besar tunggu sampai paypalnya udah 2-4 minggu.
8. Bila memungkinkan, upgrade paypal ke Premier (jika sebelumnya personal)

Sekian tips dan tutorial dari saya yang dalam postingan ini menjelang tahun baru 2013, semoga bermanfaat dan sampai jumpa di tahun depan :))


Sabtu, 22 Desember 2012

Sponsored Video: [GALAXY Note 10.1 Premium Suite Upgrade] A Note to Santa

GALAXY Note 10.1
Kembali lagi saya akan membahas mengenai tablet canggih yang merupakan produk terbaru dari samsung, yakni Samsung Galaxy Note 10.1 yang sebelumnya juga pernah saya posting dengan judul Samsung Galaxy Note 10.1 Telah Hadir dan masih banyak lagi postingan yang lain, berkaitan tentang review samsung. Pada postingan ini, terdapat video yang menayangkan tentang persiapan menjelang natal karena sudah memasuki musim liburan, tanggal 25 Desember nanti, video tersebut memperlihatkan ada seorang anak yang bernama lily dan ayahnya yang akan mengirimkan pesan berupa permintaan untuk hadiah sebuah sepeda yang sudah di gambar sesuai keinginan si anak dengan bantuan ayahnya, kemudian gambar sepeda tersebut dimasukkan ke dalam pesan beserta kata-kata untuk sang santa, kemudian di kirimkan lewat email. Suatu tempat di kutub utara sana, sang santa telah menerima pesan dari lily, lalu segera mereka dan orang-orang sana mencari info tentang cara mendesain sepeda, setelah jadi, keesokan pagi hari natal, sepeda sudah diterima oleh lily dan dia senang sekali karena telah diberi hadiah oleh santa, sang ayah pun mempotret ekspresi si anak dengan galaxy note, kemudian mengedit foto tersebut dan memberikan tulisan ucapan terima kasih kepada santa. Dan semua itu berkat kecanggihan Samsung Galaxy Note 10.1.

Sekarang akan membahas mengenai tablet samsung galaxy note 10.1 dengan motto premium suite upgrade sebab galaxy note 10.1 ini sebenarnya memiliki spesifikasi dengan versi Android 4.0 Ice Cream Sandwich sekarang sudah bisa diupgrade ke versi android terbaru, yaitu Android 4.1 Jelly Bean dengan kelebihan fast, fluid, dan smooth. Sedangkan untuk fitur lain dari samsung galaxy note 10.1 seperti multi window untuk membuka banyak aplikasi secara bersamaan dan bisa beralih ke window satu ke window lain dengan mudah serta bisa menentukan sendiri ukuran dari window tersebut, lalu ada Air view untuk membuka dengan cepat konten seperti foto video tanpa harus membukanya, lalu ada Quick command untuk membuka suatu aplikasi dengan mudah via S-Pen dengan mengetikkan nama, semisal ingin mengirim email hanya dengan menulis nama si penerima saja, sekejap email sudah terbuka, lalu ada fitur easy clip untuk mengcrop foto atau gambar yang diinginkan dan mengirimkan ke aplikasi.
Untuk info lebih jelasnya, anda bisa membuka halaman website resmi samsung disini.

Post tersponsor.


Senin, 10 Desember 2012

Pendaftaran versi gratis Google Apps Resmi Ditutup

Google Apps
Beberapa hari yang lalu, saya menerima email dari pihak Google tepatnya Google Apps karena saya menggunakan email dengan domain blog nova13.com ini, saya pernah membahas di postingan yang berjudul cara membuat email domain sendiri dengan Google Apps, dan isi dari email tersebut adalah sebagai berikut:







Salam dari Google,

Berikut ini beberapa berita penting tentang Google Apps—namun jangan khawatir, Anda tidak perlu melakukan apa-apa. Kami hanya ingin Anda mengetahui bahwa kami melakukan perubahan pada paket yang kami tawarkan.

Mulai sekarang, kami tidak lagi menerima pendaftaran baru untuk versi gratis Google Apps (versi yang saat ini Anda gunakan). Karena Anda sudah menjadi pelanggan, perubahan ini tidak berpengaruh terhadap layanan Anda, dan Anda dapat terus menggunakan Google Apps secara gratis.

Jika Anda ingin meningkatkan versi ke Google Apps for Business, Anda akan menikmati manfaat seperti dukungan pelanggan 7 x 24 jam, kotak masuk 25 GB, kontrol bisnis, jaminan waktu operasional 99,9%, pengguna tak terbatas, dan banyak lagi, hanya dengan per pengguna, per bulan.

Anda dapat mempelajari lebih lanjut tentang perubahan ini di Pusat Bantuan kami atau di Enterprise Blog.

Terima kasih telah menggunakan Google Apps.

Clay Bavor
Direktur, Google Apps


Jadi intinya adalah, bahwa pihak Google Apps telah menutup untuk pendaftaran baru versi gratis dan bila ingin menggunakan layanan Google Apss diharuskan membayar $5/user/bulan atau $50/user/tahun dan bila masih ingin mencoba maka disediakan masa uji coba atau trial selama 30 hari saja. Sedangkan untuk pelanggan yang sudah menggunakan Google Apps sebelumnya, maka akan terus menggunakan Google Apps secara gratis. Bagaimana? Apakah anda yang berencana menggunakan ini namun sudah terlambat, bisa jadi ini berita buruk bagi anda. Namun, bagi anda yang senang menggunakan yang gratis-gratis, masih ada alternatif lain yaitu menggunakan Windows Live, saya juga sudah pernah mempostingnya cara membuat email domain dengan Windows Live.



Minggu, 02 Desember 2012

Cara Mengatasi Modem tidak terdeteksi di Windows 7

modem 3g
Saya akan memberikan tips ringan tentang modem lagi, jika sebelumnya mengenai cara konek modem otomatis di windows 7, kali ini tentang modem cdma atau gsm yang tidak terdeteksi di windows 7. kasusnya adalah beberapa hari lalu, saya mencoba mengkoneksikan modem ke laptop melalui port usb, setelah itu install aplikasi bawaan modem atau driver untuk koneksi internet, setelah menginstall, windows akan mengenali driver dari modem tersebut, setelah selesai, ada yang tidak seperti biasanya, notifikasi installing driver di pojok kanan bawah apabila diklik lalu muncul window baru akan memperlihatkan kalau ada yang belum terinstall secara otomatis, ada tanda silang warna merah, jika tanda centang warna hijau berarti sukses terinstall. Masalahnya pada aplikasi modem tidak kunjung mendeteksi keberadaan modem padahal sudah di coba semua port usb yang ada. hasilnya sama saja. saya pun mencoba modem gsm & cdma juga sama. Namun setelah mencari tau sana sini di google, akhirnya ketemu juga caranya. yaitu sebagai berikut:
  1. Install ulang driver aplikasi bawaan modem anda. bisa lewat all program atau control panel.
  2. Cabut modem anda dan restart windows.
  3. Setelah tampilan bios, segera tekan F8 untuk masuk ke Safe mode. (ada beberapa pilihan).
  4. Jika sudah masuk ke Safe mode, tancapkan modem dan install lagi driver aplikasi modem milik anda.
  5. Bila sudah menginstall, cabut modem lalu restart dan kembali lagi ke windows. 
  6. Coba colokkan lagi modem, dan lihat apakah modem bisa terdeteksi atau belum.
Berikut screenshotnya:
Cara Mengatasi Modem tidak terdeteksi di Windows 7
ketika modem belum terdeteksi
Cara Mengatasi Modem tidak terdeteksi di Windows 7
modem sudah terdeteksi

Cara Mengatasi Modem tidak terdeteksi di Windows 7
konek ke internet

Demikian tips trik dari saya tentang Cara Mengatasi Modem tidak terdeteksi di Windows 7, semoga bermanfaat bagi anda. bila ada yang ditanyakan, silakan berkomentar dibawah.


Jumat, 30 November 2012

Sponsored Video: [GALAXY Note II] More Smart Features

Samsung Galaxy Note II

Saya akan membahas kelanjutan dengan dari postingan saya yang sebelumnya tentang Samsung Galaxy Note II, dan sekarang akan membahas mengenai fitur canggih dan cerdas dari Samsung Galaxy Note II ini. Galaxy Note 2 merupakan gadget terbaru dari samsung yang diklaim sudah sangat canggih serta harga yang tidak bisa dibilang murah sebab sudah dibekali fitur-fitur yang sangat canggih, misal perpaduan layar dari smartphone dan tablet dengan ukuran 5.5 inch dan stylus serta performa yang tinggi, lalu kemampuan multitasking yang bagus yang didukung prosesor dan memory yang sudah menyamai spek laptop.

Fitur cerdas dari Samsung Galaxy Note 2 ini yaitu adanya fungsi Quick Command dengan menggunakan S-Pen, cara menggunakannya adalah dengan menekan tombol S-Pen dan menggerakkan suatu shortcut pada layar samsung galaxy note 2, semisal ingin membuka email, melakukan searching cepat, atau mengakses email, dengan sangat mudah daripada membuka menu aplikasi yang lebih lama aksesnya. Anda juga bisa menentukan sendiri command atau perintah yang anda kehendaki. Selain fitur S-Pen, samsung galaxy note II mengembangkan fitur S-Voice, fungsi ini digunakan bila ingin melakukan pencarian dengan mengucapkan kata-kata dengan begitu secara otomatis galaxy note II akan searching, misal ingin mencari nomor kontak teman anda.

Selanjutnya, fitur lain dari Samsung Galaxy Note II adalah Page Buddy, Social Tag 2.0 dan Blocking Mode. Dengan Page Buddy anda dapat menyetting device anda pada home screen tergantung dari situasi atau keinginan anda, bisa menggunakan S-Pen anda, atau ketika anda menggukan headset secara otomatis akan muncul widget music player. Lalu, social Tag 2.0 akan otomatis mendeteksi wajah dan memberikan foto pada kontak yang anda simpan, misal anda memakai akun facebook, dan ada nama teman anda yang match dan cocok, nomor kontak anda akan ada foto profil teman anda. terakhir adalah blocking mode, fitur ini untuk dengan mudah memblok call panggilan telpon, alarm, dan notifikasi, misal digunakan bila cukup mengganggu. demikian yang bisa saya jelaskan, anda bisa melihat dengan jelas dengan menonton video dibawah ini, atau mengakses website resmi Samsung, Twitter, dan Facebook.

 
Sponsored article.


Kamis, 29 November 2012

Cara membuat Kiriman Disematkan pada Group Facebook

Group Facebook
Update blog lagi mengenai Facebook, sebenarnya agak lama dan saya baru mengetahui caranya. Yaitu bagaimana cara menyematkan kiriman di Group Facebook, cara ini lebih seperti sticky post pada forum-forum, ketika membuka category atau subcategory forum, maka sticky akan terus tampil diposisi atas sedangkan postingan biasa yang lain akan tenggelam jika ada posting yang terbaru atau posting yang lama diberikan komentar baru. Begitu juga di Group Facebook, fitur ini dinamakan kiriman Disematkan, kira-kira begitu kalau diterjemahkan dalam bahasa Indonesia, sehingga ketika member atau orang lain yang membuka wall group, maka kiriman yang telah disematkan akan selalu ditampilkan diatas, bisa berupa status atau gambar atau dokumen yang telah dibuat. Tidak cuma status dari admin Group saja yang bisa disematkan, kiriman dari member pun bisa disematkan oleh admin apabila dinilai penting untuk dibaca member group lain.

Lalu, bagaimana caranya? Untuk bisa menyematkan kiriman pada group facebook, anda harus menjadi pengurus atau admin dari group tersebut, bila anda hanya member maka tidak akan bisa menyematkan kiriman di group facebook. Keuntungan lain adalah admin juga bisa mengedit pengaturan group tersebut. Dan berikut cara untuk menyematkan kiriman di wall group facebook:

1. Login terlebih dahulu ke akun facebook anda.
2. Buat status/postingan/kiriman/dokumen pada group tersebut lalu klik kirim.
3. Klik opsi gambar tanda panah bawah pada pojok kanan atas status anda yang telah anda buat, seperti gambar dibawah ini.

4. Pilih Sematkan Kiriman, dengan begitu kiriman anda akan dilihat terus oleh member lain.
kiriman disematkan group facebook

5. Sedangkan untuk melepaskan/menghapus kiriman yang disematkan, klik opsi pojok kanan atas, pilih Lepas Sematan Kiriman.

Dah gitu aja, demikian postingan berjudul Cara membuat Kiriman Disematkan pada Group Facebook, mungkin bisa berguna untuk anda, selamat mencoba.


Sabtu, 24 November 2012

Sponsored Video: Review Samsung Galaxy Note II

Samsung Galaxy Note II
Ditengah kesibukan saya, akan memberikan info sekaligus review singkat mengenai produk Samsung yang terbaru lagi, yaitu Samsung Galaxy Note II. Jika pada postingan sebelumnya saya memposting mengenai Samsung Galaxy Note 10.1 yang berupa tablet, Galaxy Note ini adalah penerus dari Samsung Galaxy Note keluaran yang pertama. Sekilas bentuknya agak mirip dengan Samsung Galaxy SIII, namun dengan nama Note, tentu produk samsung ini menyertakan sebuah pen sentuh dengan nama S-Pen yang sudah menjadi ciri khas varian dari Galaxy Note.

Samsung Galaxy Note II sebenarnya sudah dirilis ke publik pada bulan Oktober kemarin, dan kini sudah tersedia untuk pasaran di Indonesia. Samsung Galaxy Note II mengusung fitur serta yang canggih dengan multitasking dan adanya S-Pen sebagai andalannya. Dari Segi layar, Samsung Galaxy Note II berukuran 5.5 Inc yang cukup luas untuk ukuran smartphone, akan lebih enak dilihat karena display yang lapang. Prosesor menggunakan Quad Core serta RAM yang mencapai 2GB sudah sangat cepat bila menjalankan banyak aplikasi secara bersamaan. Kamera Samsung Galaxy Note II sudah dibekali sebesar 8MP dengan autofocus & LED flash dan kamera depan 1.9MP.

Sedangkan untuk harga Samsung Galaxy Note II yang ada dipasaran saat ini sekitar 7juta an. Berikut Spesifikasi lengkapnya:

Spesifikasi Samsung Galaxy Note II

General
2G Network: GSM 850 / 900 / 1800 / 1900
3G Network: HSDPA 850 / 900 / 1900 / 2100
4G Network: LTE 700 MHz Class 17 / 2100 - N7105

Body
Dimensions: 151.1 x 80.5 x 9.4 mm
Weight: 183 g
- Touch-sensitive controls
- S Pen stylus

Display
Type: Super AMOLED capacitive touchscreen, 16M colors
Size: 720 x 1280 pixels, 5.5 inches (~267 ppi pixel density)
Multitouch: Yes
Protection: Corning Gorilla Glass 2
- TouchWiz UI

Sound     
Alert types: Vibration; MP3, WAV ringtones
Loudspeaker: Yes
3.5mm jack: Yes

Memory     
Card slot: microSD, up to 64 GB
Internal: 16/32/64 GB storage, 2 GB RAM

Data     
GPRS: Yes
EDGE: Yes
Speed: HSDPA, 21 Mbps; HSUPA, 5.76 Mbps; LTE, Cat3, 50 Mbps UL, 100 Mbps DL
WLAN: Wi-Fi 802.11 a/b/g/n, dual-band, DLNA, Wi-Fi Direct, Wi-Fi hotspot
Bluetooth: Yes, v4.0 with A2DP, LE, EDR
NFC: Yes
USB: Yes, microUSB (MHL) v2.0, USB Host support

Camera     
Primary: 8 MP, 3264x2448 pixels, autofocus, LED flash, check quality
Features: Geo-tagging, touch focus, face and smile detection, image stabilization
Video: Yes, 1080p@30fps, check quality
Secondary: Yes, 1.9 MP

Features     
OS: Android OS, v4.1.1 (Jelly Bean)
Chipset: Exynos 4412 Quad
CPU: Quad-core 1.6 GHz Cortex-A9
GPU: Mali-400MP
Sensors: Accelerometer, gyro, proximity, compass, barometer
Messaging: SMS(threaded view), MMS, Email, Push Mail, IM, RSS
Browser: HTML5
Radio: Stereo FM radio with RDS
GPS: Yes, with A-GPS support and GLONASS
Java: Yes, via Java MIDP emulator
Colors: Titanium Gray, Marble White
- MicroSIM card support only
- S-Voice natural language commands and dictation
- Smart Stay and Smart Rotate eye tracking
- SNS integration
- Active noise cancellation with dedicated mic
- Dropbox (50 GB storage)
- TV-out (via MHL A/V link)
- MP4/DivX/XviD/WMV/H.264/H.263 player
- MP3/WAV/eAAC+/AC3/FLAC player
- Organizer
- Image/video editor
- Document editor (Word, Excel, PowerPoint, PDF)
- Google Search, Maps, Gmail,YouTube, Calendar, Google Talk, Picasa integration
- Voice memo/dial/commands
- Predictive text input (Swype)

Battery           
Type: Standard battery, Li-Ion 3100 mAh
Stand-by: Up to 980 h (2G) / Up to 890 h (3G)
Talk time: Up to 35 h (2G) / Up to 16 h (3G)
(sumber: karodalnet)

Untuk info lebih jelasnya, anda bisa buka Website resmi Samsung, Facebook, dan Twitter.
Demikian penjelasan saya tentang Samsung Galaxy Note II, semoga bermanfaat.

Sponsored article.


Selasa, 20 November 2012

Aplikasi Chat Java dengan Kriptografi CaesarCipher

Java File
Kembali akan saya ulas mengenai Aplikasi Chatting berbasis pemrograman Java, seperti pada postingan sebelumnya yang juga sama yaitu tentang Program chatting Java server multi client, source code dan perintah menjalankan program masih sama, namun kali ini ada sedikit ada penambahan fitur pada pesan yang dikirimkan saat kegiatan chatting, adalah tentang Kriptografi dengan menggunakan metode Caesar Cipher yang mana pesan yang dikirimkan akan digeser sebanyak key yang telah ditentukan, misal geser 3, maka huruf 'a' akan menjadi 'd', begitu juga kata yang lain, baik secara enkripsi maupun dekripsi, sebab metode ini yang paling sederhana(klasik) serta paling sering digunakan dari metode dalam kriptografi. Ini merupakan publikasi dari tugas mata kuliah Keamanan Jaringan, jadi akan lebih fokus dari sisi keamanan atau securitas suatu data, berbeda dengan postingan sebelumnya yang masih belum ada kriptografinya.

Dalam program/aplikasi ini, saya menambahkan 2 class tambahan yakni class untuk enkripsi dan juga class untuk dekripsi, dan file java yang saya modifikasi adalah file UDPServer.java yang merujuk pada artikel sebelumnya. Aplikasi chat ini juga sama terdapat 4 buah file java. Namun untuk lebih jelasnya, saya taruh file java kedalam folder/direktori yang berbeda yaitu folder server dan folder userClient. Editing source code ada pada folder server sebab file java UDPServer.java terdapat disitu serta file pesan offline juga akan muncul di folder server ini.

Sedangkan untuk arsitektur program serta cara menjalankan program chatting ini, sama persis dengan postingan sebelumnya. Disini akan saya jelaskan lebih kearah kriptografinya saja. Berikut penambahan class enkripsi untuk mengacak kata/pesan pada file UDPServer.java dan penambahan class dekripsi untuk membaca pesan/kata yang sudah dienkripsi sebelumnya.
Enkripsi Java CaesarCipher 

Dekripsi Java CaesarCipher

Kemudian supaya kedua class tersebut bisa digunakan, maka perlu disisipkan perintah baru kedalam class yang sudah ada. Dalam kasus ini, class enkripsi akan ditaruh pada class saveMessage, sedangkan class dekripsi yang berfungsi membaca pesan enkripsi akan diletakan pada class readMessage.
String hasil=enkripsi(message);
String hasil=dekripsi(message);
Untuk lebih jelasnya, ada di potongan script berikut:

Class saveMessage
public static void saveMessage(String output) throws IOException { 
String[] values = output.split(" ");
String toClient = values[1];
String fromClient = values[2];
int index = 7 + values[1].length()+ values[2].length();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
String message = fromClient + ": <" +dateFormat.format(date) + "> " + output.substring(index);
/* Each client get its own txt file */
String filename = toClient+".txt";
File txt = null;
BufferedWriter writer = null;
try
{
 writer = new BufferedWriter(new FileWriter(filename, true));
}
/* If file doesn't exist, create a new one */
catch (FileNotFoundException e)
{
txt = new File(filename);
writer = new BufferedWriter (new FileWriter(txt, true));   
}
String hasil=enkripsi(message);
writer.write(hasil);
writer.newLine();
writer.close();
}


Class readMessage
public static void readMessage(String client) throws IOException { 
 String filename = client+".txt";
 /* check if txt file exists, if yes, send everything in it to client and delete file */
  try 
  {
   BufferedReader in = new BufferedReader(new FileReader(filename)); 
   ArrayList < serializable > list = hm.get(client); 
   //Get the ip of current key
   InetAddress ip = (InetAddress) list.get(1);  
   //get the port of the current key
   int p = Integer.parseInt((String) list.get(2)); 
   String output = "Kamu mempunyai pesan";
   byte[] sendData  = new byte[1024];
   sendData = output.getBytes();  
   DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
   try 
   {
    serverSocket.send(sendPacket);
   } 
   catch (IOException e) 
   {
    e.printStackTrace();
   } 
   String message;
   while ((message = in.readLine()) != null)
   {
    String hasil=dekripsi(message);
    sendData = hasil.getBytes();  
    sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    } 
   }   
   in.close();   
   File txt = new File (filename);
   txt.delete();
  
  }  
  /* If not, do nothing */
  catch (FileNotFoundException e) 
  {
   //nothing
  }
}

Sedangkan program chatting java dijalankan, misal salah satu user/client sudah off, dan ada user yang mengirimkan pesan kepada user tersebut yang sudah offline, maka pesan offline tersebut disimpan ke dalam folder server, pesan akan ditampilkan kepada user tadi apabila sudah online kembali. Pesan akan disimpan dalam bentuk file txt, jika pada postingan sebelumnya pesan akan sangat mudah dibaca orang lain, di program ini sudah dienkripsi sebab menggunakan kriptopgrafi Caesar Cipher.
Berikut pesan offline yang misalkan seorang user/client mengirimkan pesan.

Pesan offline tersebut akan disimpan oleh server di folder server, dan berikut hasil enkripsi pada file txt:

Ketikan user tadi online kembali, maka pesan akan ditampilkan yang dekripsinya, jadi pesan sesuai dengan aslinya, bukan hasil enkripsi yang tampil.

Demikian penjelasan singkat mengenai Aplikasi Chat Java dengan Kriptografi Caesar Cipher, semoga berguna.

Kelompok:
Tangguh Sanjaya (08052932)
Dodo Suratmo (08052950)
Nova Tri Cahyono (091051014)
Yuni (091051024)


Rabu, 14 November 2012

Cara Setting klik Touchpad di IGOS Nusantara 8 (IGN 8)

IGOS Nusantara 8 Logo
Sudah lama rasanya tidak memposting mengenai Sistem Operasi Linux, dan pada postingan ini saya akan berikan sedikit tips ringan pada distro/distribusi Linux dari Indonesia, yaitu IGOS Nusantara 8 atau IGN8 yang telah rilis pada tanggal 16 Oktober 2012 yang lalu, dimana pengembangan IGN yang sudah mencapai versi 8 ini dilakukan oleh Pusat Penelitian Informatika LIPI dan dibantu oleh developer dari komunitas Open Source di Indonesia. IGOS Nusantara sebenarnya sudah lama ada, namun baru tahun ini mulai giat lagi dalam mengkampanyekan penggunaan Perangkat Lunak berbasis Open Source. situs resmi dari IGOS Nusantara dapat anda kunjungi di website resmi mereka pada http://igos-nusantara.or.id

Saya sendiri yang kebetulan pengguna Linux yang sudah mencoba beberapa distro Linux, sempat lama menggunakan distro turunan mandriva yakni PCLinuxOS, karena begitu maraknya yang membahas tentang distro karya anak bangsa ini, saya mencoba untuk mendownloadnya (anda juga bisa mendownload pada link berikut: http://repo.igos-nusantara.or.id/iso/8/ atau http://ftp.lipi.go.id/ign/iso/8). Kemudian saya menginstall IGN8 pada Ultrabook milik saya. Setelah selesai, ada yang belum tersetting secara otomatis atau mungkin memang begitu dari pengembangnya sana, yaitu touchpad hanya bisa menggerakkan kursor saja, belum bisa melakukan sentuhan klik seperti biasanya. Setelah saya eksplore lebih jauh dan mencoba menu-menu yang ada, akhirnya menemukan juga settingan untuk touchpad agar bisa melakukan klik. berikut caranya:
Pilih menu System > Preferences > Mouse
IGOS Nusantara 8

Lalu pilih tab Touchpad, silahkan setting sesuai gambar dibawah ini. Kemudian klik tombol Close.
IGOS Nusantara 8

Oya, sebelumnya saya menggunakan bahasa Inggris, untuk bahasa defaultnya menggunakan Bahasa Indonesia, silahkan sesuaikan saja.

Mungkin itu saja yang bisa saya berikan tentang Cara Setting klik Touchpad pada IGN 8. Semoga bermanfaat.


Selasa, 13 November 2012

Happy Birthday

Google Doodle Birthday

Hari ini tanggal 13 November 2012, tak terasa umur saya telah berkurang dan usia saya bertambah. Tentu banyak yang memberikan ucapan selamat ulang tahun kepada saya, dari teman-teman saya, tak terkecuali ucapan ultah dari Ibu saya sendiri. Ucapan yang terselip doa kepada saya yang hanya bisa mengamininya, tentu saja yang baik-baik saja. Dan dari saya sendiri, saya pun punya keinginan dan cita-cita semoga tercapai dan terwujud seiring bertambahnya usia saya ini. Makasih teman-teman semua atas ucapannya, mungkin ada teman blogger yang ingin mengucapkan ultah, saya tidak menolak :)
Oya, untuk gambar diatas, itu adalah ketika saya membuka Google Hari ini (13-11-2012) sempat surprise juga ada juga doodle bergambar kue ulang tahun, dan saya tau bahwa itu ada kaitannya dengan akun Google Plus saya yang masih saya login, sebab seperti halnya di Facebook, di akun Google+ juga mencantumkan tanggal lahir saya. Saya juga baru tau kalau ada seperti ini, makasih Google (tapi sayang kue nya gk bisa dimakan yaa? :P )


Kamis, 08 November 2012

Aplikasi Chatting dengan Java berbasis Command Line

java
Saya akan membahas mengenai Aplikasi Program Chatting menggunakan Java berbasis Command Line yang merupakan tugas mata kuliah Pemrograman Jaringan. Sedikit Penjelasan tentang program ini, pada intinya sama dengan aplikasi chatting sederhana lain yakni komunikasi antar server dengan client, namun ada sedikit modifikasi atau penambahan listing program agar bisa digunakan lebih dari dua client serta adanya file log untuk menyimpan pesan offline apabila user atau client tersebut sedang tidak online. Program java ini terdiri dari 4 file .java yang saling berkaitan, yaitu:
  1. UDPServer.java
  2. UDPClient.java
  3. UdpChat.java
  4. SendThread.java


Untuk menjalankan program/aplikasi ini, dimulai dengan mengaktifkan server terlebih dahulu. Yaitu menjalankan file UdpChat.java, Berikut contoh perintahnya:
Penjelasan:
argumen -s menandakan untuk mengaktifkan server
port yang digunakan oleh server adalah 9090

Kemudian perintah berikut untuk menjalan client pertama sebagai berikut:
  
Kemudian untuk client kedua.
Penjelasan:
argumen -c berarti adalah untuk menjalan client.
kemudian nama user/client (tidak boleh sama).
alamat IP (disini dipakai localhost) misal: 127.0.0.1 dll
port server (harus sama dengan server yang baru saja diaktifkan)
port client masing-masing (setiap client harus berbeda port nya)

Lalu untuk melihat list user yang online atau offline

Sekarang akan mencoba mengirim pesan dari user satu ke user lain yang sedang online.
User lain menanggapi pesan

Misalkan user/client pertama akan offline,
Untuk melihat status on/off pada tabel user.

Sekarang user/client kedua ingin mengirim pesan ke user pertama yang sudah offline, pesan tersebut akan tersimpan di server untuk kemudian disampaikan kepada user pertama jika sudah online lagi.
Apabila user pertama tadi sudah online lagi, pesan offline dari user kedua akan diterima

Contoh kasus:
  • Bagaimana kerja server untuk bisa menyimpan pesan yang dikirimkan salah satu user/client kepada user yang sedang offline?
Untuk ini, yang berperan adalah file UDPServer.java dengan bantuan file SendThread.java, server akan membuat file .txt yang berfungsi menyimpan pesan offline namun hanya bersifat sementara dan akan hilang apabila user yang offline telah online kembali dan pesan offline disampaikan.
berikut potongan program untuk menyimpan pesan offline.
public static void saveMessage(String output) throws IOException
    {
        String[] values = output.split(" ");
        String toClient = values[1];
        String fromClient = values[2];
        int index = 7 + values[1].length()+ values[2].length();
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        Date date = new Date();
       
        String message = fromClient + ": <" +dateFormat.format(date) + "> " + output.substring(index);
       
        /* Each client get its own txt file */
        String filename = toClient+".txt";
              File txt = null;
        BufferedWriter writer = null;
        try
        {
             writer = new BufferedWriter(new FileWriter(filename, true));
        }
              /* If file doesn't exist, create a new one */
        catch (FileNotFoundException e)
        {
            txt = new File(filename);
            writer = new BufferedWriter (new FileWriter(txt, true));
                 }
        writer.write(message);
        writer.newLine();
        writer.close();
          }
berikut class potongan kode untuk membaca pesan offline
public static void readMessage(String client) throws IOException
    {
        String filename = client+".txt";

        /* check if txt file exists, if yes, send everything in it to client and delete file */
        try
        {
            BufferedReader in = new BufferedReader(new FileReader(filename));
          ArrayList<Serializable> list = hm.get(client);
           
            //Get the ip of current key
            InetAddress ip = (InetAddress) list.get(1);   
           
            //get the port of the current key
            int p = Integer.parseInt((String) list.get(2));
           
            String output = "Kamu mempunyai pesan";
            byte[] sendData  = new byte[1024];
            sendData = output.getBytes(); 
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p);
            try
            {
                serverSocket.send(sendPacket);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
          String message;
            while ((message = in.readLine()) != null)
            {
                sendData = message.getBytes(); 
                sendPacket = new DatagramPacket(sendData, sendData.length, ip, p);
               
                try
                {
                    serverSocket.send(sendPacket);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
                           }
           
            in.close();
                       File txt = new File (filename);
            txt.delete();
                              }
       
        /* If not, do nothing */
        catch (FileNotFoundException e)
        {
            //nothing
        }
    }
file text tersebut akan otomatis bernama sesuai nama user yang sedang offline.
  • Program/Aplikasi Chatting ini terdapat 4 file yang berada dalam satu directory, misalkan file server dan file client dipisah ke folder yang berbeda, apakah aplikasi ini masih bisa berjalan?
Jawabannya bisa, aplikasi chatting ini tidak terpaku dengan satu folder saja, yang penting port dan IP address sudah benar dan dapat digunakan, namun penempatan file ke masing-masing folder harus sesuai kebutuhan.
directory server.

directory client.

  • Bagaimana jika menggunakan aplikasi ini dari komputer client yang berbeda? bukan dari satu komputer.
Syaratnya komputer harus sudah terhubung dan terkoneksi lalu untuk alamat IP bisa menyesuaikan. Pada saat login ke server, client harus mendeklarasikan argumen menggunakan alamat IP nya sendiri, bukan IP localhost, dengan begitu akan bisa berkomunikasi dengan komputer satunya.

Source Code.

UDPServer.java
import java.io.*; 
import java.net.*; 
import java.text.*;
import java.util.*;
  
/**
 * Server class that provides the functionalities of a UDPServer
 *
 */
public class UDPServer 
{ 
 /* local hashmap of all clients */
 static HashMap> hm = new HashMap>();

 /* server Socket */
 static DatagramSocket serverSocket = null;
 static byte[] receiveData = new byte[1024]; 
 
 public UDPServer (int port) throws Exception 
 { 
  System.out.println(">>> [Server dimulai...]");
  
  try  
  {
   serverSocket = new DatagramSocket(port);
  }
  catch (BindException e)
  {
   System.out.println(">>> [Socket Sudah digunakan, keluar...]");
   System.exit(0);
  }

  while(true) 
  { 
   /* Server receives a packet */
   DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
   serverSocket.receive(receivePacket); 
 
   String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
   InetAddress IPAddress = receivePacket.getAddress(); 
   
   /* if packet is to register */
   if (sentence.startsWith(".register"))
   {
    
    String[] values = sentence.split(" ");
    boolean on = false;
    
    /* if client exists, check to see if client is on */
    if (hm.get(values[1]) != null)
    {
     ArrayList list = hm.get(values[1]);
     
     InetAddress toIP = (InetAddress) list.get(1); 
     int toPort = Integer.parseInt((String) list.get(2)); 

     /* if client is on, duplicate clientnames can't register */
     if (checkAlive(values[1], toIP, toPort))
     {
      String output = "[Nama panggilan sudah diambil.]";
      byte[] sendData  = new byte[1024];
      
      sendData = output.getBytes();  
     
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, receivePacket.getPort()); 
      try 
      {
       serverSocket.send(sendPacket);
      } 
      catch (IOException e) 
      {
       e.printStackTrace();
      }
      on = true;
     }
     
     /* if client is off */
     else
     {
      on = false;
     }
          
    }
    
    /* Allow registration if client is not on or does not exist */
    if (!on)
    {
     registration (sentence, IPAddress);
     
     String output = "[Selamat datang, Anda terdaftar.]";
     byte[] sendData  = new byte[1024];
     
     sendData = output.getBytes();  
     
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, receivePacket.getPort()); 
     try 
     {
      serverSocket.send(sendPacket);
     } 
     catch (IOException e) 
     {
      e.printStackTrace();
     } 
     
     readMessage(sentence.split(" ")[1]);
    }
   }
   
   /* If a client requests to dereg */
   if (sentence.startsWith(".deregister"))
   {
    registration (sentence, IPAddress);
    
    String output = "[Anda Offline. Bye.]";
    byte[] sendData  = new byte[1024];
    
    sendData = output.getBytes();  
    
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, receivePacket.getPort()); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    } 
    
   }
   
   /* If a client wants to start offline chatting */
   if (sentence.startsWith(".off"))
   {
    clientLookUp(sentence, IPAddress, receivePacket.getPort());
   }
   
   /* If a client responds to checkAlive */
   if (sentence.equals(".alive!"))
   {
    ack = true;
   }
  } 
 } 
  
 /**
  * Builds and maintains the hashmap of client information. Pushes updates out
  * whenever the hashmap gets updated.
  * @param sentence - incoming client information
  * @param IPAddress - IP of client
  */
 private static void registration(String sentence, InetAddress IPAddress)
 {
  String[] values = sentence.split(" ");
  
  ArrayList list = new ArrayList();
  
  list.add (values[1]);
  list.add(IPAddress);
  list.add (values[2]);
  list.add(values[3]);
           
  hm.put(values[1], list);
          
  list = new ArrayList();
  
  /* Traverse through the entire hashmap */
  Iterator iterator = hm.keySet().iterator();          
  while (iterator.hasNext()) 
  {  
   //Current Key
   String key = iterator.next().toString();
   
   //Key's values
   list = (ArrayList) hm.get(key); 
   
   //get the status of the current key
   String status = (String) list.get(3);
   
   //Broadcast to clients that are online
   if (status.equalsIgnoreCase("on"))
   {
    //Get the ip of current key
    InetAddress ip = (InetAddress) list.get(1); 
    
    //get the port of the current key
    int p = Integer.parseInt((String) list.get(2)); 

    //traverse through the original HashMap
    Iterator iterator2 = hm.keySet().iterator(); 
    while (iterator2.hasNext())
    {
     String value = hm.get(iterator2.next().toString()).toString();  
     String output = ".hash, " + value.substring(1, value.length()-1);  
     
     byte[] sendData  = new byte[1024];
     
     sendData = output.getBytes();  
     
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
     try 
     {
      //Update client with new table
      serverSocket.send(sendPacket);
     } 
     catch (IOException e) 
     {
      e.printStackTrace();
     } 
    }
    
    byte[] sendData  = new byte[1024];
    String output = "[Tabel Klien diperbarui.]";
    sendData = output.getBytes();  
    
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
 
   }
  }
 }
  
 /**
  * Resends hashmap if a client is sending off messages to a client that is already on
  * @param client - name of destination client
  * @param ip - ip of out of synced client
  * @param p - port of out of synced client
  */
 private static void sendTable(String client, InetAddress ip, int p)
 {
  String output = "[Client " + client + " sudah ada!!]";
  
  byte[] sendData  = new byte[1024];
  sendData = output.getBytes();  
  
  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
  try 
  {
   serverSocket.send(sendPacket);
  } 
  catch (IOException e) 
  {
   e.printStackTrace();
  }
  
  Iterator iterator = hm.keySet().iterator(); 
  while (iterator.hasNext())
  {
   String value = hm.get(iterator.next().toString()).toString();  
   output = ".hash, " + value.substring(1, value.length()-1);  
   
   sendData  = new byte[1024];
   sendData = output.getBytes();  
   
   sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
   try 
   {
    serverSocket.send(sendPacket);
   } 
   catch (IOException e) 
   {
    e.printStackTrace();
   } 
  }
  
  sendData  = new byte[1024];
  output = "[Tabel Klien diperbarui.]";
  sendData = output.getBytes();  
  
  sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
  try 
  {
   serverSocket.send(sendPacket);
  } 
  catch (IOException e) 
  {
   e.printStackTrace();
  }
 }

 /**
  * Looks up client and determine if client is off or not
  * @param sentence - incoming messages
  * @param IPAddress - IP of incoming client
  * @param port - port incoming client
  * @throws IOException
  */
 private static void clientLookUp(String sentence, InetAddress IPAddress, int port) throws IOException
 {
  String[] values = sentence.split(" ");
  String toClient = values[1];
    
  ArrayList list = hm.get(toClient);
  
  String status = (String) list.get(3);

  InetAddress toIP = (InetAddress) list.get(1); 
  
  int toPort = Integer.parseInt((String) list.get(2)); 
  
  /* If client is off according to the table */
  if (status.equals("off"))
  {
   /* If client is off just like the table initiate offline chat*/
   if (!checkAlive (toClient, toIP, toPort))
   {
    saveMessage (sentence);
    
    String output = "[Pesan diterima oleh server dan disimpan]";
    byte[] sendData  = new byte[1024];
    sendData = output.getBytes();  
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
   }
   
   /* If client is on, inform original sender, then update and broadcast table */
   else
   {
    String output = "[Client " + toClient + " sudah ada!!]";
    
    byte[] sendData  = new byte[1024];
    sendData = output.getBytes();  
    
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
    
    updateHash(toClient, "on");

   }
   
  }
  
  /* If client is on according to the table */
  else
  {
   /* If client is indeed on, update the misinformed client's table */
   if (checkAlive (toClient, toIP, toPort))
    sendTable (toClient, IPAddress, port); 
   
   /* If client is off, unlike the table values; initiate offline chat and update broadcast table */
   else 
   {
    saveMessage (sentence);
    
    String output = "[Pesan diterima oleh server dan disimpan]";
    byte[] sendData  = new byte[1024];
    sendData = output.getBytes();  
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
    
    updateHash(toClient, "off");
   }

  }
 }
 
 /**
  * If client is off, save messages to a txt file with timestamp and the client it is from
  * If file doesn't exist, create a new one
  * If a file does exit, append to it
  * @param output
  * @throws IOException
  */
 public static void saveMessage(String output) throws IOException
 {
  String[] values = output.split(" ");
  String toClient = values[1];
  String fromClient = values[2];
  
  int index = 7 + values[1].length()+ values[2].length();

  DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
  Date date = new Date();
  
  String message = fromClient + ": <" +dateFormat.format(date) + "> " + output.substring(index);
  
  /* Each client get its own txt file */
  String filename = toClient+".txt";
  
  File txt = null;
  BufferedWriter writer = null;
  try
  {
    writer = new BufferedWriter(new FileWriter(filename, true));
  }
  
  /* If file doesn't exist, create a new one */
  catch (FileNotFoundException e)
  {
   txt = new File(filename);
   writer = new BufferedWriter (new FileWriter(txt, true));
   
  }

  writer.write(message);
  writer.newLine();
  writer.close();
  
 }
 
 /**
  * When a client goes on, check to see if a txt file exists
  * if it does, get the messages and send them
  * if not, do nothing
  * @param client
  * @throws IOException
  */
 public static void readMessage(String client) throws IOException
 {
  String filename = client+".txt";

  /* check if txt file exists, if yes, send everything in it to client and delete file */
  try 
  {
   BufferedReader in = new BufferedReader(new FileReader(filename));
   
   
   ArrayList list = hm.get(client);
   
   //Get the ip of current key
   InetAddress ip = (InetAddress) list.get(1); 
   
   //get the port of the current key
   int p = Integer.parseInt((String) list.get(2));
   
   String output = "Kamu mempunyai pesan";
   byte[] sendData  = new byte[1024];
   sendData = output.getBytes();  
   DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
   try 
   {
    serverSocket.send(sendPacket);
   } 
   catch (IOException e) 
   {
    e.printStackTrace();
   } 
   

   String message;
   while ((message = in.readLine()) != null)
   {
    sendData = message.getBytes();  
    sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
    
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    } 
    
   }
   
   in.close();
   
   File txt = new File (filename);
   txt.delete();
   
   
  } 
  
  /* If not, do nothing */
  catch (FileNotFoundException e) 
  {
   //nothing
  }
 }
 
 /**
  * Check if client is alive by sending a packet, wait 500msec
  * if no response, then client is not alive.
  * @param toClient - Destination client
  * @param toIP - client's IP
  * @param toPort - client's port
  * @return online status
  */
 public static boolean checkAlive(String toClient, InetAddress toIP, int toPort)
 {
  String output = ".alive?";
  byte[] sendData  = new byte[1024];
  sendData = output.getBytes();  
  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, toIP, toPort); 

  
  try 
  {
   ack = false;
   serverSocket.send(sendPacket);
  } 
  catch (IOException e) 
  {
   e.printStackTrace();
  }
  
  
  boolean done = false;
  while (!done)
  {
   if (ack)
   {
    done = true; 
   }
   else
   {
    /* Wait for 500msec only once */
    if (counter < 1)
    {
     try 
     {
      Thread.sleep(500);
     } 
     catch (InterruptedException e) 
     {
      e.printStackTrace();
     }
     counter++;
    }
    else
     done = true;
   }
  }
  
  counter = 0;
  
  return ack; 
 }
 
 /**
  * If a client is on while off on the table, update and broadcast
  * @param client - client
  * @param newStatus - correct status
  */
 public static void updateHash(String client, String newStatus)
 {
  ArrayList list = hm.get(client);
  
  list.set(3, newStatus);
           
  hm.put(client, list);
          
  Iterator iterator = hm.keySet().iterator();          
  while (iterator.hasNext()) 
  {  
   //Current Key
   String key = iterator.next().toString();
   
   //Key's values
   list = (ArrayList) hm.get(key); 
   
   //get the status of the current key
   String status = (String) list.get(3);
   
   if (status.equalsIgnoreCase("on"))
   {
    //Get the ip of current key
    InetAddress ip = (InetAddress) list.get(1); 
    
    //get the port of the current key
    int p = Integer.parseInt((String) list.get(2)); 

    //traverse through the original HashMap
    Iterator iterator2 = hm.keySet().iterator(); 
    while (iterator2.hasNext())
    {
     String value = hm.get(iterator2.next().toString()).toString();  
     String output = ".hash, " + value.substring(1, value.length()-1);  
     
     byte[] sendData  = new byte[1024];
     
     sendData = output.getBytes();  
     
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
     try 
     {
      serverSocket.send(sendPacket);
     } 
     catch (IOException e) 
     {
      e.printStackTrace();
     } 
    }
    
    byte[] sendData  = new byte[1024];
    String output = "[Tabel Klien diperbarui.]";
    sendData = output.getBytes();  
    
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, p); 
    try 
    {
     serverSocket.send(sendPacket);
    } 
    catch (IOException e) 
    {
     e.printStackTrace();
    }
 
   }
  }
 }

 static int counter = 0;
 static boolean ack = false;
 
 }  


UDPClient.java
import java.net.*;
  
/**
 * Class that provides functionalities of a UDPClient
 * Also acts as a receive thread and parses all incoming messages
 *
 */
public class UDPClient 
{
 public UDPClient(String hostname, InetAddress ip, int srvPort, int clientPort ) throws Exception 
    { 
  DatagramSocket clientSocket = null; 
  
  try
  {
   clientSocket = new DatagramSocket( clientPort );
  }
  catch (BindException e)
  {
   System.out.println(">>> [Alamat sudah dipakai, keluar...]");
   System.exit(0);
  }
  
  String nickname = hostname;
  int myPort = clientPort;
  byte[] receiveData = new byte[1024];
  
  InetAddress serverIP = ip;
  int serverPort = srvPort;

  SendThread sender = new SendThread (clientSocket, nickname, serverIP, serverPort, myPort);
  Thread s = new Thread (sender);
  s.start();
  
  
  System.out.println(">>> [Mendaftar...]");
  System.out.print(">>> ");
  
  while (true)
  {

    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
 
    clientSocket.receive(receivePacket); 
       
    String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
       
    /* Incoming client information, does not display it on console */
    if (sentence.startsWith(".hash, "))
    {
     SendThread.ack = true;
     sender.updateHash(sentence);
    }
    
    /* Incoming check for link status, send an ACK back */
    else if (sentence.equals(".alive?"))
    {
     String out = ".alive!";
                 
           byte buffer[] = new byte [1024];
           buffer = out.getBytes();
              InetAddress address = receivePacket.getAddress();
              DatagramPacket ack = new DatagramPacket(buffer, buffer.length, address, receivePacket.getPort());
                  
              clientSocket.send(ack);
    }
      
    /* Server ACKs when received a request to dereg, set ack to true */
    else if (sentence.equals("[Anda Offline. Bye.]"))
    {
     SendThread.ack = true;
     System.out.println(sentence);
     System.out.print(">>> ");
    }
    
    /* Server ACK */
    else if (sentence.equals("[Pesan diterima oleh server dan disimpan]"))
    {
     SendThread.ack = true;
     System.out.println(sentence); 
     System.out.print(">>> ");
    }
      
    /* Receives a regular message, ACKs back */
    else if (!sentence.startsWith("[Pesan yang diterima oleh "))
             {
              System.out.println(sentence);
              System.out.print(">>> ");
           String out = "[Pesan yang diterima oleh " + SendThread.hostname +".]";
                  
           byte buffer[] = new byte [1024];
           buffer = out.getBytes();
              InetAddress address = receivePacket.getAddress();
              DatagramPacket ack = new DatagramPacket(buffer, buffer.length, address, receivePacket.getPort());
                  
              clientSocket.send(ack);
             }

    /* Receives an ACK, print it, and continue */
    else
    {
     SendThread.ack = true;
     System.out.print(">>> ");
     System.out.println(sentence); 
     System.out.print(">>> ");
    }
   

  }
 }
 
 } 

SendThread.java
import java.io.*;
import java.net.*;
import java.util.*;

public class SendThread implements Runnable
{
    public static String hostname = null;
    public static String toname = null;
    public static DatagramSocket sock;
    static HashMap> hm = new HashMap>();
    static InetAddress serverIP = null;
    static int serverPort = -1;
    static int myPort = -1;
    static boolean online = false;
    static boolean ack = false;
    static int counter = 0;
    static String timeoutmode = null;
    static String buffer = null;

    /**
     * Constructor that initializes the variables and registers the client with the server
     * @param socket - client socket
     * @param host - name of client
     * @param serverIP - server's IP
     * @param serverPort - server's Port
     * @param myPort - client's port
     */
    public SendThread(DatagramSocket socket, String host, InetAddress serverIP, int serverPort, int myPort) 
    {
        sock = socket;

        SendThread.myPort = myPort;
        
        hostname = host;
        
        SendThread.serverIP = serverIP;
        
        SendThread.serverPort = serverPort;
 
        try 
        {
   register();
   
  } 
        catch (InterruptedException e) 
        {
   e.printStackTrace();
  }
        
    }

    /**
     * Send's main thread that takes any user input, parse the commands and apply necessary actions
     */
    public void run() 
    {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        while (true) 
        {
         /* Makes sure ack is received to prevent interruption of console input by receive thread */
         if (ack)
         {
          /* ACK counter resets to 0 */
          counter = 0;
          try 
          {
           
           String line = in.readLine();
           
           /* Parse commands only if online or if user tries to reg or exit after dereg */
           if (online || line.startsWith("reg") || line.startsWith("ctrl + c"))
           {
            /* If user wants to send */
            if (line.startsWith("send"))
            {
             if (line.split(" ")[1].equals(hostname))
             {
              System.out.println(">>> [Tidak bisa mengirim pesan sendiri!!!]");
              System.out.print(">>> ");
             }
             else
             {
              ack = false; 
              try
                 {
               sock.send(clientLookUp(line));
                 }
              catch (ArrayIndexOutOfBoundsException e)
              {
               ack = true;
               System.out.println(">>> [Tolong masukan clientname]");
               System.out.print(">>> ");
              }
              catch (StringIndexOutOfBoundsException e)
              {
               ack = true;
               System.out.println(">>> [Tolong masukan pesan]");
               System.out.print(">>> ");
              }
              catch (NullPointerException e)
              {
               ack = true;
               System.out.println(">>> [Klien tidak ditemukan, ketik table untuk melihat client yang tersedia (s).]");
               System.out.print(">>> ");
              } 
             }
            }
  
            /* table will show current clients, contact list equivalent */
            else if (line.equals("table"))
            {
          System.out.println(">>> Table klien yang online");
        Iterator iterator = hm.keySet().iterator(); 
        while (iterator.hasNext())
       {
        String value = hm.get(iterator.next().toString()).toString();  
        String output = value.substring(1, value.length()-1);        
        System.out.println(">>> " + output);  
       }
        System.out.print(">>> ");
            }
            
            /* dereg will log the client out, changing the status in the table */
            else if (line.startsWith("dereg"))
            {
             if (!online)
             {
              System.out.println(">>> [Anda sedang offline.]");
             }
             else
             {
              System.out.print(">>> ");
              deregister();
              online = false;
             }
             
            }
            
            /* allows user to reg back online */
            else if (line.startsWith("reg"))
            {
             if (online)
              System.out.println(">>> [Anda sedang online.]");
             else
             {
              System.out.print(">>> ");
              String[] values = line.split(" ");
              try
              {
               hostname = values[1];
               register();
               online = true;
              }
              catch (ArrayIndexOutOfBoundsException e)
              {
               System.out.println("[Tolong masukan clientname...]");
               System.out.print(">>> ");
              }
              
             }
            }
            
            /* dereg then exit program entirely */
            else if (line.equals("ctrl + c"))
            {
             if (online)
             {
              deregister();
             }
             System.out.print(">>> ");
             
             Thread.sleep(500); //Wait for ACK
             
             System.out.println("[Keluar]");
             System.exit(0);
            }
            
            else
            {
             System.out.println(">>> [Perintah tidak diakui, silakan coba lagi.]");
             System.out.print(">>> ");
            }

           }
 
           /* Refuses command while offline */
     else
     {
      System.out.println(">>> [Kamu sedang offline.]");
      System.out.println(">>> [Silakan Daftar atau keluar dari aplikasi.]");
      System.out.print(">>> ");
     }
    } 
          
          catch (Exception e) 
          {
     e.printStackTrace();
    }
         }
         
         /* Timeout for both server and client connections */
         else
         {
          if (timeoutmode.equals("server"))
           serverACK();
          else
           clientACK();
         }
        }
    }

    /**
     * Updates the local client hashmap
     * @param sentence - incoming info from server
     */
 public void updateHash (String sentence)
 {
  String[] values = sentence.split(", ");
  
  ArrayList list = new ArrayList();
  
  for (int i = 1; i < values.length; i++)
  {
   list.add (values[i]);
  }
  
  hm.put(values[1], list);
  
  list = new ArrayList(); 
 }
    
 /**
  * Searches through the local table and create a datagramPacket to client
  * If destination is unreachable, create a datagramPacket to server instead
  * @param input - user input
  * @return DatagramPacket to be sent
  */
 private static DatagramPacket clientLookUp(String input)
 {
  
  String[] list = input.split(" ");  
  String client = list[1];
  toname = client;
  //6 is the length of "send " and an additional " " after the client name
  int index = 6 + list[1].length();
  
  String message = hostname + ": " + input.substring(index);


  ArrayList values = hm.get(client);
  
  String ip = (String) values.get(1);
  ip = ip.substring(1);
  
  String status = (String) values.get(3);

  /* check local table first */
  if (status.equalsIgnoreCase("on"))
  {
   timeoutmode = "client";
   
   //Get the ip of current key
   InetAddress clientIP = null;

   try 
   {
    clientIP = InetAddress.getByName(ip);
   } 
   catch (UnknownHostException e) 
   {
    e.printStackTrace();
   } 
   
   //get the port of the current key
   int clientPort = Integer.parseInt((String) values.get(2)); 
   //get status

   byte[] sendData  = new byte[1024];  
   sendData = message.getBytes(); 
   buffer = ".off " + client + " " + hostname + " " + input.substring(index);
   
   DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIP, clientPort); 

   return sendPacket;
  }
  
  /* if off, initiate offline chat */
  else
  {
   timeoutmode = "server";
   
   System.out.println(">>> [" + client + " offline, pesan dikirim ke server.]");
   System.out.print(">>> ");
   
   message = ".off " + client + " " + hostname + " " + input.substring(index);
   byte[] sendData  = new byte[1024]; 
   
   sendData = message.getBytes();  
   DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIP, serverPort); 
 
   return sendPacket;

  }
 }
    
 /**
  * Registers client with server
  * @throws InterruptedException 
  */
 public void register() throws InterruptedException
 {
  
  /* Sends current host information */
        String sentence = ".register " + hostname + " " + myPort + " " + "on";
        
        byte[] sendData = new byte[1024];
  sendData = sentence.getBytes();
   
  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIP, serverPort); 
  
  try 
  {
   ack = false;   
   timeoutmode = "server";
   sock.send(sendPacket);
  } 
  catch (IOException e) 
  {
   e.printStackTrace();
  }
  
  online = true;
  
 }
 
 /**
  * Deregisters client from server
  * @throws SocketException 
  */
 private static void deregister() throws SocketException
 {
  /* Sends current host information */
        String sentence = ".deregister " + hostname + " " + myPort + " " + "off";
        
        byte[] sendData = new byte[1024];
  sendData = sentence.getBytes();
   
  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIP, serverPort); 
  
  try 
  {
   ack = false;
   timeoutmode = "server";
   sock.send(sendPacket);
  } 
  catch (IOException e) 
  {
   e.printStackTrace();
  }

  
  online = false;
 }
   
 /**
  * Puts thread to sleep for 500msec, retries for 5 times. If no ack is received
  * then it means server is not responding, quit gracefully.
  */
 private static void serverACK()
 {
  if (counter < 5)
  {
   try 
   {
    Thread.sleep(500);
   } 
   catch (InterruptedException e) 
   {
    e.printStackTrace();
   }
   counter++;
  }
  else
  {
   System.out.println("[Server tidak menanggapi]");
   System.out.println(">>> [Keluar]");
   System.exit(0);
  }
 }
 
 /**
  * Puts thread to sleep for 500msec, if still no ack, then destination client
  * is down, and redirect packet to server.
  */
 private static void clientACK()
 {
  if (counter < 1)
  {
   try 
   {
    Thread.sleep(500);
   } 
   catch (InterruptedException e) 
   {
    e.printStackTrace();
   }
   counter++;
  }
  else
  {
   System.out.println(">>> [Tidak ada ACK dari " + toname + ", pesan dikirim ke server.]");
   System.out.print (">>> ");
   
   byte[] sendData  = new byte[1024];
   sendData = buffer.getBytes();
   
   DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIP, serverPort); 
 
   try 
   {
    ack = false;
    timeoutmode = "server";
    sock.send(sendPacket);
   } 
   catch (IOException e) 
   {
    e.printStackTrace();
   }
  }
 } 
}

UdpChat.java
import java.net.InetAddress;

/**
 * Provides a main method and parses arguments to initiate the appropriate mode
 *
 */
public class UdpChat 
{
 public static void main(String[] args) throws Exception 
 {
  
  try
  {
   String mode = null;
   mode = args[0].substring(1);

   /* Initiates the Server mode */
   if (mode.equals("s"))
   {
    int port = Integer.parseInt(args[1]);
    
    if (port < 1024)
    {
     System.out.println(">>> [Port server tidak bisa lebih kecil dari 1024]");
     System.exit(0);
    }
    if (port > 65535)
    {
     System.out.println(">>> [Port server tidak bisa lebih dari 65.535]");
     System.exit(0);
    }
    
    UDPServer newServer = new UDPServer(port); 
   }
   
   /* Initiates the Client Mode */
   else if (mode.equals("c"))
   {
    String hostname = args[1];
    InetAddress serverIP = InetAddress.getByName(args[2]);
    int serverPort = Integer.parseInt(args[3]);
    int clientPort = Integer.parseInt(args[4]);
    
    if (serverPort < 1024)
    {
     System.out.println(">>> [Port server tidak bisa lebih kecil dari 1024]");
     System.exit(0);
    }
    if (serverPort > 65535)
    {
     System.out.println(">>> [Server port " + serverPort + " tidak ada!]");
     System.exit(0);
    } 
    if (clientPort < 1024)
    {
     System.out.println(">>> [Port klien tidak bisa lebih kecil dari 1024]");
     System.exit(0);
    }
    if (clientPort > 65535)
    {
     System.out.println(">>> [Port " + serverPort + " tidak ada!]");
     System.exit(0);
    }

    UDPClient newClient = new UDPClient (hostname, serverIP, serverPort, clientPort); 
   }
   
   else
   {
    System.out.println(">>> [Tolong masukkan argumen yang benar.]");
   }
  }
  
  catch (ArrayIndexOutOfBoundsException e)
  {
   System.out.println(">>> [Tolong masukkan argumen yang benar.]");
  }
 }
}

Kelompok:
Asri Ansar (08052931)
Tangguh Sanjaya (08052932)
Dodo Suratmo (08052950) 
Nova Tri Cahyono (091051014)
Cukamnoto Hariyadi (121052129)
Wintoko (121053085)



Selasa, 30 Oktober 2012

Sponsored Video: [GALAXY Note 10.1] A new way to learn with Institute of Play

Galaxy Note 10.1 A new way to learn with Institute of Play
Update lagi saat akhir bulan Oktober, kali ini mengenai produk Samsung Galaxy Note 10.1 yang pada postingan saya sebelumnya juga membahas tentang hal yang sama, namun sekarang saya akan memberikan ulasan yang berbeda, jika pada postingan yang berjudul Galaxy Note 10.1 the ultimate multitasker yang mana postingan itu menjelaskan bagaimana galaxy note 10.1 bisa digunakan untuk aktivitas sehari-hari serta pada postingan berjudul galaxy note 10.1 art and design yang menceritakan bagaimana galaxy note 10.1 digunakan untuk bidang seni dan desain. Postingan ini akan membahas bagaimana Samsung Galaxy Note 10.1 digunakan sebagai media pembelajaran atau sarana belajar yang efektif dan bisa dibilang terobosan canggih dalam dunia pendidikan.

Pada postingan ini, terdapat video yang bisa anda tonton dan anda lihat bagaimana galaxy note juga bisa mendukung aktifitas belajar para siswa dengan arahan guru mereka yang memberikan materi pelajaran. Dalam video dibawah ini, lokasi yang di ambil adalah Institute of Play, bertempat di kota New York, Amerika Serikat (keterangan mengenai Institute of Play ada disini). Para siswa dan siswi memanfaatkan Samsung galaxy Note 10.1 untuk menunjang mereka untuk belajar materi pelajaran dari gurunya, dengan cekatan mereka mengoperasikan gadget canggih tersebut, misal pelajaran yang ada adalah perhitungan,biologi, dll. Fungsi yang paling terlihat yakni penggunaan S-Pen yang menjadi andalan Galaxy Note 10.1 ini, sangat mudah sekali apabila digunakan untuk menggambar.

Apabila anda penasaran dengan video tersebut, bisa anda streaming video dibawah ini.

Info lebih lanjut bisa anda akses di website resmi samsung, Twitter, dan Facebook Samsung.

Sponsored article.


Translates