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

Fazlamesai çözümleri!

anonim

Devamlı FM aşağı FM yukarı bahsediyoruz, peki bu güne kadar gerçek fazlamesai problemi konusunda ne yaptık? Bilirsiniz canım hani şu Ben 40 yaşına kadar cumartesi neymiş pazarları bile çalıştım. veya Ne fazlamesaisi iş bitene kadar çalışacaksınız o kadar? ya da Patrondan önce işten çıkan arkaşı kovmaaak istiyorum yaklaşımları konusunda bir okurumuz bazı yapıcı öneriler getirmiş:

1. Hayır demeyi öğreniniz
2. Hayır demeyi öğreniniz
3. Hayır demeyi öğreniniz
4. Sitede java mı yoksa .net mi iyi tartışmak yerine, patronlara karşı nasıl etkili biçimde organize olunur ve karşı konulabilir onu tartışınız.

Amerika Gezi Rehberi - 1

sundance

Çalışmakta olduğunuz şirket bir yazılımın eğitimini almak için sizi yurtdışına mı gönderiyor? Ya da LinuxExpo, Compex veya EEE gibi bir fuara gideceksiniz, ama daha önce hiç yurtdışına çıkmamışsınız, neler yapılması lazım, ne gibi ince noktalar var bilmiyorsunuz.

Malum, bilgisayar sektöründe yurtdışına gidip gelmeler çok oluyor, belki son onbeş günde edindiğim tecrübeler birilerinin işine yarar diye aldığım notları alt alta yazayım dedim.
Bu yazı genel olarak yurt dışına çıkmayla, özel olarak da Amerika'ya gitmeyle ilgili. Verilecek ipuçlarının çoğu genel, ama Amerika ve NewYork'a özgü bir iki küçük detay da var, umarım birilerinin gezisi benimkinden daha kolay olur bu sayede :)

Çıldırmak Ya Da Depresyona Girmek: Ailecek

FZ

Üç farklı coğrafyadan gelen üç düşünür, üç bilim insanı. Üçünün de farklı sözcüklerle yazdıkları ama ortak konuya değindikleri bir yazı. Böylesine bir kesişimi not etmemek buraya haksızlık olurdu.

Gündüz Vassaf'ın 6 Ocak 2008, Pazar günkü yazısından bir bölümle başlayalım "21. yüzyılda çıldıranlar, çıldırmayanlar":

"Mesleğimden vazgeçmemde Hacettepe Üniversitesi Hastanesi psikiyatri polikliniğinin bekleme odasının duvarında asılı yazınının mutlaka etkisi olmuştur.

'Dünyayı değiştirmeye çalışacağına kendini değiştirmeye bak.' Nerdeyse tüm dünyada gençliğin ayaklandığı yıllardı. Düzene karşı gelen '68 kuşağının, sınırsız, savaşsız dünya özlemini belki en iyi John Lennon'un 'Imagine' adlı şarkısı özetliyordu. Sonuçta '68 kuşağı yaşlandı, düzenle bütünleşti. 'Olgunlaştı,' 'gerçekçi' oldu. 21. yüzyılın yeni kuşakları insanı çıldırtan bir dünyaya doğuyorlar. Teröre karşı verildiği söylenen savaş çıldıranları daha da çıldırtıyor. Türümüzün tarihinde zengin yoksul uçurumu bu kadar aşılmaz olmamış, zenginler servetlerini bu kadar fütursuzca sergilememiş, servet, şöhret uğruna değer yargılarımız bu denli altüst edilmemiş, ahlak bu denli umursanmamıştı.

Naviga Çıktı Bayilerinizden Israrla İsteyiniz!

sundance

Yelkencilik, denizcilik konuları ile ilgilenenlerin gözü aydın. Naviga adında dört başı mahmur bir yelkencilik dergimiz oldu. Kendilerine yayın hayatlarında başarılar diliyoruz.

Şimdi bunun fazlamesai ile ne ilgisi var diyecek kişiler için açıklama: Yıllardır CD yanında promosyon kabilinde verilen, her sayısı bir kaç günde kotarılmış, teknik makaleleri yüzeysel Word Excel ve Visual Basic kurslarının hiçbir zaman ötesine geçemeyen bilgisayar dergileri ile dolu bir piyasa için elbette ki mutlu bir haber bu. Maksimum birkaç bin kişilik yelkenci tayfası böyle bir dergi çıkartmayı becerebiliyor ama bu kadar Linux kullanıcısı, bilgisayar programcısı bir Dr. Dobbs Journal ya da Linux Format ayarında bir dergi çıkartamıyoruz. Basiretsizliği takdimimizdir
Naviga´yı bayilerden ısrarla isteyiniz....

Buffer overflowlar öldü ! Yaşasın Theo ;)

sundance

BSD camiasının asi çocuğu, OpenBSD'nin babası Theo de Raadt CanSecWest güvenlik konvansiyonunda yaptığı açıklama ile Open BSD'nin 1 Mayıs'da çıkacak yeni sürümünde, yaklaşık otuz yıldır işletim sistemlerinin baş belası buffer overflow mevzuunu tamamen çözeceklerini açıkladı. Bu konuda yine de mütevaziliği bırakmayan Theo, tamamen mümkün değil hale getiremeseler bile yeni güvenlik katmanı sayesinde buffer overflowların uygulanmasını imkansıza yakın hale getirdiklerini söylüyor.