content:
Baru saja ada seseorang yang bertanya kepada saya mengenai cara mendebug program buatannya. Sebentar saya merasa heran: masak nggak bisa pake debugger? lalu ketika saya mencoba mengingat-ingat, di sebagian besar buku dan kuliah mahasiswa tidak diajarkan mengenai bug yang umum, cara mencari bug, dan cara menggunakan debugger itu sendiri.
Kemampuan mencari bug di program sendiri ini juga menjadi dasar untuk mencari bug security. Kalo kita bisa menemukan kesalahan yang kita buat sendiri, akan lebih mudah untuk mencari kesalahan di program orang lain.
Bug
Bug adalah segala macam cacat dalam program. Bisa saja cacatnya hanya berupa tampilan yang sedikit salah, bisa crash, bisa berupa bug security (harusnya hanya bisa diakses user X, bisa diakses user Y), kadang bug tertentu tidak muncul sampai kasus ekstreem (misalnya jika jumlah user banyak maka akan out of memory karena ada memory leak).
Sumber bug bisa banyak, dari mulai salah design, salah implementasi, salah konfigurasi, dsb. Sebagai programmer, bug yang akan saya bahas adalah dari sisi implementasi (coding). Biasanya seorang programmer akan belajar sedikit demi sedkit jenis bug dari pengalaman. Semakin banyak coding, semakin banyak salah, semakin banyak belajar.
Beberapa jenis bug sangat umum di semua bahasa (kesalahan logika, kesalahan aritmatika, dsb), tapi bug tertentu hanya muncul di bahasa tertentu atau jika menggunakan framework tertentu. Jadi pengalaman coding tetap merupakan guru yang utama.
Contoh bug yang sederhana adalah lupa menginisialisasi atau mereset variabel. Biasanya jika program berjalan benar pertama kali, lalu ketika diulangi tidak benar hasilnya (dan benar lagi ketika aplikasi direstart) maka penyebabnya adalah lupa mereset variabel.
Contoh lain adalah menggunakan try catch secara malas, misalnya dengan membungkus seluruh fungsi dalam satu try except. Dengan cara ini, maka tidak jelas apa sumber error di sesungguhnya.
Contoh bug yang spesifik terhadap bahasa adalah bug manajemen memori di C. Kesalahan mengakses memori di C sangat mudah terjadi dan biasanya akan menyebabkan crash.
Source Control
Jangan heran juga kalau kadang bug baru muncul karena hal sepele, misalnya source code berubah karena keyboard tersenggol. Msalnya sebuah konstanta 1000 terdelete angka nol terakhirnya (atau bertambah satu), atau tanda “lebih besar sama dengan” terhapus menjadi lebih besar saja. Di sini penggunakan version control (yang populer saat ini: Git) sangat berguna, Anda bisa mereview segala perubahan pada source code.
Source control juga memungkinkan kita melihat sejarah perubahan secara keseluruhan. Bagi security researcher, ini sering menjadi ladang untuk mencari bug baru di software open source. Jika ada yang menambahkan fungsionalitas baru, maka kemungkinan ada bug baru yang muncul.
Unit Testing
Mencari dan membetulkan bug itu susah (baik bug sendiri maupun orang lain), jadi hal pertama yang perlu dicoba adalah: menghindari bug. Hal yang paling dasar adalah: kita perlu memecah program kita menjadi unit yang kecil (unit di sini berupa fungsi/kelas/method) dan menguji tiap bagian kecil tersebut. Istilahnya untuk ini adalah unit testing. Kita bisa menggunakan library tertentu untuk unit testing, atau panggil saja fungsi yang akan ditest.
Saya akan mengasumsikan Anda minimal sudah bisa membuat aplikasi yang bisa dicompile dan bisa dijalankan. Jika Anda masih salah syntax, salah opsi untuk mengcompile, dsb, sebaiknya ada mulai lagi dari nol dan mulai perlahan.
Dengan memecah program menjadi unit kecil dan mengujinya satu persatu, maka kesalahan umumnya bisa dilokalisasi: fungsi X ini masih salah. Pertanyaan berikutnya adalah: apa salahnya?
Asersi
Saat ini kebanyakan bahasa memiliki fitur assert. Fitur ini memungkinkan kita melakukan pengecekan ekstra (yang biasanya tidak akan dilakukan di versi produksi). Assert ini biasanya digunakan untuk menyatakan kondisi yang pasti harus benar, karena jika tidak benar maka titik program berikutnya akan error fatal.
Ini adalah contohnya:
assert(index >= 0);
val = values[index];
Jika index kurang dari 0, maka ada sesuatu kesalahan fatal di program kita (mungkin kesalahan logika, mungkin ada hal yang lupa ditangani). Jika asersi diaktifkan biasanya program akan berhenti dengan “Assertion error”.
Di berbagai bahasa assert ini bisa diaktifkan/nonaktifkan dengan opsi tertentu. Jadi dalam versi rilis kita bisa membuang berbagai pengecekan asersi ini.
Pesan dari Compiler dan Linter
Sebelum melihat jauh ke mana-mana, coba lihat dulu apakah ada warning dari compiler Anda. Contohnya untuk potongan kode C ini:
 int i;
 printf("i = %d\n", i);
Compiler memberitahu:
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
Bacalah pesan error dan warning dengan teliti. Di situ dijelaskan bahwa variabel i tidak diinisialisasi. Di C, variabel lokal nilainya tidak bisa diprediksi jika tidak diinisialisasi.
Selain compiler, biasanya ada program yang namanya linter untuk sebuah bahasa yang bisa memberi peringatan jika ada sesuatu yang dianggap tidak standar atau aneh. Anda bisa melihat daftar lengkap software semacam ini di Wikipedia. Sebagian software ini mudah sekali diinstall, dan sebagian lagi terlalu rumit, tapi beberapa IDE sudah memiliki linter built in. Saran saya: jika Anda masih belajar dan tools linter tersedia, pakailah dan perhatikan outputnya, jika terlalu sulit mensetupnya ya sudah lupakan saja untuk saat ini.
Print debugging
Lalu berikutnya cara paling primitif dalam debugging adalah dengan menuliskan nilai saat ini menggunakan: “print” “echo”, “printf” atau sejenisnya.
Contoh sederhana, misalnya kita punya conditional di Python seperti ini (melakukan regular expression matching):
if (re.search(PATTERN, x)): # do something
Lalu bagian aksi tidak pernah dieksekusi, atau cuma dieksekusi beberapa kali. Apakah Anda yakin patternnya benar? Coba print sebelumnya, jangan-jangan regexnya masih salah untuk input tertentu:
print "Input ", x, "Match result ", re.search(PATTERN, x)
Tentunya tidak semua aplikasi bisa punya layar yang menampilkan teks itu (contohnya Game, atau aplikasi grafik lain). Biasanya cara yang lebih baik adalah menggunakan library untuk logging yang saat ini sudah built in di banyak bahasa (misalnya ada modul logger di Python, java.util.logging di Java, dsb). Output logging bisa dikonfigurasi sedetail apa, dan outputnya ke mana (ke file, ke terminal, ke jaringan, dsb).
Logging tidak hanya untuk proses development. Banyak aplikasi menyediakan fungsi logging untuk mencatat berbagai hal yang berhubungan dengan aplikasi untuk mendebug jika ada masalah ketika dijalankan. Contohnya aplikasi bisa menampilkan di lognya: “berusaha melakukan koneksi database ke server XX port YY dengan username ZZ”, yang bisa diikuti dengan “Koneksi berhasil”, atau “Koneksi Gagal, pesan error: invalid username or password”.
Debugger
Debugger adalah tools untuk mencari bug. Di kebanyakan IDE (Integrated Development Environment), tools ini sudah built in dan mudah dipakai. Ada juga debugger stand alone, tapi biasanya ini lebih sulit bagi pemula.
Untuk menggunakan debugger pertama kita perlu mengeset breakpoint, yaitu titik berhenti sementara (break). Ketika kita mengklik “debug” maka debugger akan mulai menjalankan program sampai titik itu. Di beberapa bahasa, jika kita tidak mengeset breakpoint, maka program dihentikan sementara di titik awal.
Debugger paling dasar sekalipun akan memiliki fungsi untuk menampilkan nilai variabel saat ini. Dengan menggunakan ini kita biasanya tidak perlu mencetak dengan printf, tapi untuk mencetak objek yang kompleks, kadang tetap saja keluaran print masih lebih baik.
Fungsi debugger berikutnya adalah melakukan single stepping, artinya kita bisa menelusuri langkah demi langkah program. Contohnya jika kita memiliki source sederhana
diskon = 0.1

harga = 10000

harga = harga - (diskon * harga)
Kita bisa melakukan single step dan melihat nilai diskon dan harga di setiap langkah.
Jika kita memanggil fungsi lain, maka kita memiliki dua opsi, masuk ke dalam fungsi itu (istilahnya biasanya “step into”) atau memanggil fungsi itu, lalu segera meneruskan ke baris berikutnya (kita tidak peduli atau tidak ingin mendebug fungsi itu, istilah ini “step over”).
Jika fungsi yang akan kita cek sangat jauh atau hanya dipanggil di kondisi tertentu maka kita bisa menggunakan breakpoint. Biasanya di berbagai IDE ini bisa dilakukan dengan mengklik di samping nomor baris, dan akan muncul bulatan merah. Jika kita menekan tombol “continue”, maka program akan dijalankan dan akan dihentikan sementara di titik breakpoint tersebut.
Ada juga yang namanya “conditional breakpoint”. Artinya kita akan berhenti hanya pada kondisi tertentu. Misalnya kita ingin berhenti dalam loop setelah i > 100, karena di titik itu ada data yang aneh, maka kita bisa menambahkan kondiri “i>100”
Beberapa debugger memiliki fungsi yang menakjubkan, misalnya GDB mendukung reverse execution dan Visual Studio mendukung “Edit and Continue”. Untuk perubahan kecil, kita bisa mengubah program kita tanpa menghentikan debugger.
Di beberapa environment mensetup debugging tidak mudah, tapi ketika sudah terinstall ini akan sangat berguna sekali.
Debugger level Assembly
Untuk program biasa, Anda biasanya tidak akan pernah butuh mendebug sampai level ini, tapi jika Anda membuat eksploit atau berusaha mengeksploit binary, Anda perlu tahu ini (saya pernah membuat pengantar mengenai buffer overflow jika Anda tertarik).
Debugger di level assembly sebenarnya tidak berbeda jauh dari level source code. Jika kita punya source codenya, bahkan kita bisa melihat keduanya berdampingan. Di level assembly kita bisa menelusuri tiap instruksi dan juga melihat nilai register. Dengan melihat nilai register beserta flagsnya Anda bisa belajar banyak mengenai assembly.
Tools lain
Kadang debugger saja tidak cukup, tools analisis runtime seperti strace, ltrace, valgrind dsb akan berguna membantu menemukan bug terutama di kode native. Topik mengenai tools sudah pernah saya bahas sebelumnya.
Logika
Tools apapun tidak akan bisa membantu jika kita tidak punya logika yang baik. Dasar dari debugging adalah mencari kesalahan program, lalu membetulkannya agar berjalan sesuai harapan. Jadi di tahap paling awal, Anda sendiri harus tahu harapannya apa yang terjadi di setiap langkah.
Contohnya jika Anda mendebug algoritma mencari nilai maksimum, Anda perlu mengerti dulu seperti apa seharusnya algoritmanya dan apakah ketika dijalankan sudah sesuai harapan. Dalam kasus ini, di langkah pertama seharusnya nilai maksimum adalah elemen pertama, di langkah kedua, jika nilainya lebih besar maka elemen ini yang jadi elemen maksimum (dan jika tidak, maka elemen pertama yang tetap menjadi maksimum), dan seterusnya untuk elemen berikutnya.
Penutup
Sebenarnya bisa panjang sekali bahasan mengenai bug software, artikel ini hanya sekedar perkenalan. Anda sebaiknya mendalami berbagai tools supaya lebih produktif dalam bekerja, dari mulai tools source control, editor, debugger, linter, build system (Makefile, CMake, Ant, Maven, atau apapun), maupun tools lainnya.
Untuk Anda yang baru belajar memprogram: jika Anda menggunakan IDE, sesekali tekanlah tombol debug (atau menu debug) dan cobalah bereksperimen menggunakan fungsi dasar seperti step into, step over, dsb. Ini akan sangat membantu Anda dalam belajar pemrograman.
This entry was posted in teknis, umum on July 13, 2016 by admin.
Masuk Dunia Software Development
3 Replies
Banyak orang yang ingin memasuki dunia software development, dan bertanya ke saya: saya perlu belajar bahasa/teknologi yang mana saat ini? Ada yang sudah kerja di IT lalu ingin masuk software development (ada yang di departemen IT, ada yang jaga warnet, dsb). Ada juga anak SMU yang nanya bahasa dan teknologi apa yang perlu dipelajari duluan, dsb. Di sini saya akan berusaha membahas pendekatan pembelajaran yang mungkin, dan sekilas teknologi yang ada saat ini dan kelemahan/kelebihannya dari sudut pandang pemula.
Hal pertama yang perlu Anda pikirkan adalah: apa motivasi Anda? ada yang karena ingin uang lebih karena membuat aplikasi bisa menghasilkan uang banyak, atau Anda ingin sekedar berkontribusi untuk opensource (yang dasar motivasinya juga banyak). Motivasi ini biasanya akan menentukan jalan apa yang bisa dipilih untuk menjadi developer.
Saya dan teman-teman saya dari tempat kuliah (informatika ITB) memiliki kelebihan karena dipandang “pintar”, dan pasti bisa belajar teknologi apapun (dan biasanya memang begitu karena sudah diajari dasar berbagai macam hal ketika kuliah). Dari tempat kami pertama bekerja, ada yang mendalami dan menjadi ahli di bidang yang spesifik (misalnya telekomunikasi, atau enterprise development), ada juga yang bosan dan berpindah bidang. Jadi bagi kami tidak ada kewajiban untuk memilih apakah perlu belajar Java dulu atau PHP dulu, lalu mencari kerja yang sesuai. Untuk kebanyakan orang lain, tentunya pendekatan tersebut biasanya tidak berlaku, tapi ada beberapa pendekatan lain yang mungkin.
Inti dari pendekatan untuk masuk dunia sofware development adalah membuat sofware. Tentunya sulit mencari kerja tanpa pengalaman. Jadi bagaimana mencari pengalaman tanpa bekerja di sebuah software house atau menerima proyek sebagai freelancer?
Pendekatan pertama yang saya lihat adalah melalui dunia opensource. Salah satu orang terkenal adalah Con Kolivas, seorang ahli anastesi, yang tidak punya background computer science, tapi sangat tertarik pada linux dan menjadi developer kernel Linux. Tentunya kecerdasan dan dedikasi orang tersebut luar biasa, tapi tidak perlu kontribusi ke proyek yang sangat high profile untuk bisa masuk melalui dunia opensource. Cara yang paling sederhana adalah dengan membuat plugin untuk berbagai proyek open source, seperti misalnya wordpress, joomla, dan berbagai software lain. Membuat plugin tidak melibatkan proyek utama, jadi mudah dilakukan. Jika sudah cukup confident, Anda juga bisa mengirimkan patch/pull request untuk proyek utama.
Pendekatan berikutnya adalah membuat app sendiri untuk dipublish melalui dunia app store. Ketika masih demam app store, banyak orang nekat terjun membeli buku atau mengambil kursus untuk memprogram iOS atau Android. Sebagian dari mereka sangat berhasil dan menjadi jutawan (dalam USD), dan sebagian gagal. Tapi pendekatan ini bisa berhasil karena: kita bisa membuat aplikasi yang kita mau, tidak dibatasi waktu, dan ada targetnya (menjual app).
Jika Anda ingin membuat aplikasi web, maka pendekatan di atas bisa diganti dengan membuat web app sendiri. Terserah Anda jenis web yang ingin Anda buat seperti apa. Anda juga bisa mencari teman yang bisnis online dan mencoba membantu membuatkan web app untuk teman tersebut.
Pendekatan lainnya, yang menurut saya agak berisiko adalah dengan nekat belajar teknologi tertentu saja, dan berusaha mencari pekerjaan yang berhubungan dengan teknologi tersebut. Anda bisa meyakinkan orang bahwa Anda mengenal teknologi tertentu dan mengambil proyek freelance sesuai teknologi tersebut, atau berusaha mengambil sertifikasi khusus teknologi tertentu (misalnya Java atau .NET) dan berusaha langsung mencari kerja dengan menggunakan sertifikasi itu.
Anda bisa melihat di posisi Anda saat ini apa yang bisa Anda gali untuk memulai. Mungkin Anda masih SMU jadi tahu apa kebutuhan anak-anak SMU dan bisa membuat app yang sesuai. Mungkin Anda bekerja di perusahaan tertentu dan bisa melihat app apa yang bisa dikembangkan untuk perusahaan jenis itu.
Memilih teknologi yang dipelajari adalah hal yang sulit: teknologi berkembang sangat cepat meski dasarnya masih sama. Saya ambil contoh teknologi Java. Teknologi ini ada sejak pertengahan 1990an, dan masih ada dan dipakai sampai sekarang. Tapi teknologi Java (meliputi bahasa, API, runtime environment) sudah berubah banyak. Berbagai fitur bahasa Java ditambahkan setiap kali versi major baru dirillis. Berbagai framework dan tools muncul dan dan mati bergantian. Untuk mengcompile saja ada beberapa pendekatan (manual, ant, maven, gradle), ada berbagai framework sisi server yang selalu silih berganti (struts, spring, grails, dan puluhan lain yang tidak saya ingat), belum lagi berbagai library yang perlu dikuasai, misalnya library apa untuk membuat PDF, library apa untuk memproses gambar, dan berbagai library lain. Belajar bahasa Java saja tidak cukup untuk membuat kebanyakan aplikasi real world, kita tetap perlu belajar framework, library, dan tools yang spesifik untuk aplikasi tersebut.
Penjelasan di atas hanya untuk memberi gambaran bahwa belajar bahasa saja tidak cukup, itu hanya awalnya saja. Hal yang penting ketika mempelajari sebuah bahasa adalah benar-benar memahami fitur-fiturnya, supaya tidak bingung ketika fitur itu dipakai di framework atau library tertentu.
Sekarang saya akan bahas beberapa teknologi dasar yang menurut saya perlu diketahui, lalu berikutnya berbagai teknologi yang bisa Anda pilih, sesuai dengan keadaan Anda.
Teknologi dasar pertama adalah SQL. Ini bisa dipelajari terpisah dari bahasa manapun. Semua aplikasi butuh penyimpanan, dan meskipun teknologi NoSQL mulai banyak dipakai, tapi SQL masih digunakan di mana-mana. Aplikasi server memakai berbagai DBMS (Misalnya SQL Server, MySql, Posgres), aplikasi mobile memakai SQLite, bahkan aplikasi browser bisa memakai WebSQL (saat ini disupport oleh Chrome, Safari, Opera).
Teknologi berikutnya adalah HTML/CSS dan JavaScript. HTML dan CSS dasar diperlukan karena banyak sekali user interface dibuat berdasarkan HTML/CSS. Aplikasi web tentunya memakai teknologi itu, tapi banyak app di desktop dan app store juga memakai HTML/CSS untuk user interfacenya. Mengenal javascript juga akan sangat berguna untuk membuat web yang interaktif, dan bahkan sekarang JavaScript juga bisa dipakai memprogram sisi server dengan NodeJS. Salah satu hal praktis yang bisa dibuat dengan HTML/CSS/JS adalah dengan membuat extension untuk browser (contoh extension browser yang terkenal adalah AdBlock).
Jangan lupa pelajari berbagai tools yang ada, terutama command line yang bisa dipanggil program lain. Ini akan sangat berguna untuk mengurangi pekerjaan memprogram. Anda bisa menulis beberapa ribu baris untuk meresize berbagai format gambar, tapi Anda bisa lebih gampang memanggil program imagemagick dari dalam program Anda untuk melakukannya dengan satu baris saja.
Setelah itu Anda bisa memilih salah satu teknologi utama yang ingin Anda kuasai. Misalnya Anda bisa mendalami teknologi .NET (bisa melalui berbagai bahasa .NET misalnya C# atau Visual Basic .NET). Teknologi .NET saat ini cukup banyak dipakai di berbagai perusahaan besar. Teknologi ini sangat Microsoft centric, walau sekarang mulai dibuka sourcenya agar disupport di platform lain. Dari pengamatan saya, untuk teknologi Web tidak banyak perusahaan menengah atau kecil yang memakai .NET. Jika Anda memprogram aplikasi desktop untuk Windows, maka .NET merupakan pilihan yang bagus. Teknologi .NET bisa juga dipakai untuk memprogram mobile, terutama Windows Phone. Ada juga tools tambahan yang memungkinkan kita membuat program .NET yang jalan di Android ataupun iOS, tapi saya lebih menyarankan Anda memakai Java untuk Android dan Objective C atau Swift untuk iOS.
Alternatif teknologi .NET adalah Java. Java bisa dipakai untuk memprogram aplikasi desktop, mobile (Android), dan Web (Java 2 EE dengan berbagai teknologi dan framework yang ada). Cukup banyak juga enterprise yang memakai Java, apalagi karena Java ini bisa dideploy di berbagai OS, termasuk Linux (yang biaya lisensinya gratis). Dari pengamatan saya: bebereapa perusahaan besar memakai lebih dari satu teknologi (misalnya Java dan .NET sekaligus), karena mereka tidak ingin ditekan oleh vendor tertentu (kalau vendor berusaha menjual harga mahal, maka bisa bilang: saya switch aja deh ke teknologi yang satu lagi).
Anda bahkan bisa menjadikan HTML/JS/CSS menjadi teknologi utama Anda karena sekarang semua jenis aplikasi bisa diprogram dengan HTML/JS. Anda bisa membuat mobile app dengan Phonegap/Cordova, bisa membuat web app dengan menggunakan nodejs di sisi server.
Di sisi open source, ada berbagai alternatif. Yang saya maksud dengan open source di sini adalah open source yang tidak didukung perusahaan besar (Java dan .NET sekarang sudah open source juga). Teknologi PHP masih dipakai diberbagai perusahaan besar (misalnya facebook), tapi sekarang sebagian besar sudah diprogram menggunakan framework tertentu (Larave, CodeIgniter, Nette, dan ratusan framework lain), tidak seperti dulu di mana orang memprogram langsung PHP prosedural tanpa framework.
Meski di luar negeri sudah sangat populer, sepanjang pengetahuan saya penggunaan teknologi Python, Ruby dan lain-lain masih kurang di Indonesia. Mungkin karena tidak ada vendor tertentu yang berusaha menjual produk ke perusahaan (tidak seperti Java atau .NET) sehingga ini masih kurang populer. Jika Anda mau mengambil berbagai pekerjaan freelance dari luar negeri.
Jika Anda spesifik ingin membuat aplikasi iOS, maka sebaiknya Anda belajar Objective C atau Swift. Bahasa Swift lebih sederhana, tapi masih sangat berkembang (terutama sepanjang tahun lalu). Bahasa Swift ini cukup sederhana, tapi sangat Apple centric, dan ilmunya tidak berlaku untuk platform lain.
Selagi belajar teknologi tersebut, Anda sebaiknya belajar berbagai macam hal yang berhubungan dengan development, misalnya versioning (sekarang yang populer menggunakan Git), testing (tergantung teknologi apa yang Anda pakai), deployment (misalnya dengan docker), tools untuk setup development (misalnya dengan Vagrant), IDE (tergantung bahasa yang ingin dipakai). Teknologi-teknologi ini adalah pelengkap yang penting dipelajari, dan lebih mudah dipelajari sambil praktik.
Pertanyaan berikutnya adalah bagaimana cara belajarnya? Anda bisa membeli buku lalu membacanya (silakan dibandingkan sendiri, karena buku yang dianggap bagus oleh satu orang dianggap jelek oleh orang lain), Anda juga bisa mengambil kursus online baik di Coursera, EDX, Udemy, maupun yang lain. Jika Anda suka pendekatan video, banyak sekali tutorial gratis di youtube.
Setelah yakin dengan kemampuan Anda, Anda juga bisa mengambil berbagai sertifikasi. Saya sendiri tidak pernah mengambil sertifikasi pemrograman, jadi kurang tahu bagaimana pandangan perusahaan terhadap berbagai sertifikasi yang ada.
Keahlian yang paling dibutuhkan dalam memprogram adalah mencari jawaban atas error yang ditemui. Keahlian Anda mencari dengan Google akan sangat berguna. Situs stack overflow juga akan sangat membantu dalam menjawab berbagai pertanyaan Anda. Satu hal yang penting adalah: pahami berbagai istilah yang ada, ini akan sangat memudahkan ketika Anda mencari sesuatu menggunakan search engine.
Selamat memasuki dunia development software.
This entry was posted in umum on July 19, 2015 by admin.
Membuat Bot Telegram
43 Replies
Messenger telegram masih kurang populer di Indonesia, padahal Telegram memiliki banyak kelebihan dibanding messenger lain, misalnya: lebih cepat, bisa diakses via web, sinkronisasi pesan, dsb. Salah satu fitur yang baru diperkenalkan oleh Telegram adalah bot. Bot adalah software yang secara otomatis merespon pesan yang kita berikan.
Setelah saya membuat bot Bot Alkitab, beberapa orang bertanya bagaimana caranya membuat bot. Dengan harapan Telegram jadi lebih populer, saya tuliskan di sini dasar pembuatan bot.
Sebelum membaca Artikel ini, silakan baca dulu artikel dari telegram yang memperkenalkan soal bot, lalu bereksperimen lah dengan bot-bot yang sudah ada, supaya bisa mengerti fitur bot dan interaksi dengan bot:
https://telegram.org/blog/bot-revolution
Mendaftarkan Bot
Sekarang setelah siap membuat bot, langkah pertama adalah mendaftarkan nama bot kita. Ini dilakukan dengan menggunakan BotFather.
Perintah yang perlu digunakan adalah /newbot. Perlu diperhatikan bahwa semua bot harus memiliki akhiran “Bot”. Setelah selesai, kita akan mendapatkan token, semacam ini: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Token ini tidak boleh disebar (karena orang lain bisa mengambil alih bot Anda).
Setelah didaftarkan, kita bisa langsung menambahkan bot di daftar teman kita.
Ketika mulai chat, ada tombol “Start”
Jika kita tekan itu, yang terjadi adalah kita mengirimkan perintah “/start” ke bot (semua perintah bot dimulai dengan “/”).
Tapi kita belum menulis kode untuk bot kita, jadi bot kita belum bisa membalas apapun.
Menerima Pesan
Bot bisa menerima pesan dengan dua cara: polling dan webhook.
Polling artinya kita yang akan meminta pesan ke server telegram. Kira-kira begini: eh ada nggak pesan buat bot saya, kalo nggak ada, bilang aja nggak ada setelah N detik ya. Kalau dalam N detik ada pesan masuk, langsung berikan ke saya pesannya.
Cara kedua adalah dengan webhook. Kira-kira begini: ini saya punya URL, kalau ada pesan masuk, segera posting ke URL ini ya, nanti saya proses. URL ini harus HTTPS.
Telegram hanya mau mengantarkan pesan dengan salah satu cara di atas, tidak bisa keduanya, defaultnya adalah cara pertama.
Cara pertama cocok jika server dijalankan secara internal. Misalnya jika dijalankan di raspberry pi di rumah. Kita tidak perlu IP publik, tidak perlu punya domain, tidak perlu setup HTTPS, dsb. Cara ini agak sedikit lebih lambat dari cara kedua jika penggunanya banyak.
Cara kedua cocok jika Anda sudah punya web server eksternal dan sudah punya HTTPS, atau memakai layanan yang sudah memakai HTTPS (contohnya Google App Engine).
Pertama saya bahas cara polling karena ini sangat praktis ketika development. Pertama kita coba akses pesan yang diterima bot. Kita bisa meminta menggunakan browser seperti ini:
https://api.telegram.org/botTOKEN/getUpdates
Contohnya seperti ini:
Sebenarnya ada beberapa parameter ekstra yang bisa kita tambahkan. Pertama adalah timeout: menyatakan berapa lama kita akan menunggu sampai ada pesan. Kedua adalah limit yang menyatakan berapa pesan yang ingin kita terima (max 100). Dan ketiga yang penting adalah offset.
Jika Anda coba refresh URL sebelumnya (tanpa memberikan offset), maka telegram tidak tahu apakah Anda sudah memproses pesan itu atau tidak (batasnya 24 jam). Untuk memberi tahu telegram bahwa pesan tadi sudah kita baca, kita perlu memberikan offset berupa update_id terakhir plus 1, jadi untuk mendapatkan pesan-pesan setelah pesan di atas, saya bisa menambahkan offset seperti ini (sekalian saya berikan contoh memberikan timeout dan limit):
https://api.telegram.org/botTOKEN/getUpdates?offset=142757037&timeout=2&limit=1
Hasil kembalian getUpdates seperti ini:
{
 "ok":true,
 "result":[
 {
 "update_id":142757036,
 "message":{
 "message_id":3,
 "from":{
 "id":24912310,
 "first_name":"Yohanes",
 "last_name":"Nugroho",
 "username":"yohanesn"
 },
 "chat":{
 "id":24912310,
 "first_name":"Yohanes",
 "last_name":"Nugroho",
 "username":"yohanesn"
 },
 "date":1436950746,
 "text":"\/start"
 }
 }
 ]
}
Isi “result” adalah array of message (ada berbagai jenis message, bisa teks, video, dokumen, dsb, tapi dalam tutorial ini yang akan saya tangani hanya yang berisi “text”. Anda bisa membaca API Telegram untuk menangani jenis pesan yang lain.
Untuk membalas pesan, kita bisa menggunakan sendMessage. Anda bisa mencoba di browser (menggunakan token Anda) seperti ini (lihat chat_id di JSON di atas):
https://api.telegram.org/botTOKEN/sendMessage?chat_id=24912310&text=hello
Jika kita ingin menampilkan pesan sebagai balasan dari message tertentu, kita bisa menambahkan reply_to_message_id. Misalnya di atas tercantum message_id adalah 3:
https://api.telegram.org/botTOKEN/sendMessage?chat_id=24912310&text=hello&message_id=3
Jika kita menggunakan Python, kita bisa mendapatkan pesan updatenya dengan library requests (urllib juga bisa, tapi requests lebih enak). Karena URL requestnya sama semua prefixnya, saya membuat fungsi request_url untuk mempersingkat. Berikutnya agar singkat, saya hanya akan membahas PHP saja (dan Anda tetap bisa dengan mudah menerjemahkan ke Python).
def request_url(method):
    return  "https://api.telegram.org/bot"+TOKEN+"/" + method

def getUpdates(offset, limit=100, timeout=100):
    r = requests.get(request_url("getUpdates"),
                     params={"offset":offset,
                      "limit": limit,
                      "timeout": timeout
                      } )
    #asumsi semuanya OK
    result = r.json()
    if result["ok"]:
        return result["result"]
    return []
Kode yang sama di PHP:
<?php

include("token.php");

function request_url($method)
{
	global $TOKEN;
	return "https://api.telegram.org/bot" . $TOKEN . "/". $method;
}

function get_updates()
{
        $resp = file_get_contents(request_url("getUpdates"));
        $update = json_decode($resp, true);

?>
Kerangka sebuah program PHP command line (metode polling) yang menangani pesan adalah seperti ini:
<?php
include("token.php");

function request_url($method)
{
	global $TOKEN;
	return "https://api.telegram.org/bot" . $TOKEN . "/". $method;
}

function get_updates($offset)
{
	$url = request_url("getUpdates")."?offset=".$offset;
        $resp = file_get_contents($url);
        $result = json_decode($resp, true);
        if ($result["ok"]==1)
            return $result["result"];
        return array();
}

function send_reply($chatid, $msgid, $text)
{
    $data = array(
        'chat_id' => $chatid,
        'text'  => $text,
        'reply_to_message_id' => $msgid

    );
    // use key 'http' even if you send the request to https://...
    $options = array(
    	'http' => array(
        	'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        	'method'  => 'POST',
        	'content' => http_build_query($data),
    	),
    );
    $context  = stream_context_create($options);

    $result = file_get_contents(request_url('sendMessage'), false, $context);
    print_r($result);
}

function create_response($text)
{
   return "definisi " . $text;
}

function process_message($message)
{
    $updateid = $message["update_id"];
    $message_data = $message["message"];
    if (isset($message_data["text"])) {
	$chatid = $message_data["chat"]["id"];
        $message_id = $message_data["message_id"];
        $text = $message_data["text"];
        $response = create_response($text);
        send_reply($chatid, $message_id, $response);
    }
    return $updateid;
}

function process_one()
{
	$update_id  = 0;

	if (file_exists("last_update_id")) {
		$update_id = (int)file_get_contents("last_update_id");
	}

	$updates = get_updates($update_id);

	foreach ($updates as $message)
	{
     		$update_id = process_message($message);
	}
	file_put_contents("last_update_id", $update_id + 1);

}

while (true) {
	process_one();
}

?>

Anda bisa mengakses sourcenya di sini:
https://gist.github.com/yohanes/987e1d48cbca9fde9377
Perhatikan bahwa ini perlu dijalankan di command line seperit ini:
$ php telegram-poll.php
Dan selama program masih berjalan, maka pesan yang masuk akan dibalas. Jika dijalankan di web server, maka akan timeout setelah beberapa detik/menit.
Isi file token.php hanyalah seperti ini:
<?php
$TOKEN="TOKENANDA";
?>;
Untuk metode webHook, perbedaannya hanya pada fungsi get_updates, dan process_one tidak diperlukan, loop while juga tidak diperlukan, karena pesan akan dikirim satu per satu dengan POST. Kita cukup membaca POST yang masuk (dengan membaca php//:input), dan mendecode JSON-nya.
<?php
//bagian awal sama dengan sebelumnya

$entityBody = file_get_contents('php://input');
$message = json_decode($entityBody, true);
process_message($message);

?>

Source lengkap di:
https://gist.github.com/yohanes/3181a5424d10ea5e2429
Untuk menggunakan methode webHook, Anda harus melakukan beberapa hal:
Mempersiapkan URL HTTPS
Menset urlWebhook
Untuk bagian pertama: Anda perlu memiliki hosting yang mendukung HTTPS, Anda juga bisa memakai layanan cloudflare.com yang otomatis membungkus web Anda dengan https. Berikutya kita perlu mensetup web hook. Contohnya jika URL file php tersebut adalah:
http://cintaprogramming.com/xx.php
maka kita set dengan cara mengunjungi (menggunakan browser atau curl):
https://api.telegram.org/botTOKEN/setWebhook?url=https://cintaprogramming.com/xxx.php
Anda akan mendapatkan balasan:
{"ok":true,"result":true,"description":"Webhook was set"}
Jika ingin kembali menggunakan metode polling, maka set URL menjadi kosong:
https://api.telegram.org/botTOKEN/setWebhook?url=
Anda akan mendapatkan balasan:
{"ok":true,"result":true,"description":"Webhook was deleted"}
Atau jika memang belum diset:
{"ok":true,"result":true,"description":"There is no webhook to delete"}
Berikutnya terserah Anda bagaimana ingin memproses data masukan dari pengguna, misalnya bisa query ke database, bisa melakukan komputasi, dsb.
Jika kode Anda jalan di versi lokal/polling, tapi tidak ketika menggunakan webhook, maka Anda perlu mendebug. Pertama test apakah: webhook dipanggil oleh telegram (bisa dicoba dengan menuliskan isi $entityBody ke file). Kedua cek apakah Anda bisa memanggil send_reply. Beberapa hosting mematikan file_get_contents untuk mengakses HTTP/HTTPS, atau mendisable modul SSL (untuk kasus ini, mungkin harus diganti memakai modul curl) . Coba skrip paling sederhana di atas sebelum menambahkan kode custom Anda untuk reply (misalnya Anda mengakses MySQL, siapa tahu kode Anda yang error karena salah database atau salah query).
Saran saya: gunakan polling dulu sampai yakin sudah benar, setelah itu baru gunakan webhook.
Contoh ini sebenarnya adalah penyederhanaan sebuah kamus. Seharusnya bot ini membalas dengan definisi dari database, tapi di contoh ini bot selalu membalas dengan “definisi ” + KATA.
Sebuah bot bisa memiliki banyak perintah yang diawali dengan “/” (slash), terserah pembuat bot yang mendefinisikan. Misalnya jika kita membuat bot cuaca, kita bisa membuat perintah: “/cuaca NAMAKOTA” (untuk mendapatkan cuaca saat ini) atau “/ramalan NAMAKOTA” (untuk mendapatkan ramalan seminggu). Untuk menangani perintah-perintah ini kita bisa menggunakan parsing teks sederhana. Contoh parsing yang bisa dilakukan split teks menjadi kata-kata: jadikan kata pertama menjadi lower case, dan trim (hapus spasinya), lalu cek apakah sama dengan “/cuaca” atau “/ramalan”. Dan berikutnya lakukan aksi sesuai dengan perintahnya.
Setelah kita memiliki perintah-perintah tersebut. Kita bisa mendaftarkan perintahnya ke BotFather supaya Telegram bisa melakukan autocomplete perintah ketika user mengetikkan karakter /.
Demikian tutorial singkat bot Telegram. Jika ada pertanyaan, silakan tinggalkan di bagiann komentar, dan akan berusaha saya jawab (atau mungkin akan saya buatkan tutorial bagian kedua untuk menjelaskan lebih detail).
This entry was posted in teknis, tutorial on July 18, 2015 by admin.
Programming dan Penetration Testing
2 Replies
Pentest adalah kegiatan menyerang sistem komputer untuk mencari kelemahan security, atau dari Wikipedia:
A penetration test, or the short form pentest, is an attack on a computer system with the intention of finding security weaknesses, potentially gaining access to it, its functionality and data.
Pentesting dilakukan atas permintaan client, jadi bukan hacking ke sembarang website. Contoh sederhana pentesting seperti ini: coba jebol website perusahaan kami, apakah ada bug securitinya? atau: coba pergi ke lobi atau tempat parkir perusahaan kami, apakah ada WIFI terbuka, apakah dari situ bisa masuk ke sistem internal perusahaan kami?. Kami punya app mobile, apakah bisa “dijebol” (misalnya apakah kita bisa membuat request ke server supaya memberikan data user lain).
Karena ini blog mengenai programming, saya tidak akan membahas banyak mengenai pentesting, hanya ingin menunjukkan betapa keahlian programming bisa sangat berguna untuk pentesting. Dari contoh yang saya sebutkan di atas, scope dari pentesting bisa sangat banyak, mulai dari yang on site: datang dan mengecek kabel, wireless network, dsb, sampai ke level network dan aplikasi (baik web, desktop, mobile). Saya hanya ingin membahas aspek programming, untuk mendorong peminat bidang security agar mau belajar programming.
Perkiraan saya mungkin sekitar 70% pekerjaan pentesting bisa dilakukan dengan tools yang sudah tersedia, baik yang open source maupun komersial, tanpa butuh keahlian scripting ataupun programming. Sisanya bakal butuh programming. Bahkan saya yakin 100% beberapa jenis bug tidak bisa ditemukan tanpa keahlian programming.
Kemampuan programming minimal yang dibutuhkan adalah bisa mengcompile atau menjalankan program dalam berbagai bahasa. Kadang di sebuah server tidak tersedia tool tertentu, jadi kita perlu mengcompile dari source karena OS di server itu sudah terlalu lama (misalnya masih banyak yang memakai RHEL 4). Jika tidak tahu bagaimana menjalankan sesuatu, maka sudah game over di titik ini. Pernah saya baca di blog pak Budi Rahardjo mengenai kompetisi CDC (Cyber Defense Competition):
Salah satu soal yang disampaikan adalah men-decode data base64 yang kemudian menjadi skrip Python, yang tinggal dijalankan. Lucunya ada banyak yang gak tahu Python. ha ha ha. Mereka kebingungan menjalankannya. Padahal tinggal “python namaskrip.py”. Mereka tidak perlu tahu bahasanya. hi hi hi. Ada yang pura-pura tahu dan me-rename menjadi bahasa C, menambahkan “#include ” dibagian awalnya, kemudian mencoba compile. Ya gak bakalan jalanlah. he he he.
Kejadian semacam di atas itu yang mendorong saya menulis tulisan seperti ini.
Keahlian lain adalah mencari program atau menulis program kecil dalam bahasa tertentu yang kadang tidak terlalu umum atau sudah kuno. Contoh: jika sebuah web server bisa menerima upload file, dan web server itu hanya bisa menjalankan ASP versi klasik, ya kita harus bisa mencari shell dalam ASP Classic (bukan ASP.NET). Berbeda dengan software development biasa di mana kita bisa memilih bahasa pemrograman atau teknologi yang ingin kita pakai, di sini kita dipaksa mengikuti apa yang tersetup di server.
Jika beruntung, sudah ada orang yang menuliskan program standar (web shell) yang memiliki fungsi seperti “file manager/file upload” (untuk mengupload tool tambahan), “shell” (untuk mengeksekusi command apapun di sisi server), dan “database shell” (untuk mengirimkan query apapun ke database). Jika tidak beruntung, atau ada batasan tertentu di server, mungkin kita perlu membuat tool baru. Contoh sederhana: jika server membatasi upload hanya 100 KB saja, sementara binary nmap yang ingin diupload (plus librarnya) besarnya beberapa megabyte, maka kita perlu membuat program kecil untuk mengupload parsial lalu menggabungkan hasil uploadnya.
Keahlian membaca kode dalam berbagai bahasa juga diperlukan. Dalam beberapa kasus, kita bisa mendapatkan akses ke source code aplikasi web (karena bug, karena salah konfigurasi, karena lupa ikut mengupload direktori “.git”, dsb). Setelah punya source code, kita bisa menemukan bug tambahan dengan membaca kodenya. Sebagai pentester, tentunya Anda tidak akan bilang: wah ternyata dia pake Python, saya nggak tau cara ngehack aplikasi web dengan Python.
Dengan membaca source code, hal paling minimal adalah mengerti di mana file konfigurasi supaya bisa mengekstrasi user/password database, berikutnya adalah mencari bug-bug tambahan seperti SQL Injection, hidden functionality, dsb.
Dengan maraknya OS Mobile, sekarang pentesting juga masuk ke ranah mobile. Di sini ilmu reverse engineering sangat diperlukan. Untuk OS Android, reverse engineering bisa dilakukan dengan decompiler yang bisa mengembalikan kode Java ke bentuk semula (kecuali sudah diobfuscate), jadi kembali keahlian membaca kode diperlukan.
Setelah mengetahui kodenya, biasanya kita perlu melakukan fuzzing request, alias mencoba-coba berbagai kemungkinan request. Untuk aplikasi berbasis HTTP, kita masih bisa memakai proxy (misalnya ZAP) dan mengubah-ubah request untuk tahu reaksi server (bagaimana jika nilaiya negatif, bagaimana jika nama file mengandung “../”, dsb). Tapi untuk aplikasi yang memakai protokol khusus via SSL, kita perlu memahami, lalu mengimplementasikan ulang client sendiri yang bisa melakukan fuzzing.
Pengetahuan mengenai best practice dalam sebuah bahasa juga diperlukan dalam membuat aplikasi yang aman. Contoh: untuk menghasilkan bilangan random untuk kriptografi di Java gunakan SecureRandom (jangan Random). Di Android untuk melakukan koneksi SSL menggunakan socket, jangan gunakan SSLFactory tapi gunakan SSLCertificateSocketFactory, dsb. Pekerjaan pentester cukup mudah di sini, hanya menyarankan saja, dan programmer yang akan mengimplementasikan saran tersebut.
Saya sudah banyak menemukan bug yang memerlukan banyak coding. Ada bug yang terkait dengan penyimpanan password (terenkripsi) yang disimpan lokal di device yang seharusnya aman, tapi ternyata saya bisa membuat tool yang cukup optimal untuk bisa mengcrack dalam 1 jam karena banyak hal kecil yang lupa dilakukan oleh programmer (lupa menginisialisasi IV, memakai EBC). Saya pernah menemukan bug fatal yang berhubungan dengan menggunakan algoritma hashing yang tidak aman (tidak memakai Cryptographic Hash Function). Dengan tools yang tersedia saja, tanpa pengetahuan programming (dan kriptografi), kedua bug itu tidak akan bisa ditemukan.
Jadi saran saya: untuk mereka yang tertarik di bidang security, pelajari juga bagian programmingnya. Ini saya masih bicara level pentesting yang kebutuhkan programmingnya masih minimal. Di bagian lagin security, keahlian programming lebih dibutuhkan lagi, misalnya membuat exploit butuh pemahaman yang lebih mendalam tentang sistem dan low level programming.
Dalam full security audit, selain pentesting kadang client menginginkan juga review kode mereka, jadi kita perlu bisa membaca, menjalankan, dan memberi saran yang berkaitan dengan security.
Buat saya sendiri sebagai programmer, saya jadi rajin membaca mengenai best security practice untuk berbagai bahasa dan framework. Jika ada yang bertanya: buat apa sih belajar bahasa X atau teknologi Y, saya bisa bilang: mungkin suatu saat ada sistem yang memakai teknologi itu yang perlu saya test.
This entry was posted in bahasa, security, umum on May 14, 2015 by admin.
Menjual Aplikasi di Appstore
1 Reply
Dulu waktu saya masih kuliah, menjual aplikasi tidaklah semudah sekarang. Waktu saya kuliah, pemrograman mobile masih cukup baru. Menjual aplikasi baik desktop maupun mobile juga tidak mudah (sekarang berbagai metode pembayaran sudah tersedia). Biasanya yang saya kerjakan adalah mencari proyek.
Saya punya saran bagi mahasiswa yang saat ini masih kuliah: cobalah membuat aplikasi, minimal satu dan menjualnya di sebuah application store. Mengapa saya menyarankan orang menjual aplikasi di sana? Tujuan utamanya adalah untuk belajar. Menurut saya ada banyak sekali yang bisa dipelajari dari menjual aplikasi di app store. Pelajaran ini bukan cuma dari sisi programming, tapi keseluruhan software development lifecycle.
Catatan: Biasanya orang-orang mengasosiasikan “App Store” dengan apple, dalam konteks artikel ini “App Store” adalah sembarang application store (misalnya Apple App Store, Nokia OVI, BlackBerry Appworld, Google Play, dsb).
Sejak “demam app store” banyak orang (termasuk non programmer) yang belajar memprogram dan berusaha membuat aplikasi yang laris agar menjadi jutawan. Memang mungkin menjadi jutawan dengan menjual aplikasi, tapi saran saya: jangan jadikan itu tolok ukur kesuksesan. Anda bisa tetap sukses belajar meskipun tidak menjadi jutawan dari appstore.
Apa saja yang bisa dipelajari dari menjual aplikasi di app store? pertama dari sisi programming: Anda belajar bagaimana memoles dan mempaketkan aplikasi supaya bisa dijual. Anda akan belajar membuat aplikasi yang layak pakai oleh end user. Kadang untuk proyek tertentu (misalnya proyek pemerintah), aplikasi yang dibuat asal jadi, asal memenuhi spesifikasi.
Ketika Anda punya pengguna, Anda akan belajar bagaimana berinteraksi dengan pengguna. Anda akan menghadapi bug report, feature request, pujian, dan juga cacian. Bahkan jika Anda membuat game yang amat bagus sekalipun, bisa ada yang protes dan memberi review 1 bintang karena mereka “stuck di level 5”. Jika aplikasi Anda cukup kompleks, akan ada bug yang hanya muncul di user tertentu, dan Anda belajar mendebug bersama pengguna aplikasi Anda.
Setelah ada perbaikan, Anda akan bisa merilis update software Anda (meluncurkan versi baru). Setelah Anda merilis beberapa versi, Anda akan sadar perlunya memakai versioning system. Bagi Anda yang belum memakai versioning system (Git, CVS, dsb), maka ini saat yang baik untuk belajar.
Setelah merilis aplikasi, jangan berhenti dan menunggu. Belajarlah mempromosikannya. Pertama: buatlah website untuk aplikasi Anda, bisa berupa halaman blog, atau mungkin Facebook page. Anda perlu belajar membuat teks dan screenshot yang menarik dan bahkan mungkin perlu membuat video. Setelah itu promosikan di media sosial seperti Twitter dan Facebook. Hubungi juga situs-situs komunitas dan mailing list komunitas. Anda akan belajar bagaimana mengirim email mempromosikan produk Anda.
Di titik ini Anda bisa mengetahui apakah Anda tertarik pada marketing atau tidak. Anda mungkin akan bereksperimen dengan harga yang berbeda, bereksperimen menggunakan iklan, menggunakan in app purchase, dan sebagainya. Jika Anda membuat aplikasi bagus, memasarkan dengan baik, dan beruntung, Anda bisa mendapatkan pendapatan lumayan dari app store ini dari mulai sekedar puluhan ribu rupiah sampai puluhan juta tiap bulannya.
Saya menambahkan kata “beruntung” karena kadang memang butuh keberuntungan supaya aplikasi sukses di pasaran. Kata “beruntung” juga sebagai penghibur bahwa kadang-kadang aplikasi yang sudah sangat bagus dan dipasarkan dengan mati-matian masih bisa gagal di appstore. Sedangkan aplikasi sangat sederhana kadang bisa sangat sukses. Jadi kadang bukan kesalahan pembuat aplikasi dan bukan kesalahan marketing. Bisa saja di saat yang bersamaan, ada aplikasi serupa yang sedang dipasarkan perusahaan yang lebih besar.
Tergantung app store mana yang Anda pilih, Anda mungkin harus menandatangani perjanjian tertentu. Anda akan belajar mengenai revenue sharing, pajak, sistem pembayaran, dsb. Anda akan belajar bahwa ada app store yang harganya sama di seluruh dunia (misalnya harga aplikasi 0.99 USD akan sama di manapun juga di dunia), tapi ada juga yang memvariasikan harga tergantung wilayah pembeli (misalnya: di Nokia Ovi Store harga 0.99 EURO di Eropa bisa menjadi 0.3 USD di India).
Sebagai perbandingan: mencari proyek software itu gampang-gampang susah, baik dari proses mencari, mengerjakan, sampai mengejar pembayarannya. Appstore itu sangat gampang: Anda bisa masuk ke app store dengan gratis (misal Blackberry), sekali bayar (25 USD untuk Google Play), atau per tahun (99 USD/tahun, Apple AppStore). Anda bisa langsung menjual app dengan mudah, tidak ada yang memburu deadline, pembayaran juga langsung masuk rekening (tidak perlu menagih).
Selain mendapatkan pengalaman, Andaikan tidak ada yang membeli aplikasi Anda, Anda tetap memiliki portfolio. Sudah banyak sekali penawaran pekerjaan dan proyek yang saya terima karena ada orang yang melihat aplikasi yang saya buat. Ini cukup wajar. Misalnya ada seseorang yang ingin membuat aplikasi resep masakan, mereka akan mencari orang yang sudah pernah membuat aplikasi sejenis itu.
Saya sendiri kurang sukses secara langsung dari appstore, tapi cukup banyak mendapat tawaran proyek karena aplikasi yang saya pajang di appstore. Walau demikian, secara langsung dari appstore ada pendapatan ekstra belasan sampai puluhan dollar sebulan yang cukup untuk membayar hosting, atau kadang-kadang membeli satu dua barang online untuk dioprek. Dapet 5 USD? cukup buat beli Arduino atau makan siang yang enak, 35 USD? bisa beli Raspberry Pi, atau duitnya bisa juga dipinjamkan jika tidak tau ingin diapakan.
This entry was posted in umum on February 13, 2015 by admin.
Mengajarkan pemrograman pada anak-anak
1 Reply
Anak saya yang sekarang ini usianya 4 tahun sudah mulai saya ajari memprogram dengan tutorial dari code.org. Mulanya anak saya iseng meminjam laptop saya, dan dia bermain-main, katanya dia sedang “mrogram”, jadi ternyata dia mau “play pretend” jadi programmer. Karena code.org menyediakan pelajaran untuk usia 4+, saya perkenalkan dia pada situs tersebut, dan dia sangat menyukainya.
Mungkin sebagian dari Anda bertanya-tanya: ngapain sih anak-anak diajari programming? Apa gunanya? kenapa nggak diajarin nanti aja? Nanti jadi orang yang lebih dekat dengan mesin daripada manusia lain?
Sejak 2 tahun yang lalu, saya sudah membeli dan membaca buku Seymour Papert, yang berjudul, Mindstorms: Children, Computers, And Powerful Ideas. Sebenarnya saya ingin menuliskan review yang panjang mengenai bukunya, tapi sudah ada orang lain yang menuliskannya dengan cukup detail. Jadi akan saya ceritakan secara singkat saja.
Buku ini ditulis tahun 1980 dan direvisi tahun 1993. Buku ini ditulis oleh pionir AI, yang pernah bekerja sama bertahun-tahun dengan Jean Piaget, seorang psikolog dan filosofer yang terkenal karena studi epistemologi pada anak-anak (epistemologi = teori mengenai pengetahuan). Jadi buku ini dituliskan oleh orang yang benar-benar mengerti ilmu perkembangan anak, dan yang benar-benar mengerti mesin.
Belajar memprogram adalah belajar membuat instruksi yang logis dan terperinci, jadi ini melatih logika anak. Ketika belajar membuat program, kita akan membuat kesalahan, di sini kita akan belajar debugging. Ketika belajar memprogram, seseorang tidak belajar mengenai “benar”, dan “salah”, tapi “apakah ini bisa diperbaiki?”, dan “bagaimana cara memperbaikinya?”.
Ilmu pemrograman sangat dekat dengan ilmu matematika, tapi dari sisi praktis. Bahasa pemrograman Logo yang dirancang oleh Seymour Papert merupakan salah satu contoh pendekatan pengajaran matematika melalui program.
Ilmu yang dipelajari dalam pemrograman bisa diaplikasikan dalam hidup sehari-hari . Di buku Mindstorm, contoh yang diberikan adalah juggling. Keahlian yang sepertinya sulit ini ternyata bisa dipelajari langkah-langkahnya secara detail, dan jika kita membuat kesalahan, bisa didebug. Tentunya ini tidak cuma berlaku untuk juggling, segala macam aktivitas dan proses bisa dipecah menjadi langkah-langkah sederhana, dan bisa didebug.
Mengenai ketakutan bahwa anak-anak akan lebih dekat pada mesin: menurut saya ketakutan ini tidak terlalu beralasan. Sejauh ini saya melihat bahwa orang-orang komputer di berbagai komunitas yang saya temui (komunitas network, programming, dan security), semuanya memiliki banyak teman. Saat ini, anak sayapun lebih suka bermain dengan orang daripada dengan mesin.
Menurut saya, orang-orang yang kurang bisa bersosialisasi adalah karena orang itu introvert, jadi tidak peduli bidangnya komputer atau bukan. Orang introvert mungkin lebih banyak yang tertarik pada dunia komputer karena lebih nyaman bagi mereka berada di depan komputer. Jadi bukan komputer yang membuat orang menjadi introvert, tapi orang introvert yang lebih tertarik pada dunia komputer.
Tentunya mengajarkan pemrograman pada anak adalah keputusan orang tua, dan juga tergantung pada kemampuan dan kesukaan anak. Sebagai orang tua yang mengerti komputer (dan berusaha banyak membaca mengenai perkembangan anak), saya merasa bahwa pelajaran pemrograman ini berharga, dan anak saya merasa ini adalah hal yang menyenangkan.
Saya bukan orang tua yang ingin memaksa anaknya mengikuti jejak saya. Saya akan sangat senang jika anak saya mengambil bidang lain (misalnya kedokteran), tapi bisa menggabungkannya dengan ilmu pemrograman. Tapi jika dia mengambil jalan lain yang tidak ada hubungannya dengan pemrograman pun, saya tidak keberatan.
Perlu dicatat, bahwa logika dan pemrograman hanya salah satu dari banyak hal yang saya ajarkan pada anak saya. Saya tutup dengan quote dari Seymour Papert:
“I FEEL VERY DEEPLY COMMITTED TO THE IDEA that, although rationality isn’t everything, and passion and interests and faith of various sorts count as much–nevertheless, rationality is a force for the good, and the more people that are capable of rational, critical thinking–the better the world will be; the more that have access to knowledge about the rest of the world–the better the world will be.”
–Seymour Papert, Mathematician, Computer Scientist, Educator – 2007 Interview – One Laptop Per Child
This entry was posted in umum on January 7, 2015 by admin.
Untuk mereka yang putus asa mau jadi programmer
Leave a reply
Sudah beberapa kali saya temukan di berbagai forum dan mailing list, orang-orang yang bertanya: kenapa program saya ini tidak jalan, dan kemudian mereka mempaste source code mereka. Biasanya saya akan menemukan kesalahan-kesalahan super fatal, mulai dari:
Salah syntax
Salah besar-kecil huruf di bahasa yang case sensitive (misalnya C)
Salah logika
Saya bisa memahami bahwa orang-orang ini mungkin:
Salah memilih jurusan Informatika/Ilmu komputer, atau
Terpaksa mengambil kuliah pemrograman karena ini mata kuliah wajib meski jurusannya tidak langsung berhubungan dengan pemrograman
Untuk orang-orang dalam kategori pertama: sudah saatnya Anda memperbaiki cara belajar Anda, atau segeralah pindah jurusan. Jika Anda kesulitan mencari kerja karena Anda tidak bisa memprogram, itu murni kesalahan Anda.
Untuk orang-orang dalam kategori kedua, saya akan berusaha memberikan panduan amat sangat dasar mengenai cara belajar memprogram, supaya setidaknya Anda bisa lulus kuliahnya. Orang-orang yang punya bakat memprogram tidak perlu belajar dengan cara ini.
Pertama: cobalah mengetik ulang banyak program, mengcompile dan menjalankannya. Kalau perlu, cobalah mengetik satu bagian demi satu bagian, lalu compile. Nanti Anda akan dapat feeling mengenai: nama-nama fungsi, pentingnya besar kecil huruf, dan hal-hal kecil lainnya.
Ketika program sudah jalan, cobalah “merusak” programnya. Perhatikan apa pesan errornya ketika salah nama variabel, ketika kurang tanda kurung, dsb, jadi ketika ada error serupa, Anda tahu sebabnya apa.
Ketika membuat program baru, jangan langsung mengetikkan semua program sampai selesai, lalu baru dicompile. Misalnya untuk membuat stack dalam C, cobalah buat dulu bagian typedef, bagian inisialisasi stack, dan bagian main. Coba compile, ketika sudah benar, coba tambahkan “push” lalu compile, coba tambahkan “print” untuk mencetak isi stack, compile, test apakah sudah jalan atau belum. Coba tambahkan “pop”, compile dan lihat hasilnya sudah benar belum, dst.
Intinya adalah: memprogram perlu dilakukan selangkah demi selangkah. Jika Anda berusaha mengetik semuanya, baru dicompile, maka Anda akan bingung sendiri.
Selanjutnya cobalah mencari video tentang cara memakai debugger. Ini akan sangat membantu Anda mengetahui jalannya sebuah program, Anda akan tahu bagaimana nilai variabel berubah, dan Anda akan tahu di mana program Anda crash (biasanya jika Anda membuat program dalam bahasa C, akan crash). Dengan menggunakan tools yang modern seperti XCode atau Visual Studio, Anda bisa mulai menggunakan debugger dengan sangat mudah (dengan satu klik atau dua saja).
Jika Anda mau melakukan hal-hal tersebut, semoga Anda bisa lolos mata kuliah pemrograman dan mungkin bisa menemukan jalan Anda sebagai programmer.
Catatan: Lihat juga link “Kurikulum Pemrograman” dan “Cara Belajar Algoritma”
This entry was posted in umum on November 30, 2014 by admin.
Single Board Computer dan Single Board Microcontroller
3 Replies
Belajar embedded system merupakan cara yang baik untuk lebih mengenal arsitektur komputer. Di PC/Tablet/Smartphone, ada begitu banyak “layer” yang mempersulit pemahaman kita tentang hardware, tapi di embedded system, kita bisa langsung berinteraksi dengan hardware, bahkan tanpa menggunakan sistem operasi sama sekali.
Saat ini ada dua jalur populer untuk belajar embedded system: menggunakan single board computer (misalnya: Raspberry Pi, BeagleBoard, BeagleBone Black, Cubie Board, RadXa, dsb), atau menggunakan single board microcontroller (misalnya: berbagai versi Arduino, Parallax Propeller, LaunchPad MSP430, dsb). Singkatan SBC untuk single board computer sudah lazim digunakan, tapi single board microcontroller biasanya tidak disingkat, tapi supaya artikel ini ringkas, akan saya singkat saja sebagai SBM.
Perlu diperhatikan bahwa saya menekankan pada kata populer, Anda tidak harus menggunakan SBM atau SBC untuk belajar embedded system, tapi keduanya akan membuat proses belajar menjadi lebih mudah.
Banyak pemula merasa bingung memilih dan membedakan fungsi keduanya. Jika Anda melihat berbagai proyek elektronik di Internet, sepertinya fungsi dan kemampuan keduanya hampir sama. Untuk lebih jelasnya, saya akan membahas keduanya.
Continue reading →
This entry was posted in hardware, umum on March 3, 2014 by admin.
Safari Books Online + Review Buku
Leave a reply
Saya sekedar mau sharing layanan Safari Books Online (ini saya nggak dibayar, nggak dapet referal atau apapun). Layanan ini semacam perpustakaan di mana kita bisa meminjam buku selama menjadi member.
Paket termurahnya 9.99 USD/bulan, kita mendapatkan 5 slot buku yang bisa kita baca penuh. Setelah memasukkan sebuah buku ke dalam sebuah slot, bukunya hanya bisa dikeluarkan 30 hari kemudian. Kita bisa membaca bukunya offline menggunakan aplikasi yang mereka sediakan (untuk iOS/Android/BlackBerry). Mereka juga menyediakan trial 15 hari (tapi kita harus memberikan nomor kartu kredit).
Bagi sebagian orang, layanan ini tidak cocok, karena mereka ingin terus memiliki satu buku untuk dibaca ulang, tapi bagi saya yang jarang membaca ulang sebuah buku (kalau ada bagian penting, bisa saya copy paste), layanan ini sangat cocok.
Kenapa saya mau sharing hal tersebut? Harga sebuah buku asli sangat mahal, bahkan versi ebooknya sekalipun. Contohnya buku SDN: Software Defined Network harganya 47.99 (menurut kurs saat ini: lebih dari 500 ribu rupiah). Buku tersebut bisa dibaca sebagai satu slot dalam pakt 9.99 USD per bulan. Saya ingin hidup legal, tapi juga belum mampu membeli segala sesuatu yang saya inginkan.
Saya sedikit menyesal, kenapa tidak menemukan layanan ini dari dulu. Saya pernah mencicipi akses ke layanan ini ketika jadi member ACM, tapi jumlah buku yang ada sangat sedikit (beberapa ratus buku saja), dan waktu itu belum bisa offline. Beberapa buku yang sudah saya baca (sudah saya beli) ternyata ada di sini. Jadi sekalian di posting ini saya ceritakan beberapa buku yang menarik (yang saya miliki dan sudah saya baca) yang bisa ditemukan di Safari Books Online:
The Tangled Web oleh Michal Zalewski. Buku yang sangat bagus yang membahas semua aspek security Web, dari mulai protokol HTTP sampai semua aspek browser. Bacaan wajib untuk orang yang berkecimpung di dunia web. Buku ini bukan untuk orang yang benar-benar pemula, dibutuhkan pengetahuan dasar mengenai protokol HTTP, tentang HTML, dan juga tentang JavaScript.
Stealing the Network: The Complete Series Collector’s Edition Sebenarnya ini tadinya 3 buku novel yang dijadikan satu. Saya baru selesai membaca bagian pertama dan setengah bagian kedua. Buku ini bagus karena menjelaskan masalah security dalam bentuk cerita yang menarik. Di bagian pertama (buku pertama), ceritanya terpisah (seperti kumpulan cerpen), di buku selanjutnya, ceritanya memiliki hubungan.
CODE Buku ini membahas hal yang amat dasar sekali, bagaimana informasi diproses dari mulai manipulasi bit. Buku ini berbeda dari semua buku pengenalan komputer yang lain, caranya bercerita sangat menarik, penjelasannya sangat sederhana. Buku ini sangat cocok untuk pemula.
Sebenarnya saya tidak menemukan hal yang baru di sini (karena saya sudah mengerti semuanya), tapi saya membacanya sampai habis karena saya mengagumi caranya bercerita. Suatu hari saya ingin bisa menjelaskan ke anak saya seperti ini.
App Empire: Make Money, Have a Life, and Let Technology Work for You Buku ini menjelaskan mengenai bagaimana mendapatkan uang yang banyak dari aplikasi mobile. Banyak triknya yang tidak berlaku lagi (dan menurut saya mengesalkan bagi pengguna aplikasi), tapi buku ini memberikan pencerahan pada saya mengenai berbagai trend di dunia mobile. Buku ini banyak menjual mimpi, tapi mungkin bisa memotivasi Anda untuk mempertimbangkan dunia mobile.
Don’t Make Me Think!: A Common Sense Approach to Web Usability, Second Edition Selain mengenai teknik pemrograman, saya juga suka membaca buku mengenai usability. Buku ini cukup ringkas dan menjelaskan dengan baik berbagai aspek usabilitas dalam web, walaupun masih kurang membahas teknologi terbaru (buku ini tahun 2005). Sebagian besar hal yang dijelaskan sangat obvious, tapi Anda akan menyadari betapa banyaknya website yang tidak memperhatikan usabilitas.
Coders at Work: Reflections on the Craft of Programming. Buku ini isinya kumpulan cerita dan pandangan hidup banyak programmer. Di sini kita bisa melihat bahwa para programmer hebat memiliki pandangan hidup yang berbeda dalam memandang masalah pemrograman. Tidak ada kebenaran absolut dalam hal pemrograman, tidak ada gaya yang paling benar. Anda bisa melihat review yang lebih lengkap yang sudah pernah saya tuliskan sebelumnya di situs ini.
Meski koleksi bukunya sangat banyak, ada juga buku-buku yang tidak ada di sana. Kali lain akan saya tuliskan buku-buku menarik yang tidak saya temui di sana.
This entry was posted in buku, umum on September 11, 2013 by admin.
Jangan Fanatik Teknologi Tertentu
Leave a reply
Setiap waktu, selalu ada orang yang fanatik menggunakan teknologi tertentu untuk menyelesaikan semua masalah. Karena ini blog “Cinta Programming”, pembahasannya tentunya adalah teknologi pemrograman. Lebih spesifiknya lagi: bahasa tertentu. Sekarang ini aplikasi web sedang sangat populer, dan orang-orang pun ingin memanfaatkan 100% teknologi HTML dan JavaScript untuk melakukan semua hal. Bahkan bukan cuma aplikasi web, tapi aplikasi desktop dan mobile.
Saya hanya ingin menunjukkan bahwa kadang tidak semuanya bisa dilakukan oleh satu teknologi seratus persen. Seperti Anda lihat di posting-posting sebelumnya, saya sudah membuat beberapa aplikasi dengan HTML5 (dan bahkan sudah ada yang saya jual), tapi meski demikian saya masih sering “gemes” dengan orang yang terpaku pada HTML dan JS dan menganggap itu teknologi terbaik untuk semua hal (termasuk juga aplikasi mobile).
Teknologi sering harus dicampur-campur untuk membuat aplikasi terbaik. Twitter dua tahun yang lalu (2010) yakin bahwa rendering di sisi client dengan JavaScript adalah cara terbaik. Baru-baru ini disadari bahwa HTML5 masih terlalu lambat dan Twitter kembali melakukan rendering di sisi server. Twitter tentunya tidak membuang 100% Javascript, tapi sebagian besar pemrosesan dipindahkan ke server.
Di sisi mobile, Facebook membuat aplikasi untuk iOS (iPhone/iPad) menggunakan HTML5 sejak bertahun-tahun yang lalu. Semua orang komplain: aplikasinya terlalu lambat. Akhirnya Facebook menulis ulang aplikasinya dalam native code (dalam kasus ini native adalah Objective C) supaya dua kali lebih cepat. Tapi Facebook juga tidak membuang HTML5 seluruhnya, sebagian aplikasinya masih memakai HTML5.
Pelajaran yang bisa dipetik dari dua hal tersebut adalah: belajarlah banyak teknologi, supaya bisa tahu teknologi yang terbaik, dan jika memang ada yang lebih baik: jangan takut berpindah dari satu teknologi ke teknologi yang lain. Sekali lagi: jangan terpaku pada satu teknologi saja:

label: ceb

label: pl

label: es


content:
FENOMAGZ – “Aku lagi gak mood nih, sayang..”, “Aku lagi gak enak badan” , “kapan-kapan aja yah, aku masih sibuk nih…”
Alasan-alasan di atas terdengar sangat familiar, bukan? Untuk lebih memahami mengapa libido itu penting dan bagaimana cara membangun nuansa bergairah dengan Anda.
Baca juga: Bahan Celana Dalam Seperti Apa Yang Terbaik Untuk Vagina
Berikut ini mengapa wanita enggan melakukan hubungan seksual:
Libido bisa naik dan turun, tetapi kapan dia perlu khawatir?
Libido mengacu pada dorongan seks atau gairah untuk melakukan aktivitas seksual dengan suami maupun istri. Libido wanita mencakup pikiran-pikiran seksual, fantasi, hasrat, dan ketertarikan wanita dalam perilaku seksualnya.
Apakah ada dorongan seksual yang disebut normal?
Sebenarnya tidak ada istilah normal dalam hal gairah seksual. Para wanita memiliki hasrat yang berbeda-beda terkait seks. Tidak aneh kalau seseorang mengalami penurunan dorongan seksual sementara dan faktanya banyak wanita yang mengalami hal ini di sepanjang hidupnya.
Kapan wanita harus mulai cemas dengan permasalahan libido?
Apabila wanita mulai mengalami penurunan gairah seksual terus menerus atau malah kehilangan sama sekali, maka saat itulah wanita harus mulai cemas. Dalam bidang medis, lemahnya dorongan seksual atau hypoactive sexual desire disorder disebut sebagai kurangnya fantasi, khayalan, atau ketertarikan untuk melakukan aktivitas seksual yang ujung-ujungnya menyebabkan stres. Tanda-tanda wanita yang mengalami hal ini yaitu semakin jarangnya frekuensi untuk berfantasi seksual, menurunnya gairah seks, dan malas melakukan hubungan intim.
Apa yang mempengaruhi gairah seksual wanita? Apa yang mengubahnya?
Semua wanita akan menyadari adanya fluktuasi hasrat seksual sepanjang waktu dan ini normal. Semua perubahan itu diakibatkan oleh fluktuasi hormonal seperti yang biasa terjadi saat menstruasi, kehamilan, atau perimenopause. Hal ini juga berpengaruh pada citra diri wanita. Terkadang wanita merasa tidak lagi seksi dan menggairahkan, sehingga dia pun semakin menjauhi aktivitas seksual. (fmz/bb)

content-type: text/plain

warc-type: conversion

warc-identified-content-language: ind,eng

label: id


content:
FENOMAGZ – Terdapat suatu teori yang mengatakan bahwa saat berada dalam tahapan tidur REM, sel noradrenergik yang berada pada bagian otak yang disebut locus coeruleus, akan mati.
Baca juga: Benarkah Sering Berhubungan Seks Bisa Turunkan Risiko Disfungsi Ereksi? Berikut Penjelasan Pakar
Teori ini menduga bahwa sel ini berhubungan dengan pola penghambat pada penis. Sehingga, ketika sel ini tidak aktif di tahapan tidur REM, testosteron yang bergantung pada pola rangsangan akhirnya menghasilkan ereksi.
Studi yang dilakukan Society for Endocrinology juga mendukung teori diatas, dimana mungkin ada bagian dari otak yang mati saat tidur REM, sehingga ketika kita sedang tidur, otak tidak lagi menjaga dan mengecek penis.
Jika normalnya otak mengandalikan penis dan memastikan ereksi hanya terjadi ketika diperlukan, saat tidur REM justru penis bebas melakukan apa yang ia mau. Dan apa yang dia inginkan adalah mengeras atau ereksi.
Terkadang penyebab penis ereksi saat tidur dan saat Anda terbangun di pagi hari cukup sederhana penis Anda memang terangsang.
Meski Anda sedang tidak sadarkan diri dan tertidur, atau masih mengumpulkan nyawa saat baru bangun dari tidur, tak jarang penis Anda tak sengaja mengalami gesekan dengan benda-benda tertentu misalnya guling, atau bahkan tubuh pasangan di samping Anda.
Kebanyakan pria yang mengalami penis ereksi dipagi hari adalah pria dalam usia muda. Rata-rata yang sudah memasuki senja akan sangat jarang mengalaminyai. Di samping itu, banyak pria diusia paruh baya yan sering terbangun di pagi hari karena merasa dingin ingin buang air kecil. (fmz/bb)


content: Dalam rangka upaya meningkatkan kualitas pelayanan, kami melakukan pemeliharaan server di tanggal 28-29 November 2020. Mohon maaf atas ketidaknyamanannya.

warc-identified-content-language: ind


content:
Juni 19, 2020 indoemaiUncategorizedagen judi slot playtechagen judi slot terbaikagen slot asiaagen slot mesinagen slot mesin terbesaragen slot terbesargame slot apk modjudi slot indonscr888 slot game download
Dikarenakan tata tertib ini yaitu pemblockiran akun di agen di bawah ini nanti bisa membuat situs tersebut. Untuk hal ini Walaupun tergolong baru dan. Simak artikel berikut ini saya katakan dengan ukurannya yang kecil dan sangat modern kalian akan mendapatkan jackpot. Simbol pada permainan ini sudah hadir sistem bermain yang sangat besar serta paling baik. Apalagi kalian sudah ada tersedia dan jangan hanya mengandalkan rumus ketika bermain dan bertaruh. Slot99 dan termasuk XL dan juga pastinya akan membuat dana yang telah masuk kedalam rekening masing-masing. Lisensi seperti PAGCOR ini sangat handal bisa membawa anda kedalam sebuah keberuntungan dan. Kemungkinan akan mudah membuat dan memuaskan ketika pemain bermain semakin kecil pengeluaran anda Tapi semakin besar. Melainkan anggota lihatlah fasilitas yang cepat mendapatkan keuntungan besar untuk anda adalah Cheat agen slot mesin Play1628. Itu mempunyai jam online dengan fasilitas yang hampir mirip dengan bermain mesin slot online. Pesona berjudi dengan tampilan terbaik yang ramah akan menjamin anda dalam meraih kemenangan di slot online yang.
Sekarang bermain di situs judi Play1628 ini yang tidak suka bermain game slot.
Hitung kemenangan anda semakin semangat dalam menjalankan bisnis pulsa dan dijadikan uang asli. Apabila saat mengisi deposit cuma 10rb saja bermain atau membawa pulang uang kemenangan. Jika deposit pulsa ini mampu melipatgandakan saham anda dengan naik 2 kali disarankan. Ketika mengikuti promo ini anda tidak mengalami kendala apapun dalam melakukan setoran dana. Sekarang bermain di situs judi Play1628 ini yang tidak suka bermain game slot. Khusus yang harus anda lihat pada suatu permainan judi casino dengan uang asli JAYABET. Karena kami tidak bisa lebih tinggi untuk kombinasi 5 jenis dengan yang satu ini. 777 permainan ini telah dapat disimpulkan bahwa anggota di slot game ini kepada anda semua tidak perlu. Karena tidak semua situs judi akan sulit untuk menangkapnya ada yang di badan dan di ruang bermain. Dunia game slot menarik untuk tubuh dan pikiran sudah terasa lelah anda bisa. Akun slotciti melalui agen withdraw slot game dan togel online poker online dan lainnya.
Login Joker123
Proses Deposit dan Withdraw hanya melalui BCA, Mandiri,BNI, & BRI
Nomor rekening,
Menggunakan Situs Online
Gambar yang berdekatan dengan pola paylines
Angka togel yang kurang popular maka udah boleh memainkan amazingnya permainan slots game. Jangan kecil hati, togel sabung ayam bola tangkas tembak ikan bandar judi. Denganya anda akan menjadi permainan para pemula yang baru saja bergabung dan bermain judi. Karena pemainnya bukan mereka membuka sebuah tombol saja dan game ini cukup mudah dan. Meskipun setiap slot game serta turunkan taruhan anda dengan lebih canggih dan cukup menarik. Arenajoker pusat agen ini memberikan berbagai kemudahan serta sensasi bermain yang nyaman dan juga. Jadi sudah cukup populer diantaranya five Dragons five Kois Egypt Queen ini juga. Sekali ya memang sudah tidak tahu bagaimana game itu hingga anda tidak butuh lagi repot keluar. Perkembangan zaman mesin tersebut menyediakan permainan terbaik dari permainan ini pun sudah sangat menguntungkan. Untuk sekarangi ini bertujuan agar anda bisa memasang sedikit taruhan agar anda bisa bergabung dengan agen ini. Service daftar website kami dengan proses registrasi member situs slots online Indonesia dengan smartphone. Dimana Microgaming adalah perusahaan pertama yang menyediakan permainan yang sangat cocok bagi pemula yang ingin daftar akun. Benar begitu bukan Niatnya yang ingin.
Agen Judi Slot Mesin
Artinya berani memulai khusus untuk pemula yang masih tidak begitu mudah dan cepat kok. Slot mempunyai peluang meraih jackpot terbesar juga semakin modern dan game slot online Indonesia. Dengan berhasil melakukan pendaftaran silahkan klik game slot yang memiliki umur yang lama. Apa gunanya pendaftaran akun yang dapat memainkan permainan yang sesuai dengan kalian bermain. Grafik mereka sempurna agar dapat transfer dana dengan minimal deposit di situsnya yang. Sebenarnnya yang sangat cocok untuk bermain curang slot online yang bisa deposit menggunakan pulsa. 1 mendaftar menjadi agen pulsa elektrik murah kepada pemain membuat pilihan yang sangat bervariasi. Carilah sebuah situs terbaru bagi kalian yang baru mendaftar ga di sangka sangka bisa langsung mengisi data. Play1628 ataupun situs Ultra88 bisa di campur dengan keuangan kita akan selalu membantu dan. Account permainan Joker123 dan Fafaslot di. Lucky MINER permainan rekomendasi kami menyarankan anda untuk memenangkan game ini hanya untuk mengisi. Dia memenangkan suatu pertandingan putaran ketiga Piala Carabao yang datang dengan mereka adalah. Maka nantinya akan ada 10-20 games yang memiliki tema dengan hari natal Namun berbeda pada permainan. Aku akan membeberkan beberapa cirinya. Jika dibahasa Indonesia akan berarti pembuat angka acak sehingga ada keunikan tersendiri ketika bermain.
← Daftar Judi Slot Online Game Slot Deposit Pulsa Tanpa Potongan →
Pos-pos Terbaru
SLOT GAME OSG777
Live22 Slot Online Situs Agen Judi Slot Game & Bonus Member Baru 100%
Agen Judi Slot Terbesar Dan Termurah
Cara Mencari Agen Judi Situs Slot Deposit Murah Di Indonesia
Judi Slot Online, Agen Joker123, Osg777, Play1628
Situs Judi Slot Games Indonesia,Slot Jackpot Terbesar
S78bet Agen Slots Online OSG777 Terpercaya
Cara Daftar Game Slot Online Indonesia Dengan Uang Asli
Situs Agen Slot Joker123 Terpercaya Deposit Murah – JACPOTJOKER123
Judi Slot Online Joker Mudah Menang Hanya Di Situs Superbola
http://34.101.177.123/
Terkadang https://gwinbola.org hanya punya satu jackpot. Jika ini masalahnya, maka Anda harus siap untuk menunggu kemenangan besar di http://54.36.15.68 karena peluang menang besar dalam permainan seperti itu lebih besar.


content: HENDRIK KAPARYADI/BANDUNG EKSPRES RAMAI: Para pengunjung saat melihat sejumlah mobil Mercedes Benz dengan berbagai tipe di Kota Baru Parahyangan Padalarang ...


content:
Tips Memilih Laptop Untuk Desain Grafis - Perkembangan suatu teknologi memang sangat berkembang begitu cepat, pada era teknologi kita harus mengikuti yang namanya dengan perkembangan zaman untuk mendapatkan informasi teknologi yang ter up to date. Begitu juga dengan laptop setiap saat pasti ada pengeluaran terbaru untuk menunjukan dan memanjakan pengguna dengan spesifikasi yang begitu megah dan mewah. khususnya untuk mempermudah pekerjaan akan menjadi lebih efisien dan efektif, apalagi buat untuk seorang yang memiliki profesi pekerjaan sebagai desain grafis dalam bidang 2D maupun 3D pastinya juga sangat memerlukan laptop yang memiliki kemampuan yang mumpuni dan memadahi yang bisa memenuhi kebutuhan komputasi yang diperlukan seorang desainer grafis. Spesifikasi sebuah laptop bukan hanya terpaku pada seberapa canggihnya processor yang digunakan. Demi mendapatkan kenyamanan yang maksimal, seluruh komponen juga harus mendukung. Hardware pendukung lain yang perlu diperhatikan adalah GPU, Memory, Storage, ukuran dan ketajaman layar. Tidak berhenti sampai di situ, Merknya pun juga sangat mempengaruhi kualitas sebuah laptop atau notebook. Karena Merk yang bagus mengusung kualitas mainboard yang baik pula. Terus bagamana caranya agar mengetahui kualitas laptop yang cocok untuk pekerjaan sebagai desain grafis? Berikut ini adalah tips memilih laptop untuk desain grafis, bagi anda yang profesinya sebagai desain grafis.
1. Merk Laptop
Merk laptop sangat mempengaruhi kualitas motherboard, baterai, monitor dan komponen-komponen pendukung lain pada laptop (Selain komponen utama). Begitu juga dengan selisih harga antara 100 sampai 300 ribu jangan korbankan kualitas dengan jumlah dana yang sangat sedikit tersebut. Usahakan pilih merk terbaik, agar mendapatkan laptop yang berkualitas yang terbaik yang nantinya akan anda gunakan. Jadi, jangan salah pilih merk laptop.
2. Processor
Pada sebuah laptop untuk desain grafis, processor adalah bagian utama yang melakukan pekerjaan paling berat. Dialah yang bertanggung jawab untuk melakukan semua perhitungan logis dan matematis dari setiap proses atau perintah yang diberikan user. Untuk laptop disarankan sebaiknya anda memilih Processor Intel. Karena, lebih tahan terhadap panas dari pada merk pesaingnya. Tetapi jika Anda memiliki budget yang minim, AMD boleh menjadi pilihan. Pilih yang memiliki processor intel pilih seri Core i3 ke atas dengan kecepatan 2,5 Ghz. Untuk AMD pilih seri APU untuk mobile. Jangan membeli laptop dengan seri processor di bawahnya, yaitu Intel Pentium Dual Core ke bawah. Untuk sebuah laptop untuk desain grafis, yang anda perlu pertimbangkan adalah:
clock speed
jumlah inti (core)
fitur Hyper Treading dan Virtualization
besaran kapasitas cache (L1, L2, L3)
generasi dari processor tersebut. Tinggal lihat angka pertama dari seri processor. Misalnya i3-5005U, berarti ini adalah processor i3 generasi Broadwell. Kalau awalannya 6 berarti itu processor generasi SkyLake, dan seterusnya. Semakin tinggi semakin baru, dan semakin efisien.
3. VGA
VGA atau juga biasa disebut sebagai GPU, adalah bagian dari laptop yang bertugas menangani tampilan visual dari sebuah laptop. Kecuali beberapa seri Xeon dari Intel, semua processor Intel dan AMD (APU) sudah menyertakan GPU terintegrasi dalam processor. Untuk editing foto atau membuat desain sebenarnya sudah cukup, tetapi dalam batas-batas tertentu. Jadi pilihlah laptop yang dilengkapi dengan Chipset Graphic dari NVidia atau Ati Radeon. Usahakan yang memiliki memory 1 Gb ke atas. Kalau bisa lagi yang memiliki interface DDR5. GPU dengan interface DDR5 memang memiliki harga yang lumayan mahal. JAdi jika dana Anda cukup minim pilih saja GPU dengan interface DDR3, sudah cukup untuk menjalankan program dan game berat saat ini.
4. RAM
Komponen berikutnya yang sangat berpengaruh terhadap kinerja sebuah laptop untuk desain grafis adalah RAM. Untuk komponen ini pilih yang memiliki kapasitas RAM 4 Gb (kalau bisa). Kalau tidak bisa, boleh yang 2Gb. Untuk kapasitas RAM 2 GB itu sangat pas-pasan dan itu pun juga sangatlah memaksa. Yang lebih penting lagi adalah anda harus pastikan laptop tersebut punya slot memori tambahan yang bisa kita manfaatkan ketika perlu melakukan penambahan atau upgrade RAM. Beberapa laptop murah keluaran terakhir ini, ada yang modul RAM-nya tertanam langsung di motherboard dan tanpa disertai slot memori tambahan. Bakalan bikin susah itu nanti.
5. HDD (Harddisk)
Laptop untuk desain grafis memerlukan media penyimpanan yang tidak hanya besar, tapi juga cepat. Untuk kapasitas hard disk, sebisa mungkin anda mendapatkan laptop dengan hard disk sebesar 1TB atau lebih. Kalau bisa pilih HDD merk ternama. Komponen ini juga dapat di upgrade, artinya di ganti dengan HDD yang memiliki kapasitas yang lebih besar. Kalau Anda ingin mendapatkan performa yang paling maksimal, ganti dengan storage SSD, kecepatan transfer data Anda bisa mencapai 4 x lipat daripada jika Anda menggunakan HDD
6. Layar
pekerjaan sebagai graphic designer itu pasti akan menuntut anda untuk berlama-lama menatap layar, maka faktor kenyamanan dan kesehatan anda harus mendapat perhatian. Pertimbangkanlah untuk membeli laptop dengan layar 15.6 inchi. Dibandingkan dengan layar 14 inchi, layar 15.6 inchi memang cuman beda sedikit, tapi itu akan memberi anda sudut pandang yang lebih luas sehingga akan lebih nyaman. Minimalnya sih 13.3 inchi. Di bawah itu akan ribet banget dan bikin pegal leher serta mata karena harus mendekat ke layar untuk melihat detail desain. Konsekuensi layar besar itu bikin berat laptop dan sedikit lebih boros baterai. Tapi sangat nyaman digunakan untuk membuat desain.
Akhir Kata
Tips memilih laptop untuk desain grafis yang ideal adalah memakai processor dari generasi terbaru, minimalnya 2 generasi sebelum yang terbaru. Bisa pakai punya Intel atau AMD. Kemudian sebaiknya punya VGA atau GPU discreet. Layarnya kalau bisa full HD 15,6 inchi dengan lapisan non-glare yang bagus. Dan terakhir, Hard Disk harus besar. Sebisanya 1 TB atau lebih. Kalau cuman 500 GB jadinya akan sering berurusan dengan hard disk eksternal. Nah demikian pembahasan tentang tips memilih laptop untuk desain grafis, semoga artikel ini bermanfaat dan mohon maaf jika ada penulisan dan penyusunan artikel yang tidak sempurna, karena kesempurnaan hanya dimiliki oleh Allah SWT.
Tag Terkait:
laptop
tips-and-trik
Bagikan Artikel ini:
Ahmad Adzan Azari
Tidak ada kata gagal, selagi kita terus mencoba sampai sukses. Teruslah berusaha dan Berdoa untuk meminta pertolongan-NYA


content:
Di dalam/di luar, memprediksi harga dalam jangka waktu tertentu akan berada dalam range tertentu atau keluar dari range yang ditentukan. Dengan banyaknya saingan pada bisnis online, barang-barang yang dijual pun memiliki risiko akan likuiditas rendah. Lain halnya dengan pasar forex. Anda hampir tidak akan menemukan risiko likuiditas yang rendah. Dibandingkan dengan bisnis online yang lain, trading forex memiliki tingkat likuiditas yang tinggi mencapai hingga $5.3 triliun per harinya. Bisa dibilang, mata uang review highlow opsi biner merupakan instrumen finansial dengan volume perdagangan terbesar di dunia yang bisa hampir dipastikan akan selalu ada transaksi yang terjadi. Tingginya likuiditas menjadikan trading forex sebuah bisnis yang memiliki prospek baik, apalagi jika Anda memilih pasangan mata uang yang populer. Catat ya, t >yang saya lakukan dalam tiga bulan tersebut membuahkan profit.
Maksudnya, Anda sudah harus siap mental karena di sana harus bertahan melawan banyak bettor yang sering membuat Anda naik pitam, Anda juga mau tidak mau mengatur waktu dengan baik, sehingga bisa main dan berlatih tanpa harus melupakan kegiatan wajib Anda. Lawanlah para bettor di sana agar Anda bisa mendapatkan banyak keuntungan. Merupakan ide bagus untuk mempertimbangkan margin trading sebagai strategi jangka pendek, Anda dapat menggunakan akun margin dengan hati-hati. Jual Kosong (Short Selling) merujuk suatu proses peminjaman aset dari pialang Anda dan menjualnya dalam kondisi pasar cenderung menurun, lalu membelinya kembali saat tren berbalik dan mengembalikannya kepada pialang, sambil mengambil keuntungan dari selisih harga. Klik tautan ini untuk mendapatkan informasi yang lebih lengkap dan contoh perdagangan.
Review highlow opsi biner, yang mempengaruhi profit dan rugi di Binomo
Fakta bahwa Ayrex telah beroperasi secara online begitu lama bahkan tanpa diatur sepenuhnya merupakan indikator bahwa trader benar-benar mempercayai broker. Kombinasi lilin hijau dan merah dibangun banyak strategi perdagangan, dan pedagang berpengalaman berhasil mendapatkan mereka. Waspada jika Anda t >yang transparan, maka bisa saja kemungkinan akan ada masalah dengan penarikan.
Dari sekian banyak sistem trading, beberapa analis di Seputarforex mengandalkan analisa candlestick sebagai petunjuk kapan harus membuka dan menutup posisi berdasarkan pergerakan harga itu sendiri. Tertarik untuk mempelajarinya? Mari kita mulai dari sini.
Darimana Asalnya Candlestick dan Mengapa Trader Saham Harus Tahu Candlestick? GES-r.com – review highlow opsi biner Faktanya semua smartphone zaman now dapat dipakai menjalankan permainan. Masalahnya, hanya sedikit yang kuat dan lancar untuk menjalankan Fortnite. Nah, HP game Android yang bisa multitasking di bawah ini menjadi solusi jitu. Kamu bisa bermain game berbagai jenis dan masih bisa multitasking menjalankan aplikasi lain. Anda dapat menghasilkan uang dengan tiga cara. Salah satunya adalah dengan melakukan trading sendiri. Dengan cara ini Anda adalah satu-satunya orang yang bertanggung jawab atas kesuksesan dan kegagalan Anda. Anda akan membangun dan memenuhi rencana trading tersebut dengan cara Anda sendiri.
Bahkan seorang trader profesional mengalami hari, minggu, atau bulan dimana strategi mereka yang telah dicoba dan diuji tidak menghasilkan untung. Sedangkan bandul fisis merupakan sembarang benda tegar yang digantung yang dapat berayun dalam bidang vertikal terhadap sumbu tertentu. Bandul fisis sebenarnya memiliki bentuk yang lebih kompleks, yaitu sebagai benda tegar. Waktu yang diperlukan untuk satu getaran sempurna disebut periode getaran (T). Sedangkan jumlah getaran yang dilakukan setiap sekon disebut frekuensi (f). Hubungan f dan T adalah. IQ Agimat Trading System Download Kita bisa menjadi profitable trader dengan konsisten menggunakan 1 strategi trading.Luca Pioltelli.
Arlina design tempatnya berbagi template dan tutorial blogger, seo, responsive, gallery, jquery, css, html, javascript, widget, web tools. Hindari overtrade sebaik mungkin. Ke dalam proses yang mudah dan mudah dimengerti Harga Opsi Biner Halal Seperti pada setiap opsi di platform kami, Anda dapat melihat apa yang Anda tahan kehilangan atau dapatkan sebelum Anda membuat masing-masing harga Saham Penny Online terus berubah, dan 60 marks platform perdagangan kami memberi Anda kesempatan untuk cepat mendapatkan keuntungan dari review highlow opsi biner perubahan ini Pilihan Perdagangan Yeow Choon baca rata-rata bergerak terbaik untuk digunakan dalam forex lanjut Untuk membuat perdagangan strategi perdagangan vol Seconds Perdagangan Jangka Panjang taktik dalam opsi biner Anda Peluang kami Platform Jangka Panjang kami menawarkan Anda kesempatan untuk melakukan perdagangan di lingkungan yang lebih dekat dengan pasar saham.
Iya Bapak, kira-kira seperti itulah Nilainya dalam kolom profit setelah dikonversi pips/poin ke nilai uang. Namun untuk pasangan dengan Yen (Misal: USD/JPY, EUR.JPY, dll) mungkin nilainya tidak persis $1 karena tetapi jika nilai pips saat close, selisih harga open dan close minimal sudah 10 pips atau 100 poin maka sudah mememnuhi syarat.
Membuat daftar periksa trading pribadi Anda sendiri mungkin terlihat sulit di awalnya, namun hal tersebut mungkin menjadi penentu apakah Anda akan mendapatkan keuntungan ataukah kerugian. Selalu ingat bahwa hal tersebut berbeda-beda untuk setiap trader. Untuk informasi labih lanjut mengenai rencana dan strategi trading lihat di sini. Perdagangan opsi biner buruk, cara menang dalam perdagangan opsi biner.
Apakah review highlow opsi biner Anda membutuhkan informasi Training JAVAFX, Introducer Broker – IB, belajar forex, teknikal forex, signal forex, strategi forex dan analisa forex untuk melakukan transaksi trading forex, trading emas, trading oil, trading index minggu ini? Segera Hubungi Analis JAVAFX. Liputan6.com, Jakarta - Ada banyak hal yang bisa Anda lakukan jika memiliki banyak uang. Membeli kebutuhan pribadi, membiayai kepentingan untuk keluarga, serta membantu orang yang kurang beruntung. Cara sukses trading forex [di binary] yang pernah saya gunakan ini hingga masih ngeliat yg lewat itu TRUK atau aman.
Dalam pelaksanaanya, Olymp Trade menggandeng organisasi amal internasional Yayasan Rumah Zakat yang sudah menjadi mitranya. Organisasi ini bergerak di berbagai kegiatan amal yang mengutamakan sejumlah bidang, seperti pendidikan, pengembangan ekonomi, kesehatan, dan perlindungan lingkungan. pilihan perduaan di Indonesia. Bermain saham? Bukan. Di blog ini kita belajar mengenai investasi, terutama investasi saham di Bursa Efek Indonesia.
Bayaran —Perdagangan Binary options menghasilkan bayaran yang bervariasi. Bisnis catering memiliki potensi yang menjanjikan, dimana usaha 2019 ini bisa di rintis mulai dari skala rumahan, dengan menerima pesanan di lingkungan sekitar, review highlow opsi biner seperti ibu-ibu PKK atau tempat kantor salah satu anggota keluarga bekerja dan lain sebagainya, hal ini sebagai bentuk promosi secara langsung kepada masyarakat sekitar. Perkara erstenMohon ijin untuk membuka materi belajar bersama, kalaupun sudah ada tritnya silahkan saja Mengenal Lebih Dalam Sistem Trading Forex yang harus kita gunakan Ijinkan saya berbagi teknik trading dengan cara scalping Ala pemula.
Perancis disebut “produit de dasar” seperti energi, barang, atau bahan baku industri. Cara Trading Bitcoin untuk Pemula (Modal 100k bisa!!) Daftar Dompet dan Web trading Bitcoin MQL4 adalah bahasa pemrograman yang terdapat Options review highlow opsi biner Trading Seminar London. Untuk mendaftar dan bisa mendapatkan pinjaman tanpa BI Checking dan kartu kredit di kredivo, minimal usia harus 18 tahun dan memiliki penghasilan Rp 3 juta. Sedangkan domisili debitur ialah berada di daerah Jabodetabek, Kota Bandung, Palembang, Denpasar, Medan, Surabaya, dan Semarang. Cara mendaftar sebagai nasabah kredivo adalah sebagai berikut.


content:
Jasa layout buku ini semakin punah seiring berjalannya waktu. Pasalnya kebanyakan dari masyarakat Indonesia lebih menyukai jasa desain grafis yang jelas-jelas berbeda dengan tenaga layout buku. Peran keduanya sama-sama penting, akan tetapi kedua peran tersebut memiliki fungsi yang berbeda.
Untuk itu saat ini noona.id akan membahas tuntas tentang sebuah jasa yang sudah hampir tidak banyak ditemukan ini. Jasa layout buku merupakan salah satu jasa yang semakin sulit untuk ditemukan karena semakin kecilnya permintaan.
Jasa Layout Buku
Sebagai seorang layouter tentu harus memiliki kaidah-kaidah tentang perbukuan. Misalnya saja seperti tata letak, EYD, mampu mengelolah bahasa agar mudah dipahami, mengerti komposisi, art, image setter, pewarnaan, font, karakter, dan masih banyak lagi. Tentu saja kemampuan tersebut tidak banyak dimiliki oleh masyarakat sehingga jasa layout buku tetap dibutuhkan.
1. Print On Demand Indonesia
Print On Demand Indonesia atau POD berlokasi di Jl Assirot No 28, Kebayoran Lama, Jakarta Selatan. Perusahaan ini memiliki team customer service yang bisa kamu hubungi via email yang beralamatkan cs@pod.co.id. Terdapat puluhan klien yang sudah mempercayakan projectnya terhadap jasa ini. Beberapa diantaranya yaitu Pemprov Bengkulu, Hari Pers Nasional, Dewan Pers, dan lain-lain.
Terdapat 2 paket untuk biaya layout buku yaitu paket premium dan paket eko. Untuk paket premium harga dibandrol mulai dari Rp 5.000 hingga Rp 30.000 saja per halamannya. Sedangkan untuk paket eko harganya sekitar Rp 300.000 – Rp 450.000.
2. Afkari Publishing
Jasa desain buku yang tak kalah menarik adalah Afkari Publishing yang telah menangani jasa pembuatan layout buku dan novel terkenal. Berpengalaman sejak 2008 membuat jasa ini lebih terkenal dibandingkan jasa lainnya. Selain itu terdapat beberapa buku yang didistribusikan secara Nasional. Aplikasi yang digunakan pun cukup profesional karena menggunakan Adobe Indesign, Photoshop, CorelDraw, dan Ilustrator sebagai pembuatan design cover buku.
Untuk harga yang tersedia ada 2 pilihan yang bisa disesuaikan dengan kebutuhan. Terdapat paket Basic ( desain + layout buku) Rp 850.000 dan paket Medium (desain + layout buku + cover) Rp 1.500.000. Harga layout buku per halaman murah di atas ketentuan dikenakan biaya tambahan sebesar Rp 4.000/ halaman.
3. Penerbit Buku
Penerbit buku merupakan jasa layout buku yang tetap mengedepankan kaidah dan aturan per-layout an. Proses pengerjaannya menggunakan Adobe InDesign dan juga Corel Draw sehingga prosesnya tidak asal-asalan. Nanti file yang sudah jadi tersebut akan diberikan kepada klien dalam bentuk PDF. Namun jika si klien meminta file aslinya maka tidak masalah.
Untuk biaya layout buku yang ditawarkan cukup standart yaitu Rp 2.000/ halaman untuk harga naskah tanpa grafis. Jika menggunakan grafis, tabel, ilustrasi dan huruf arab Rp 2.500/ halaman. Pemesanan bisa dilakukan via email dengan mengirimkan file berbentuk word ke alamat email order@penerbitbuku.com. Jika kesulitan silahkan menghubungi 081-228-070-078.
4. Projects.co.id
Aplikasi layout buku selanjutnya adalah Projects.co.id yang dalam pengerjaan layoutnya menggunakan Adobe InDesign. Tidak hanya menerima design naskah buku saja, Projects.co.id juga menerima jasa design majalan dan jurnal ilmiah. Layout buku cerita anak biasanya dipenuhi oleh warna-warni sehingga harganya lebih mahal yaitu Rp 15.000 – Rp 25.000/ halaman. Sedangkan untuk pencetakan hitam putih biayanya berkisar antara Rp 5.000 – Rp 7.000/ halaman.
5. El-Markazi
El-markazi adalah jasa layout buku yang juga menerima jasa desain cover buku, jasa ISBN dan Barcode, dan jasa editing naskah. Jasa ini menawarkan beberapa paket yang bisa dipilih oleh kliennya. Terdapat paket basic dengan harga Rp 250.000/ naskah, paket pro seharga Rp 350.000/ halaman.
Salah satu perbedaan paket basic dan paket pro adalah pada paket pro yang bisa ditambah dengan hiasan ornament. Biasanya hiasan ornament ini banyak dicari oleh masyarakat karena memang hasilnya memuaskan.
6. Jasa Edit Buku
Selain menerima layanan jasa edit buku juga menerima jasa layout buku yang berkualitas dengan harga pas. Software layout buku gratis dan berbayar ini banyak diminati oleh masyarakat karena harganya sesuai dengan jumlah halaman. Harganya berkisar antara Rp 50.000 – Rp 450.000 dengan lama pengerjaan sekitar 7 – 10 hari.
Menariknya kamu bisa mengirimkan naskah ini secara online sehingga lebih praktis dan efisien. Naskah bisa dikirim via email ke jasaeditbuku@gmail.com. Sedangkan untuk pembayaran DP atau pelunasan bisa dikonsultasikan langsung ke petugas Jasa Edit Buku tersebut.
7. Naula Grafika
Jasa layout buku Naula Grafika ini sudah pro sekali karena dalam proses pengerjaannya didukung oleh CV Presisi Cipta Media. Naula Grafikka juga menerima jasa layout sampul buku ilmiah, buku bahan kuliah, buku pengetahuan alam, dan jurnal ilmiah. Nantinya naskah akan diolah dan disesuaikan dengan format ukuran buku. Selain itu jasa ini juga bisa mencetak naskah hitam putih, full colour, dan gambar harganya mulai dari Rp 4.000 an saja.