Dr. Volkan Tunalı'nın Kişisel Blogu

Bilgisayar, Teknoloji, Bilim, Sanat

Google Python Sınıfı – Eğitim Videoları

leave a comment

Son zamanlarda Python programlama dili ile ilgili çok fazla olumlu şey duyduğum ve Python ile yapılmış çalışmalara sıkça rastladığım için merak edip neye benziyor diye görmek için www.python.org adresinden kurulumunu indirip kurcalamaya başladım. www.belgeler.org/uygulamalar/python-tutorial.html adresindeki Türkçe kılavuza da hızla gözatarak kabaca temel kavramları öğrenmeye çalıştım.

Birkaç gün önce Google’s Python Class sayfalarında Google tarafından düzenlenen 2 günlük bir Python eğitiminin videoları olduğunu gördüm ve seyretmeye başladım. İlk birkaç videoyu seyretmeye zamanım oldu şimdilik; çok basit ve temel kavramların çok gereksiz şekilde uzatıldığını görüp sıkıldıysam da yazılı olarak karşılaşma ihtimalimin düşük olduğu bazı güzel püf noktaların az da olsa veriliyor olması nedeniyle harcadığım zamana değdiğini düşünüyorum.

Google's Python Class Video 1

Python öğrenmek isteyenlerin ya da en azından neye benziyor diye merak edenlerin videolara bakmasını tavsiye ederim. Ben özellikle Python’un hafifletilmiş sözdizimini, string, dizi ve listelerle ilgili tek tip olan ve tutarlılık barındıran fonksiyonlarını, Matlab’ın komut satırı gibi birşeyleri kolayca deneyebilmemize olanak sağlayan arayüzünü çok beğendim. Eğitim videolarında vurgulandığı gibi, pratik ve çabuk sonuca ulaşacak programlar yazmak için ideal bir dil gibi görünüyor.

2 günlük eğitim toplam 7 videoya bölünmüş durumda; videoların içerikleri şöyle:

  1. Introduction, strings
  2. Lists and sorting
  3. Dicts and files
  4. Regular expr
  5. Utilities
  6. Utilities urllib
  7. Conclusions

Written by vtunali

Aralık 6th, 2010 at 12:24 pm

Matlab ile Örnek Bir Konuşma Tanıma Uygulaması – Gelişme

65 comments

Sıra geldi uygulamayı yapmaya. Bunun için daha önce bahsettiğim gibi Voicebox ve H2M toolbox’larını kullanacağız. Güncel sürümlerini bulup kullanabilirsiniz. İsterseniz aşağıdaki adreslerden benim kullandığım sürümlerini indirebilirsiniz. Bu toolbox’ları indirin ve açın; bunların bulunduğu klasörleri Matlab’ın path’ine ekleyin. Matlab arayüzünden klasöre sağ tıklayıp “Add to path” komutunu çalıştırmanız da geçici olarak yeterli olabilir. Bu konuda ayrıntıya girmeyeceğim, Matlab ortamını tanıyor olduğunuzu varsayıyorum. Ben Matlab 7.9.0 (R2009b) sürümünü kullandım bu uygulamayı yazarken ancak bu kodların Matlab 6 sürümünde de çalıştığını kesin olarak biliyorum, tezimi yazarken 6 sürümünü kullanmıştım.

www.vtunali.com/download/voicebox.zip
www.vtunali.com/download/h2m.zip

Training – Sistemin Eğitimi

Konuşma Tanımayla (daha genel olarak Örüntü Tanımayla) ilgilenenlerin bileceği gibi, önce sisteme bilinen sözcükleri tanıtacağız. Bu aşama genel olarak Training olarak isimlendiriliyor. Bunun için şu iki Matlab fonksiyonunu yazacağız:

  • train_word: parametre olarak verdiğimiz wav dosyasını işleyip HMM model parametrelerini üretir ve hmm_model_files klasörüne kaydeder.
  • train_all_words: train_word fonksiyonunu kullanarak sisteme tanıtacağımız tüm sözcükleri işlemden geçirir. Çalışmayı kolaylaştırmak ve anlatımı basitleştirmek için kullandım.

Şimdi bu fonksiyonların içine bakalım ve üzerinden adım adım geçelim:

train_all_words.m

function train_all_words
    warning('off','MATLAB:dispatcher:InexactCaseMatch');
    numStates = 5;

    % Train word 1 - ALAN
    train_word('alan', numStates);

    % Train word 2 - BİZİM
    train_word('bizim', numStates);

    % Train word 3 - KALAN
    train_word('kalan', numStates);

    % Train word 4 - MERKEZ
    train_word('merkez', numStates);

    % Train word 5 - ZAMAN
    train_word('zaman', numStates);
end

Burada numStates değişkeni HMM durum makinasında (state machine) kullanılmasını istediğimiz durumların sayısını ifade ediyor. Teorisini okursanız daha anlamlı gelir. Genellikle konuşma tanımada bir sözcük için 5 durum efektif sonuç veriyor. Biz de bu nedenle 5 kullanıyoruz örneğimizde. İsterseniz farklı değerler vererek sonucu deneyebilirsiniz.

Eğitim için ben sabit olarak 5 farklı sözcük için yapmış olduğum kayıtları kullandım. Siz bu kısmı kendi uygulamanızın gereksinimlerine göre düzenleyebilirsiniz. Şimdi train_word fonksiyonuna bakalım.

train_word.m

function train_word( wordName, numStates )
disp(['Training word: ' wordName]);

% read wav file and generate cepstrum
wav_file_name = ['training_words/' wordName '.wav'];
[y, fs] = wavread(wav_file_name);
observationVector = melcepst(y, fs, '', 22, floor(3*log(fs)), 128, 32);

% Training parameters
DIAG_COV = 1;   % Force use diagonal covariance matrices
QUIET = 1;      % Make training routines silent
N = numStates;  % Number of states per word model
% Transition matrix is more or less arbitrary and will not be estimated (too
% few utterances are available)
A = sparse(0.85*diag(ones(1,N))+0.15*diag(ones(1,N-1),1));
A(N,N) = 1;
NIT = 10;       % Number of EM iterations
p = size(observationVector, 2);

X = [];
st = [];
st = [st; size(X,1)+1];
X = [X; observationVector];
T = size(X,1);

% Training. Because there is very few available training data, the covariance
% matrices are diagonal and shared by all states of the word model (ie. all
% states have the same covariance matrix given by Sigma)
[my_mu,Sigma] = hmm_mint(X, st, N, DIAG_COV,QUIET);
Sigma = ones(N,1)*mean(Sigma);                       % Shares covariance
logl = zeros(1, NIT);
for n = 1:NIT
% Expectation step of the EM algorithm
[tmp, logl(n), gamma] = hmm_mest(X, st, A, my_mu, Sigma, QUIET);
% Unconstrained Maximization step of the EM algorithm
[my_mu, Sigma] = mix_par(X, gamma, DIAG_COV, QUIET);
% Modification of the EM Maximization due to the constraint that all
% covariance matrices are identical
Sigma = ones(N,1)*(sum((sum(gamma)'*ones(1,p)).*Sigma)/T);
end
my_sigma = Sigma(1,:);

% Write a separate mat file for each words model in subdirectory data
eval(['save hmm_model_files/' wordName ' my_mu my_sigma']);

end

Koddaki bazı yorumlar bana ait değil. H2M toolbox’ında örnek bir kod vardı, oradan aldığım bölümlerdeki yorumları da aynen bıraktım lazım olur diyerek. Şimdi eğitim için adım adım ne yaptığımıza bakalım:

% read wav file and generate cepstrum
wav_file_name = ['training_words/' wordName '.wav'];
[y, fs] = wavread(wav_file_name);
observationVector = melcepst(y, fs, '', 22, floor(3*log(fs)), 128, 32);

Kodun ilk bölümünde sisteme tanıtmak ve HMM model parametrelerini oluşturmak istediğimiz sözcüğün training_words klasöründe yer alan wav dosyasını okuyoruz ve voicebox toolbox’ında yer alan MELCEPST fonksiyonu ile bu sözcüğün Öznitelik Vektörlerini (Feature Vector) oluşturuyoruz. Yani, ses sinyalinden tanıma için yararlanabileceğimiz, bir sözcüğü diğerinden ayrıştırabilmemizi sağlayan öznitelik vektörünü elde ediyoruz. Bu vektörün adı değişik kaynaklarda Observation Vector olarak da geçer. Melcepst fonksiyonunun çeşitli parametreleri var, bunlar hakkında ayrıntıya girmeyeceğim ama mesela 22 ile oluşacak vektörün 22 boyutlu olmasını istediğimizi belirtiyoruz. Bu sayıda denemeler yapabilirsiniz, 12′den daha düşük bir sayı tanıma başarımını düşürebilir. Diğer parametreler ise sinyal üzerinde uygulanacak pencereleme ve pencerelerin üst üste binme (overlap) ayarlamaları için gerekiyor.

Bu fonksiyonun sonraki bölümü ise elde ettiğimiz öznitelik vektörünü kullanarak sözcük için HMM model parametrelerini üretiyor. Burada Expectation Maximization olarak adlandırılan bir teknik uygulanıyor. Bu işlemin sonucunda elimize 2 parametre geçiyor: my_mu ve my_sigma. Bu iki değişkeni hmm_model_files klasörü altında sözcükle aynı isimde bir MAT dosyasına saklıyoruz. Bu MAT dosyaları sistemin tanıma aşamasında kullanılacaklar. Gördüğünüz gibi, sisteme tanıttığımız sözcük için öznitelik vektörünü saklamıyoruz, bunun yerine HMM model parametrelerini saklıyoruz. Öznitelik vektörünü saklayıp tanıma aşamasında tekrar model parametrelerini oluşturabilirdik, ama bu durumda tanıma sırasında sisteme gereksiz bir yük getirmiş olurduk ve tanıma süresini uzatırdık.

Testing – Tanıma Aşaması

Bu aşamada, sisteme yeni bir sözcüğü vererek daha önce tanıttıklarımız arasından en benzerini bulmasını isteyeceğiz. Örnekte tanıttığımız 5 sözcük için bu kez farklı bir kayıt yaparak tanımasını isteyeceğiz. Eğitim için kullandığımız dosyanın aynısını test için kullanmayacağız, bu zaten mantıksız olur.

test_word.m

function test_word( wordName, numStates )

% List of words we have already trained and have
% HMM model files in hmm_model_files directory.
trainedWords = {'alan';
                'bizim';
                'kalan';
                'merkez';
                'zaman'};

% read testing wav file and generate cepstrum
wav_file_name = ['testing_words/' wordName '.wav'];
[y, fs] = wavread(wav_file_name);
observationVector = melcepst(y, fs, '', 22, floor(3*log(fs)), 128, 32);

% HMM Viterbi search
N = numStates;
A = sparse(0.85*diag(ones(1,N))+0.15*diag(ones(1,N-1),1));
A(N,N) = 1;
numIter = 10;

numberOfFiles = length(trainedWords);

for w=1:numberOfFiles
    fileName = trainedWords{w};
    modelFileName = ['hmm_model_files/' fileName '.mat'];
    load(modelFileName);

    Sigma = ones(N,1) * my_sigma;

    % make viterbi search and obtain a similarity score
    score(w) = hmm_vit(observationVector, A, [1 zeros(1,N-1)], my_mu, Sigma, 1);
end  % for w=3:num...

% Word with max score is the best recognized word.
result = find(score >= max(score));

disp(['Recognized word is ' trainedWords{result}]);

end

Sisteme daha önce tanıttığımız sözcükleri ben sabit olarak bir diziye yazdım. Siz uygulamanızda bu kısmı daha farklı düşünebilirsiniz. Tanıtılan sözcükleri ilgili klasörden okuyarak vs. kullanabilirsiniz.

Bu fonksiyonun ilk kısmı tanıdık geliyor. Burada da sistemin tanımasını istediğimiz sözcüğü önişlemeden geçirip öznitelik vektörünü elde ediyoruz. Bu öznitelik vektörünü sonraki aşamada HMM Viterbi Search işleminde kullanıyoruz.

for w=1:numberOfFiles
    fileName = trainedWords{w};
    modelFileName = ['hmm_model_files/' fileName '.mat'];
    load(modelFileName);

    Sigma = ones(N,1) * my_sigma;

    % make viterbi search and obtain a similarity score
    score(w) = hmm_vit(observationVector, A, [1 zeros(1,N-1)], my_mu, Sigma, 1);
end  % for w=3:num...

Gördüğünüz gibi çok basit bir döngüde, daha önce sisteme tanıttığımız sözcükler için model parametrelerini yüklüyoruz ve ardından hmm_vit fonksiyonu ile sistemin tanımasını istediğimiz sözcük için bir skor elde ediyoruz.

% Word with max score is the best recognized word.
result = find(score >= max(score));

disp(['Recognized word is ' trainedWords{result}]);

Eğitmiş olduğumuz sözcükler arasından en yüksek skora sahip olanı yani en benzer olanı tanınmış sözcük olarak raporluyoruz.

Nasıl Çalıştıracağız

Fonksiyonları yazdık ama nasıl deneyeceğiz? Hazırlık aşaması olarak:

  • Öncelikle yukarıda kodlarını verdiğim 3 adet .m dosyasını bir klasörde toplayın (train_all_words.m, train_word.m, test_word.m).
  • Aynı klasör içinde şu 3 klasörü oluşturun: training_words, testing_words, hmm_model_files.
  • Voicebox ve H2M toolbox’larının Matlab work path’ine eklenmesi gerektiğini tekrar hatırlatayım.
  • Sisteme öğretmek istediğiniz sözcükler için kısa ve temiz ses kayıtları yapıp training_words klasörüne koyun. Bu kayıtların mono olması ve 22 Khz olmasına dikkat edin.
  • Sistemin tanımasını istediğiniz sözcükler için de aynı şekilde kayıtlar yaparak testing_words klasörüne koyun.
  • test_all_words fonksiyonunda değişiklik yaparak kendi sözcükleriniz için model oluşturulmasını sağlayın.

Şimdi Matlab komut satırından deneme yapabiliriz:

>> train_all_words
Training word: alan
Training word: bizim
Training word: kalan
Training word: merkez
Training word: zaman
>> test_word('alan', 5);
Recognized word is alan
>> test_word('benim', 5);
Recognized word is bizim
>> test_word('kadar', 5);
Recognized word is kalan

train_all_words satırı ile tüm eğitim sözcükleri için model parametrelerinin oluşturulmasını sağladık. test_word(‘alan’, 5); satırı ile tanımasını istediğim “alan” sözcüğünü denedim ve sonuçta daha önce bu sözcüğü tanıtmış olduğum için yine en benzer olarak kendisini buldu. Aynı şeyi “benim” sözcüğü için denediğimde bu sözcüğe en yakın eğitim sözcüğü olan “bizim” sonucunu aldım. Yine daha önce tanıtmadığım “kadar” sözcüğünü denediğimde tanıtmış olduğum “kalan” sonucunu aldım. Gördüğünüz gibi, sistem sözcükler için oldukça efektif ve başarılı. Siz eğer en benzer sözcüğün sonuç olarak getirilmesini istemezseniz, elde edilen skor değerlerinden belli bir eşiğin üzerinde skorla benzer olanların doğru tanıma olarak kabul edilmesi şeklinde bir mantık uygulayabilirsiniz.

Umarım bu örnek uygulama bu alanda çalışmak isteyenlere fikir verir ve uygulama geliştirme aşamasında yardımcı olur. “Şu .m dosyalarına da bağlantı verseydiniz” dediğinizi duyar gibiyim. Özellikle bunu yapmadım, kodları bu sayfadan çıkartmaya ve açıklamalarımı okumaya üşenmeyin. Konuyla ilgili sorularınız olursa e-posta ile sormak yerine bu yazıya yorum bırakarak sorun, böylece vereceğim cevaplar ve gelişecek diyaloglar sonradan gelecekler için de yararlı olacaktır. Sorularınızı elimden geldiğince yanıtlayacağım ancak şu tür sorular olursa yanıtlamak istemiyorum: “kodu kopyaladım ama çalıştırırken xyz değişkeni bulunamadı diyor, ne yapmalıyım”, “Matlab’da wav dosyası nasıl kaydederim” gibi konu dışı ve Matlab’ın kullanımı ile ilgili sorular lütfen sormayın. Verdiğim kodlarda bir hata tespit ederseniz lütfen paylaşın, birlikte düzeltelim. Buraya çalıştırmadığım hiçbir kod koymadım, bu nedenle anlattığım şekilde uyguladığınızda çalışmaması için bir neden yok.

Konuşma Tanıma alanında çalışacak arkadaşlara başarılar dilerim. Kolay gelsin. Eğer burada yayınladığım bilgiler ve kodlar işinize yaradı ise bilmek isterim, hatta mümkünse bana proje raporunuzu, sunumunuzu, tezinizi vs. gönderirseniz yaptığınız çalışmaları okumaktan memnun olurum.

Written by vtunali

Aralık 5th, 2010 at 2:48 am

Matlab ile Örnek Bir Konuşma Tanıma Uygulaması – Giriş

9 comments

Konuşma Tanıma alanında proje yapmak isteyen öğrenciler sanıyorum ki sıklıkla benim tezimle ilgili sayfaya ulaşıyorlar ve benden bu konuda yardım istiyorlar. Genellikle de konuyla ilgili yardım istekleri şu şekilde oluyor:

  • Nereden başlayalım?
  • XYZ programlama diliyle yapmayı düşünüyorum, ne dersiniz?
  • Şöyle bir uygulama gerekiyor, yapılabilir mi?
  • Tezinizin Türkçe’si var mı?

Çok fazla zaman ayıramasam da bana ulaşan kimseyi yanıtsız ve yardımsız bırakmamak için en azından görüşlerimi paylaşıp yönlendirici bilgiler vermeye çalışıyorum. Genellikle de isteyen olursa tezimin Matlab kodlarını ve kullandığım Voicebox ve HMM toobox’larını veriyorum. Kodlardan ne kadar yararlanılabildi bu güne kadar pek bilemiyorum ama zaman zaman kodlardan da bir çıkış yolu ya da başlangıç noktası bulamayanlar oluyor. Bu nedenle ben de bu toolbox’ların nasıl kullanılabileceğini, basit bir konuşma tanıma uygulamasının nasıl yapılabileceğini örnek yaparak göstermeye karar verdim. Böylece pek çok kişi için başlangıç aşamasında daha büyük bir yardım sağlamış olurum diye düşünüyorum. Umarım bu, kopyala-yapıştır proje yapma meraklılarını fazla heveslendirmez.

Örnek uygulamayı kısa süre içerisinde hazırlayıp yayınlayacağım ve adım adım anlatacağım. Ancak, bunun öncesinde, özellikle konuşma tanıma alanında proje hazırlamayı düşünen arkadaşlarıma yönelik değinmek istediğim şeyler var.

Bazen lisans bitirme tezi, bazen de bir dersin dönem projesi olarak konuşma tanıma ile ilgili uygulamalar yapmak isteyenleri görüyorum. Şunun bilinmesini isterim ki basit, birkaç sözcük tanıması yeterli olan bir sistemi yapmak nispeten kolay, ama işin kapsamı genişledikçe, uygulamadan beklenen şeylerin çapı arttıkça zor bir yola girilmekte. Bu nedenle bu tür bir projeyi seçmeden önce buna dikkat edilmesini öneririm. Hatta, eğer akademik hayatınızın ileriki dönemlerinde benzer bir alanda çalışmayı düşünmüyorsanız bence yolun başındayken ileride de çalışmak isteyebileceğiniz başka bir konu seçin. Çok ciddiyim.

Matlab, sadece konuşma tanıma alanında değil, çok çeşitli bilim ve mühendislik alanlarında hızlı prototip geliştirme ve çabuk deneme yapma olanağı sağlayan mükemmel bir araç (hiç abartmıyorum). Yüksek lisans tezimi yaparken Matlab kullandım ve bunun çok avantajını gördüm. Sonrasında da pek çok projemde ve çalışmamda sıkça kullandım, halen doktora tezimle ilgili çalışmalarda da yoğun bir biçimde kullanmaktayım. Eğer başka bir dil kullanarak proje yapmanız gerekiyorsa biraz zorlanabilirsiniz, ses sinyali işleme ve örüntü tanıma (pattern recognition) alanında hazır kütüphanelere ihtiyacınız olacak. Eğer bir kısıtlamanız yoksa Matlab’ı tercih etmenizi öneririm. Herhangi bir programlama dilini biliyorsanız, Matlab’da program yazmayı birkaç örnek yaparak işinize yarayacak ölçüde öğrenebilirsiniz.

Konuşma Tanıma ile ilgili çalışacakların en başında şu 2 temel alandan bilgiler edinmeleri çok yararlı olacaktır:

  • Ses Sinyali İşleme: Temel bilgilere sahip olmanız çalışmanız ve araştırmanız sırasında karşılacağınız terimleri, yazıları, örnekleri daha rahat anlamanızı sağlar. Frekans, pencereleme, spektrum vs. bilinmesinde fayda var.
  • Örüntü Tanıma ve Sınıflandırma (Pattern Recognition & Classification): Genellikle Yapay Zeka başlığı altında incelenen bu konuda çok çeşitli yöntemler/algoritmalar geliştirilmiştir. Örneğin, HMM, Yapay Sinir Ağları, vs. Efektif olması ve hazır toolbox’a sahip olduğum için ben HMM kullanmayı tercih ettim. Konuşma Tanıma alanda çalışacakların bu konularda en azından ön bilgi sahibi olması çok yerinde olur.

Son olarak, benim tezim 2005 yılındaydı. O günden bugüne Türkçe veya değil, konuşma tanımayla ilgili pek çok tez yapıldığını tahmin ediyorum. Ben hiç takip etme fırsatı bulamadım ve zaten tamamen başka bir alanda çalışıyorum. YÖK’ün tez tarama sayfalarından mutlaka araştırma yapılmalı ve ilgili tezler incelenmeli. Hatta bu tezlerin sahipleriyle de iletişim kurularak bilgi alınması yararlı olabilir, akıl akıldan üstündür, yeni teknikler geliştirilmiş olabilir. Ayrıca, benim tezimin referanslar bölümünde çok yararlı kitaplar ve tezler yer alıyor, onlara bakılmasını da tavsiye ederim. Bundan 5-6 sene önce kitap bulmak zordu ama şimdi rahatlıkla pek çok kitabı e-book olarak bulabilirsiniz. Bulamadığınız olursa, ben Boğaziçi Üniversitesi’nin kütüphanesinden çok yararlanmıştım, oraya bakabilirsiniz. Tezimin Türkçe hali yok, orijinali İngilizce.

Bu yazdıklarımın Konuşma Tanıma alanında çalışmak isteyenlere az da olsa fikir verebildiğini umarım. Herkese çalışmalarında başarılar dilerim.

Not: Sorusu olan arkadaşlar, burada yorum bırakarak sorarlarsa, yapacağımız diyaloglar sonradan gelecek arkadaşlara da yararlı olabilir.

Written by vtunali

Aralık 3rd, 2010 at 12:29 am

Hangi Programlama Dili Daha Popüler?

leave a comment

Programlama dillerinin dünya çapında popülerliklerini değerlendiren birkaç site var. Bu sitelerde 2010 itibariyle genel duruma grafiklerle bir bakalım.

www.langpop.com

Bu sitede popülerite için çeşitli kaynaklardan veriler derlenmiş. Bu kaynaklardan bazıları şöyle: Yahoo, Craigslist, Powell’s Books, Freshmeat, Google Code, Del.icio.us ve Ohloh. Her bir kaynaktaki popülerite ayrı ayrı görülebileceği gibi, aşağıdaki grafikte tüm kaynaklar eşit ağırlıklı kabul edilerek elde edilmiş genel durum görülmekte. Bu sonuçlara göre Java, C ve C++ oldukça popüler görünüyor. C# ise VB ve Delphi’ye göre epeyce popüler.

Popüler programlama dilleri

www.ohloh.net

Ohloh.net, açık kaynak yazılımlar ve yazılımcılar için bir dizin ve topluluk. Burada istediğiniz programlama dillerini seçerek birbiriyle karşılaştırmasını yapabiliyorsunuz. Aşağıdaki grafikteki değerler, buraya kayıtlı yazılımcılar tarafından “commit”lerin sayısından toplanmış (sitede, güncellenen kod satırı sayısı, proje sayısı vb. çeşitli kriterlere göre de değerlendirme yapılabiliyor ancak en makul yaklaşım “commit”lerin sayısı gibi görünüyor bana da). Bu grafiğe göre son 10 yıldır C++’ın popülerliği düşerken Java’nınki yükseliyor. C#, PHP ve Python’da da yükseliş görülürken, VB’nin çok değişmediği görülüyor.

Popüler programlama dilleri

www.tiobe.com

Tiobe’deki veriler de çeşitli kaynaklardan derlenerek oluşturuluyor. Aşağıdaki grafikte yaklaşık 10 yıllık bir karşılaştırma görülmekte. Bu grafikte öncekilerle paralel sonuçlar içeriyor.

Popüler programlama dilleri

Dünyada durum bu şekilde. Acaba Türkiye’de nasıl? Benzer çalışmaları Türkiye için de yapmak lazım aslında. Ya da en azından yazılım sektöründe çalışanlar arasında belirli periyotlarla anketler yapılsa ve bunlar yayınlansa çok güzel olur. Belki de yapılıyordur, benim haberim olmamıştır. Bu konuda bilgisi olan varsa yorumlarıyla katılırsa çok memnun olurum. Kariyer sitelerindeki ve gazetelerin İK sayfalarındaki iş ilanları, piyasadaki programcılık/yazılımcılık kursları ve kitapları da popülerlik bakımından belli bir fikir verebilir sanıyorum.

Benim kişisel gözlemlerim ve tahminlerim Türkiye’de son yıllarda C# dilinin yaygınlaştığı, Delphi’nin eski popülerliğini .Net desteğine rağmen büyük ölçüde kaybettiği, Java’nın da en popüler diller arasında olduğu yönünde. Siz ne dersiniz?


29.10.2010 tarihli ek: Bu konuyla ilgili şu makale gözüme çarptı 7 programming languages on the rise. Makalede özetle Python, Ruby, MATLAB, JavaScript, R, Erlang, Cobol ve CUDA dillerinin de yükselişte olduğundan bahsediliyor. Diğerleri tamam da Cobol’u bu listede görmek çok ilginç.

Written by vtunali

Ekim 23rd, 2010 at 12:41 pm

Anakartı Kendisinden Pahalı Olan Dizüstü PC: Acer Aspire

2 comments

Acer ekran sorunu2007 sonunda kardeşim için aldığım Acer marka Aspire 5100 serisi dizüstü bilgisayarın ekranı bu yıl içerisinde arada sırada gariplik yapmaya başladı. Sorunsuz kapanan bilgisayar açıldığında bazen sorunlu açılıyordu. Ya da genellikle bir yerden başka yere taşındığında bu durum oluşuyordu. Kapatıp açınca çoğunlukla düzeliyordu. Sorunlu halinin cep telefonu ile çekilmiş fotoğrafı yanda görülmekte. Bazen bu kadar karmaşıkken bazen kısmi olarak sorun oluyor, ama bu haliyle kullanım hiçbir şekilde mümkün olmuyordu. Yazılımsal yani işletim sistemi ve ekran kartı sürücüsü kaynaklı bir sorun değildi çünkü bilgisayarı açar açmaz tam ekran çıkan Acer logosunda da aynı durum rahatlıkla görülebiliyordu.

Çok sık yaşanmadığı ve kardeşimin de bilgisayarda önemli işleri olmadığı için bu sıkıntı bir süre idare edildi. Ancak geçen ay neredeyse 15 gün boyunca hiç düzelme olmadığı için kardeşim bilgisayarı Acer yetkili servisine göstermek üzere kargo ile bana yolladı. Paketi açıp kontrol ettiğimde sorun devam ediyordu. Bilgisayarı eve götürüp harici monitörde nasıl olduğunu denemek için açtığımda ise sorun kalmamıştı, ne olduysa yine normale dönmüştü.

Düzelmesine rağmen bilgisayarı Yenisahra’daki Acer yetkili servisi olan SMS Infocomm isimli firmaya götürdüm, ekranda o sırada sorun olmadığı için durumu ayrıntılı bir biçimde açıkladım. Gerekli testler yapılarak arızanın tespitine çalışılacağı söylendi. Bir hafta kadar sonra telefonla arayan görevli sorunu tespit ettiklerini, LCD ekranda bir sorun olmadığını, anakart üzerinde yer alan VGA chip’inin ve o bölümün arızalanmış olduğunu, çözüm olarak da anakartın değiştirilmesi gerektiğini söyledi. Anakartın yurtdışından geleceğini, bedelinin 840 dolar olacağını, işçilikle birlikte 880 dolar bir maliyeti olacağını söyledi. Bilgisayarın kendisini 3 sene önce bu fiyata almadığımı, yedek parçanın ürünün kendisinden nasıl daha pahalı olacağını sorduğumda fiyatlarının bu şekilde olduğunu, şu anda Türkiye’de olmadığı için yurtdışından getireceklerini, bedelinin de bu olduğunu söyledi. Neden bu sorunu bazen yapıp bazen yapmadığını sorduğumda zamanla daha da kötü olacağı, hiç kullanılamaz hale geleceğini söyledi. Garanti süresi de geçmiş olduğundan tabi ki bu fiyata tamir istemediğimi belirterek 35 TL arıza tespit ücreti ödeyerek bilgisayarı geri aldım.

Açıkçası bir ürünün yedek parçasının ürünün kendisinden bu kadar bariz şekilde pahalı olmasını mantıklı bulmuyorum. Bu şekilde bir tamir bedeli komplo teorileri üretmeme yol açıyor. Aslında gerçekten tespit edemedikleri ve de tamir edemeyecekleri bir sorun olduğu için uçuk bir yedek parça ve tamir bedeli çıkartarak tamir isteğimden otomatikman vazgeçirmek, yeni bir bilgisayar almaya zorunlu bıraktırmak gibi bir politika izlediklerini düşünüyorum. 3 sene boyunca tertemiz kullanılmış, ekrandaki bu sıkıntı dışında son derece sorunsuz çalışan, işlemci-bellek-disk özellikleri bakımından bugün bile iyi durumda olan bir bilgisayarın basit bir arızası için anakart gibi önemli bir parça için bile olsa bugün iyi özelliklere sahip bir dizüstü bilgisayarın bedelinden daha yüksek yedek parça bedeli çıkaran Acer servisinin bu fiyat politikasına anlam veremiyorum.

Bugüne kadar iyi fiyat/performans oranı sebebiyle kendime hem işyerimde hem evimde kullanmak üzere hep Acer aldım, eşe dosta Acer aldırdım, genel olarak da bu markanın bilgisayarlarından son derece memnunum. Şu anda bu yazıyı da 3 senelik Acer Aspire 5610 dizüstü bilgisayarımda yazıyorum. Ama Acer servisinin bilgisayarın tek bir bileşeni için bilgisayarın kendisinden fazla yedek parça bedeli istemesi Acer markasına olan güvenimi sarstı, olumlu düşüncelerimi şimdilik nötr seviyesine indirdi.

Bu konuda bilgisi ve tecrübesi olan var mı? Anakart olunca yedek parça bedeli her zaman bilgisayarın fiyatını geçer mi? Bu işin standardı bu mudur? Acer dışındaki markalarda buna benzer durumlarda istenen bedel bu kadar yüksek midir? Lütfen bilgi ve tecrübelerinizi paylaşır mısınız? Eğer bu işin doğrusu buysa, serviste anakart tek başına her zaman bilgisayardan daha yüksek fiyata sahip oluyorsa ben Acer servisinden bu yazım sebebiyle burada herkesin önünde özür dilemeye ve hatalı düşüncelere kapıldığımı kabul etmeye hazırım.

Umarım bu yazıyı Acer Türkiye’den ya da Acer servislerinden okuyanlar olur.

Bu arada kardeşim şu anda bilgisayarını normal şekilde kullanmaya devam ediyor. Ben de yakın takipteyim. Artık iyice sıkıntı vermeye başlarsa ya tornavidayı alıp bilgisayara ben girişeceğim ya da İstanbul’da sayısı bir hayli fazla olan merdiven altı dizüstü servislerinden birine götüreceğim.


27.01.2012 tarihli güncelleme: Kardeşim bilgisayarını kullanmaya devam ediyor. Söz konusu sorun pek sık yaşanmıyor. Servisin dediği çıkmadı.
27.04.2013 tarihli güncelleme: Kardeşim bilgisayarını kullanmaya devam ediyor. Söz konusu sorun pek sık yaşanmıyor. Servisin dediği hâlâ çıkmadı.

Written by vtunali

Ekim 14th, 2010 at 8:35 am

Posted in Genel

Tagged with , ,