31 Mart 2013 Pazar

Konsolda Eğlenceli Şekiller Yapmak

Bu ara aklıma takıldı konsolda farklı araçlarla eğlenceli görseller yapılabiliyordu. Aslında ssh için parola girdiğimde randomart ile ekranda gördüğüm görselde aklıma geldi. Bunun için öncelikle
#apt-get install cowsay xcowsay
diyoruz. cowsay karakterlerden oluşan görsel için xcowsay ise resimli olan görüntü için. cowsay kullanarak yapılabilecek belli başlı görseller şu şekilde:
$cowsay hello


$cowsay -f gnu bir gnu :\)
dediğimizde ise ekranda gnu resmi görüyoruz. Burada ben ":)" ifadesini bu şekilde kullandığımda ')' karakteri için beklenmeyen ifade gibi bir değer döndürdü. Bu yüzden '\' karakteri ile yazdım.


$cowsay -f /usr/share/cowsay/cows/turtle.cow çok yavaşım :\)
şeklinde de görüntü elde edebiliriz. "/usr/share/cowsay/cows/" dizini altında görüntüleyebileceğimiz şekillerin listesini görebiliriz.


$xcowsay --think mesaj
şeklinde daha fiyakalı bir görüntü elde edebiliriz.


Buradaki --think parametresi konuşmadaki baloncuklar için.

Eğer önümüzden bir tren geçsin istiyorsak da "sudo apt-get install sl" diyoruz :). sl komutunun parametreleri oldukça az, aslında cowsay'in de alabileceği çok fazla parametsi yok.



 Bunlar gibi benzer işler yapan bir kaç farklı araçla daha konsolda eğlenceli görseller elde edebiliriz.

Couchbase Nagios Plugin

Yakından Eğitim projelerinden Couchbase Nagios Plugin'e başvuru yaptım. Başvuru sürecinde yapmamız gerekenler burada belirtilmişti. Ben de cv'mi ve gereken soruları yanıtlayıp başvuru mailimi gönderdim. Bir zaman sonra başvuru sonuçları açıklandı. Kabul edildiğimi öğrendim.

Projeye başvuru nedenim aslında Necdet hoca önermişti Nagios Plugin'e başvurmamı. Eğer severek yapmayacağın bir iş olacaksa başvurma dedi. Twitterdaki tweetleri gözümde canlandırabiliyorum demişti :) Kaan'la çalışmak benle çalışmaktan daha eğlencelidir diye de belirtmişti (aslında Necdet hocayla çalışmak da çok eğlenceli bence). Ben birkaç akşam proje nasılmış, bu süreçte neler öğrenmem gerekecek diye bir kaç belge baktım. Çünkü NoSql'in sadece adını duymuştum daha önce kullanmadım. Sonrasında aklıma yatınca başvurmaya karar verdim. Aslında genelde bir işe başlarken seçme nedenlerim içinde bilmediğim şeyler olsun ve sıkılarak yapmayayım oluyor. Başvuru sorularını yanıtlarken de belirtmiştim bilmediğim işler ufkumu açıyor, bu şekilde ne üzerinde çalışmak isteyeceğim hakkında görüş alanımı genişletmeye çalışıyorum diye.

Projelerde çabuk sıkılma gibi bir eksi yanımda vardı eskiden ama artık daha geç sıkılıyorum bir iş uzarsa. Zaten yazılımda da yaptım bitti şeklinde değilde hep geliştirme ve bakım isteyen işler oluyor. Nagios Plugin'de de bu şekilde. Başvuru yapmadan önce okuduğum yazıda da proje bittikten sonra projenin gelişimine devam edilmesi gerektiği belirtilmişti. Başvuru yaptıktan sonra kimin seçileceği henüz belli değilken danışmanıma mail attım nelere bakmam faydalı olur konusunda. Kabul edilmek için danışmanlar genelde başvuru sürecinde başvuranlardan projeyle ilgili bir şeyler yapmasını istiyorlar. Danışmanım Nagios'u kur, çalıştır bak demişti. Bunun için belge önerdi bunları okuyabilirsin diye, ben de ek bir kaç yerden daha okumuştum, sonra kurup çalıştırdım. Kurulumla ilgili blog yazmamı istemişti. Bir kaç gün sonrasında zaten başvuru sonuçları açıklandı. Kabul edilmesem bile Nagios'un nasıl kurulup çalıştırıldığı hakkında bilgi edinmiş olacaktım.

Önümüzdeki 2 aylık süreçte projeyi geliştiriyor olacağım. Ayrıca her hafta freenode #yakından eğitim kanalında projelerin durumu hakkında konuşuyoruz. Ben de proje üzerinde bir şeyler yaptıkça, danışmanımın yönlendirmesi ile bu konuda yazmaya devam edeceğim.

30 Mart 2013 Cumartesi

Sistemi Single User Modda Açma

Bu dönemin başlarında minik bilgisayarıma Fedora kurmuştum. Miniği çok az kullanıyorum.  Bir zaman sonra bilgisayarı tekrar açınca buna chrome kursam da firefox kullanmasam dedim. Baktım ki kendime sudo yetkileri vermemişim ve root parolamı da hatırlamıyorum.

 Bu yüzden bilgisayarı single user modunda açma gereği duydum. Bunu geçen yaz nette bir şeyler okurken single user modda başlatınca root yetkileri direkt veriliyormuş şeklinde okumuştum. Aslında single user mod, init 1 seviyesi oluyor. Bu seviyede herhangi bir ağ bağlantısı ve grafik ekran olmadan sistemi kullanıyorsunuz. 

Sistemi single user mod seviyesinde açmak için grub ekranından Fedora seçiliyken 'e' tuşuna bastım. Zaten açılış ekranında alt kısımda da 'e', 'c' gibi seçenekler belirtilmiş. Sonra çekirdeğin bulunduğu satırın en sonuna (vmlinuz ile başlayan satır) '1' yazdım. ctrl+x ile çıkış yapıp, sistem başladğında root yetkilerime kavuşmuştum :)


Daha sonra ekrana gelen root yetkileri verilmiş konsolda 'passwd' komutuyla root parolamı değiştirmiş oldum. 

23 Mart 2013 Cumartesi

Nagios Kurulumu ve Kullanımı

Nagios kullanarak bir makinenin üzerindeki bellek, işlemci gibi yerel kaynakları ya da vermiş olduğu smtp, mysql gibi servisleri izleyebiliriz. Ayrıca bu servislerin durumlarıyla ilgili kullanıcıya mail, sms gibi yollarla uyarıyı verebiliriz. Nagios ağ üzerinden servis ya da kaynak dinleme işlemini çeşitli eklentileri (plugin) kullanarak yapar. Nrpe'de bu sistem kaynaklarını dinlemek için kullanılan bir eklentidir. Nrpe kaynakları izlenecek olan makineye kurulur.

Kurulum

Kurulum için nagiosu ana makineye nrpe'yi ise kaynakları izlenecek olan makineye kurmamız gerekir. Nagios kurulumunu aşağıdaki gibi her iki makinede yapalım.
# apt-get install nagios3 nagios-nrpe-server  nagios-nrpe-plugin
Kurulumdan sonra web arayüzünden izleme yapabilmek için aşağıdaki gibi kullanıcı oluşturmalıyız
sudo htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin
Şimdi nrpe ile başka bir makinanın yerel kaynak durumlarını izleyelim. Bunun için /etc/nagios3 dizini altında ubuntu_remote.cfg adında bir dosya oluşturalım. Bunun içine yapmamız gereken tanımlamalar şu şekilde:
# host tanimlamasi
define host{
use generic-host  # tum host tanimlamalarinda olmasi zorunlu
host_name Ubuntu2
alias Ubuntu2Alias
address ip_adres # dinleyecegimiz makine ip
}

# nrpeyi tanimliyoruz
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

# izlemek istedigimiz kaynak
define service{
use generic-service # tum servis tanimlamalarinda olmasi zorunlu
host_name Ubuntu2
service_description Current Users
check_command check_nrpe!check_users
}
/etc/nagios3/conf.d/ dizini altındaki hostgroups_nagios2.cfg dosyasında aşağıdaki gibi tanımladığımız host ismini referans vermeliyiz.
define hostgroup {
hostgroup_name ubuntu-servers
alias Ubuntu GNU/Linux Servers
members localhost, Ubuntu2
}
/etc/nagios.cfg dosyasında da tanımladığımız ubuntu_remote.cfg dosyasının yolunu "cfg_file=/etc/nagios3/ubuntu_remote.cfg" şeklinde belirtmeliyiz. Aynı zamanda kaynaklarını dinleyeceğimiz makinede /etc/nagios/ dizini altındaki nrpe.cfg dosyasında sunucu makinenin ip adresini "allowed_host=nagios_server_ip" olarak belirtmeliyiz. Daha sonra nagios ve nagios-nrpe-server süreçlerini yeniden başlatalım.
/etc/init.d/nagios3 restart
/etc/init.d/nagios-npre-server restart
Tarayıcıda localhost/nagios3 adresiyle yerelimizde karşıdaki makinenin durumlarını kontrol edebiliriz.

Ayrıca nagiosta çalıştırabileceğimiz komutların listesi /usr/lib/nagios/plugin dizini altındadır. Oradaki komutların alabilecekleri parametreleri aşağıdaki gibi --help parametresiyle görüntüleyebilirsiniz.
/usr/lib/nagios/plugin/check_disk --help

14 Mart 2013 Perşembe

Açık Anahtarlı Şifreleme & GPG

Bu dönem okuldaki seçmeli dersler arasından Kriptoloji seçtim. Derste çeşitli şifreleme algoritmaları gördük. Sezar, Vigenere, Kerberos gibi.

Şifreleme işlemlerinde temel kaygı şifreleme yapan anahtar ve deşifreleme yapan anahtar aynı olduğu zamanlarda birisi anahtarı ele geçirirse, şifreli metni deşifreleyebileceğidir. Yani bu durumda en başta anahtarın güvenliğinin sağlanması gerekir. Açık anahtarlı şifreleme algoritmalarında ise bu probleme çözüm olarak bir anahtar ya sadece şifreleyebilsin, ya da sadece deşifreleyebilsin olmuştur. Biz de geçen hafta derste açık anahtarlı şifreleme algoritmalarından biri olan RSA'yı işledik. Bu işlemde kişi kendi belirlediği iki asal sayıyı belirli işlemlerden geçirip bir açık anahtar bir de gizli anahtar üretmektir. Açık anahtarı kendisine şifreli metin gönderilebilmesi için herkese verir. Sonra kendisine gelen şifreli metinleri kendi gizli anahtarı ile açar.

Bu şekilde açık ve gizli anahtarlar oluşturmak için çeşitli araçlar vardır. E-posta istemcileri, Seahorse gibi. Ben burada terminalden gpg ile gizli ve açık anahtarın nasıl üretibileceğinden bahsettim. gpg zaten dağıtımlarda genelde kurulu geliyor. Bu arada GPG (GNU Privacy Guard), GPL ile lisanslanmış bir şifreleme yazılımı.
Terminalden aşağıdaki gibi parametresiyle gpg komutunu verelim:
$ gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation,Inc. This is free
software: you are free to change and redistribute it. There is NO WARRANTY, to the
extent permitted by law.
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1

Burada RSA'yı seçip diğer sorularıda geçtikten sonra karşımıza anahtarların üretilmesi için şöyle bir yazı çıkacak:
We need to generate a lot of random bytes. It is a good idea to perform some other action
(type on the keyboard, move the mouse, utilize the disks) during the prime generation;
this gives the random number generator a better chance to gain enough entropy.


Ben bu işlem için "ls -R /"  diyorum :) Sonra bir yerde kesiyorum tabi listelemeyi. Anahtarlar üretildikten sonra anahtarların parmak izi bilgisini ekranda görebiliriz.
Key fingerprint = D9F2 4673 D60E 47EE EB46  1BB3 1EDE B418 711C B3B7
uid                  Ebru Akagunduz (Açıklama) 
sub   2048R/07684591 2013-03-14 
Daha sonra bir dosyadaki metni aşağıdaki gibi açık anahtarımızla "--encrypt" diyerek şifreleyebiliriz.
$ gpg --encrypt -r ebru.akagunduz@gmail.com duzmetin.txt 
Açarken de "--decrypt" parametresini kullansak yeterli olur.
$ gpg -ao public.key --export 711CB3B7
Açık anahtarı elde etmek için
$ gpg -ao private.key --export-secret-keys 711CB3B7 
Gizli anahtarı elde etmek için kullanılır. Burada -a parametresi düz metin formatında almak için, -o parametresi de dosyaya yazıdrmak için kullanılır.

Aslında gpg daha bir çok kullanışlı parametreye sahip. Çok da sevdim kendisini. Ama ben burada bu kadar bahsedebildim. Afiyet olsun :)

2 Mart 2013 Cumartesi

LPI 101 Sınavı Hakkında

1. dönem okulda açılan seçmeli ders olan Linux ile Sistem Yönetimi dersini aldım. Necdet hoca derste LPI 101 içeriklerini anlatmıştı. LPI (Linux Proffesional Institute), Linux bilgilerimizi ölçmek için tüm dünyada geçerli olan standartları içermektedir. LPI hakkında ayrıntılı bilgiyi LPI Türkiye sayfasından edinebilirsiniz.

Bu yıl ara tatilde Necdet hoca LPI 101 sınavının yapılacağını bize bildirdi. Aslında dersi alırken zaten dönem başında bize bunu söylemişti. Ara tatilde hep birlikte sınav tarihi belirledik. Sonra iki hafta öncesinde de sınav yaklaştığı için konuları bir de birlikte takip edersek daha iyi olur dedi. Bunun için tüm 101 konularını baştan taradık. Haftada iki gün 4-5 saat kadar birbirimize LPI 101 konularını anlattık. Aslında çalışmamız şu şekilde oldu, çalışma günlerimizde ortak bir konu belirleyip, o konuya hepimiz çalışıyorduk. Her konu için bir kişiyi o konuyu hepimize anlatması için atıyorduk. Bu şekilde sınava girmeyecek olan arkadaşlar da dinleme imkanı buldular.

Bugün de 101 sınavına girdik. Sınavı Türkiye LPI sorumlusu olan İsmail Yenigül yaptı. Sınava girmeden önce arkadaşlarımla biraz gergindik. Çünkü eğer yapılsa inanılmaz zor bir sınav yapılabilir, gerçi bu her sınav için böyledir. Sınav genel olarak çok zor değildi. Kimi sorular biraz dikkat istiyordu. Sınavdan önce aklıma gelmeyen bir kaç soruda vardı aslında.

Sınavdan sonra İsmail Yenigül ve Barış Şimşek ile sohbet etme fırsatı bulduk. Onların bize kendi üniversite deneyimlerinden, sektörden, bir işi iyi bilmenin öneminden bahsettikleri çok yararlı gördüğüm bir konuşma ile günü bitirdik :)

25 Şubat 2013 Pazartesi

Man Sayfası Hazırlama Editörü: RManEdit

Bu yıl ara tatilde man sayfası hazırlamak için bir editör yazdım. Man sayfalarını Linux'ta kullandığımız araçlar hakkında bilgi edinirken oldukça sık kullanıyoruz. Man sayfaları hazırlanırken basit bir etiketleme dili kullanılıyor. RManEdit de bu etiketlerin kullanımını kolaylaştıran ve hazırladığınız sayfanın yan tarafta ön izlemesini görebileceğiniz bir editör.




RManEdit Ruby ve Gtk kullanarak yazdığım bir özgür yazılım. İlk sürümü hazır, kodları github'ta. Uygulama hakkında öneri, hata bildirimi gibi katkılarınızdan oldukça memnun olurum.

Bu arada RManEdit'i yazarken aslında ne kadar mutsuz olduğumdan da bahsetmeden geçmeyeyim ;) Geçen dönem midemden rahatsızdım, bu yüzden istediğim verimle çalışamayıp çok mutsuz olmuştum. Onun mutsuzluğu kışın tatilde de devam ediyordu. Bu yüzden RManEdit'in logosu üzülmüş sima içeren bir şeyler olsun diye Necdet Hoca'ya çok ısrar etmiştim ama kabul ettiremedim tabi ;)


29 Ocak 2013 Salı

Webkit, Gtk & Ruby

Bu ara Ruby ile kodlamaya geri döndüm. Yaptığım uygulamada bir html sayfasını pencerede görüntülemem gerekti. Bunun için webkit kullandım. Webkit kurulumunda biraz problem oluştu. Normalde "gem install gtk-webkit-ruby" şeklinde kurabilmemiz gerekir. Ancak benim aldığım hata şu şekilde oldu:
Building native extensions.  This could take a while...
ERROR:  Error installing gtk-webkit-ruby:
        ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb 
Hatayı nette aradım ancak çözüm bulamadım. Bazı yerlerde şu kütüphaneler eksiktir yazıyordu ancak ben hepsini kurmuştum. Sonra Ruby ile ilgili bir forumda bu sorunu belirttim. Forumdan ilk aldığım cevap eksik kütüphaneler vardır oldu. Ama gereken ek araçları kurmuştum. Sonra kullandığım dağıtım, Ruby sürümü, mkmf.log dosyası gibi ek bilgiler verdim. Aslında mkmf.log dosyasına ben de bakmıştım ama içeriği bana hatayı çözecek kadar anlamlı gelmemişti. Sonra forumdan
 gem install -v 0.005 gtk-webkit-ruby 
şeklinde kurmamı istediler. Dedikleri gibi yaptığımda kurulum gerçekleşti. Aslında teşekkür ederken içimden "\0/" ifadesi koymak geçmedi değil :) Webkit kullanımı ise şu şekilde:

webview = WebKit::WebView.new
content = "<html><head>Foo</head><body></body></html>"
webview.load_string(content,"text/html", "UTF-8", "file://home")
window.add(webview)

Normalde bir çok yerde "load_string" methodu "load_html_string" şeklinde geçiyor. Ama o şekilde kullandığımda bu isimde bir method yok hatası aldım. Sonra sadece bir yerde Github'daki bir  kodun içinde load_string şeklinde kullanıldığını gördüm. Benden sonraki arkadaşlar bu kadar aramasınlar diye anlatma ihtiyacı duydum. Afiyet olsun :)

28 Ocak 2013 Pazartesi

Akademik Bilişim 2013

Bu yıl Akademik Bilişim Konferans öncesi yapılan 4 gün süren android kursuna katıldım. Eğitimlere katılan arkadaşların seçtikleri kursla ilgili bilgisayarlarına gerekli programları yüklemiş olarak katılmaları gerekiyor. Kalacak yer ise gayet kolay sağlanıyor, KYK için başvuru yaparsanız orada kalma imkanınız var, ya da ab2013 sitesinde kalacak mekan önerileri bulunuyor.
4 günlük eğitim süreci gayet verimli geçti. Ben daha önce hiç android programlama ile ilgilenmemiştim. Açıkçası çok karışık ve zor olduğunu düşünüyordum, gene de düşüncem "nedir ki çok kolaymış" yerine "çalışılsa yapılır, o kadar zor değilmiş" oldu. Ama android ile yazılım geliştirmeye o kadar da sıcak bakamadım ne yazık ki. Java ile kodlanıyor çünkü :( Java'nın yazımı bana çok uzun geliyor açıkçası. O kodlar uzadıkça ömrüm geçiyormuş gibi hissediyorum. Aynı  zamanda kodlarken bir telefon için yazıldığının da düşünülmesi gerekli demişti eğitim veren arkadaşlar. Yazılım telefonun ısınmasına ya da bataryasının çok harcanmasına çok fazla olanak vermemeli gibi özellikler belirtmişlerdi. Sınıftan bir arkadaşım ise Yazılım için özgür araçlar eğitimine katıldı. O da gayet memmun kalmış. Ben de önümüzdeki yıl ona benzer bir eğitime katılmayı düşünüyorum. Netice şu ki gayet güzel ve keyifli bir etkinlik oldu :)

11 Aralık 2012 Salı

OPW Başvuru Süreci

Bu ara aslında vizelerin hemen sonrasında hatalarını kapatmak için bir proje seçsem, bugzillalara baksam diye düşünürken Tuğçe(sınıftan arkadaşım) Outreach For Women programı için gruba link atmıştı. Bu program nedir diye sorarsanız Gnome'un sadece kadınların katılabilmesi için düzenlediği kış staj programı. İstenilen projeyi tamamladığınızda 5000 dolarlık ödül de var. Benim de zaten bir yerlere başvurma gibi bir düşünce içerisindeyken bunu öğrenmiş olmamda iyi olmuştu. Tabi hemen linkten projelerin ne olduğuna bakmaya başladım.

Gnome ile ilgili projlerden birini seçmeye karar verdim. Gnome sevdiğim de bir ortamdı açıkçası. Gnome projelerinden Flickr İntegration'a başvurdum. Proje tanımının yapıldığı yerde C, GTK kullanılacağı yazıyordu. Proje içeriğine açıklama olarak arka plan ayarları yaparken kullanıcıların resimlerini Flickr hesaplarına attıkları yerden de çekebilmelerini sağlamak yazıyordu. Bunun benim başvurabileceğim bir proje olduğunu düşündüm. Projede bize yön gösterecek olan geliştirici arkadaşın ismi, mail adresi de yazılıydı. Projelere başvurabilmek için önce bir katkıda bulunmak gerekliydi. Bunun için mentore mail attım. Aslında önce vazgeçtim nasıl ingilizce mail yazacağım diye düşündüm. Sonra mezun olduktan sonra ne olacak, o zaman böyle şeyler gerekme ihtimali çok daha yüksek, şimdiden tecrübem olsun diyerek mail attım. Akşama doğru cevap geldi. Ben katkıda bulunmak için tavsiye istemiştim. Çünkü bugzillaya girip o kadar şeyden hangisi seçsem, nasıl yapsam demektense mentore sormak daha kestirme bir yoldu. O da hemen şurada şöyle bir eksiklik var diye cevap atmış. İlk başlarda C ile GTK'da bocaladım. Daha önce Ruby, Python kullandığımdan C garip geldi. Sonra ben yapamıyorum sanırım diyerek vazgeçtim. Aslında yapamamaktan değilde biraz güvensizlikten kaynaklanıyordu. Sonra Necdet hoca ne yaptın bakalım dedi o gün. Ben de vazgeçtim demeye kalmadan "Nasıl yapabiliriz?, senden ne istemişler?, Cevap attın mı?" kısmına geldi konu:). Hafta sonu C, GTK ile nasıl kullanılır diye bakmıştım ama istenen bugzilladaki eksikliği yapmamıştım. Bir de benden istedikleri uygulamaya ek yapabilmem için kaynak kodu indirip, derleyip çalıştırmam gerekliydi. Bende Ubuntu Unity vardı. Bu yüzden diğer dağıtımlardaki Gnome uygulamalarıyla her şey bire bir aynı gitmiyordu. Sonra ben mentore hangi dağıtımı kullandığını sordum, o da zaten OPW(Outreach Program For Women) için de gerekli olabileceğini düşünerek Fedora kullanmamı tavsiye etti. Fedorayı kendi bilgisayarımda sanala kurdum çok verimsiz oldu. Sonra Necddet hocanın bilgisayarlarından birini alarak onda sanala kurduk. Orada bendeki sanalda çalıştığından daha iyi haldeydi. Aslında orda da kötü çalışıyordu.

Sonra ben istedikleri yamayı hazırlayıp gönderdim. Cevap olarak kullandığım fonksiyonları değilde, aynı işi daha kısa yaptıran başka fonksiyon kullanmam gerektiğini aldım. Daha sonra yeni yama hazırlayıp gönderdim. Akşamında ise bugzilladan aldığım cevap "It works" oldu ;) Sonra geriye başvuru formunda hazırlamam gereken kısım kalmıştı. Ben forma her şeyi çok kısa yazmıştım. Bilgi işlemden aldığım tavsiyelerle biraz daha ayrıntılı bilgi vermem gerektiğini düşündüm. Formda kaç yıldır özgür yazılım projeleriyle ilgileniyorsunuz, bu tür projelere daha önceden başvuruda bulundunuz mu gibi sorular vardı. Onları da cevapladıktan sonra formu gönderdim.

Başvurunun bana kattıkları bir projeye katkı vermek için geliştiricisinden fikir istediğinizde aslında gayet yardımcı olduklarını gördüm. Her ne kadar yanlış dil bilgisiyle ingilizce mail atmaya çalışırken bu durumu gayet normal karşıladıklarını gördüm. Sonradan bakıp kendi fark ettiğim hatalarım için bile uyarı almamıştım. Gerçi farklı anlama gelen şeyler değildi yanlış yazdıklarım, yazarken dikkatsiz davrandığım içindi.

Bundan sonra da dönem içersinde yapacağım işlerin yanında Gnome sayfasından uygulama seçip geliştiricisiyle iletişime geçerek katkı vermeye sürekli devam etmeye karar verdim. Bunun nedeni ise bir hata kapatmaya çalışırken, bir çok başka şey öğreniyor insan. Belki bir dönem üzerinde çalıştığı projeden daha fazla şey öğreniyor bile olabilir. Çünkü katkıda bulunmak istediğiniz araçlarıda çalıştırıp yaptığım ek oldu mu, olmadı mı derken bir çok farklı araç da kullanıyor olmanız gerekebiliyor. Ayrıca büyük projelerdeki büyük insanlarla çalışırken de bir çok tecrübe elde ediliyor açıkçası.

Size tavsiyem eğer katkı vermek aynı zamanda bir şeyler öğrenmek gibi bir düşünceniz varsa sadece proje seçip gereken yerlere mail atmak :)

10 Aralık 2012 Pazartesi

Git Kullanarak Yama Dosyası Hazırlama

Yama  dosyalarını elimizdeki bir dosyanın orjinal hali ile bizim değiştirdiğmiz hali arasındaki farkları kolayca görmek istiyorsak oluştururuz. Peki bunu neden isteriz? Örneğin herhangi bir kodda değişiklik yaparak üzerine yeni özellikler eklediysek kodun orjinal halini yazan kişiye orjinal dosya ve yeni dosya arasındaki farkları göstermede kolaylık sağlar.

Bu işi bir de git format-patch kullanarak da yapabiliriz. Bu, yaptığımız eklemeler arasındaki farkları görmeyi daha da kolaylaştırır. Nasıl oluyor derseniz şu şekilde; örneğin bir kaynak kodu git deposundan aldığımızı düşünelim. Üzerinde bir çok kez değişiklikler yapıyoruz. Yaptığımız değişikliği commit ettikten sonra yama dosyalarını oluşturmak için git format-patch'i kullanırsak kendisi değiştirilmiş dosyaları bulur ve bir önceki committeki haliyle arasındaki farkları gösteren bir yama dosyası oluşturur. Eğer bunun için diff aracını kullanırsak dosyanın orjinal halini başka bir yere almak gibi bir kaç işlem daha gerekecekti. Bu işlemi örneklendirelim, uygulamamızın üzerinde değişiklik yaptıktan sonra aşağıdaki komutları verelim:
git commit -m"Test1"
git format-patch -1
Burada önce commit ettik, sonra yama 1 numaralı olması gerektiğini de belirterek yama dosyası oluşturduk. Oluşan dosya ismi şuna benzer olmalı "0001-Test1.patch" buradaki 0001 bizim -1 olarak yazdığımız kısımı belirtir. Yama dosyasının adını Test1 vermesi ise commit mesajımızla benzer bir dosya ismi olacağı için. Yama dosyasını açıp bakarsak içerisinde "+" simgeleri eklenen satırları, "-" simgeleri ise çıkarılan satırları belirtir. Ben de git format-patch'i daha çok beğendiğimden öğrendikten sonra onu kullanmaya başladım. Şimdilik söyleyeceklerim  bu kadar görüşmek üzere :)

4 Aralık 2012 Salı

İngilizce Önemli

Merhabalar, yazının başlığından da anlaşıldığı gibi biraz İngilizce ve faidelerinden bahsetmek istedim. Aslında günümüzde İngilizce bilmek çok da ayrıcalık sayılımıyor. Ama biz nasıl yapıp ediyorsak okullarda bu kadar yıl "i go to school" dan fazla bir şey öğrenemiyoruz.

Benim şuan lisansta okuduğum bölümde de İngilizce bilmek ciddi anlamda önemli. Çünkü Türkçe kaynak sıkıntısı oluyor. Bu derslerde bir şekilde geçiştirilmiş olsa bile bilişim sektörünün kalbi Türkçe ile atmıyor ne yazık ki. Okulda gördüğümüz derslerde bu yıla kadar(3. sınıf) hocalar pek dilin üzerinde durmamışlardı açıkçası ya da ben öyle gördüm. Ben de 1. sınıfın 2. dönemindeyken(bilgi işlem sayesinde) yuh her şey İngilizce yahu demiştim. Benim dilim çok kötüydü gerçi hala çok iyi değil. Ama en azından bilmediğim bir konuyu okuduğumda anlayabiliyorum şuan, tabi bu okuduğum konunun ağırlığına ve kitabın dili kullanımına göre değişebiliyor.

Tavsiyem açıkçası çalışmaktan başka bir şey değil :) Eğer düz liseyseniz(benim gibi) önce bir sürü kelime ezberlemek gerekli ben 1'in yazında öyle yapmıştım. Kelime ezberleme kartlarınında etkili olacağını düşünüyorum. Ama yazarakta kelimenin tam yazımını öğrenmeniz için çok etkili olur bence. Kelime ezberleme işlemi tabiki sözlükten bakarak hangi kelimeler varmış şeklinde değil de bir şeyler okumaya çalışırken karşımıza çıkan bilmediğimiz kelimeleri not alarak olmalı diye düşünüyorum. Biraz dil bilgisi kuralı da bilsek iyi olur hani. Onun için çok özet olmayan ama anlatırken de baymayan içinde bir çok dil bilgisi kuralı özelliği barındıran kitaplar var. Ben bu yaz bir tane almıştım. Takılınca oradan bakıyorum iyi oluyor. 1'den beri yazları 2 aylık falan kurslara gidiyorum. Çok yardımcı oluyor diyemem ama en azından insan kelimeleri unutmuyor. Okunuşları öğreniyor. Hem bütün yaz evde otursam ne yapacağım zaten. Yabancı müzik dinlemek bence çok etkili oluyor. Eğer müziğin sözlerini bir yerlerden okuyup bilmediğiniz kelimelerin anlamlarına bakıyorsanız tabi.

Bunu bizim okul için(COMU) söylüyorum belki 2. sınıfta  ya da sonraki yıllarda çok mümkün olmuyor(biraz sınavlar biraz da kaytarmaktan) ama 1 olsam daha fazla İngilizce çalışırdım. İngilizce çalışmak çok sıkıcı biliyorum :( Ama her şey sıkıcıya konuyu bağlamadan :) 1. sinif olan arkadaşlara tavsiyem daha fazla İngilizce :)

6 Kasım 2012 Salı

Ne Durumdayız?

Merhaba,bir önceki yazımda üzerinde çalıştığım projeden bahsetmiştim. Şu an ne konumdayız daha neleri yapmam gerekli bu yazımda da ondan bahsedeyim. Terminalde yeni sekme açma yatay dikey bölme renk değiştirme gibi özellikler ve birkaç kısayol eklendi. Ancak bunları henüz tam birleştirmedim. Eski kodu biraz bozup yatay böldükten sonra bu hafta vizelere çalışmam gerekli diye biraktım çünkü :). Bu iki haftalık sınav arasından sonra kodları biraz daha düzenleyip terminali yukarından aşağı inen pencere şeklinde açtırma kısmına bakmam gerekli. Hafta sonu biraz nette aradım ancak nedir nasıl yapılır tarzı bir şey henüz bulamadım. Stackoverflow'a bakmadım gerçi orda belki bulabilirdim ;). Şimdilik anlatıcaklarım bu kadar görüşmek üzere :)

21 Ekim 2012 Pazar

Gtk,Qt


Merhaba, bu dönem Gtk ile terminal emülatörü yapmaya çalışıyorum. Geçen yıl Qt üzerinde çalışmış olmam bu dönem yapmaya çalıştıklarıma oldukça yardımcı oluyor aslında. Qt daha çok KDE masaüstü ortamında kullanılmakta(Qt Skype'ta da kullanılıyormuş bugün öğrendim), GTK ise Gnome 'da. Yakuake kullansamda Gnome çok sevdiğim bir masaüstü ortamı olduğunu da söylemeden geçmeyeyim. Gtk ile uygulama yapmak güzel. Kendisi C ile yazılmış ve LGPL ile lisanslanmış. Ben de Gtk'yı Python ile bağlayarak kullanıyorum. Çalıştığım uygulamada henüz terminalimiz çok temel özelliklere sahip. Bugün uygulamaya kaydırma çubuğu ekledim. Bir de uygulamayı çalıştırdığımda o an hangi dizinde çalışıyorsa Bash'te konumu çalıştığı dizin olarak alıyordu. Bunun yerine nereye kurulu olursa olsun o anki kullanıcının ev dizininden başlatılacak şekilde olmasını yaptım. Terminal üzerinde kopyalama yapıştırma gibi işlemlerden de biraz bahsedeyim. Öncelikle "item2.connect("activate",self.copy)" diyerek kopyalama seçeneği aktif olduğunda çalışacak copy adında bir fonksiyon tanımlamış oldum.
def copy(self, widget=None, data=None):
                if self.terminal.get_has_selection():
                        self.terminal.copy_clipboard()
diyerek copy fonksiyonunun içeriğini yazdım. Bu şekide kopyalama işlemimiz tamamlanmış oldu. Sonraki yazılarımda bu iş hakkında daha ayrıntılı bahsetmek üzere görüşürüz :)

3 Eylül 2012 Pazartesi

Konsoldan Nasıl Tweet Atılır?

Merhaba,
internette bloglarda, orda burda gezinirken konsoldan tweet atılabileceğini duydum. Sonra bakalım nasılmış bu bir de ben deniyim eksik kalmıyım diye düşünüp araştırmaya koyuldum. Şu şekilde yapılabileceğini öğrendim adım adım şimdi birlikte yapalım. Önce terminalden
$ sudo vim /etc/apt/sources.list
ile sources.list dosyasını açıp aşağıdaki satırı ekliyoruz.
deb http://ftp.de.debian.org/debian squeeze main
Sonra aşağıdaki komutları veriyoruz.
$ sudo apt-get update
$ sudo apt-get install twidge
Daha sonra bu uygulamayı etkinleştirebilmek için "twidge setup" komutunu veriyoruz. Twitter uygulamasına izin vermek için konsolda çıkan url'yi alıp tarayıcıya yapıştırıyoruz. Bu komutun konsoldaki çıktısı bunun gibi olmalı
----------------------------------------------------------------------------------------------------------

https://api.twitter.com/oauth/authorize?oauth_token.......

Click Allow when prompted.  You will be given a numeric
key in your browser window.  Copy and paste it here.
(NOTE: some non-Twitter services supply no key; just leave this blank
if you don't get one.)

Authorization key:

----------------------------------------------------------------------------------------------------------
Sonra tarayıcıda kullanıcı adı ve parolamızı girip uygulamaya izin veriyoruz. Bize geri dönen pini konsolda "Authorization key" yazan yere girip onayladıktan sonra artık tweet atmaya başlayabiliriz. Benim ilk tweetim şu şekildeydi:
ebru@ubuntu:~$ twidge update
test
:) ben test yazıp yollamıştım. Twidge ile konsoldan kişileri takip etmek, takibi bırakmak, cevap atmak .. vb. şeyleri yapabilirsiniz. Ayrıntılı bilgi için tabiki "man twidge" hoşçakalın :)