Postgresql’de komut çalışma süresini öğrenmek

Postgresql üzerinde uzun süren komutlar çalıştırıp bu komutları ne kadar sürdüğünü öğrenmek istiyorsanız \timing komutu ile çalışma süresi çıktısını aktif hale getirebilirsiniz.

hededb=> SELECT count(*) from hede;
  count   
----------
 55328295
(1 row)
hededb=> \timing
Timing is on.
hededb=> select count(*) from hede;
  count   
----------
 55328295
(1 row)

Time: 86184.920 ms

Bu da böyle bir bilgi olsun :)

March 26, 2013 • Tags: , , • Posted in: teknolojik şeyler • No Comments

Trust me, I’m an engineer :)

cse_graduate2005 yılında başlayan üniversite maceram aralık ayı başında sona erdi :) Artık resmi olarak bir bilgisayar mühendisiyim.

Okul hakkında uzun uzun yazmayı düşünüyorum anca o başka bir yazıya ;) Genel olarak hissettiklerimi yandaki 9gag karikatürü anlatmış.

F*** YEA.

February 16, 2013 • Tags: , • Posted in: hayatın gidişatı • One Comment

GitHub push’larını e-posta ile almak

Uzun zamandır git ve github kullanmama rağmen genelde bireysel projelerim olduğundan gönderdiğim pushların bana e-posta ile gelmesi ihtiyacım olmamıştı. Son zamanlarda destan ve aykut‘la birlikte bir şeyler yapmaya başladığımız için “ulan bu adamlar push yapıyorlar ama ben çıktısını githuba gitmeden göremiyorum” diye pushların e-posta ile gelmesini ihtiyaç hissetmeye başladım.

github-email-hookGit’in kendisinde bu işin hook ile yapılacağını biliyordum ancak github’da nasıl olacağını bilmediğimden biraz araştırma sürecine girdim. Öncelikle hesap ayarlarımdan bana e-posta gönder gibi bir şey aradım, sonuç çıkmayınca google abiye sorma yoluna gittim. Sonrasında github’ın da e-posta işini hook ile hallettiğini buldum. Sahibi olduğunuz bir depoda şu şekilde ilerleyince gerekli ayarı bulabiliyorsunuz:

Settings -> Service Hooks -> Email

İlgili yere gidip e-posta tanımınızı yapınca(e-posta grubu da tanımlayabiliyorsunuz) her push e-posta olarak gelmeye başladı. Bir örneği şu şekilde:

  Branch: refs/heads/master
Home:   https://github.com/dedeler/imdb-data-parser
Commit: 9eca8f8dc397813b960f5e348f3384472c308e51
https://github.com/dedeler/imdb-data-parser/commit/9eca8f8dc397813b960f5e348f3384472c308e51
Author: Aykut Akin
Date:   2013-02-09 (Sat, 09 Feb 2013)

Changed paths:
M idp/parser/triviaparser.py

Log Message:
———–
Adds trivia parser

Bu da böyle bir yazı oldu. Afiyet olsun :)

bir internet bağlantısı macerası

5 ay kadar önce yeni yapılmış bir siteye taşındık. Taşınınca standart elektrik, su, doğalgaz kapama ve ardından tekrar açma(burası ayrı bir saçmalık ama başka bir yazıya) süreçlerinden sonra internet bağlatmak için çeşitli alternatifleri aramaya başladım. Ttnet’in pahalı ve sevimsiz olması, superonline’ın fiber götürmediği bölgelerde çok avantajının bulunmaması ve dsmart’ın aynı paraya hem içinde bi ton düzgün kanal bulunan televizyon hizmeti hem de internet hizmeti vermesi beni dsmart’a başvuru yapmaya götürdü. Eylül ayının başında internet başvurusu yaptım ve aynı gün dsmart’ın uydu alıcısını alıp evde kullanmaya başladım. Tabi başvuru yaparken bulunduğum sitenin yeni bir yerleşim alanı olması sebebiyle sadece fiber altyapısı bulunduğunu öğrendim ve fiber internete(oley!) başvurdum. Bir iki gün sonra dsmart tarafından telefonuma gelen bir mesaj internetimin bağlandığını söylüyordu ancak eve geldiğimde henüz böyle bir şey yoktu.

Tam olarak bu noktada gariplikler başladı. Dsmart internet hizmetini smile üzerinden veriyor. Smile de ttnet üzerinden veriyor. Bağlantı fiber olunca kafanıza göre modem takamıyorsunuz sisteme ki zaten takılan alet bir modem değil. Aleti de internet bağlantınızı nereden yaparsanız yapın size türk telekom getirip bırakıyor. Dolayısıyla benim eve dsmart adına gelen kimse olmadı ortalıkta. Telefonuma mesaj gelmesine rağmen internetin bağlanmadığı görünce dsmart müşteri hizmetlerini aradım ve fiber internet bağlattığımı, ttnet’tin tilgin marka bir modem verdiğini ve bu modem üzerinde bir ayar yapmam gerekip gerekmediğini sordum. Verdikleri cevap basit ve netti: “Biz tilgin marka modeme teknik destek vermiyoruz.” Nasıl la? Hizmet satıyorsunuz ve bu hizmetin sağlanması için gereken donanımdan haberiniz yok. Modem için ttnet’i aradığımdaysa teknik destek verebileceklerini ancak müşterileri olmadığım için bana yardım edemeyeceklerini söylediler. Dsmart üzerinden gelmesi gerekiyormuş isteğin. Hak verdim kendilerine ve dsmartın bir hamle yapması için beklemeye başladım.

Aradan 3 gün kadar geçti(ki arada ben 1-2 defa daha dsmart’ı arayıp nedir durumlar diye sordum, kendilerinin beni arayacaklarını söylediler) ve dsmart’tan bir telefon geldi. Modeminizi ayarlarını yapmak için aradık dedi ve gerekli talimatları verdi(o da setup ekranına gir gerekli yerleri doldur kaydet şeklinde ki ben zaten bunu yapmıştım). Tabi sonuç değişmedi, hala internete bağlanamadım. Bu arada 3 gün önce teknik destek verilemeyen bir modemin 3 gün sonra nasıl destek verilebildiğini çok merak ettim. Hani bir yerlerden nasıl olduğunu öğrendilerse bu bilgiyi edinmeleri nasıl 3 gün sürdü çok şaşırtıcı. Her neyse internete bağlanmayınca biz bi daha bakalım, işinizi önceliklendirelim size geri dönelim dediler. Aradan geçen günlere rağmen ses seda çıkmadı. Tabi onlar beni aramasalar da ben ortalama 2 günde bir arayıp “evime fiber internet bağlattım ancak henüz sizden hizmet alabilmiş değilim. X gün kadar önce bir arıza kaydı açtınız hala geri dönüş yapılmadı, durumunu öğrenebilir miyim?” kalıbını tekrar ettim. Onlar da “Arıza devam ediyor, 48 saat içerisinde çözüp size geri dönüş yapacağız” kalıbını sundular. İşin komiği o 48 saat hiç bitmedi ve her aradığımda sıfırlandı :D

Geçirdiğim sinir dolu görüşmeleri tek tek anlatmaya gerek yok. Genel anlamda bir hata vardı ortada, ne olduğunu, nasıl olduğunu bulamıyorlar; bulamadıkları gibi herhangi bir çözüm üretme yoluna da gitmiyorlar ve en kötüsü beni geçen 48 saatlere rağmen bilgilendirmiyorlardı. Evet, en çok kızdığım noktalardan biri 48 saatlik arıza çözme süreleri varken 48 saat dolduğunda beni aramamaları. Arayıp kusura bakmayın 48 saati doldurduk ancak henüz bir çözüm bulamadık, bize şu kadar daha süre verirseniz seviniriz gibi bir telefon alsaydım gerçekten ilgilendiklerine, önem verdiklerine dair bir anlayışım olurdu. Her neyse arada bir iki defa de twitter’dan laf attım ve twitter üzerinden anında “telefonunuzu gönderin hemen arayalım gibi” bir cevap geldi bana. İşin ilginci harbiden aradılar. Kendileri aramaları gereken zamanda aramayıp ben laf atınca aramaları da dsmartın ne kadar saçma bir müşteri ilişkileri politikası olduğunu gösteriyor zannımca.

Fazla uzatmadan işin sonucuna geleyim. İlk arıza kaydından geçen 20 günden sonra yine benim aradığım bir görüşmede “fiber internet aldım, bağlayamadınız” dediğim sırada telefondaki görevli bana “ama beyfendi sizin hattınız fiber değil ki” dedi. İşte o an neler hissetiğimi anlatamam :D 20 gündür en az 10 defa arayıp her seferinde fiber internet abonesi olduğumu söylememe rağmen hiçkimse bana bu bilgiyi vermedi ve hatanın sebebi de kabak gibi buymuş. Ev hattı Türk Telekom tarafından fiber olarak gözükmüyormuş da ondan adsl bağlamışlar da. Bunların hepsi bir yana 20 gündür hiç mi kimse kontrol etmedi durumu, kimse mi görüşme kaydını dinlemedi. Tabi ben hatanın ne olduğunu anlayıp ısrarla fiber hattım olduğunu bu sebepten internete bağlanamadığımı anlattıktan sonra bi 10 gün kadar geçti ve hala bağlayamadılar interneti. Bu arada biz arızanızı Türk Telekoma ilettik, onlar geri dönmek zorundalar gibi bir ton saçma bahane daha dinledim. Tek istediğim bir şekilde çözüm üretmeleriydi ve onu da yapamadılar.

En sonunda daha fazla dayanamayıp dsmart’ı aldığım bayiye gittim. Arada bir uğrayıp sorunu anlattığımdan durum hakkında bilgisi vardı. Dedim böyle böyle 1 ay oldu internet yok, iptal ettirmek istiyorum. Bayi kanalından gerekli işlemleri yaptı ve öğleden sonra dsmart’tan bir telefon aldım. Bu zamana kadar olan problemlerin tamamen adresimin yanlış girilmesi sebebiyle olduğunu ve bundan dolayı internet bağlanamadığını, istersem internet hizmetini yapacaklarını(ve tabi 48 saat içinde) ve iptal etmeden devam edebileceğimi anlatan bir görüşmeydi. Madem böyle hızlı çözüm üretebiliyorsunuz, niye 1 aydır üretmediniz diye kızdım kendilerine. Bana bugüne kadar hiç yetkili bir kişiyle görüşmediğimi ve bu yüzden sorunların çözülemediğini anlattılar. Halbuki ben görüşmelerimin birkaçında daha yetkili bir kişiyle görüşmek istediğimi ve böyle bir şeyin mümkün olmadığını öğrenmiştim. Sonuç olarak, telefonda biraz daha kavga edip internet ve dsmart hizmetini kapattırdım. Ardından ttnet’e gidip internet almak istediğimi söyledim ancak ben tam sorunlar bitti sanarken ttnet’teki görevli internet hattımın hala dsmart’ta gözüktüğünü ve oradan iptal ettirmeden bir işlem yapamayacaklarını anlattı. Dsmart’ı arayıp durumu anlattığımdaysa benim hattımın tamamen kapandığını ve onlar üzerinde herhangi bir aboneliğim bulunmadığını söylediler. Buna rağmen nasıl olduysa 1 saat sonra falan ttnet’e hat iptali girilmişti. Ttnet görevlisi beni aradı durumu anlattı, belgelerimle girişi yaptığını söyledi ve gün içerisinde internetimin bağlanacağını söyledi ve dediği gibi de oldu. Hadi geçmiş olsun.

Bu yazının buraya kadar olan kısmını yazalı 2 ay kadar süre olmuş ancak yaşamdaki değişikliklerden dolayı fırsat bulup da yayınlayamamıştım. Geçmiş olsun demiştim ama olaylar devam etti :) Hattım kapandıktan 1 ay sonra d-smart’tan X lira(miktarı hatırlamıyorum ama 2 aylık hizmet bedeli gibi bir şeydi) fatura borcunuz vardır, ödemeniz gerekmektedir diye bir mesaj aldım. Hattım iptal edilirken özellikle tarafıma bir faturalandırılma yapılıp yapılmayacağını sormuştum ve böyle bir şeyin olmayacağını söylemişlerdi. Neyse, olay süresince yaptığım yanlışa devam edip tekrar müşteri hizmetlerini aradım. Fatura geldiğini ama böyle bir şey olmaması gerektiğini anlatıp fatura iptali talep ettim ve her zaman olduğu gibi biz sizi 72 saat içinde arayıp bilgilendireceğiz dediler :) Aradan yaklaşık 1 ay kadar geçti ve beni arayıp soran olmadı ancak telefonuma tekrar borcunuz bulunuyor mesajı geldi. Tekrar aradım ve yine 72 saat içinde belli olur dediler. Telefondan çözüm üretmeyeceğimi bildiğim için Twitter’dan sert birkaç tweet(1, 2, 3) attım kendilerine. Sonra ne mi oldu? Ertesi gün aradılar faturamı iptal ettiklerini söylediler. Mutlu son :)

Kısaca öğrenilmesi gerekenler:
- Ttnet her ne kadar sevmediğimiz bir kurum olsa da altyapıyı ellerinde barındırdıkları için çift S kuralları gereğince tercih edilmesi gerekiyor.
- Dsmart almayı düşünüyorsanız, alacaksanız sadece televizyon alın. Kanallar güzeldi, yıllar sonra motogp, f1, nba falan izledim.
- Dsmart’tan internet hizmeti almayı düşünüyorsanız, almayın. Ne yaptıklarını bilmiyorlar bunun yanında zaten size gelen hizmet dsmart -> smile -> ttnet üzerinden aktarılarak geliyor. Tek bir aktarımda bile yeterince sorun yaşanılırken iki tanesi…
- Dsmart internet işinden çekilsin ya da hem teknik ekibini hem de müşteri ilişkileri ekibini değiştirsin. Başka türlü işleri zor.
- Dsmart aldıysanız ve bir şekilde sorun yaşarsanız kesinlikle telefonla falan uğraşmayın, aldığınız bayiye gidin. Bayi üzerinden yapılan isteklere gün içinde dönülürken, telefon üzerinden yapılanlara ay içinde dönülüyor.
- Dsmart abonesiyseniz Twitter’ın gücüne inanın. @DsmartDestek’e mesaj atın, sonuca ulaşıyorsunuz.

eyyorlamam bu kadar, sağlıcakla kalın.

February 10, 2013 • Tags: , , , • Posted in: lan dedim • 2 Comments

Ruby on Rails’de has_many ilişkilerine fonksiyon eklemek

Başlıkta tam ne demek istediğimi anlatamadım ama gereksinim şu şekilde oldu:

Sistemde kullanıcılarınızın birden fazla telefon numarası olsun. Bu telefon numaralarının bir tanesi de varsayılan telefon numarası olarak tanımlansın. Bu durumu oluşturmak için söyle bir modelleme yapabiliriz.

1
2
3
class User < ActiveRecord::Base
  has_many :phones
end
1
2
3
4
class Phone < ActiveRecord::Base
  attr_accessible :is_default
  belongs_to :user
end

Burada kullanıcının varsayılan telefonuna ulaşmak için her seferinde şöyle bir kod yazmamız gerekiyor:

1
@default_phone = @user.phones.where(:is_default => true).first

Ancak her seferinde aynı sorguyu yazmaktansa bunu bir fonksiyona dönüştürmek daha mantıklı bir hareket olacaktır. Normalde user modelinin içinde

1
2
3
def default_phone
  self.phones.where(:is_default => true).first
end

şeklinde bir fonksiyon tanımlamak derdimizi çözüyor ancak bu yöntem nedense rails yöntemi gibi gelmedi bana. Kullanıcının varsayılan telefonunu almak için şunun yerine

1
@phone = @user.default_phone

şöyle bir yöntem olmasını bekledim:

1
@phone = @user.phones.default

Biraz araştırıp stackoverflow’da şu soruya denk geldikten sonra istediğimi elde etmiştim. Modelin içinde has_many ilişkisini tanımladığım yerde bir fonksiyon tanımlamak olayı çözüyormuş:

1
2
3
4
5
6
7
class User < ActiveRecord::Base
  has_many :phones do
    def default
      where(:is_default => true).first
    end
  end
end

Bu şekilde direk oluşturduğum ilişkiye fonksiyon tanımlayıp sadece ilişki kullanıldığında erişilebilmesini sağlamış oldum. Bu da benim için en uygun çözüm oldu. Stackoverflow’daki soruda da yazıyor ama atlarsanız eğer bu olaya Association Extensions deniliyormuş ve burada detaylı açıklanıyor.

Bu da bir kenarda dursun :)

Jira’nın sunucusunu değiştirirken olan bitenler

Bir süredir şirkette kullandığımız jira’yı başka bir sunucuya taşımam gerekiyordu ve bugün girişme zamanı geldi :) Yaptığım şeyler ve yaşadığım problemler kabaca şu şekilde:

Jira Kurulum ve Ev dizinlerini taşımak:

Jiranın kendisine müdahalelerimiz bulunduğundan ve kurulmuş birçok plugini kaybetmek istemediğimden yeni sunucuda sıfırdan kurulum yapıp eski sunucudan alınan export’u koymaktansa varolan ortamı komple taşımayı seçtim. Taşıma işlemine de jira’nın kurulum(install) ve ev(home) dizinlerinden başladım. Bu iki dizini taşıma işi için dizinlerin bulunduğu path’e geçip şu komutları verdim:

tar -zcvf jira-home-<date>.tar.gz jira-home/
scp jira-home-<date>.tar.gz your_new_server:.
tar -zcvf jira-install-<date>.tar.gz jira/
scp jira-install-<date>.tar.gz your_new_server:.
ssh your_new_server
tar -zxvf jira-install-<date>.tar.gz <your_jira_install_path>
tar -zxvf jira-home-<date>.tar.gz <your_jira_home_path>

Burada dikkat edilmesi gereken nokta özellikle jira-home dizinini sıkıştırmadan önce jira’yı kapatmak gerekiyor. Jira’nın çalışması biterken ev dizinine yazdığı bir takım şeyler var ve bunları kaybetmemek için gereken bir durum bu.

Veritabanını Taşımak:

Bizim düzende veritabanı MySql idi ve şu şekilde olaylar halloldu:

mysqldump -u root -p jira > jira-<date>.sql

scp jira-<date>.sql your_new_server:.

ssh your_new_server

mysql -u root -p jira < jira-<date>.sql

Jira Ayarları:

Jira’nın bir sorun olmadan çalışması için dikkat edilmesi gereken birkaç durum var:

  1. Yeni sunucuda Java kurulu olmalı ve java path’i düzgün ayarlı olmalı. Jira’nın setenv.sh dosyası üzerinde bununla alakalı bir tanım varsa o tanımı güncellemek gerekebilir. Aksi takdirde jira javaya ulaşamaz ve çalışmaz.
  2. Jira ev dizininizi eski sunucudan farklı bir yere koyuyorsanız, jira ayarlarında gidip bu dizini belirtmeniz gerekir. Bunun ayarı standart <jira_install>/atlassian-jira/WEB-INF/classes/jira-application.properties dosyasında.
  3. Mysql kullanıcılarınız ya da kullanıcıların şifreleri değiştiyse bunu da gidip <jira_home>/dbconfig.xml dosyasına anlatmak gerekiyor. Yoksa veritabanına bağlanamadığınız için işler yolunda gitmez.
  4. Yeni sunucuda farklı bir port üzerinden ya da farklı bir path’ten çalışacaksanız yine gidip server.xml dosyasına bunu anlatmanız lazım.

Jira’yı ayağa kaldırmak:

Taşıma ve ayarlama işleri bittiğine göre jira’yı standart bir şekilde ayağa kaldırabiliriz:

<jira_install>/bin/startup-jira.sh

Sonrasında loglara dalıp jira’nın ayağa kalktığını görmelisiniz :)

Bitti mi?

Bizim konfigürasyon’da her şey bu kadar kolayca bitmedi. Eğer Crowd/LDAP gibi bir merkezi kullanıcı yönetiminiz varsa işler biraz sarpa sarabiliyor. Kullanıcı yönetiminiz tamamen jira üzerindeyse bu aşamalara ihtiyaç duymamanız gerekiyor.

Crowd ile (tekrar) entegrasyon:

Jira çalışmasına çalıştı ancak sisteme giriş yapmaya çalıştığımda hata aldım. Loglara baktığımda CrowdAuthenticator’e ulaşılamadığını ve bunun tamamen network yüzünden olduğunu gördüm. Eski sunucuda jira ve crowd’un ikisi de localhost üzerinde çalışırken jira’yı yeni bir sisteme alınca artık localhost ile yapılmış ayarların çalışmadığını gördüm. Jira’nın kurulum belgesinde anlattığı adımlara bakıp kurcalamam gereken 2 dosya ve bir veritabanı satırı gördüm:

  1. seraph-config.xml: Crowd’un sso desteğini kullanıyorsanız burada bir ayar yapıyorsunuz ancak bunun crowd’un sunucu IP’si ile bir alakası yok. Dolayısıyla bu dosyada yapacağımız bir işlem yok.
  2. crowd.properties: Bu dosyaya baktığımızda ise düzenlememiz gereken 2 satır bulunuyor. crowd.server.url ve crowd.base.url tanımlamaları localhost’lu değerler içeriyordu ve her ikisini de IP içeren satırlar haline getirdim.
  3. Veritabanı değeri: İşin en zor kısmı veritabanı üzerindeki değer oldu. Normalde jira’nın arayüzünden tanımlanan bu işlem jira’ya giriş yapamadığımız için mysql üzerinden yapmak zorunda kaldım. Öncelikle Jira’nın oluşturduğu tablolardan aradığım değere nasıl ulaşabileceğimi aradım. Birkaç “select * from hede” komutundan sonra cwd_directory tablosunun user directory’lerini, cwd_directory_attribute tablosunun da bu directory’lerin değerlerini tuttuğunu gördüm. Sonrasında şu şekilde komutlar ile işimi hallettim:

DELETE FROM cwd_directory_attribute WHERE attribute_name=”crowd.server.url” and directory_id=<your_directory_id>;

INSERT INTO cwd_directory_attribute(directory_id, attribute_name, attribute_value) VALUES(<your_directory_id>, “crowd.server.url”, <your_crowd_ip>);

Bu işleri de hallettikten sonra her şey sorunsuz çalışmaya başladı :) DNS tanımlamanızı güncelledikten sonra artık Jira’nızı yeni sunucusunda kullanabilirsiniz. Kolay gele :D

ehliyet denen şeyin saçmalığı

Geçtiğimiz yaz sonunda elfcanımla birlikte bir motorsiklet almaya karar verdik. Sonrasında gidip güzelinden bir tane aldık da :) Ancak tabi motorsikleti almak motorsikleti kullanmak için tek başına yeterli olmadığından bir de ehliyet kurslarını araştırmaya başladık. Her zamanki bahtsızlığımızla ehliyet almaya karar verdiğimiz an bir sınav döneminin kayıtları bittiği bir ana denk gelmişti ve bu da uzun bir bekleme süreci demekti.

Uzun bir bekleme dönemi dedik ya biz ne kadar uzun olacağını bilmiyorduk. Motorlu taşıtlar sınav takvimi dediğimiz garip takvimi gördüğümüzde elfcanımın ehliyetini almak için 2 buçuk ay gibi bir süre, benimse (zamanında babamın sözünü dinlemeyip B sınıfı ehliyetimi alıp cebimin bir köşesine koymadığımdan) 4 buçuk ay gibi bir süre vardı.

Burada bu senenin sınav takvimi bulunuyor, genelde sınav tarihinden 1 ay sonra bir de direksiyon sınavı bulunuyor. Yazılı sınavın bir kısmından kalan bir kişi bir sonraki yazılı sınavı bekliyor, bunun da süreci 2 ay daha ileriye attığını söylememe gerek yok.

Buraya kadar bir şey yok. Hani sınav takvimi böyledir, ehliyet eğitimi gibi bir eğitim var ve alınması gerekmektedir gibi bir düzene eyvallah diyebiliriz. Sonuçta trafik, ilkyardım ve motor konularını hiç bilmeyen bir insanı eğitip eline trafiğe çıkıp araç kullanabileceğine dair bir belge veriyorsun. O insanın trafik denen şeyde nasıl davranması gerektiğini, nerede durup nerede geçmesi gerektiğini, nerede sinyal vermesi gerektiğini anlatman gerekiyor ki yarın öbür gün o adam dangalak şekillerde araç kullanmasın. Teorikte süper olan bu süreç pratiğe dönünce nasıl oluyor bir anlatayım:

Buraya kadarki süreç yazılı sınav saçmalıklarıydı. Yazılı sınavı geçenler bir de direksiyon sınavına giriyor ki beni benden alan bir süreç oluyor bu süreç. Direksiyon sınavına sadece tek bir bölgede(tahmin edebileceğiniz üzere sınavın yapılacağı bölge) çalıştık biz. Trafiğe hiç çıkmadık, ehliyet kursunun olmayan araçlarla tek tük karşılaştık. Sınav günü ise araca 2 tane müfettiş bindi ve toplam 4 defa sağa dönüp(kare çizdik) sınavı bitirdik. Aldığım 40 dakikalık direksiyon eğitimiyle 90 gibi bir not aldım ve geçtim. Sınav esnasında sola dönebiliyor muyum, öndeki araçla takip mesafem ne durumda, trafikte araç kullanabiliyor muyum, yokuş yukarı aracı kaydırmadan kaldırabiliyor muyum, yokuş aşağı aracı kaydırmadan durabiliyor muyum gibi tonlarca sorunun cevabını aramadılar bile. Sınav boyunca bakılan tek olay arabaya bindiğinde kemerini taktın mı, aynaları düzenledin mi, sinyalini verdin mi.

İnsanların trafiğe çıkabilmesini, araba kullanmasını sağlayan bir değerlendirme bu kadar yalan bir değerlendirme olmamalı. Çok daha akılcı sorularla, belki yazılı değil sözel sınavlarla, trafiğe çıkılan bir direksiyon sınavıyla, çok daha ciddi bir değerlendirmeyle verilmeli ehliyet. Öyle 2 yıl stajyer olacaksın, yanında birisi olmadan kullanamayacaksın demek de bir çözüm değil bu duruma. Yine düzgün bir eğitim verilmeden, iyi bir araç kullanım bilgisi olmadan kullanacak o adam arabayı. Bütün bunları yapamıyorsan trafik kazalarına direk göz yummuş oluyorsun.

Bunun yanında konu hakkında bilgisi olan, bir şekilde araba kullanma tecrübesi olan bir adamı da ehliyet alabilmesi için 2 ay bekletmek kadar saçma bir durum yok. Merkezi sınav yapacağım diye harcadığın parayla ehliyet kurslarını daha iyi denetip, sayısını azaltarak yerel sınavlarla bu işi çözmek çok daha akılcı bir yöntem. Tabi Türkiye’de işlemez o ayrı.

Bu dönem de bu olaylara kızdım ben işte…

March 1, 2012 • Tags: , , , , • Posted in: lan dedim • No Comments

beceriksiz gnome 3

Uzun zamandır masaüstü ortamı(DE) olarak gnome kullanıyorum. Awesome, Xfce, Openbox, Fluxbox, Gnome+Openbox gibi alternatifleri uzun süre deneyip kullandıktan sonra artık bir şeyleri kendim ayarlamaktan sıkılıp dağıtımın(Linux Mint Debian Edition) getirdiği standart masaüstünü kullanmaya başladım.

LMDE ve üzerindeki Gnome2 ile mutlu mesut hayatıma devam ederken, başıma geleceği bile bile debian depomu değiştirip testinge giren gnome 3′ü kurdum. Daha önceden Arch ile denemiştim aslında Gnome 3′ü ve beğenmeme rağmen bir takım temel şeylerin ayarlanamaması ve panel widget’larının uçması sebebiyle benim için standart olmamıştı. Aradan geçen zamanda bir gelişme göstermiştir diye düşündüm ancak yine değişen bir şey olmamış.

Benim için temel gereksinimler ve gnome 3′ün sağlamadıkları şu şekilde:

Açıkcası Kde4′ün ilk çıktığı zamanki hatalarına karşı masaüstünde devrim yaptığını düşünüyordum. Kde 3.x serisini hiç sevememiş birisi olarak Kde 4.x li sürümleri oldukça uzun süre kullandım. Gnome 3′ün ise neden yapıldığını bilmiyorum. Bunu bilmediğim gibi nereye gideceğini de göremiyorum. Hani x ay sonra adam olacak, süper hale gelecek diye bir beklentim yok kendisinden.

Bu şartlar altında Gnome üç benim için gnome uç oldu :) Bir de unity macerası mı yapsak :P

February 16, 2012 • Tags: , , , • Posted in: teknolojik şeyler • No Comments

nerde o eski bloglar(a.k.a. sçtımının sosyal medyası)

Yazı yazmayı oldum olası sevmiş bir insan değilim ama önceden bir şeyler okumayı severdim. Küçükken hikaye, masal gibi kısa süren şeyler okuyordum. Öyle kalın kalın olan ve okuduğum roman sayısı ise baya sınırlıdır sanırım. Azıcık büyüyüp de üniversiteye girince o küçük kitapları okuma huyu blog okuma huyuna dönmüştü bende. Özellikle teknik içerikli bloglar benim kendimi geliştirmeme çok yardımcı oldu.

Upuzun bir makale okumaktan ya da bir sürü detayı olan bir manuel okumaktansa birisinin o konu hakkında yazdığı bir blog yazısını okumak çok daha keyifli oluyordu. Hem bilgiye daha çabuk ulaşmamı hem de o kişinin neyi neden yaptığını falan anlamamı sağlıyordu. Ancak zaman içinde facebook, friendfeed, twitter gibi saçmasapan sosyal medya şeyleri çıkınca takip ettiğim insanlar yazmayı bıraktı. Oturup bir şeyi, tecrübelerini uzun uzun yazmak yerine 2 satırla twitter üzerinden paylaşmaya ya da 5 satırla friendfeed’den #yaydırıp, milletin saçmalıklarıyla uğraşmaya başladılar.

Elbette bu bir tercih meselesi. Herkesin düşüncesine saygı duyuyorum ancak sosyal medya denen şeyin bir takım paylaşımları daha kötü hale getirdiğini düşünüyorum. En basitinden oralarda paylaşılan şeylerin bir arşivi olmuyor. 3 gün önce atılan ve süper bir bilgi içeren bir tweet’i, post’u tekrar arayıp bulma şansınız olmuyor. Yazılan şeyin bir kere okunduğunu içten içe bilmek yazan insanı da daha özensiz yazar hale getiriyor sanırım. Bunların yanında önceden blog yazan adamların zaman yok gibi şeyler söylemesi ayrıca bir komik geliyor ki zamanında o vakti çok rahat bir şekilde yazmaya ayırıyorlardı.

Amacım kimseye laf çarpmak, eleştirmek falan değil. En basit haliyle derdim şu: sıkıldım. Twitter’ı ilk gördüğüm zaman, ki o zamanlar anasayfasında “twitter nedir? aklınıza bir şey mi geldi hemen yazın, o an ne yaptığınızı herkes bilsin, tuvalette sıçarken fikriniz gelince orada bırakmayın” gibi saçma bir çizgi videosu vardı, bu ne biçim şey lan ne gerek var ki demiştim. Şimdi de kendisini uzunca bir süre kullanmış olmama rağmen çok farklı değil düşüncelerim. Twitter benim için para versen yapmazdım dediğim projelerden bir tanesi. Sıkılmama geri dönersek, insanların bilgi paylaşımı metodlarını değiştirmesi ve bunu çöp haline getirmesinden sıkıldım. Evet arkadaş oraya yazdığın şey o an için X kişi tarafından görülebilir, Y tane yorum alabilir, Z kişi like edebilir falan filan ama o bilgiye 2 gün sonra erişemedikten sonra sana ne faydası var, bana ne faydası var?

Ha bunları daha hiç mi kullanmayacaksanız derseniz, öyle bir amacım yok. Sadece bana ters gelen bir durumu yazmak istedim. Tabi bunları yazmak yerine “twitter çok saçma yeaaağğğ, yazıyon 2 gün sonra bulamıyon” diye bir tweet de atabilirdim ama olmadı işte :D

February 7, 2012 • Posted in: lan dedim • 5 Comments

Konsoldan fare tıklaması tetiklemek

Zaman zaman çeşitli online oyunlara sarıyorum. Sardığım zaman da bir süre sonra sıkılıp bu işi daha kolay nasıl yaparım diye kendime iş çıkarıyorum. Son sardığım oyun php ile yazılmış basit bir rpg oyunu. Arada sırada girip 3-5 şeye tıklayıp sonra kapatıp hayatıma devam ediyorum. Oyunda flash ile yapılmış bir “slots” uygulaması var ve az biraz para ve tecrübe puanı(xp) kazandırıyor. Tabi bunun sıkıntısı jeton sayısı kadar ekrana tıklamak oluyor.

Giriş kısmını geçtikten sonra asıl meseleye gelelim. Linux sistemde mouse’u bir yere sabitledikten sonra oraya otomatik tıklama yapmak istiyordum. Mantık olarak X’e göndereceğim bir komut olmalı ve X de bu olayı benim yerime yapmalı diye düşünsem de başlangıçta C ile yazılmış Xlib.h ve Xutil.h gibi kütüphanelerin kullanıldığı bir yöntem çıktı. Çıktı çıkmasına da sadece basit bir click işlemi için olay kod yazma seviyesine girmemeli diye düşündüğümden biraz daha aramaya inanarak aradığım aracı buldum:

xdotool adında güzel bir konsol uygulaması bulunmakta(geek abiler sağolsun, konsol candır :) ). Bu uygulama benim istediğim şekilde fareyi yönetmekle birlikte(istediğiniz yönde hareket ettirme yeteneği falan da var) bütün klavye aksiyonlarını da yapabiliyor. Detaylı bilgisi için “man xdotool” komutu(rtfm) yeterli oluyor.

Başlıkta yazdığım olayı tamamlayayım. Konsoldan fareyi yönetip tıklama işlemini tetiklemek için:
xdotool click 1
komutu yeterli oluyor. Bu komut fare ile sol tık yapmışssınız gibi davranıyor. 1 yerine parametre olarak 2 verdiğinizde orta tuşu, 3 verdiğinizda sağ tuşu tetikleyebilirsiniz.

Tabi benim durumumda bir kere tıklamak yetmiyordu, tıkladıktan sonra biraz bekleyip aynı yere bir daha tıklamak gerekiyordu. Basit bir bash script döngüsü yetti bu işi halletmeme:
while [ "1" ]; do
sleep 7; #7 saniye beklemek için
echo "click";
xdotool click 1;
done;

Bu da böyle gereksiz bir bilgi oldu işte :)

December 17, 2011 • Tags: , , • Posted in: teknolojik şeyler • One Comment