Salindia Git

Saya sudah mengetahui buku yang mengulas Git sebelumnya. Buku yang dirilis terbuka ini sangat membantu saya dalam mempelajari teori cara kerja git. Asyiknya buku ini tersedia juga dalam format epub, yang membuat saya sangat nyaman membacanya dengan tablet.

Baru belakangan saya mengetahui ada juga salindia git yang disusun juga oleh Scott Chacon, penulis buku yang saya sebutkan sebelumnya. Perbedaan membaca buku dengan salindia adalah saat membaca salindia kita dipaksa untuk mengkhayalkan apa yang sedang diucapkan oleh sang penulis. Berbeda dengan buku, kita perlu menyimak baik-baik kalimat penulis.

Format salindia ini ternyata juga nyaman dibaca dengan tablet. Tadi pagi saat di dalam Transjakarta, saya sempatkan sambil membaca salindia ini. Sambil mendengarkan Hop3, album baru RAN, saya merasa begitu muda: membaca git dan mendengarkan RAN.

Pesan moral saya: bagi yang muda-muda, jangan menunda-nunda untuk belajar git. Wkwkwkwk…

Membaca Cepat Kolom InfoLINUX

Pada suatu hari, di dalam Transjakarta, saya sempatkan untuk membuka kembali koleksi buku-buku yang ada di tablet saya. Buku apa saja sih yang saya miliki? Jadilah secara acak saya memilih koleksi PDF InfoLINUX untuk dibaca.

Artikel yang saya baca hanyalah kolom dari para kolumnis InfoLINUX yaitu: Budi Rahardjo, Made Wiryana dan Michael S. Sunggiardi. Saya membaca cepat saja. Berikut saya coba tuliskan apa-apa saja yang menarik bagi saya.

Budi Rahardjo menulis soal investasi 101. Cerita tentang bagaimana hubungan kepercayaan dan investasi. Satpam yang di-PHK meminta pinjaman untuk membuka warung. Cerita lain yang menarik adalah soal keheranan akan kehebatan (eh ini dari blog atau kolom ya?). Tidak perlu heran Google dan perusahaan teknologi lainnya bisa hebat karena mereka memang bekerja keras dan konsisten. Sumber daya yang mereka miliki tentu mendukung ini semua. Termasuk kualifikasi SDM-nya.

Made Wiryana mencari majalah oprek yang semakin langka di Indonesia. Menurutnya, majalah ini diperlukan agar masyarakat bisa berbagi ilmu soal dunia oprek-mengoprek. Majalah yang beredar sekarang mayoritas hanya mengulas sisi teknologi produk, seperti fiturnya, tanpa berusaha lebih dalam mengulas bagaimana mereka bekerja, atau karya apa yang bisa dihasilkan dari oprek-mengoprek.

Michael S. Sunggiardi. Ia merupakan tokoh yang cukup veteran. Sudah 16 tahun ia berkiprah di dunia teknologi informasi. Perjalanannya dimulai dari mengelola ISP di Bogor, Juli 1995. Ia mengkritik orang-orang yang turut dibesarkan komunitas namun kemudian tidak lagi berkontribusi kembali pada komunitas karena hilang tertelan dunia bisnis korporasi.

Menulis kolom setiap bulan bukan suatu hal yang mudah. Salut saya untuk mereka bertiga karena memang kita semua lebih suka belajar dari cerita dari pada dari buku.

vim 101: Template

Seringkali kita dihadapkan pada situasi harus membuat berkas yang sama berulang kali. vim memiliki fitur template yang dapat menyediakan kita secara otomatis isi suatu file.

Berikut contoh berkas template vim saya:

za@zara:~/.vim/templates$ ls
html.tpl  py.tpl

Setiap berkas template perlu diletakkan pada direktori di atas. Saya baru memiliki dua template, yaitu untuk berkas html dan berkas python.

Coba saya cuplik template sederhana saya ini.

Berikut template untuk html
[sourcecode lang=”html”]
<html>
<head>
<title></title>
<meta name="generator" content="Vim" />
<meta name="author" content="za" />
</head>
<body>
<p>Something</p>
</body>
</html>
[/sourcecode]

Berikut untuk template python
[sourcecode lang=”python”]
!/usr/bin/python

def main():
print ‘hello world’

# Standard boilerplate to call the main() function
if __name__ == ‘__main__’:
main()
[/sourcecode]

Setiap kali saya membuat berkas baru dengan ekstensi html atau py, maka vim akan langsung mengisinya dengan kerangka template.

Silakan coba ketikkan

$ vim index.html

Lalu lanjutkan dengan

$ vim aritmatika.py

Template vim ini dapat membantu dalam mengingat kerangka dasar dan yang pasti tentu akan menghemat waktu.

Git 101: Mundur atau Maju

Aktivitas maju atau mundur pada git dilakukan dengan git checkout $SHA1_commit-id. Berikut saya coba ilustrasikan contoh kasusnya:

$ vim source.txt
a
$ git add source.txt
$ git commit -m "initial version"
[master 9429e54] initial version
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 source.txt

Lalu, saya coba mulai isi boilerplate program ini

$ vim source.txt
a
b

Periksa status git

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.
#
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   source.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Saya lakukan add dan commit

$ git add source.txt
$ git commit -m "alpha version"
[master 40d7b3e] alpha version
 1 files changed, 1 insertions(+), 0 deletions(-)

Belakangan, saya tersadar bahwa isi boilerplate saya salah, dan saya ingin kembali ke bentuk awal. Saya lihat dulu log git.

$ git log
commit 40d7b3eff8c88e4592a1d72c001c9cfdcd98ed7f
Author: Zaki Akhmad 
Date:   Fri Jan 11 17:45:40 2013 +0700

    alpha version

commit 9429e54b20519cd4a9e77dda541ea2fec4a56a11
Author: Zaki Akhmad 
Date:   Fri Jan 11 17:42:31 2013 +0700

    initial version

Baiklah, saya putuskan untuk kembali ke kondisi awal. Yang perlu saya lakukan adalah checkout ke SHA1 commit.

$ git log
commit 40d7b3eff8c88e4592a1d72c001c9cfdcd98ed7f
Author: Zaki Akhmad 
Date:   Fri Jan 11 17:45:40 2013 +0700

    alpha version

commit 9429e54b20519cd4a9e77dda541ea2fec4a56a11
Author: Zaki Akhmad 
Date:   Fri Jan 11 17:42:31 2013 +0700

    initial version

$ git checkout 9429e54b20519cd4a9e77dda541ea2fec4a56a11
Previous HEAD position was 40d7b3e... alpha version
HEAD is now at 9429e54... initial version

Saya coba lihat kembali berkas source.txt

$ more source.txt
a

Yak, kembali ke kondisi awal.

Zen of Python

by Tim Peters

$ ipython
Python 2.7.2+ (default, Jul 20 2012, 22:15:08) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

[sourcecode language=”python”]
import this
[/sourcecode]

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!