Rename Multiple Files dengan shell script

Jadi, saya punya list file berikut (di list menggunakan command ls):

1.nasdem.png
1.nasdem@2x.png
10.hanura.png
10.hanura@2x.png
11.damai.png
11.damai@2x.png
12.aceh.png
12.aceh@2x.png
13.aceh.png
13.aceh@2x.png
14.pbb.png
14.pbb@2x.png
15.pkp.png
15.pkp@2x.png
2.pkb.png
2.pkb@2x.png
3.pks.png
3.pks@2x.png
4.pdip.png
4.pdip@2x.png
5.golkar.png
5.golkar@2x.png
6.gerindra.png
6.gerindra@2x.png
7.demokrat.png
7.demokrat@2x.png
8.pan.png
8.pan@2x.png
9.ppp.png
9.ppp@2x.png

kemudian saya ingin menghapus nama-nama partai dari nama file tersebut sehingga, misalnya jika nama file awalnya adalah 1.nasdem.png akan dirubah menjadi 1.png, atau jika nama filenya 3.pks@2x.png akan dirubah menjadi 3@2x.png. Salah seorang kolega kantor menyarankan untuk menggunakan explorer (finder di mac), tapi saya tertarik untuk menggunakan terminal/shell script. Setelah mencari-cari caranya, akhirnya saya menggunakan cara berikut (menggunakan awk):

1. ini untuk merename file-file yang berakhiran @2x.png

ls | awk '/[0-9]+/{old=$0;gsub(/\..*@2x\./,"@2x.",$0);system("mv \""old"\" "$0)}'

2. untuk file yang tidak berakhiran @2x.png langsung seperti ini

ls | awk '/[0-9]+/{old=$0;gsub(/\..*\./,".",$0);system("mv \""old"\" "$0)}'

penjelasannya kurang lebih seperti ini:
$> ls

ini me-list semua daftar file yang ada di direktori, kemudian di pipeline ke awk
>ls | awk
bagian ini
/[0-9]+/
mengharuskan file diawali dengan digit, setelah itu:
$>ls | awk ‘/[0-9]+/{old=$0;gsub(/\..*\./,”.”,$0);
simpan nama file dalam variable old, dan substitusi semua karakter diantara dua titik dengan sebuah titik. langkah terakhir rename file dengan perintah mv
>ls | awk ‘/[0-9]+/{old=$0;gsub(/\..*\./,”.”,$0);system(“mv \””old”\” “$0)}’

jadidah kerename semua filenya:
1.png
10.png
10@2x.png
11.png
11@2x.png
12.png
12@2x.png
13.png
13@2x.png
14.png
14@2x.png
15.png
15@2x.png
1@2x.png
2.png
2@2x.png
3.png
3@2x.png
4.png
4@2x.png
5.png
5@2x.png
6.png
6@2x.png
7.png
7@2x.png
8.png
8@2x.png
9.png
9@2x.png

Iklan

Preserving Keystrokes

Saya suka dengan ide Scott Hanselman di blognya. Saya kira alasan yang sama saya gunakan, karena saya memiliki waktu yang terbatas, maka saya berusaha me-preserve pengetahuan yang saya miliki, salah satunya dengan menuliskannya di blog. Salah satu alasannya adalah agar saya tidak berulang-ulang menuliskan hal sama jika seseorang bertanya tentang sesuatu yang saya ketahui. Jadi, ketika seseorang bertanya pertanyaan yang sama, saya bisa mereferkannya ke blog yang sudah saya tulis.

Saya beruntung karena dalam agama Islam dikenal apa yang disebut amal jariyah, yaitu amal yang terus berbuah pahalanya meskipun kita telah meninggal selama amal tersebut bermanfaat bagi orang lain. Nabi Muhammad SAW tentunya adalah manusia yang paling banyak amalnya, karena semua ajaran Islam disampaikan dan dicontohkan oleh beliau. Dan apa yang membuat orang-orang terdahulu (misal. Ulama/Ilmuwan) tetap dikenang adalah melalui karya-karyanya berupa buku-buku (kitab) yang telah beliau semuanya tulis; jadi ketika seseorang pada masa ini bertanya tentang masalah Fiqih misalnya, dia bisa bertanya kepada Imam Syafi’i rahimahullah, maka Imam madzhab Syafi’i tersebut tidak perlu lagi menuliskan jawabannya kepada penanya tersebut, karena beliau sudah meninggal lebih daru seribu tahun yang lalu, tapi beliau bisa secara tidak langsung me-refer si penanya pada “keystroke/penstroke” yang sudah beliau preserve melalu karya beliau, al-Umm misalnya.

Saya memilih untuk meng-hosting blog ini juga di wordpress.com bukan dengan hosting sendiri juga salah satu alasannya adalah semoga dengan demikian, selama wordpress.com masih ada, tulisa-tulisan saya juga masih bisa dibaca meskipun saya sendiri bisa jadi sudah meninggal. Dan semoga, dengan demikian saya masih dapat memperoleh aliran pahala dari amal jariyah ini.

aamiin

Perjalanan

Saat ini (Jumat, 17 Jan 2014) saya melakukan perjalanan dari Jakarta menuju Tulungagung dengan Kereta api Gajayana. Saya berfikir, berapa banyak orang yang pernah berada dalam kereta api ini, mungkin jutaan orang pernah naik dan turun dari dalam kereta api ini.

Dunia ini saya pikir serupa dengan kereta api ini, entah berapa miliar orang telah pernah hidup di dunia ini. Tapi satu hal yang pasti, sama seperti semua penumpang kereta api akhirnya harus turun dari kereta, semuanya orang di dunia ini pada akhirnya akan meninggalkan dunia ini; baik suka maupun tidak suka.

أَيْنَمَا تَكُونُوا يُدْرِكْكُمُ الْمَوْتُ وَلَوْ كُنْتُمْ فِي بُرُوجٍ مُشَيَّدَةٍ

Di mana saja kamu berada, kematian akan mendapatkan kamu, kendatipun kamu di dalam benteng yang tinggi lagi kokoh (an-Nisa 78)

Semua orang, saya atau anda, semuanya pasti mati; pertanyaannya warisan apa yang hendak kita tinggal setelah kematian kita; dan sebagai muslim bekalan apa yang telah kita persiapkan untuk perjalanan selanjutnya menuju kampung akhirat; karena perjalanan setelah kematian itu jauh lebih panjang dari pada perjalanan kita di dunia ini.

Ad-dunyaa mazro’atul akhirah (الدنيا مزرعة الآخرة), begitu kita di ajarkan; dunia ini adalah ladang, kebun untuk akhirat kita; kita tanami kebun kita dengan yang baik-baik dan kita rawat dengan baik, maka di akhirat kelak kita akan menuai hasil yang baik pula; tapi, kalau kita tidak tanami dan rawat kebun kita dengan baik, maka akan merugi dan nelangsalah kita kelak.

Waktu kita terbatas, bekal yang dibutuhkan banyak, maka jika kita mengharapkan hasil yang baik di akhirat kelak, maka kita tanami kebun kita dengan tanaman-tanaman yang baik, kita isi waktu-waktu kita dengan amal baik yang terbaik; semoga dengan begitu kita kelak bisa meraih kebahagiaan di ujung perjalanan kita di surga sana.

وُجُوهٌ يَوْمَئِذٍ نَاضِرَةٌ
إِلَىٰ رَبِّهَا نَاظِرَةٌ

Wajah-wajah (orang-orang mukmin) pada hari itu berseri-seri.Kepada Tuhannyalah mereka melihat.
(al-Qur’an al-Qiyamah[75]:22-23)

13 Buku Yang Ingin Saya Baca Tahun 2014

Tahun lalu, saya ingin membaca 13 buku tapi tidak tercapai, hanya membaca 11 buku saja. Mungkin, salah satu penyebabnya saya tidak merencanakan buku-buku apa saja yang akan saya baca pada tahun 2013 tersebut. Oleh karena itu tahun ini, saya merencanakan buku-buku apa saja yang ingin saya baca:

  1. Al-Ghazali menjawab 100 soal keislaman, ini bukan terjemah karya Imam Ghazali, tapi karya mantan Rektor universitas al-Azhar. Buku ini sudah sempat saya baca beberapa bagian, namun masih belum selesai.
  2. Tafsir Al-Mishab vol. 3, karya Prof. Dr. Quraish Shihab
  3. The Startup Owner’s Manual: The Step-By-Step Guide for Building a Great Company, by Steve Blank dan Bob Dorf
  4. Mindset, the new Phsycology of Success, by Carol S. Dweck
  5. Failing Forward : Turning mistakes into stepping stones to success
  6. Thinking Fast & Slow, by Daniel Kahneman.

Untuk sementara 6 buku itu saja yang masuk list, karena biasanya di tengah jalan bakal nemu-nemu buku yang bagus yang juga ingin dibaca, jadi dicadangkan space 7 buku. Ada rekomendasi, buku apa yang sebaiknya dibaca tahun ini ?

update 1 23 Januari 2014:

  1. Chairul Tanjung si Anak Singkong, sudah selesai baca duluan pas pulang kampung

happy reading :)

Blackberry 10 : Mengintegrasikan aplikasi dengan Sistem Search

Alhamdulillah selama ini saya masih bisa untuk sering melakukan pembaruan terhadap aplikasi Quran. Meskipun sudah jarang pembaruan tersebut saya push ke github page. Hal ini karena ada beberapa developer yang kurang bertanggung jawab langsung mengcopy, mem-build dan menjualnya di BlackBerry World dengan tanpa memberikan credit kepada developer awal (saya) maupun disainer awal (mas Riswan).

Pembaruan terbaru yang segera ada dan dinikmati oleh semua pengguna aplikasi Quran adalah integrasi denga default sistem search yang ada di Sistem Operasi BlackBerry 10 (extended search). Untuk mengintegrasikan aplikasi kita dengan default search BB10 cukup mudah berikut caranya:

1. Jadikan aplikasi kita sebagai invocation target

Agar aplikasi kita bisa menjadi invocation target untuk extend search, pertama edit bar-descriptor.xml dengan menambahkan property seperti ini:

	<invoke-target id="com.hakimlabs.quran.search">
          <invoke-target-type>APPLICATION</invoke-target-type>
          <filter>
                 <action>bb.action.SEARCH.EXTENDED</action>
                 <mime-type>application/vnd.bb.search.criteria</mime-type>
          </filter>
          <icon>
		 <image>quran_icon2.png</image>
	  </icon>
       </invoke-target>

dengan ini kita sudah menyiapkan aplikasi kita sebagai invocation target untuk extended search. Sekarang tinggal menyiapkan apa yang kita lakukan saat aplikasi di invoke.

2. Handle saat aplikasi menerima invocation

dengan object invocationManager kita bisa menghubungkan signal invoke dari extended search dengan slot yang kita buat:

_invokeManager = new InvokeManager(this);
	connect(_invokeManager, SIGNAL(invoked(const bb::system::InvokeRequest&)),
					this, SLOT(onInvoked(const bb::system::InvokeRequest&)));

di dalam slot yang kita bisa mendapatkan keywords yang dimasukkan oleh user seperti ini:

void Quran::onInvoked(const bb::system::InvokeRequest& invokeRequest) {
if(invokeRequest.action() == "bb.action.SEARCH.EXTENDED") {
// send signal
emit doSearch(QString(invokeRequest.data()));
} else {
// some other invocation..
}
}

untuk mendapatkan keywords kita bisa memanggil invokeRequest.data() dan menjadikannya string sesuai kebutuhan kita. disini saya mengirim signan doSearch karena signal ini akan saya sambungkan dengan sebuah fungsi (slot) di qml untuk langsung melakukan pencarian. jangan lupa juga untuk mendifinisikan slot onInvoke (atau silahkan kasih nama sesuai keinginan) di header file.

Berikut screenshot setelah aplikasi dijalankan, dan kita melakukan pencarian dari sistem operasi (button search di home screaan BB10):

IMG_00000894

Developer adalah CS bagi App yang dikembangkannya

Sebagai developer (pengembang) aplikasi mobile, tentu kita sudah banyak menginvestasikan waktu, pikiran, dan perasaan (tsah :D) dalam aplikasi yang kita kembangkan. nah, gimana rasanya setelah aplikasi kita publikasikan di toko aplikasi seperti Google Play, BlackBerry World ataupun Apple AppStore secara gratisan pula, terus mendapatkan komen seperti ini:

ga bisa posting gan

atau seperti ini:

aplikasi apaan ini, masa ga ada button refresh-nya

atau gini:

aplikasi bosok

pasti kurang menyenangkan bukan :) tapi untungnya biasanya kalau aplikasi kita memang cukup bagus, lebih banyak lagi yang memberikan komentar secara baik-baik.

nah, gimana jadinya kalau ternyata ada komentar (dan rating) yang kurang bagus seperti itu ? tentu saja, kita harus berusaha membantu para user kita yang sudah download aplikasi kita; misalnya untuk masalah ini:

aplikasi apaan ini, masa ga ada button refresh-nya

meskipun menurut kita, sangat jelas (obvious) gimana cara nge-refresh aplikasi kita, kita sebaiknya tetap berusaha menjelaskannya dengan baik:

halo, untuk merefresh halaman yang anda akses, tarik halaman hingga muncul tulisan “release to refresh” setelah itu lepaskan, maka halaman akan direfresh/diperbarui.

ataupun terhadap pertanyaan-pertanyaan yang lain yang menurut kita sangat jelas (obvious) dan umumnya (menurut kita lagi) tidak perlu ditanyakan (ekstrem: pertanyaan bodoh).

hal tersebut penting, karena siapa lagi yang lebih tahu tentang aplikasi kita dibandingkan kita yang membuat aplikasinya. Juga dengan membaca dan mencoba memahami keluhan pengguna aplikasi kita, seringkali kita akan menemukan insight baru yang bisa membuat kita mendisain dan mengembangkan aplikasi kita dengan lebih baik lagi. nah, oleh karena itu kita tidak perlu ragu untuk menjadi “customer suppoer/CS” dari aplikasi yang kita buat, yang kita telah invest waktu dan persaan dalam pengembangannya.

happy cs-ing :)