C dilinde "char" veri tipi ve platform bağımlı sorunlar

Bugün ofiste getchar(), putchar() fonksiyonları ile küçük ASCII denemeleri yapıyordum. Bunlara bakarken “char” veri tipi ile de biraz haşır neşir oldum. Beklemediğim bir kaç davranışla da karşılaştım. Aklımdan kalanları kısaca aktarmak istiyorum:

“char” veri tipi, C’nin basit veri tiplerinden sadece biridir. Diğerleri ise sırayla int, float, double ve void. Bu birincil veri tipleri de yine kendi aralarında bazı ön ekler alarak yeni veri tipleri oluşturuyorlar. Örneğin long int, short int, unsigned long int, vs.. gibi. Bu veri tiplerinin her birinin bellekte tuttukları miktar da farklıdır. Aşağıdaki tablo’da örneklerini görebilirsiniz (char ile ilgili kısım yanlış, önü göz ardı edebilirsiniz):

C veri tipleri

Gördüğünüz gibi her veri tipinin büyüklüğü farklı olabiliyor. Ayrıca aldıkları önekler (short ve long) sayesinde bunları küçültüp veya büyütebilirsiniz.

“char” veri tipi ise ailemizin en küçük veri tipi diyebiliriz. Kendisi aslında tıpkı “int” gibidir, yanı tam sayılar için tasarlanmıştır. Bu yüzden tam sayı hesaplamaları için de kullanabiliriz. Fakat C dili ile kod yazarken de C’nin dahili olarak desteklemesi gereken belirli bir karakter kümesi olması gerekiyor. Yoksa dünyada herkes kafasına göre bir karakter seti kullanabilirdi (hiragana, kiril, arapça, türkçe,vs..). Bu yüzden C standardında ASCII karakter seti kullanılınıyor. Her bir karakter de birer tam sayı olarak kaydediliyor. Örneğin “A” harfi ASCII’ye göre “65” sayısına denk geliyor. Hangi harfin hangi sayıya denk geldiğini ASCII tablosundan bakabilirsiniz.

Üç çeşit char veri tipi var, her birinin sahip olabileceği veriler ve isimleri şu şekilde:

  • char –> Bilgisayar platformuna göre signed char veya unsigned char olabiliyor
  • signed char –> [-128, 127]
  • unsigned char –> [0, 256]

Yukarıdaki listeye bakarak iki çeşit “char” veri tipi var diye düşünmeyelim. Her biri kendince anlamı olan veri tipleridir. “char”, “signed char” veya “unsigned char” adında üç çeşit karakter veri tipi var. “signed char” veri tipi ise gömüllü sistemlerde ya da bilimsel kodlarda çok sık kullanılınır, çünkü kendisi en az yer kaplayan ve negatif,pozitif sayılar kümesini içeren tek veri tipidir. Ama genel olarak insanlar her daim “char” veri tipini kullanıyor. Yani şu şekilde bir şey:

char a = 30;

Şimdi bu örnek hiç bir platformda sorun çıkarmayacaktır (ayrıca belirttiğim gibi char tam sayı saklayabilen bir veri tipidir). Çünkü hem “signed char” hem de_ “unsigned char”_ tam sayı aralığına uyuyor. Peki şöyle bir örnek yazdığımızda ne olacak:

char a = 255;

Burada okumayı bırakıp küçük bir deneme yapabilirsiniz. Muhtemelen iki türlü cevap gelecektir. Yukarıda değindiğim gibi “char” veri tipi bilgisayar platformuna göre değişiyor. x86 GNU/Linux ve Microsoft Windows’da “signed char” olabilirken, PowerPC ve ARM processors genellikle** “unsigned char”** olabiliyor. Bu yüzden:

  • “signed char” ise** a = -1 değerini** alacak (neden -1 ? yazının sonunda açıklaması mevcut)
  • “unsigned char” ise a = 255 değerini alacak

Görüldüğü gibi hiç beklemediğiniz sonuçlara yol açabilir sade bir “char” veri tipi. Bunun önüne geçebilmenin yolları var, en mantıklı ve güveniliri en baştan “signed char” veya “unsigned char” veri tiplerini kullanmak. Bunu bir alışkanlık haline getirmek iyi bir davranış olabilir. Başka bir seçenek ise derleyici sisteminin desteklediği parametrelerini kullanarak “char” veri tipini sınırlamak. Örneğin GCC ile derliyorsanız , -fsigned-char ve -funsigned-char parametrelerini kullanarak “char” veri tipinin etki alanını kısıtlayabilirsiniz.

Yazımın başında da değindiğim gibi getchar() ile denemeler yapıyordum. getchar() fonksiyonu veri tipi olarak “char” yerine “int” veri tipi dönderiyor. Yani klavye’den “A” tuşuna bastığınızda size “65” sayısını döndürecek. Peki neden “char” değil de “int”? Genel olarak getchar() fonksiyonu EOF ile birlikte kullanacak şekilde tasarlanmıştır. EOF sayesinde dosyanın sonunu öğrenebilme(end-of-line) ya da getchar() ile veri almayı durdurabiliriz (örneğin CTRL+D tuş kombinasyonu ile EOF yaratabilirsiniz). EOF’un değeri ise “-1” olarak belirlenmiştir. Bunu linux platformlarında /usr/include/stdio.h dosyasını açarak ~112 satır numarasına bakarak görebilirsiniz. Şöyle bir kod parçası vardır:

/* End of file character.
   Some things throughout the library rely on this being -1.  */
#ifndef EOF
# define EOF (-1)
#endif

Genellikle getchar() kullanırken insanlar “char” veri tipi kullandıkları için sorun oluşabiliyor. Aşağıdaki gibi bir kod parçası düşünün:

#include

int main (void)
{
  char a;
  while ((a = getchar()) != EOF)
      printf("%c\n", a);

  return 0;
}

Burada getchar() fonksiyonunun dönüş değeri için “char = a” veri tipi kullanılmıştır. Örneğin GNU/Linux makinede bu kodu derlediniz ve sizin “char” veri tipini “signed char” veri tipine dönüştü. Sonra bu kodu çalıştırdınız ve klavyeden verileri girmeye başladınız. Muhtemelen hiç bir sorunla karşılaşmayacaksınız. Çünkü “signed char” -128’den 127’ye kadar tüm tamsayı değerlerini alacaktır.

Fakat bu kodu ARM mimari bir platformda çalıştırınca “char” veri tipi “unsigned car” veri tipine dönüşecektir. Bu veri tipi de 0 ile 256 arasındaki tamsayı değerleri alıyor. Peki EOF burada hangi değeri alacak? Siz CTRL+D bastığınız an ya da bir dosyanın sonuna geldiğinizde geri dönen “-1” değeri 255’ye dönüşecektir(yazımın sonunda neden böyle olduğunu anlatacağım). Böyle olunca while döngüsü sonsuz bir döngüye girecek ve hiç çıkamayacaksınız. Yukarıda kod parçasında “int” ile tanımlanmış veri tipini “unsigned char” olarak belirtmemiz sorunu düzeltecektir. Düzeltme şu şekilde olacaktır:

#include

int main (void)
{
  unsigned char i;
  while ((i = getchar()) != EOF) 
      printf("%c\n", i);

  return 0;
}

Yukarıdaki kod parçası taşınabilinir ve daha güvenilirdir.

Yazıda sık sık “-1” <=> “255” dönüşümünü görmüşündüzdür. İki tür örnekle karşılaşmıştık:

  • “char a = 255” değerinin “signed char” veri tipinde “-1” dönüşmesi
  • “char a = EOF” değerinin(EOF = -1 ..) değerinin “unsigned char” veri tipinde “255” dönüşmesi

İlk örnek için devam edelim. 255 numarası ondalık sayı sistemi ile ifade edilmiştir. Fakat “unsigned” ve “signed” kavramları ikili sayı sistemine göre tasarlanmıştır. 255 sayısının ikili sayı sistemindeki değeri ise 1111 1111, yani 1 byte (8-bit) yer kaplıyor. Şunu not alın “1111 1111” ikili sayısı “signed char” olarak belirlinmiştir(doğrudan bu şekilde kaydediliyor). Fakat signed ikili sayıları 1 + 7 bit şeklinde belirleniyor. En soldaki ilk bit sayının negatif(1 ise) ya da pozitif(0 ise) olduğunu gösterir, kalan 7 bit ise sayının değerini gösterir. Bu yüzden örneğimiz şu şekilde:

1 111 1111 (negatif bir sayı ve sayımızın ikili değeri 111 1111)

Signed ikili sayıları tekrar ondalık sayısına çevirmek ise basit bir işleme bakıyor. Sayının “2’s complement”ini almak. Bunu da kısaca tüm sayıları tersine çevirip, çevirdikten sonra +1 bir ekliyoruz. Devam etmeden önce kısa bir örnek yapalım:

101 1001

sayısını çevirelim. İlk önce her bir numarayı tersine çeviriyoruz

010 0110

ardından +1 bir ekliyoruz:

010 0111

Kısacası 101 1001 numarasının 2s complement eşleniği 010 0111 oluverdi.

Tekrar örneğimize geri döndüğümüzde, bizim elimizdeki numaranın “111 1111” tersini alıp “000 0000” +1 eklediğimizde “000 0001” sayısını elde edeceğiz. Bunun ondalık sistemindeki değeri de kısaca “1” dir. Fakat unutmayın ki bu sayı negatif bir sayıdır (en soldaki bir negatif olduğunu gösteriyordu). Bu yüzden sayımız “-1” olarak gözüküyor. Yani bizim meşhur “char a = 255” değerinin “signed char” veri tipinde “-1” dönüşmesinin sonucu diyebiliriz.

İkinci örneği siz okurlara bırakıyorum, bu sefer tersten gitmeniz gerekiyor ve elinizdeki sayı unsigned olacağından 255 sayısını elde edeceksiniz.

Hepsi bu kadar. Görüldüğü gibi küçük bir veri tipi dikkat edilmediğinde bir çok soruna aşabiliyor. Bununla ilgili başınızdan geçen senaryolar, sorularınız veya merak ettikleriniz varsa yorum kısmından sorabilirsiniz. Bir çok kaynaktan yararlanmıştım, aşağıdaki bağlantılardan detaylı bir şekilde bakabilirsiniz:

  1. [http://www.network-theory.co.uk/docs/gccintro/gccintro71.html](http://www.network-theory.co.uk/docs/gccintro/gccintro71.html)
  2. http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html
  3. http://www.dreamincode.net/forums/topic/23249-trying-to-understand-signed-char-variable/
  4. http://stackoverflow.com/search?q=signed+char

29 Kasım 2011

Yazsam faydası yok, yazmasam…

Sayın Bakan bazı eleştirileri yanıtlamış;


Okurken aklıma gelenleri yazayım dedim.

"Yasak söz konusu değildir. Tamamen isteğe bağlıdır."

Yıllardır mahkeme kararlarıyla genel sansür uygulanıyor, bunun adı yasak değil mi? Değil, çünkü ortada özgür bir internet olmayınca yasak kelimesinin anlamı kalmıyor. Üstelik "Bedelli askerlik" aslında "Bedelli tezkere", yani askerlik=tezkere olabildiğine göre yasak=özgürlük de olabilir, tabi tabi neden olmasın?

"...biz mahkeme kararını tanımıyoruz, internete yasak gelir mi?' diye duyarsız kalıp, mahkeme kararını uygulamayacak mıydık? Biraz insaf lazım."

Bu mahkemeler keyfi değil ilgili kanuna göre karar veriyor, bu kanunları da leylekler getirmedi ki? Kanunları çıkartıp sonra "ne yapalım mahkeme kararı" demek... biraz insaf.

''Biz ne yapacaktık; 'ey Youtube, sen istediğin gibi Atatürk'e hakaret et,... ama sonunda biz Youtube'u dize getirdik."

Malum ülkelerden birinde 17 yaşındaki bir çocuk lise arkadaşlarına hava atmak için bir video hazırlayıp paylaşıyor ve paylaştığı sitenin 70 milyona yasaklandığını öğreniyor. Bu eğlenceyi görenler acaba Türkiye'de şu siteyi de yasaklatabilir miyim diye yarışa girmeye başlıyor. X Ülkesindeki birisi suç işliyor, cezası 70 milyon insana kesiliyor, pardon dize getiriliyor.

"'Milyonlar kazanıyorsunuz, beş kuruş vermiyorsunuz, bunu yapmaya hakkınız yok, temsilciliğiniz yok' dedim"
 
Dedi ve masum vatandaşlarına zincir vurdu, kendimi rehine gibi hissetmiştim. Hadi rehine olmayı kabul ettik diyelim, Youtube, kendisi gibi yüzlerce site ile birlikte uzun yıllardır aynı şekilde çalışıyordu, beş kuruş vermedikleri hakaret videoları yayınlanınca mı akıllara geldi, bu zaafiyetin vergi kaybının hesabı kime sorulacak? Ve neden sadece Yutub'un 5 kuruşu hesap ediliyor? Ayrıca TC'de iş yapan şirket ve şahısların yurt dışındaki hosting firmalarına ödedikleri kuruşlar nasıl vergileniyor?  Youtube hakaret dolu yorumlarla dolu, onlar ne olacak?  Bu işte başka hesaplar mı var? 

Neyse, fazla kafa yorarsam sıyıracağım. Görünüşe göre TC Devleti birilerini dize getirmek için vatandaşlarını rehine olarak kullanmaya devam edecek.


Ayrıca bir zamanlar güvenli bilgisayar ve internet kullanımı için Pardus kullanılabileceği de yazılan http://guvenliinternet.org/ sitesi artık Microsoft'a emanet edilmiş durumda, reklamlar gırla gidiyor.

23 Kasım 2011

Posted In: internet, lkd_gezegen, öi_gezegen, Özgürlük için

Pardus Kurumsal – Bilişim Teknolojileri Sınıf Yönetimi (italc)

Çok başarılı ve açık kaynak kodlu bir BT sınıf yönetim programı olan italc programının Pardus ile öğrenci ve öğretmen bilgisayarlarına nasıl kurulacağı anlatmaya çalışacağım.
Daha önceki yazımda da bahsettiğim gibi anlatımlarımı konsol aracılığı ile yapıyorum. Aslında terminal Penceresine alışmanın Linux dünyasına alışmak için önemli olduğunu düşünüyorum.
Öncelikle öğretmen bilgisayarından kuruluma başlıyoruz.
Programın kurulumu için

sudo pisi it italc-client

yazıyoruz. bize libitalc ile bağımlılık olduğunu onuda kurmak isteyip istemediğimizi soruyor evet diyerek devam ediyoruz.
daha sonra öğretmen bilgisayarı için gerekli olan yönetim panelini kuruyoruz.

sudo pisi it italc-master

ardından Bilişim Teknolojileri Sınıfında Yönetici olan kullanıcılar için bir grup açarak kullanıcıları gruba ekliyoruz.

ogretmen adında bir grup açıyoruz

sudo groupadd ogretmen

ardından murat isimli kullanıcıyı ogretmen grubuna ekliyoruz.

sudo gpasswd -a murat ogretmen

bu işlemleri sistem menüsü altında Kullanıcı Yöneticisi yardımı ile de yapabilirsiniz.
Sonra,

sudo ica -createkeypair

komutu ile key dosyalarını oluşturuyoruz.
oluşan bu dosyaların izinlerini düzenlememiz gerekiyor.
gerekli izinleri aşağıdaki komutlar ile hallediyoruz.

sudo chgrp -R ogretmen /etc/italc/keys/private/
sudo chmod -R 750 /etc/italc/keys/private/

evet şimdi bu dosyaları usb belleğimize kopyalayalım.
benim usb belleğimin ismi “pardus” aşağıdaki kod üzerinde sizde kendi belleğinizin ismi ile yapmanız gerekmektedir. TAB tuşu yardımı ile otomatik tamamlama özelliğini kullanabilirsiniz.

sudo cp -r /etc/italc/keys /media/pardus/

Evet sıra geldi öğrenci bilgisayarına
Programı kuruyoruz. Gene bize libitalc ile bağımlılık olduğunu onuda kurmak isteyip istemediğimizi soruyor evet diyerek devam ediyoruz.

sudo pisi it italc-client

ardından ogrenci adında bir grup oluşturuyoruz

sudo groupadd ogrenci

sonra selcuk isimli kullanıcıyı ogrenci grubuna ekliyoruz

sudo gpasswd -a selcuk ogrenci

sonra USB belleğimizi takıp key dosyalarını kopyalıyoruz.

sudo cp -r /media/pardus/keys /etc/italc/

kopyalama işlemi sonrasında gene gerekli izinleri ayarlıyoruz

sudo chgrp -R ogrenci /etc/italc/keys/private/
sudo chmod -R 750 /etc/italc/keys/private/

ardından öğrenci bilgisayarında italc istemci programını çalıştırıyoruz.
italc istemci programını Program menüsü Internet başlığı altında bulabilirsiniz.

Artık Öğretmen bilgisayarından Yönetim Paneli ile öncelikle bir sınıf tanımladıktan sonra bütün öğrenci bilgisayarlarını ip adresleri ile tanımlıyoruz.

Özgür Bilişim Teknoloji Sınıflarının çoğalması dileğiyle…..

Kaynaklar:
http://www.ozgurlukicin.com/paket/italc/
http://tr.pardus-wiki.org/%C4%B0TALC
http://www.ozgurlukicin.com/forum/paketler/7686/?page=2#post136867

23 Kasım 2011

Posted In: açık kaynak kodlu sınıf yönetimi, alternatif sınıf yönetimi, Bilişim Teknolojileri Sınıfı Yönetimi, BT Sınıfı Yönetimi, italc, italc öğrenci ve öğretmen bilgisayarı kurulumu, linux, pardus, Pardus Kurumsal üzerine italc kurulumu

Pardus Kurumsal 2 – Squid Kurulumu (Web Proxy)(Vekil Sunucu)

Pardus deposundan paket yöneticisi ile Squid kurulumu yaptığımızda temel ayarları yapılmış olarak kuruluyor. Bu kurulumun ardından 3-4 temel ayar ile Proxy Sunucumuz hazır hale gelecek.
Ben tek bir ethernet kartı ile Proxy Sunucu kullanılması için gereken ayarları anlatacağım.
Proxy Sunucu için sabit ip adresi tanımlıyorum. 192.168.2.200 (Adsl Modem ip si 192.168.2.1 dolayısıyla Proxy Sunucu varsayılan ağ geçidini 192.168.2.1 olarak ayarladım.)

Kurulum anlatımlarını terminal penceresi üzerinden anlatacağım, konsol kullanımı başlangıçta zor gibi gözükse de aslında daha kolay kullanım ve adımları takip edebilme olanağı sağlıyor. Aklıma gelmişken konsol kullanırken TAB tuşu ile klasör, dosya ve komutlarda otomatik tamamlama özelliği büyük kolaylık sağlıyor.

Sabit ip ayarından sonra programın kurulumuna geçiyoruz. Squid programını Paket Yönetici (PİSİ) yardımıyla da kurabilirsiniz.
Kurulum için Terminal Penceresinde

sudo pisi it squid

yazıyoruz. Ardından, squid.conf dosyasında yapılması gereken düzenlemeler için,

kdesu kwrite /etc/squid/squid.conf

yazıyoruz ve aşağıdaki düzenlemeleri yapıyoruz.
dediğim gibi paketi hazırlayan arkadaşlar temel ayarlar ile hazırladıkları için,
sadece 1-2 değişiklik yeterli oluyor.

aşağıdaki satırlarda ip adreslerini kendi ip adreslerime göre yapıyorum.

acl allowed_hosts src 192.168.2.0/24
acl localnet src 192.168.2.0/24

aşağıdaki kod, Proxy’nin kullanacağı Ram Miktarını belirliyor.

cache_mem 200 MB

aşağıdaki kod ile depolanacak önbellek klasörünün dosya boyutu sınırını belirliyoruz.
standart kod 100mb olarak belirlenmiş,

cache_dir ufs /var/cache/squid 100 16 256

ben okulda kullanacağım ve eğitim sitelerindeki animasyon dosyalarının önbelleklenmesini istediğim için ve aynı zamanda yer problemi olmadığı için dosya boyutunu 20gb olarak belirliyorum.

cache_dir ufs /var/cache/squid 20000 16 256

Şimdilik temel Proxy işlevi için yapacağımız ayarlar bu kadar. squid.conf dosyası bir derya deniz, performans için bir dolu ayar gerekiyor benim yaptığım ayarlar ile ne kadar performanslı olacak bilmiyorum. Bu konu, üzerine araştırma gerektiren başka bir yazı konusu olabilir.

Dosyayı kaydedip kapattıktan sonra çok sevdiğimiz konsola geri dönüyoruz.

Aşağıdaki komutlar ile Squid servisini durdurup yeniden başlatıyoruz.

sudo service squid stop
sudo service squid start

aslında restart komutu da var fakat bende sağlıklı çalışmadı nedeni nedir bilmiyorum, servis durduktan sonra çalışmıyor.
Bu ayarları dilerseniz sistem menüsü altından Servis Yöneticisi ile de yapabilirsiniz.
Aşağıdaki komut ile servisin durumu hakkında bilgi alabiliyoruz.

sudo service squid status

son olarak

sudo service squid on

komutu ile servisin sistem her açıldığında otomatik olarak çalışmasını sağlıyoruz.

Evet artık vekil Sunucu çalışmaya başladı Tarayıcınızın ağ ayarlarından vekil sunucu bölümünden sunucu ip adresini ve portunu girebilirsiniz. Bizim örneğimizde Sunucu ip no: 192.168.2.200 ve port 3128

(Transparent Proxy) Eğer vekil sunucu herhangi bir ayar yapmadan sadece varsayılan ağ geçidi ayarlarını sunucu adresi olarak tanımladıktan sonra otomatik olarak çalışsın isteniyorsa port yönlendirmesi yapılması gerekir.
Bunun için aşağıdaki komutu uygulayarak 3128 nolu portu 80. porta yönlendiriyoruz.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

düzeltme: dikkat edin kopyala yapıştır sırasında –to-port ve –dport parametrelerinden önce iki tire “–” var.
“sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128”
Sonrasında “sudo iptables-save” komutunu uygulamak gerekiyor.
Kullandığım squid.conf dosyasının tamamı

# Transparent Squid proxy configuration for Pardus Linux

http_port 3128 transparent

visible_hostname localhost

pid_filename /var/run/squid.pid

icp_port 0

cache_mem 200 MB

cache_dir ufs /var/cache/squid 20000 16 256
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
coredump_dir /var/cache/squid

acl allowed_hosts src 192.168.2.0/24
acl localhost src 127.0.0.1
acl localnet src 192.168.2.0/24
acl SSL_ports port 443
acl purge method PURGE
acl CONNECT method CONNECT

acl manager proto cache_object
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow allowed_hosts
http_access allow manager localhost
http_access deny manager

http_access allow purge localhost
http_access deny purge

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access allow allowed_hosts
http_access deny all

icp_access allow allowed_hosts
icp_access deny all

miss_access allow allowed_hosts
miss_access deny all

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

acl apache rep_header Server ^Apache

error_directory /etc/squid/errors

23 Kasım 2011

Posted In: linux, pardus, Pardus kurumsal squid kurulumu, Pardus Proxy Sunucu, pardus squid kurulumu, Pardus vekil sunucu, Pardus Web Proxy, squid, squid.conf, Sunucu Sistemleri, transparan proxy, Transparent Proxy, vekil sunucu, web proxy

Özgür Yerelleştirme Kataloğu – Lictionary.in

Çeşitli özgür yazılımların yerelleştirme çalışmalarına dahil olduğum günden beri yerelleştirme sözlüğü ihtiyacı hep dikkatimi çekiyordu. Bazı projeler için proje özelinde yapılmış çalışmalar olsa da (eski kde sözlüğü vb.) bunlar içerik olarak çok sınırlı kalıyor hem de özgür yazılımlar arası ortaklığı sağlayamıyordu. Bu da elimizdeki büyük bilgi birikiminden edinilebilecek gücü kaçırdığımızı hissettiriyordu.

Birkaç ay önce yine bir uygulama çevirisi yaparken bazı terimlerin yaygın olarak nasıl kullanıldığını araştırmamız gerekti. Google üzerinden çeşitli taklalar atarak sonuçlara ulaşabilsek de bir sürü çöp veri arasından ihtiyacımız olan satırları cımbızlamamız gerekiyordu. Bir noktada canımıza tak etti, araştırma ve cımbızlama işlerini bilgisayara yaptırmaya niyetlendik.

Kısa süreli bir araştırma ve planlama sonrası işe koyulduk. Süreç içerisinde altyapıyı esnek ve geniş tutarak tüm özgür yazılım projelerinden verilerin tutulabileceği, sadece Türkçe için değil, özgür yazılımların çevrildiği tüm dilleri içeren geniş çaplı bir sistem oluşturmaya karar verdik.

Ve bir süre sonra Lictionary.in projesinin ilk sürümü ortaya çıktı. İlk sürümle birlikte 121 farklı dilde 60 bin benzersiz dizgeye ait yaklaşık 2.5 milyon satır çeviriden oluşan veritabanımızı kullanıma sunduk. Elbette bunun özgür yazılımların potansiyelinin sadece küçük bir kısm olduğunu farkındayız. Bu yüzden veritabanımızı an be an büyütüp yeni dizgeler, çeviriler ve diller ile zenginleştirmeye devam ediyoruz.

İlk sürüm sonrası projemizi destekleyen çok güzel geri dönüşler aldık. Ayrıca projemizi henüz duyurmuşken bizi mutlu eden gönüllü istekleri gelmeye başladı. Bu isteklerin de yönlendirmesi ile uluslararasılaştırma çalışmalarına öncelik vererek sayfamızı adına yakışır şekilde 4 farklı dilde kullanılabilir hale getirdik.

Lictionary.in özgür yazılımlardan aldığı gücü özgür yazılımlar için “özgür” olarak sunuyor. Şu an hazırlanmakta olan Lictionary.in API sayesinde birçok noktada Lictionary.in ile karşılaşıyor, işimizi kolaylaştıracak özgür yazılımlar hazırlayabiliyor olacağız. Ayrıca terimlerin çevirileri konusunda projeler arası uyumu sağlamak için oluşturmakta olduğumuz tavsiye/tartışma platformunun da bu konularda yaşanan sorunlara bir çözüm yolu olabileceğini düşünüyoruz.

Tüm özgür yazılımlarda olduğu gibi Lictionary.in için de kullanıcılardan gelecek eleştiriler bizim velinimetimiz. Lütfen olumlu/olumsuz eleştirilerinizi bizimle paylaşmaktan çekinmeyin.

19 Kasım 2011

Posted In: çeviri veritabanı, Gezegen, Lictionary, Özgür yazılım, sözlük, TS Design, yerelleştirme, Yerelleştirme kataloğu

İstanbul’da Bilgisayar Mühendisliği Çalıştayı, 19 Kasım 2011’de

Türkiye’de mühendislerin mesleki örgütlenmeleri meslek odalarıyla yürüyor. Bu odaların çatı örgütü olan Türk Mühendis ve Mimar Odaları Birliği’ne(TMMOB) bağlı 23 tane meslek odası bulunuyor. Bunlardan iç mimarların, mimarların, peyzaj mimarlarının ve şehir plancılarının odalarını çıkarırsak; 19 farklı mühendislik dalının kendi adıyla odası bulunuyor. Kendi meslek dallarının adıyla odaları bulunmayan mühendisler ise çalışma alanı yakın olan bir mühendislik dalının odasına üye olmak durumundalar. Örneğin endüstri mühendisleri Makina Mühendisleri Odası’na, bilgisayar mühendisleri de Elektrik Mühendisleri Odası’na üye olabiliyorlar.

Geçmişte, çeşitli dönemlerde artan çalışmalarla bazı bilgisayar mühendisleri bir “Bilgisayar Mühendisleri Odası” kurabilmek için çaba gösterdiyseler de, bu çabalar başarıya ulaşamadı. Bunlar yakından tanık olduğum süreçler değil tabii. Ancak son üçüne katıldığım(2009-2010-2011(hani Richard Stallman da oradaydı)) ve sonuncusunu Yeditepe Üniversitesi’nde düzenlediğimiz(8 ay geçti hâlâ bir blog yazısı yazamadım bununla ilgili) Bilgisayar Mühendisleri Öğrencileri Kongresi’nde(BİLMÖK) de konu sıkça gündeme geldiği için biraz aşinayım. Önümüzdeki BİLMÖK’te ise belki de yepyeni gelişmeler konuşulabilir.

Elektrik Mühendisleri Odası’nda(EMO) örgütlenen bilgisayar mühendisleri, çalışmalarını Bilgisayar Mühendisliği Meslek Dalı Komisyonu(BM-MDK) adındaki komisyonlarla yürütüyorlar. EMO Ankara Şubesi’ndeki BM-MDK, 15 Ekim 2011’de bir “Bilgisayar Mühendisliği Çalıştayı” düzenlemişti[1]. Aynı gün Yeditepe Üniversitesi’nde düzenlediğimiz Özgür Web Teknolojileri Günleri[2] sebebiyle Ankara’daki çalıştaya katılamamıştım. Bu kez EMO İstanbul Şubesi’ndeki komisyon, aynı isimle İstanbul’da bir çalıştay düzenliyor. 19 Kasım 2011 Cumartesi günü İTÜ Süleyman Demirel Kültür Merkezi’nde gerçekleşecek çalıştayda da, kurulması amaçlanan “Bilgisayar Mühendisleri Odası” esas konu olacak gibi görünüyor.

19 Kasım 2011 Bilgisayar Mühendisliği Çalıştayı afişi

Bu çalıştaylar için hazırlanmış olan “Bilgisayar Mühendisleri Odası Kuruluş Raporu”nu[3] birkaç hafta önce okuma şansı bulmuştum. Raporda, kaba bir özetle, Bilgisayar Mühendisleri Odası’nın neden kurulması gerektiği, kurulması planlanan odanın ne gibi görevler/sorumluluklar üstlenmesi ve hangi ilkeleri benimsemesi gerektiği gibi konular ele alınmış. Bu konuların çalıştayda da tartışılacağını tahmin ediyorum.

İlgili raporda gözlerimin ilk aradığı şey “özgür yazılım” sözcükleri oldu tabii. Beklentim boşa çıkmadı, özgür yazılımlara önem verilmesine dair ifadeler geçiyor. Ancak bu ifadelerin yeterli olduğunu düşünmüyorum. 30 sayfalık raporda “özgür yazılım” ifadesinin sadece 2 kez geçiyor olması bu düşüncemi destekliyor sanırım. Ülkenin bilişim politikalarında söz sahibi olma amacı olan bir meslek odası özgür yazılımlar konusunda daha çok söz söylemeli ve daha benimseyici olmalı. Hem diğer konulardaki tartışmaları takip edebilmek, hem de bu konuda birkaç söz söyleyebilmek için bu çalıştaya katılmak mantıklı görünüyor. Ne de olsa tüm bilgisayar mühendisleri ve bilgisayar mühendisliği öğrencileri davetli[4].

adil

[1] http://www.emo.org.tr/genel/bizden_detay.php?kod=87254&tipi=2&sube=14

[2] http://www.ozgurwebgunleri.org.tr/2011/

[3] http://bmo.org.tr/2011/11/11/bilgisayar-muhendisleri-odasi-kurulus-raporu-yayinlandi/

[4] http://bmo.org.tr/2011/11/11/istanbulda-bilgisayar-muhendisligi-calistayi/


18 Kasım 2011

Posted In: bilgisayar mühendisleri odası, bilgisayar mühendisliği çalıştayı, bilmök, bmo, emo, etkinlik, lkd-gezegen, Özgür yazılım

(Hala kullanılmakta olan) Silinen dosyaları kurtarma

Kullandığımız uygulamalar çalışırken okudukları/yazdıkları dosyaları (ya da uygulamaya göre dosyanın bir kısmını) bellekte tutarlar. Linux üzerinde birçok kez karşılaştığım bir güzellik olarak, siz kullanılan dosyayı sistemden silseniz bile uygulama bellekteki kopya ile çalışmaya devam eder. Bu duruma güzel bir örnek olarak çalışan bir uygulamayı sistemden silebilmeniz ve siz uygulamayı kapatana kadar uygulamanın sorunsuz çalışması gösterilebilir. (Tabi daha önce kullanılmamış ve sistemden silinmiş bir dosyaya ihtiyaç duymazsa.)

Bu özelliği yanlışlıkla sildiğimiz dosyaları kurtarmak için de kullanabiliriz. Örnek üzerinden gitmek gerekirse, firefox ile bir dosyayı upload etmekte olduğumuzu ve işlem bitmeden dosyayı yanlışlıkla sildiğimizi düşünelim.

Bu durumda dosyayı kurtarmak için önce firefox’un pid numarasını öğreniyoruz.

~$ pidof firefox
7945

Ardından firefox’un kullandığı dosyaların listesinden silinen dosyaları buluyoruz.

~$ lsof -p 7945 | grep deleted
firefox 7945 username    2w   REG        8,6   153447  1531906 /home/username/.xsession-errors (deleted)

Aradığımız dosyanın satırında dördüncü sütunda (FD sütununda) yazan değeri not ediyoruz. (Örnek satırdaki 2w değeri)

Son olarak elimizdeki iki bilgiyi kullanarak /proc dizini altında pid numarası ile oluşturulmuş dizin içindeki fd dizininden dosyamızı geri kopyalıyoruz. lsof çıktısındaki değer fd dizini içinde hangi dosyayı kopyalamamız gerektiğini gösteriyor. Aşağıdaki komutla dosyamızı sisteme geri kopyalıyoruz. Dosya adını orijinali ile aynı ya da farklı seçebilirsiniz.

~$ cp /proc/7945/fd/2 /home/username/kurtarilan_dosya

16 Kasım 2011

Posted In: Gezegen, sistem yönetimi

Google hesabı olmayanlar google gruplarına nasıl katılacak?

Bir google e-posta grubuna katılmak istediğinizde grup sayfasındaki "Bu gruba katıl" bağlantısını tıklıyorsunuz ve oturum açmadıysanız google oturumu açmanızı isteyen bir sayfa ile karşılaşıyorsunuz. 

Ya Google hesabınız yoksa? Sayfada ne [grupadı]+subscribe@googlegroups.com adresine bir e-posta gönderebileceğinize dair ne de başka bir bilgi yok. Google hesabınız yoksa üye olamazmışsınız gibi bir intiba uyandırıyor Google.

Eğer bir grup yöneticisiyseniz ve bu durumdaki kullanıcılar için bir kolaylık istiyorsanız grup ayarlarından ulaşabileceğiniz ve e-posta kayıt formu bulunan tanıtım kutusu HTML kodunu web sayfanızda yayınlayabilirsiniz.

Ya bir web sayfanız yoksa? veya web CMS sistemi, forum sayfası gibi siteler HTML  kodlarındaki form alanlarını temizleyerek kaydediyorsa (ki benim başıma gelen durum budur)!

Bu durumda grup URL'sinin sonuna /boxsubscribe ekleyip bu bağlantıyı paylaşabilirsiniz. Sayfada ilk bakışta kullanıcıyı şaşırtan bir cümle bulunsa da Google hesabı olmayanlar için de eli yüzü düzgün bir form sağlamış olacaksınız.

(Örn: http://groups.google.com/group/antalya_linux/boxsubscribe)

Ancak bu bağlantıyı grup sayfasına eklemenin bir yolunu bulamadım.

15 Kasım 2011

Posted In: internet, lkd_gezegen

Pardus Kurumsal 2’de Psi Sorunu

Uzun süre Jabber istemcisi olarak Kopete’yi kullandım. Ancak birkaç ay önce Kopete’yle bir sıkıntı[1] yaşayınca alternatif bir istemci aramaya başladım. Tavsiyeler üzerine Psi uygulamasını[2] kurdum Kurumsal 2 deposundan.

Her şey çok güzel olacak zannederken, Psi ile de ilişkimiz sorunlu başladı: Jabber sunucusuna bağlanabiliyordum, ancak listemdeki çevrimiçi bir arkadaşıma bir şeyler yazmak istediğimde, konuşma penceresini açıp ilk karaktere bastığım anda uygulama kendiliğinden kapanıyordu. Uzun süre çeşitli ayarları kurcaladım, fakat bir türlü aşamadım bu sıkıntıyı.

Yeni bir istemci arayışına girmiştim ki, Doruk Fişek yardımıma koştu. Hatanın sebebi, uygulamada “Check spelling” özelliğinin açık olmasıymış. “Options -> Misc.” sekmesinde “Check spelling” seçeneğinin önündeki işareti kaldırınca sonunda yeni Jabber istemcimi kullanmaya başlayabildim.

Pardus’un hata takip sisteminde bunun için bir hata kaydı[3] açtım, lakin hatayla ilgilenen Serdar Dalgıç hatayı tekrarlayamadığı için henüz çözülemedi sıkıntı. Ben de onun hatayı tekrarlayamamasından dolayı sorunun benim sistemimden kaynaklı olabileceğini düşünüp bu yazıyı yazmayı ertelemiştim. Fakat Kurumsal 2 kullanan birkaç arkadaşım daha aynı sorunu yaşayınca, hiç değilse hata çözülene kadar birilerinin işine yarayabileceğini düşünerek buraya çözümü yazıyorum.

adil

[1] http://bugs.pardus.org.tr/show_bug.cgi?id=19167

[2] http://psi-im.org/

[3] http://bugs.pardus.org.tr/show_bug.cgi?id=19063


14 Kasım 2011

Posted In: Jabber, Kopete, lkd-gezegen, Özgür yazılım, Pardus Kurumsal, Psi

Linux Toplu Resim Boyutlandırma

Amerikalılar bu konuya Batch Image Resize da diyorlar. :) Eğer habire facebookta orda burda fotoğraf paylaşıyorsanız ama internetiniz yavaşsa (ki eminim öyledir) daha ufak boyutlarda upload etmek mantıklıdır. Bunun için windows kullanıcısı iseniz ben sizle konuşmuyorum :D haha! ama linux kullanıcısı iseniz kim bilir belki pardus kullanıyorsunuzdur.

O zaman imagemagic konsol uygulaması tam size göre diyebilirim. Kullandığınız dağıtıma göre apt-get install imagemagic , pisi it imagemagic veya paket yöneticinizden seçip kurduktan sonra ister komut satırından
mkdir kucukresimlerim
cp resimlerim/* /home/username/kucukresimlerim/ 
komutu ile isterseniz de Dosya Yöneticinizle

yeni bir dizin oluşturup resimlerinizi bunun içine kopyalayın ve ardından

cd /home/username/kucukresimlerim diyoruz ki o dizine gidelim
akabinde  mogrify -resize 640 *.jpg diyoruz ki bu dizindeki bütün jpg uzantılılar genişlikleri 640px olacak şekilde en boy oranı korunarak ufaltılmış oluyor.

Ne dersiniz hoş dimi ?




9 Kasım 2011

Posted In: linux, pardus, Program Tanıtımı, ubuntu

Twitter Auto Publish Powered By : XYZScripts.com