Mustafa AKGÜL - Tilkinin Dilinden

Transkript

Mustafa AKGÜL - Tilkinin Dilinden
.
Özgürlü-gün Sınırlarını Sen Belirle !
Mustafa AKGÜL
ile
Özgür Yazılım
ve
İnternet Yasakları üzerine..
Linux Dünyasından Haberler
Mustafa AKGÜL ile Linux ve İnternet Yasakları Üzerine... (Söyleşi)
Shotwell
/Yiğit ATEŞ
BAOBAB
/Alev ERZURUMLU
Dkopp
/Alev ERZURUMLU
Alien
/Alev ERZURUMLU
Blender
/Mehmet ERİBOL
C ile Programlama II
/Aybars ÇAPAN
YIL :
2
SAYI: 23
TARİH: 19 AĞUSTOS 2010
Sahibi:
UBUNTU TÜRKİYE
Dergi Tayfası / Yazarlar:
Semetey COŞKUN
Alev ERZURUMLU
Ufuk KILIÇASLAN
Aybars ÇAPAN
Tasarım:
SQL II
/Semetey COŞKUN
Heron
/Aybars ÇAPAN
Elif SUNGUR
Ömer YATĞIN
Ufuk KILIÇASLAN
Mehmet ERİBOL
Ramazan GÜRBÜZ
Ayın Masaüstü Yarışması
SUDO Dergisi,
GNU/GPL lisansı ile dağıtılmaktadır.
Kare Bulmaca
Ayın İp Uçları
/Semetey COŞKUN
Kapak Fotoğrafı Tansu AKMASOY'a aittir. Katkıları için Teşekkür ederiz...
Not: SUDO İçeriğindeki firma isimleri, logo ve amblemleri özel lisanslara sahip olabilirler.
SUDO Dergi Tasarımında
Tamamen Özgür Yazılımlar Kullanılmaktadır.
web: http://sudo.ubuntu-tr.org
e-posta: [email protected]
Mısır mitolojisinde bir tanrı vardır, adı
Thoth. Bu tanrı bu sayımızda da konu
edindiğimiz 8.04 Hardy Heron sürümündeki
balıkçıla
görsel
olarak
oldukça
benzemektedir. Thoth; bilgelik, zaman, akıl ve
yazının (hiyerolgif) da temsilcisidir. Zaten çoğu
kez elinde bir dolma kalem ile parirüslere
kayıtlar yazarken resmedilmiştir. Tanrı Thoth,
Yunan mitolojisindeki Hermes ile özdeş tutulur.
Hızlı bir geçiş yaptık ama sonunda asıl
varacağımız noktaya vardık, Hermes'e!
Hermes'in anlatıldığı papirüslerden
birisinde görüntülerin ve eylemlerin aslında
birer hayal oldukları, özel ses ve sözcüklerle
yenilerinin
yaratılabileceği
yazılıdır.
Bu
sözcüklerle her tür görüntü yaratılabilmektedir.
Sanki belli "password" lerle çalışan holografik
bir makineden söz edilmektedir. Bu makine ne
olabilir sizce?
Hermetik felsefeden ufak bir alıntıyla
bitirelim:
"Ölümsüz İnsan hermafroditti,
kadın veya erkekti,
ölümsüz gözleyiciydi,
ne uyuyordu, ne de uyumuyordu. Gizem doğada saklıydı,
sonra o, Gök Adam´la evlendi,
yedi adam ortaya çıktı;
hepsi biseksüel, erkek ve kadındı, herbirisi doğanın ve
gezegenlerin yedi gücüne sahipti. Hermes, yedi ırk,
tür ve çarktı,
insanın da içinde bulunduğu
tüm yaşayan
yaratıklar çift cinsiyetliydiler.
Sonra onları ayırdı,
erkekler kendileri,
kadınlar kendileri oldular.
Çünkü "Neden" böyleydi.
Sonra Tanrı kutsal sözü söyledi,
ruh herşeyin içine girdi.
Arttılar, durmadan çoğaldılar,
Onlar serbest bırakıldılar,
Amaç kendilerinin ölümsüz
olduklarını bilmekti.
Çünkü ölümün nedeni
bedeni sevmekti.
Herşeyi öğrenmelerine
izin verildi.
Kendisini tanıdığında
İyi´nin olduğu yere girebilecek.
http://www.lahuti.com/forum/hermetizm-ve-thoth-kitabi-24397.html
Broadcom,
Duyurdu!
Açık
Kaynak
802.11N
Sürücüsünü
Broadcom ASCI (Uygulamaya Özel Tümleşik Devre) devreleri
günümüz kablosuz ağ adaptörlerinde yoğun olarak kullanılmasına
rağmen, donanım sağlayıcısının bu yonga setleri için hiçbir açık
kaynak Linux sürücüsü veya yönergesi yayımlamaması nedeniyle
Broadcom kablosuz ağ adaptörleri Linux kullanıcıları arasında uzun
süredir kötü bir şöhrete sahipti. 802.11 adaptörlerini çalıştırabilmek
için gerekli Linux sürücülerini ortaya çıkarmak ve arşivden çıkarılmış
Windows aygıt yazılımının kullanılmasını sağlayabilmek için uzun
süredir bcm43xx ve b43 gibi topluluk projeleri vardı, fakat
Broadcom’dan radikal bir hamle geldi ve yeni 802.11n yonga setleri
için tamamen açık kaynak bir Linux sürücüsü yayımlandı!
Broadcom tarafından geliştirilen bu açık kaynak sürücü, Linux
çekirdeği ile doğal destek verilen mac80211 çatısını kullanıyor;
BCM4313, BCM43224 ve BCM43225 yonga setlerini destekliyor ve
gelecekte
daha
fazla
sayıda
Broadcom
yonga
setinin
desteklenebilmesi için bir donanım çatısı içeriyor.
Bu yeni sürücü, bcrm80211 olarak adlandırıldı ve henüz
kullanım için hazır olmayan sürücüleri içeren kararsız Linux çekirdeği
yayımından şu anda indirebilir durumda. Bu Broadcom 802.11n
Linux sürücüsünün çekirdek ile gelecek sürücülere karar verilecek
sonraki dönemde Linux 2.6.37 çekirdeği ile gömülü olarak
geleceğini umut ediyoruz.
Haberler heyecan verici olmasına rağmen, sürücü henüz tam
olarak hazır değil ve şu anda 40MHz kanalları, güç tasarrufu, AP
(Erişim Noktası), IBSS (Bağımsız Temel Servis Seti), donanım tabanlı
şifreleme, LED (ışık) ve RFKILL (Kablosuz aygıtları etkinleştirmek veya
etkisizleştirmek için kullanılan bir araç) bileşenlerini desteklemiyor.
Broadcam, açık kaynak camiasını sonunda dikkate almaya başladı
ve bu özelliklerin ve diğer hata düzeltmelerinin de gelmesi
bekleniyor. Yeni sürücü
http://git.kernel.org/?p=linux/kernel/git/gregkh/staging-next2.6.git;a=commit;h=a9533e7ea3c410fed2f4cd8b3e1e213e48529b75
bağlantısındaki git inşası aracılığıyla kararsız yayıma dâhil edildi.
Broadcom sürücüleri ile ilgili daha fazla bilgiyi
http://marc.info/?l=linux-wireless&m=128404502308426&w=3
bağlantısı
aracılığıyla
edinebilirsiniz.
Linux-wireless
e-posta
listesinden
http://www.phoronix.com/scan.php?page=news_item&px=ODU4Mg
Açık Kaynak AutoCAD klonu DraftSight
Linux'a geliyor
Özgür, profesyonel derecesinde 2B CAD yazılımı DraftSight
kısa bir süre sonra Linux'a geliyor. Bu haber, profesyonel CAD
kullanıcılarına, öğrencilere ve eğitimcilere muazzam avantajlar
getiriyor.
Geliştiricilere göre sürüm önümüzdeki bir ya da iki ay içinde
hazır olacak ve kullanıcıların AutoCAD .dwg dosyalarını oluşturma
düzenleme ve görüntülenmesine olanak sağlayacak.
4
DraftSight 2D CAD programı Beta sürümü
yayımlandı.
Bedava CAD sürümünü indirip .dwg dosyalarınızla çalışmaya
başlayabilirsiniz daha sonra 3DSwYm DraftSight™ topluluk üyeleriyle
paylaşabilir ve onlarla iletişime geçebilirsiniz.
DraftSight gelişmiş mimari yapısı sayesinde birkaç dakika içinde
indirip değişik işletim sistemlerinde hemen çalıştırabilirsiniz.
http://www.3ds.com/products/draftsight/draftsight-overview/#vid1
http://www.omgubuntu.co.uk/2010/09/free-autocad-clone-draftsightcoming-to-linux/
PlayOnLinux 3.8 yayımlandı
Birçok hata halen sabit:
#22 numaralı hata:
- PlayOnLinux kendi ortamında uzun süre çalışamıyor.
- Program kullanıcıları mesa-utils paketi kurulmadığında 3B
hızlandırmanın sunulmayacağı konusunda uyarmıyor.
- Wine İçe Aktarma ve Çevrimdışı PlayOnLinux eklentilerindeki
hatalar duruyor.
Bunun yanı sıra birçok yeni özellik de var.
Bazı eklentiler yeni özellikler ekleyerek şimdi yazılımımızla
bütünleşiyor:
-Capture, oyunlarınızı kaydetmenize olanak tanır.
-Wine Import, PlayOnLinux'unuza yeni Wine uygulamaları eklemenize
olanak tanır.
-Cedega Import, Cedega oyunlarınızı içe aktarmanıza izin verir.
-Wine Look, masaüstünüzle daha uyumlu olması için Wine
uygulamanızın rengini değiştirmeye yarar.
-Advanced Wine Configuration, Wine için birçok ince ayara erişim
sağlar.
-Offline PlayOnLinux, internet erişimi olmaksızın sunucu betiğini yerel
olarak çalıştırıp PlayOnLinux'u çalıştırırmanıza olanak tanır.
http://wine-reviews.net/wine-reviews/playonlinux/playonlinux-38-hasbeen-released.html
Red Hat'te Bulut Gelişmeleri
Red Hat gelecekteki bulut stratejisini ana hatlarıyla
belirlemişti. Haziran'daki tanıtımdan sonra şirket şimdi de
uygulamayı basitleştirmek için yeni yönetim araçları ve bulut alt
yapılarının yönetimi ile Bulut Vakfı'nı genişletmeyi planlıyor. Red Hat
gücünü, farklı bulut yapılarına hitap edebilmek için standart
API(Uygulama Programı Arabirimi) geliştirmek üzere bir yıl önce
duyurulan ve bu yazın başlarından beri Apache Vakfı'nın himayesi
altında korunan Deltacloud projesine harcayacak.
Red Hat, Deltacloud API'yi DMTF'ye (http://www.dmtf.org/) standart
bulut API olarak önerdi. Şu anda DMTF; CDM, DASH ve OVF'yi
denetliyor.
Geliştiricilere oluşturma, yapılandırma ve bulut uygulamalarını
güncellemede yardımcı olması için bir uygulama
kurucu araç tasarlandı. Bu araç ile
5
geliştirilen uygulamalar yazılım gereçleri olarak kullanılır ve fiziki sunucularda, sanal makinelerde ortak veri işleme merkezleri ya da herhengi
bir değişiklik yapmadan bulutta çalışabilir.
Şirket, ayrıca ziyaretçilere yeni özellik önerileri için APIWanted.org web sitesini açtı.
http://www.h-online.com/open/news/item/Red-Hat-New-cloud-strategy-1068626.html
http://www.linuxpromagazine.com/Online/News/Red-Hat-Deltacloud-Aspires-to-Become-an-Industry-Standard
Mozilla Laboratuvarları Tarayıcı Tabanlı
Oyun Projesi Başlatıyor
Mozilla laboratuvarları geliştiricileri yeni bir projenin başlatıldığını duyurdu. Bu proje oyun geliştiricilerinin, web için yenilikçi oyunlar
geliştirilmesine yardımcı olacak.
Proje kısaca, Mozilla Labs Gaming olarak adlandırılıyor ve bu proje ile HTML5 video ve ses, WebGL, geo-location ve hızlı JavaScript motoru gibi
açık web teknolojilerini kullanarak oyunlar inşa etmek için geliştiricilere gereken platform ve araçların sağlanması hedefleniyor.
Yeni projeyi başlatmak için Mozilla'nın araştırma ve geliştirme bölümü birinci uluslararası oyun yarışını başlatacaklarını açıkladı. Game On
2010 (https://gaming.mozillalabs.com/) yarışı Ekim ayı sonunda açılacak ve web için oyun tasarlamakla ilgilenen tüm geliştiricilere açık olacak.
http://www.h-online.com/open/news/item/Mozilla-Labs-launches-browser-based-gaming-project-1075756.html
6
a. Çok az yerde adı Linux olan ders var.
b. Bazı Bilgisayar Mühendisliği bölümlerinde işletim sistemi dersi
içinde Linux'tan bahsediliyor. Projelerin Linux üzerinde yapılmasını
isteyen bölümler var.
c. Kendileri masaüstü olarak Linux kullanan, bölüm sunucuları olarak
Linux kullananlar da var; ama azınlıkta.
d. Meslek yüksek okullarında da bir miktar Linux'u kullanlar var ama
Kendisi
şu
sıralarda
İNETD
başkanığını yine azınlıkta.
yürütmekte olup, internet yasakları ile mücadelede İNETD e. Bilgi işlemler de Linux kullanımı Linux eğitiminden daha fazla. Bu
olarak sık sık adından söz ettirmektedir.
uzun yılların sonucunda ulaşılmış bir durum.
Sayın Mustafa AKGÜL, öncelikle söyleşi isteğimizi kabul ettiğiniz
Tüm bu bilgiler için elimizde kapsamlı bir rapor yok. LKD'nin
için teşekkür ederiz.
böyle bir araştırmayı yapması ve her yıl güncellemesi güzel olur. Bunun
Türkiye'de Linux ve İnternet denildiğinde akla gelen sayılı için bir miktar gönüllü ve uzman gerekir.
isimlerden birisiniz. Aynı zamanda akademisyen tarafınız da mevcut.
Yeterli çalışma Bilkent'te de yok. Bilgi İşlem yoğun olarak
Sorularımıza buradan başlayalım.
kullanıyor. Bilgisayar Mühendisliği işletim sistemi dersinde tanıştırıyor
ve kullanıyor. Arada araştırmalarda kullananlar oluyor. Bilişim
Sistemleri bölümünde Linux 101 diyebileceğimiz bir ders zorunlu ve
Soru:
Üniversitelerimiz Linux eğitimi konusunda ne düşünmekteler? Linux Sistem Yönetimi seçmeli ders.
Linux eğitim/öğretim planında kendine yeterli yeri buluyor mu? Özele
inersek sizin de öğretim görevlisi olarak ders verdiğiniz Bilkent
Üniversitesi'nde durum nedir? Linux konusunda yeterli çalışma
Soru:
yapılmakta mıdır?
Linux, ülkemizde ne yazık ki çok yaygın olarak
kullanılmamakta. Geçmişi düşündüğümüzde kat edilen yolu en iyi
Cevap:
bilenlerden birisi olarak neler düşünüyorsunuz? Sizce ilerleme ivmesi
Üniversitelerimiz, henüz Linux'un pek farkında değiller. Geniş yeterli mi? Bu bağlamda düşündüğümüzde ileriye yönelik olarak
bir araştırma yapmadım ama durum pek parlak degil. Duruma Linux'un yaygınlaşması için neler yapılabilir? Bu konudaki şahsi
Bilgisayar/Yazılım Mühendisliği, MIS, Bilişim Bölümleri, BÖTE düşünceleriniz nelerdir?
bölümleri ve Bilgi İşlem Daireleri olarak bakarsak:
Mustafa AKGÜL, Türkiye'de Linux ve internet
denildiğinde akla gelen sayılı isimlerden biridir. Bilkent
Üniversitesi'nde öğretim görevlisi olarak yaşantısını
sürdüren AKGÜL, uzun seneler boyunca LKD'de başkanlık
görevinde bulunmuştur ve şu anda da onursal başkanlık
vazifesini devam ettirmektedir.
7
Cevap:
Türkiye'de Linux kullanımı, pratik olarak İnternetin gelişi ile
başladı. Epey bir mesafe kat ettik. Üniversiteler, kamu kurumları,
internet şirketleri ve büyük şirketlerde bir varlığımız var. Az sayıda
Linux'tan para kazanan şirketlerimiz de mevcut. LKD gibi bir çatı
örgütümüz var ve pek çok özgür yazılım oluşumu var. EMO, TÜBİDER
gibi Linux'a destek veren STK'larımız da var. Ama, gidecek çok yolumuz
var. Güçleri birleştiirp, ortak hedefler etrafında birlikte çalışmamız
lazım. Bir eylem planı yapıp, belirlenen öncelikleri takip etmemiz
gerekiyor. Bunun için de daha fazla gönüllünün çalışması lazım. Bizim
bir çok cephede çalışma yapmamız şart: Kamuoyu oluşturma, ulusal
politikaları etkileme, kültürü yayma; öğretmenleri, öğretim üyelerini
yetiştirme, iknâ etme, ders malzemesi hazırlama, kamu kurumlarını
iknâ, kamu ihalelerinin özgür yazılıma eşit sans vermesini sağlama,
platformun bağımsız olması gibi alanlarda çalışmamız lazım.
Soru:
yazılım ve açık kaynak çalışmalarına çatı ya da şemsiye örgütü olmaya
çalışıyor. Gönüllü birliktelik içinde, tüm grup ve oluşumlara destek
vermeye çalışmaktadır. Birleştirici destek çabasını sürdürmeli, herkesin
katılabileceği bir platform olmaya devam etmelidir. Biliyorsunuz
yakında Özgür Web günleri yapılacak. Bu tür ülkemizdeki potensiyeli
ortaya çıkaran çabaları sürdürmeli. Bir yandan da Özgür yazılım
camiasına yeni katılımlara yol açacak çabalara devam etmelidir.
Toplumun farklı kesimlerine yönelik etkinliklerimize de devam etmeliyiz.
Soru:
Sizce Türkiye'de Linux ve Açık Kaynak'ın tanıtılması konusunda
açık kaynak topluluklarının üzerine düşenler nelerdir? Bu konuda ne
tür çalışmalar daha etkili olur?
Cevap:
Uzun bir süre LKD başkanlığını yürüttünüz ve şu anda da
onursal başkanısınız. LKD'nin bugüne kadar Türkiye'de yeterli yol
Dayanışma içinde, koordineli olarak çalışmak ve çok çalışmak.
katettiğini düşünüyor musunuz? Bundan sonrası için nasıl çalışmalar Her topluluk bağımsızlığını korumalı ama aynı çatı altında işbirliği
yapılabilir ve Türkiye'deki diğer topluluklar nasıl konumlanmalıdır?
yapmaya özen göstermelidir. Yaptıklarımızın birbiriyle uyumlu olması
ve bir bütünün parçaları olması önemlidir. Birbirimizi haberdar etmek
Cevap:
ve iletişim kurmak için de çaba harcamalıyız. Yıllık etkinlklerin bir
bölümünü de yeni oluşumları tanımak için, nasıl işbirliği yapabiliriz, ne
LKD Linux ve özgür yazılıma bir ivme vermeyi, tüm camia ile yapmalıyız sorularına cevap almak için ayırmalıyız.
birlikte başardı diye düşünüyorum. Ülkenin pek çok yerinde Linux
semineri verdi; çeşitli etkinliklerle, Linux ve Özgür Yazılım'ın
bayraktarlığını ve savunuculuğunu yaptı. Bu ne kadar yeterli, o başka
mesele. Gidecek çok ama çok yolumuz var. LKD, ülkedeki özgür
8
Soru:
Pardus'un ev sahibi TÜBİTAK, maalesef özgür yazılımı anlayabilmiş bir
konusunda konumda değil. Tüm devlet yapısı, özgür yazılımı anlayamadığı için,
özgür yazılıma ve Pardus'a pek sıcak bakmıyor. Kağıt üzerinde herkeste
Pardus'a ulusal bir ürün olduğu için sahip çıkma arzusu görüntüsü var.
Ama, bu Pardus'a ciddi bir desteğe dönüşmüyor. Bu hem kurumsal
Cevap:
boyutta hem de bireysel boyutta geçerli. Örneğin, TÜBİTAK Pardus'u
kullanmak için ciddi bir çaba içinde değil. Pardus ve özgür yazılım
Ciddi bir eğitim, yardımlaşma ve destek ortamı kurarak. LKD onların çok yabancısı olduğu konular. "Yağmıyorsan bile gürle"
Linux listeleri bunu yapmaya çalışıyor. Bunu geliştirmeli ve bölgesel deyiminin ifade ettiği noktada bile değiller. Başta askeriye olmak
Linux/özgür yazılım seminer ve sohbet toplantıları yapmalıyız. İlk üzere, pek çok kamu kurumunda az çok özgür yazılım olsa da, bu
aşamada her üniversitede, her büyük ilde, EMO, TUBIDER, TBD'yi de genelde kurumsal bir tavır değil.
yanımıza alarak periyodik etkinlikler yapmalıyız. Bunlar farkındalık
yaratma, sorun çözme, "getir bilgisayarını Linux kuralım" gibi şekillerde
Pardus, kendi varlığını duyurmada başarılı. Bir ürün olarak da
olabilir. İnsanların çekinmeden sorularını sorabileceği, cevabını hızlıca oldukça başarılı olduğunu düşünüyorum. Bir bütün olarak projeyi
alabileceği SSS (FAQ) ve benzer cevap mekanizmalarını sağlamamız değerlendirmek pek o kadar kolay değil. Elimizde yeteri bilgi yok.
gerekir kanımca.
Özgür yazılım dünyasında önemli kişileri kendi bünyesine almakta
Yeni kullanıcıların Linux dağıtımı
çekinceleri hangi yollardan giderilebilir?
kullanma
başarılı oldu. Ama, bunların çoğunu da kaybetti. Çalışma koşulları
sanırım çok yorucu. İnsanlar bir dönem sonunda bir sürü nedenle
Soru:
Pardus'u bırakıyor. Bu kendi başına kötü değil. İnsanlar menun olarak,
Ülkemizde Linux denildiğinde bu işin kıyısında köşesinde olan daha iyi kariyer olanakları için ayrılıyorsa ve yerine yeniler kolayca
herkesin aklına hemen Pardus projesi gelmekte. Pardus hakkındaki bulunuyorsa, buna sevinmek lazım. Büyükçe bir ekiple, yoğun bir iş
kişisel görüşleriniz nelerdir? Sizce Pardus'un yürütmekte olduğu misyon temposunun insana katacağı çok şey vardır.
yeterli midir, değilse ne olmalıdır? Bu konuda Pardus'u başarılı buluyor
musunuz?
Soru:
Pardus yönetimi ile topluluklar arasında ara ara çatışmaların
yaşandığına şahit oluyoruz. Sizce bu çatışmalara sebep olan ana
etmen nedir? Yönetim olarak Pardus tarafı mı daha uzlaşmacı bir tavır
Pardus ülkemizde geliştiği ve arkasında büyük bir ulusal kurum takınmalıdır, yoksa topluluklar Pardus'u bulunduğu yerde kabul ederek
olduğu için insanımız kendisine daha sıcak bakıyor. Pardus'un ortaya bu yönde mi şekillenmelidirler?
çıkışında ulusal güvenlik açısından sağlam bir işletim sistemi fikri yatar.
Cevap:
9
Cevap:
Çok yakından takip edemedim ama görebildiğim kadarıyla
sorun Pardus yönetiminde. Özgür yazılım projelerinde proje önderinin
söz hakkı fazladır ama demokratik bir yapı vardır. İnsanların birbirini
iknâ etmesi önemlidir. Profesyonellerin oluşturduğu Pardus ekibi ile
gönülllülerin arasındaki ilişkinin dayanışma ve hoş görü temelli olması
gerekir. Özgür yazılım projelerinin başarısında diyalog ve demokrasi
çok önemlidir. Pardus gönüllü topluluklarının beklediği demokratik
yapılar kurulamamış, en sonunda da özgür olmayan bir yazılımda
"ben yaptım oldu" görüntüsü ile ısrar edilmesi bardağı taşırmıştır.
Pardus yönetiminin daha açık, daha katılımcı, eleştirilere tahammüllü,
hoş görülü olması gerekir. Özgür yazılım hareketi demokratik bir
harekettir, başarısında bu demokratik olmanın payı büyüktür. Her iki
tarafın da uzlaşma çabasında olmasında yarar var. Ama, ilk adımı
atacak olan Pardus yönetimidir, onun harekete geçmesi esastır.
Soru:
Bu bağlamda Temmuz ayında son yaşanan bir tartışmadan
sonra bazı gönüllü Pardus geliştiricileri projeyi terk ettiler. Sebep olarak
da özgür yazılımı geliştirirken özgür olmayan bir aracın kullanılmasını,
bu yönde kendilerinden bağımsız olarak karar alınmasını gösterdiler.
Daha doğrusu bu olayın arkasında yatan düşünceyi vurguladılar. Sizce
de özgür bir yazılım geliştirilirken özgür olmayan bir araç tercih
edilebilir mi? Daha kuvvetsiz alternatifleri varken onlara mı
yönelinmelidir, yoksa amaca hızlıca götürecek araçlar mı
kullanılmalıdır?
Cevap:
Kullanılan aracın özgür olmasından daha önemlisi, sürecin
özgür yazılımın ruhuna uygun olmasıdır. Özgür yazılım camiası büyük
çoğunluğuyla Debian'ın "Toplumsal Sözleşmesi" türevlerini kabul
etmiştir, etmelidir. Özgür alternatiflerin olmadığı ve yeterince
gelişmediği zaman belki kısa bir dönem için kullanılabilir. Ama buna
demokratik bir şekilde tartışarak ve iknâ ederek geçilmelidir.
Soru:
Şu anda İnternet Teknolojileri Derneği (İNETD) başkanlığını
yürütmektesiniz. Bu dernek çatısı altında yaptığınız çalışmalar
hakkında kısa bir bilgilendirme yapabilir misiniz?
Cevap:
INETD olarak,
bu sene 15.sini yapacağımız "Türkiye'de
İnternet" konferansı, inet-tr'yi 2-4 aralık 2010 da İTÜ'de yapıyoruz. Her
yıl bir başka Anadolu şehrinde yaptığımız, üniversite bilişim dünyasına
yönelik Akademik Bilişim Konferansı'nın 13.sünü 2-4 Şubat'ta İnönü
Üniversitesi'nde yapıyoruz. Nisan ayında, Türkiye'de internetin doğum
günü olan 12 Nisan'ı kapsayan iki haftalık süreyi, kardeş STK'larla
birlikte "İnternet Haftası" olarak yapıyoruz. Bu sene 14.sünü yaptığımız
etkinlik, İnternet kültürünü anadoluya yaymaya yönelik etkinlikleri
kapsıyor.
10
Bunun dışında zaman zaman eğitim seminerleri düzenliyoruz.
Adalet camiası genelde bilişime uzak. Yeni yeni bilişim savcıları
Uzunca bir dönem LKD ile birlikte etkinlikler yaptik. Akademik Bilişim oluşuyor. Emniyette bilişim büroları kuruluyor. Hakimler genelde bu
ve inet-tr sırasında LKD ile işbirliği içinde eğitim seminerleri yapıyoruz. konulardan çok uzaktalar. Mahkeme süreçleri yavaş ve uzun. Açtığımız
idari dava usul yönünden reddedildi. Danıştaya gidecegiz ve ilgili
Ayrıca, ülkemizde İnternet, Bilgi Toplumu ve e-devlet hakimi ayrıca şikayet edecegiz. Suç duyuruları henüz sonuçlanmadı.
konularında gelişmeleri izliyor, paneller yapıyor, bildiriler yayınlıyoruz.
Böylece kamuoyunu bilgilendirmeye ve ulusal politikların oluşmasına
Üç yıllık mücadele sonucunda AİHM'ye dava açmanın dışında,
katkıda bulunmaya çalışıyoruz.
"İnternet Sansürüne Karşı Platformu"nu hep birlikte oluşturduk. Bir
miktar kamuoyu oluşturabildik. Bir yürüyüş yaptık. Uzun ince bir yolda
devam ediyoruz. İntenret, tüm dünyada bir saldırıya muhatap.
Soru:
Gelişmiş Avrupa'da da bu saldırı sürüyor. Hepimizi ciddi sorunlar
İNETD olarak ülkemizde 5651 sayılı kanun kapsamında bekliyor. Herkes hazırlıklı olsun, gelişmeleri takip etsin derim.
uygulanmakta olan internet yasakları için çalışmalar yapmaktasınız,
bu konuda bildirgeleriniz mevcut. Kat ettiğiniz yol nedir ve bu konuda
ilgili kişilerden olumlu veya olumsuz geri dönüşler aldınız mı? Örneğin Soru:
mahkemelere yaptığınız suç duyuruları ile ilgili bir karar aldırabildiniz
Youtube yasağını AİHM'ye taşıdınız. Bu taşıma esnasında ne gibi
mi?
zorluklarla karşılaştınız, bu süreç nasıl oluştu, şu anda ne durumda ?
Cevap:
Cevap:
Ülkemiz internet yasakları yoluyla dünya internetine savaş açmış
durumda. Henüz ülkemiz kamuoyuna yasakların boyutunu, ülkemizin
dünya ile savaşını anlatabilmiş durumda değiliz. 5651'in çıkışı
sırasında bilişim STK'ları olarak "yangın var" diye bağırdık ama kimse
sesimizi duymadı. "Çocuk pornosu" ile savaş illüzyonu toplum üzerinde
öyle bir hava yarattı ve medya bu oyunun parçası haline geldi. Bunun
sonucunda parlamentoda bir tane bile ciddi eleştiri olmadan yasa
geçti, Cumhurbaşkanı onayladı, ana muhalefet yasayı Anayasa
Mahkemesi'ne götürmedi.
Bir davada Türkiye'de başvuracak başka bir makam kalmayıca
AİHM'ye başvurabiliyorsunuz. Biz 2009 kasımında başvurduk.
Youtube'u yasaklayan mahkeme itirazımızı reddetti. Bunun üzerine bir
üst mahkemeye başvurduk. O da reddedince Türkiye'de yapacak bir
şey kalmamıştı. Youtube yasağı bir tedbir kararıdır. Bir yargılama
olmadığı için yargıtaya başvuramadık. İstinat Mahkemeleri de henüz
çalışmadığı için oraya da başvuramadık. Altı aylık süre içinde AİHM'ye
11
başvurabilirdik. Biz bir taslak hazırlayıp, Türkiye internet kamuoyundan görüş sorduk. El elden üstündür,
belki daha iyi fikirler ortaya çıkar diye. Daha sonra başvurduk. AİHM'ye başvurmak kolay ve ücretsiz.
Türkçe de başvurabilirsiniz. Bir formu doldurup, postayla gönderiyorsunuz.
Son yasa değişikliği sonucunda, şimdi AİHM'ye gitmeden Anayasa Mahkemesi'ne gitmek
zorundasınız.
Bizim başvurmuz inceleme aşamasında. Bize Brüksel'i takip eden çevrelerden başvurumuzun öne alındığı
bilgisi geldi ama bu resmen bize bildirilmedi. AİHM'nin normal süresi 3 yıl. Bekliyoruz.
İnternet yasakları, Dünya Ticaret Hukuku kapsamında değerlendirilmeye başlandı. Yasakların kalkması vakit alacak. Az önce de
söylediğim gibi gelişmiş dünyada da internete saldırı söz konusu. Bir yandan Finlandiya gibi internete genişbant erişimi evrensel hizmet
kapsamına alınıyor, yani devletin sağlaması gereken temel bir yurttaşlık hakkı haline geliyor, öte yandan Fransa, İngiltere ve Almanya'da
internete erişime fikri haklar bahanesiyle, evrensel hukukun temel ilkeleri çiğnenerek kısıtlama getirilmesi gündemde.
Sonunda özgürlük kazanacak ama sanırım epey uğraşacagız.
Soru:
Son olarak ülkemizdeki Linux kullanıcılarına tavsiyeleriniz nelerdir?
Cevap:
Linux'un ülkemizin kalkınması, bilişimin gelişmesi için hayati önemde olduğunu unutmadan Linux'u yaymak, gelişmesi için çalışmak
hepimizin üzerine düşen bir görev. Her gün kendimize "Bu gün Linux ve Özgür Yazılım için ne yaptın?" sorusunu sormayı unutmayın. Birbirmizle
bağlantıyı koparmadan hoş görü ve dayanışma içinde birlikte çalışmalıyız.
Söyleşimize katıldığını için tekrar Sayın Mustafa AKGÜL'e teşekkür ederiz.
12
Shotwell, Linux üzerinde ve sınırlı özelliklerle Windows'ta çalışan
dijital bir fotoğraf düzenleyicisidir. GNOME masaüstü ortamı için
tasarlanmıştır. Fedora 13 ve Ubuntu 10.10 Alpha 1'de öntanımlı fotoğraf
yöneticisidir. Bir disk ya da kameradan fotoğraf aktarmanıza ve onları
çeşitli yollarla düzenlemenize, tam pencere ya da tam ekran kipinde
görüntülemenize ve başkalarıyla paylaşmak için dışa aktarmanıza olanak
tanır. Geliştirme sürecinin son durumunu görmek ve son sürümü
kullandığınızdan emin olmak için lütfen http://www.yorba.org/shotwell
bağlantısını ziyaret edin. http://trac.yorba.org/wiki/ShotwellInstallation (
Shotwell Kur) bağlantısından kurulum hakkında daha fazla bilgi
edinebilirsiniz.
Shotwell'i Türkçeleştirme
Aşağıdaki yönergeler Türkçe çeviriye göre hazırlanmıştır. Bunun
için http://ubuntuone.com/p/9n8/ bağlantısından çeviriyi indirip
/usr/share/locale/tr/LC_MESSAGES dizinine atmalısınız. Shotwell'i
yeniden başlattığınızda çeviri kullanılabilir duruma gelecektir.
Shotwell'i Çalıştırma
Shotwell doğrudan kendi inşa dizininden çalıştırılabilir, fakat bu
yalnızca Shotwell'i test etmek isteyenler ve geliştiriciler için önerilmektedir.
Kurulumdan sonra, Shotwell'i Uygulamalar menüsündeki Grafik
bölümünden çalıştırabilirsiniz. Shotwell, bilgisayarınıza kamera
takıldığında otomatik olarak başlatılmak üzere yapılandırılabilir. Bir
kamera saptandığında Shotwell'i çalışmak üzere etkinleştirmek için
Nautilus tercihlerinden ortam sekmesine gelin ve fotoğraflar bölümünden
Shotwell'i seçin.
Shotwell'i ilk çalıştırdığınızda size boş bir pencerede iki görünüm
sunulacak. Fotoğraflar ve Olaylar. İlk işiniz olarak fotoğraf kitaplığınızı
oluşturmaya başlayabilirsiniz.
Fotoğrafları İçe Aktarmak
Fotoğrafları içe aktarmanın üç yolu vardır: Sürükle-bırak
yöntemi, bir dijital kameradan içe aktarım ve dosya menüsünden
içe aktarım.
Sürükle ve Bırak: Basitçe fotoğraflarınızı dosya
yöneticinizden sürükleyin ve Shotwell penceresinin üzerine bırakın.
Dosya ya da dizinleri sürükleyebilirsiniz. Fotoğraflar, kitaplığınıza
aktarılacaktır. Gıyaben(sizin yerinize mi desek gıyaben yerine), size
fotoğraf dosyalarınızı kitaplık dizinine kopyalamak isteyip
istemediğiniz sorulacak (bu genelde, ev dizininiz içindeki Resimler
dizinidir). Bu istemi iptal etmek için, eğer fotoğrafları sürüklerken
Ctrl'ye basılı tutarsanız, Shotwell fotoğrafları içe aktaracak ve
dosyaları kopyalayacaktır. Benzer şekilde, eğer
fotoğrafları sürüklerken
13
Ctrl+Shift'e basılı tutarsanız, Shotwell fotoğrafları kopyalamadan içe
aktaracaktır.
Kamera: Dijital kameranızı bilgisayarınıza bağlayın. Shotwell,
kamerayı tanıyıp kenar çubuğunda listeleyecektir. Kamerayı seçtiğinizde
Shotwell her bir fotoğrafın önizlemesini yükleyecektir. İçe aktarmak için
belli fotoğrafları seçebilir ya da hepsini içe aktarabilirsiniz.
Fotoğraflar koleksiyonu, kitaplığınızdaki tüm fotoğrafları
gösterir. Bu sayfa, içe aktardığınız fotoğraf sayısına bağlı olarak
oldukça geniş olabilir. Olaylar ve etiketler de bu bölümdedir.
Dosya Menüsü: Dosya -> Dizinden İçe Aktar... seçeneğini seçin
ve seçim iletişim kutusundan bir dizin seçin. Shotwell tüm dizin ve alt
dizinleri fotoğraf dosyaları için tarayacak ve onları otomatik olarak içe
aktaracaktır. Dizini seçtikten sonra fotoğraf dosyalarını kitaplık dizininize
kopyalamak isteyip istemediğiniz size sorulacaktır.
Shotwell, dijital kameralarla iletişim için gPhoto
(http://gphoto.sourceforge.net/) kullanır. Eğer Shotwell'in kenar
çubuğunda dijital kameranız gözükmüyorsa fotoğrafları aktarmada
sorun vardır. Kameranızın desteklenip desteklenmediğini görmek için
http://gphoto.sourceforge.net/proj/libgphoto2/support.php sayfasını
ziyaret edebilirsiniz.
Öntanımlı olarak, Shotwell fotoğraf kitaplığınızı XDG Resimler
dizininde saklar. XDG Resimler'in konumu XDG_PICTURES_DIR in
~/.config/user-dirs.dirs olarak belirlenmiştir. Kitaplık konumunu
değiştirmek için, Düzenle -> Tercihler seçeneğini seçin ve Kitaplık
Konumu bölümünde bir kitaplık dizini seçmek ya da oluşturmak için
Gözat düğmesine tıklayın.
Şu anda, Shotwell; JPEG, PNG ve RAW fotoğraf dosyalarını içe
aktarabilir. Shotwell henüz BMP, GIF ve TIFF gibi grafiksel biçimleri
desteklememektedir.
Fotoğraflarınızı Görüntülemek
Olay, kabaca aynı zamanda çekilen fotoğrafların basit bir
grubudur. Fotoğraflarınızı aktardığınızda; Shotwell, kameranızda
fotoğrafların çekildiği tarihi gösteren etiketleri arar. Daha sonra
fotoğrafları olaylara göre kümelendirir. Olaylar sayesinde mezuniyet
balonuzda ya da yeni yılda çektiğiniz tüm fotoğrafları görebilirsiniz.
14
da “renkli” gibi. Bu tamamen size kalmış.
Bir etiket oluşturduğunuzda kenar çubuğundaki Etiketler
öğesinin altında gözükecektir, eğer hiç etiket yoksa gizlidir.
Fotoğraflara bağlı birden çok etiket olabilir ve siz kenar çubuğunda
verilen etiket adına tıklarsanız, bu etiketle ilişkilendirilmiş tüm
fotoğrafları görebilirsiniz.
Shotwell'deki herhangi bir koleksiyonunuzun slayt gösterisini
Görünüm -> Slayt gösterisi seçeneğini seçerek başlatabilirsiniz.
Fotoğraflarınızı Düzenlemek
Shotwell'in mevcut sürümü; fotoğrafın boyutu ve yönünü
ayarlamak, renklerini düzenlemek ve kayıtlı zaman ve tarihi
değiştirmek için bir dizi düzenleme aracı sunar.
Eğer kenar çubuğunda Olaylar öğesini seçerseniz, her olayı
temsilen bir tek fotoğraf göreceksiniz. Buna anahtar fotoğraf denir.
Anahtar fotoğraf üzerine çift tıklamak, sizi koleksiyona götürecektir.
Kenar çubuğunda olaylar, yıl ve aya göre olayın ilk fotoğrafından
başlayarak ağaç biçiminde depolanır. Hiyerarşi içindeki olayları
doğrudan taşıyamazsınız, olaylar daima tarihlerine göre ayrılarak
depolanmıştır. Buna rağmen, olayları artan ya da azalan sıraya göre
ayırmayı seçebilirsiniz. Ayırma düzenini değiştirmek için Görünüm ->
Olayları Sırala seçeneğinden, artan ya da azalandan birisini seçin.
Etiketler elle oluşturulur ve görevlendirilir. Örneğin özel bir
arkadaşınızın tüm fotoğraflarını onun adıyla etiketleyebilirisiniz. Etiketler,
fotoğrafta gözüken yerler ya da nesneler olabilir: “İstanbul”, “tatil” ya
15
Düzenleme Hakkında Bazı Notlar
Shotwell, uyumlu bir fotoğraf düzenleyicidir. Orijinal fotoğraflarınızı değiştirmez. Yani, eğer bir fotoğrafı döndürür ya da kırparsanız,
kopya kitaplığınızda rötuşlanmamış şekilde kalır. Shotwell, düzenlemelerinizi bir veritabanı içinde depolar ve gerektiğinde onlara anında
başvurur. Bu demektir ki, bir fotoğrafta yaptığınız değişikliği istediğiniz zaman geri alabilirsiniz. Bu aynı zamanda şu demektir; Shotwell,
fotoğraflarınızın kopya sayısını azalatabilir ve ayrıca geri al seçeneğini öneriyorken onu sabit sürücünüzde depolar. Bunun için Fotoğraflar ->
Özgün Haline Döndür seçeneğini kullanabilirsiniz.
Döndürme
Araç çubuğu üzerindeki Döndür düğmesi ile fotoğraflarınızı sola ve sağa dönderebilirsiniz (saat yönü ve aksine). Eğer birden fazla resim
seçerseniz, tümünü aynı anda döndürebilirsiniz. Ayrıca herhangi bir fotoğrafın kopyasını da oluşturabilirsiniz. Sağa döndürmek için düğmeye
basın, sola döndürmek için Ctrl tuşuna basılı tutun ve düğmeye basın. Her iki komut da fotoğraflar menüsünden kullanılabilir. Eğer bir
fotoğrafın ikiz görüntüsünü oluşturmak isterseniz, Fotoğraflar menüsünden Yansıt komutunu kullanın. Bir görüntüyü dikey olarak çevirmek için
aynı menüden Çevir komutunu kullanın.
Otomatik-Düzeltme
Bir fotoğrafı düzeltmenin en kolay yollarından birisi de
Düzeltme düğmesini denemektir. Bu araç, fotoğrafın renklerini ve
karşıtlığını analiz eder ve daha iyi bir resim için ayarlar. Bu basit
adım, renkleri ortaya çıkarır ve ışıklandırma sorunu için gereken
eksikleri ayrıntılandırır.
Ayarların ince ayarını otomatik-düzelt aracı yapar, bunun için Ayarla
düğmesine tıklayın.
Kırpma
Bir fotoğrafın alanını küçültmek ve bakanın dikkatini onun
küçük bir kısmına çekmek için Kırpma aracını kullanın. Tam pencere
kipine girmek için fotoğraf üzerinde çift tıklayın, daha sonra araç
16
çubuğu üzerinden Kırp düğmesine tıklayın. Fotoğrafın üzerinde beyaz
bir kutu gözükecektir. Eğer imleci kutunun ortasına yerleştirirseniz,
kırpma sınırını taşıyabilirsiniz. Kutunun köşelerine tıklarsanız, boyutunu
ayarlayabilirsiniz. Kırpma dikdörtgeninin içindeki daha açık bölüm,
fotoğrafı kırptığınızda neye benzeyeceğini gösterir.
Ayrıca kırpma kutusunu pek çok genel boyuta
sınırlandırabilirsiniz. Listeden ihtiyaçlarınıza uyan boyutu seçin. Eğer
yanındaki çevir düğmesine basarsanız, sınırlamanın yönelimi yataydan
dikeye dönecektir. Kırpma çerçevenizden memnunsanız, Uygula
düğmesine tıklayın. Shotwell, kırpılan fotoğrafı gösterecektir. Fikrinizi
değiştirecek olursanız, Kırpma düğmesine tekrar tıklayın ve kırpmanın
ince ayarlarını yapın. Uygula yerine İptal'e tıklarsanız, Shotwell
kırpmanın önceki boyutlarına dönecektir. Eğer kırpmayı tamamen
kaldırmak isterseniz, Eski Haline Getir düğmesini kullanın.
Kırmızı Göz
Kırmızı göz, kameranın ışığı gözbebeğinden yansıdığında
meydana gelir. Bunu fotoğraftan temizlemek için Kırmızı-göz aracını
kullanın. Etkilenen gözbebeği üzerine halkayı sürükleyin, sürgü kontrolü
ile boyutunu ayarlayın ve Uygula'ya basın. Bu süreci,
fotoğraflarınızdaki tüm kırmızı gözbebekleri için yineleyin. Bittiğinde
Kapat'a basın.
Kurulum
İkili Dosyalar:
Shotwell'in önceden derlenmiş ikili dosyalarını aşağıdaki
depodan edinebilirsiniz. Bu, kolay ve kararlı bir kurulum için önerilir.
Shotwell 0.6.1'i Yorba Kişisel Paket Arşivi'nden kurmak için; depo
listenize PPA ekleyin, güncelleyin ve Shotwell'i kurun:
$ sudo add-apt-repository ppa:yorba/ppa
$ sudo apt-get update
$ sudo apt-get install shotwell
Alternatif olarak Ubuntu 10.04 (Lucid Lynx) deposundan Synaptic
kullanarak ya da
$ sudo apt-get install shotwell yazarak Shotwell 0.5.0'ı kurabilirsiniz.
Kaynaktan:
1. Bağımlılıkları Kur
Shotwell için bağımlılıkları şu şekilde kurabilirsiniz:
$ sudo apt-get install libdbus-glib-1-dev libgconf2-dev libgtk2.0-dev
libgudev-1.0-dev libexif-dev libgphoto2-2-dev libsoup2.4-dev
libsqlite3-dev libunique-dev libwebkit-dev libxml2-dev
Ayrıca aşağıdaki kütüphaneleri de, eğer daha önceden Ubuntu
deponuzda kullanılabilir değil ise, kaynak kodundan derlemelisiniz:
libraw ve gexiv2.
9.10 (Karmic Koala) sürümünde, vala ve gee-1.0 Shotwell için
çok eski bir sürümdedir, bu nedenle bunları kaynak kodundan
kendiniz derlemeli ya da Vala team's PPA'dan
(https://launchpad.net/~vala-team)'dan edinmelisiniz. 10.04 (Lucid
Lynx) sürümünde, bu paketleri şu şekilde indirebilirsiniz:
$sudo apt-get install valac libgee-dev
17
2. Kaynak Kodunu İndir
Shotwell kaynak kodunu indirmenin iki yolu vardır:
Kaynak kodu tar arşivini indirmek, (http://www.yorba.org/download/shotwell/0.6/shotwell-0.6.1.tar.bz2): Kararlı bir sürüm için önerilir
En son kaynak kodları için Subversion sunucumuzdaki kaynağı gözden geçirebilirsiniz:
$ svn co svn://svn.yorba.org/shotwell/trunk shotwell
3. Derle ve Kur
Shotwell'i derlemek ve kurmak için kaynak kodunu indirdiğiniz ya da çıkardığınız dizine gidin ve aşağıdaki komutları uygulayın:
$ ./configure
$ make
# make install
Öntanımlı olarak, Shotwell /usr/local içine kurulacaktır. Yapılandırma betiği, ön ek dizinini isteğe göre uyarlayabilir. Yönergeler ve diğer
kurulum seçenekleri için ./configure –help komutunu çalıştırabilirsiniz.
Eğer kurulum sistem dizinlerine kuruluyorsa, make install komutunu yetkili kullanıcı olarak yürütmelisiniz (ör. Sudo make install).
Shotwell'i Çalıştırma
Shotwell'i doğrudan inşa dizininden
$ ./shotwell
yazarak çalıştırabilirsiniz.
Shotwell'i Kaldırmak
# make uninstall
komutunu çalıştırın. “make install” gibi bu komutu uygulayabilmek için de yetkili kullanıcı ayrıcalıklarına sahip olmalısınız.
Kaynaklar:
http://trac.yorba.org/wiki/UsingShotwell0.6
http://www.yorba.org/shotwell/install/#binaries
http://www.yorba.org/shotwell/
18
Disk Kullanımı Çözümleyicisi, herhangi bir Gnome ortamında
disk kullanımını analiz eden grafiksel, menülerle çalıştırılan bir
uygulamadır.
Disk Kullanımı Çözümleyicisi hem tüm dosya sistemi düzenini
(*ağacını) hem de kullanıcının istediği özel bir dizin dalını (yerel ya da
uzak) kolayca tarayabilir.
Ayrıca ev dizininizde ve bağlı/çıkarılmış aygıtta yapılan tüm
değişiklikleri eş zamanlı olarak otomatik saptar. Bunun yanı sıra Disk
Kullanımı Çözümleyicisi seçilen her dizin için tam grafiksel ağaç
haritası penceresi ve halka çizelge sunar.
Başlarken
Disk Kullanımı Çözümleyicisi üç yolla başlatılabilir:
* Gnome menüden Uygulamalar ->Donatılar;
* Uçbirim penceresinden;
* Nautilus'tan "Birlikte Aç..." ;
Eğer Disk Kullanımı Çözümleyicisi'ni uçbirimden başlatmak
isterseniz, sadece şunu yazın:
baobab <istenilen_dizinin_tam_adresi>
sonra da Enter tuşuna basın.
Eğer
Gnome
menüden
başlatılırsa,
Disk
Kullanımı
Çözümleyicisi başlar ve kullanıcıdan gelecek eylem için bekleme
durumunda kalır.
Disk
Kullanımı
Çözümleyicisi'ni
başlattığınızda şöyle bir pencere görüntülenir.
Gnome
Menü'den
Kullanıcının bundan sonra yapabileceği işlemler şöyle:
* tüm dosya sistemi taraması başlatmak
* taramak için özel bir yerel dizin kolu belirlemek
* tarama için uzak bir sunucu ya da dizin belirlemek
* tercihleri ayarlamak
Tüm dosya sistemi taramasını seçtiğinizde Disk Kullanımı
Çözümleyicisi penceresi, dosya sistemi taranmaya başlar başlamaz
ağacı çizmeye başlayacak. Eğer dosya sistemine bağlı geniş bir bölüm
varsa, o da taranacaktır.
Kullanım
Tüm Dosya Sistemini Tarama: Tüm dosya sistemini taramayı
başlatmak için menüden Çözümleyici->Dosya
Sistemini Tara (Analyzer -> Scan Filesystem)
19
öğesini seçin ya da araç çubuğundaki Dosya Sistemini Tara
düğmesine basın.
Tarama süreci bittiğinde, dosya sisteminizin tüm ağacını elde
edeceksiniz, alttaki şekilde görüldüğü gibi.
Tek Dizin Tarama
Tek bir dosya taramayı başlatmak için menüden Çözümleyici->
Dizin Tara... (Analyzer -> Scan Folder... ) seçin ya da araç
çubuğundaki Dizin Tara düğmesine basın.
Uzak Tarama
Disk Kullanımı Çözümleyicisi ne /proc dizini ne de "düz" dosya
ile bağlantılı olmayan herhangi dosya boyutunu hesaba
katmayacaktır, yani sembolik bağlantı, karakter blokları, aygıt blokları
dizin boyutunun bir parçası olmayacaktır.
Sabit bağlantılar farklı bir şekilde yönetilir: ilk sabit bağlantı
normal bir dosya olarak hesaba katılır, aynı aygıt birimine işaret eden
sonraki bağlantılar toplam hesabı içine katılmaz ancak pencerenin
sağ sütununda belirtilir. (sabit bağlantılar içerir şeklinde)
Eğer uzak sunucu-dizin taramanız gerekli ise, sadece araç
çubuğunda Uzak Dizini Tara (Scan Remote Folder) simgesini tıklayın
ya da menüden Çözümleyici-> Uzak Dizin Tara (Analyzer -> Scan
Remote Folder) öğesini seçin, sağdaki iletişim kutusu karşınıza
çıkacak. Disk Kullanım Çözümleyicisi ssh, ftp, smb, http ve https
üzerinden bir sunucuya bağlanabilir.
Tercihler
Disk Kullanımı Çözümleyicisi uygulama tercihlerini değiştirmek için
Düzen->Tercihler (Edit->Preferences) öğesini seçin.
20
Taranacak Aygıtları Seçin
Tercihler penceresinin ilk bölümünde, belirlenen tüm bağlı aygıtlar listelenir. Bölümü dosya sistemi tarama işlemlerine dahil etmek ya da
hariç tutmak için onay kutusuna tıklayın.
"/" bağlama noktasına bağlı aygıt taramadan hariç tutulamaz.
Ev Dizini İzlemeyi Etkinleştirme
Eğer bu seçenek seçilirse, Disk Kullanımı Çözümleyicisi devamlı olarak ev dizini üzerinde dışarıdan gelen tüm değişiklikleri izler ve bir
dosya eklendiğinde ya da kaldırıldığında kullanıcıyı uyarır.
Kaynak: http://www.marzocca.net/linux/baobab/index.html
* İbrahim ALTUNOK'a Katkılarından Dolayı Teşekkür Ederiz.
21
Disk dosyalarınızı DVD'ye Kopyalayın ya da Yedekleyin
Dkopp disk dosyalarınızı kaydedilebilir bir DVD ortamına
kopyalayan bir linux programıdır.
Dkopp ile dosyalarınızı koruma ya da arşivsel depolama için
DVD'ye kopyalayabilirsiniz ve kopyanın doğrulamasını (okuma hatası
var mı?) yapabilirsiniz. dkopp GNU lisansına sahiptir.
Üç türlü yedekleme mümkündür: tam, artımlı ve birikimli.
Tam yedek belirlenen tüm dosyaları kopyalar ve DVD'de
bundan başka dosya bırakmaz.
Artımlı yedek, sadece bir önceki dkopp DVD'si ile disk
dosyalarını eşleyerek gereken dosyaları kopyalar: sadece değişmiş ya
da yeni dosyalar kopyalanır. Bu normal olarak tam yedekten daha
hızlı gerçekleşir. Artımlı yedek aynı zamanda uzun zamandır disk
üzerinde sunulmayan DVD dosyalarını da kaldırır. Böylece, artımlı
yedek almadan sonra, DVD tam olarak diskle eş olacaktır.
Birikimli yedek artımlı yedeğe benzer, fakat eşleşmeyen DVD
dosyaları kaldırılmaz.
Öncelikle buradan(http://kornelix.squarespace.com/packages/) .deb paketlerini aşağıdaki komutu kullanarak indirmeniz gerekir.
wget http://kornelix.squarespace.com/storage/packages/dkopp-5.1-32.deb
64-bit kullanıcılar için:
wget http://kornelix.squarespace.com/storage/packages/dkopp-5.1-64.deb
Bu .deb paketini paketin üzerine çift tıklayarak ya da uçbirimden aşağıdaki komutu çalıştırarak kurun:
sudo dpkg -i dkopp-5.1-32.deb
Kaynak: http://www.ubuntugeek.com/dkopp-copy-or-back-up-disk-files-to-dvd.html
22
Bu makale ile "Alien" isimli araç ile .rpm paketlerini nasıl .deb
paketlerine çevirebileceğinizi anlatılacak. Alien'ı Debian ve Ubuntu'da
kolayca depolarınızdan yükleyebilirsiniz.
Fakat, Alien'ın klavuz sayfalarında belirttiği şu kısımları aklımızda
tutmakta fayda var;
"alien, sistemin çalışması için gerekli olan init, libc gibi önemli sistem
paketlerinin çevrilmesinde kullanılmamalıdır. Bu paketlerin bir çoğu
dağıtımların kendilerine özgü paketlemelerine sahiptir ve bir diğer dağıtım ile
uyuşmaycaktır. Genel olarak eğer sistemizeden bir paketi tamamen
kaldıramıyorsanız, bu paketi alien ile çevirdiğiniz bir paket ile değiştirmeyi
denemeyin."
ardından şu komutla bir bakalım klasör içerisinde neler olmuş;
ls -l
burada dönüştürülmüş olan mysql-zrm_1.1-2_all.deb paketini
görebilirsiniz. Ayrıca çevirdiğimiz paketin versiyon numarasının değiştiğini de
fark etmişsinizdir. Şuan paketimiz 1.1-2 olarak görünüyor ama aslında 1.11'di orjinal rpm paketimiz. Bunu için -k anahtarını ekleyelim komutumuza;
sudo alien -k MySQL-zrm-1.1-1.noarch.rpm
bu şekilde mysql-zrm_1.1-1_all.deb paketimizi aynı isimle oluşturmuş
olacağız.
Yeni .deb paketini yüklemek için ise dpkg -i komutunu kullanıyoruz.
Öncelikli Not
şöyle ki;
Bu anlatımın orjinal kaynağında Debian Sarge, çevirisinde ise Ubuntu
sudo dpkg -i mysql-zrm_1.1-1_all.deb
Lucid Lynx kullanılmıştır. Her iki sistem için de aynı yöntem geçerlidir.
Bu komutun ardından mysql-zrm yüklenmiş ve tam olarak çalışır
Alien Yüklemesi
durumda oluyor (ama siz yinede yüklediğiniz paketin ayar dosyalarına
Alien Debian ve Ubuntu depolarında bulunmaktadır, bu yüzden bakmak isteyebilirsiniz..)
aşağıdaki komut ile rahatlıkla yükleyebilirsiniz:
Eğer dpkg -i işlemini dönüştürme işlemimiz ile birlikte yapmak
istersenizde komutumuz:
sudo apt-get install alien
sudo alien -i MySQL-zrm-1.1-1.noarch.rpm
.rpm'den .deb e Dönüştürme İşlemi
Bu komut ile rpm paket .deb'e dönüştürülür ve hemen ardından
Şimdi örnek olması için mysql-zrm rpm paketinin (1.1-1 bu makale yüklenir.
hazırlanırken kullanılan versiyondur) deb paketine dönüştürme işlemini
Gördüğünüz üzere son derece kolay bir işlem. Alien'ın detayları için
gerçekleştireceğiz.
ise;
/tmp klasörü altına geçiyoruz, siz elbette nerede isterseniz bu işlemi
man alien
yapabilirsiniz.
cd /tmp
Örnek dosyamızı indiriyoruz.
wget http://www.zmanda.com/downloads/community/ZRMMySQL/1.1/Linux/MySQL-zrm-1.1-1.noarch.rpm
.rpm paketimizi basitçe aşağıdaki komut ile .deb paketine çevirebiliriz.
sudo alien MySQL-zrm-1.1-1.noarch.rpm
Kaynaklar:
http://kitenet.net/~joey/code/alien/
http://www.howtoforge.com/converting_rpm_to_deb_with_alien
23
20. sayımızda hatırlarsanız blender ile blender logosu yapmıştık.
Bir sonraki sayı için ise ubuntu logosu yapmak istemiştim fakat her ikisi de
aynı mantık kullandığı için vazgeçmiştim. Daha sonra internette “Array
Animation” diye bir video gördüm(gördük). Hazırlayan kişi tabii bunun bir
de dökümantasyonunu hazırlamış. Ben de şöyle basitinden bir
animasyonu çok kişi sever(ben severim) diyerekten bunu yazmaya karar
verdim. İşte bu yazımızda “Array Animation” denilen videoyu blenderda
nasıl hazırlayacağımızı ele alacağız. Biraz çakma olacak tabii ama
mantık değişmeyeceği için siz daha göze hoş gelen şeyler
yapabileceksiniz. Bu belge için Blender 2.53.1 sürümünü kullanacağız.
Bu sürüm son beta sürüm oluyor, yani depodan kurduğunuz sürüm
değildir. Www.blender.org sitesinden son beta sürümünü indirip ev
dizinine açıp içerisindeki blender dosyasına çift tıklayarak çalıştırabilirsiniz.
Şimdi başlayabiliriz. Öncelikle hafiften bir pencerelerimizi tanısak
nasıl olur? İyi olur bence. Öncelikle sol taraftaki panel bizim şu aşamada
işimize yaramaz. Ekranı geniş tutmak daha isteyenler T tuşuna basıp
paneli kaldırabilir. Alt tarafta önemli olan kısım küçük sahne alanımızdır.
Geniş animasyon için değil sadece hangi karelere keyframe(anahtar
kare, ben dönüş noktası diyorum :) ) eklendiğini görüyoruz, tabii o an
hangi karede olduğumuzu da. Sağ tarafta ise iki panelimiz var. Üstteki
panel ile nesnelerimizi görebiliriz ve onlar üzerinde işlem
yapabiliriz(görünmez yapmak, seçmek, silmek vs). Alttaki ikinci panel ise
bizim araçlar panelimiz. Birçok işlem burada yapılır ve en önemli
paneldir.
Panellerimizi tanıdık sanırım. Bir önceki yazıda bazı işlevleri detaylı
yazmıştım ama burada önbilgi olduğunu düşünerek es geçeceğim(mesela
RMB ile nesneyi seçin demenin anlamı yok artık, “nesneyi seçmek”
yeterli). Bu beta sürümde en sık kullandığımız Space(Nesne Ekle) işlevinin
yerine Shift+A tuşunu kullanıyoruz(Blender beta sürümü özelleştirilebilir
ama bu ayrı bir konu). Öncelikle varsayılan olarak gelen küpü seçiyoruz
ve yanda gördüğümüz şekilde Array ekliyoruz.
Şimdi eklediğimiz Array Modifier dan sonra sahnemize iki
Empty ekleyelim. Eklediğimiz bu boş nesneleri Sağ Üst panelde
görebilirsiniz. Ben isimlerini 1 ve 2 olarak değiştirdim. Siz de
değiştirmek için bu boş nesneyi seçip N tuşuna basın ve açılan
panelde Item sekmesinin altında ki kutucuğa istediğiniz ismi
verebilirsiniz. Şimdi boş nesneyi birbirinden ayırt etmek için birkaç
ufak ayar yapalım.
24
Boş nesnelerimizden birini seçip bu panelde ki gibi ayarlıyoruz
(size 2 olacak şekilde). Böylece şekli ve boyutunu diğer boş nesneden
farklı yapmış olacağız. Çünkü boş nesne seçili değilken onu diğerinden
ayırt etmek zor oluyor. Ayrıca küpten büyük olması da işe yarar.
Şimdi sıra nesnemize hareket vermekte. Önce tüm nesneleri
seçin ve ardından i tuşuna basın. Aşağıdaki resimde görülen
seçeneği seçin.
Şimdi tekrar küpümüzü seçelim ve alttaki resimde gösterilen
ayarlarımızı Array Modifier sekmesinden yapalım.
Bu gördüğümüz ekran Array Modifier ayarlarının yapıldığı yer.
Siz de küpü seçtikten sonra bu ayar penceresine gelip Array Modifier
ayarını bu şekilde düzenleyin. Burada yaptığımız işlem 15 adet küpün
kopyasını oluşturmak ve bu kopyaları 1(Empty nesnesi) nesnesine
bağlamak. Böylece biz bu boş nesne ile bu 15 kopyayı kontrol
edebileceğiz. Şimdi Copy'ye tıklıyoruz ve bu Array Modifier'ın bir
kopyasını daha ekliyoruz ve bu defa tek fark olarak 1 yerine 2
yazıyoruz(2. Empty nesnemiz).
İlk karemize noktamızı koyduk(dönüşüm noktamız:) ).
Ardından 30. kareye gelelim. Bunu fareyle alt sahne alanımızdan
yapabiliriz ayrıca klavyeden sağ-sol yön tuşları kareleri birer birer,
aşağı-yukarı yön tuşları ise onar onar arttırıp azaltır. 30. karede iken
Sağ Üst panelden 1 nesnemizi seçelim ve G ve X tuşlarınsa sırasıyla
basıp faremizi hareket ettirelim. Aşağıdaki şekli elde ettikten sonra
tüm nesneleri seçip(2 defa A tuşuna basmak gerekli) bir anahtar
kare( LocRotScale) daha ekleyelim.
25
İstediğiniz herhangi bir kareye gelin ve 1 nesnesini seçip R ve Y
tuşlarına basın. Aşağıdaki şekli elde etmeye çalışın ve ardından tüm
nesneler için bir anahtar kare daha ekleyin.
60. kareye gelip 2 nesnemizi seçip ardından G ve Y tuşlarına
basıp fareyi hareket ettirelim. Aşağıdaki gibi bir şekil elde etmiş
olacaksınız. Bu şekli elde ettikten sonra yine tüm nesneleri seçip bir
anahtar kare ekleyelim.
Buraya kadar geldik madem sağ-sol yön tuşlarıyla 0. ve 90.
kareler arasında yavaşça gidip gelin. Eğer bir hareketlilik varsa yeterli.
Bundan sonrası için resim ekleyip o şekli hangi nesne üzerinde ne gibi
bir oynama yaparak elde ettiğimizi yazsak yeterli olur.
26
120. kare; 2 nesnesi R ve Z tuş bileşimi
150. kare 1 nesnesi R ve Y tuşları(Tersine çeviriyoruz, aynı görüntü
yanıltmasın)
180. kare 2. nesne R v Y tuşları
200. kare 1. nesne S tuşu
27
220. kare 1. nesne R ve Y tuşları.
Son olarak 250. kareye gelin ve Alt+G, Alt+R ve Alt+S tuş kombinasyonlarına sırasıyla basın. Böylece en ilk karemize dönmüş olduk.
Tabii ben bu öğretiyi öğrendiğim yerde 1500. kareye kadar gelmişti eleman. Ben o kadarına gerek duymadım. Amaç az da olsa blender'ı
kavramak sonuçta. Bir sonraki yazı da bu hareketli nesneyi kamerayla takip etmeyi ele almayı düşünüyorum. Eğer fazla yer kaplamazsa
Işıklandırma konusunu da ekleriz. En son kısımda Videoyu düzenler ve videomuza ses ekleriz. Böylece basit bir animasyon tamamlanmış olur.
Nasıl? Umarım beğenirsiniz.
Kaynak: Kaynak video ve youtube üzerinde. Yapan nasıl yapmış ve sonuç ne olmuş derseniz arayacağınız videoyu Blender Tutorial Advanced Array Animation anahtar kelimeleriyle bulabilirsiniz. Tam adres vermek yerine bu yol daha iyi çünkü toplam da 10 video.
28
Herkesin geçmiş bayramı mübarek olsun.Kısa bir bayram tatilinin
ardından tekrar beraberiz.Okulların açılmasınada kısa bir süre var ve
bizde yavaş yavaş dersimize kaldığımız yerden devam edelim.
Geçtiğimiz ay,basit bir C programını nasıl oluşturup derleyeceğimizi
ve
çalıştıracağımızı,fonksiyon
oluşturup
kullanmayı,bilinirlik
alanı,ömür ve bir kaç veri türünden kısaca bahsetmiştik.
Bu ay, programlama yaparken en çok kullandığımız deyimleri yani
kontrol ve döngü deyimlerini ele alacağız.
Öncelikle deyim nedir biraz bunu açıklayalım.
Deyim(statement)
C dilinde yazılmış olan programların cümlelerine denir.İki çeşit deyim
vardır;
Bildirim Deyimi(declaration statement)
Bu deyimler yalnızca derleyici programa bilgi verir.Derleyicinin işlem
yapan kodlar üretmesine neden olmaz.
Yürütülebilir Deyim(executable statement)
Bu deyimler ise derleyicinin işlem yapan kodlar üretmesine neden
olur.Bu deyim de kendi arasında gruplara ayrılır.
Yalın Deyim(simpe statement)
Sonlandırıcı atom ile oluşturulan tek bir ifadeden oluşan deyimdir.
Örnek:
x = 5;
y++;
topla();
Yukarıda üç tane yalın deyim bulunmakta.
Boş Deyim(null statement)
";" sonlandırıcı atomunun veya
kullanılmasıyla oluşturulur.
Örnek:;
{}
boş
bir
bloğun
tek
başına
Bileşik Deyim(compound statement)
Birden fazla deyimin bir blok içinde oluşturduğu deyimdir.
Örnek: {
x = 5;
y++;
topla();
}
Kontrol Deyimleri
Adındanda anlaşılacağı üzere programın akışını farklı noktalara
yönlendirmemizi sağlayan deyimlerdir.C dilinde bulunan kontrol
deyimleri şunlardır;
if deyimi
while döngü deyimi
do while döngü deyimi
for döngü deyimi
break deyimi
continue deyimi
switch deyimi
goto deyimi
return deyimi
29
if Deyimi
C dilinde kontrol amaçlı olarak en çok kullandığımız deyimdir.Şu
şekilde bir yapısı vardır.
{
if(ifade1)
deyim1;
else if(ifade2)
deyim2;
else
deyim3;
}
Kısaca açıklamak gerekirse; ifade1 doğru ise deyim1 yürütülür ve
program sonlanır. ifade1 yanlış ise ifade2 kontrol edilir eğer doğru
ise deyim2 yürütülür ve program sonlanır. Eğer o da yanlış ise
deyim3 yürütülür ve program sonlandırılır. Yani tüm kontroller yanlış
olsa bile eğer else kontrol deyimini kullanırsak mutlaka bir deyim
yürütülür.
Kontrol deyimleri ile kullanabileceğiniz operatörler
==: Eşittir
!=: Eşit değildir
>=: Büyük veya eşit
<=: Küçük veya eşit
! : Değil operatörü
&&:Ve (Bu işlecin her iki terimide doğru olduğu sürece deyimler
yürütülür. Aksi halde yürütülmez.)
||:Veya (Bu işlecin en az bir terimi doğru olduğu sürece deyimler
yürütülür. Aksi halde yürütülmez.)
Örnek ile göstermek gerekirse:
0 && 0 = 0
1 && 0 = 0
1 && 1 = 1
0 || 0 = 0
1 || 0 = 1
1 || 1 = 1
Bir ifadenin yanlış veya doğru olması ne demektir? if, while gibi
ifadeler belirli bir sonuç bekler ve buna göre ifadenin doğruluna
göre ya da yanlışlığına göre programcının belirlediği kodları
yürütürler. Burada "0" yanlış, sıfır dışı bir değer ise kontrol ifadeleri
tarafından doğru olarak kabul edilir. Yani;
int a = 5;
int b = 6;
if(a == b)
printf("Eşit")
else
printf("Değil");
komutunu yürüttüğümüzde "else" bloğunun çalıştığını görürüz. Şu
şekilde inceleyelim; "if" anahtarı bir değer bekliyor; bu değer ise (a
== b) ifadesi ile sağlanıyor. Burada == operatörü a sayısı b
sayısına eşit ise sıfırdan farklı bir değere, eşit değil ise 0 değerine
30
dönmektedir. Üretilen bu değer ise kontrol deyimleri tarafından
doğru ve yanlış olarak algılanıyor. Yani eğerki programımız şu
şekilde olsaydı;
int a = 5;
int b = 6;
if(1)
printf("Eşit\n")
else
printf("Değil\n");
ekranda "Eşit" yazısını görürüz. Çünkü ifadenin üretmesi gereken
değeri biz doğrudan kendimiz girmiş olduk. Girdiğimiz değer sıfırdan
farklı bir değer olduğu için if deyimi tarafından doğru olarak
algılandı. Yani eğer ki 1 değil de 100 girmiş olsaydık yine ekranda
"Eşit" yazısını görecektik. Daha iyi kavramak için örnek ile devam
edelim...
if deyimi kullanarak ilk programımızı oluşturalım.
//01.c
//01.c
//01.c
Switch Deyimi
Genellikle uzun ve karmaşık else if merdivenlerine alternatif olarak
kullanılır,kullanılmalıdır.Genel yapısı şu şekildedir:
{
switch(ifade)
{
case 1:deyim1;break;
case 2:deyim2;break;
case 3:
case 4:deyim3;break;
default:deyim4;
}
}
Yukarıdaki yapıyı inceleyecek olursak; ifade, 1'e eşit ise deyim1,2'ye
eşit ise deyim2,3 veya 4'e eşit ise deyim3, bunlardan hiç birine eşit
değilse deyim4 yürütülür. Burada daha sonradan bahsedeceğimiz
"break" anahtarı zorunlu değil sadece işlemden çıkmak amaçlıdır.
Örneğin ifade 2 sonucuna dönerse, case 2: bloğu yürütülür ve daha
sonra diğer bloklara geçilir. Diğer blokların da yürütülmeden sadece
case 2 bloğunu yürütüp çıkmak için break; anahtarını kullanıyoruz.
"break" anahtarının tek kullanımı switch - case yapıları değildir, diğer
işlevlerinden daha sonra bahsedeceğiz...
Switch deyimi kullanılarak yapılmış bir örnek:
//02.c
//02.c
//02.c
31
While Deyimi
Genel yapısı şu şekildedir:
{
while(ifade)
deyim;
}
Bu program x'e basana kadar devam eder.
//04.c
//04.c
//04.c
For Deyimi
En çok kullanılan döngü deyimidir. Genel yapısı şu şekildedir.
Eğer ifade doğru ise döngü başlar ve deyim yürütülür. Bu işlem
sürekli tekrarlar ta ki ifade yanlış oluncaya kadar. Eğer hiç bir zaman
ifade yanlış olmazsa döngüden çıkılamaz.Bu duruma sonsuz döngü
denir.
{
for(ifade1;ifade2;ifade3)
deyim;
}
While döngüsü kullanarak 0-100 arası tek sayıları ekrana yazdıralım:
//03.c
//03.c
//03.c
Döngü yapısına baktığımız 3 ifade görüyoruz. Bunları incelemek
gerekirse; ifade1 genel olarak başlangıç için kullanacağımız
değişkene ilk değer verdiğimiz kısımdır, yani for döngüsüne girildikte
sonra sadece bir kere yürütülür. ifade2 ise döngümüzün bel kemiği,
yani kontrol ifadesidir. Bu sebeple ifade2 doğru olduğu sürece deyim
yürütülür ve her iterasyonda kontrol edilir. ifade3 ise döngünün
gövdesindeki deyimler yürütüldükten sonra çalıştırılır ve her iterasyon
sonunda çalıştırılır. Genelde ifade1'de kullandığımız değişkeni
artırma veya azaltma işlemini burada yaparız.
For döngüsü ile oluşturduğumuz programa geçmeden önce basit bir
örnek versek daha iyi olur. Aşağıdaki döngülerin gövdesindeki
deyimler n kez yürütülür.
Do While Deyimi
Genel yapısı şu şekildedir:
{
do
deyim;
while(ifade);
}
Çalışma şekli while döngüsü ile aynıdır. Aralarındaki tek fark do
while döngüsü içerisindeki deyim en az bir defa yürütülür. Diğer bir
noktayada dikkat çekmek lazım do while döngüsünün sonunda ";"
sonlandırıcı atomu kullanılmalıdır.
32
//05.c
//05.c
//05.c
{
for(i = 0;i < n;i++)
}
{
for(i = 1;i <= n;i++)
}
for döngüsünde dikkat edeceğimiz nokta ";" atomlarıdır. Derleyici
"for" döngüsü gördüğü zaman iki tane ";" atomu arar. Bunlar
kesinlikle olmalıdır. Eğer ki bu atomlar arasında tanımlama
yapmayacak olsak bile derleyici tarafından bu atomları girmemiz
beklenir aksi halde hata alırız. Örneğin;
for(;;)
Bu kullanım geçerlidir ve sonsuz döngü yapmak için kullanılır. Ya da;
for(;i < n; ++i)
Şeklinde istediğimiz kısımları doldurabiliriz, fakat iki tane ";"
zorunluğunu tekrardan hatırlatalım. Ayrıca bu bölümleri virgül atomu
ile istediğimiz kadar genişletebiliyoruz. Mesela;
{
for(i = 0, j = 10;i < n;i++, --i)
}
Bunlar dışında koşul bölümünü de &&, || gibi mantıksal operatörler
ile genişletebiliriz. Daha iyi anlamak için örnek ile devam edelim...
For döngüsü ile abc=a +b +c
sayıları listeleyelim.
Break Deyimi
Döngülerde ve switch deyiminde kullanılır. Döngü içinde
karşılaşıldığında döngüyü sonlandırır. Switch deyiminde tam olarak
bunu yapmasada bahsettiğimiz üzere benzer bir görevi vardır.
Kullanımı şu şekildedir:
break;
Continue Deyimi
Break deyimine benzer bir görevi vardır. Farkı ise döngüyü
sonlandırmaz,yalnızca döngünün turunu bitmiş varsayar ve bir
sonraki iterasyona geçilir. Böylece döngü içindeki kendisinden sonra
gelen deyimler yürütülmez.Kullanımı şu şekildedir:
continue;
Goto Deyimi
Belirli bir koşul sonrasında bazı deyimleri yoksayarak atlama
yapmayı veya bazı deyimlerin tekrardan çalıştırılmasını sağlamak
amacıyla kullanılır. Böylelikle programın akışını istediğimiz noktaya
yönlendirebiliriz. Kullanım açısından etkili olabilse de okunabilirlik
açısından tavsiye edilmez. Genel yapısı şu şekildedir:
koşulunu sağlayan 3 basamaklı
33
{
goto etiket;
...
...
...
etiket:
deyim;
}
Kullanıcı adı ve şifre doğrulama programı. Şifre 3 kez üst üste yanlış girilirse program sonlanıyor.
//06.c
//06.c
//06.c
Bu dersimizin de sonuna geldik. Gelecek ay görüşmek üzere...
34
Merhabalar bu ay da aynı şekilde MySQL'e devam ediyoruz.
Öncelikle şunu belirteyim, aynı veri tabanı üzerinde çalışabilmek için,
"MySQL EK" dosyasında verilenleri oluşturmanız gerekiyor. Önce
ubuntu_tr & uyeler dosyasından başlamanız gerekiyor. Çünkü
kullanacağımız veri tabanını yarattığımız dosya o. Eğer içeriğine
bakarsanız demek istediğimi anlayacaksınız.
Ben aslında kolaylık olsun diye "ctrl + a" ile
hepsini
kopyaladıktan sonra "mysql>" satırına yapıştırmayı düşünüyordum
fakat "ubuntu_tr & uyeler" dosyasını tamamı ile kopyalayıp yapıştırınca
hep hata aldım. O nedenle bir kaç seferde yaparsanız (onar, on beşer
şekilde) daha sağlıklık olur. Sorun çıkmayacağını düşünüyorsanız
tümünü kopyalayıp deneyebilirsiniz, bir hata çıkarsa "drop" ile herşeyi
sıfırlayıp baştan alırsınız. Diğer dosyalar zaten fazla uzun olmadığı için
onlarda doğrudan "ctrl + a" ile kopyalayıp, "ctrl + shift + v" ile ya da
"farenin orta tuşu" SQL sorgu satırına yapıştırabilirsiniz (Tayfa
tablolarında kopyala yapıştır işleminden sonra enter'a ihtiyaç
duymamanız için fazladan bir satır boşluk bırakılmıştır).
Bu tabloları bu yazıyı takip etmek dışında pratik yapmak için de
kullanmanızı öneririm. Çünkü bir hata sonucunda bütün "ubuntu_tr"
veri tabanını silmek zorunda kalsanız bile geri dönüşü çok kolay
olacak... Bütün herşeye tekrar kopyala yapıştır ile ulaşabilirsiniz. O
nedenle rahat bir şekilde kurcalayabilin diye verdim. Çünkü ben de
çalışırken bir şey denemek için veri tabanı sıkıntısı yaşıyorum, elimizin
altında hemen yapılandırabileceğimiz bir veri tabanı olması kolaylık
sağlayacaktır.
Eğer bütün işlemleri eksiksiz yaptıysanız, "show databases;"
komutunda "ubuntu_tr"yi görmeniz gerekir. Ve tablolar şu şekilde
olmalıdır;
mysql> show tables;
+---------------------+
| Tables_in_ubuntu_tr |
+---------------------+
| AltYapi
|
| Ceviri
|
| FCM
|
| SUDO
|
| TT
|
| Wiki
|
| uyeler
|
+---------------------+
7 rows in set (0.00 sec)
Bu komutu vermeden önce "ubuntu_tr" veri tabanını seçmeyi
unutmayın. Şunu da not olarak düşeyim, "uyeler" ve tayfaların
bulunduğu tablolar tamamen kendi hayal ürünümdür, kişiler gerçek
ile alakasızdır. Ek olarak; daha fazla örnek veri olması için rapçilerin
gerçek isimlerinden ve mahlâslarından oluşan bir takım veri grubu
daha mevcut. İsimlerde bir yanlışlık varsa herkese karşı özürlerimi
şimdiden dile getireyim.
Bu yazıda, bir önceki yazıda öğrendiğimiz sorguları biraz daha
geliştirip bazı yeni komutlar da göreceğiz. Başlayalım... Öncelikle
şuradan başlayalım, oluşturduğumuz tabloların sorgu komutlarına
bakarsanız eğer, "kullanici_adi" alanlarında "unique" anahtarını
kullandığımızı göreceksiniz. Bunun nedeni, aynı kullanıcı adi ile birden
fazla kayıt olmasını önlemek...
35
ORDER BY
Şimdi öncelikle sorgu sonuçlarımızı biraz daha isteklerimiz
doğrultusunda geliştirelim. Sorgularımızı "select" ile alıyorduk. Örnek
söz dizimi şu şekildeydi;
mysql> select id, isim, soy_isim from uyeler where id < 10;
+----+-------------+-------------+
| id | isim
| soy_isim
|
+----+-------------+-------------+
| 1 | Satılmış
| Karabıyık
|
| 2 | Tayfun
| Yanardöner |
| 3 | Süheyla
| Canbasar
|
| 4 | Murat
| Gülbiçer
|
| 5 | Umurcan
| Tutumlu
|
| 6 | Emrah
| Kaçkın
|
| 7 | Serkül
| Canayakın
|
| 8 | Abdurrezzak | Çiçek
|
| 9 | Mahmut
| Yerebakar
|
+----+-------------+-------------+
Bu şekilde "uyeler" tablosundan "id", "isim" ve "soy_isim"
alanlarının değerlerini, "id" değeri 10'dan küçük olan sonuçlar için
istediğimizi bildiriyorduk. Koşulumuzu "where" ile sağladığımızı
hatırlatayım. Yani sorgudan "where id < 10" değerini çıkartsaydık
eğer, işlem yapılacak tablodan (yani "uyeler" tablosundan), istediğimiz
alanların ("id", "isim", "soy_isim" alanlarını istedik) bütün değerleri
dönecekti. Örneğin sonuçları kullanıcı isimlerine göre sıralamak
istiyoruz diyelim. Bu durumu "order by" ile sağlıyoruz. Aşağıdaki
komutu inceleyin.
mysql > select * from uyeler order by isim;
/*Çıktı çok uzun olduğu için yazıya eklemeye gerek görmüyorum*/
Bu sorgunun sonucunu "isim" alan değerlerine göre alfabetik
olarak görmeniz gerekiyor. "order by" anahtarından sonra gireceğiniz
alana göre sıralama yapılacağı çok açık. Küçükten büyüğe değil de
büyükten küçüğe sıralama işlemi için ise "desc" anahtarını
kullanacağız (alfabetik ya da nümerik fark etmiyor, daima büyükten
küçüğe ya da küçükten büyüğe sıralayabiliyoruz).
mysql> select * from uyeler order by isim desc;
mysql> select * from uyeler order by id desc;
İki komutun çıktısını incelerseniz nümerik (id) ve alfabetik (isim)
sıralamaya örnek göreceksiniz. "order by kıstas" ve "order by kıstas
desc" komutları ile kıstasımıza göre büyükten küçüğe ya da küçükten
büyüğe çıktı alabiliyoruz.
LIMIT
"limit" komutunu da "select" sorgumuzu şekillendirmek için
kullanacağız. Şimdilik!.. "limit" adından anlaşılacağı üzere çıktılarımıza
bir başka sınır getirmek için kullacağız. Aşağıdaki komutu inceleyin;
36
mysql> select * from uyeler limit 10;
mysql> select * from uyeler limit 5, 15;
+----+-------------+-------------+--------------------+
+----+-------------+------------+----------------------+
| id | isim
| id | isim
| soy_isim
| kullanici_adi
|
| soy_isim
| kullanici_adi
|
+----+-------------+-------------+--------------------+
+----+-------------+------------+----------------------+
|
1 | Satılmış
| Karabıyık
| sevdicegim
|
|
6 | Emrah
| Kaçkın
| Kaçardayakalanmaz
|
|
2 | Tayfun
| Yanardöner
| yanmasadan
|
|
7 | Serkül
| Canayakın
| Odane
|
|
3 | Süheyla
| Canbasar
| hopbaninna
|
|
8 | Abdurrezzak | Çiçek
| Gülüm
|
|
4 | Murat
| Gülbiçer
| Kara Murat
|
|
9 | Mahmut
| Yerebakar
| yürekyakmaz
|
|
5 | Umurcan
| Tutumlu
| Tulumlu
|
| 10 | Ahmet
| Sultan
| Atarlı
|
|
6 | Emrah
| Kaçkın
| Kaçardayakalanmaz
|
| 11 | Kamil
| Leventci
| otobur
|
|
7 | Serkül
| Canayakın
| Odane
|
| 12 | Semih
| Kemik
| Gubarek
|
|
8 | Abdurrezzak | Çiçek
| Gülüm
|
| 13 | Necmi
| Sami
| evetsayınseyirciler
|
|
9 | Mahmut
| Yerebakar
| yürekyakmaz
|
| 14 | Mualla
| Kezekli
| neala
|
| Sultan
| Atarlı
|
| 15 | Uğur
| Tapınak
| woodoo
|
| 16 | Kadir
| Denli
| nedenir
|
| 17 | Kayhan
| Haligüzel
| Gözünüyiyim
|
| 18 | Benay
| Şenay
| Kalbur
|
| 19 | Selahattin
| Keçi
| kırıkkıraks
|
| 20 | Semra
| Gözüpek
| pekican
|
| 10 | Ahmet
+----+-------------+-------------+--------------------+
Çıktı sanıyorum komutun şu anki işlevini tamamen açıkıyor...
"limit 10"; bu komut bizim sorgumuzu tam olarak 10 çıktı için
sınırlıyor. Gelen sonuçlar 10000 tane olsaydı da biz yine 10 tanesini
görecektik. Şu anda bir başlangıç noktası belirtmediğimiz için ilk
sonuçtan itibaren başlamış oldu çıktımız.
Sonuçların başlayacağı
aşağıdaki komutu inceleyin:
bir
orjin
noktası
belirlemek
için
+----+-------------+------------+----------------------+
Bu komut ile gelecek çıktıdan (select * from uyeler) ilk 5 sonucu
atıp geri kalan kısımdan ilk 15 sonucu göstermesini istiyoruz.
MySQL'de gördüğümüz hiçbir komut birbirinden bağımsız
değil, kendiniz de gördüğünüz komutları birleştirerek yararlı çıktılar
almaya çalışabilirsiniz.
37
mysql> select * from uyeler where id < 50 order by id desc limit 5,15;
+----+------------+-------------------+-----------------+
| id | isim
| soy_isim
| kullanici_adi
|
+----+------------+-------------------+-----------------+
Bu şekilde değişik kombinezonlarla gerekli olan bilgilere
ulaşabilirsiniz. Mesela bahsettiğim rapçiler "uyeler" tablosunda 36 - 54
id'leri aralığında bulunuyorlar. Şimdiye kadar baktığımız konulardan yola
çıkarak listedeki rapçileri ayıklayabilmeniz gerekir. Rapçiler:
| 44 | Server
| Uraz
| pit10
|
| 43 | Fuat
| Ergin
| fuat
|
+----+--------------------+-------------------+------------------+
| 42 | İlker
| Uncuğlu
| civciv
|
| id | isim
| 41 | Selahattin | Ergün
| selo
|
+----+--------------------+-------------------+------------------+
| 40 | Ekincan
| Arslan
| sansar salvo
|
| 54 | Raymond
| 39 | Esen
| Özyavuz (Güler)
| kolera
|
| 53 | Cordozar Calvin Jr | Broadus
| Snoop Doggy Dogg |
| 38 | Ayben
| Özçalkan
| ayben
|
| 52 | Andre Romlle
| Young
| Dr. Dre
|
| 37 | Yunus
| Özyavuz
| sagopa kajmer
|
| 51 | Oshea
| Jackson
| Ice Cube
|
| 36 | Bilgin
| Özçalkan
| ceza
|
| 50 | Tupac
| Shakur
| 2pac
|
| 35 | Sefa
| Cefasız
| melankolik
|
| 49 | Jonathan
| Simith
| lil jon
|
| 34 | Kaya
| Çulsuz
| çaylarbenden
|
| 48 | Curtis James
| Jackson
| 50 Cent
|
| 33 | Fehmi
| Selamsız
| cümleten s.a.
|
| 47 | Marshall Bruce
| Mathers
| eminem
|
| 32 | Savaş
| Oyunbozar
| ezbersiz
|
| 46 | Serhat
| Galatalı
| sirhot
|
| 31 | Işıl
| Sucan
| kucak
|
| 45 | Refik
| Yiğit
| pusat
|
| 30 | Mücella
| Teksoy
| canavar uzmanı
|
| 44 | Server
| Uraz
| pit10
|
| 43 | Fuat
| Ergin
| fuat
|
| 42 | İlker
| Uncuğlu
| civciv
|
| 41 | Selahattin
| Ergün
| selo
|
| 40 | Ekincan
| Arslan
| sansar salvo
|
| 39 | Esen
| Özyavuz (Güler)
| kolera
|
| 38 | Ayben
| Özçalkan
| ayben
|
| 37 | Yunus
| Özyavuz
| sagopa kajmer
|
| 36 | Bilgin
| Özçalkan
| ceza
|
+----+------------+-------------------+-----------------+
| soy_isim
| Ayala
| kullanici_adi
| Daddy Yankee
|
|
+----+--------------------+-------------------+------------------+
38
Tahmin edersiniz ki çıktıyı tersten (id=36'dan id=54'e doğru)
almanız da mümkündür. Ya da sadece Türkçe rapçileri
ayıklayabilmeniz gerekir:
+----+------------+-------------------+---------------+
| id | isim
| soy_isim
şekilde sıralayıp sonra iki tane kaydı gösterecektik. "select" yerine
"delete" kullanınca işlemimiz göstermek yerine silmeye yönelik oldu.
Yani şu şekilde değerlendirelim;
mysql> select * from uyeler;
| kullanici_adi |
+----+------------+-------------------+---------------+
| 36 | Bilgin
| Özçalkan
| ceza
| 37 | Yunus
| Özyavuz
| sagopa kajmer |
| 38 | Ayben
| Özçalkan
| ayben
|
| 39 | Esen
| Özyavuz (Güler)
| kolera
|
| 40 | Ekincan
| Arslan
| sansar salvo
|
| 41 | Selahattin | Ergün
| selo
|
| 42 | İlker
| Uncuğlu
| civciv
|
| 43 | Fuat
| Ergin
| fuat
|
| 44 | Server
| Uraz
| pit10
|
| 45 | Refik
| Yiğit
| pusat
|
| 46 | Serhat
| Galatalı
| sirhot
|
Komutu ile tablonuzadaki alan değerlerini inceleyin. Sonra;
|
+----+------------+-------------------+---------------+
"order by" ve "limit" komutları sadece sorgumunuzun çıktısını
şekillendirmek için değil diğer işlemlerimizde de daha detaylı
çalışmamızı sağlar. Örneğin koşullu olarak silmeyi öğrenmiştik.
"where" koşulu ve operatörler sayesinde istediğimiz kaydı belirtip
silebiliyorduk. Fakat her zaman "where" koşulu bizim için yeterli
olmayacaktır. Aşağıdaki komutu inceleyin:
mysql> delete from uyeler order by id desc limit 2;
Mantık çok basit, aynı "select" komutunda kullandığımız gibi.
"select" olarak düşünürsek; "uyeler" tablosunu önce "id" göre azalan
mysql> select * from uyeler order by id desc limit 2;
Komutunun çıktısına bakıp aşağıdaki komutu verin;
mysql> delete from uyeler order by id desc limit 2;
Sonra değişikliği görün. "select * from uyeler order by id desc
limit 2;" komutu ile gördüğünüz çıktıyı silmiş olmanız gerekir (Bu
özellik MySQL 4 ve daha yeni sürümler için geçerlidir).
JOIN
JOIN ifadesini, tabloların hangi sıralar ile birleştirileceğini
MySQL'e anlatmak için kullanıp çeşitli parametreler ile değişik koşullar
belirtebilmek için kullanacağız. Yani tanımdan da anlayacağınız gibi
tabloları birleştireceğiz. Öncelikle şu iki tabloyu incelemenizi öneririm:
mysql> select * from uyeler; select * from TT;
"join" ifadesini de yine örnek üzerinden anlatalım. Komutumuz:
mysql> select uyeler.id, isim, soy_isim, unvan from uyeler inner join TT
on uyeler.id = TT.id;
39
Şu kullanımı aslında zaten yapabiliyorduk şu an öğrendiklerimiz ile. Aşağıdaki komut ile aynı çıktıyı almanız gerekir:
mysql> select uyeler.id, isim, soy_isim, unvan from uyeler, TT where uyeler.id = TT.id;
Yani "inner join" komutuyla "where" komutunda olduğu gibi bir koşul (uyeler.id = TT.id) bildirmiş oluyoruz. Koşulu "on" ifadesi ile belirttiğimize
dikkat edin! "inner join" ile koşulun aranacağı tabloyu belirtip "on" ile de koşulumuzu belirtiyoruz. (bu kullanım için "on" yerine "where" yazarak
komutun çıktısına bakabilirsiniz). "join" ifadesinin bu ve bunun gibi bir çok kullanımı mevcut. Aşağıdaki komutu inceleyelim:
mysql> select uyeler.id, isim, soy_isim, unvan from uyeler left join TT on uyeler.id = TT.id;
+----+----------------+-------------------+-------------------+
| id | isim
| soy_isim
| unvan
|
+----+----------------+-------------------+-------------------+
| 1 | Satılmış
| Karabıyık
| Türkiye Tayfası |
| 2 | Tayfun
| Yanardöner
| Türkiye Tayfası |
| 3 | Süheyla
| Canbasar
| Türkiye Tayfası |
| 4 | Murat
| Gülbiçer
| Türkiye Tayfası |
| 5 | Umurcan
| Tutumlu
| Türkiye Tayfası |
| 6 | Emrah
| Kaçkın
| Türkiye Tayfası |
| 7 | Serkül
| Canayakın
| Türkiye Tayfası |
| 8 | Abdurrezzak
| Çiçek
| Türkiye Tayfası |
| 9 | Mahmut
| Yerebakar
| Türkiye Tayfası |
| 10 | Ahmet
| Sultan
| Türkiye Tayfası |
| 11 | Kamil
| Leventci
| Türkiye Tayfası |
| 12 | Semih
| Kemik
| Türkiye Tayfası |
| 13 | Necmi
| Sami
| NULL
|
| 14 | Mualla
| Kezekli
| NULL
|
| 15 | Uğur
| Tapınak
| NULL
|
| 16 | Kadir
| Denli
| NULL
|
| 17 | Kayhan
| Haligüzel
| NULL
|
| 18 | Benay
| Şenay
| NULL
|
| 19 | Selahattin
| Keçi
| NULL
|
| 20 | Semra
| Gözüpek
| NULL
|
| 21 | Cem
| Doğal
| NULL
|
40
Şeklinde uzayıp giden bir çıktı almanız gerekir. Bu kullanım
"uyeler" tablosunun hepsini sonuç olarak döndürüp, karşısına TT
tablosundan koşula uyanlar varsa değelerini karşısına yazdırıp, koşula
uymayanlar için "NULL" ataması yapar. Aynı şekilde işlemin tersi gibi
düşünebileceğiniz "right join" de mevcuttur.
mysql> select uyeler.id, isim, soy_isim, unvan from TT right join uyeler
on uyeler.id = TT.id;
mysql> select uyeler.id, isim, soy_isim, unvan from uyeler right join TT
on uyeler.id = TT.id;
Daha kolay anlamak için sağ ve sol tabloların farkını görmek
için yukardaki komutları ve çıktılarını da incelemenizde fayda var.
REPLACE
Kayıtlar üzerinde değişik yapmak için de tek seçeceğiniz
"update" değil. Alternatif olarak "replace" komutunu kullanabiliriz.
"replace" komutunun söz dizimi daha çok "insert" komutuna benzer.
mysql> replace into uyeler (id, isim, soy_isim, kullanici_adi) values
(58,"yeni","kayıt","oluşacak");
Gördüğünüz üzere, "insert into" dan tek farkı en baştaki komut.
Şimdi sorgunun ne işe yaradığına bakalım. "replace" ile verdiğimiz
komutta birincil anahtar değerine sahip bir alan eşleşirse bu kayıt
silinip ilgili değişiklikler yapılır. Eşleşen birincil anahtar olmazsa da
komut yeni kayıt ekler. Bizim tanımlamalarımızda "id" alanı birincil
anahtar görevini görüyor ("describe uyeler" komutunda "id" alanı için
"PRI" yazdığını görmelisiniz, bu durumu biz tabloyu yaratırken "id"
alanına "primary key" anahtarını ekleyerek sağlamıştık). Bu durumda
komutumuz; 58. değer varsa sil, yeni kaydı 58. olarak yerleştir, yoksa
yeni kayıt ekle anlamına gelmiş oluyor. Bizim 58 id numarasına sahip
bir verimiz olmadığı için, yeni kayıt eklemiş olduk. Çıktı sonuçlarında
gönderilen mesajlardan da; bir kayıt vardı bunun üzerinde mi
değişiklik yapıldı? Yoksa yeni kayıt mı eklendi? sorularının cevabını
alabiliriz. Mesela bizim 58 id numaralı bir kaydıdımız olmadığı için
"Query OK, 1 rows affected (0.00 sec)" gibi bir mesaj almamız gerekir.
Çünkü yeni bir kayıt ekleyerek sadece bir satırı etkilemiş oluyoruz.
Fakat 58. kayıt bulunsaydı "Query OK, 2 rows affected (0.00 sec)" gibi
bir geri dönüş almamız gerekirdi. Çünkü bu şekilde önce 58 numaralı
kaydı siliyoruz ve bu etkilediğimiz 1. satırımız, daha sonra yeni kayıt
ekleyerek 2 satırı etkilemiş oluyoruz. (Komutu iki kere üst üste vererek
"Query OK, 2 rows affected (0.00 sec)" çıktısını görebilirsiniz)
Burada dikkatimizi çeken noktanın şu olması lazım, "replace" ile
bir satır silinip, bir satır yeni bir satır ekleniyor. Yani aşağıdaki komut
ile kullanıcı adında değişiklik yapmaya kalkarsak:
mysql> replace into uyeler (id,kullanici_adi) values (52,"still dre");
istediğimiz değişikliği yapamayız. Burada birincil anahtar
eşleştirmesi "id" ile yapıldı. Komut bakacak, id numarası 52 olan bir
kayıt zaten mevcut. O zaman bu kaydı silip üzerine yeni satırı koyacak.
Fakat biz sadece kullanici_adi girmiş olduk. Bu durumda isim ve
soy_isim alanları "NULL" olarak geçilecektir. Bu komut ile değişiklik
yaptığınızda şu şekilde kontrol edin;
mysql> select * from uyeler where kullanici_adi = 'still dre';
Öğrendiğimiz komutların biraz değişik versiyonları üzerinde
duralım. Mesela "insert"... Bu komut ile tabloya bir veri eklemek için şu
söz dizimini kullanıyorduk:
41
mysql> insert into tablo_adi (alan1, alan2, alan3...) values (deger1,
deger2, deger3...);
"auto_increment"
tanımladığımız alanları da burada
belirtmiyorduk ve kendiliğinden arttılıyordu. Örneğin "uyeler" tablosu
için yeni bir kayıt eklemeyi aynı komutu biraz değiştirerek de
yapabiliyoruz, hangisi kolayınıza gelirse... Aşağıdaki komutu inceleyin:
mysql>
insert
into
uyeler
("","yeni_isim","yeni_soy_isim","yeni_kullanici_adi");
values
"uyeler" tablosunun ilk alanı (MySQL'de alan ve sütunu aynı
şekilde kullandığımızı hatırlatalım) auto_increment olarak tanımlanan
"id" sütunudur. O nedenle bu kısmı boş bıraktık, nasılsa arka planda
bazı şeyler kendiliğinden hallediliyor... Bundan sonrası ise bildiğimiz
şekilde sırası ile alanlara yerleştirme yapılıyor. Yani yukardaki komut
ile aşağıdaki komut tamamen aynı işleve sahiptir. Yalnız aynı anlama
gelen bu iki komutu arka arkaya verirseniz (hatta arka arkaya da
olmasına da gerek yok da) "ERROR 1062 (23000): Duplicate entry
'yeni_kullanici_adi' for key 'kullanici_adi'" gibi bir hata almanız gerekir.
"unique" anahtarını hatırlayın...
verirseniz "insert into" kamutunda olduğu gibi hata almazsınız. Çünkü
kayıt zaten varsa silinecektir. Bu nedenle "unique" anahtarı ile ilgili
durum ortadan kalmış olacaktır. Sonuç olarak iki komuttan da "Query
OK, 2 rows affected (0.00 sec)" gibi bir geri dönüş almalısınız.
Nedenini yukarda belirttiğimiz üzere 52 ID numaralı kaydımız zaten
var...
AS
Çıktılarımıza şekil vermek adına kullanabileceğimiz bir diğer
komut ise "as" komutudur. Bu komut ile tablolara ve alanlarımıza
yeniden isim verebiliyoruz. Şimdilik sadece sütunları göstereceğim.
Tablolara isim vermek biraz daha ilerde işimize yarayacak. MySQL'de
sütunlara isim vermek için Türkçe karakter kullanamıyoruz. Yani "İSİM"
adını verebileceğimiz bir tablo veya sütun oluşturamıyoruz.Aşağıdaki
komutu inceleyin;
mysql> select isim as 'İSİM', soy_isim 'SOYİSİM' from uyeler limit 5;
+-------------+-------------+
| İSİM
| SOYİSİM
|
+-------------+-------------+
mysql> insert into uyeler (isim, soy_isim, kullanici_adi) values
("yeni_isim","yeni_soy_isim","yeni_kullanici_adi");
Bu değişiklik replace komutu için de geçerlidir.
mysql> replace into uyeler (id, isim, soy_isim, kullanici_adi) values
(52,"SEN","BEN","still dre");
mysql> replace into uyeler values (52,"SEN","BEN","still dre");
Yani yukardaki iki komut aynı işleve sahiptir. Farkları tablolar
üzerinde deneyerek görebilirsiniz. replace'de iki komutu arka arkaya
| Satılmış
| Karabıyık
|
| Tayfun
| Yanardöner
|
| Süheyla
| Canbasar
|
| Murat
| Gülbiçer
|
| Umurcan
| Tutumlu
|
+-------------+-------------+
5 rows in set (0.01 sec)
42
Burada "as" komutunun işlevi dışında bir şey anlatmama gerek
yok sanırım, diğer bütün elemanlardan daha önceden bahsetmiştik.
Yani o kadar satır içinden neden 5 tane çıktı aldığımızı tahmin
ediyorsunuzdur. Burada "as" ile "isim" sütununu "İSİM" adı ile,
"soy_isim" sütununu ise "SOYİSİM" adı ile ekrana yazmasını söylemiş
oluyoruz. Yani aslında "soy_isim" ve "isim" tablolarının adını değiştirmiş
olmuyoruz, sadece çıktı için bir takma ad vermiş oluyoruz. Bu
Unix/Linux sistemlerdeki "alias" komutu ile kıyaslanabilir, tam olarak
işlevi aynı olmasa da bu şekilde kendi komutlarımızı oluşturduğumuzu
hatırlayın... "as" ile şimdilik bu kadar bilginin yanında ilerde daha
fazla işimize yarayacağını da bilmemizde fayda var...
Önceden öğrendiklerimizden "update" komutundan da biraz
bahsedebiliriz. "update" komutu ile var olan bir veriyi
değiştirebiliyorduk ya da buna güncelleme de diyebiliriz. Mesela id
değerinden yola çıkalım. id'si 1 olan kişinin id'sini 101 yapacağız gibi
bir örnekten yola çıkalım. Burada vermemiz gereken komut normalde;
mysql> update uyeler set id = 101 where id = 1;
Bu komutumuz işe yarayacaktır. Fakat her zaman sabitler ile
çalışmamız mümkün olmayabilir. Yani değeri 101 yapmak değil de
var olan değer üzerine örneğin 150 eklememiz gerekebilir. Bu
durumda önce bir sorgu ile var olan değeri çekip, daha sonra yeni bir
sorgu ile üzerine ekleme yapmak yerine doğrudan var olan değeri
kullanabiliriz. "update" bize böyle bir güzellik sunuyor. Komuta
bakalım:
mysql> update uyeler set id = id + 150 where id = 1;
Biz örneğimizin kalitesiz olması nedeniyle yine "id" değerini
bilerek işlem yaptık. Fakat normalde "update" komutunun bu haline
gerçekten ihtiyaç duyabilirdik. Ya da yine çok kaliteli olmasa da en
azından "id" değerini bilmesek de işlem yapabileceğimiz bir örnek de
yapabiliriz. Örneğin kullanici_adi "yanmasadan" olan kişinin id
değerini 200 arttırmak gibi...
mysql> update uyeler set id = id + 200 where kullanici_adi =
'yanmasadan';
İÇ İÇE SORGULAR
Evet... Biraz daha karışık konulara başladık diyebiliriz. Bu
başlık altında iç içe "select" ler ile tablolar oluşturup yeni
tablolarımızdan veri çekeceğiz. Şöyle başlayalım; "select" yapısını
gözden geçirerek:
mysql> select * from tablo_adi;
Burada * ile tablodaki bütün sütunları istediğimizi belirtiyorduk.
"from" ile de hangi tablodan veri çekeceğimizi belirliyorduk. Burada
tablo adımız bariz bir şekilde kendini gösteren "tablo_adi" oluyor. Yani
"from" dan sonra bir tablo adı girmemiz gerekiyor. Şimdi iç içe select
yapılarını inceleyelim:
mysql> select * from (select * from uyeler);
Burada örneğimiz tabi ki her zamanki gibi kalitesiz ama yine
bir o kadar açık bir örnek. Yapılmak istenen çok belli; önce "select *
from uyeler" komutu ile bir tablo oluşturup daha sonra bu tablodaki
her şeyi tekrar çekiyoruz. Fakat bu MySQL'de yanlış bir kullanımdır.
Neden? "Çünkü"sünü aslında bir önceki paragrafta belirttik. Bir önceki
43
paragraftan bildiğimiz gibi; from'dan sonra verileri çekebileceğimiz bir
tablo adı girmemiz gerekiyordu. Fakat "select * from uyeler" ile
oluşturduğumuz tablonun bir adı yok. Aslında oluşturduğumuz tablo
"*" parametresi ile "uyeler" tablosunun birebir aynısı oldu fakat sadece
uyeler tablosunun bir sütununu da çekebilirdik. Yani tek sütunlu bir
tablomuz olacaktı... Sonuç olarak aynısı veya bir bölümü fark etmiyor
çektiğimiz tablonun şu anda bir ismi yok gibi düşünebiliriz. Bu
durumda tahmin ettiğinizi tahmin ettiğim; "as" komutuna gidiyoruz
tekrardan...
mysql> select id, isim from uyeler as YENI;
Önce burada "as" komutunun işlevini hatırlatım; sütunlardan
bildiğimiz gibi "as" komutunu takma isim vermek için kullanıyorduk.
Daha önceden sadece sütunlara nasıl isim verildiğini görmüştük. Bu
örneğimizdeki şekilde de tablolara isim vermiş oluyoruz. Yeni
oluşturduğumuz tablo "uyeler" tablosunun bir kısmından oluşuyor
("uyeler" tablosunun "id" ve "isim" alanlarından oluşuyor). İşte biz bu
sorgumuz sonucunda elde ettiğimiz yeni tablomuza bir isim vermiş
olduk. uyeler tablosunun hemen hemen yarısından oluşan tablomuza
"YENI" ismini vermiş olduk. Şimdi aşağıdaki komutu inceleyelim;
mysql> select id from (select id, isim, kullanici_adi from uyeler limit 5)
as YENI;
Şimdi... Böl, parçala, yönet... Komutumuzu kısımlara bölelim ki
anlaması daha kolay olsun. Komutuzu aşağıdaki gibi sembolize
edelim;
mysql> a b as YENI;
a = "select id from",
b = "(select idi,isim,kullanici_adi from uyeler limit 5)". Komutumuzu
tersten giderek inceleyelim. Önce parantez içinde bir sorgu
göndererek 5 satır, 3 sütundan oluşan bir tablo oluşturuyoruz. Bu
tabloya bakarsak eğer aşağıdakine benzer olmalıdır.
mysql> select id, isim, kullanici_adi from uyeler limit 5;
+-----+-------------+---------------+
| id
| isim
| kullanici_adi |
+-----+-------------+---------------+
| 151 | Satılmış
| sevdicegim
|
| 202 | Tayfun
| yanmasadan
|
|
3 | Süheyla
| hopbaninna
|
|
4 | Murat
| Kara Murat
|
|
5 | Umurcan
| Tulumlu
|
+-----+-------------+---------------+
5 rows in set (0.00 sec)
Ana sorgumuzdaki b kısmı bu tabloyu oluşturuyor.
Oluşturduğumuz bu tabloya "as YENI" komutu ile yeni bir takma isim
veriyoruz. Komutumuzun a kısmı ise id sütununu çekmek için bir tablo
adı bekliyor. Komutu hemen hemen çözümledik, buraya kadar
komutun çözümlemesinde geldiğimiz nokta mantıken aşağıdaki gibi
olmalıdır;
mysql> select id from YENI;
YENI tablosunun da nasıl olduğunu biliyoruz. Bu durumda
komutumuzun yaptığı iş aşağıdaki tabloyu göstermek olacaktır:
44
Şimdi bu tablodaki bilgilere göre forumdaki bir kişinin Dergi
Tayfası'ndan olup olmadığına ve Dergi Tayfası'nda ise görevine
bakabiliriz.
mysql> select id from (select id, isim, kullanici_adi from uyeler limit 5)
as YENI;
+-----+
| id
|
+-----+
mysql> select FORUM_ID, ÜNVAN from (select uyeler.id as "FORUM_ID", SUDO.id
| 151 |
as "GÖREV_ID", SUDO.kullanici_adi as "KULLANICI_ADI", SUDO.unvan as "ÜNVAN",
| 202 |
|
3 |
|
4 |
|
5 |
SUDO.gorev as "GÖREV" from SUDO, uyeler where SUDO.kullanici_adi =
uyeler.kullanici_adi) as YENI;
+----------+----------------+
| FORUM_ID | ÜNVAN
+-----+
+----------+----------------+
5 rows in set (0.00 sec)
Yani "select" sorgularını iç içe kullanabilmemiz için içteki sorgularımızın
hepsine "as" ile yeni isimler atamak zorundayız. Bir örnek daha
yapalım:
mysql>
select
uyeler.id
as
"FORUM_ID",
SUDO.id
as
"GÖREV_ID",
SUDO.kullanici_adi as "KULLANICI_ADI", SUDO.unvan as "ÜNVAN", SUDO.gorev as
"GÖREV" from SUDO, uyeler where SUDO.kullanici_adi = uyeler.kullanici_adi;
Şeklinde bir tablo hazırlayalım. Çıktınız aşağıdaki gibi olmalıdır:
+----------+-----------+------------------+----------------+---------------+
| FORUM_ID | GÖREV_ID
| KULLANICI_ADI
|
| ÜNVAN
| GÖREV
|
+----------+-----------+------------------+----------------+---------------+
|
27 |
1 | beyoğlufaciası
| Dergi Tayfası
| Dergi Yazarı
|
|
26 |
2 | maden
| Dergi Tayfası
| Dergi Yazarı
|
|
28 |
3 | etilalkol
| Dergi Tayfası
| Dergi Yazarı
|
|
29 |
4 | hipermetrop
| Dergi Tayfası
| Dergi Yazarı
|
|
30 |
5 | canavar uzmanı
| Dergi Yazarı
| Dergi Yazarı
|
+----------+-----------+------------------+----------------+---------------+
|
27 | Dergi Tayfası
|
|
26 | Dergi Tayfası
|
|
28 | Dergi Tayfası
|
|
29 | Dergi Tayfası
|
|
30 | Dergi Yazarı
|
+----------+----------------+
Bu örneğimizde ilk önce SUDO tablosuna, kişilerin uyeler
tablosundaki id'lerini de ekleyerek yeni bir tablo oluşturduk. İkinci
komutumuzda bu yeni tablomuza "YENI" adını verip bunun içersinden
kişilerin id numaraları ve görevlerini çekmiş olduk. Örnek "as"
kullanımı ve iç içe sorgu olarak yeteri kadar açıklayıcı sanıyorum.
Aslında örneğin tek amacı budur, bazı kavramların daha iyi oturması.
Yoksa aşağıdaki komutun çıktısı da bize istediğimiz bilgiyi zaten
verecektir:
mysql> select uyeler.id, SUDO.unvan from uyeler, SUDO where
uyeler.kullanici_adi = SUDO.kullanici_adi;
45
IN
NOT
Şimdiye kadar öğrendiğimiz komutları kullanarak da
oluşturabileceğimiz çıktıları "in" ile çok daha kısa bir şekilde
oluşturacağız. in komutunun yapısını her zaman olduğu gibi komutlar
üzerinden görelim.
İstediğimiz koşulu sağlamayan sonuçları almak için "not"
komutunu kullacağız. Yani komut olarak görevinin İngilizce
anlamından pek bir farkı yok. İngilizce demişken "Ceviri" tablosundan
örnek verelim, öncelikle tablonun içeriğini görmek için "select * from
Ceviri;" ile kontrol etmekte fayda var. Daha sonra şu komutu verelim:
mysql> select * from uyeler where id = 3 or id = 4 or id = 5 or id = 6 or id
= 7;
mylsq> select * from Ceviri where id in (1,3,5,7,9);
+----+----------+------------+--------------------+
+----+----------------------+--------------------------+----------------------------+
| id | isim
| id | kullanici_adi
| soy_isim
| kullanici_adi
|
| unvan
| gorev
|
+----+----------+------------+--------------------+
+----+----------------------+--------------------------+----------------------------+
|
3 | Süheyla
| Canbasar
| hopbaninna
|
|
1 | evetsayınseyirciler
| Çeviri Tayfası
| Çeviri ve Proje Sorumlusu
|
|
4 | Murat
| Gülbiçer
| Kara Murat
|
|
3 | woodoo
| Çeviri Tayfası
| Çeviri Sorumlusu
|
|
5 | Umurcan
| Tutumlu
| Tulumlu
|
|
5 | Gözünüyiyim
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
|
6 | Emrah
| Kaçkın
| Kaçardayakalanmaz
|
|
7 | kırıkkıraks
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
|
7 | Serkül
| Canayakın
| Odane
|
|
9 | laklak
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
+----+----------+------------+--------------------+
+----+----------------------+--------------------------+----------------------------+
5 rows in set (0.00 sec)
5 rows in set (0.00 sec)
id değerlerinden 1 ve 2 olanı kasıtlı olarak
önceki örneklerden hatırlarsanız 1 numaralı id
numaralı id değerini ise 202 olarak değiştirmiştik.
etmiyor gerçi bu bizim için. Bir de aşağıdaki
inceleyelim:
seçmedim. Çünkü
değerini 151, 2
Çok da önem arz
komutun çıktısını
Buradaki komutu zaten biliyoruz. Sorgumuz id değeri parantez
içindeki değerlere eşit olan sonuçlar ile kısıtlanmış oldu. Durumun tam
tersini sağlamak için ise "not" komutunu kullanacağız. Kullanalım:
mysql> select * from Ceviri where id not in (1,3,5,7,9);
+----+---------------+--------------------------+--------------------+
mysql> select * from uyeler where id in (3,4,5,6,7);
| id | kullanici_adi | unvan
| gorev
|
+----+---------------+--------------------------+--------------------+
İlk komut ile aynı sonucu almanız gerekir. Bu kullanımda "in"
komutunun görevi; sorguyu "id" değeri parantez içindeki değerlere eşit
olan sonuçlar ile kısıtlamaktır. "in" komutunun tek kullanımı bu
değildir. IN/ANY/SOME gibi, bazı işinizi kolaylaştıracak anahtar
kelimeleri ayrıca öğrenmenizde fayda var.
|
2 | neala
| Çeviri Tayfası
| Çevirii Sorumlusu
|
|
4 | nedenir
| Çeviri Tayfası
| Çeviri Sorumlusu
|
|
6 | Kalbur
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
|
8 | pekican
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
+----+---------------+--------------------------+--------------------+
46
Çıktıdan anlayacağımız gibi koşulumuz tam tersi duruma
dönüşmüştür. Bunu sağlayan da "not" komutudur. Tabi "not" komutunu
"in" ile kullanma gibi bir zorunluluğumuz yok.
mysql> select * from Ceviri where
kullanici_adi = "evetsayınseyirciler" or
kullanici_adi = "neala" ;
+----+----------------------+------------------+----------------------------+
| id | kullanici_adi
| unvan
| gorev
|
+----+----------------------+------------------+----------------------------+
|
1 | evetsayınseyirciler
| Çeviri Tayfası
| Çeviri ve Proje Sorumlusu
|
|
2 | neala
| Çeviri Tayfası
| Çevirii Sorumlusu
|
+----+----------------------+------------------+----------------------------+
"and" ve "or" komutlarını irdelemek için güzel örnek. Aynı
komutu "or" ile verirsek neden bütün sonuçları görüyoruz? Komutumuz
bu:
mysql> select * from Ceviri where not
"evetsayınseyirciler" or not kullanici_adi="neala";
kullanici_adi
=
IS NULL?
Bu komut ile bir değerin "null" olup olmadığını anlayabiliyoruz.
"is null" ile "null" değerlendirmesi yapıyoruz. Bir önceki komutumuz ile
birleşmiş hali "is not null" ile de "null değil" değerlendirmesi
yapabiliyoruz. Aşağıdaki komutu inceleyelim:
2 rows in set (0.00 sec)
mysql> select uyeler.id, uyeler.isim, uyeler.soy_isim, gorev from uyeler
left join FCM on uyeler.kullanici_adi = FCM.kullanici_adi;
Şimdi koşulu tam tersine çevirelim.Deneyelim:
mysql> select * from Ceviri where not kullanici_adi = "evetsayınseyirciler"
and not kullanici_adi="neala";
+----+----------------+--------------------------+-------------------+
| id | kullanici_adi
| unvan
| gorev
|
Şimdi iç içe sorgu ile "is null" ve "is not null" komutlarını
birleştirerek yukarda oluşturduğumuz tablodan uyeler tablosunda olup
da tayfalarda görevi olanları ve olmayanları ayıralım. Yukarda
oluşturduğumuz tablomuza "YENI" ismini verelim ve önce FCM'de
görevi olanları bulalım.
+----+----------------+--------------------------+-------------------+
|
3 | woodoo
| Çeviri Tayfası
| Çeviri Sorumlusu
|
mysql>
|
4 | nedenir
| Çeviri Tayfası
| Çeviri Sorumlusu
|
uyeler.soy_isim, gorev from uyeler left join FCM on uyeler.kullanici_adi =
|
5 | Gözünüyiyim
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
FCM.kullanici_adi) as YENI
|
6 | Kalbur
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
+-----------+-----------+----------------------------+
|
7 | kırıkkıraks
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
| isim
|
8 | pekican
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
+-----------+-----------+----------------------------+
|
9 | laklak
| Çaylak Çeviri Takımı
| Çeviri Sorumlusu
|
| Seyfullah | Büyümez
| Çeviri ve Proje Sorumlusu
|
| Zehra
| Kalamış
| İmla Denetçisi
|
| Hüseyin
| Erkök
| Çeviri Sorumlusu
|
| Cihat
| Emekçi
| Çeviri Sorumlusu
|
+----+----------------+--------------------------+-------------------+
7 rows in set (0.00 sec)
select
isim,soy_isim,gorev
| soy_isim
from
(select
uyeler.id,
uyeler.isim,
where gorev is not null;
| gorev
|
+-----------+-----------+----------------------------+
47
Şimdi de TT'de görevi bulunmayan ve rapçi olmayan kişileri iç
içe select, where, is not null gibi komutları birleştirerek bulalım.
Rapçiler 36. sıradan itibaren başlıyorlardı. Fakat 1 ve 2 id numarasına
sahip kayıtları 151 ve 202 olarak değiştirmiştik. Sorgumuz aşağıdaki
gibi olacaktır;
mysql> select id, isim,soy_isim from (select uyeler.id, uyeler.isim,
uyeler.soy_isim, TT.gorev from uyeler left join TT on uyeler.kullanici_adi =
TT.kullanici_adi) as YENI where id < 36 and gorev is null or id = 202 and
gorev is null or id = 151 and gorev is null;
+----+------------+------------+
| id | isim
| soy_isim
|
+----+------------+------------+
| 13 | Necmi
| Sami
|
| 14 | Mualla
| Kezekli
|
| 15 | Uğur
| Tapınak
|
| 16 | Kadir
| Denli
|
| 17 | Kayhan
| Haligüzel |
| 18 | Benay
| Şenay
|
| 19 | Selahattin | Keçi
|
| 20 | Semra
| Gözüpek
|
| 21 | Cem
| Doğal
|
| 22 | Seyfullah | Büyümez
|
| 23 | Zehra
| Kalamış
|
| 24 | Hüseyin
| Erkök
|
| 25 | Cihat
| Emekçi
|
| 26 | Aziz
| Haklı
|
| 27 | Yusuf
| Beyoğlu
|
| 28 | Emre
| Ateşli
|
| 29 | Şaban
| Arıkovar
|
| 30 | Mücella
| Teksoy
|
| 31 | Işıl
| Sucan
|
| 32 | Savaş
| Oyunbozar |
| 33 | Fehmi
| Selamsız
|
| 34 | Kaya
| Çulsuz
|
| 35 | Sefa
| Cefasız
|
+----+------------+------------+
24 rows in set (0.00 sec)
Evet işte listemizde rapçi olmayıp aynı zamanda TT'de de bulunmayan
kişilerimiz bunlar. Bu çıktılara iç ice sorgular kullanmadan ya da daha
kısa sorgular ile de ulaşma imkanımız vardır fakat bu şekilde
karmaşıklaştırıp incelersek eğer bizim için yararlı olacaktır.
GROUP BY
Bu komut ile tablolarımızı belirli
gruplayacağız. Yine komut üzerinden gidelim;
kategorilere
göre
mysql> select gorev as "GÖREVLER" from TT group by gorev;
+--------------------------------------------+
| GÖREVLER
|
+--------------------------------------------+
| Forum Sorumlusu ve Genel Yönetici
|
| Genel Koordinatör ve Tayfa Sorumlusu
|
| Proje Sorumlusu
|
| İmla Denetçisi ve Koordinasyon Sorumlusu
|
+--------------------------------------------+
Gördüğünüz gibi "TT" tablosunun "gorev" alanını yine "gorev"
alanına göre gruplamış oluyoruz. Bu şekilde verilerinizi gruplayarak
tekrarlamayan çıktılar ile ilgilendiğiniz alanları daha rahat kontrol
edebilirsiniz.
HAVING
"group by" ile gruplanan tablolara koşul koymak için "having"
ifadesini kullanacağız. Mesela yukardaki tablomuza
"id" numarasına göre bir kısıt getirmek isteyelim:
48
mysql> select gorev as "GÖREVLER" from TT group by gorev having id
< 5;
ERROR 1054 (42S22): Unknown column 'id' in 'having clause'
+--------------------------------------------+
| Proje Sorumlusu
|
Şeklinde bir hata ile karşılaşmamız gerekir. "id" alanının
tanımlanamadığını söylüyor! Şu şekilde denesek:
| Proje Sorumlusu
|
| Genel Koordinatör ve Tayfa Sorumlusu
|
| İmla Denetçisi ve Koordinasyon Sorumlusu
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
| Forum Sorumlusu ve Genel Yönetici
|
mysql> select gorev as "GÖREVLER" from TT where id < 5 group by gorev;
+--------------------------------------------+
| GÖREVLER
|
+--------------------------------------------+
| Genel Koordinatör ve Tayfa Sorumlusu
|
| Proje Sorumlusu
|
| İmla Denetçisi ve Koordinasyon Sorumlusu
|
+--------------------------------------------+
Hata almadık. Hata almamızın nedeni, tablomuzu "group by"
gruplara ayırmadan önce koşul belirtmiş olduk. Buradan şunu
çıkartabiliriz, "group by" komutu select ile çektiğimiz ana tablomuzdan,
belirlediğimiz alana göre alt tablolar oluşturur. Bu durumda ilk
sorgumuzda "id" alanının tanımlanamaması hatasını almamız normal.
Çünkü dikkat ederseniz gruplanacak olan alt tablolar için "id" alanını
çekmiyoruz. Tekrar bakalım komuta:
| GÖREVLER
|
+--------------------------------------------+
+--------------------------------------------+
Gördüğünüz gibi MySQL id alanını bulamamakta haklı gibi...
Bu bilgiler ile komutumuzu şu şekilde değiştirip deneyebiliriz:
mysql> select gorev as "GÖREVLER", id from TT group by gorev having id < 5;
+--------------------------------------------+----+
| GÖREVLER
| id
|
mysql> select gorev as "GÖREVLER" from TT group by gorev having id
< 5;
+--------------------------------------------+----+
Burada önce TT tablosundan "gorev" alanını çekiyoruz
("GÖREVLER" olarak çekiyoruz). Daha sonra gruplamak için komut
veriyoruz. Bu durumda bizim gruplamaya çalıştığımız tablo aşağıdaki
tablodur:
| Genel Koordinatör ve Tayfa Sorumlusu
|
3
|
| Proje Sorumlusu
|
1
|
| İmla Denetçisi ve Koordinasyon Sorumlusu
|
4
|
+--------------------------------------------+----+
49
Bu sefer hata ile karşılaşmadık. Çünkü "group by" için koşul koyduğumuz tablo aşağıdaki gibi oldu:
mysql> select gorev as "GÖREVLER", id from TT;
+--------------------------------------------+----+
| GÖREVLER
| id |
+--------------------------------------------+----+
| Proje Sorumlusu
| 1 |
| Proje Sorumlusu
| 2 |
| Genel Koordinatör ve Tayfa Sorumlusu
| 3 |
| İmla Denetçisi ve Koordinasyon Sorumlusu
| 4 |
| Forum Sorumlusu ve Genel Yönetici
| 5 |
| Forum Sorumlusu ve Genel Yönetici
| 6 |
| Forum Sorumlusu ve Genel Yönetici
| 7 |
| Forum Sorumlusu ve Genel Yönetici
| 8 |
| Forum Sorumlusu ve Genel Yönetici
| 9 |
| Forum Sorumlusu ve Genel Yönetici
| 10 |
| Forum Sorumlusu ve Genel Yönetici
| 11 |
| Forum Sorumlusu ve Genel Yönetici
| 12 |
+--------------------------------------------+----+
Doğal olarak "id" alanının bulunaması gibi bir durum söz konusu değil.
Genel olarak işimize yarayacak çoğu şeyi yapabiliyoruz aslında bu yazıya kadar öğrendiklerimizle. Fakat büyük bir eksiklik hissetmeniz
gerekiyor şu an bildikleriniz için. Şimdiye kadar hiç fonksiyon kullanmadık. Bundan sonraki yazılarda fonksiyonlara yöneliriz, şimdilik bırakalım...
50
Her ay bildiğiniz üzere ubuntu sürüm isimlendirmelerine konu
olan hayvanları ele alıyoruz. Bu ayki hayvanımız 8.04 Hardy Heron
sürümüne ismini vermiş olan balıkçıl. En çok bilinen türleri Adi
balıkçıl, ak balıkçıl, kral balıkçıl, külrengi balıkçıl, erguvani balıkçıl,
gece balıkçıl, balaban balıkçıl, pabuç gagalı balıkçıl ve kaşıkçı
balıkçıldır.
Hayvanlar alemindeki bilimsel sınıflandırması ise şu şekildedir;
Alem: Animalia (Hayvanlar)
Şube: Chordata (Kordalılar)
Sınıf: Aves (Kuşlar)
Takım: Ciconiiformes (Leyleksiler)
Kendi aralarında irili ufaklı bir çok alt türü mevcuttur. Bu
nedenle boyları ve ağırlıkları da türler arasında farklılık
göstermektedir. Örneğin küçük ak balıkçıl 55-65 cm boyunda ve 350550 gram ağırlığında iken büyük ak balıkçıl 1 metre boyuna ve 1
kilogram ağırlığa kadar ulaşabiliyor. Kanat uzunlukları ise 120 cm
kadar olabiliyor.
Genelde tüyleri beyaz, gagaları sarı, ayakları ve bacakları
siyahtır. Balıkçılların uçuşları yavaştır. Uçuş sırasında ise boyunlarını
geri çekerler. Balıkçıllar da göçmen kuş türlerindendir.
Yaşam yerleri olarak sulak çayırları, su kıyılarını ve bataklıkları
tercih ederler. Beslenmeleri de yaşadıkları yere göre balık, yengeç,
kurbağa, fare ve böcek olarak değişir.
Balıkçıllar avlarını hareketsiz bir şekilde beklerler. Keskin
gagalarını balık, fare ve böcek gibi hedeflerine saplayarak avını
etkisiz hale getirir. Yani Keskin gagalarını birer zıpkınmış gibi
kullanarak avlarını şişlerler.
Familya: Ardeidae (Balıkçılgiller)
Cins: Ardea
Tür: A. alba
51
Su kıyılarında yüksek ağaçlar üzerinde, koloniler halinde
yuvalarını kurarlar. Genelde 3, 4 veya 5 yumurta yumurtlarlar.
Kuluçka zamanı ise 25 ve 30 gün arasıdır.
Balıkçıl yavrular ise ortalama 2 ay kadar kısa bir sürede kendi
başlarının çarelerine bakabilecek kadar büyür ve yuvalarını terk
ederler.
İnce uzun parmaklarının arasında yüzme perdesi yoktur. Orta
parmaklarının tırnağı ikiye ayrılmış olup tüylerini taramada tarak
vazifesini görür. İçi oyuk ince uzun gagalarının ucu da törpü gibi
dişlidir. Ayakları ile yetişemediği tüylerini gagaları ile tararlar.
Balıkçılların en ilginç özellikleri ise tek ayak üzerinde
uyumaları ve uçarken boyunlarını s harfi şeklinde kıvırmalarıdır.
Bu balıkçıllar o kadar akıllı ki Miami yakınlarındaki Lord
Adalarında yaşayan bir tür balıkçıl suya yem atarak balıkların
toplanmasını sağlıyor ve onları çok rahat bir şekilde avlıyormuş. Bu
şekilde avlanan balıkçıllar 25 dakikada bir düzine balık
avlayabiliyormuş.
Ubuntu sürüm isimlendirmelerine konu olan diğer hayvanlar
gibi balıkçılında soyunun tehlikede olması sebebi ile bir çok ülkede
kanunlar çıkarılmış. Bu kanunların işe yaraması sebebi ile olsa gerek
ki 1978 yılından itibaren bu kuş türünün sayısı artmaya başlamıştır.
Kaynaklar:
http://www.wikipedia.org/
52
Bu ayki En Güzel Masaüstü Yarışması'nın kazananı: 9NOM3
Duvar Kağıdı: http://sand-and-mercury.deviantart.com/art/Shelf-UI-Part-II-Clean-128474194
Sistem Simgeleri: http://gnome-look.org/content/show.php/ALLBLACK?content=70630
Emerald Teması: http://gnome-look.org/content/show.php/Grey+zafir?content=115970
GTK Teması: Ubuntu Studio Theme
Conky'ler: http://forum.ubuntu-tr.net/index.php/topic,170.msg267337.html#msg267337
Screenlets: http://gnome-look.org/content/show.php/Freemeteo+Weather+Screenlet?content=119253
53
Soldan Sağa:
1- StarOffice kaynak kodlarından yararlanarak
hazırlanan,MS Windows ve Unix sistemlerinde kullanılabilen
özgür yazılım.
3- Windows Live ile benzer bir arayüze sahip anlık
mesajlaşma programı.
CD/DVD kopyalamak ve imaj dosyası hazırlamak için
kullanılan bir GNOME uygulaması.
5-GLP lisansıyla kullanılan Mac OS,Unix ve MS
Windows sistemlerinde kullanılabilen
vektörel çizim
programı.
8- PS alternatifi grafik düzenleme programı.
Menü yerleşimi ve şeffaf görünümüyle MS Windows'a
benzetilen masaüstü ortamı
10-Hafif ve hızlı olarak tanımlanan, düşük özellikli
pc'ler için tavsiye edilen, Xubuntu için ön tanımlı masaüstü
ortamı
11- Dosya, klasör ve disk kriptolama için kullanılan
bir dizin şifreleme yazılımı.
Yukarıdan Aşağı:
2- Mor güvercin simgesiyle bilinen anlık mesajlaşma programı.
5- İnternet üzerinden görüntülü ve sesli konuşma için tercih edilen hem
MS Windows hem de GNU/Linux sistemlerde çalışan yazılım.
9- 3Ds Max alternatifi olarak GNU/Linux sistemlerde kullanılan
modelleme ve animasyon programı.
11- Pek çok eklentisi bulunan müzik ve video yürütme programı
13- GPL lisansıyla yayınlanan resim görüntüleme yazılımı.
15- RapidShare ve diğer benzeri siteler üzerinden kesintisiz yükleme
yapmaya yarayan bir yazılım.
Kare Bulmaca için Irmak Bıçakçıgil'e Teşekkür Ederiz.
54
Merhabalar, bu bölümde bildiğiniz gibi yine işinizi kolaylaştıracak
ipuçları vermeye çalışacağız. Doğrudan girelim konuya;
1.) Bilgisayarın çalışması esnasında süreçler birbirlerini çalıştırıp,
sonlandırabilir. Hatta bilgisayarın açılması dahi süreçlerin birbirlerini
çalıştırması ile gerçekleşen bir yapıya sahiptir. Çalışan süreç ve
uygulamaların bu durumunu hiyerarşik olarak görüntülemek için;
"pstree" komutu verip, kim kimi çalıştırmış öğrenebilirsiniz...
2.) "top" komutu ile çalışan programların CPU harcaması, Hafıza
kullanımı, PID numarası, komutu gibi bilgileri alabiliyoruz. Özellikle
belli kullanımlar için mesela sıralamayı CPU kullanımı ya da Hafıza
kullanımına göre süreçleri sıralama imkanımız var. "top" komutunu
verdikten sonra süreçleri izleyebildiğimiz sırada "P" tuşuna basarsanız
süreçler CPU, "M" tuşuna basarsanız hafıza kullanımına göre
sıralanacaktır. "N" ile de PID numaralarına göre sıralayabiliyoruz.
Burada harflerin büyük olması önemli çünkü örneğin "m" harfi başka
bir parametre olarak kullanılmaktadır. "man top" ile de diğer yararlı
parametreleri görebilirsiniz.
Süreçler ile ilgili bir başka yararlı komut ise "lsof -i :80" komutudur.
Örnek olarak verdiğimiz komut 80. portu kullanan süreçleri
göstermek için kullanılır. Bu parametreyi değiştirerek istediğiniz portu
kontrol edebilirsiniz. Http protokolü varsayılan olarak 80. portu
kullandığı için örnek komutu verdiğinizde tarayıcınızı görmeniz
gerekir...
3.) "mkdir /a/b/c/d" şeklinde bir "d" dosyası oluşturabilmemiz için üst
(parent) dizinlerin (bu örneğimizde a,b,c oluyor)
önceden
oluşturulması gerekiyor. yoksa hata alırız. Bu şekilde "a,b,c,d"
dosyalarının hepsini oluşturmak için -p parametresini eklememiz
yeterli olacaktır. Şu şekilde;
"mkdir
-p
Bu/komutile/bulunduğunuz/dizin/altında/istediğiniz/kadar/içiçe/dizin
/oluşturabilirsiniz".
(Tabi dosya oluşturabilmek için izninizin olması gerektiğini
unutmayın, en son örnek kodu Masaüstü klasörünüzde denerseniz
komutun kullanımını daha rahat göreceksiniz)
4.) "!" komutu; uçbirim geçmişi içersinde arama yapmamızı sağlar.
Kullanımı şu şekildedir; "!gcc" geçmişinizdeki gcc ile başlayan ilk
komutu çalıştırır.
"!?" komutu ise benzer bir göreve sahiptir. Aralarındaki fark "!"
komutu verdiğiniz kelime ile başlayan komutu çalıştırır, "!?" ise
verdiğiniz kelimeyi komutlar içersinde arayarak, anahtar kelimeyi
bulduğu ilk komutu yürütür. Şu şekilde;
"gcc sem0900.c -o sem0900" ve ardından "gcc SUDO.c -o SUDO" ile
iki komut girmiş olalım uç birimden. "!gcc" komutu "gcc" anahtarını
"gcc SUDO.c -o SUDO" komutunda gördüğü için bu komutu yürütür.
Fakat "!?sem0900" şeklinde komutumuzu girersek "gcc sem0900.c -o
sem0900" komutu çalışacaktır. Bu şekilde uçbirim geçmişinde arama
ile komutlarınızı çalıştırabilirsniz.
55

Benzer belgeler

PHP ile MySQL Veritabanı İşlemleri

PHP ile MySQL Veritabanı İşlemleri Bu amaçla dbconn.php adlı bir sayfa oluşturup bunu her sayfamızın başına include edelim. Bir PDO sınıfı tanımlanırken bir DSN “Data Source Name” ile belirtilir. Hangi veritabanı sürücüsüne bağlanıl...

Detaylı