Jangan Bikin Ragu, Mas!

Posted: November 28, 2013 in Uncategorized

Hari ini, hampir seperti hari-hari yang lain, dengan setting latar beberapa bulan ini: sudah pindah ke rumah baru, hanya berdua dengan istri, baru dapet kabar istri hamil dua hari yang lalu. Masih terasa penat dan ngantuk semalam selepas kerja malam kantor untuk support pindahan firewall ke box yang baru. Box yang baru, tapi dengan fitur yang tidak sekaya box yang lama. Dimana ada banyak hal yang harus di concern dalam migrasi ini dan secara bersamaan tidak banyak orang yang memiliki holistic point-of-view ;;belagu dikit, padahal baru googling apa itu holistic :D. Btw ini salah fokus, kenapa jadi kerja malam yang dibahas.. :p

Lanjut…dengan penat dan kantuk masih berasa karena organ dalam tubuh dipaksa on-fire pada jam-jam orang tidur dan tahajud, pagi ini harus bangun sebentar untuk delivery wife, eh salah, nganter maksudnya (heran juga Vicky style udah ga jaman padalah belum ada satu semester). Jadi pagi ini istri tercinta harus menghadiri meeting di kantor regional daerah Gandul, Cinere. Jarak rumah ke kantor sekitar 20 menit ojek plus 5 menit rumah ke pangkalan ojek, what an easy task! hehe…

Saat mata masih kriyip-kriyip, terjadilah obrolan
“Nanti berarti bilang ke tukang ojek nya untuk pelan-pelan yah?”
“Ya” -dengan pengucapan pendek gaya Mario Teguh
Tapi “ya” singkat ini justru sebetulnya memunculkan reaksi berantai di otak yang tidak sesingkat yang terdengar dari mulut, mungkin juga demikian yang dialami Mario Teguh makanya kepalanya botak karena otaknya high utilized akibat kebanyakan “ya” pendek ini ;;salah fokus lagi.

Penjelasan reaksi otak saat “ya” pendek tadi kurang lebih: istri baru ketahuan hamil dua hari,tukang ojek mungkin masih dapet 1-2 rit sepagi ini, tekanan ekonomi, kenaikan BBM, dan autopilotnya inflasi di negri ini pasti kebanyakan dirasakan golongan menengah ke bawah termasuk tukang ojek yang nanti kita mintain tolong. Walhasil semuanya kalau di OR kan akan menghasilkan output yang hampir pasti: sudah bilang untuk pelan-pelan, tetap saja tukang ojek bawa motor tidak sehalus yang diharapkan dikarenakan perut istri memang belum terlihat seperti orang hamil, dan ending nya adalah “calon anakku gimana nanti?!”

Berbekal output processing dengan display “ya” pendek ini, akhirnya organ dalam seperti terlumasi dengan oli sintetis, siap melaju ke Gandul. Perjalanan ke Gandul kali ini mengambil rute yang lebih sepi dengan menghindari jalur orang berangkat kerja. Kita skip bagian perjalanan ke Gandul, kalaupun ada yang bisa diceritakan hanya beberapa komplek perumahan baru dan tempat pemancingan. “Tapi kita disini bukan untuk itu saja!” kata pak ustadz dalam ceramahnya atau motivator dalam seminarnya :p

Singkat cerita, istri dan calon jabang bayi sudah dilivered dengan aman dan tinggal pulang balik ke rumah sebelum lanjut tidur. Di perjalanan pulang, kebetulan ada sedan soluna warna biru yang sepertinya searah. Dikarenakan jalur berangkat ini jalur yang baru hari ini dilalui, maka tantangannya adalah me-reverse jalur ini. Dengan naluri navigasi yang kurang bagus, mungkin karena space otak banyak yang ter-utilize sehingga menyisakan sedikit L1-L2 cache ;;baca lagi mata kuliah Orkom untuk mengingat kembali apa itu L1-L2 cache, hehehe belagu lagi…

Jadi singkat cerita soluna warna biru tadi sebagai penunjuk arah, maklum jalur ini banyak perumahan dengan jalur utama yang berkelok-kelok, mendaki lagi sukar, hehehe. Simplify penulisan, akhirnya sampailah di tikungan jalan masuk ke kampung sekitar rumah. Jalur ke rumah memang sekitar 50 meter terakhir adalah jalan dengan ukuran 1,5 mobil, yah kira-kira sekitar 3 motor lah. Jadi 1,5mobil=3motor, atau 3mobil=6motor, atau 1mobil=2motor…apasih!

Beberapa motor tampak berlalu berlawanan arah, sepertinya berangkat kerja. Sampai akhirnya tibalah di pertigaan pertama. Layout pertigaan ini adalah -60 derajat arah kampung lain dan 60 derajat arah ke rumah. Gas sudah disesuaikan, tangan dan kaki siap di tuas dan pedal rem. Daaan….tiba-tiba dari arah -60 derajat datanglah motor hendak menuju arah yang berlawanan. Bapak ini, sebut saja Agung (bukan nama sebenarnya), lelaki separuh baya mungkin sekitar 40-45 an dari kontur wajahnya. Pak Agung (sekali lagi saya ingatkan, bukan nama sebenarnya) tampak berpakaian rapi dengan sepatu kulit warna hitam mengkilat, nampaknya mau berangkat ke kantor.

Ackward moment pun terjadi, kami saling mengerem dan meng-gas, saling ragu mana yang duluan. Sampai akhirnya si bapak memutuskan untuk mengunci ban depan nya. Nahas, pertigaan ini aspalnya sedikit berpasir sehingga ban depan beliau slip dan motor terguling ke kanan. Terlihat sepatu kiri pak Agung terlepas dan tertindih motor plus ada bagian bodi motor yang copot akibat peristiwa beberapa detik ini. Sontak otak tiba-tiba blank sejenak, sampai beberapa ratus milisecond berlalu dan tiba-tiba tersadar harus turun dari motor. Standar sudah dibuka dan dengan segera menghampiri motor pak Agung. Anehnya tidak ada rasa berdebar karena takut ato marah ato yang lainnya. Mungkin karena kalau dipikir memang sama-sama salah karena sama ragu-ragu nya. Atau mugkin juga karena sudah beberapa kali accident motor dan mobil, sehingga menghadapi kejadian tak terduga seperti ini seperti sudah terlatih.

Motor pak Agung sudah diangkat, sepatu sudah diambil dan didekatkan ke si bapak, dan bagian bodi tadi masih di tangan. Mulailah otak beroperasi lagi mencari bagian bodi mana yang terlepas ini dan bagaimana mengembalikannya. Tidak sampai 500milisecond, akhirnya ketemulah bagian neck motor ada bodi plastik yang lepas. Segera saja dikembalikan sesuai posisinya, dan syukurlah sepertinya bagian ini memang tidak terbaut sebelumnya jadi mudah sekali terlepas. Selesai membereskan motor lalu mendekati si bapak, masih dengan pikiran dan perasaan kosong yang aneh, seperti siap menerima sesuatu…

“maaf ya pak…”
Si bapak terlihat sudah beres dengan sepatunya sambil memberikan isyarat telapak tangan ;;”it’s okey”….perhaps
“jangan bikin ragu mas!” akhirnya si bapak bersuara
“iya pak, maaf ya…”

Entah kenapa kalimat “jangan bikin ragu mas!” itu seperti tertuang di gelas kosong, mengalir dan menggenang dengan leluasa. Kejadian dengan sepenggal kalimat ini jauh lebih bermakna rasanya dibandingkan ketika mendengarkan ustadz seharian berceramah atau motivator berbicara full-session. Aku hanyalah manusa biasa, jelas bukan rasul, nabi, wali, atau aulia. Maka tidak mungkin Allah berbicara padaku via wahyu. Bila tak renungkan bahwa Allah bisa jadi berbicara kepadaku melalui kejadian sehari-hari, sepenggal kalimat “jangan bikin ragu mas!” menjadi sangat berbeda maknanya. Sepenggal kalimat ini bisa bermakna berjuta kemungkinan dengan hasil akhir beberapa opsi saja kalau dikaitkan dengan kehidupan akhir-akhir ini. Tiap personal memiliki tingkat kedalaman dan kearifan masing-masing memahami setiap kejadian dalam kehidupannya, itu! ;;”Itu!” pendek gaya Mario Teguh juga.

Kalau aku bayangkan Allah sedang berbicara langsung kepadaku “jangan bikin ragu, Dod!”, maka dimensinya akan sangat berbeda. Menjadikan kita mendekat kepada Sang Pencipta. Seperti halnya ketika kita bertadarus Quran, yang sudah seharusnya tartil. Karena membaca kalimat Allah di dalam Quran, seolah seperti Allah sedang berbicara langsung kepada kita melalui diri kita sendiri. Maka bagaimana bila komunikasi seperti ini tidak tartil?

Semoga bermanfaat 😀

Blogging Resurrection, Why Not?

Posted: February 4, 2012 in non Unix area

Ga terasa udah lama banget ga nge-blog. Last post tercatat Sept 15 2009, sudah 2 tahun lebih!

Karena itu judul “Blogging Resurrection, Why Not?” tiba-tiba muncul di kepala. Hal berikutnya yang muncul, mungkin sebagian sudah bisa menebak, adalah pertanyaan besar “kenapa di suatu fase waktu tertentu, tidak terbersit sedikitpun keinginan untuk bikin posting ato setidaknya meng-update existing post?”…..hehehe 😀

Ya, blogging buat saya pribadi kadang menyenangkan dan kadang membosankan. Sambil menulis…mikir…tiba-tiba teringat sama social networking Facebook yang sepertinya (at least di komunitas saya) sudah mulai ditinggalkan. Mungkin ada pengaruh dari kemunculan Twitter yang sekarang “masih” marak. Juga tiba-tiba teringat social networking “jaman dulu”, Friendster (walopun ga otomatis inget account login nya :D). Ada pola yang sama dimana setiap social networking, walopun blog tidaklah murni social networking, seringkali tidak bertahan diterpa jaman. Bahkan pernah masuk Detik Finance tentang 3 alasan jangan beli saham IPO Facebook, terutama adalah karena jejaring sosial selalu memble di Wall Street.

Tapi kenapa yah kira-kira?

Kalo dipikir-pikir, social networking sangat bergantung pada satu hal: sekuat apa jejaring diantara penggunanya. Ato bahasa Jawanya, “siapa sih yang baca post/status/tweet kita?”…hehehe… :D. Audience sangat penting ternyata buat manusia. Secara psikologis (lagi kumat sok tau nya :D), audibility seseorang bisa menentukan orang tersebut akan melakukan suatu hal atau tidak. Dan ini secara agama istilahnya riya’. Riya’ itu dosa! Jadi, kalo kita posting/update status/nge-tweet karena pengen dilihat/didengar orang itu dosa!….hehehe…..kok tiba-tiba bisa nyambung ke situ….:D

Anyway, apapun itu saya senang sekali akhirnya last post blog ini tidak lagi dua tahun yang lalu. Walopun ga yakin juga posting ini siapa yang bakal baca. Thanks all yang udah pernah comment atopun cuma numpang lewat di blog ini. I really appreciate your time and internet bandwidth 🙂

Hopefully, there will be several posts after this resurrection….

Have a nice day all 😀

Reverse Entertain?

Posted: September 15, 2009 in non Unix area

reverseEntertain. Kata ini tiba-tiba saja menjadi begitu populer di benak tiap engineer baru seperti juga aq. Bingung juga, sebenernya darimana konsep ini muncul dan siapa yang pertama kali mencetuskannya. Ga mungkin penemunya adalah seseorang bernama “Entertain” karena kata entertain itu sendiri sudah ada sebelum kegiatan ini ada. Maksudnya ga bisa dibandingin dengan asal kata “mujair” sebagai nama ikan yang ternyata dari seseorang bernama Pak Mujair, penemu ikan tersebut pertama kalinya. Bingung ya? Hehehe,,,maklum, bahasa engineer emang susah dimengerti, apalagi yang baru,,hehehe,,,(sombong_mode=on) 😀

Orang-orang bukan engineer pun mungkin sudah pada tau. Entertain, intinya adalah kegiatan menghibur, mentraktir, ato apalah yang sejenis. Entertain biasanya satu arah (unidireksional, halah,,,), yaitu dari vendor ke operator, subcorn ke operator, atau project holder ke operator. Intinya dari yang ngerjain project ke pihak yang berduit (yang punya hajat project). Kegiatan seperti ini memang sudah dianggap wajar, bahkan sudah dianggarkan pada tiap budget project. Yang namanya entertain bentuknya bisa macem-macem. Bentuk paling simple adalah mentraktir makan. Vendor/subcon mentraktir makan orang operator sudah sangat umum sekali. Bahkan dianggap aneh kalo enggak. Pihak operator/client/customer yang baik (versi orang vendor/subcon,hehehe…) adalah mereka yang menerima traktiran makan ini sewajarnya, tidak berlebihan. Namun, seringkali yang terjadi di lapangan adalah kegiatan entertain menjadi ajang “aji mumpung”. Kesempatan langka buat makan besar & enak. Yah, sebagai pihak yang ngerjain project sudah sewajarnya memaklumi hal seperti itu. Tapi pernah juga sebaliknya. Suatu ketika ada orang operator ga mau ditraktir makan, malah minta teh anget segelas doang. Kalo diinget-inget, itu kejadian yang sangat langka sekali ternyata,,hehehe,,,

Entertain bentuk lain bisa berupa maen bilyard, karaoke, ato clubbing di diskotik. Yah, musti pinter-pinter adaptasi lah buat kegiatan entertain yang kaya gini. Ada lagi bentuk entertain yang berupa traktiran pijat. Parahnya, kadang yang diminta adalah pijat plus-plus. Kalo sudah begini, pasti dilema buat engineer yang katrok kaya aq. Untung belum pernah, n semoga ga akan kejadian… 😀 Bentuk paling parah adalah traktiran “perempuan”. Yang ini, wedew, naudzubillah. Banyak si cerita seperti ini, tapi selama ini alhamdulillah belum ada yang minta aneh-aneh kaya gitu.

Yah, itulah hitam putih kerja di engineering. Entertain mungkin kalo dilihat dari sisi positifnya bisa mengakrabkan hubungan dengan client/customer. Mungkin juga itu sebenernya maksud awal adanya entertain. Tapi belakangan, entertain jadi ajang “upeti” biar kerjaan yang mo dilaqkan lancar. Apalagi kalo lagi di remote site. Orang lapangan yang baru aja ketemu seringkali baru melunak kalo udah di entertain. Yah, mungkin kasarnya jadi semacam bentuk “suap”. Tapi asal ga yang aneh-aneh, “suap” ini ga dosa karena emang udah diprogramkan, bener ga? 😀

Itulah gambaran entertain, arus uang ketika tender project dari operator ke vendor/subcon balik ke operator lagi. Entertain bisa menempati prosentase gede banget dari total anggaran project. Coba pikir contoh ini deh, ada kegiatan knowledge sharing misalnya (semacem training gitu deh…) selama seminggu dan diikuti sekitar 10 orang. Sehari dijatah 3 kali makan & sekali makan rata-rata 1-2 juta. Kalo diambil rata-rata, dana untuk makan sekitar 31,5 juta. Itu baru makan loh,,,belum penginapan, main bilyard, karaoke, jalan-jalan…dsb

Pokoknya gitu deh. Ga perlu pusing sih sebenrnya, karena memang semua udah diitung n direncanain dengan matang. Tapi gimana kasusnya kalo entertain ini bukan buat operator/client/customer yang punya gawe project? Emang ada? Hehe…sebenernya enggak sih 😀

“Reverse Entertain”. Ini istilah baru yang mau tak patenkan,,hehehe. Jadi ceritanya begini. Ada 3 orang engineer termasuk aq, ditugaskan ke suatu site yang lumayan jauh dari base office. Satu orang diantara kami ternyata rumahnya ga jauh dari site tersebut, sebut saja si A. Si A ini sudah berkeluarga. Ketika kerjaan sudah rampung, kami pun beres-beres mo pulang. Kerjaan beres sekitar pukul 3.45 pagi. aq mau pulang ke base office karena ga jauh dari kost. Si A ternyata mau langsung pulang, biar ga dibunuh istrinya gara-gara ga makan sahur di rumah. Si B, engineer satu lagi memutuskan juga langsung pulang untuk sahur di rumah meski agak jauh dari tempat itu. Akhirnya kami pun berpisah denga formasi 2 taksi 1 motor. Nah, kebingungan deh. Berangkat jam segitu pasti udah azan subuh nyampe di base office. Akhirnya kuputuskan beli makan sahur, n sayangnya (ato untungnya ya,,hehe…) yang buka cuma McD. Kalo mo jalan jauh juga. Yaudah deh, taksi jalan dari site ke McD dulu. Taksi kami sudah dijatah vouchernya, karena itu kuputuskan beli di drive thru McD, biar sekali jalan.

Nah, disitu sempet mikir-mikir. Masa iya aq makan sendiri di taksi? Akhirnya kuputuskan beli PaNas Special 2 porsi, satu buat sopir taksi. Kantor ini yang bakal ganti,hehe… (ada tanduk setan di kepalaq kayanya. Biarin deh, masih belum imsyak ini,hehehe)

Sopir taksi aq tanya, “Pak, puasa ga? Kalo iya kita minggir bentar aja, sahur bareng nih”. “Saya gampang Pak”, jawabnya malu-malu. “Lho, gapapa pak, kita minggir bentar buat sahur. Sampe tujuan pasti sudah azan lho pak”. “Saya gampang pak. Soalnya saya kadang puasa, kadang enggak. Kalo lagi pusing saya biasanya ga puasa aja pak”, jawabnya lagi. “Oh, ya sudah kalo gitu, yang buat bapak saya taruh di belakang nih ya. Saya makan dulu pak”, kataq. “Iya pak, terima kasih. Silahkan makan pak, saya akan jalan pelan-pelan”, jawabnya. Aneh sopir ini, orang ditemenin sahur malah jawabnya gitu. Bodo ah, yang penting aq udah ngasi kesempatan pikirku,hehe…(egois_mode=on :D)

Taksi pun melaju pelan, sambil aq makan & sesekali ngobrol sama sopir taksi ini. Selesai makan mobil pun melaju kencang menuju base office. Akhirnya sampe juga ke tujuan. Karena sopir ini baik & enak diajak ngobrol, aq tambah sedikit angka di vouchernya. Kantor ini yang bayar,,,(hehe,,lagi-lagi tanduk setan nongol :D). Tiba-tiba azan subuh kedengeran. Hehe,,,pas banget nih, tinggal sholat trus tidur panjang pikirku.

Aq jalan sempoyongan ke kosan. Capek & kenyang adalah kondisi yang ga sinkron samasekali ternyata. Sampe kosan, kuberesi semua & siap-siap tidur. Aq pun berbaring sambir mikir-mikir. Entertain kali ini ga ada. Aq nraktir sopir. Jadi…..??

Hwahahaha,,,baru sadar, ini entertain yang langka terjadi! Yang kena entertain malah sopir taksi! Emang kalo udah rejeki ga akan kemana. Aq tiduran sambil senyum-senyum style orang gila. Haha,,,,entertain ini kebalik arusnya. Kugaruk-garuk kepala cari istilah yang pas, n akhirnya ketemulah “reverse entertain”, huahahaha…

Tapi sedih juga kalo dipikir-pikir lagi. Secara ga langsung aq udah bikin pak sopir itu ga puasa. Kalo aja aq ga ngasih makanan, dengan perhitungan beberapa kondisi masih ada peluang dia bakal puasa sekitar 10,43% (haha,,ga tau dapet angka darimana tadi, orang kuliah probstat dulu ga pernah ngerti esensinya :D). Ya sudahlah,,,aq pun tertidur ;D

Sore ini entah kenapa jam tangan nunjukin pukul 03:45, mungkin emang sudah jam segitu. Kami semestinya berangkat pulang ke jakarta, sehabis training panjang seminggu lamanya di pinggir pantai. Aneh memang. Training koq di pinggir pantai. Whatever lah, kan ikut seneng juga,, :p

Kami bertiga kebagian mobil rental kantor yang rupanya sudah sepaket sama sopirnya –untuk alasan keamanan, kita sebut saja pak S :D. Selesai berkemas, semua masuk ke mobil, siap2 pulang ke kebisingan jakarta lagi. Begitu juga dengan sepuluh orang client yang jadi peserta training waktu itu.

Admin project dari kejauhan tiba2 menyahut ke mobil client kami itu, “pak, jadi gmn banana boat nya?”. Yang seperti ini namanya entertain –istilah yang dipake untuk kegiatan ‘memberikan kesenangan’ ato ‘menjamu’ client. Ya, system integrator & reseller vendor seperti kantorku ini emang seringkali mengalokasikan entertain untuk client2nya. Dari mobil yang mengangkut para client itu terdengar jawaban, “buk, gimana kalo jatah banana boat nya diganti dg makan?”. “No problem pak”, sahut admin kami. Kami pun berangkat, dengan mobil client d depan, memilih tempat. Rombongan dari hotel berbelok ke tempat makan,,,jakarta menunggu lebih lama lagi kedatangan kami. Tiba2, wajah pak S yang semula sumringah sedetik kemudian terlipat2, bete abis…aneh,pikirku.

Kami pun sampai di tempat ‘perjamuan terakhir’ akan diadakan. Ternyata pesta udang di tepi pantai. Wah, musti pesen air kelapa sebiji nih, buat netralisir kolesterol yang bejibun gitu. Beres makan, kami pun kembali ke mobil dengan sempoyongan. Perut kenyang sambil berjalan di atas pasir putih pantai yang tebel ternyata ga mudah…

Sampai di mobil kulihat pak S standby di belakang kemudi dengan lipatan2 di muka makin ga beraturan. Kutanya, “loh pak, koq ga ikut makan tadi?saya kira ikut kesana..”. “Ngga ah, males!”, jawabnya. Samthing rong ini, pikirku. Kita pun akhirnya berangkat ke jakarta.

Mobil melaju sampai ke pintu tol. Lepas dari pintu tol, pak S mulai meluapkanngebut emosinya ke pedal gas. 140, 150, 160 km/jam. Kanan, kiri, bahu jalan. Gila ini,pikirku. Beberapa kali kami serempak berteriak “pak, saya belum kawin!” ketika manuver2 ala kimi raikkonen dilancarkan pak S. Akhirnya secara naluriah, kami pun mengajak pak S ngobrol. Tengah2 ngobrol, tiba2 keyword yang kutunggu2 muncul juga, “saya ini sebenernya janjian sama janda, kesel banget malah pada makan dulu tadi”,,,jiaaaa……got it!!!
Ternyata lipatan2 di mukanya itu punya alasan juga. Pak S cerita ngalor ngidul, akhirnya ketauan kalo dia ini aslinya orang jawa tengah, uda merantau lama jadi sopir di jkt. Anak istri ditinggal di kampung. “Saya ini sim ga ada, ktp aja ga ada, modal nekad sy jadi sopir”. Teeeengggggg!waktu berhenti sejenak seperti slow motion the matrix dengan fokus kamera pada muka pak S. “Tapi tenang aja, kalo ada polisi mau nyegat saya, saya biarin aja. Mo ambil mobil silahkan. Orang saya ini kerja bener. Kalo saya jahat, saya ud ikut ngebom sama Nurdin. Pernah saya dicegat di bali, mau ditahan mobil yg saya bawa. Saya biarin aja itu polisi ngomel2 ga jelas. Setelah selese, saya bilang yg pny mobil ini punya kenalan di mabes, kalo ga percaya mo saya telponin waktu itu.Eh, mobil tiba2 dilepasin ama dia”, ucapnya. Mungkin berusaha menenangkan kami yang terlihat kebingungan, dia ga sadar usahanya itu gagal total.

D jakarta, pak S punya gebetan di mana2. Seringkali kami menggodanya,”bapak kaya nurdin m top aja, punya istri di mana2″, yang kemudian disambut dengan tawanya yang lepas. Sampai disitu kupikir semuanya just kidding, untuk mencairkan suasana dg tamu2 yang diantarnya. Tiba2 hp pak S bergetar. Ada sms masuk rupanya. Dia membacanya keras2 sambil tetep bermanuver kanan kiri yang membuat kami yakin kematian sangat dekat dengan siapa saja. “Syang, lagi dimana?” bunyi sms itu. Salah seorang dari kami yang duduk di samping pak S mengambil hp itu dan membacanya, “eh, beneran pake sayang2”, sahutnya. Sepertinya isi otaknya sama dengan isi otakku…

Akhirnya, kelanjutan cerita pak S yang punya gebetan dimana2 pun sedikit demi sedikit kami percaya. Ada yang janda sudah punya pacar, “sebelum dinikahin, mumpung masih bisa sm km”. Ada jg yang PNS, istri orang, “jemput aq dong ntar malem, anterin ngelayat temenku yg meninggal”,dll. Pak S seringkali menanyakan gebetan2nya , “saya ini cuma sopir, jelek, ******nya kecil, hidup lagi. Apa yang kamu harapkan dari saya?”. Ha-ha-ha, tawa lepasnya yang mirip mbah Surip di tiap akhir kalimatnya. Tiba2 dia berucap menutup ceritanya tentang selingkuhan2 itu, “kadang saya juga terpikir, gimana kalo istri saya digituin orang…”, kali ini tawa lepasnya ga terdengar, pandangannya merawang kosong. Pak, perhatiin jalan, pikirku…

Tidak sampai di situ saja, pak S juga sering mengantar tamu2 nakal. Pernah sekali nganter ke dolly, lokalisasi porstitusi terkenal di sby, eh surabaya maksdnya. Pak S akhirnya pulang dengan tangan hampa karena duit hasil narik malah dihabiskan di lokalisasi itu 2 kali yang akibatnya uang makan pak S dipangkas untuk mengganti. Ada lagi cerita pak S yang nganter tamu ke saritem, lokalisasi terkenal di bandung. Lagi2 ga cuma tamunya yang ‘jajan’, pak S ikut juga. Entah berapa banyak lagi cerita2 sejenis yang bakal keluar dari pak S kalo perjalanan ke jakarta lebih lama lagi. Ada kalimat yang biasa dia ucapkan di akhir tiap episod ceritanya, “yang penting rasanya bung. dosa nomor 2, hahaha”, lagi2 tawa lepas menghiasi ujung kalimatnya…gila orang ini. “Kalo nganter tamu2 nakal itu enak mas, tips nya banyak. Gimana enggak, saya pasti disuruh tutup mulut, yang artinya musti ada upeti buat saya”. “Makanya kalo nganter orang2 kantoran seperti sampeyan ini, halaaaah,,ga bisa diharepin dapet tambahan”. Aq diem aja…

Rupanya capek juga dia cerita kenakalannya sendiri. Tiba2 hp bergetar lagi, rupanya telepon masuk kaliini. “Iya ini telat. Tadi pada makan dulu itu orang2 sebel saya. Sayang dimana?”…”iya dijemput, tapi ini saya mau ke roxy dulu, kamu ke grogol aja sayang, biar deket”….”iya sayang, ini lagi di tol, km mau saya mati apa disuruh cepet2? makanya kamu ke grogol dulu biar cepet. Nanti saya jemput”….bla2,,,entah ujungnya gimana, otakku ud teraduk2 denger cerita2 sebelumnya…

Ganti topik. Pak S cerita dia pernah nurunin tamu yang waktu itu suami istri dan 1 anak. Pak S bilang,”orang itu ga menghargai saya sama sekali. Okelah saya cuma sopir. Saya tanya balik ke dia, “kalo bapak jadi saya, sakit hati ga digituin?””. Pak S ga jelasin spesifik apa yg dilakuin bapak itu sampe dia sakit hati. 3 orang tamu itu diturunin di tengah jalan. Istri bapak itu memohon2 ke pak S supaya suaminya dimaafin, “turun!” kata pak S yang ud ga bisa dikompromi lagi. “Kalo bapak ga terima, temui saya di pool”. Sampai di pool nya pak S diomelin bosnya, “gila lu, itu tamu kamu turunin di tengah jalan. ga boleh gitu, bisa kabur pelanggan2 kita!”. Pak S dg sante menjawab, “kalo saya turutin, mobil ini ilang dibawa orang kamu yang repot”. “Iya juga ya”, jawab bos nya yang entah mikirin apa di otaknya. Rupanya pak S ini terlepas dari ‘kenakalan2’nya dipertahankan bos nya karena seringkali mengambil keputusan yang tepat yang membuat bosnya berpikir ulang 9x, ga sampe 100x.

Ada lagi cerita ketika dia mengantar engineer ke satu site yang terpencil. Waktu itu mobil disewa 12 jam. Rupanya permasalahan di site ga sesederhana yang dibayangin si engineer. Sudah 12 jam lewat. Lebih 1 jam. Si engineer yang ga enak bilang, “pak tungguin sebentar lagi ya”. “Cepetan, sudah molor ini” jawab pak S kesel. 2 jam lewat, pak S mulai panas. “ga selese 10 menit lagi saya tinggal!” kata pak S. “Sebentar pak, tolong tungguin” jawab engineer dari atas tower. “Kamu berani bayar saya berapa per jamnya?”. Si engineer diam. 10 menit lwat, pak S nghidupin mobil, cabcus entah kemana. Si engineer kebingungan telepon bosnya. Pak S pun di telepon bosnya tak lama kemudian. “Gila lu, itu tamu lu tinggal, gmn sih lu?” bosnya ngomel2. “Bos, mobil ini disewa 12 jam, saya sudah nunggu lama. Saya tinggal aja”. Bosnya pun bingung mo ngomelin lebih jauh lagi. Belakangan pak S cerita, kelebihan jam itu musti dibayar 25ribu per jamnya. Tapi uang itu semua masuk ke bosnya. Ga ada tambahan buat overtime si driver. Atasan si engineer belakangan masih menyewa mobil di tempat kerja pak S, tetapi ga pernah mau kalo pak S yang jadi sopirnya.

….rrrrr,,,,mobil berjalan pelan, ada perbaikan jalan di sepanjang jalan tol menuju jakarta…

Tiba2 politik jadi topik pembicaraan kami. Saya kemaren didatengin pak RT saya sebelum contrengan. “S, kamu besok contrengan ikut ya”. “Saya mo nyontreng yang mau bayar saya 500rb” jawabnya. “Saya ini ga butuh presiden. Ada presiden ato ga sama aja, kalo mo makan ya kerja. Kalo ada yang mo bayar saya 500rb saya contreng dia” ucapnya berkoar2 seperti sedang demo di bundaran HI. “Pemimpin kita itu busuk semua. Orang2 indonesia asli kaya saya ini malah susah hidupnya, gara2 pemimpin2 bodoh itu gampang disuap!”, pak S berapi2.

sopirTiba2 otakku yang semula teraduk2 tertata lagi. Aq termenung menatap pinggiran tol. Bener juga kata pak S. Ga ada perubahan yang berarti dari pergantian pemimpin negri ini buat orang biasa seperti pak S, juga kami. Negri ini seperti permainan segelintir orang, yang kami tidak berhak terlibat sedikitpun di dalamnya. Bla2,,,aq pun ga mau otakku terkuras utilisasi nya mikirin politik…

Tak terasa roxy mas didepan mata. Kami bergotong royong nurunin perangkat2 yang kami bawa. Beres semuanya tak lupa kuucapkan terima kasih ke pak S, “Makasih pak. O ya, selamat berkencan pak”…

Pak S berlalu dengan inova cream cerah itu, entah kencan ato bukan,,,

NB: ilustrasi ini bukan pak S. Pak S lebih ganteng lagi

OpenSER/OpenSIPS is well known as a robust, powerful SIP server. But one big lack of OpenSER/OpenSIPS is that it doesn’t have a gateway interface to PSTN network. In this case, you’ll have some options. You can use a router with an FXS/FXO card or using Asterisk with Digium cards as a gateway server.

If you’re choosing to use Asterisk with Digium cards as a gateway server, you’ll need to route certain calls destination (such as to PSTN) to this server to be forwarded to PSTN network later. To add a route in OpenSER/OpenSIPS, you can edit openser.cfg or opensips.cfg.

Don’t be afraid editing these files, but don’t forget to always make a backup 😀

Openser.cfg or opensips.cfg consists of four main parts:

Global parameter

This section is used to set common configuration such as logging, debugging, fork

Module loading

OpenSER/OpenSIPS modules will be loaded here

Module parameter

Each module have parameters which will be configured here

Routing

Routing section is used to configure routing of incoming SIP messages

Route certain calls will be added in routing section. Because SIP uses INVITE to initiate a call, you’ll need to find this line:

# account only INVITEs

if (is_method(“INVITE”)) {

setflag(1); # do accounting

}

We will use prefix based routing to difference calls. For example, if you use destination number with prefix of 8 to be routed to Asterisk with IP address 192.168.1.1, the routing script will be like this:

if (is_method(“INVITE”)) {

if(uri=~”^sip:[8] @*”) {

rewritehostport(“192.168.1.1:5060”);

route(1);

}

setflag(1); # do accounting

}

The function rewritehostport is used to replace the destination host and port of an SIP message header. The uri=~”^sip:[8] @*” will be match to any calls to destination number with prefix of 8 and any SIP server host.

Better try to know more 😀

This is long time draft before being published,,,,

You may known that OpenSIPS is the project continuation of OpenSER, tough Kamailio is said to be closer to OpenSER. But after all, it’s all about taste,,lol 😀

OpenSIPS will be best deployed on Sun machine running Solaris OS to obtain it’s best performance. But installing on Debian or Ubuntu machine will much easier. OpenSIPS modules depend on various package which is hard to get for Solaris. Debian or Ubuntu will be the best OS for installing practice. To get familiar with OpenSIPS, you’ll may need to practice installing too :D.

OpenSIPS is recommended to install with DNS. So that you wouldn’t have a lot of changes to move the system from a machine to another. These steps I’ve used to build a presence system server with TLS enabled. If you don’t need any presence enabled, you may leave mi_xmlrpc, xcap_client, presence, presence_xml, presence_mwi, presence_dialoginfo, pua, pua_bla, pua_mi, pua_usrloc, pua_xmpp,  pua_dialoginfo, and TLS=1 commented.
It’s hard to find a good OpenSIPS installation tutorial, so I try to write these steps which is work for me. Hopefully these steps will help you much 😀

1. sudo apt-get install bison bison++ bisonc++
2. sudo apt-get install flex
3. sudo apt-get install libsctp1
4. sudo apt-get install mysql-server
5. sudo apt-get install libmysqlclient-dev
6. sudo apt-get install libxml2-dev
7. sudo apt-get install libexpat1-dev
8. sudo apt-get install libradius-ng2 libradius-ng-dev
9. sudo apt-get install libcurl3-dev
10. sudo apt-get install libxmlrpc-c3 libxmlrpc-c3-dev
11. sudo apt-get install libperl-dev
12. sudo apt-get install libsnmp-dev
13. sudo apt-get install libconfuse0 libconfuse-dev
14. sudo apt-get install build-essential
15. sudo tar xvfz opensips-1.5.0-tls_src.tar.gz
16. edit opensips-1.5.0-tls/Makefile/
change : #TLS=1
to : TLS=1
remove : – jabber
– cpl-c
– xmpp
– rls
– mi_xmlrpc
– xcap_client
– db_mysql
– presence
– presence_xml
– presence_mwi
– presence_dialoginfo
– pua
– pua_bla
– pua_mi
– pua_usrloc
– pua_xmpp
– pua_dialoginfo
– perl
– snmpstats
– peering
– carrierroute
from : exclude_modules=
17. sudo make
18. sudo make install
19. sudo cp opensips-1.5.0-tls/packaging/debian-etch/opensips.default /etc/default/opensips
sudo cp opensips-1.5.0-tls/packaging/debian-etch/opensips.init /etc/init.d/opensips
20. sudo nano /etc/default/opensips
change : RUN_OPENSIPS=no
to : RUN_OPENSIPS=yes
21. sudo nano /etc/init.d/opensips
change : DAEMON=/usr/sbin/opensips
RUN_OPENSIPS=no
to : DAEMON=/usr/local/sbin/opensips
RUN_OPENSIPS=yes
22. sudo chmod +x /etc/init.d/opensips
23. sudo groupadd opensips
sudo useradd -g opensips opensips
24. sudo mkdir /var/run/opensips
sudo chmod 777 /var/run/opensips
25. sudo chmod 777 /usr/local/etc/opensips/
26. sudo apt-get install bind9
27. sudo nano /etc/bind9/named.conf
add : zone “opensips.org” {
type master;
file “/etc/bind/db.opensips”;
};

zone “18.14.10.in-addr.arpa” {
type master;
file “/etc/bind/db.18.14.10″;
};
28. Create new RR file

sudo nano /etc/bind9/db.opensips
write :

;
; BIND data file for opensips.org
;
$TTL 604800
@ IN SOA opensips.org. root.opensips.org. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS opensips.org.
opensips.org. IN A 10.14.18.56
29.  Create new RR file

sudo nano /etc/bind9/db.18.14.10
add :

;
; BIND data file for opensips.org
;
$TTL 604800
@ IN SOA opensips.org. root.opensips.org. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS opensips.org.
opensips.org. IN A 10.14.18.56
30. sudo nano /etc/bind9/named.conf.option
add : recursion no;
in : option { }
31. sudo /etc/init.d/bind9 restart
32. sudo nano /usr/local/etc/opensips/opensipsctlrc
uncomment : # SIP_DOMAIN=opensips.org
# DBENGINE=MYSQL
# DBHOST=localhost
# DBNAME=opensips
# DBRWUSER=opensips
# DBRWPW=”opensipsrw”
# DBROUSER=opensipsro
# DBROPW=opensipsro
# DBROOTUSER=”root”
# USERCOL=”username”
# INSTALL_EXTRA_TABLES=ask
# INSTALL_PRESENCE_TABLES=ask
uncomment and change :
# PID_FILE=/var/run/opensips.pid
to : PID_FILE=/var/run/opensips/opensips.pid
33. sudo mysqladmin -u root password ‘root’
34. sudo opensipsdbctl create
35. sudo nano /usr/local/etc/opensips/opensips.cfg
uncomment : #loadmodule “db_mysql.so”
#loadmodule “auth.so”
#loadmodule “auth_db.so”

#modparam(“usrloc”, “db_mode”, 2)
#modparam(“usrloc”, “db_url”,
# “mysql://opensips:opensipsrw@localhost/opensips”)

#modparam(“auth_db”, “calculate_ha1”, yes)
#modparam(“auth_db”, “password_column”, “password”)
#modparam(“auth_db”, “db_url”,
# “mysql://opensips:opensipsrw@localhost/opensips”)

comment : modparam(“usrloc”, “db_mode”, 0)
36. sudo nano mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO opensips@localhost IDENTIFIED BY ‘opensipsrw’;
mysql> GRANT ALL PRIVILEGES ON *.* TO opensips@127.0.0.1 IDENTIFIED BY ‘opensipsrw’;
37. start opensips, choose one of these method:
1. sudo opensipsctl start
2. sudo /etc/init.d/opensips start
38. sudo opensipsctl add 1001 1001

You can use any kind of SIP client you have. These install will be default enable your SIP chat.

Comment me if you have any error on installation. Feel free to try 😀

I have just installed MySQL 5.1.33 sucessfully on my Solaris 10u6 running on Sparc Ultra IIIi machine. Firstly, I tought that newest version of MySQL must be fixed from bugs found before. But, this version comes up with new bugs too,,,LOL 😀

To begin install MySQL, you can download either binary package or tarbal source from here. It’s easier to install binary package, but you’ll feel more free with tarbal source. I prefer binary package first. Download the package and save wherever you like. I usually put additional software source on /opt.

Here are the steps to install:

1. Create mysql user and group

#groupadd mysql

#useradd -g mysql mysql

2. Extract and install the package

#gunzip -d mysql-5.1.34-solaris10-sparc-64bit.pkg.gz

#pkgadd -d mysql-5.1.34-solaris10-sparc-64bit.pkg

You will be asked to create installation directory. Answer with yes to continue installation. The installation process will put the files on /opt/mysql/mysql.

3. You will need to do these command to change file/folders permission

#chown -R mysql:mysql /opt/mysql/mysql

#chown -R mysql:mysql /var/lib/mysql

#chmod -R 550 /opt/mysql/mysql

4. Binary files will be located in /opt/mysql/mysql/bin after installation. Install mysql database with this command

#/opt/mysql/mysql/bin/mysql_install_db

4.  Usually, we start the server with this command

#/opt/mysql/mysql/bin/mysqld_safe –user=mysql &

But, MySQL 5.1.33 has a bug on this. Here the bug is: Installation process put data files on /var/lib/mysql, while default mysqld_safe command will look forward to /opt/mysql/mysql/data/. We can fix this by adding –datadir option. To start the server, the complete command will be like this

#/opt/mysql/mysql/bin/mysqld_safe –user=mysql –datadir=/var/lib/mysql &

5. Don’t forget to create mysql root password

#/opt/mysql/mysql/bin/mysqladmin -u root password ‘your new password’
Actually there are still many bugs in this release. But this one is the most significant one -in my opinion indeed 😀 – that the server will not be running without fixing it.

Comment please 😀

Sign up for PayPal and start accepting credit card payments instantly.

OpenSIPS is implementation of SIP server based on RFC 3261. OpenSIPS is a robust SIP server which has powerful-customized routing engine. OpenSIPS components implemented as modular element which are not depends each other. OpenSIPS is formerly the Openser -Open SIP Express Router. The Openser project stops and continue into two branches: OpenSIPS (Open SIP Server) and Kamailio. Both new projects are mainly has the same components as Openser.

We will discuss Opensips this time -Kamailio next time maybe 😀 .

Opensips will be fits in these scenarios:

  • VoIP service providers (residential)
  • SIP trunking
  • SIP load-balancing
  • SIP front-end (for SIP termination)
  • white-label solutions
  • enterprise services
  • SIP router (LCR for multi GWs)

Opensips can play many roles in VoIP network:

  • SIP registrar server
  • SIP router / proxy (lcr, dynamic routing, dialplan features)
  • SIP redirect server
  • SIP presence agent
  • SIP IM server (chat and end-2-end IM)
  • SIP to SMS gateway (bidirectional)
  • SIP to XMPP gateway for presence and IM (bidirectional)
  • SIP load-balancer or dispatcher
  • SIP front end for gateways/asterisk
  • SIP NAT traversal unit
  • SIP application server

OpenSIPS has much more features compared with another SIP server. Full documentation about OpenSIPS features can be found here. Mainly, these are the OpenSIPS features

  • robust and performant SIP (RFC3261) Registrar server, Location server, Proxy server and Redirect server
  • support for UDP/TCP/TLS/SCTP transport layers
  • IPv4 and IPv6
  • IP Blacklists
  • flexible and powerful scripting language for routing logic
  • management interface via FIFO file and unix sockets
  • authentication, authorization and accounting (AAA) via database (MySQL, Postgress, text files), RADIUS and DIAMETER
  • digest and IP authentication
  • Presence Agent support (many additional integration features)
  • XCAP support for Presence Agent
  • SNMP – interface to Simple Network Management Protocol
  • management interface (for external integration) via FIFO file, XMLRPC or Datagram (UDP or unixsockets)
  • NAT traversal support for SIP and RTP traffic
  • ENUM support
  • PERL Programming Interface – embed your extensions written in Perl
  • Java SIP Servlet Application Interface – write Java SIP Servlets to extent your VoIP services and integrate with web services
  • load balancing with failover
  • modular architecture – plug-and-play module interface to extend the server’s functionality
  • gateway to sms (AT based)
  • multiple database backends – MySQL, PostgreSQL, Oracle, Berkeley, flat files and other database types which have unixodbc drivers
  • XMPP gateway-ing ( transparent server-to-server translation)
  • OpenSIPS can run on embedded systems, with limited resources – the performances can be up to hundreds of call setups per second
  • used a load balancer in stateless mode, OpenSIPS can handle over 5000 call setups per second
  • on systems with 4GB memory, OpenSIPS can serve a population over 300 000 online subscribers

OpenSIPS deal with low resource usage, but still hampered in interconnection to PSTN network. Unlike Digium which give full support to Asterisks as PSTN gateway with Digium cards, OpenSIPS doesn’t have that support yet. But OpenSIPS developer still working hard to make interconnection to PSTN network possible with OpenSIPS.

Let’s hope their work finish soon…  😀

Sign up for PayPal and start accepting credit card payments instantly.

This is the counter for my recent post, LOL… 😀
Nano is one of friendly text editor usually included on most Linux distribution. Nano is not included on Solaris 10 installation -tough you do entire disk install, LOL. But, nano can be installed later manually. These few simple steps will make your nano home 😀 :

1. Go to www.sunfreeware.com, choose your Solaris version and machine platform. Machine platform could be x86 or SPARC. Choose the right one

2. Once you choosen your Solaris version and machine platform, you will be entering new page with suitable to your OS and platform

3. Left-click on nano package

4. I assume you use SPARC machine. This is the view after you click on nano package

5. Click on nano package to download it

6. Click on dependencies needed based on the notes above (ncurses, libiconv, libintl, libgcc-3.4.6)

7. Install the dependencies first:

#gunzip -d ncurses-5.6-sol10-sparc-local.gz

#pkgadd -d ncurses-5.6-sol10-sparc-local

#gunzip -d libiconv-1.11-sol10-sparc-local.gz

#pkgadd -d libiconv-1.11-sol10-sparc-local

#gunzip -d libintl-3.4.0-sol10-sparc-local.gz

#pkgadd -d libintl-3.4.0-sol10-sparc-local

#gunzip -d libgcc-3.4.6-sol10-sparc-local.gz

#pkgadd -d libgcc-3.4.6-sol10-sparc-local

8. Finally, install the nano package

#gunzip -d nano-2.0.9-sol10-sparc-local.gz

#pkgadd -d nano-2.0.9-sol10-sparc-local

9. Next, you can’t use your nano yet untill you add your PATH variables

#export PATH=$PATH:/usr/local/bin

This is because nano installation put it’s binary files on /usr/local/bin which Solaris default PATH is not included it in.

Enjoy your nano 😀 !

Sign up for PayPal and start accepting credit card payments instantly.

VI? what do i do with this old-style editor? LOL…don’t underestimate VI. Not because this editor has something special,but this is the only editor i knew included in Solaris installation with no graphical mode. This troublesome editor -confusing in control keys- will be usefull to edit your configuration files. These are usefull vi commands:

* vi filename edit filename starting at line 1
vi -r filename recover filename that was being edited when system crashed

To Exit vi

Usually the new or modified file is saved when you leave vi. However, it is also possible to quit vi without saving the file.
Note: The cursor moves to bottom of screen whenever a colon (:) is typed. This type of command is completed by hitting the <Return> (or <Enter>) key.
* 😡<Return> quit vi, writing out modified file to file named in original invocation
:wq<Return> quit vi, writing out modified file to file named in original invocation
:q<Return> quit (or exit) vi
* :q!<Return> quit vi even though latest changes have not been saved for this vi call

Moving the Cursor

Unlike many of the PC and MacIntosh editors, the mouse does not move the cursor within the vi editor screen (or window). You must use the the key commands listed below. On some UNIX platforms, the arrow keys may be used as well; however, since vi was designed with the Qwerty keyboard (containing no arrow keys) in mind, the arrow keys sometimes produce strange effects in vi and should be avoided.
If you go back and forth between a PC environment and a UNIX environment, you may find that this dissimilarity in methods for cursor movement is the most frustrating difference between the two.
In the table below, the symbol ^ before a letter means that the <Ctrl> key should be held down while the letter key is pressed.
* j or <Return> [or down-arrow] move cursor down one line
* k [or up-arrow] move cursor up one line
* h or <Backspace> [or left-arrow] move cursor left one character
* l or <Space> [or right-arrow] move cursor right one character
* 0 (zero) move cursor to start of current line (the one with the cursor)
* $ move cursor to end of current line
w move cursor to beginning of next word
b move cursor back to beginning of preceding word
:0<Return> or 1G move cursor to first line in file
:n<Return> or nG move cursor to line n
:$<Return> or G move cursor to last line in file

Screen Manipulation

The following commands allow the vi editor screen (or window) to move up or down several lines and to be refreshed.
^f move forward one screen
^b move backward one screen
^d move down (forward) one half screen
^u move up (back) one half screen
^l redraws the screen
^r redraws the screen, removing deleted lines

Adding, Changing, and Deleting Text

Unlike PC editors, you cannot replace or delete text by highlighting it with the mouse. Instead use the commands in the following tables.
Perhaps the most important command is the one that allows you to back up and undo your last action. Unfortunately, this command acts like a toggle, undoing and redoing your most recent action. You cannot go back more than one step.
* u UNDO WHATEVER YOU JUST DID; a simple toggle
The main purpose of an editor is to create, add, or modify text for a file.

Inserting or Adding Text

The following commands allow you to insert and add text. Each of these commands puts the vi editor into insert mode; thus, the <Esc> key must be pressed to terminate the entry of text and to put the vi editor back into command mode.
* i insert text before cursor, until <Esc> hit
I insert text at beginning of current line, until <Esc> hit
* a append text after cursor, until <Esc> hit
A append text to end of current line, until <Esc> hit
* o open and put text in a new line below current line, until <Esc> hit
* O open and put text in a new line above current line, until <Esc> hit

Changing Text

The following commands allow you to modify text.
* r replace single character under cursor (no <Esc> needed)
R replace characters, starting with current cursor position, until <Esc> hit
cw change the current word with new text, starting with the character under cursor, until <Esc> hit
cNw change N words beginning with character under cursor, until <Esc> hit; e.g., c5w changes 5 words
C change (replace) the characters in the current line, until <Esc> hit
cc change (replace) the entire current line, stopping when <Esc> is hit
Ncc or cNc change (replace) the next N lines, starting with the current line, stopping when <Esc> is hit

Deleting Text

The following commands allow you to delete text.
* x delete single character under cursor
Nx delete N characters, starting with character under cursor
dw delete the single word beginning with character under cursor
dNw delete N words beginning with character under cursor; e.g., d5w deletes 5 words
D delete the remainder of the line, starting with current cursor position
* dd delete entire current line
Ndd or dNd delete N lines, beginning with the current line; e.g., 5dd deletes 5 lines

Cutting and Pasting Text

The following commands allow you to copy and paste text.
yy copy (yank, cut) the current line into the buffer
Nyy or yNy copy (yank, cut) the next N lines, including the current line, into the buffer
p put (paste) the line(s) in the buffer into the text after the current line

Other Commands

Searching Text

A common occurrence in text editing is to replace one word or phase by another. To locate instances of particular sets of characters (or strings), use the following commands.
/string search forward for occurrence of string in text
?string search backward for occurrence of string in text
n move to next occurrence of search string
N move to next occurrence of search string in opposite direction

Determining Line Numbers

Being able to determine the line number of the current line or the total number of lines in the file being edited is sometimes useful.
:.= returns line number of current line at bottom of screen
:= returns the total number of lines at bottom of screen
^g provides the current line number, along with the total number of lines, in the file at the bottom of the screen

Saving and Reading Files

These commands permit you to input and output files other than the named file with which you are currently working.

:r filename<Return> read file named filename and insert after current line (the line with cursor)
:w<Return> write current contents to file named in original vi call
:w newfile<Return> write current contents to a new file named newfile
:12,35w smallfile<Return> write the contents of the lines numbered 12 through 35 to a new file named smallfile
:w! prevfile<Return> write current contents over a pre-existing file named prevfile

Sign up for PayPal and start accepting credit card payments instantly.