Turning the database inside-out with Apache Samza

Standar

Originally posted on Confluent:

This is an edited and expanded transcript of a talk I gave at Strange Loop 2014. The video recording (embedded below) has been watched over 8,000 times. For those of you who prefer reading, I thought it would be worth writing down the talk.

Databases are global, shared, mutable state. That’s the way it has been since the 1960s, and no amount of NoSQL has changed that. However, most self-respecting developers have got rid of mutable global variables in their code long ago. So why do we tolerate databases as they are?

A more promising model, used in some systems, is to think of a database as an always-growing collection of immutable facts. You can query it at some point in time — but that’s still old, imperative style thinking. A more fruitful approach is to take the streams of facts as they come in, and functionally process them…

View original 7.677 more words

Stream processing, Event sourcing, Reactive, CEP… and making sense of it all

Standar

Originally posted on Confluent:

This is an edited transcript of a talk I gave at /dev/winter 2015.

Some people call it stream processing. Others call it Event Sourcing or CQRS. Some even call it Complex Event Processing. Sometimes, such self-important buzzwords are just smoke and mirrors, invented by companies who want to sell you stuff. But sometimes, they contain a kernel of wisdom which can really help us design better systems.

In this talk, we will go in search of the wisdom behind the buzzwords. We will discuss how event streams can help make your application more scalable, more reliable and more maintainable. Founded in the experience of building large-scale data systems at LinkedIn, and implemented in open source projects like Apache Kafka and Apache Samza, stream processing is finally coming of age.

Title: making sense of stream processing

In this presentation, I’m going to discuss some of the ideas that people have about processing event streams. The idea…

View original 5.337 more words

5 mitos di industri software development Indonesia

Standar

Sejarah mencatat kalau penggunaan komputer di Indonesia dimulai di sekitar tahun 1970-an dan cabang ilmu komputer atau teknik informatika mulai berkembang di Indonesia sekitar akhir tahun 1970-an. Bila memang benar cabang ilmu komputer masuk di Indonesia di tahun tersebut, berarti hampir 40 tahun industri software development di Indonesia tidak mengalami banyak kemajuan yang berarti. Kenapa demikian? Karena selama satu dekade belakangan, tingkat turnover di industri software development di Indonesia masih tergolong tinggi dibandingkan di industri lainnya, delivery date yang tidak sesuai perencanaan dan fitur-fitur yang tidak sesuai permintaan kostumer.

Namun walaupun dengan semua permasalahan pelik tersebut, masih banyak saja praktisi IT di Indonesia yang melakukan hal yang sama seolah-olah kegagalan dalam 40 tahun belakangan belum menjadi cukup bukti kuat untuk mereka merubah cara berpikir dan cara berperilaku dalam software development. Seharusnya orang yang telah gagal berkali-kali langsung belajar dari kegagalan dan tidak melakukan hal yang telah menyebabkan ia gagal untuk kedua kalinya, namun hal tersebut seolah-olah tidak berlaku di Indonesia karena banyak orang Indonesia yang menggunakan kaca mata kuda yang tidak memperhatikan perkembangan dan perubahan di belahan dunia lain.

Btw, baca selengkapnya disini aja ya kk :|

View story at Medium.com

Fancy Amount? :/

Standar

Nggak tau juga ini namanya apa :/ Saya sebut aja fancy amount.

Jadi ceritanya mau bikin format harga seperti yang ada di Traveloka. Tiga digit dibelakangnya jadi kecil.

Screen Shot 2014-12-28 at 11.34.53

Gak yakin ini codenya efektif dan optimal. At least it works

Kalo mau liat demo di CodePen http://codepen.io/mul14/pen/jEMpmP/

function fancyAmount(numbers) {

  var numbers = String(numbers);

  var small = numbers.substr(numbers.length -3)
                     .replace(/(.+)/, "<small>$1</small>");

  return numbers.replace(/(d)(?=(d{3})+(?!d))/g, '$1.')
                .replace(/(d{0,3}$)/, small);
}

Kalo ingat dan ada waktu, nanti di-optimize. :D
Atau kalo ada yang mau bantu, silahkan

UPDATE siangnya

Coba implementasikan di AngularJS. Tinggal jadiin filter. Misalnya

angular.module('App', [])
  // ... other code
  .filter('fancyAmount', function ($sce) {
    return function (numbers) {

       var numbers = String(numbers);

       var front = numbers.replace(/(d)(?=(d{3})+(?!d))/g, '$1.')

       var small = numbers.substr(numbers.length - 3)
                          .replace(/(.+)/, "<small>.$1</small>");

       var finalle = front.replace(/(.d{3}$)/, small);

       return $sce.trustAsHtml(finalle);
    }
  });

Lalu di HTML

...
<span ng-bind-html="123456789 | fancyAmount"></span>

Kenapa pake ng-bind-html dan $sce? :/
Karena kalau langsung, tag <small> akan di-escape.

Dengan sedikit bumbu CSS, outputnya jadi seperti ini :D

Screen Shot 2014-12-28 at 14.33.21

Manfaat Local History di IDE/Editor

local-history
Standar

Hohoo… Hari ini agak sedikit stress. Ceritanya saya buat private composer package untuk salah satu project. Setelah package itu di-pull dari repository dengan composer install, saya mengerjakan project seperti biasa. Tapi karena lagi agak malas, beberapa file di folder vendor saya edit langsung. Niat hati sih nanti di-push ke repo.

Ntah apa yang ada dipikiran saya saat itu. Setelah aplikasi berjalan sebagaimana mestinya, saya hapus folder vendor lalu saya lakukan composer update. Dan, seperti yang sudah diduga, file yang sudah di-edit menjadi seperti awal lagi :| Oh God, Why? Dan karena folder vendor ini termasuk folder yang masuk dalam list .gitignore, jadi tidak bisa di-restore dengan VCS (kecuali pernah pake git add --force, lalu commit).

Local History for Rescue

Setelah beberapa jam mencoba mengumpulkan kembali serpihan code sebelumnya dari otak, akhirnya saya ingat dengan local history. Biasanya saya menggunakan vim, tapi kebetulan saya menggunakan IDE dari JetBrains. Solusinya simple banget, cukup dengan right click di folder atau root project, lalu pilih Local History > Show History. Kita bisa mencari file-file berdasarkan perubahan yang pernah kita lakukan. Baik itu perubahan langsung dari IDE, maupun perubahan dari luar. Kita bisa memilih hanya file tertentu yang di-revert, suatu folder ataupun keseluruhan perubahan. Atau bisa juga dengan copy paste hanya pada bagian yang dibutuhkan.

Fiuhh… Thanks JetBrains :D

Berikut penampakan Local History

local-history

Vim

Bila anda juga pengguna vim, sebenernya ada fitur yang serupa. Setiap kali anda edit file akan dibuat file .swp. Sebaiknya dari awal sudah dikonfigurasi agar file backup ini dipisah dari working folder. Detailnya bisa pelajari disini http://vim.wikia.com/wiki/Remove_swap_and_backup_files_from_your_working_directory

Saya belum pernah coba, tapi sepertinya “plugin” ini layak untuk dicoba:
https://github.com/hjdivad/vimlocalhistory
https://github.com/serby/vim-historic

Sepertinya saya harus explore fitur vim yang ini. Btw, punya info vim plugin lain? :/

How to access database in Homestead

homestead-mysql-pgsql
Standar

Anda bingung bagaimana cara mengakses database yang ada di dalam Homestead? :/

Video yang didemonstrasikan di Laracasts menggunakan SequelPro. Bila saya menggunakan salah satu distro Linux atau Windows, apakah saya harus install aplikasi desktop seperti MySQL Workbench dengan ukuran file yang besar? :O Heeelp!!

Padahal saya hanya mengakses hal-hal yang sederhana. Terlalu berlebihan rasanya kalau harus install aplikasi semacam MySQL Workbench, HeidiSQL, Navicat, blabla…

Jangan takut jangan khawatir, berikut cara alternatif yang lebih hemat.

Command line

Ini cara paling mudah. Jika anda sudah install MySQL/PostgreSQL client berbasis CLI di host machine, cukup jalankan command tersebut dan ditambahkan port.

MySQL

mysql -u homestead -psecret -P 33060

PostgreSQL

PGPASSWORD=secret psql -U homestead -h localhost -p 54320

Web

Anda bisa menggunakan web server di host machine. Ntah itu Apache HTTPD, nginx, LiteSpeed, IIS, atau apapun yang bisa menjalankan PHP. Kalau belum terinstall web server, anda menggunakan PHP built-in server.

Anda bisa menggunakan database client apapun yang berbasis web. Misalnya PHPMyAdmin, Chive, MyWebSQL, atau apapun yang berbasis web. Dan tidak harus berbasis PHP. Tapi disini saya beri contoh menggunakan Adminer.

Letakkan file Adminer ditempat yang seharusnya. Misalnya di /var/www/adminer atau di ~/public_html/adminer. Tergantung konfigurasi web server anda.

Sebagai contoh, saya meletakkan di ~/webapp/adminer. Lalu saya jalankan PHP built-in server.

php -S localhost:8000 -t ~/webapp/adminer

Bila kita buka localhost:8000 dari browser, akan muncul Adminer.

Untuk MySQL tinggal masukkan saja:

Server: 127.0.0.1:33060
Username: homestead
Password: secret

Screen Shot 2014-10-21 at 18.57.58

Untuk mengakses PostgreSQL, jangan lupa ganti dengan PostgreSQL. Lalu isi dengan:

Server: 127.0.0.1:54320
Username: homestead
Password: secret

Screen Shot 2014-10-21 at 18.56.56

Akses dari Homestead

Buka file Homestead.yml. Tambahkan beberapa mapping

folders:
  - map: ~/webapp/adminer
    to: /home/vagrant/adminer

sites:
  - map: adminer.app
    to: /home/vagrant/adminer

Jangan lupa tambahkan sesuatu di /etc/hosts. Jika menggunakan Windows tambahkan sesuatu di %System32%\drivers\etc\hosts

Buka adminer.app:8000 dari browser.

MySQL/PostgreSQL
Server: [boleh dikosongkan karena default localhost]
Username: homestead
Password: secret

Yummy… cara ini sangat hemat dan dapat dengan mudah diakses di komputer lain. :p