Minggu, 05 Agustus 2018

Membuat perulangan bangun segiempat sederhana dengan menggunakan Java



Pada kesempatan kali ini saya akan mencoba mempraktekkan bagaimana membuat sebuah pengulangan bintang dengan pengulangan, dengan menggunakan scanner (input) yang bersifat dinamis. Misalnya seperti ini:
*
   *
   * *
         *
         * *
         * * *
 Atau
*
  * *
  * *
       * * *
       * * *
       * * *
Dst Pada kasus di atas, berarti kita membuat 3 bangun datar. Berarti input kita ialah 3. Lalu, bagaimana kita akan memulainya? Langkah pertama ialah menentukan semua polanya, sebaiknya membuat polanya dengan menggunakan Microsoft excel untuk mempermudah pekerjaan kita. Pada kesempatan kali ini saya akan mencoba membuat pola perulangan segiempat pada gambar 2. Sebelum kita memulai membuat segiempat, mari kita siapkan terlebih dahulu apa input atau scannernya terlebih dahulu, dan saya akan menggunakan variable global untuk menampung N-nya. Seperti ini:
Pada gambar di atas, saya hanya memuat package dan method untuk menampung N untuk inputnya. Keterangan pada gambar di atas ialah Public int n, deklarasi variable global bernama ‘n’, Scanner sc = new scanner(system.in), untuk pendeklarasian variable scanner, this.n = sc.nextInt(), untuk menampung nilai scanner pada n, sc.close(), untuk mengakhiri penggunaan utility scanner, mengacu pada beberapa sumber mengenai penggunaan close, jika scanner tidak diakhiri dengan fungsi close(), maka akan mempengaruhi penggunaan scanner pada class yang lain, (koreksi jika salah!) Kita tentukan dahulu pola segiempatnya. How? Perulangan bangun datar dua dimensi, berarti melalui dua perulangan, yaitu perulangan ke samping (kolom) dan ke bawah (baris). Semisal segiempat pertama ialah segiempat 3 x 3, berarti perulangan sebanyak 3 kali ke samping, dan 3 kali ke bawah. Lalu bagaimana menentukan rumusnya? Kita bisa menggunakan iterasi for, sebanyak 2 kali, atau nested for. Sebelum jauh membuat bagaimana cara kita menggesernya, kita mulai bagaimana membuat pola untuk segiempatnya, karena bintang dari segiempat mengisi seluruh ruang dalam segiempat, maka kita tidak perlu membuat suatu kondisi untuk membuat pola tertentu. Bisa kita tulis seperti ini
 This.polaSegiEmpat = new String[n][n]  memanggil variable global dari polaSegiEmpat, kita bisa mendeklarasikan variable global ini di bawah baris “public int n”, dan cara mendeklarasikannya dengan menulisnya seperti ini [modifier] [type data] “[][]” [nama variable], pada kesempatan kali ini saya menulisnya seperti ini, “public String[][] polaSegiEmpat”. Disini menggunakan [][] karena saya menggunakan array 2 dimensi (kenapa dua? Karena jumlah “[]” ada dua, kalau hanya satu, berarti array satu dimensi). Lalu [n][n] untuk apa? Karena array harus didefinisikan alamatnya, untuk sementara kita mengisinya dengan n pada global variabel, hanya untuk test apakah kode yang saya buat sudah dapat berjalan atau masih terdapat error. Lalu kita menggunakan for 2 kali seperti pada gambar, sepanjang panjang alamat array, atau kita dapat menggantinya dengan ‘n’. Mari coba kita test dengan membuat method cetak() dan main methodnya.
Pada method cetak, kita memanggil method getN() dan setPolaSegiEmpat() agar dapat diterapkan dalam method ini. public static void main(String[] args)  merupakan main method, dan merupakan method utama yang akan di run, dimana pada sebuah aplikasi java harus memiliki 1. Lets check our code.
Yeah, We did it! やった!!!(笑) Jika dalam tahap ini kita sudah berhasil, maka tahap selanjutnya ialah bagaimana kita bisa menggeser segiempat yang kita buat dan menyusutkannya. First, kita harus membuat rumus seberapa jauh pergeserannya Mari kita buat method baru untuk membuat berapa kali pengulangannya, disini saya membuat method iterasiSegiEmpat untuk membuat berapa kali pengulangannya. Dalam method ini nantinya kita masukkan looping for untuk membuat berapa banyak pengulangannya.
Pada method getPolaSegiEmpat sebelumnya kita telah membuat array polaSegiEmpat[n][n] didalamnya, kita pindahkan deklarasi array tersebut ke method iterasiSegiEmpat. Yang perlu diperhatikan ialah bahwa panjang array bukanlah n (read, [n][n]) lagi, melainkan jumlah dari panjang dan lebar dari total sisi persegi yang kita gunakan, misalnya jika hanya ada satu persegi maka total array yang dibuat ialah [0][0], jika 2 maka [3][3], jika 3 maka [6][6], dst. Dan bagaimana rumusnya? Sejujurnya, ketika saya membuat lagi kode ini saya menghabiskan waktu sekitar tiga jam untuk menemukan letak kesalahannya, (sudah termasuk dengan makan, absent-minded syndrome, dan gangguan keponakan). Dengan menggunakan rumus (n * (n + 1)) / 2, kita dapat membuat jumlah alamat array I dan j-nya. Pada method ini saya juga memanggil method sebelumnya dengan parameter k (jumlah pengulangannya). Dan membuat perulangan k selama k kurang dari n, dan iterasi k ialah k++, atau k = k + 1. Dan akhirnya kita memasuki tahap akhir sebelum tahap yang benar-benar akhir. Yaitu saatnya kita menyunting apa yang ada di method pola segi empat.
Pada method ini, saya membuat variabel geser untuk menentukan pergeseran sesuai dengan perulangannya, maksudnya ialah ketika persegi ke 0, dengan rumus geser, saya menggeser persegi sesuai nilai k-nya, jika dihitung maka, persegi ke 0, menggeser sejauh 0 (tidak bergeser), ke 1 menggeser sejauh 1, ke 2 menggeser sejauh 3, ke 3 sejauh 6, dst. Dimana pergeseran ke bawah dan ke kanan, maka nilai I dan j setiap bergeser pasti tidak tetap, dengan kata lain, alamat array I dan j setiap perulangan dipengaruhi oleh k. maka kita buat pergeserannya sesuai k, dimana rumus geser yang saya gunakan ialah (k * (k + 1)) / 2. Karena pada method sebelumnya parameter k digunakan dalam iterasi for, maka pada method ini, nilai k juga berubah sesuai dengan urutan iterasinya dimana ketika k = 0, maka variabel gesernya adalah 0, jika k = 1 maka geser = 1, jika k = 2 maka geser = 3, jika k = 3, maka geser = 6, dst.

Dan hasilnya, menjadi seperti ini.



Lalu bagaimana menghilangkan null-nya, kita dapat menambahkan fungsi pada method cetak(). Dengan menambahkan fungsi if value sama dengan null, maka hanya menambahkan spasi.


Dan hasil akhirnya menjadi



sekian tutorial kali ini, semoga bisa bermanfaat bagi yang membaca. Terima kasih.

BootCamp Xsis Academy - up to week five - part II

Masuk ke part II, karena semalam harus segera tidur karena termasuk manusia yang sulit tidur dan sulit bangun saya, selain itu hari ini harus berangkat dari tangerang yang cukup makan waktu perjalanannya. Lets continue!

Setelah membahas front-end dan back-end-nya, mari masuk lebih jauh lagi. Pada proses bisnis yang lebih besar, pada back-end ditambah package DAO, yaitu Data Access Object. dimana pada bagian service kita memanipulasi data yang akan kita masukkan ke database, maka bagian DAO ialah untuk proses query-nya, atau proses request ke databasenya, baik insert, update, maupun delete-nya. Misalnya ada data A ingin kita masukkan ke database, sementara database menginginkan data tersebut berupa 65. Maka kita dapat mengubahnya di service atau jika ingin menambahkan A- atau yang lain maka kita mengubahnya di service, walaupun kita bisa melakukannya dengan cara lain.

Pada pertengahan minggu ke empat, kami sekelas mulai menggunakan spring. Dengan menggunakan framework ini kita bisa mengurangi banyak kode, yang pada bagian kontroller habis untuk method doGet dan doPost-nya. Selain itu kami juga menggunakan framework hibernate untuk mapping object-oriented domain model ke relational database. Ada yang unik menggunakan hibernate, dimana data kueri dibentuk menjadi sebuah objek sehingga ketika memanipulasi satu data pada kolom tertentu maka harus mengubah full satu kolom tersebut.

Sekian untuk share kali ini, semoga bisa bermanfaat. Maaf jika ada salah-salah penjelasan atau salah-salah kata

BootCamp Xsis Academy - up to week five - part I

days after days, sekitar dua minggu setelah evaluasi tahap satu, mulai memasuki minggu teknologi. Pada minggu ini mulai dikenalkan pada bahasa Java dan bagaimana membangun sebuah aplikasi berbasis web sederhana. Jika selama dua minggu pertama hanya dikenalkan java hanya pada kulit arinya saja, minggu ini mulai memasuki ke lapisan epidermis kulitnya, bagian yang lebih bawahnya. Memasuki minggu ini, awalnya dikira logic itu sudah cukup membuat pusing kepala, ternyata memasuki minggu-minggu ini, kesulitan makin menjadi-jadi, terlebih harus memahami apa itu polimorphysm, encapsulation, dan kawan-kawannya.

Memasuki minggu-minggu teknologi ini, saya hanya bisa memahami sekilas, bahasanya telan mentah-mentah karena waktu yang diberikan cukup singkat. hampir setiap malamnya, saya mengulang materi karena singkatnya waktu yang diberikan, dan mungkin jika ketika tidur dan bermimpi bisa koding, ingin rasanya koding saat mimpi karena mereview materipun hanya sepersekian persen yang benar-benar bisa dipahami, itupun jika paham (笑).

Banyak sekali yang diberitahukan kepada kami, semua yang berkaitan bagaimana dan apa saja yang diperlukan untuk membangun aplikasi web dengan menggunakan Java. Seperti kata trainer yang mengajari saya, Java bagaikan hutan belantara dimana untuk membangun sesuatu memiliki banyak cara dan permasalahannya ialah bagaimana membangun sebuah aplikasi yang baik dan dipahami oleh orang lain untuk dikembangan serta membuat kode se-efektif mungkin, karena yang mampu banyak namun tidak banyak yang mampu membuatnya dengan rapi.

Awalnya, kami sekelas membuat beberapa halaman dengan fungsi dasar dengan menggunakan bahasa pemprograman Java, tanpa menggunakan framework. Basically, untuk membuat halaman web dengan membuat Java cukup banyak membuat folder ini itu, secara pribadi jika halaman web tidak memiliki cakupan modul yang banyak, cukup rumit untuk membuatnya daripada menggunakan bahasa PHP (dengan menggunakan XAMPP dan database MySQL), karena harus banyak mengunduh library serta konfigurasi servlet yang cukup asing bagi pembelajar baru seperti JSTL (Java Standard Tag Library), library untuk koneksi ke database. Berbeda dengan menggunakan XAMPP yang hanya membuat koneksi ke database dengan memanggil server databasenya, untuk Java kita harus menyematkan library koneksi agar Java bisa memindai database yang tersedia.

Ok, lets to the lesson. Membangun sebuah web dengan java, kita membuat sebuah program dengan multithreading programming, itu berarti kita membuat satu proses yang dapat menyelesaikan banyak fungsi. Kelebihannya ialah threads dapat berkomunikasi satu sama lain (shared memory), selain itu dengan ini program akan lebih responsive, saat menjalankan operasi yang panjang. Kekurangannya ialah permasalahan ketika mengakses shared objek atau memory. (source: stackoverflow.com)

Saya dapatkan dalam membangun sebuah aplikasi web ada dua hal yang harus diperhatikan, yaitu mengenai back-end dan front-end (belum termasuk yang lain-lainnya, namun itu salah dua utamanya). Pembuatan web dinamis, tidak akan lepas dari dua hal ini, karena ada yang mengendalikan server dan juga mengatur tampilan di user. Berbeda dengan web statis yang hanya berfokus pada tampilannya saja, namun jarang menemui web statis karena kebutuhan user di web sederhanapun makin beragam, terutama jika memerlukan database.

Untuk back-end, dengan menggunakan bahasa pemprograman Java. Dibangun atas 4 package, yaitu controller, modal, service pada awalnya (untuk util saya lupa apakah ini diajarkan pada basic atau ketika sudah memakai spring, saya jelaskan nanti). Pada controller kita berfokus pada pengendalian request dan respons, yang memberitahukan bahwa semua proses dikendalikan oleh controller ketika ada request masuk ke sistem dan mengembalikannya berupa respons ke depan. Request nantinya bisa bermacam-macam, namun yang paling dasar ialah berupa 'GET' atau link URL. Lalu model mempresentasikan data request, biasanya model merepresentasikan data di dalam database. Yang terakhir adalah service, dimana service ialah manipulasi request dan mengolah respons tertentu sesuai dengan kebutuhan. Kita buat gambaran umumnya mengenai back-end ini, misalnya saja ketika user meminta (request) data A lalu service yang mengolah data A ingin diolah seperti apa, Controller yang mengatur A akan masuk ke service yang mana, dan jika ada kaitannya dengan database controller akan memanggil model yang sesuai dengan kebutuhan si user dan mengirimkannya ke service yang terlibat dalam proses request user. Nantinya ketika request selesai maka akan menghasilkan respons sesuai permintaan, tergantung fungsi yang kita buat.

Lalu masuk ke front-end, di front-end banyak yang bilang jika lebih mudah dari back-end, nyatanya baik back-end maupun front-end sama-sama memiliki kendala masing-masing, semisal tampilannya harus ramah, minim loading, dapat dijalankan normal baik melalui komputer maupun mobile, dan lain lain. Dalam hal tampilan, biasanya pembuat web menggunakan bahasa HTML dengan menggunakan framework untuk mempercantik tampilannya, semisal bootstrap. Selain itu bisa juga dengan menambah beberapa fungsi untuk menjadikan halaman lebih komunikatif, seperti menambah fungsi javascript. Dalam javascript juga kita bisa menambah fungsi jquery, ajax, datatable, dll tergantung kebutuhan sehingga lebih memudahkan front-end developer dalam membangun tampilan depan yang komunikatif dan memiliki desain yang lebih menarik.

Cukup sekian untuk cerita kali ini mengenai pengalaman saya di bootcamp Xsis Academy kali ini, semoga bisa bermanfaat.

Senin, 30 Juli 2018

BootCamp Xsis Academy - up to evaluation I

Assalamualaikum warohmatullahi wabarakatuh,

selamat siang rekan-rekan semua, perkenalkan nama saya Aji, saya adalah salah satu peserta program bootcamp batch 157 di Xsis Academy, dengan teknologi Java (red, bahasa pemprograman untuk back-end-nya). Saya sudah menjalani program bootcamp selama kurang lebih sudah 5 minggu. Program bootcamp ini berjalan selama setidaknya hingga 7 minggu, dan pada minggu ke-dua dan minggu terakhir pada program ini dilakukan evaluasi. Pada 2 minggu pertama, peserta akan banyak diajarkan mengenai logika. Mulai dari logika basic hingga membuat pattern (bentuk-bentuk bangun datar, seperti segi empat, segitiga, bentuk bintang, etc). Sudah minggu ke-lima dan sudah memasuki minggu-minggu teknologi.

Awalnya saya mendapat panggilan interview PT Xsis Mitra Utama pada hari jumat melalui aplikasi lamaran saya pada salah satu portal lowongan kerja, dengan posisi Business Analyst. Dan saya mencoba untuk memenuhi panggilan interviewnya. Proses interviewnya sendiri, terdiri atas 2 kali interview, dan test tertulis. Untuk test tertulisnya sendiri, terdiri atas test kepribadian dan test teknikal (kalau tidak salah), dimana teknikalnya kita harus menjawab beberapa pertanyaan dasar mengenai logika dan menjawab display dari baris program yang di berikan. Untuk interviewnya sendiri terdiri dari dua sesi, oleh HRD dan tim teknikal (trainer). Saat di interview HRD saya diberitahukan jika saya tidak cocok dengan posisi yang di lamar dan disarankan untuk mengikuti program bootcamp. Lalu, pada interview tim trainer saya sudah diberitahukan jika saya memiliki kualifikasi yang cocok (padahal, jawabannya cuma asal tulis (笑)) dan diberitahukan jika senin akan dihubungi kembali. Setalah itu saya pulang dan menunggu panggilan kembali, dan ternyata pada hari selasa saya baru mendapat penggilannya kembali untuk proses offering letter. Pada awalnya saya mengira tidak lanjut lagi, namun ternyata saya lolos karena tidak mendapat panggilan lagi di hari yang di janjikan. Pada hari selasa saya mendapat pemberitahuan jika saya lolos dan mendapat kesempatan untuk mengikuti bootcamp dengan teknologi Java dan program ini mulai sekitar tiga minggu setelah mendapat offering letter.

Sejujurnya, selama kuliah kemampuan program saya termasuk biasa-biasa saja, tidak ada yang istimewa. Hanya bermodalkan bisa membaca dasar alur program, dan itu bahasa pemprograman PHP dan HTML, tiba-tiba berubah ke Java dan me have no idea what do I have to do! Awalnya juga, saya tidak tahu apakah saya akan bisa mengikuti, setidaknya bisa memahami apa yang dikatakan oleh orang lain mengenai java sepertinya sudah sangat bagus untuk saya, tapi tidak ada salahnya dicoba. Satu kelas saya terdiri atas 8 orang pada minggu pertama, dimana dua orang berasal dari jurusan Non-IT. Di hari pertama, alias kick-off. Kami dikenalkan dengan apa itu bootcamp dan apa yang kami dapatkan dan kami lakukan selama proses bootcamp ini. Serta di sisa hari kami sebatas perkenalan dengan apa yang akan kami pelajari, lebih tepatnya apa yang akan kami hadapi setelah hari itu.

Pada dua minggu pertama, ternyata materi mengenai logika. Selama dua minggu pertama ini juga banyak ketidaktahuan mengenai apa yang saya pelajari, but life must go on! Selain logika saya juga diajarkan beberapa materi mengenai pendukung teknologi Java, seperti OOP, ORM (Object Relational Mapping), Spring, GIT, dll. Dan pada hari-hari akhir sebelum evaluasi kami diajarkan mengenai SQL, dan kami menggunakan postGreSQL. Banyak yang saya dapat, terutama mengenai pemprograman berbasis objek terutama dasarnya karena memang dasarnya yang saya tidak terlalu paham karena selama kuliah hanya bermodalkan pemprograman prosedural / native. Sempat satu hari, kami diajarkan mengenai softskill, dan materinya mengenai komunikasi. Kami diajarkan mengenai seluk beluk mengenai komunikasi, dari mulai bagaimana cara berkomunikasi hingga menjadikan komunikasi sebagai media untuk menjalin relasi dengan orang lain.

Dan, tibalah pada hari evaluasi. Kami evaluasi hari itu dari jam sembilan pagi hingga sebelum masuk waktu isya, dan nampaknya termasuk cepat karena ada batch yang rumornya hingga jam sepuluh malam evaluasinya. Evaluasi terdiri dari 3 part, logika, SQL, dan teori. Pada evaluasi ini tahap logika memiliki bobot nilai paling besar, paling sulit, dan paling lama durasinya (dari jam 10 hingga jam 3, termasuk testnya sendiri berlangsung selama tiga jam setengah, dan sekitar dua jam extend/pengembangan). Waktu itu saya pesimis jika saya bisa lulus karena hanya bisa menyelesaikan dua soal secara sempurna.

Sampai di tahap akhir, yaitu pengumuman hasil evaluasi tahap I, dan ternyata *tetotet totet* saya dinyatakan lolos. Nampaknya memangnya sudah rezeki saya untuk tetap lanjut dimari, walaupun kemampuan saya masih belum ada apa-apanya dibanding yang lain. Dan saya banyak mendapat ilmu-ilmu baru selama saya disini, yang tadinya tidak paham apa-apa, setidaknya saya memahami beberapa istilah dan ilmu baru, sebut saja spring framework, hibernate, dan sebagaimnya. Dan hingga saat inipun saya masih perlu banyak belajar karena ilmu saya masih hanya menyentuh kulit ari dari java itu sendiri. Dan untuk teman-teman yang sudah pulang terlebih dahulu, semoga sukses di luar sana karena rejeki tidak hanya disini saja. ganbatte!!!

”七転び八起き”