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