• Learning Language

  • Beynim benimle dalga geçiyor.

    beyinMHRS’den saat 15:50’ye almış olduğum randevu için stress altındayım. Çünkü daha önceki randevumu kaçırmıştım. Peki önceki randevumu kaçırmış olmam neden stres sebebiydi? Şöyle özetlyeyim. MHRS sistemini fütursuzca kullanıp başkalarının haklarını gasp edip istismar altına alınmasın diye, 3 kere randevu alıp da gitmeyen birisi, o sene içerisinde bir daha randevu alamaz şeklinde bir kural var. E geçen inye randevu aldım. Randevu aldığım gün yağdı yağmur çaktı şimşek derken gidemedim, randevuyu kaçırdım. E, Mario gibi x 2 hakkım kalınca ister istemez strese girdim.

     

    Bu gün yine kurdum alarmımı falan işleniyorum. Telefona bakayım dedim. Telefon kilitlenmiş görüntü yok. Neyse yeniden başlattım falan derken, ekran açılınca ekranda alarm simgesi belirdi. Saate baktım 15:43. Bir canım daha gidecek diye telaşa kapılıp, bilgisayarı nasıl kapatıp çantamı toplayıp deparla işyerinden çıktığımı tahmin edebilirsiniz. Soluğu binanın girişinde alınca güneşin tepede pis pis sırıtıyor olmasıyla bende şafak attı. “Lan!” dedim içimden, “Saat kaç bi daha bakayım.”; 13:44. Daha 2 saat var randevuya. Kös kös geri döndüm. Beynim resmen benimle dalga geçmiş, 13:43’ü “3:43” olarak algılamamı sağlamıştı. Kapının önünde uyandığımda ise nasıl benimle dalga geçtiğini farkedip sinirlenmiştim. Kafamı gidip duvara vurasım vardı. Kendimi salak gibi hissederek işyerinden içeri girip işimin başına dönmemle bu macera da son bulmuş oldu.

  • Git deposuna dosya eklemeyi unutmamak için…

    Son zamanlarda django-south ile çalışmaya başladığımdan beri, sık sık depoya gönderilecek dosyalar arasında depoya eklenmemeiş dosyaları eklemeyi unutur oldum. Daha doğrusu gözden kaçırıyorum ister istemez. Çünkü oluşturulan dosyalar alt klasörde duruyor ve o klasörler ise kapalı. Yani içindeki dosyalar listelenmiyor pencerede. Doğal olarak kırmızı renkteki dosyaları sağ tıklayıp eklemeyi unutuyorum. Sonunda bu duruma bir dur demem gerekti ve araştırdım ettim, bir yol buldum.

    Bulduğum yol git’in muhteşem hook’larından pre-commit kullanmak oldu. proje dizinindeki .git klasörü altında bulunan hooks klasöründeki örnek birkaç hook dosyasında biri olan pre-commit.sample dosyasının adını pre-commit olarak değiştirdiğimiz zaman, git otomatik olarak bu dosyadaki kuralları işletmeye başlıyor. Bu dosyanın amacı “commit”ten önce gerekli kontrolleri yapmayı sağlamak. Ben de o yüzden aşağıdaki shell script satırlarını bu dosyaya ekledim ve projede git’e eklenememiş dosya varsa hata verip çıkmasını sağladım:

     

    # Git’e eklenmemiş yeni dosyalar var mı kontrol ediyoruz.
    ud=`git status -u | grep ‘^Untracked files:$’`

    if [ -n “$ud” ];
    then
    cat <<\EOF
    Dikkat: Git’e eklenmemiş dosyalar mevcut. Commit durduruldu.
    EOF
    exit 1
    fi

    Artık pycharm’da git commit esnasında eğer eklemeyi unuttuğum dosya varsa bana uyarı veriyor ve commit işlemini durduruyor.

     

  • Ubuntu sunucuda headless firefox kullanmak

    Linux sunucularda genelde olmayan, kullanılmayan hatta gerek dahi duyulmayan yegane şey;  grafik arayüzdür. Sebebi ise basittir. Suncu verilen görevi yerine getirmek için sağlıklı, güvenli ve hızlı çalışmak zorundadır. Özellikle de “Güvenlik”. Linux sistem yöneticileri herşeyi konsoldan yapmanın bir yolunu muhakkak bulur. Grafik arayüzlü bir sistemde ise çok daha fazla açık oluşabileceği hassasiyetinden dolayı böyle bir sistem kullanmayı reddederler. Ancak işler bir yerde grafik işleme kabiliyeti gerektirebilir.

    Örneğin “Selenium” denilen beowser emülatörü kullanımı için illa ki grafik işleme kabiliyeti lazım. Yine de, bu durumda “Selenium”u Linux sunucuda kullanmak imkansızdeğildir. Çünkü her ne kadar grafik bir arayüz olmasa da, gerekli kütüphaneleri ekledikten sonra sunucuyu bu kabiliyete eriştirebilirsiniz.

    Selenium’un neden sunucunun grafik işleme kabiliyetine ihtiyacı olduğu sorusu ise kullandığı “webdriver” tabir edilen nesnelerin aslıdna normalde masaüstünde kullandığımız browserların bir “instance”ını çalıştırması gerekliliğinden kaynaklı. Bu durumda sunucuda bir Firefox browser çalıştırmak için illaki masaüstü olması gerekmiyor. Sadece Firefox’u biraz kandırarak ekranı olan bir makinede çalıştığına ikna edebiliriz. Bunu yapmak için ubuntu suncuda öncelikle firefox kurmak gerek.


     

    sudo apt-get update
    sudo apt-get install firefox

    apt-get install firefox
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    The following extra packages will be installed:
    aptdaemon consolekit libasound2 libcanberra0 libck-connector0 libdbusmenu-glib4 libdbusmenu-gtk4 libogg0 libpam-ck-connector libpolkit-agent-1-0 libpolkit-backend-1-0 libstartup-notification0 libtdb1 libvorbis0a libvorbisfile3 libx11-xcb1
    libxcb-util0 libxt6 policykit-1 python-aptdaemon python-defer sound-theme-freedesktop xul-ext-ubufox
    Suggested packages:
    ttf-lyx libasound2-plugins libasound2-python libcanberra-gtk0 libcanberra-pulse
    The following NEW packages will be installed:
    aptdaemon consolekit firefox libasound2 libcanberra0 libck-connector0 libdbusmenu-glib4 libdbusmenu-gtk4 libogg0 libpam-ck-connector libpolkit-agent-1-0 libpolkit-backend-1-0 libstartup-notification0 libtdb1 libvorbis0a libvorbisfile3
    libx11-xcb1 libxcb-util0 libxt6 policykit-1 python-aptdaemon python-defer sound-theme-freedesktop xul-ext-ubufox
    0 upgraded, 24 newly installed, 0 to remove and 2 not upgraded.
    Need to get 37.8 MB of archives.
    After this operation, 88.0 MB of additional disk space will be used.
    Do you want to continue [Y/n]?

    Bu komut ile birlikte suncunuza Firefox’un depoda bulunan son sürümünü ve yanında bağımlılığı olan birkaç paket ve kütüphaneyi kurmuş bulunacaksınız. Bu işlemden sonra Firefox’u çalıştırmaya kalmanız hiçbir sonuç vermez. Çünkü browseri kandıracak ortamı henüz yaratmadık. Ortamı yaratmak için Xvfb paketini kurmamız lazım (X Virtual FrameBuffer). Xvfb, ekranı olmayan makinelerde X-Server’i framebuffer aracılığı ile sanal bellek kullanarak emüle eder. paketi kurmak için aşağıdaki komutu kullanınız:

    sudo apt-get install xvfb

    apt-get install xvfb
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    The following extra packages will be installed:
    libfontenc1 libgl1-mesa-dri libllvm3.0 libxaw7 libxfont1 libxkbfile1 libxmu6 libxpm4 x11-xkb-utils xfonts-base xfonts-encodings xfonts-utils xserver-common
    Suggested packages:
    libglide3 xfs xserver
    The following NEW packages will be installed:
    libfontenc1 libgl1-mesa-dri libllvm3.0 libxaw7 libxfont1 libxkbfile1 libxmu6 libxpm4 x11-xkb-utils xfonts-base xfonts-encodings xfonts-utils xserver-common xvfb
    0 upgraded, 14 newly installed, 0 to remove and 2 not upgraded.
    Need to get 19.0 MB of archives.
    After this operation, 53.7 MB of additional disk space will be used.
    Do you want to continue [Y/n]?

     

    Paketi kurduktan sonra sunucudaki işletim sistemine farz-ı misal numarası 10 olan bir display yarattıracağız.

    sudo Xvfb :10 -ac

    “-ac” anahtarı xvfb’yi erişim kontrolü kapalı olarak çalışmasını bildirir. Böylece bilinen bir güvenlik açığı oluşturmamış oluruz. An itibariyle 10 numaralı bir sanal görüntü uç birimimiz var. Tabi herşey bu uç birimi yaratmak ile bitmiyor. Mevcut oturum bu uç birimden habersiz. O yüzden borwseri çalıştırmanız halen bir işe yaramayacak. Öncelikle bulunuğunuz oturuma bu durumu izah etmelisiniz. Bunun için aşağıdaki komutu veriyoruz:

    export DISPLAY=:10

     

    Artık hazırız. normal “firefox” komutu vererek Firefox’u ekranı olan bir makinada çalıştığına ikna edebiliriz. Ancak tabi biz ekranda firefox’un log çıktı yığınından başka birşey göremeyeceğiz. Sonuç itibariyle çalışan  headless firefox.

    firefox

    5 XSELINUXs still allocated at reset
    SCREEN: 0 objects of 168 bytes = 0 total bytes 0 private allocs
    DEVICE: 4 objects of 96 bytes = 384 total bytes 0 private allocs
    CLIENT: 0 objects of 152 bytes = 0 total bytes 0 private allocs
    WINDOW: 0 objects of 32 bytes = 0 total bytes 0 private allocs
    PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
    GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
    CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
    TOTAL: 5 objects, 400 bytes, 0 allocs
    4 DEVICEs still allocated at reset
    DEVICE: 4 objects of 96 bytes = 384 total bytes 0 private allocs
    CLIENT: 0 objects of 152 bytes = 0 total bytes 0 private allocs
    WINDOW: 0 objects of 32 bytes = 0 total bytes 0 private allocs
    PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
    GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
    CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
    TOTAL: 5 objects, 400 bytes, 0 allocs
    1 PIXMAPs still allocated at reset
    PIXMAP: 1 objects of 16 bytes = 16 total bytes 0 private allocs
    GC: 0 objects of 56 bytes = 0 total bytes 0 private allocs
    CURSOR: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    CURSOR_BITS: 0 objects of 8 bytes = 0 total bytes 0 private allocs
    DBE_WINDOW: 0 objects of 24 bytes = 0 total bytes 0 private allocs
    TOTAL: 1 objects, 16 bytes, 0 allocs……

    …..

    Gördüğünüz üzere tomarla log çıktısı ekranı kapladı. Şu an Firefox sunucuda çalışmakta. Çalışmasını durdurmak için “ctrl+c” tuş kombinasyonu ile firefoxu öldürebilirsiniz.

    Eğer firefox’u “&” ile (çalıştır ve arkaplana at) çalıştırırsanız öldürmek için process id’ini “ps” komutu ile öğrenip “kill” komutu ile öldürmeniz gerekir. Artık “Selenium IDE” ile hazırladığımız “test_case”leri sunucuda deneyebilirsiniz.

     

  • Gereksiz dosyaların git deposuna eklenmesini engellemek

    Bunun için proje köküne “.gitignore” adında bir dosya oluşturup örnekteki içeriği ekleyebilirsiniz. Aşağıdaki örnek içerikte bulunan uzantılar ve dosyaların haricinde depoya gitmesini istemediğiniz dosyalar ve ya dosya türleri varsa bu listeye ekleyebilirsiniz. Aynı zamanda bu dosyayı git deposuna eklemenizi proje ortaklarınız içinde faydalı olacaktır. Böylelikle bütük kullanıcılarda aynı dosyalar bir kerede engellenmiş olur.

    (daha&helliip;)

  • Uzak sunucudaki git deposunu yerele çekmek

    Uzak sunucudaki git deposunu yerele çekmek diğer anlamıyla, remote repo’yu clone’lamak için aşağıdaki adımları takip edeceğiz.
    Yerel makinede projenin klonlanacağı klasöre geçiyoruz. Örnekte “~/dev/” klasörünü kullancağım

    veli@veli-GA-990XA-UD3:~/dev/git clone [email protected]:project.git

    Cloning into ‘project’…
    Enter passphrase for key ‘/home/veli/.ssh/id_rsa’:
    warning: You appear to have cloned an empty repository.
    Checking connectivity… done.

    Yukarıda daha önceki yazımda “gitolite” aracılığı ile ilklendirmiş olduğumuz boş depoyu yerelimize klonlamış olduk. Bundan sonra yapılacak olan iş proje klsörü içine proje dosyalarını koymak ve bunları depoya göndermek. Dosyaları ekledikten sonra depoya göndermek için şunları yapıyoruz: (daha&helliip;)

  • Gitolite ile Git’e kullanıcı eklemek

    Eklenecek kullanıcının public_key’i alınır. Bunun için kullanıcın bilgisayarında, geliştirme için kullanılan kullanıcı hesabı ile login olunur ve aşağıdaki komut çalıştırılır.

    ali@ali-GA-990XA-UD3:~/ ssh-keygen -t rsa -C “ali@ali-GA-990XA-UD3

    bu komut ile kullanıcın home klasöründe bulunan .ssh klasörü altında “[email protected]” isimli bir public key oluşur. Bu public key dosyası gitolite yönetici olan kullanıcıya iletilir. gitolite yöneticisi olan kullanıcı, bu public key dosyasını “gitolite-admin/keys” klasörüne yerleştirir ve gitolite deposuna ekler

    veli@veli-GA-990XA-UD3:~/gitolite-admin/git add keydir/[email protected]

    Sonrasında eklenecek kullanıcı için git kullanıcısı oluşturulur: (daha&helliip;)

  • Kendi Git deponuzu kurun ve Gitolite ile yönetin

    Bu doküman ile Ubuntu sistemlerde git sürüm yönetim sistemini kolaylıkla kurup rahat bir şekilde yönetebilirisiniz. Öncelikle ubuntu sistemlerinde git sürüm yönetim sistemi nasıl kurulur onu inceleyelim

    • Git sürüm yönetim sistemi kurulumu:

    veli@veli-GA-990XA-UD3:~/ sudo apt-get install git-core

    Hepsi bu 🙂

    • Gitolite ile Git yönetimi:

    Git sürüm yönetim sisteminin komut dilini ezberlemek ve her seferinde hatırlamaya çalışmak biraz sıkıntılı, özellikle de yeni depo kurmanız ve kullanıcı ve dahi haklarını yönetmeniz gerekiyorsa…

    Gitolite bu işleri basitleştirmek amacıyla, daha önceden var olan az daha sorunlu, sıkıntılı ve artık geliştirilmesi bırakılmış olan Gitosis yerine oluşturulmuş bir projedir. Amaç depo ve kullanıcı yönetimini basitleştirmek, sistem yöneticilerinin kendilerine daha fazla zaman ayırabilmelerini sağlamaktır :p

    Ubuntu sisteminde gitolite kurmak ve sürüm yönetim sistemini bunun üzerine taşımak için git sürüm yönetim sistemini kurduktan sonra aynı yöntem ile gitolite’ı sisteme kuracağız. Ancak bunu yaparken uzak sunucu kullanmak isteyeceğinizi varsayarak sistemi yapılandıracağız. Bunun için uzak sunucuya ssh ile giriş yaptıktan sonra süper kullanıcı konumuna geçmeniz gerekli. (daha&helliip;)

  • Twitter ve (dahası için) engelleri aşmak

    Eğer bilgisayar üzerindeyseniz işini kolay. Birkaç seçenekten en basiti ile başlayalım:

    • DNS Değiştirmek:

    DNS Adresini değiştirerek kolayca Twitter’a ulaşabilirsiniz.

    • Opera Browser Kullanmak:

    Opera BROWSER‘ı indirip kurun ve ayarlarından Off-Road’ı etkinleştirin. (DNS değiştirmenize gerek yok.)

    • TOR Browser Kullanmak:

    TOR Browser Bundle indirip kullanabilirsiniz. (DNS değiştirmenize gerek yok. Sadece browseri kurup gitmek istediğiniz adrese bu browser ile gitmeniz yeterli. Veri güvenliği için tercihen sadece HTTPS protokolünü kullanınız.)

    • Kullandığınız browser için Proxy eklentisi kurmak:

    Firefox veya Chrome için çeşitli proxy eklentileri mevcut. Bu eklentilerden birisini kurarak, Hide My Ass ya da Free Proxy List gibi adreslerden edinebileceğiniz proxy adreslerini bu eklentilere girip eklentileri aktive ederekte twitter’a ulaşabilirsiniz.

    Eğer Android yüklü bir cep telefonu kullanıyorsanız Aşağıdaki seçeneklerden birini tercih edebilirsiniz…

    • GooglePlay’den Opera Classic browserı kurmak ve ayarlarindan Turbo’yu açmak.
    • GooglePlay’den Opera Mobile browserı kurmak ve ayarlarindan Off-Road’ı açmak.
    • Bu adım için biraz teknolojiye yatkın olmanız ve uygulamayı kurmadan önce Android sistemleri rootlamak ile ilgili bilgilenmeniz gerekiyor.
      • Cep telefonunuzu öncelikle ROOT’lamanız gerekmekte.
      • Rootlama işleminden sonra GooglePlay’den SetDNS programını kurmanız gerekli.
      • SetDNS programını kurduktan sonra telefonunuzu yeniden başlatın.
      • Telefonunuz açıldıktan sonra SetDNS programının sağladığı herhangi bir DNS adresini seçip ayarları kaydedin.
      • Bu aşamadan sonra ister browser ile ister twitter uygulaması ile engele takılmadan sisteme dahil olabilirsiniz.

     

  • Dial-Up Hand Shake (Nostalji)