55
Özgürlügün Sınırlarını Sen Belirle ! . - Mustafa AKGÜL ile Özgür Yazılım ve İnternet Yasakları üzerine..

Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

ÖÖzzggüürrllüüggüünn SSıınnıırrllaarrıınnıı SSeenn BBeelliirrllee !!..--

Mustafa AKGÜLile Özgür Yazılım

ve İnternet Yasakları üzerine..

Page 2: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Blender /Mehmet ERİBOL

Mustafa AKGÜL ile Linux ve İnternet Yasakları Üzerine... (Söyleşi)

C ile Programlama II /Aybars ÇAPAN

SQL II /Semetey COŞKUN

Heron /Aybars ÇAPAN

Kare Bulmaca

Ayın İp Uçları /Semetey COŞKUN

Linux Dünyasından Haberler

Y

Y

I

I

L

L

:

:

2

2

S

S

A

A

Y

Y

I

I

:

:

2

2

3

3

T

T

A

A

R

R

İ

İ

H

H

:

:

1

1

9

9

A

A

Ğ

Ğ

U

U

S

S

T

T

O

O

S

S

2

2

0

0

1

1

0

0

Sahibi:

UBUNTU TÜRKİYE

Dergi Tayfası / Yazarlar:

Semetey COŞKUN

Alev ERZURUMLU

Ufuk KILIÇASLAN

Aybars ÇAPAN

Tasarım:

Elif SUNGUR

Ömer YATĞIN

Ufuk KILIÇASLAN

Mehmet ERİBOL

Ramazan GÜRBÜZ

SUDO Dergisi,

GNU/GPL lisansı ile dağıtılmaktadır.

SUDO Dergi Tasarımında

Tamamen Özgür Yazılımlar Kullanılmaktadır.

BAOBAB /Alev ERZURUMLU

Dkopp /Alev ERZURUMLU

Alien /Alev ERZURUMLU

web: http://sudo.ubuntu-tr.org

e-posta: [email protected]

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.

Ayın Masaüstü Yarışması

Shotwell /Yiğit ATEŞ

Page 3: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 4: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

4

Broadcom, Açık Kaynak 802.11N Sürücüsünü Duyurdu!

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-next-

2.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 Linux-wireless e-posta listesinden

edinebilirsiniz.

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.

Page 5: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

5

-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-has-been-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

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-draftsight-coming-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.

Page 6: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

6

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.htmlhttp://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

Page 7: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Sayın Mustafa AKGÜL, öncelikle söyleşi isteğimizi kabul ettiğiniz

için teşekkür ederiz.

Türkiye'de Linux ve İnternet denildiğinde akla gelen sayılı

isimlerden birisiniz. Aynı zamanda akademisyen tarafınız da mevcut.

Sorularımıza buradan başlayalım.

Soru:Üniversitelerimiz Linux eğitimi konusunda ne düşünmekteler?

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

yapılmakta mıdır?

Cevap:

Üniversitelerimiz, henüz Linux'un pek farkında değiller. Geniş

bir araştırma yapmadım ama durum pek parlak degil. Duruma

Bilgisayar/Yazılım Mühendisliği, MIS, Bilişim Bölümleri, BÖTE

bölümleri ve Bilgi İşlem Daireleri olarak bakarsak:

7

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

yine azınlıkta.

e. Bilgi işlemler de Linux kullanımı Linux eğitiminden daha fazla. Bu

uzun yılların sonucunda ulaşılmış bir durum.

Tüm bu bilgiler için elimizde kapsamlı bir rapor yok. LKD'nin

böyle bir araştırmayı yapması ve her yıl güncellemesi güzel olur. Bunun

için bir miktar gönüllü ve uzman gerekir.

Yeterli çalışma Bilkent'te de yok. Bilgi İşlem yoğun olarak

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

Linux Sistem Yönetimi seçmeli ders.

Soru:Linux, ülkemizde ne yazık ki çok yaygın olarak

kullanılmamakta. Geçmişi düşündüğümüzde kat edilen yolu en iyi

bilenlerden birisi olarak neler düşünüyorsunuz? Sizce ilerleme ivmesi

yeterli mi? Bu bağlamda düşündüğümüzde ileriye yönelik olarak

Linux'un yaygınlaşması için neler yapılabilir? Bu konudaki şahsi

düşünceleriniz nelerdir?

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.

Kendisi şu sıralarda İNETD başkanığını

yürütmekte olup, internet yasakları ile mücadelede İNETD

olarak sık sık adından söz ettirmektedir.

Page 8: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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: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

katettiğini düşünüyor musunuz? Bundan sonrası için nasıl çalışmalar

yapılabilir ve Türkiye'deki diğer topluluklar nasıl konumlanmalıdır?

Cevap:

LKD Linux ve özgür yazılıma bir ivme vermeyi, tüm camia ile

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

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:

Dayanışma içinde, koordineli olarak çalışmak ve çok çalışmak.

Her topluluk bağımsızlığını korumalı ama aynı çatı altında işbirliği

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

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

yapmalıyız sorularına cevap almak için ayırmalıyız.

Page 9: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Soru: Yeni kullanıcıların Linux dağıtımı kullanma konusunda

çekinceleri hangi yollardan giderilebilir?

Cevap:

Ciddi bir eğitim, yardımlaşma ve destek ortamı kurarak. LKD

Linux listeleri bunu yapmaya çalışıyor. Bunu geliştirmeli ve bölgesel

Linux/özgür yazılım seminer ve sohbet toplantıları yapmalıyız. İlk

aşamada her üniversitede, her büyük ilde, EMO, TUBIDER, TBD'yi de

yanımıza alarak periyodik etkinlikler yapmalıyız. Bunlar farkındalık

yaratma, sorun çözme, "getir bilgisayarını Linux kuralım" gibi şekillerde

olabilir. İnsanların çekinmeden sorularını sorabileceği, cevabını hızlıca

alabileceği SSS (FAQ) ve benzer cevap mekanizmalarını sağlamamız

gerekir kanımca.

Soru:Ülkemizde Linux denildiğinde bu işin kıyısında köşesinde olan

herkesin aklına hemen Pardus projesi gelmekte. Pardus hakkındaki

kişisel görüşleriniz nelerdir? Sizce Pardus'un yürütmekte olduğu misyon

yeterli midir, değilse ne olmalıdır? Bu konuda Pardus'u başarılı buluyor

musunuz?

Cevap:

Pardus ülkemizde geliştiği ve arkasında büyük bir ulusal kurum

olduğu için insanımız kendisine daha sıcak bakıyor. Pardus'un ortaya

çıkışında ulusal güvenlik açısından sağlam bir işletim sistemi fikri yatar.

9

Pardus'un ev sahibi TÜBİTAK, maalesef özgür yazılımı anlayabilmiş bir

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

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

onların çok yabancısı olduğu konular. "Yağmıyorsan bile gürle"

deyiminin ifade ettiği noktada bile değiller. Başta askeriye olmak

üzere, pek çok kamu kurumunda az çok özgür yazılım olsa da, bu

genelde kurumsal bir tavır değil.

Pardus, kendi varlığını duyurmada başarılı. Bir ürün olarak da

oldukça başarılı olduğunu düşünüyorum. Bir bütün olarak projeyi

değerlendirmek pek o kadar kolay değil. Elimizde yeteri bilgi yok.

Özgür yazılım dünyasında önemli kişileri kendi bünyesine almakta

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

Pardus'u bırakıyor. Bu kendi başına kötü değil. İnsanlar menun olarak,

daha iyi kariyer olanakları için ayrılıyorsa ve yerine yeniler kolayca

bulunuyorsa, buna sevinmek lazım. Büyükçe bir ekiple, yoğun bir iş

temposunun insana katacağı çok şey vardır.

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

takınmalıdır, yoksa topluluklar Pardus'u bulunduğu yerde kabul ederek

bu yönde mi şekillenmelidirler?

Page 10: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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?

10

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.

Page 11: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Bunun dışında zaman zaman eğitim seminerleri düzenliyoruz.

Uzunca bir dönem LKD ile birlikte etkinlikler yaptik. Akademik Bilişim

ve inet-tr sırasında LKD ile işbirliği içinde eğitim seminerleri yapıyoruz.

Ayrıca, ülkemizde İnternet, Bilgi Toplumu ve e-devlet

konularında gelişmeleri izliyor, paneller yapıyor, bildiriler yayınlıyoruz.

Böylece kamuoyunu bilgilendirmeye ve ulusal politikların oluşmasına

katkıda bulunmaya çalışıyoruz.

Soru:İNETD olarak ülkemizde 5651 sayılı kanun kapsamında

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

mahkemelere yaptığınız suç duyuruları ile ilgili bir karar aldırabildiniz

mi?

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.

11

Adalet camiası genelde bilişime uzak. Yeni yeni bilişim savcıları

oluşuyor. Emniyette bilişim büroları kuruluyor. Hakimler genelde bu

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

hakimi ayrıca şikayet edecegiz. Suç duyuruları henüz sonuçlanmadı.

Üç yıllık mücadele sonucunda AİHM'ye dava açmanın dışında,

"İ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.

Gelişmiş Avrupa'da da bu saldırı sürüyor. Hepimizi ciddi sorunlar

bekliyor. Herkes hazırlıklı olsun, gelişmeleri takip etsin derim.

Soru:Youtube yasağını AİHM'ye taşıdınız. Bu taşıma esnasında ne gibi

zorluklarla karşılaştınız, bu süreç nasıl oluştu, şu anda ne durumda ?

Cevap:

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

Page 12: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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.

12

İ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.

Page 13: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 14: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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.

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

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.

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

Page 15: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

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.

15

Page 16: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 17: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

ç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ı KurShotwell 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

Page 18: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

2. Kaynak Kodunu İndirShotwell 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 KurShotwell'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ırmaShotwell'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

Page 19: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

19

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 Gnome Menü'den

başlattığınızda şöyle bir pencere görüntülenir.

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)

Page 20: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

20

öğ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.

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)

Uzak Tarama

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.

Page 21: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

21

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.

Page 22: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

22

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

Page 23: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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."

Öncelikli NotBu anlatımın orjinal kaynağında Debian Sarge, çevirisinde ise Ubuntu

Lucid Lynx kullanılmıştır. Her iki sistem için de aynı yöntem geçerlidir.

Alien YüklemesiAlien Debian ve Ubuntu depolarında bulunmaktadır, bu yüzden

aşağıdaki komut ile rahatlıkla yükleyebilirsiniz:

sudo apt-get install alien

.rpm'den .deb e Dönüştürme İşlemiŞimdi örnek olması için mysql-zrm rpm paketinin (1.1-1 bu makale

hazırlanırken kullanılan versiyondur) deb paketine dönüştürme işlemini

gerçekleştireceğiz.

/tmp klasörü altına geçiyoruz, siz elbette nerede isterseniz bu işlemi

yapabilirsiniz.

cd /tmp

Örnek dosyamızı indiriyoruz.

wget http://www.zmanda.com/downloads/community/ZRM-

MySQL/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

23

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.1-

1'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.

şöyle ki;

sudo dpkg -i mysql-zrm_1.1-1_all.deb

Bu komutun ardından mysql-zrm yüklenmiş ve tam olarak çalışır

durumda oluyor (ama siz yinede yüklediğiniz paketin ayar dosyalarına

bakmak isteyebilirsiniz..)

Eğer dpkg -i işlemini dönüştürme işlemimiz ile birlikte yapmak

istersenizde komutumuz:

sudo alien -i MySQL-zrm-1.1-1.noarch.rpm

Bu komut ile rpm paket .deb'e dönüştürülür ve hemen ardından

yüklenir.

Gördüğünüz üzere son derece kolay bir işlem. Alien'ın detayları için

ise;

man alien

Kaynaklar:

http://kitenet.net/~joey/code/alien/http://www.howtoforge.com/converting_rpm_to_deb_with_alien

Page 24: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 25: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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 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).

Ş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.

İ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

Page 26: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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.

İ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.

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

Page 27: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 28: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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

Page 29: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

29

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 boş bir bloğun tek başına

kullanılmasıyla oluşturulur.

Örnek:;

{}

Bileşik Deyim(compound statement)Birden fazla deyimin bir blok içinde oluşturduğu deyimdir.

Örnek: {

x = 5;

y++;

topla();

}

Kontrol DeyimleriAdındanda anlaşılacağı üzere programın akışını farklı noktalara

yönlendirmemizi sağlayan deyimlerdir.C dilinde bulunan kontrol

deyimleri şunlardır;

if deyimiwhile döngü deyimido while döngü deyimifor döngü deyimibreak deyimicontinue deyimiswitch deyimigoto deyimireturn deyimi

Page 30: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

30

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

if DeyimiC 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

Page 31: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

31

{

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

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 DeyimiGenellikle uzun ve karmaşık else if merdivenlerine alternatif olarak

kullanılır,kullanılmalıdır.Genel yapısı şu şekildedir:

Page 32: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

32

Bu program x'e basana kadar devam eder.

//04.c

//04.c

//04.c

For DeyimiEn çok kullanılan döngü deyimidir. Genel yapısı şu şekildedir.

{

for(ifade1;ifade2;ifade3)

deyim;

}

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.

While DeyimiGenel yapısı şu şekildedir:

{

while(ifade)

deyim;

}

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.

While döngüsü kullanarak 0-100 arası tek sayıları ekrana yazdıralım:

//03.c

//03.c

//03.c

Do While DeyimiGenel 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.

Page 33: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

33

//05.c

//05.c

//05.c

Break DeyimiDö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 DeyimiBreak 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 DeyimiBelirli 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:

{

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 koşulunu sağlayan 3 basamaklı

sayıları listeleyelim.

Page 34: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

34

{

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...

Page 35: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

35

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...

Page 36: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

36

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;

Page 37: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

37

mysql> select * from uyeler limit 10;+----+-------------+-------------+--------------------+| id | isim | soy_isim | kullanici_adi |+----+-------------+-------------+--------------------+| 1 | Satılmış | Karabıyık | sevdicegim || 2 | Tayfun | Yanardöner | yanmasadan || 3 | Süheyla | Canbasar | hopbaninna || 4 | Murat | Gülbiçer | Kara Murat || 5 | Umurcan | Tutumlu | Tulumlu || 6 | Emrah | Kaçkın | Kaçardayakalanmaz || 7 | Serkül | Canayakın | Odane || 8 | Abdurrezzak | Çiçek | Gülüm || 9 | Mahmut | Yerebakar | yürekyakmaz || 10 | Ahmet | Sultan | Atarlı |+----+-------------+-------------+--------------------+

Çı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ğı bir orjin noktası belirlemek için

aşağıdaki komutu inceleyin:

mysql> select * from uyeler limit 5, 15;+----+-------------+------------+----------------------+| id | isim | soy_isim | kullanici_adi |+----+-------------+------------+----------------------+| 6 | Emrah | Kaçkın | Kaçardayakalanmaz || 7 | Serkül | Canayakın | Odane || 8 | Abdurrezzak | Çiçek | Gülüm || 9 | Mahmut | Yerebakar | yürekyakmaz || 10 | Ahmet | Sultan | Atarlı || 11 | Kamil | Leventci | otobur || 12 | Semih | Kemik | Gubarek || 13 | Necmi | Sami | evetsayınseyirciler || 14 | Mualla | Kezekli | neala || 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 |+----+-------------+------------+----------------------+

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.

Page 38: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

mysql> select * from uyeler where id < 50 order by id desc limit 5,15;+----+------------+-------------------+-----------------+| id | isim | soy_isim | kullanici_adi |+----+------------+-------------------+-----------------+| 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 || 35 | Sefa | Cefasız | melankolik || 34 | Kaya | Çulsuz | çaylarbenden || 33 | Fehmi | Selamsız | cümleten s.a. || 32 | Savaş | Oyunbozar | ezbersiz || 31 | Işıl | Sucan | kucak || 30 | Mücella | Teksoy | canavar uzmanı |+----+------------+-------------------+-----------------+

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:

+----+--------------------+-------------------+------------------+| id | isim | soy_isim | kullanici_adi |+----+--------------------+-------------------+------------------+| 54 | Raymond | Ayala | Daddy Yankee || 53 | Cordozar Calvin Jr | Broadus | Snoop Doggy Dogg || 52 | Andre Romlle | Young | Dr. Dre || 51 | Oshea | Jackson | Ice Cube || 50 | Tupac | Shakur | 2pac || 49 | Jonathan | Simith | lil jon || 48 | Curtis James | Jackson | 50 Cent || 47 | Marshall Bruce | Mathers | eminem || 46 | Serhat | Galatalı | sirhot || 45 | Refik | Yiğit | pusat || 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 |+----+--------------------+-------------------+------------------+

38

Page 39: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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 | 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 |+----+------------+-------------------+---------------+

"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

ş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;

Komutu ile tablonuzadaki alan değerlerini inceleyin. Sonra;

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

Page 40: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Ş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

Page 41: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

Ş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

41

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:

Page 42: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

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 values

("","yeni_isim","yeni_soy_isim","yeni_kullanici_adi");

"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...

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

42

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 |+-------------+-------------+| Satılmış | Karabıyık || Tayfun | Yanardöner || Süheyla | Canbasar || Murat | Gülbiçer || Umurcan | Tutumlu |+-------------+-------------+

5 rows in set (0.01 sec)

Page 43: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

43

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

Page 44: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

44

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:

Page 45: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

45

mysql> select id from (select id, isim, kullanici_adi from uyeler limit 5) as YENI;+-----+| id |+-----+| 151 || 202 || 3 || 4 || 5 |+-----+

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ı |+----------+-----------+------------------+----------------+---------------+

Ş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 FORUM_ID, ÜNVAN from (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) as YENI;+----------+----------------+| FORUM_ID | ÜNVAN |+----------+----------------+| 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;

Page 46: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

46

IN

Ş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.

mysql> select * from uyeler where id = 3 or id = 4 or id = 5 or id = 6 or id = 7;

+----+----------+------------+--------------------+| id | isim | soy_isim | kullanici_adi |+----+----------+------------+--------------------+| 3 | Süheyla | Canbasar | hopbaninna || 4 | Murat | Gülbiçer | Kara Murat || 5 | Umurcan | Tutumlu | Tulumlu || 6 | Emrah | Kaçkın | Kaçardayakalanmaz || 7 | Serkül | Canayakın | Odane |+----+----------+------------+--------------------+

5 rows in set (0.00 sec)

id değerlerinden 1 ve 2 olanı kasıtlı olarak seçmedim. Çünkü

önceki örneklerden hatırlarsanız 1 numaralı id değerini 151, 2

numaralı id değerini ise 202 olarak değiştirmiştik. Çok da önem arz

etmiyor gerçi bu bizim için. Bir de aşağıdaki komutun çıktısını

inceleyelim:

mysql> select * from uyeler where id in (3,4,5,6,7);

İ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.

NOT

İ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:

mylsq> select * from Ceviri where id in (1,3,5,7,9);

+----+----------------------+--------------------------+----------------------------+

| id | kullanici_adi | unvan | gorev |

+----+----------------------+--------------------------+----------------------------+

| 1 | evetsayınseyirciler | Çeviri Tayfası | Çeviri ve Proje Sorumlusu |

| 3 | woodoo | Çeviri Tayfası | Çeviri Sorumlusu |

| 5 | Gözünüyiyim | Çaylak Çeviri Takımı | Çeviri Sorumlusu |

| 7 | kırıkkıraks | Çaylak Çeviri Takımı | Çeviri Sorumlusu |

| 9 | laklak | Çaylak Çeviri Takımı | Çeviri Sorumlusu |

+----+----------------------+--------------------------+----------------------------+

5 rows in set (0.00 sec)

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);+----+---------------+--------------------------+--------------------+

| id | kullanici_adi | unvan | gorev |

+----+---------------+--------------------------+--------------------+

| 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 |

+----+---------------+--------------------------+--------------------+

Page 47: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

47

Çı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 |+----+----------------------+------------------+----------------------------+

2 rows in set (0.00 sec)

Ş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 |+----+----------------+--------------------------+-------------------+| 3 | woodoo | Çeviri Tayfası | Çeviri Sorumlusu || 4 | nedenir | Çeviri Tayfası | Çeviri Sorumlusu || 5 | Gözünüyiyim | Çaylak Çeviri Takımı | Çeviri Sorumlusu || 6 | Kalbur | Çaylak Çeviri Takımı | Çeviri Sorumlusu || 7 | kırıkkıraks | Çaylak Çeviri Takımı | Çeviri Sorumlusu || 8 | pekican | Çaylak Çeviri Takımı | Çeviri Sorumlusu || 9 | laklak | Çaylak Çeviri Takımı | Çeviri Sorumlusu |+----+----------------+--------------------------+-------------------+

7 rows in set (0.00 sec)

"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 kullanici_adi =

"evetsayınseyirciler" or not kullanici_adi="neala";

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:

mysql> select uyeler.id, uyeler.isim, uyeler.soy_isim, gorev from uyeler

left join FCM on uyeler.kullanici_adi = FCM.kullanici_adi;

Ş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.

mysql> select isim,soy_isim,gorev from (select uyeler.id, uyeler.isim, uyeler.soy_isim, gorev from uyeler left join FCM on uyeler.kullanici_adi = FCM.kullanici_adi) as YENI where gorev is not null;+-----------+-----------+----------------------------+| isim | soy_isim | gorev |+-----------+-----------+----------------------------+| Seyfullah | Büyümez | Çeviri ve Proje Sorumlusu || Zehra | Kalamış | İmla Denetçisi || Hüseyin | Erkök | Çeviri Sorumlusu || Cihat | Emekçi | Çeviri Sorumlusu |+-----------+-----------+----------------------------+

Page 48: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

48

Ş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 kategorilere göre

gruplayacağız. Yine komut üzerinden gidelim;

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:

Page 49: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

49

mysql> select gorev as "GÖREVLER" from TT group by gorev having id

< 5;

ERROR 1054 (42S22): Unknown column 'id' in 'having clause'

Şeklinde bir hata ile karşılaşmamız gerekir. "id" alanının

tanımlanamadığını söylüyor! Şu şekilde denesek:

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:

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:

+--------------------------------------------+| GÖREVLER |+--------------------------------------------+| Proje Sorumlusu || 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 |+--------------------------------------------+

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 |+--------------------------------------------+----+| Genel Koordinatör ve Tayfa Sorumlusu | 3 || Proje Sorumlusu | 1 || İmla Denetçisi ve Koordinasyon Sorumlusu | 4 |+--------------------------------------------+----+

Page 50: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

50

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...

Page 51: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

51

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;

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 350-

550 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.

Alem: Animalia (Hayvanlar)

Şube: Chordata (Kordalılar)

Sınıf: Aves (Kuşlar)

Takım: Ciconiiformes (Leyleksiler)

Familya: Ardeidae (Balıkçılgiller)

Cins: Ardea

Tür: A. alba

Page 52: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

52

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/

Page 53: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

53

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

Page 54: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

54

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.

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ı.

Kare Bulmaca için Irmak Bıçakçıgil'e Teşekkür Ederiz.

Page 55: Mustafa AKGÜL - tilkinindilinden.files.wordpress.com · 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

55

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.