PHP jauh lebih baik dari yang kamu fikirkan

Fabien Potencier

July 04, 2012

Diterjemahkan dari : link sumber

Kata-kata ejekan tentang PHP dibicarakan dimanapun, bahkan mereka yang mengatakan  ini adalah orang orang yang pandai, ketika  Jeff Atwood menulis ejekan  tentang PHP membuat saya berfikir untuk menulis hal-hal baik mengenai PHP.

Masalah terbesar dari ejekan tersebut  berawal dari mereka yang stuck dengan teknologi lama PHP dan mereka menutup mata dan tidak mau mengakui bahwa kini PHP telah menjadi jauh lebih baik, jauh lebih baik dari level bahasa dan juga komunitas, faktanya PHP kini berkembang jauh lebih pesat dari bahasa pemrograman / platform web lainnya, ini tidak selalu terjadi tapi 5 tahun terakhir menjadi perjalanan luar biasa bagi PHP.

Sebelum berbicara tentang hal-hal luar biasa yang telah diraih oleh Komunitas PHP baru-baru ini, mari kita lihat angka-angka menarik ini, PHP digunakan oleh 77.9% dari seluruh website yang mana menggunakan pemrograman server. WordPress digunakan oleh 16.6% dari seluruh website di dunia. jika kamu lihat tiga CMS yang sekarang sedang top, website-website yang termonitor menggunakan CMS : WordPress yang pertama dengan 54.3%, Joomla kedua dengan 9.2, Drupal ketiga dengan 6.8%. Ketiga product tersebut ditulis menggunakan PHP.

PHP seharusnya sudah melakukan hal yang benar bukan, tidak ?

Sekarang biarkan saya memberitahu kamu sebuah rahasia tentang PHP “tour de force”: meskipun perubahan bertahun-tahun, PHP masih saja bahasa termudah untuk dipelajari oleh orang-orang yang non technical: ini membuat semua orang dapat membuat web dinamis lebih cepat dari pada teknologi-teknologi lainnya, ini membuat semua orang untuk meng-host website dengan mudah dan murah tanpa kerepotan yang berarti. PHP mungkin bukan bahasa terbaik yang pernah didesain di dunia ini, tapi ini jelas-jelas membuat pekerjaan selesai, dan kamu tidak bisa berargument tentang ini.

PHP, bahasa pemrograman

PHP 5.0 (yang dirilis pada  2004) memberikan kita objek model yang sangat solid… tunggu sebentar, aku baru saja berbicara tentang sesuatu yang dirilis 8 tahun yg lalu dan sekarang PHP 5.4 telah hadir dengan  berbagai macam hal yang mungkin sebelumnya hanya kamu mimpikan dalam pengembangan bahasa pemrograman web modern: ya, PHP mendukung namespaces; ya, PHP mendukung closures; ya, PHP mendukung traits.
Ini memang membutuhkan waktu bagi PHP untuk hadir dengan sintak yang lebih manis/cantik yang membuat pengembangan web menjadi lebih baik dari sebelumnya: ya, PHP mendukung [] untuk membentuk array; ya, PHP mendukung pemangilan methon pada object yg baru dibuat ((new Foo())->bar()); ya, PHP mendukung pemangilan item dalam array dari sebuah ekpresi ($foo->bar()[1]).

PHP telah belajar dari kesalahan-kesalahannya sendiri: register_globals dan   magic_quotes yang sudah benar-benar ditinggalkan.

Terakhir, tapi bukan akhir, PHP bahkan hadir dengan web server yg terintegrasi yang mempermudah pengetesan dikomputer local dan memulainya dengan cepat.

Tantangan berikutnya: bagaimana kita “Upgrade” semua tutorial lama yang berbicara tentang PHP di web ? Apakah cara terbaik untuk mendukung teknologi WebSocket pada aplikasi PHP ?

PHP, Ekosistem

Memiliki bahasa pemrograman yang bagus adalah keren, tetapi ekosistem yang keren tentunya lebih baik. Dan ekosistem milik PHP telah berevolusi sangat banyak beberapa tahun terakhir.

Git

Saya tidak akan bicara banyak tentang satu ini. Git digunakan dimana-mana dan PHP menggunakan git sejak awal. hampir semua library PHP, Framework, dan produk-produk kini menggunakan Git, termasuk PHP itu sendiri.

Composer

Dua tahun yang lalu saat itu saya ingin membersihkan PEAR-hack jelek yang saya miliki dalam Symfony 1 untuk medukung plugin-plugin. Saya ingin menggantinya dengan sesuatu yang dapat mengelola dependencies pada project php saya, bukan global installer seperti PEAR. Mengelola dependencies bukanlah hal yang mudah, maka saya mencoba untuk mencari algoritma terbaik untu mengelola dependencies pada perangkat lunak; saya mencoba mencari kemana-mana: dari Perl ke Ruby, dari Debian ke Redhat. dan tidak ada yang memuaskan: hanya solusi sendiri yang digunakan untuk bekerja…secara empiris. lalu saya menemukan ZYpp. Ini dia, ZYpp digunakan oleh SAT solver untuk mengelola dependencies. melaju kedepan. Terima kasih atas kerja keras Nils Adermann dan Jordi Boggiano, sekarang PHP memiliki dependencies manager yang terbaik untuk mengelola dependencies, Composer.

Ya, PHP memiliki dependency manager yang lebih baik dibanding bahasa pemrograman lainnya.

Dan terima kasih pada Git, Composer, dan PHP built-in web server, yang membuat semuanya menjadi lebih mudah untuk download/install/test a PHP project.

Mau coba Symfony (menggunakan PHP 5.4)?

$ composer.phar create-project symfony/framework-standard-edition
$ cd framework-standard-edition
$ ./app/console server:run

Atau mau coba Silex ?

$ composer.phar create-project fabpot/silex-skeleton
$ cd silex-skeleton
$ php -S localhost:8888 -t web/

Belum tau tetang Composer? kamu harus belajar tentang ini, buka  Packagist, repositori utama Composer, disana sudah ada sekitar 1900+ packages yang sudah digunakan jutaan kali dalam kurang dari 3 bulan.

Tantangan selanjutnya: menyertakan installer Composer pada PHP versi berikutnya ?

Kolaborasi

Kolaborasi antar komunitas adalah poin penting pada post ini; suatu hal yang membanggakan. kita memulai untuk melihat kolaborasi yang lebih baik antara project-project PHP, bahkan dari yang paling besar, salah satu yang kamu kira terlalu besar untuk peduli tentang yang lain.

phpBB, Drupal, eZ Publish, Symfony, and many others (phpDocumentor, PHPUnit, Behat, Zikula, Propel, Doctrine, Midgard, …) mereka berbagi code. Ya, mereka “kompetitor” tapi mereka semua mengatahui bahwa cross-pollination (penyerbukan silang) adalah hal yang baik. dan Composer adalah alat yang tepat.

Tantangan selanjutnya: Meyakinkan lebih banyak project untuk mengikuti trend.

Kesimpulan

Biarkan saya berucap lagi: PHP mungkin bukan bahasa pemrograman terbaik, saya yang akan pertama meneriakan ini, Tapi PHP adalah web platform terbaik… ever.

Agile dengan Scrum

Catatan belajar  Scrum Agile Software Development dan tentang bagaimana Scrum Agile Software Development  mengubah cara orang berpikir tentang pengembangan perangkat lunak yang lebih baik dan fleksibel.

Apa itu Agile?

  1. Waterfall

    • Waterfall adalah sofware development adalah metoed yang digunakan sebelum “Agile” diperkenalkan.
    • Waterfall menggunakan  “consistent sequences of stages” atau proses berurutan yang konsekuen (dan tentunya sulit mengadaptasi perubahan) yaitu pada setiap tahapnya yaitu pada tahap Design, Build dan Test.
    • waterfall
    • Proses-proses berurutan tersebut biasanya  melibatkan group (orang-orang) yang berbeda dan atau bahkan departement yang berbeda untuk melakukan setiap tahap tersebut (Design, Build dan Test), dimana setiap pekerjaan pada suatu tahap telah  diselesaikan suatu grup/department maka mereka akan melemparkan pekerjaan tersebut ke grup/depertemen ditahap selanjutnya.
    • Masalahnya adalah saat handoff (perpindahan pekerjaan) pekerjaan ke group/depertemen di step selanjutnya ini terkadang seperti melemparkan pekerjaan ke balik tembok begitu saja karena group selanjutnya yang melakukan handoff pekerjaan tersebut tidak banyak komunikasi dengan group sebelumnya yang berada diproses sebelumnya.
    • Beberapa masalah lain yang sering muncul adalah:
      • Perbedaan interpretasi dari tiap group di setiap proses yang berbeda dapat menghasilkan perangkat lunak yang jauh berbeda dari apa yang diharapkan pada awalnya sehingga banyak waktu dan biaya yang terbuang karenanya.
      • Tidak banyak kesepatan untuk melakukan perubahan selama proses proses  sedang berjalan.
      • Bila tidak memungkinakan melakukan perubahan dalam project seperti merubah priorities dan mengadaptasi masukan-masukan berharga yang didapatkan dari luar maka bisa jadi product yang dikembangkan sudah out of date dan tidak lagi menarik saat di release dan tidak bisa bersaing dengan kompetitor.
      • problem-with-waterfall
      • Masalah diatas timbul karena tidak adanya kolaborasi antara group/departement di tiap level proses yang berbeda.
  2. Agile Manifesto

  3. Jenis-jenis “agile”

    1. Scrum
    2. Lean and Kamban
    3. Extreme Programming (XP) seperti termasuk: Pair programming, Code Review, Test Driven development dan Unit Testing.
    4. jenis2scrum
  4. Apa yang “Agile” dapat lakukan untukku ?

    • Agile bertujuan untuk mengatasi masalah umum dalam pengambangan software, praktik penggunaan Agile merubah dari sekedar membuat dokumen formal mengenai design dan requirement terlebih dahulu menjadi lebih mengajak  customer untuk terlibat ebih jauh dalam mencari solusi bersama-sama dalam proses-proses iterative, Agile team berusaha untuk mengurangi resiko dalam pengambangan software dengan kemampuan untuk merespon perubahan.
    • Mengapa penting belajar Agile Software development :
      • Pertimbangkan ini: menambah kemampuan untuk bekerja dengan orang lain, kesempatan untuk melamar pekerjaan yang lebih terbuka terhadap orang-orang yang memiliki keahlian Agile Software development.
      • Kita menemukan banyak banyak software developer bekerja secara sendiri namun dengan belajar Agile kita menambah kemampuan dalam bekerja sama dalam team bahkan saat team tersebut tidak mengimplementasikan Agile kemapuan tersebut misalnya kemampuan untuk mengatur prioritas pekerjaan dan bagaimana mengajak customer untuk terlibat dalam perkerajaan.
      • Selanjutnya kita fokus dengan satu agile model yaitu Scrum.
  5. Review, “Jadi apa itu Agile ?”

 Agile software development mendorong komunikasi dalam team dan self-organization dimana sukses utama diukur dengan software yang berfungsi. mengajak serta customer dalam tahap development dan dapat merespon  requirement yang berubah-ubah.

Scrum Basic

  1. What is Scrum
    1. Scrum mendorong komunikasi dalam team  dan self organization dimana sukses utama adalah diukur dari Software yang berfungsi, meilbatkan pendapat/suara consumen dalam tahap proses pengambangan dan kemampuan merespon requirment yang berubah-ubah.
    2. Metodologi scrum adalam model dari Agile yang terdiri dari well defined framework untuk melakukan pengembangan software dalam sebuah team.
    3. Scrum berasal dari olahraga rugby yaitu:
      • In rugby union a scrum is a means of restarting play after a minor infringement. It involves up to eight players from each team, known as the pack or forward pack, binding together in three rows and interlocking with the free opposing teams forwards.
      • Makna sesuai kontek Agile:
      • scrum_adalah
    4. Who
      1. Roles of Scrum team:
        • who-terdiri-dari
        • Product Owner
          • Berperan sebagai perwakulan dari sura customer dan berperan dalam mengurus product backlog. product owner memiliki tanggung jawab untuk menentukan apa yang harus team kerjakar beserta urutan pengerjaannya.
            • Orang di luar scrum team yang juga menentukan bagaimana program ini seharusnya di sebut stackholder (Client, Customer, Manager di luar scrum team dll). product owner harus berkomunikasi dengan para stackholder mengenai produk dan prioritas pengerjaannya.
            • Daftar tugas Product Owner :
              • Menentukan apa yang dikerjakan team
              • Menentukan urutan prioritas pekerjaan
              • Menyimpan items pekerjaan di product back log
              • Bekerja dengan stackeholder untuk memahami kebutuhan bisnis proses
              • Bekerja dengan customer juga untuk memahami kebutuhan bisnis proses
              • Tidak ada orang lain yang memiiki kewenangan untuk meminta development team dalam mengerjakan sesuatu. stakeholder atau siapapun di luar team harus berbicara dengan product owner dalam pengerjaan sesuatu fitur atau perubahan oleh team scrum.
              • Secara umum product owner memiliki kewajiban memastikan visi dari sebuah product untuk sesuai dengan roadmap.
              • Product owner harus bisa berkomunikasi dengan baik bagaimana pengerjaan product kedepan.
              • Product Vision dan Product road map adalah bagian dari disiplin ilmu product management di Scrum hal ini tidak dijelaskan secara spesific.
              • Tugas Utama:
                • Mengurus backlog
                • untuk sekarang kita cukup berfikir bahwa backlogs adalah to-do list untuk team.
                • Mengurus urutan pengerjaan dimana yang paling penting adalah yang paling atas.
                • Pada umumnya product backlog item (PBI) dibuat dalam bentuk user story:
                  • User stories mendefine:
                    • Siapa usernya
                    • apa yang mereka perlukan
                    • dan mengapa mereka memerlukan
                • Product owner harus available dalam berjalannya sebuah sprint
                • Developer berkomunikasi dan bertanya pada product owner tentang pekerjaan yang telah mereka kerjakan atau mereviewnya.
                • Transfer informasi antara product owner dan developer bukan handoff tapi collaboration.
        • Scrum Master
          • Merupakan suatu posisi yang spesial dalam scrum dimana scrum master berperan untuk memastikan pekerjaan team berjalan dengan baik dan mulus dengan memfasilitasi scrum dan menghilangkan hambatan dalam proses yang sedang dikerjakan. semua hal yang terjadi dan dilakukan oleh team dalam mengerjakan pekerjaan mereka dalam sprint haru menjadi perhatian seorang scrum master.
          • Dengan peran ini maka scrum master adalah fasilitator scrum dan harus bersifat tegas dalam memastikan tema tidak mengerjakan hal yang menyimpang dari perkerjaan seharusnya maupun dari scrum sprint,dan memastikan sprint tetap berjalan pada track yang benar.
          • Scrum master mengurus logistic dan menjadwal berbagai scrum events dan mengelola srum tools.
          • Scrum master bertugas memastikan bahwa team tidak terganggu dan terpecah konsentrasinya oleh pekerjaan diluar sprint bahkan oleh product owner.
        • Development Team Member
          • Seua orang yang menulis dan mengetes code, bertanggung jawab untuk self-assigning tugas dan mengecek apakah perkerjaan sudah sesuai dengan acceptance kriteria.
          • Berkomitment untuk menyelesaikan pekerjaan-pekerjaan dalam suatu sprint.
          • Berbagi definition of done dan mengeset standar yang digunakan dan disepakati dalam team sebelum mereka menyatakan backlog items selesai.
          • Idealnya scrum team member memiliki fungsi yang bersilangan yang artinya merkea punya keahlian yang fleksible dalam berkontribusi didalam team, misalnya frontend developer di dalam team tapi jaka ada pekerjaan lain dalam print tsb yang membutuhkan bantuannya maka dia akan ikut berpartispasi dalam menyelesaikan tugas tersebut. hal ini karena Output dari team lebih penting dari pada output personal team member.
          • Team member dapat bertanya pada scrum master tentang bagaimana team membawa sprint tetap melaju kedepan.
          • Dalam scrum development team direpresentasikan oleh programmer yang bertanggung jawab menulis dan mengetest code.
    5. What and When
      1. Sprint
        1. Adalah sebuah iterasi yang dilaksanakan oleh team.
        2. Team dapat menghabiskan beberapa sprints dalam mempersiapkan release dari sebuah software.
        3. Spring dimulai dengan komitmen team tentang pekerjaan yang akan diselesaikan dan berakhir dengan demonstrasi product.
        4. Ketika banyak details dari item backlog dapat ditemukan sebelum team memasuki sprint sebgaian besar pekerjaan untuk dibangun dan di test berlangsung ditengah-tengah sprint.
        5. Maximum sprint tidak boleh lebih dari satu bulan atau mengacu pada timebox yang disepakati bersama.
        6. Panjang waktu sebuah Sprint tidak boleh melebihi dari batasan yang telah di tentukan dan semua orang berkomitmen untuk mnyelesaikan pekrjaan dalam waktu sprint yang telah disepakati.
        7. Sprint baru segera dimulai setalah sprint sebelumnya selesai.
        8. kalimat “Potentially shippable product” ini adalah hal penting yang sering dibahas selama sprint ini karena seperti yang telah di deklarasikan dalam agile manifesto, “We value working software over comprehensive documentation”, yang artinya disini kita akanmemiliki software yang di design, dibangun dan di test.
      2. Scrum Events (Scrum Ceremonies)
        1. Terdpat berberapa event yang mendukung berjalannya Scrum yaitu:
          1. Sprint planning
            • Team berkumul untuk mempersiapkan sprint baru, mempersiapkan items mana saja yang akan di dlam sprint baru tersebut.
          2. Daily standup
            • Pada daily standup angguta team menginformaikan tentang status pekerjaannya, apakah ada kendala atau issue yang menghambat.
          3. Backlog refinement
            • Team melakukan review terhadap backlog items dan diperkirakan tingkat kesulitan pengerjaannya.
          4. Sprint Review
            • Pada sprint review kita melakukan demonstrasi pada stakeholders tentang fungsionalitas product.
          5. Retrospectif
            1. Team menunetukan area dimana dapat dilakukan perbaikan dan menentukan goal yang terukur untuk sprint selanjutnya
    1. Why and How
  1. bersambung ….

Ubuntu APT-GET error : Could not get lock

I got following error when running apt-get on my Ubuntu 14.04 machine :

farhan@farhan-he:~/lms$ sudo apt-get update
[sudo] password for farhan:
E: Could not get lock /var/lib/apt/lists/lock – open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/

And here is how I solved the problem :

This should be used as last resort. If you use this carelessly you can end up with a broken system. Please try the other answers before doing this.

You can delete the lock file with the following command:

sudo rm /var/lib/apt/lists/lock

You may also need to delete the lock file in the cache directory

sudo rm /var/cache/apt/archives/lock

After that, try opening Synaptic again.

resource : source

Scrum Agile Development

Sumber : http://www.scrumguides.org/scrum-guide.html

Tujuan

Untuk menopang pengembanga produk yang komplek.

Definisi

Merupakan sebuah framework yang mana dapat membantu orang-orang menyelesaikan masalah (project) yang komplek, yang mana secara produktiv dan kreatif dapat menghasilkan produk yang berkualitas.

Scrum itu :

  1. Ringan / Lighweigh
  2. Mudah dipahami
  3. Tapi sulit untuk mencapai level ahli

Teori-teori yang digunakan :

Transparan

Terbuka akan semua dalam project,  berbagi pemahaman dan informasi.

Inspeksi

Pengguna scrup harus mengecek segala hal apakah masih relevan dengan goal dari sprint yang sedang berjalan.

Adaptasi

Bila menemukan adanya penyimpangan yang berpotensi produk tidak dapat diterima maka semua proses yang atau material yg sedang diproses harus diatur ulang.

Pengaturan ulang harus dilakukan secepatnya sebelum penyimpangan semakin jauh.

Empat resep dalam scrum :

  • Sprint Planning
  • Daily Scrum
  • Sprint Review
  • Sprint Retrospective

Nilai-nilai dalam scrum :

  • commitment
  • courage
  • focus
  • openness
  • respect

Struktur Team Scrum :

Dalam team scrum terdiri dari Product Owner, the Development Team, and a Scrum Master.

Selengkapnya : scrum-guide

Tags :

  1. Apa itu scrum
  2. Bagaimana melakukan scrum
  3. Pengenalan scrum
  4. Tutorial scrum