Python ile dosya karşılaştırması yapmak

Pınar ile Jabber’den konuşurken Pardus için küçük bir iş olduğunu söylemişti. Kendisine eğer ufak tefek şeyler olursa yapmaya çalışırım demiştim zamanında. Kendisi de Fatih Aşıcı’nın küçük bir işini bana söylemişti. Fatih ile de konuştuk sonra bu işi. Gerçi sonra farklı bir yol izledik, ama ben yine de öğrendiğim ve yazdığım bu betiği paylaşayım. Bu gibi yazılar çokça görebilirsiniz şimdiden diyeyim :) Gelelim işin nasıl bir şey olduğuna.

Şimdi elimizde iki tane liste var. Bu listelerde her ekran markasının hangi frekanslarda çalışması gerektiği yazar. Bir tanesi Fedora’ya ait, diğeri de Pardus’un kendi listesi. Fedora’da yaklaşık 5200 tane Pardus’ta ise yaklaşık 4400 tane girdi var. Şimdi sorun şu, Fedora’da olup ama Pardus’ta olmayan belki yüzlerce model var. Fedora’da her model için Pardus’ta olup olmadığına bakıp eklememiz lazım. Hal öyle olunca binlerce satır’a teker teker bakmak zor oluyor. Ben de bunu bir Python betiği ile halletim. İlk önce betiğinin kendisini vereyim ve ardından betik hakkında bilgileri veririm:

Okumaya devam edin »

Python ile klasör isimlerini topluca değiştirin

2-3 haftadır Python çalışıyorum tekrardan ve bu sefer bir çok şey öğrendim. Öğrendiğim yeni bilgileri sizlerle paylaşayım dedim. Uzun zamandır aklımı meşgul eden bir konu vardı onu Python sayesinde halletim bu sayede. Şimdi kısaca bilgisayarımda fotoğraflarla dolu 20-30 tane klasör var, bunları da hep şu şekilde yazmıştım:

Almanya_ekim_2007
Bolum_temmuz_2006
Bilmemne_hede_höde_2008

Fakat sonraları baktım ki bu biçim bana uygun değil,sondaki yıl ibarelerini en başa getirirsem çok daha uygun olacağını anladım, yani şu şekilde bir şey:

2007_almanya_ekim
2006_bolum_temmuz
2008_bilmemne_hede_höde

Haliyle bir sürü klasör olunca hepsini elle teker teker yapmak yerine bir tane küçük Python betiği yazayım ve kendisi hepsini değiştirsin dedim. İlk önce yazdığım betik aşağıdaki gibi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os, re

def renamer():
    for filename in os.listdir(os.curdir):    
        if re.search('(\w)_(\d)', filename):
            m = re.compile('([a-z_]*)_([0-9]*)', re.IGNORECASE)
            names  = m.search(filename)
            newfilename = names.group(2) + '_' + names.group(1).lower()
            print newfilename
            #os.rename(filename, newfilename)

if __name__ == '__main__':
    renamer()

Betiği klasörleri değiştirmek istediğimiz klasörün içinde çalıştırmamız lazım. Kısaca yaptığı adımlar şunlar(satır numaralarına göre):

  • Satır 7: Klasörün içindeki klasörlerin bir listesini çıkartıyor, ve teker teker isimleri alıyor
  • Satır 8: Eğer klasörlerin sonunda sayılar varsa devam et, yoksa hiç bir şey yapma
  • Satır 9: Klasör isimlerini için bir tane regex ifadesi yazıyoruz.
  • Satır 10:Ardından bu regex ifadesi için bizim klasör’ler aranıyor ve ona göre bulunuyor
  • Satır 11:Bulunduktan sonra names.group() şeklinde bunlara ulaşabiliyoruz, bunlarla da istediğimiz şekildeki yeni dosyamızı oluşturuyoruz, ben 2008 + _ + dosya_deneme şeklinde yaptım, sizler farklı yapabilirsiniz tabi.
  • Satır 12:İstediğimi ifadeler doğru çıkıyor mu, çıktısına bakalım
  • Satır 13:Eğer doğru ise bu satırın önünde # ifadesini kaldıralım.

Öğrendiklerim bazı noktalar var, örneğin regex ifadelerini kesinlikle çok iyi bilmek lazım. Örneğin 9′uncu satırdaki ifade’yi irc’de acemi’den aldım. Ondan önce re.split ile bir yöntem denemiştim fakat tam istediğim gibi olmadı. O yüzden bu gibi işlemler için regex ile aranız ne kadar iyi olursa sizin için daha iyi olacaktır. Örneğin 8′inci satırdaki if durumunu kitaptan bakarak yaptım ve istediğim şekilde çalıştı. \w tüm alfabetik harfler demek, \d ise tüm sayılar demek. Yani eğer harfler_sayılar şeklinde bir dosya ismi var ise filename içinde o zaman devam edecek, yoksa betik hiç bir şey yapmayacak. Ayrıca büyük harfleri küçük harflere dönüştürmek için sadece .lower() ifadesini ekledim, aynı şekilde yeni bir isim oluşturmak tıpkı lego taşları ile oynamak kadar kolay. Gerçekten sevilesi bir dil Python.

Betiği düzgün bir şekilde çalıştıdıktan sonra, sonuçlar da şu şekilde olacaktır:

Python Betik

Ayrıca bu betik yazdığım ilk Python betiği özelliğini taşıyor. O yüzden ki bir sürü hata ya da gereksiz kod parçası olma olasılığı çoktur. Onun dışında Python ile cidden kısa zamanda güzel işler yapabilirsiniz, zaten kullandıkça yeni şeyler öğrenmemek elde değil. Bakalım zaman ne gösterecek inşallah zamanla çok daha farklı şeyler öğrenmiş oluruz.

Java’ya nasıl başlanılır ?

java_logo.gifGeçen ki Sun seminerden sonra Java‘yı iyice merak etmeye başladım. İnternet’te biraz araştırdıktan sonra çat çut bir şeyler öğrendim. Daha önce C ve biraz Python ile aşinalığım vardı, fakat Java nasıl bir şey ? Derleyicisi nasıl çalışır ? Belirli bir IDE var mı? Bu gibi sorular kafamı meşgul etti. Kısaca benim gibi başlamak isteyenlere kısaca bir kaç şey anlatacağım. Ubuntuforums‘da biri bunu güzel bir şekilde özetlemiş, onu kendimce çevirip sunuyorum:

Üç tane genel Java API’si var, bunlar da şu şekilde:

Java Standard Edition(SE)
- Masaüstü Uygulamaları
Java Enterprise Edition(EE) – Kurum ve web uygulamaları
Java Micro Edition(ME)
– Gömülü sistemler için uygulamalar(örneğin cep telefonları)

Genel olarak normal bir kullanıcı bir masaüstü uygulaması programlayacağını düşündüğümüzde Java SE kullanacaktır. Ayrıca iki tane önemli kısımı var Java’nın, bunlar JDK ve JRE:

Java Development Kit(JDK), geliştiricilerin uygulamalar geliştirmesi için gerekli araçları içeriyor.
Java Runtime Enviroment(JRE), bu da Java uygulamaların çalışması için gereken ortam.

Bilgisayarınıza bu bileşenlerin en güncel sürümünü kurmanız gerekiyor. Şimdilik en güncel sürümü 6′dır. Linux altında paket yöneticisi ile bunları kurabilirsiniz. Tüm paketleri kurduktan sonra herhangi bir uçbirimi(konsol’u) açıp şu komutu girerek kurulu olup olmadığına bakıyoruz:

java -version

Bendeki çıktı:

fatih ~ $ java -version
java version “1.6.0_03″
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)

Evet her şey kurduk ve artık Java geliştirmeye hazırız. Tek eksiğimiz bir tane metin editörü, ya da sizin işinizi kolaylaştıracak IDE’ler. Piyasa’da meşhur olan iki tane büyük IDE var, bunlar Eclipse ve Netbeans. Ben kendi bilgisayarıma Netbeans kurdum, isterseniz diğerini de kurabilirsiniz. Tıpkı Vim ve Emacs gibi seveni çok olduğu için hangisinin daha iyi olduğuna siz karar veriniz. Bazı Linux dağıtımlarında hâlâ 5.5 var, bazılarında ise 6.0.1 sürümü mevcut. 5.5 var ise doğrudan sitesine girip indirin. İndirdikten sonra

chmod +x netbeans-6.0.1-ml-linux.sh
./netbeans-6.0.1-ml-linux.sh

adımlarını konsoldan girerek kurunuz. Gerçekten çok kolay bir kurumu var, istediğiniz yere de kurabilirsiniz. Ayrıca daha önce 5.5 kurduysanız hiç bir şekilde ona müdahale etmeyecektir. Şimdi tek yapmanız gereken iyi bir kitap alıp çalışmaya başlamak. Kitap yerine İnternet’te de bir çok Java belgesi bulabilirsiniz.

Tek tıklama ile masaüstünüzden sunucunuza bağlanın

Şu arala Gnome kullandığım için, daha önce bilmediğim bir kaç özellik öğrenmiş oluyorum. Gün içinde bir çok kez sunucuya bağlanıp işlerimi düzenliyorum. Bunu da genellikle konsol üzerinden ssh ile doğrudan yaparım(özellikle wordpress güncellemelerinde) ya da dosya aktarımları için Gftp kullanarak hallederim. Fakat bazen öyle oluyor ki hemen anında bir tane dosyayı atmam gerekiyor.

Şimdi Gnome’da masaüstüne ya da herhangi başka bir dizine sunucunuz için özel bir klasör düzenleyebiliyorsunuz. Bu klasöre tıkladığınız an, sunucu ile bağlanıp sanki normal masaüstündeymiş gibi kullanabiliyorsunuz. Bu özellikle benim açımdan baya yararlı bir şer olduğu için hem arsln.org hem de murekkep.org için iki tane klasör hazırladım. İşin ilginç yanı bu özelliği tamamen şanş eseri buldum. Şimdi tek yapamız gereken masaüstüne sağ tıklayarak “Create Launcher …” ibaresine tıklamak

launcher.png

, ve aşağıdaki gibi doldurmaktır:

screenshot-create-launcher-2.png

Burada tek önemli olan kısım command kısmıdır. Normalede konsoldan ssh kullanıcıismi@domain.org gibi bir komutla bağlanmanız mümkün, burada da mantık aynı. Ayrıca belirli bir klasöre doğrudan giriş yapmak istiyorsanız onu da yapabilirsiniz. Örneğin ben kendim için şu ibareyi kullandım : ssh://fatih@arsln.org/home/fatih/ . Burada sunucumdaki /home/fatih klasörüne doğrudan giriş yapıyorum. Sunucunuzda birden fazla klasör barındırıyorsanız bu sayede kolay bir şekilde her klasör için ayrı ayır klasörler oluşturmanız da mümkün oluyor.

Iso dosyalarınızı sağ tıklayarak bağlayın

Daha önceki sizlerle bir kaç Thunar custom action paylaşmıştım, şimdiki de gayet yararlı ve güzel bir uygulama. Örneğin elinizde bir tane iso dosyası var, ve içeriğine göz atmanız lazım. Normal’de konsol’dan kolay bir şekilde bunu yapmanız mümkün, fakat Thunar kullanarak da bunu kolay bir şekilde yapabilirsiniz (gui sevenler için).

Kurmanız gereken programlar arasında bir tek gksu var. Mount uygulaması root ile çalıştığı için bu gerekiyor. Gksu’yu kurduktan sonra, birde /mnt/iso klasörünü oluşturun. Bağlayacağımız iso dosyası burada olacak. Dilersiniz farklı bir yere de bağlayabilirisniz bu tamamen size bağlı.

Thunar‘da (Edit > Configure custom actions) tıklayarak boş alanları şu şekilde dolduruyoruz:

Name: Iso dosyasını bağla
Command : gksu ‘mount -t iso9660 %f /mnt/iso/ -o loop’
Appaearance Conditions
File Pattern : *.iso
Appears if selection contains: Other files

Evet hepsi bu kadar, bundan sonra herhangi bir Iso dosyasının üzerine sağ tıklarsanız karşınıza şöyle bir menü çıkacak, tıkladığınız zaman iso dosyamız bağlanmış olacak:

Thunar Custom Action

Diyelim ki bağladığımız bu iso dosyasını tekrar çıkartmak istiyoruz, onu da ben şu şekilde yaptım. Panel’e küçük bir simge yerleştirdim, ona da gksu ‘umount /mnt/iso’ komutunu ekledim. İşim bittiğinde buna tıklıyorum ve çıkartıyorum. Dileyen bunu konsoldan da yapabilir.

Archlinux64′de flash desteğini etkinleştirmek

Yeni bilgisayarım gelmesiyle berabar yıllardır kullandığım dağıtımının 64bit olanını yükledim. Duyduğum ve okuduğum kadarıyla 64bit dağıtımları eskisi kadar “kötü” değiller. Artık hemen hemen tüm programlar mevcut. Flash desteğini de bir şekilde halletmek mümkün. Gözünüz korkmasın yani.

Gelelim Arch64‘de flash desteğinin yapılandırmasına. Arch wikisinde bu konuda bir belge var, ben kısaca 3 adımda ne yapmanız gerekeni yazacağım o kadar.

  1. Community desteğinin /etc/pacman.conf‘da açık olduğunu varsayarak aşağıdaki komut ile gereken tüm paketleri yüklüyoruz

    pacman -Sy –asdeps gtk2 lib32-atk lib32-cairo lib32-expat lib32-fontconfig lib32-freetype2 lib32-gcc-libs lib32-glib2 lib32-glibc lib32-gtk2 lib32-libice lib32-libpng lib32-libsm lib32-libx11 lib32-libxau lib32-libxcb lib32-libxcursor lib32-libxext lib32-libxfixes lib32-libxft lib32-libxi lib32-libxinerama lib32-libxmu lib32-libxrandr lib32-libxrender lib32-libxt lib32-pango lib32-pcre lib32-zlib libxt util-linux-ng lib32-alsa-lib

  2. Ardından nspluginwrapper ve nspluginwrapper-flash paketlerini aur‘dan alıp paketliyoruz. Paketlemek aslında kolay bir iş, fakat ben onunla şimdi uğraşamam diyenler için paketler arsln.org/dosya‘ya yükledim. İndirip, pacman -A paket.tar.gz şeklinide kursunlar.
  3. Sonra kullanıcı olarak ~/.mozilla/plugins klasörünü oluşturup, konsoldan nspluginwrapper -v -a -i komutunu yazıyoruz. Dikkat edin bu komutu kullanıcı olarak yazın, root ile değil!.

Evet hepsi bu kadar, Firefox’u yeniden başlatıktan sonra her türlü flash içerikli düzgün bir şekilde çalışacaktır(Youtube gibi). Evet biliyorum hepimiz Arch’ı seviyoruz :)

Sonraki Sayfa »