Soul, blues, GNU/Linux, BASH ve script-fu üzerine bir deneme

0
FZ
Birkaç gün önce, Joss Stone´a ilgimi, alakamı ve bu genç sese olan hayranlığımı bilen bir dostum sanatçının bir albümün parçalarının bulunduğu bir sitenin adresini verdi (korsan! korsan! diye bağırıp beni RIAA´nın köpekbalığı avukatlarına teslim etmeden önce yazıyı sonuna dek okuyun). Daha doğrusu ilgili parçaların URL´lerinin bulunduğu bir forum mesajının adresini. Gidip forumdaki mesaja baktığımda şu şekilde listelenen adresler gördüm:
  • http://www.example.com/xyz/01.zip
  • http://www.example.com/xyz/02.zip
  • ...
  • http://www.example.com/xyz/14.zip
Ogg Vorbis formatında kaydedilmiş ve sıkıştırılmış dosyalar söz konusu idi. Bunların Internet´ten bilgisayarıma indirilip açılması ve dinlenmesi gerekiyordu.

Bu zor (!) görevin üstesinden nasıl gelecektim? ;-) Genç ve son teknoloji kullanıcısı arkadaşların bıyık altından bana güldüklerinin farkındayım: "Ondan kolay ne var hocam, aç bir download manager, seç URL'leri, kopyala, yapıştır, bu işi kaç URL varsa o kadar tekrarla, gerisini download manager halletsin, sen keyfine bak" dediklerini duyar gibiyim! Keyfime bakma konusunda onlarla hem fikirim, otomasyon bağlamında Larry Wall´un dediği gibi "tembelliğin erdem olduğuna" inanırım. Tabii sabırsızlığın da. Ben de bu ilkelere uymaya karar verdim ve Debian GNU/Linux çalıştıran bilgisayarıma şöyle bir göz attım ve şu soruları sordum:

- Download Manager'ım var mı? Yok.
- Olsa bile kim uğraşacak copy paste ile? Boşversene!
- Hadi copy paste'i yaptım diyelim, sonra dosyaları açmak, geriden kalan .zip dosyalarını silmekle ve ortada sadece .ogg dosyalarını bırakmakla kim uğraşacak? Download Manager değil, ben mi, hiç değil!
- Elimde hangi araçlar var?
  • Sağlam, UNIX uyumlu bir Debian GNU/Linux işletim sistemi.
  • Programlanabilir modern bir kabuk: BASH
  • Sessiz sedasız komut satırından iş yapan genelleştirilmiş bir veri çekici: wget
  • BASH programları yazmak için güçlü bir editör (tercihan VIM ya da Emacs).
Yapılması gereken neydi? Bir programcı refleksi ile verilecek cevap: 1´den 14´e dek giden bir değişken ilgili adresin sabit kısmının dibine eklenir, bu şekilde wget´e parametre olarak geçilir, ardından çekilmiş dosya unzip komutu ile açılır ve hepsi çekilip açıldıktan sonra .zip uzantılı dosyaların hepsi silinir, görev başarı ile tamanlanmış olur. Bu işlemleri yapacak bASH betik dosyasının, yani joss.sh içeriği nasıl olmalıdır, benim ilk aklıma gelen şu olmuştu:
#!/bin/bash
for i in `seq 2 9`;
do
    wget http://example.com/xyz/0$i.zip    
    unzip 0$i.zip
done
    
for i in `seq 10 14`;
do
    wget http://example.com/xyz/$i.zip    
    unzip $i.zip
done

rm *.zip

Uzun ve karmaşık mı görünüyor? Evet epey uzun, tamı tamına 14 satır, gerçi bir iki satır ekstra boşluk var mesela "rm" satırından önce ve ikinci "for" bloku birincinin çok benzeri, copy-paste yapıp (tüh yakalandık! ;-) bir iki değeri değiştirip aynen uygulanmış. Yani zihinsel karmaşıklık ve orjinal fikir olarak bakacak olursak 5-6 satır diyebiliriz ve iddiam odur ki bir süre programlama ile uğraşmış ve ardından BASH programlamaya sadece üstünkörü bakmış biri yukarıdakini çok kısa sürede ve kolayca akıl edebilir.

Pekiyi güzel de bu FZ bunu neden buraya yazdı? FM haber sıkıntısı mı çekiyor? Bu şekilde AB´ye girişimiz hızlanacak mı? Bu yazının enflasyonu düşürücü işsizliği azaltıcı etkisi var mı?

Bunu paylaşmak istedim çünkü basit gibi görünmekle bazı önemli noktaları vurgulama imkânı veriyor bana:

- Bazı işler göründükleri kadar basit değildir.
- Yine de basit şekilde çözülebilirler.
- En akla gelmedik yerde otomasyon hayatı kolaylaştırabilir ve insanlara bir şey öğretebilir.
- Aynı işlemleri çok benzer bir yötemle MS Windows gibi işletim sistemlerinde de (batch dosyası, WHS, VBScript, vs.) yapmak mümkündür ancak o kadar kolay ve "doğal" değildir.
- Kolaylığı zorluğu bir yana asıl mesele mantalite meselesidir, eğer o anda baktığım sistem bir MS Windows sistem olsaydı bu tür bir otomasyonu gerçekleştirmek aklımın ucundan bile geçmeyecekti oysa Debian GNU/Linux´un başında iken ilk aklıma gelen şeydi.
- Demek ki sadece insan aracı şekillendirmiyor, araç da insanın algılamasını, kapasitesini, duruma bakış açısını ve çözüm üretme kültürünü ciddi şekilde belirliyor.
- Evet MS Windows da kullandığımız halde yine dayanamıyoruz ona laf sokuyoruz, huyumuz kurusun, çok adiyiz biz :)

Bu yazıyı yazmama yol açan adresleri gönderen dostum Levent Uysal'a (yandın Levent, RIAA´ya senin de adını verdik!) teşekkürü bir borç bilirim. Buna ek olarak yazıyı yazarken bana Less Is More ve (I'll Be Your) Security parçaları ile bana UNIX, GNU/Linux, vs. gibi kavramları bir kez daha, bu sefer müzikal olarak hatırlatan Joss Stone´a da sevgilerimi iletiyorum (eee, şeyy, bi imzalı fotonuzu alabilir miyim acaba? Evet hastasıyım, olamaz mı yani [işte bu an benim ve karizmamın bittiği andır Sedat Abi!]).

Meraklısına ödev: Yukarıdaki BASH kodunu daha optimize edip, tek döngüye indirmeye çalışıp ve gerekirse başka güzellikler ekleyip FM camiası ile paylaşın.

RIAA´ya not: Ya valla billa ben de şimdi Stone´un son CD´sini satın almaya gidiyordum, söz veriyorum, bak valla diyorum allah allah! Bırakın kardeşim peşimi...

Görüşler

0
tongucyumruk
#!/bin/bash
for i in `seq -w 2 14`;
do
wget http://example.com/xyz/$i.zip
unzip 0$i.zip && rm *.zip #böylece zip hata verirse tespit etmek kolay olur
done

hayırlı, uğurlu olsun... Joss ile mutluluklar...
0
tongucyumruk
Boşuna dememiş atalarımız, sürat felakettir diye...

#!/bin/bash
for i in `seq -w 2 14`;
do
wget http://example.com/xyz/$i.zip
unzip $i.zip && rm $i.zip #böylece zip hata verirse tespit etmek kolay olur
done
0
FZ
Hayırlı uğurlu olsun, UNIX ile mutluluklar ;-)
0
lifesdkver0_1
....eğer o anda baktığım sistem bir MS Windows sistem olsaydı bu tür bir otomasyonu gerçekleştirmek aklımın ucundan bile geçmeyecekti oysa Debian GNU/Linux´un başında iken ilk aklıma gelen şeydi......


cygwin [www.cygwin.com]'le daha fazla haşır neşir olmayı denemek lazım.
0
FZ
Ofisteki makinamda Win2K kurulu ve genellikle bir Cygwin penceresi de açıktır (son 3 yıldır falan).

Evdeki makinada ise genellikle Debian GNU/Linux çalışıyor ve bu yazıyı yazmama yol açan durum da evdeki makina için söz konusu idi.

Senin önerin ise bir kez daha yukarıdaki (yazının sonunda) argümanımda ne kadar haklı olduğumu gösteriyor ;-)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Tatil Rehaveti

butch

fazlamesai.net'e soralım: J2EE mi yoksa .NET mi?

FZ

MIT hocalarından Philip Greenspun tercihini .NET'ten yana kullanmış. Greenspun'ın 11 Nisan 2002 tarihli yorumlarından sonra en son 8 Mart 2005'te bir yorum gelmiş. Son 3 sene içinde gelen yorumlar ağırlıklı olarak .NET taraftarı yorumlar. Genel hava şu: Eğer bir sürü programcı çalıştırmak istiyorsanız, çok büyük şirketseniz, bol bol paranız varsa, vs. buyrun J2EE ile sistem geliştirin. Daha sıkı koşullar altında çalışıyorsanız şu anda .NET çok daha hızlı ve etkin sistem geliştirmeye ve programlamaya izin veriyor. Tabii buna itirazlar da var: EJB'den yola çıkarak J2EE'yi kötüleme hatasına düşmeyin! gibi. Bir başka yazılımcı ise "yahu bir satır kod değiştiriyoruz, application server'ı başlatmak 3 dakika sürüyor, el insaf" şeklinde şikayet ediyor.

IT sektörünün acar FM üyeleri bu konuda ne der? Acı dolu yazılım deneyimlerini bizimle paylaşmak isteyenler, hodri meydan, yanınızda rakamlarla gelin ve hangi platformu neden tercih ettiğinizi güçlü bir şekilde açıklayın.

Başarılı bir açık kod programcısının maddi durumu

FZ

"I didn't have the money to buy a new laptop"
Yukarıdaki cümle genç bir çocuğa ait değil. Yukarıdaki cümle genç bir üniversite öğrencisine de ait değil. Yukarıdaki cümle sıradan bir programcıya ait değil. Yukarıdaki cümle başarısız ya da meşhur olmayan bir programcıya da ait değil.

Cümle, yaklaşık 15 yıl önce Perl programlama dilini yaratan karizmatik programcı ve dilbilimci Larry Wall´a ait. Bu programcının geliştirdiği Perl programlama dili sözlük hazırlama esnasında yine bu programlama dilinden faydalanan Oxford resmi İngilizce sözlüğe girdi. Onbinlerce sistem yönetim yazılımında kullanıldı. Yüzbinlerce web sitesi Perl kullanarak iş güç yaptı ve yapmaya devam ediyor. Perl son zamanlarda moleküler biyoloji alanında veri işleme için de kullanılıyor. Söz konusu adam işte bu dili geliştirmiş ve Linus Torvalds henüz lisede okurken insanlık kültürüne armağan etmiş olan adam. Bu adam şimdi yeni bir efsaneye, Perl 6´ya imza atmaya çalışıyor. Geliştirdiği Perl açık kodlu, karşılığında 5 kuruş istenmiyor ve aklınıza gelen hemen her işletim sisteminde çalışıyor. Böyle bir adamdan bahsediyoruz yani.

Bu adam, yeni bir dizüstü bilgisayar alacak kadar parası olmadığını söylüyor.

Şaşırdım mı? Evet. Şaşırdım mı? Hayır.

Larry Wall, efsanevi State of The Onion sunularının sonuncusunda, 4. sayfada bu yazının açılış cümlesini sarf ediyor.

Ne dersiniz? Sizce bu adam zor durumda mı? ;-)

Hani gündemdeki popüler konulardandır, "ya hoca biz şimdi bu kodları açarsak aç kalmaz mıyız yaa?" falan denir. Bunu diyenler muhtemelen Larry Wall kadar çok ve kaliteli kod üretmemişlerdir. Acaba diyorum şimdi Larry Wall gerçekten de acınası durumda mı? Başka bir perspektif: Daha çok kazanmak varken neden daha az kazanalım? Sahi, Larry Wall, bir dönem NASA için çalışmak dururken acaba daha bol paralı bir işe mi girseydi? Aklıma Once Upon A Time In China filmindeki bir sahne geliyor. Yağmurlu bir ortamda canını dişine takarak gösteri yapan ve sonra yere atılan paraları toplayan bir kung-fu, demir gömlek ustası. Bir süre sonra aynı usta çetin bir kavgada kılıçlı bir adamı silah kullanmadan yendikten sonra bir genç yanına gelip "usta bana da öğret, zor durumdayım, bana saldırıyorlar, artık para bile kazanamıyorum," der. Usta önce biraz ilerideki lokantadaki lezzetli yemeklere yutkunarak bakar, acı acı gülümseyip cevap verir: "Kung-fu ustası olsan ne olur ki, ben de pek para kazanamıyorum".

Sanırım en temel kavramların yeniden düşünülmeye ve irdelenmeye ihtiyacı var; sanırım felsefeye keyfi yerinde, sadece entelektüel olarak huzursuz olan insanların değil asıl ciddi anlamda zor durumda olan insanların ve belki de en çok gençlerin ihtiyacı var. Sanırım büyük adamlar küçük adamların bazı temel kavramları yeniden düşünmelerini istemiyor. Sanırım bu isteklerini gerçekleştirmeleri sahip oldukları muhteşem güce rağmen yine de kolay olmayacak. Ne dersiniz? Şimdi biz bu kodları kapayıp da mı saklasak yoksa açıp da mı saklasak? ;-)

ICQ ve Network Adminlerle Başetmelerin İncelikleri - 1

sundance

Gestapo bir Network Admininiz mi var ? ICQ`u port bazında ve mirabilis.com`a her türlü erişim olarak firewalldan kesti mi ? Buyrun size çözümler.

Öncelikle gidip Miranda adresinden nightly sürümü indirin. Ardından kontrol etmeniz gereken iki şey var eğer port bazında bir sınırlama varsa 4000 nolu port kapatılmış diyelim, ICQ 21 numaralı porttan da hizmet verebiliyor, sadece portu ayarlayıp kullanmaya devam edebilirsiniz...

Wright Kardeşler ve Patentlerin Kötüye Kullanımı

sundance

İlk rastladığım gün Sweet Sweet Unemployement yazısı ile manevi kardeş bellediğim Maciej Ceglowski'nin Wright Kardeşler üzerine bir yazısına rastladım.

Havadan ağır bir araçla ilk kontrollü uçuşu gerçekleştirip, patentini alan, daha sonra da ikibuçuk yıl boyunca patenti lisanslamak ya da geliştirmek için hiçbir şey yapmayıp sadece bu alanda deneme yapanları dava edip para kazanan Wright kardeşler de, Tesla'ya yaptırdığı (ve parasını ödemediği) direkt akım jeneratörleri ile "alternatif akım hepimizi yakacak" diyen, bir file alternatif akım verip öldüren ve akabinde de elektrikli sandalyenin icadına bile vesile olan Edison'un yanında yerlerini almışlar.