Pazar, Ağustos 26, 2007

Program Dilleri

Günümüzde programlar iki ana gruba ayrılıyor. Web tabanlı programlar ve masaüstü programlar. Web tabanlı programlar internet explorer veya firefox gibi bir web tarayıcı ile belirli bir adrese girerek çalıştırdığımız programlardır. Bunların en çok bilinen örnekleri bankacılık uygulamalarıdır. Havale yapmak, fatura ödemek için bankanın sunduğu bankacılık uygulamasını kullanırız. Web tabanlı programlar bir web sunucusunda yüklüdür ve ayrıca kullanan kişilerin bilgisaylarına yüklenmesi gerekmez. Ajax'ın teknolojisi yaygınlaşana kadar kullanımı konforlu web uygulamaları yazmak pek mümkün değildi ancak Ajax ile masaüstü uygulamalarına yakın konfora sahip uygulamalar gerçekleştirilmeye başlandı. Web tabanlı programların bence en önemli iki dezavantajı ajax'a rağmen yüksek konfora sahip uygulamalar yazılmasının zorluğu ve masaüstü uygulamaları kadar gelişmiş geliştirme ortamları olmadığı için bir nebze geliştirme zorlukları olması. Web tabanlı program bileşenlerinin de çok yaygın olmayışı yine bir dezavantaj.
Masaüstü uygulamaları ise normal bilgisayara yükleyerek ve exe'si ile çalıştırdığımız programlardır. Bilgisayarımızda yüklü, hesap makinesi, paint, word gibi programları örnek olarak verebiliriz. Masaüstü uygulamaları bilgisayarın her türlü özelliğinden tam olarak faydalanabildiği için konfor seviyesi yüksek programlar yazmak mümkündür. Masaüstü programlarının en önemli dezavantajı kullanılacak her bilgisayara yüklenmesinin gerekmesi ve çok fazla sayıda kullanıcının kullanacağı merkezi uygulamalar geliştirme zorlukları olmasıdır.

Her iki program şeklinin dezavantajları olarak kabul ettiğim konular için önerilen çeşitli ara çözümler olsa da henüz tam olarak oturmuş bir teknoloji bulunmamaktadır.

Günümüzde diller kadar programı yazmak için kullandığımız geliştirme ortamları da (IDE) önem kazanmıştır. Dili bilen notepad ile bile program yazabilse de geliştirme ortamları daha doğru ve hızlı program yazabilmemizi sağlayacak birçok araç içerirler. PHP web programları yazmak için kullanılan yaygın bir dildir. PHP için ücretli, ücretsiz birçok alternatif olsa da Zend Studio çok popüler bir geliştirme ortamıdır. Program yazma, hata ayıklama, analiz ve optimizasyon işleri için birçok faydalı araç sunar. Diğer bir popüler web uygulaması geliştirme ortamı Microsoft Visual Studio 'dur. ASP.Net teknolojisi kullanılarak güçlü web programları oluşturulabilir. Dil olarak C#veya Visual Basic gibi alternatifler vardır. Codegear firması da Delphi for PHP ile piyasaya fiyakalı bir giriş yapmış ve oldukça dikkat çekmiştir.

Masaüstü programları yazmak içinse Java, C++, C#, Visual Basic, Object Pascal gibi diller kullanılır. Java için Eclipse, C++, C# ve Visual Basic için Visual Studio, Object Pascal içinse Delphi en popüler geliştirme ortamlarıdır. Java ile C# arasında kıyasıya rekabet olsa da Object Pascal dilinin kendine özgü önemli bir topluluğu vardır.

Program yazmayı öğrenmek için bilgisayar kursları iyi bir başlangıç gibi görünse de sadece eğitim ile birşeyler öğrenebilmek çok zordur. Kurslar kişiyi sadece işin içine sokar. Gerisi tamamen kişisel çabaya ve sabahlanan gün sayısına bağlıdır. Kimi uzmanlar iyi programcıların yetişmesi için en az 10 yıl gerektiğini söylerler. 10 yıl gerçekten gerekir mi çok emin değilim ama sabırla çalışma mutlaka sonuç verecektir.

Pazar, Ağustos 19, 2007

Gerçek Satışçılardan 200 Satış Tavsiyesi

Günümüzde satış yapmak çok beceri isteyen bir iş haline geldi. İyi bir ürüne sahip olmak, çok iyi ilişkiler kurmak, çok iyi bir müşteri portföyüne sahip olmak gibi önemli unsurlar bile her zaman tek başına yeterli olamıyor. Rekabet artık hemen her sektörde yüksek. Rekabetin nispeten daha düşük olduğu alanlarda ise hızla yükseliyor. Hemen her türlü şirket benzer hizmetleri zaten sağladığı için alternatif satış yöntemlerine giderek daha çok ihtiyaç duyuluyor. Satışçılar eskiden çok önemli bir bilgi kaynağı olduğu için müşterilerin zaman ayırdığı kişilerdi. Özellikle internet satılan her türlü ürünle ilgili çok detaylı bilgi sağladığı için müşteri çoğunlukla almak isteyebileceği her türlü ürünle ilgili zaten yeterince bilgi sahibi. Bu durum artık müşteriden randevu koparmayı bile iyice zorlaştırmış durumda. Müşteri ürünle ilgili pozitif ve negatif her türlü bilgiyi kendisi toplayıp, alacağı ürüne kendisi karar verme eğiliminde. Müşteriyle görüşmek, müşteriyi ikna etmek, müşterinin geri aramasını sağlamak gerçekten zor. Bu ortamda satış yaparken uygulayabileceğiniz pratik ve etkili tekniklere hiç ummadığınız anda ihtiyacınız olabilir.

Gerçek Satışçılardan 200 Satış Tavsiyesi kitabı müşteriyi görüşmeye ve satışa ikna etme konularında çok değerli 200 tavsiye içeriyor. Kitap 266 sayfa ve her tavsiye 1-2 sayfa sürüyor. Kitap ingilizceden çeviri olduğu için çevirmen zaman zaman tavsiyelerin altında küçük notlar koyarak konunun daha iyi anlaşılmasını sağlamış. Yazar kendi tavsiyelerini değil görüştüğü gerçek satıcılardan öğrendiği tavsiyeleri anlatmış. Her bir tavsiye bir noktasında gerçekten yaratıcılık içeren küçük hikayeler şeklinde verilmiş. Zaman zaman ortasından biryerinden açıp bir iki hikaye okumak mümkün. Ayrıca bazı hikayelerin başında hikayeyi tamamlayıcı güzel sözlere de yer verilmiş. Okundukça zihinde yer ederek bir bilgi dağarcığı haline gelecek ve ihtiyacınız olduğu anda hemen yardımınıza koşacak.

Müşteriyle telefonda konuşurken karşısına ayna koyan, müşterisinden randevu koparabilmek için otoparkta buluşmayı teklif eden, satış yapmayı düşündüğü şirketin önce kapıcısını tavlayan bu yaratıcı insanların hikayelerini okurken eğlenecek, eğlenirken de aklınızda tutmak isteyeceğiniz birçok şey öğreneceksiniz.

Yazar: Gerhard GSCHWANDTNER (bir yanlışlık yok :)

Cuma, Ağustos 17, 2007

Cilt Yumuşatma Tekniği

Photoshop ile cilt yumuşatma üzerinde en çok çalışma yapılan fotoğraf rötuşlama tekniğidir. Dior efekti denen aşırı yumuşatma tekniklerini gözardı edersek cilt yumuşatmada esas insan derisinin dokusuna zarar vermeden yumuşatma yapmaktır. Bilinen yumuşatma tekniklerinin çoğu pixellere zarar vererek doğal olmayan bir görüntü oluşturur. Bu yazımızda çok kullanışlı ve çabuk uygulanabilen bir yumuşatma tekniğini inceleyeceğiz. Örnek olarak aşağıdaki fotoğrafı kullanacağız.

Yapacağımız uygulamanın ardından ciltte daha yumuşak bir doku oluşmasını sağlayacağız.
1. Öncelikle Alt+J ile alt katmanın bir kopyasını oluşturuyoruz.
2. Yeni katmanda Gaussian Blur efektine giriyoruz. Çalışmanın önemli noktası burası çünkü uygulayacağımız değerler her fotoğrafta değişik olacak. Ciltteki gözenekler kaybolana kadar Radius değerini arttırıyoruz. Gözeneklerin kaybolduğu değeri aklımızda tutarak Gaussian Blur efektini iptal ediyoruz. Yani filtreyi uygulamadan çıkıyoruz. Bu adımı bir sonraki filtre için kullanacağımız değeri bulmak için gerçekleştirdik. Benim örneğimdeki değer 9 idi.
3. High-Pass filtresine girerek bir önceki adımda aklımızda tuttuğumuz Radius değerini bu filtreye giriyoruz ve filtreyi uyguluyoruz. Bu fotoğraf için ben 9 değerini verdim.
4. Aynı katmanda Gaussian Blur efektine girerek aklımızda tuttuğumuz radius değerinin 1/3 'ini uyguluyoruz. Benim örneğim için 3 değerini girdim.
5. Alt+i ile katmanı invert ediyoruz.
6. Katman blending modunu "Linear Light" olarak değiştiriyoruz ve Opacity değerini %50 olarak veriyoruz.
7. Özellikle yüz çerçevesinde çift çizgiler oluştuğunu görebiliriz. Layer penceresinin altındaki ortasında beyaz daire olan kare şeklindeki simgeye Alt tuşuna basarak bir katman maskesi ekliyoruz. Katman ikonunun yanındaki siyah dikdörtgene tıklıyoruz ve beyaz fırça ile efekti uygulamak istediğimiz alanları boyuyoruz.

Ben şöyle bir sonuç elde ettim.

Gördüğünüz gibi derinin gerçek dokusuna zarar vermeden bayağı bir temizlik yapmış olduk. Tekniğin etkisini biraz daha yakından inceleyelim. İlk fotoğraf orjinali, ikincisi ise elde ettiğimiz sonuç.
Teknik gerçekten çok etkili. Göz altındaki tüyler bile duruyor. Bu sonuç üzerinde başka yumuşatma teknikleri de uygulayarak daha farklı sonuçlar elde edebilirsiniz. Cilt hasarlarını yumuşatma haricinde aynı teknik sivilce temizleme gibi işler için de faydalı olabilir. Photoshop gerçekten sınırları olmayan bir program. Yıllardır hobi amaçlı bu programı kullandığım halde devamlı yeni ve ilginç teknikler görüyorum. Yeni ve ilginç photoshop teknikleri öğrendikçe buradan yayınlayacağım.

Veritabanı Mantığı

SQL diline geçmeden önce veritabanı sunucu programlarının veriyi nasıl tuttuğu ile ilgili kısa bir gözden geçirme yapalım. Bir veritabanı sunucu programını normal herhangi bir program gibi bilgisayara kurarız. Genellikle sunucu programlar kurulduğu gibi kullanıma hazır olurlar ama ciddi sistemler için bazı güvenlik, ağ konfigürasyonu gibi ayarlar yapmak gerekebilir. Veritabanı programının kurulduğu bilgisayara veritabanı sunucusu deriz. Klasik iki katmanlı yapıda programlar direk olarak veritabanı sunucusuna bağlanarak veri okuma ve yazma işlerini yaparlar. Bu okuma yazma işlerini yapan programların yüklü olduğu bilgisayarlara ise istemci deriz. İstemci bilgiyi ister, sunucu bilgiyi sunar. Bazen sunucuya hizmetçi, server, ana makine gibi isimler de verilir.

Veritabanı sunucusunda birden fazla veritabanı açılabilir. Birden fazla programın veritabanı aynı sunucu içerisinde barınabilir. Her program en az bir tane veritabanına bağlanır. Veritabanı veriyi tablolar halinde tutar. Bir tablo alanlardan (fields) oluşur. Her alanda ne tür bilgi tutulacağı belirlenir. Mesela müşteri bilgilerinin tutulacağı bir tabloda müşteri adı, son alışveriş tarihi, kimlik numarası gibi bilgiler tutulur. Müşteri tablosu oluşturulurken, "müşteri adı" alanı 50 karakter metin bilgisi tutacak, "son alışveriş tarihi" alanı tarih bilgisi tutacak, "kimlik numarası" alanı sayı bilgisi tutacak gibi tanımlamalar yapılır. Bu alanlar tablomuzun bir anlamda sütunlarıdır. Bu tanımlamaları veritabanı programını kullanarak veya direk SQL ile programımızın içinden yapabilmemiz mümkündür. Yani SQL ile yeni bir veritabanı tanımlayabilir ve o veritabanının içinde bir tablo yaratabiliriz. Kısacası tablo yaratırken önce "müşteriler" gibi bir tablo ismi veririz, sonra da tablodaki alanları açarız ve tiplerini belirleriz.

Tablonun alanlarından (sütunlarından) sonra ikinci önemli kısmı satırlarıdır. (Records) Modern veritabanı sistemlerinde teoride satır sayısı (kayıt sayısı) sınırsızdır. Pratikte ise veritabanı sunucusunun bellek, işlemci ve sabit disk kapasitesi bu sayıyı sınırlar. Bazı veritabanı sunucularının ücretsiz sürümlerinde ise büyük de olsa bir sınır vardır. Kayıt ekleme işi için yine SQL dilini kullanırız. Kayıt eklerken dikkat edilmesi gereken en önemli konu eklediğimiz kayıttaki bilgilerin tablodaki veri tiplerine uyumlu olmasıdır. Tarih bilgisi tutacak bir alana sayı bilgisi yazmaya çalışırsak bir hata oluşmasına neden oluruz.

Tabloların üçüncü önemli kısmı indekslerdir. İndeksler birçok işe yarar. Birincisi indeksler yardımıyla kayıtlar sıralanır. Örneğin Müşteriler tablomuzda "müşteri adı" alanı için bir indeks yaratırsak tablomuzdan müşteri kayıtlarını okurken kayıtlar "müşteri adı" alanına göre alfabetik olarak sıralanır. Aslında doğruyu söylemek gerekirse SQL sayesinde indeks yaratmamış olsak bile kayıtları belli bir alana göre sıralı okumak mümkündür ama indeksi olmayan bir alana göre sıralama yaparsak kayıt okuma işlemi çok yavaş çalışacaktır.

İstersek yine indeksleri kullanarak tablomuzdaki bazı alanların benzersiz kayıtlar içermesini sağlayabiliriz. Bu şu anlama gelir. Müşteriler tablomuzda aynı kimlik numarasına sahip iki kayıt açılmasını istemeyebiliriz. Bu durumda kimlik numarası alanı için bir tekil indeks (unique index) açarız. Eğer aynı kimlik numarası içeren iki kayıt açmaya kalkarsak veritabanımız bize programımızda bir uyarı çıkartma imkanı verecektir.

İndekslerin üçüncü kullanım alanı tablo ilişkileri yaratmaktır. Örneğin müşteriler tablomuzda müşterimizin bulunduğu şehri tutacağımız bir alan eklemek isteyelim. Şehir isimleri metin bilgisi olmalıdır. Ankara, Afyon, Mardin gibi. Eğer bu şehir isimlerini her kaydımıza eklersek bu durumda tablomuzun boyu büyüyecektir. İstersek şehir isimlerini başka bir tabloda tutarak müşteriler ve şehirler tablolarımız arasında bir ilişki yaratabiliriz. Şehir isimlerini şehirler tablosuna eklerken her şehir kaydına bir kayıt numarası verilir. 1 Adana, 2 Afyon gibi. Müşteriler tablosunda ise Şehir alanına şehir adını değil kayıt numarasını kaydederiz. Böylelikle Adana bilgisi yerine 1, Afyon bilgisi yerine 2 bilgisini tutarız. Sonra kayıtları okurken SQL ile bu ilişkiyi söyleriz. Bu ilişkiden haberdar olan veritabanı sunucusu müşteri bilgisini sunarken Şehir alanında kayıt numarasını değil Şehir Adını gösterir. Bu bire-bir bir ilişkidir.

Bire-bir ilişki tipinden başka ilişki tipleri de vardır. Örneğin müşteri kayıtları ve müşterilerden alınan siparişler ayrı tablolarda tutulur. Siparişler tablosunda tüm müşterilerden alınan siparişler durur. Her müşterinin birden fazla siparişi olabilir ama bir sipariş en çok (ve en az) bir müşteriye ait olabilir. Bu yüzden bu ilişkiye birden-çoğa denir. Siparişler kaydedilirken ilişki kurulabilmesi için sipariş kaydına müşteri kayıt numarası da yazılır. Örneğin A müşterisinin siparişleri tabloda 1 kayıt numarası ile, B müşterisinin siparişleri ise 2 kayıt numarası ile tutulur. A müşterisinin siparişlerini okumak için siparişler tablosundan müşteri numarası 1 olan siparişleri okumamız gerekir. Yine SQL ile bu ilişkiyi bildirdiğimizde sunucumuz ilgili bağlantıları yaparak kayıtları istediğimiz şekilde okuyabilmemizi sağlayacaktır. SQL dilinin özelliklerini incelemeye başladığımızda bu konular daha çok netlik kazanacaktır.

Bu ön bilgilerden sonra gelecek günlerde SQL dilinin özelliklerini incelemeye başlayacağız.

Perşembe, Ağustos 16, 2007

SQL Nedir?

Bilgisayar programlarının büyük çoğunluğunda veri saklama ihtiyacı vardır. Eski programlarda bilgiler dosyalara yazılır ve buralardan okunurdu. Bilgisayar kullanımı geliştikçe saklanması gereken veri miktarı da büyüdü. Veri saklama işi artık dosyalarla altından kalkılamayacak bir duruma geldi. Bu dönemde veritabanı sistemleri gelişmeye başladı. Bilgiler artık dosyalarda değil veritabanı sistemlerinde tutulacaktı. Veritabanı sistemleri ile büyük boyutlu veri üzerinde tablolar halinde çalışabilmek kolaylaştı. Verinin indexlenmesi, çok kullanıcının erişim sağlaması, bellek yönetimi gibi sıkıntı olan konular veritabanı sistemleri tarafından otomatik yapılmaya başlandı. İlk zamanlarda bilgiyi veritabanından okuma şekli her veritabanı sistemi için farklı idi. Yani kullandığınız veritabanının erişim yöntemi neyse onu bilmek durumundaydınız. Bir veritabanına kayıt yapmak için kullandığınız yöntem başka bir şirketin ürettiği veritabanı sisteminde çalışmıyordu. İşte SQL bu ihtiyaçtan doğdu ve hızla veritabanı üreticileri tarafından benimsendi. SQL desteği olan veritabanlarından kayıtları okuma, silme, yazma işleri için sadece SQL bilmek yeterlidir. Günümüzdeki tüm veritabanı sistemleri SQL'i desteklemektedir. SQL bildiğiniz zaman SQLServer, Oracle, Interbase, Firebird, gibi tüm veritabanı sistemleri ile çalışabilmeniz ve bu veritabanlarını kullanan programlar yazabilmeniz mümkün olacaktır.

Çarşamba, Ağustos 15, 2007

Nesne Yönelimli Programlama İlkeleri II

Sınıf tasarımı yaparken sorumluluk, bağımlılık ve uyumluluk konusunun önemini bir önceki yazımızda tartışmıştık. Bağımlılığı düşük sorumluluğu yüksek sınıflar tasarlamak için dikkat etmemiz gereken noktaları incelemeye devam ediyoruz. Programımızın çalışma zamanı boyunca nesnelerimiz birbirleri ile iletişim halinde çalışırlar. Bu iletişimi sağlarken nesnelerin özelliklerini ve metodlarını kullanırız. Bir sınıfın iki önemli parçası vardır. Arabirimi (Interface) ve Gerçeklemesi (Implementation). Sınıfımızın arabirimi diğer sınıfların kullanımına açık (public) özellikleri ve metodlarıdır. Gerçekleme kısmı ise sınıfımızın davranışının belirlendiği kısımdır yani ilgili arabirimin kodlandığı kısımdır.

class Köpek
{
public string Havla() { return "Hav Hav"; }
}

Köpek sınıfının arabirimi Havla() adında bir metod içerir. Bu arabirim "Hav Hav" metnini döndürecek şekilde gerçeklenmiştir. Eğer aynı mantığa sahip başka sınıfımız varsa ikisinin ortak arabirimi kullanmasını sağlamak iyi bir fikirdir.

class Kedi
{
public string Miyavla() { return "Miyavv"; }
}

Kedi ve Köpek sınıfı benzer özelliklere sahiptir. Bir ortak arabirim ekleyerek sınıf tasarımını geliştirebiliriz.

interface IHayvan
{
string SesÇıkar();
}

Bu arabirim sadece kullanılabilir metodları ve özellikleri gösterir. Bu arabirimi gerçekleyen her sınıfı arabirim üzerinden kullanmak mümkündür. Arabirimi isimlendirirken I harfi ile başlamak bir gelenektir.

class Kedi:IHayvan
{
public string SesÇıkar() { return "Miyaaav"; }
}


class Köpek:IHayvan
{
public string SesÇıkar() { return "Hav Hav"; }
}


Bir arabirim kullandığımız için havla() ve miyavla() metodlarının adını sesçıkar() olarak değiştirdik. Böylelikle benzer sınıflarımızın ortak arabirimi oldu. Başka bir sınıftan bu sınıfları kullanmamız gerekecektir.

class Veteriner
{
public void TedaviEt(Köpek köpek){};
}


Bu sınıfımız Köpek nesnesini geçtiğimiz bir TedaviEt() metoduna sahip. Aslında Köpek sınıfı IHayvan arabiriminin bir gerçeklemesi. Sınıfların arabirimler yerine direk gerçekleme üzerinden diğer sınıflara erişmesi yüksek bağımlılık yaratır. Bu durum bizi gelecekte şöyle bir hatalı sınıf tasarımına zorlar.

class Veteriner
{
public void TedaviEt(Köpek köpek){};

public void TedaviEt(Kedi kedi){};
}

Bu bağımlılığı azatmak için yapmamız gereken gerçeklemeyi kullanmak yerine arabirimi kullanmaktır.

class Veteriner
{
public void TedaviEt(IHayvan hayvan){};

}

Bu sayede gelecekte IHayvan arabirimini gerçekleyen her türlü sınıfı Veteriner sınıfına parametre olarak geçebilmemiz mümkün olur.

Diğer sınıflara Gerçeklemesi üzerinden değil Arabirimi üzerinden erişmemiz gerekir. Bu sayede bağımlılığı düşük sınıflar tasarlayabilmemiz mümkün olacaktır. Bu ilkeye GOF kitabındaki "Program to an Interface, not an Implementation" başlıklı yazıda değinilmiştir.

İlerideki yazılarımda bağımlılığı düşük, uyumluluğu yüksek sınıflar tasarlayabilmemiz için gerekli diğer ilkeleri incelemeye devam edeceğiz.

Salı, Ağustos 14, 2007

Panasonic FX12 Lumix

Bir Canon SLR sahibi olmama rağmen her zaman yanımda taşıyabileceğim küçük bir fotoğraf makinesine hep ihtiyaç duydum. SLR tipi makineler iyi bir lens ile mükemmel sonuçlar verebiliyor ancak kocaman çantasını her zaman yanınızda taşıyamadığınız için her fırsatta kullanma imkanınınız olmuyor. Zaman zaman canavar evde yatarken cep telefonumun dandik fotoğraf makinesine kaldığımı bilirim. SLR makinelerin diğer bir handikapı da kalabalık içerisinde fotoğraf çekerken çok dikkat çekmesi. Nedense insanlar hemen gazeteci veya casus muamelesi yapıyor. Hiç alakası olmadığı halde dükkanını, arabasını çektiğimi düşünerek garip tepkiler veren insanlarla karşılaştım. İnsanlar nedense makine küçük olunca bu tür tepkiler vermiyor. Bu süper bahaneler neticesinde kendimi küçük boyutlu bir makineye ihtiyacım olduğuna ikna ederek teknolojik süpermarketimizin yolunu tuttum.

O kadar makinenin içersinde dikkatimi ilk olarak Panasonic FX 12 çekti. Tabiiki ilk neden küçük boyutlu olması ve izleme ekranının boyutuna göre gayet büyük olması idi. Her zaman boyutu küçük, ekranı büyük olanını aramak gibi bir saplantım olduğu için direk incelemeye başladım. Nedense küçük cihazların hep bir eksiği olur. İnceledikçe gördüm ki boyutuna rağmen eksiksiz, gerçekten çok iyi çekim kalitesine sahip bir makine ile karşı karşıyayım. Kredi kartımı kasiyerin ellerine teslim etmemek için artık bir nedenim kalmamıştı. Kutuyu kaptığım gibi eve uçtum. Gelelim detaylara.


Çok teknik veriler vermeyeceğim. Zaten internetin neresinde aratsanız pat diye bütün nümerik değerler önünüze dökülüyor. Boyutu gerçekten çok küçük. Neredeyse küçük bir sigara paketi kadar ve yarısı inceliğinde. Ekranı çok büyük, zaten arka tarafının 4 te 3 ünden fazlasını kaplıyor. Ayrıca bir vizörü yok, ekrandan bakarak çekim yapıyorsunuz. Makineyi açtığınız zaman lens uzayarak açılıyor ve kısa bir zamanda çekime hazır hale geliyor. Batarya ve SD kart kompartımanı alt tarafta ve küçük bir kapak kaptıyor. Bu kapak biraz nazik dikkatli olmak lazım. Ayrıca bataryayı yerleştirirken de bataryayı tutan küçük tırnaktan çıt sesi gelene kadar bataryayı itmek gerekiyor. Tam tırnak oturmadan kapağı kapattığım için dış kapağı kapatmakta biraz zorlandım. Bataryayı makineden çıkararak ayrı şarj cihazına takıyor ve öyle şarj ediyorsunuz. Batarya Lityum-Ion yani bitmesini beklemeden yeniden şarj edilebiliyor. Batarya 250- 300 çekim civarında gidiyor ama tatile çıkarken şarj aletini de almakta büyük fayda var. Cihazı aldığım yer yanında 1GB'lik SD kart hediye etti. Ayrıca kutunun içinden de 512 MB'lik ayrı bir SD kart daha çıktı. Bunların yanında kutudan şık bir taşıma çantası ve bileklik kordonu da çıkıyor. Belki aldığım yerle ilgili bir sorun ama kutudan Türkçe veya İngilizce kullanma kılavuzu çıkmadı. Onun yerine Almanca, İspanyolca, Fransızca, İtalyanca kullanma kılavuzları çıktı. Alırken kontrol etmenizi öneririm. Ayrıca kutudan bilgisayara bağlama kablosu ve yazılım CD'si de çıkıyor.

Panasonic FX 12 modelinde de serinin diğer makinelerindeki gibi Leica marka yüksek kaliteli lens kullanılmış. Sensörü 7.1 megapixel. 3x optik zoomu var. Eğer görüntü kalitesini düşürürseniz bir miktar daha zoom yapabilmeniz mümkün. 7.1 megapixellik çekimlerde fotoğraf kalitesi gerçekten mükemmel. Eğer cihazı aldığınız yerde deneme yaparsanız önizleme ekranında gelen ilk görüntü sizi yanıltmasın. Hızlı önizleme yapabilmek için olsa gerek ilk çektiğinizde ekrandaki görüntü kalitesizmiş gibi görünebiliyor. Deklanşörün çevresindeki zoom kolunu kullanarak çektiğiniz resmi bir kere büyütürseniz fotoğrafın gerçek kalitesini görebilirsiniz.

Belki de benim için en büyük süpriz olan özellik sesli video çekebilme oldu. Saniyede 30 kare görüntü yakalama özelliğine sahip ki bu gerçekten çok iyi bir performans. 1GB'lik karta 15 - 20 dakikalık video çekebilmek mümkün. Çekim esnasında ne kadar süre kaldığını ekranda gösteriyor. Video kalitesini 15 kareye düşürerek bu süreyi uzatmanız mümkün olabiliyor. Videolar quicktime formatında saklanıyor ve bilgisayarınızdan izlemek için quicktime eklentisini kurmanız gerekiyor.

7 kullanım modu var. Video çekim, Fotoğraf Çekim, Basit Çekim, İzleme, Baskı, SCN ve Akıllı ISO modları var. Bu modları üst tarafta bulunan ayar düğmesini çevirerek değiştiriyorsunuz. Basit çekim modunda menülerde genel ihtiyaca yönelik çok temel ayarlar geliyor. İzleme modu çektiğiniz fotoğrafları ve videoları izleyebileceğiniz mod. Fotoğraf çekerken çekim modundan izleme moduna geçmenize gerek yok. Çekim modundayken de önceden çektiğiniz fotoğraflara geçebiliyorsunuz. İzleme modunun özelliği eğer makineyi açmadan önce izleme moduna getirirseniz lens yerinden çıkmıyor. Bu sayede lense zarar verme korkusu olmadan rahatça çektiğiniz fotoğraflara bakabiliyorsunuz. Baskı modunu kullanarak bilgisayara atmaya gerek kalmadan fotoğraflarınızı direk yazıcıya gönderebiliyorsunuz. Tabii yazıcınızın bu özelliği desteklemesi gerekiyor. Akıllı ISO modu özellikle ışığın az olduğu ortamlarda daha kaliteli çekim yapabilmek için kullanabileceğiniz mod. Yine de yetersiz ışıkta bu boyutta bir cihazdan çok yüksek bir performans beklememek lazım. SCN modu ise en eğlenceli mod. Bu modda menüye Açık Hava, Kar, Uçaktan Çekim, Bebek Çekimi, Plaj Çekimi, Parti Çekimi, Havayi Fişek Çekimi gibi 20 küsür hazır ayar geliyor. Yapacağınız çekimin türüne uygun ayarı seçip çekim yapabiliyorsunuz. Ayrıca bir manüel mod yok ama hazır ayarlar hemen her amacı karşılayacak kadar detaylı. Her çekim modunun özelliklerini menüden üzerine gelip bilgi tuşuna basarak öğrenebiliyorsunuz. Özellikle gece çekimi modlarında tripod kullanmanız gerekebiliyor ve bu bilgiyi de buradan alabiliyorsunuz. Menülerin kullanımı gayet kolay. Fotoğraf çekerken gerekli olabilecek her türlü bilgi çekim anında ekranda gösteriliyor. Display düğmesine basarak bu bilgilerin hiç gelmemesini veya az detaylı gelmesini sağlayabiliyorsunuz. Detaylı görünümde histogram, f-stop bilgileri gibi teknik bilgiler de görüntüleniyor. Ayrıca kolay kadraj yapabilmek için ekranda bir komposizyon gridi görünmesi özelliği de var.

Hazır Tripod demişken OIS özelliğinden bahsetmek gerekir. OIS el titremesi kaynaklı bulanık fotoğraf çekme sorununu engelleyen bir özellik. Daha da önemlisi bu yazılımsal değil direk objektifin bir özelliği. Makine bir titreşim algıladığında objektifi ters tarafa hareket ettirerek titreşimi tolere ediyor. Ayrıca hem el titreşimi hem de çekeceğiniz görüntünün hareketli olup olmadığı ayrı ayrı tespit edilyor ve net çekim yapabilmek için gerekli en uygun ayarlar siz görüntüyü çekerken kendiliğinden yapılıyor. Özellikle zoom yapıldığında tripodsuz net görüntü çekmek çok zordur ama OIS sayesinde bu mümkün olabiliyor. Tabiiki tripod kullanıyorsanız bu özelliği kapatmanızı öneririm. Bunu da menülere girmeden hemen üst taraftaki titreyen el düğmesine basarak yapabiliyorsunuz.

Menüleri Türkçe'leştirebiliyorsunuz ama ilk çalıştırdığınızda İngilizce gelebilir. Eğer ayar yerini bulmakta zorlanabileceğinizi düşünüyorsanız pili bir miktar şarj edilmiş olduğu için aldığınız yerde hemen ayarlatabilirsiniz.


Son olarak AF Assist lambasından bahsetmeden geçemeyeceğim. AF özelliği deklanşöre yarım bastığınızda objektifin çekeceğiniz nesneye otomatik olarak odaklanmasını sağlayan özelliktir. Karanlık ortamlarda AF özelliği çalışmaz çünkü ortamda AF için yeterli ışık yoktur. Bu durumlarda cihazın ön tarafında bulunan kırmızı lamba yanarak nesneyi aydınlatır ve AF'nin düzgün çalışmasına yardımcı olur. İnatla ne 350D ye ne de 400D'ye AF assist lambası koymayan ve uzun pozlayacak dahi olsak bizi mecburen defalarca flaş patlattırmak zorunda bırakan Canon'u buradan kınıyorum ve bu basit lambacığı kullanıcılarından esirgemeyen Panasonic firmasını kutluyorum.


Fotoğraf makinesi alma planlarınız varsa kesinlikle bu modeli incelemenizi öneriyorum.

Pazar, Ağustos 12, 2007

HTML Nedir?

İnternet sayfalarını açmak için Internet Explorer, Opera, FireFox gibi tarayıcı programlar kullanırız. İnternet sayfaları yazı, resim, başka sayfalara linkler, video gibi çeşitli içeriğe sahiptirler. Kullandığımız tarayıcı program sayfanın nasıl gösterilmesi gerektiğini yazının içindeki TAG adı verilen etiketleri yorumlayarak anlayabilir.

Örneğin yazımızın bir kısmını kalın harflerle göstermek istersek o kısmı
<b> ve </b> etiketlerinin arasına alırız.

<b> BOLD -</b><i> ITALIC -</i><u> UNDERLINE</u>

şeklinde düzenlenmiş bir yazı tarayıcımızda

BOLD - ITALIC - UNDERLINE

olarak görünecektir.

Bazı etiketlerin başlangıcını ve bitişini gösterebilmek için açılış etiketini / ile kapatırız. <b> </b> etiketleri arasında kalan herşey büyük harfli görünür. Etiketleri iç içe kullanmak da mümkündür. Hem bold hem italik yazı yazmak için iki etiketi birden kullanırız.

<b>BOLD -<i> BOLD ITALIC</i></b>

gibi etiketlediğimiz yazımız tarayıcıda

BOLD - BOLD ITALIC

olarak görüntülenir.

İşte yazdığımız yazının tarayıcıda nasıl görünmesini gerektiğini içerisine eklediğimiz etiketlerle ayarlayabildiğimiz bu özel dile HTML denmektedir. Bu blogda çok sık kullanılan etiketlerle bunların kullanımını anlatmaya devam edeceğim.

Efua-s Villa Apart Otel

Oteli Ziyaret Tarihi: 25.Temmuz.2007


Macera arayan yol gezginlerinin ilk aklına gelen rota Karadeniz turudur. Sinop genellikle bu tura başlamak için ideal bir noktadır. Bu yazımda başlangıç noktanızda ilk durağınız olabilecek yer olan EFUA's Villa Apart Otel'in incelemesini yapacağım.

EFUA's Villa Karakum yolunda, güzel deniz manzarasına hakim bir tepenin üzerinde kurulu. Tesis Apart otel formatında ve 6 odası var. 450 m2 alana kurlu ve 29 kişi kapasiteli. Özellikle yaz aylarında gitmeden önce yer olup olmadığının sorulmasında büyük fayda var. Otele araçla ulaşım çok kolay. Çevrede otopark sorunu da yok. Eğer aracınız yoksa şehir merkezinden "Özlem Konutları" dolmuşuna binmeniz gerekir. Şehrin heryerinde Efua's Villa tabelaları var. Onları takip edebilirsiniz. Otel Sinop'ta çok tanınan biryer olduğu için bütün şöförler Efua's Villa'yı biliyor. Dolmuş bazen çok geç geliyor. Eğer yürüyüş yapmak isterseniz otel şehir merkezinden 20-30 dk. yürüme mesafesinde. Yine de bazen tozlu yollardan gitmek gerektiğini bilmenizde fayda var.

Oteli Erol Bey, eşi Adviye Hanım ve kuzenleri ailecek işletiyorlar. Tüm Sinoplular gibi oldukça cana yakın ve sorunlarınızla ilgililer. Rahatça konaklamanız için ellerinden gelen herşeyi yapıyorlar.

Otele ilk girişinizde bahçelerin arasında taşlarla kaplı şirin bir yol sizi karşılıyor. Etraf yeşillik ve mis gibi kokuyor. Erol Bey otelin çevresindeki bahçelerde gübresiz sebze yetiştiriyor. Kahvaltıda gübresiz domatesin kokusunu unuttuğunuzu anlayacaksınız. Ayrıca çevrede elma, kiraz gibi çeşitli ağaçlar da var. Ayrıca Erol Bey otelin çevresine diktiği bazı özel bitkilerle sivrisinekleri engellediğini söylüyor. Gerçekten de otelin çevresinde hiç sivrisinek yok.

Otelde havuz yok ama denize girmek isterseniz 300-500 metre ileride plaj var. Plajın yolu yokuş. Yolun bir kısmı asfalt, bir kısmı çakıl. Sahil geniş ve ferah. Sinop zaten genel olarak kalabalık olmadığı için herzaman boş koy bulmak mümkün olabiliyor. Sinop'un batı ve doğu kıyısında büyük kumsalları var. Rüzgarın yönüne göre bir tarafta deniz mutlaka duru oluyor. Kumsallar çok temiz ancak pek fazla tesis yok. Kumsala giderken tüm ihtiyaçlarınızı yanınızda götürmenizde fayda var zira ihtiyaçlarınızı almak için biraz yürümek gerekebiliyor. Kum plajlar da var, çakıl olanlar da, kayalık olanalar da. Denizde bol balık var. Genellikle siz yüzerken 3-5 m. öteden size eşlik ediyorlar. Kumsallarda şezlong, duş, kabin gibi imkanlar yok. Buna göre önlem almak gerekir. Denize 20-30 m yakınlıkta ağaçlar var. Deniz kenarında hamak keyfi yapmak için ideal. Bu kadar çevresel bilgiden sonra gelelim tesis ile ilgili detaylara.

EFUA's Villa apart otel olduğu için odalarda olası her türlü ihtiyacı karşılayabilcek detaylar düşünülmüş. Özellikle üst kattaki odalar oldukça geniş ve ferah. Kalabalık aileler düşünülerek neredeyse normal bir ev gibi dekore edilmiş. Ayrıca çok kalabalık gelirseniz normal yataklar haricinde portatif yataklar ve somyalar da var. Odada mutfak bölümü var ve mutfakta yemek yapmak isterseniz ocak var. Ayrıca yemek pişirmek ve yemek için ihtiyaç olabilecek her türlü gereç dolapların içinde mevcut. Mutfakta ayrıca yemek için bir masa ve sandalyeler de bulunuyor. Yine çay demlemek için demlik, bardak, çay, kaşık, vb. var. Odalarda ayrıca buzdolabı da mevcut. İçi boş ama dışarıdan getireceğiniz malzemeler için dilediğiniz gibi kullanabilmeniz mümkün. Ayrıca otel girişindeki buzdolabında da her türlü içecek var.



Üst kattaki odaların güzel deniz manzarası olan oldukça geniş bir terası var. Terasta masa, sandalye, kanepe, şezlong var. Deniz manzarasını görerek şezlonga uzanabilirsiniz.


Odalarda televizyon var. Bütün Türk ve uydu kanallarını çekiyor. Odalarda telefon yok. Split klima var. Odalarda banyo ve tuvalet var. Bol miktarda temiz havlu, iki değişik saç tipi için şampuan, iki farklı marka nemlendiricili el ve yüz sabunu, vücut losyonu, saç kurutma makinesi, banat diş fırçası, ipana diş macunu, arko traş köpüğü var. Tüm bu malzemeler kutusu açılmamış şekilde banyoda bulunuyor. Banyo zemininde klozet takımı var. Banyoda çöp kutusu yok. Çatı katı olan odada banyo tavanı eğri ama baş çarpacak kadar değil. Diğer odalalardaki banyolarda tavan normal.


Oda temizliğinin belli bir saati yok. Otomatikman günlük yapılmıyor. Siz istediğiniz zaman yapılıyor. Öğlene kadar uyumak isteyenler için iyi olabilir. Otelde asansör yok ama zaten 2 katlı. Ciddi yürüme sorunu olanların üst kattaki odalarda kalması belki sıkıntı yaratabilir.

Otelin ayrıca kahvaltı servisi de var. Kahvaltı kişiye özel hazırlanıyor. Odalarda telefon olmadığı gibi özel bir oda servisi de yok ama eğer isterseniz kahvaltı istediğiniz saatte odanıza servis yapılıyor. Aslında odada kahvaltı yapmak pek mantıklı değil çünkü otelin kahvaltı için güzel bir alanı var. Üstü asma kaplı ve deniz manzarası var. Burada isterseniz akşamları da tatlı bir esinti eşliğinde biranızı yudumlayabilirsiniz.


Kahvaltı menüsünde Çay, krem peynir, bal, tereyağı, zeytin, karpuz, domates, salatalık, biber, kızartılmış ve kızartılmamış ekmek, haşlanmış yumurta var. Oda fiyatlarına kahvaltı dahil.

Sinop'ta suç oranı oldukça düşük, bu nedenle ciddi bir güvenlik riski yok. Otelin çevresi geceleri gayet sessiz. Uyumaya engel olabilecek herhangi bir gürültü yok.

Fiyatlar: Otelde Oda+Kahvaltı 1 kişi 50 YTL, 2 kişi 75 YTL.

En güncel bilgiye otelin web sitesinden ulaşabilirsiniz.

Sinop eşsiz doğal güzelliklere ve gezi alanlarına sahip. Sinop gezinizde buralara uğramadan sakın geçmeyin.

Hamsilos koyu
Akliman
Sinop Müzesi
Eski hapishane
Tersane
Karakum
Erfelek şelaleri (Ulaşım sadece özel araçla mümkün.)

Bu gezi yerleri ile ilgili bilgiler ve güzel fotoğraflar için http://www.atay.org/sinop.html adresini ziyaret edebilirsiniz.

Sinop ile ilgili daha detaylı bilgiye Sinop Valiliği'nin web sitesinden ulaşabilirsiniz.

Perşembe, Ağustos 09, 2007

Nesne Yönelimli Programlama İlkeleri I

Sadece nesneler kullanarak program yazdığımızda nesne yönelimli programlama yapmış olmuyoruz. Programımız geliştikçe bakıyoruz ki sınıf çorbası kodlamışız. Sınıfları oluştururken uyumluluğu yüksek, bağımlılığı düşük tasarımlar yapmak OOP'de hayati önem taşır. Bir sınıfın sorumlulukları birbirleri ile alakalı ise uyumluluğu yüksektir. Bir sınıf başka sınıflara bağımlı olmadan işlevini yerine getirebiliyorsa bağımlılığı düşüktür. Bunu hemen şöyle örnekleyelim. Bu sınıf hem dosya okuma ve yazma hem de dizin yaratma ve silme gibi işlerden sorumlu olsun.


class IOWorks()
{
string ReadFromFile(string path);
void WriteToFile(string path, string content);
void CreateDirectory(string directoryName);
void DeleteDirectory(string directoryName);
...
}


IOWorks sınıfının uyumluluğu düşük çünkü hem dosya hem de dizin ile ilgili işlevler içeriyor. Başka bir projede sadece dizin yaratma ve silme işi için bu sınıfı kullanmak istersek dosya ile ilgili işlevleri de ihtiyacımız olmasa da taşımış olacağız. En iyisi sınıfımızı ikiye bölerek uyumluluğu arttırmak.

class FileWorks()
{
string ReadFromFile(string path);
void WriteToFile(string path, string content);
}

class DirectoryWorks()
{
void CreateDirectory(string directoryName);
void DeleteDirectory(string directoryName);
}


Sorumlulukları dağıtarak sınıflardaki uyumluluğu arttırmış olduk. Normalde FileWorks nesnesinde WriteToFile ile kayıt yaptırmak istediğimizde eğer dosyayı kaydedeceğimiz dizin önceden yaratılmamışsa bir istisna (exception) üretiyoruz. Bazen bu istisnalarla uğraşmamak için şu tür kısayollar yaparız.

class FileWorks()
{
string ReadFromFile(string path);
void WriteToFile(string path, string content, bool autoCreateDirectory);
}

Nesnemizin dosyayı kaydederken dizini bulamadığında hemen yaratabilmesi güzel bir özellik. Ancak bu özelliği kodlayabilmek için FileWorks() sınıfı içinden DirectoryWorks() sınıfını kullanmak gerekir. Bu durumda iki sınıf arasında bir bağımlılık oluşturmuş oluyoruz. Aslında FileWorks() sınıfının ana sorumluluğu dosya kaydetmek ve bunu yerine getirebilmek için böyle bir bağımlılığa ihtiyacı yok. FileWorks() sınıfı gelişecekse imaj veya video içeren başka türde dosyalarla da çalışabilecek şekilde gelişmeli. En iyisi FileWorks() sınıfına hiç dokunmadan istediğimiz davranışı gösteren üçüncü bir sınıf tasarlamak.

class Writer()
{
void WriteToFile(string path, string content, bool autoCreateDirectory);
}

Bu sınıfımız içinden hem FileWorks() hem de DirectoryWorks() sınıfına erişerek ihtiyacımız olan davranışı elde ederiz. Writer() sınıfı FileWorks() ve DirectoryWorks() sınıflarının ikisine birden bağımlı gibi görünüyor. Aslında biz burada özel bir sorumluluğa sahip bir yeni sınıf üretmiş oluyoruz. Bu sınıfımızın sorumluluğu dosya kaydederken dizin bulunamazsa otomatik olarak açmak. Bu güzel tasarımı bozabilecek en büyük hata FileWorks veya DirectoryWorks sınıfı içerisinden Writer sınıfını kullanmak olur. Bir anda çok yüksek karşılıklı bağımlılık oluşturarak çorba tasarım yapma yolunda önemli bir adım atmış oluruz. Sınıflarımızı tasarlarken ve geliştirirken sorumluluk, bağımlılık ve uyumluluk konusunu aklımızın bir kenarında tutmak iyi bir alışkanlık olacaktır.

Çarşamba, Ağustos 08, 2007

Rezervasyon Macerası

Normalde herşey dahil oteller bir süre sonra monotonlaşıyor. Belli saatte kalk, yemeğe git, plajda güneşlen derken birkaç gün sonra sıkıcı hale gelmeye başlıyor. Hem bu nedenle hem de bu bloguma kaynak oluşturabilmek için bu sene tatilimi 3 değişik otelde 3'er gün kalarak geçireceğim. Otel seçimlerinde hayli zorlandım ama otelleri tanımak için internet en büyük yardımcım oldu. Özellikle tatilsepeti.com ve hangiotel.com siteleri hemen her otelle ilgili bilgi içeriyor. Burada yaşadığım iki önemli konudan bahsetmek istiyorum.

Kalacağım iki oteli tatilsepeti.com aracılığı ile rezerve etmek istedim. Sistemleri şöyle; internet aracılığı ile iletişim bilgilerinizi gönderiyorsunuz ve sizi telefonla arayarak rezervasyon işlemlerinizi tamamlıyorlar. Normalde iş telefonu ve ev telefonu seçeneği var. Açık ofis ortamında olduğum ve konuşmalarımdan insanların rahatsız olabileceğini düşündüğüm için ev telefonumdan aranma seçeneğini seçtim. Cuma günü arayan olmadı, cumartesi de arayan olmadı. Pazar günü internet sitelerinde verdikleri telefondan ben aradım. Telefona bilgisayar cevap verdi ve beni 8. sıraya koydu. 8 kişinin rezervasyon işlemlerinin bitmesini bekleyemeyeceğim için telefonu kapattım. Birkaç saat sonra eşimle başka bir turizm acentasının yerine giderek rezervasyonumuzu yaptırdık. Pazartesi işyerime gittiğimde tatilsepeti.com dan beni arayıp bulamadıklarına dair bir mail attıklarını gördüm. Cuma günü akşamüstü saat 4'te ev telefonumdan aramışlar. Hafta içi saat 4'te insanların evde olmayacağını hesap etselerdi müşteri kaçırmamış olacaklardı. Aslında çözümü çok basit. Telefon numarasını verdiğim yerde hangi saatlerde aranmak istediğimi yazabilseydim çok kolay olacaktı.

Bir başka otelin rezervasyonunu ise hangiotel.com sitesinden yapmak istedim. Sitedeki telefon numarasından oteli aradım. Otel sitede yazan fiyattan daha yüksek bir fiyat söyledi. Ben fiyatlarını internet sitedinden aldığımı, neden böyle bir fark olduğunu anlamadığımı söyledim. Telefondaki kişi fiyatı milliyet gazetesinin kendi kafasına göre verdiğini, bu nedenle kendilerine dava açtıklarını, bu durumdan kendilerinin de çok rahatsız olduğunu söyledi. Tabiiki bu bana pek inandırıcı gelmedi. Fiyatların otel tarafından siteye girildiğini tahmin ettiğimden konuyu internet sitesindeki şikayet formuyla ilgiliye aktardım. Ertesi günü hangiotel.com'dan çok ilgili bir mail aldım. Oteli aramışlar ve konuyla ilgili uyarılarını yapmışlar. Ayrıca sorduğum başka bir soruya da detaylı cevap vermişler. Bir sonraki gün kontrol ettiğimde fiyatın otel tarafından düzeltildiğini gördüm. Aslında olayın temelinde hangiotel.com'un otelleri fiyatlarına göre sıralaması var. Otelin fiyatı ne kadar ucuz olursa listenin o kadar başında çıkıyor. Aslında rekabeti teşfik etmek adına kullanıcı açısından süper bir uygulama. Tek tük de olsa sistemi hatalı kullanan oteller olabileceğini dikkate alarak son kararı vermeden önce beğendiğiniz otelin fiyatlarını telefonla teyid etmekte bence fayda var. Unutmadan söyleyim bazı oteller kredi kartına tek çekim dahi olsa komisyon uyguluyorlar. Sitede 70 milyon olan fiyat kredi kartıyla öderseniz 75 milyon olabiliyor. Ayrıca yine bazı oteller rezervasyon yapmak için önden bir günlük ücreti banka hesabından havale edilemsini isteyebiliyor. Bu uygulamanın rezervasyon yaptırıp da gitmeyen kişilerden korunmak için yapıldığını düşünsem de bu bilgilerin de sitede gösterilmesi müşteri açısından faydalı olabilir. Hangiotel.com'un sitelerine ekledikleri otelleri kendilerinin bizzat giderek incelediğini, hizmet kalitesini ve müşteri memnuniyetini devamlı kontrol ettiklerini de bu noktada söylemek lazım.

Pazartesi, Ağustos 06, 2007

Aldatma Sanatı

Bilgisayarlarımızı korsanlara, virüslere, zararlı programlara karşı korumak için birçok koruyucu yazılım kullanıyoruz. Hele büyük sistemlere sahip şirketler dudak uçuklatıcı rakamları sistem güvenliklerini sağlamak amacıyla yatırıyorlar. Peki bunlar ne kadar yeterli?

Dünyanın dijital suçtan ceza alan ilk korsanı Kevin Mitnick adını birçok kişi duymuştur. Adına düzenlenen kampanyalar, basının ilgisi ve internet yoluyla bir zamanlar epey adından sözettirmişti. Bilgisayar Korsanı denildiğinde akla bilgisayarının başından hiç kalkmadan türlü programlar yazarak sisteme sızmaya çalışan kişiler akla gelir. Ben de bu kitabı okuyana kadar öyle zannederdim. Kitabı okuduktan sonra gördüm ki asıl sorun sistemlerin kullanıcılarında.

Kevin Mitnick konuyu korsan tarafından anlatarak dev korumalara sahip sistemlerin aslında ne kadar basit açıkları olduğunu, basit bir telefon trafiği ile bankaların sistemlerine nasıl sızılabildiğini gösteriyor. Kitapta anlatılan yöntemlerle istenilen bilgiyi ele geçirmeye toplum mühendisliği deniliyor. Toplum mühendisleri bilgisayarların şifrelerini kırmaya çalışmak yerine o şifreleri bilen kişiden çeşitli yöntemlerle bu bilgiyi almaya çalışyorlar. Kitapta bu tür yöntemlerin onlarcasından bahsediliyor. Yaşanılan olaylar telefon konuşmalarına varıncaya kadar detaylı bir şekilde anlatılıyor. Tabiiki bu yöntemlerin anlatılmasının nedeni sistem güvenliğinin arttırılması için neler yapılması gerektiğinin gösterilmesi. Kitapta yeri geldikçe bu konularda da değerli bilgiler veriliyor. Zaman zaman çok da detaya girilmeden teknik bazı bilgiler ve teknikler de anlatılmış.

Aslında hiç bu konularla ilgili olmasanız bile toplum mühendislerinin çalışma yöntemlerini okumak gerçekten çok eğlenceli. İnsanları avlamak için kurulan tezgahlara hayret etmemek elde değil. Eğer sistem güvenliği sizin için önemli ise almanız gereken önlemleri öğrenebilmeniz için önemli bir kitap.

Pazar, Ağustos 05, 2007

Eski Fotoğraf Tamiri


Bugün Ankara'daki 2 günlük su kesintisinden sonra suyumuz geldi. Eşim heyecan ve mutluluk içinde evde temizlik yaparken ben de Avanos'lu hemşehrilerimin bir fotoğrafını tamir etmeye çalıştım. Fotoğraftakiler kim bilmiyorum ama durdukları köprüyü hemen tanıdım. Bu tamir işi yaklaşım yarım saatimi aldı. Önce Patch aracı ile kırışıklıkları tamir ettikten sonra Level ayarı ile fluluğu düzelttim. Fotoğraftaki sararmaları düzeltmek için desaturate ile siyah beyaza çevirip sonra yeniden Colorize ile hafif renk verdim. Sararmaları desaturate ettiğim için fotoğrafın çeşitli yerlerinde oluşan koyuluklukları düzeltmek için dodge aracı ile biraz aydınlatma yaptım. Sonra Dodge ile yüzlerdeki detayları ön plana çıkardım. Yine gömleklere, ceket kıvırmlarındaki gölgelere biraz burn ile dokunarak canlılık katmaya çalıştım. Ağırlıkla Dodge ve Burn ile çalıştığım için adım adım anlatım yapmadım ama özellikle Fluluğu kaldırmak için kullandığım yöntemi sonraki yazılarımda detaylı olarak anlatmak istiyorum.

Fotoğrafın kaynağı http://venessapension.org/galeri/main.php. Eski fotoğrafların yanısıra Kapadokya bölgesi başta olmak üzere Türkiye'nin çeşitli yerlerinden çekilmiş fotoğrafları da bu galeride bulabilirsiniz. Fotoğrafı çekene de, saklayana da, emek verip bu galeriyi hazırlayanlara teşekkür etmek lazım.

Cuma, Ağustos 03, 2007

Yazılım Projesi Nasıl Yapılır?

Bu yazımda bir yazılım projesinin nasıl oluşturulabileceğiyle ilgili önerilerimi anlatacağım. Uzun bir yazı olacak bu nedenle hiç süslü laflar etmeden direk konuya giriyorum. Öncelikli olarak aklımızda devamlı tutmamız gereken konu işi müşterimiz için yaptığımız. Müşterimizin genel anlamda yaptığı işi iyi anlamamız ve müşterimizin program kullanarak neyi amaçladığını anlamamız önemli. Problemi olmayan müşteri program satın almaz. Program istediğine göre mutlaka çözmek istediği bir problemi vardır. Müşteri birincil olarak işletmesinde hangi sıkıntının giderilmesi için program kullanmak istiyor? Müşterimiz sorunu güvenlik mi? Çalışma veriminin arttırılması mı? Daha çok para kazanmak mı? Eğer birincil amacı güvenlik ise müşterimiz; yetkiler, yedekleme, kullanıcınının hatalı veri girmesinin engellenmesi gibi konuların üzerine daha çok düşecektir. Belki istediği özellik işini yavaşlatsa bile buna razı olacaktır. Müşterinin sıkıntısı verimin düşüklüğü ise işlerin yavaşlamasına asla tahammül edemez. Müşterinin yaptığı şikayetler bizim bu konuyu daha iyi anlamamıza neden olacak ipuçları verecektir. Müşteriniz kasada biriken müşterilerden mi şikayet ediyor yoksa gözden kaçan mallardan mı? Buna dikkat etmek gerekir. Kısacası bir proje müşterinin ne istediğini anlayarak başlar. Sonrasında bizim müşterimizin iş yapma şeklini anlamamız gerekir. Eğer bunu yeterince anlamaz isek o zaman müşteri ile çok sık diyaloğa geçmek zorunda kalırız. Bu hem zaman kaybettirir hem de müşterimiz zaten bir işi yürüten bir insan olduğu için her zaman yüksek konsantrasyon seviyesinde olamayabilir. Sıkıntılı durumlar oluştuğunda müşteriye "ama siz böyle istemiştiniz" demek çözüm değildir çünkü bizim de birincil amacımız yazacağımız programla müşterinin yaşadığı sıkıntıyı çözmektir. Bu nedenle müşterimizin zaman zaman yanlış şeyler isteyebileceğini dahi dikkate almamız ve bu tür durumlara hazırlıklı olmamız gerekir. Yazının devamında bu konuya yine döneceğim.

Temel konuları hallettikten sonra sıra geldi projemizi oluşturmak için ilk adımları atmaya. Öncelikli olarak yapmamız gereken yazacağımız programları işyerinde kimlerin kullanacağını anlamak. Programı hangi tür kullanıcıların ne amaçla kullanacağını anlamak önemli çünkü program arabirimlerini kullanıcıların yapacakları işe göre tasarlamak gerekir. Kullanıcı çeşitlerini işyerindeki görevlerine göre belirliyoruz. Örneğin depocu, muhasebeci, kasiyer, satış temsilcisi,vb. gibi. Burada isimlerle değil direk görevlerle ilgileniyoruz. Kullanıcı çeşitlerini belirledikten bunların yapacağı işlerle ilgili bir liste çıkarmaya başlıyoruz. Örneğin depocu kullanıcısının yaptığı işler: irsaliye kesmek, depo girişleri yapmak, depo çıkışları yapmak gibi. Bu analizi yaparken müşterimizle yapacağımız görüşmelerin yanısıra direk kullanıcılarla da temasa geçmek çok faydalı olabilir. Eğer farklı kullanıcı tipleri aynı işleri yapıyorsa onları da öğrenmemiz lazım. Soru cevapları şu şekilde götürebiliriz. A kullanıcısı ne iş yapar? X işini yapar. Bu X işini yapan başka bir kullanıcı var mı? Evet bizim Mehmet de yapar. Mehmet ne iş yapar.... gibi.

Elimizde kullanıcı tipleri ve bunların programda yapacağı işlerle ilgili basit bir dökümanımız oluştu. Bu döküman işimizin aslında belkemiği çünkü projenin kapsamının ne olduğunu buradan anlıyoruz. Bu kapsamın dışına çıkmamamız hem bizim hem de müşterimiz açısından oldukça önemli. Şimdi işi bir adım daha ileri götürerek iş analizlerini yapacağız. İş analizini yapacağımız bir görev seçiyoruz. Öncelikle bu görevin işyerinin temel faaliyetini yürüttüğü görevlerden birisi olması gerekir. Örneğin bir mağaza ise kasiyerin satış kaydını girmesi ve tahsilat yapması birincil faaliyettir. Eğer bir restoran ise temel faaliyet müşteriden siparişin alınması ve masaya servisin yapılmasıdır. Bu tür bir temel görevle analizimize başlıyoruz. Restoran örneğini düşünelim. Garson görevi yürüten bir kullanıcı var. Garson kullanıcısının yaptığı işler: sipariş almak, siparişi mutfağa iletmek, sipariş hazırlanınca yemekleri masaya servis yapmak. Buraya kadarki analizi zaten önceki adımımızda yapmıştık. Şimdi en önemli analizimize geldi sıra. Bu işlerden birini seçeceğiz ve işi adım adım analiz edeceğiz. Örneğin sipariş almak. Yapacağımız iş garsonun sipariş alırken hangi adımlardan geçtiğini analiz etmek. Bu analizi yaparken garsonla kullandığı sistem arasındaki iletşimi baz alacağız. Tıpkı bir tenis maçı gibi top bir garsona bir sisteme geçecek. Bu şekilde ikisinin de hangi olaya hangi tepkiyi vermesi gerektiğini yazacağız.

1. Garson yeni sipariş komutu verir.
2. Sistem masa numarasını sorar.
3. Garson masa numarasını girer.
4. Sistem masayı aktifleştirir ve sipariş listesini açar ve listeye yeni bir satır ekler.
5. Garson sipariş listesine bir satır ekler.
6. Sistem siparişin türünü kontrol eder.
6a. Sipariş yemek siparişi:
6a1. Sistem 1 porsiyon mu 1,5 porsiyon mu olduğunu sorar
6a2. Garson porsiyonu girer.
6b. Sipariş içecek siparişi:
6b1. Sistem içecekte buz, limon veya ekstra şeker istenip istenilmediğini sorar
6b2. Garson tercihleri seçer.
7. Sistem siparişin satış fiyatını okur, siparişi listeye ekler, fiyatı günceller.
8. Sistem sipariş satış fiyatını hesaplar.
9. Tüm siparişler eklenene kadar 5. satırdan devam edilir.
10. Garson siparişi tamamla komutu verir.
11. Sistem siparişi kaydeder ve sipariş bilgisini mutfağa gönderir.

Bu listeyi oluştururken müşterimizle ve garson kullanıcısı ile direk temasa geçmemiz gerekir. Bu liste garsonun sipariş alırken yapacağı işlerin gösterildiği listedir ve projemizin en önemli parçası budur. Dikkat ederseniz listenin 6. adımında farklı durumlarda sistemin nasıl işleyeceği de gösteriliyor. 6. adımdaki kontrole göre 6a veya 6b adımlarından biri işletiliyor. Örneğin 6b2 adımında garsonun seçimi nasıl yapacağını da başka bir listede detaylandırıp buradan referanslayabiliriz. Bu durumda listelerimizin bir adı ve numarası olmasının büyük faydası vardır. Listelerle ilgili en önemli konu listelerin mutlaka sonlanmasıdır. Sonu olmayan listelerin programa vereceği zarar büyüktür. İçerdiği özellikler açısından mükemmel olan ama böyle bir işi sırasıyla yapmaya kalktığınızda zorluklar ortaya çıkan yüzlerce program vardır. Buna dikkat etmek gerekir. İkinci olarak da programa ekleyeceğimiz bir özelliğin listenin amacına ve bu listede gösterilen çalışma şeklinde bir değişikliğe yol açmaması gerekir. Bir özellik ekleyeceğimiz zaman önce listemizi güncellemeli, eğer çalışma şeklinde bir sorun yoksa programımızı güncellemeliyiz.

Programı yazmaya başlamak için daha fazlasına ihtiyacımız yok. Hemen bu listenin kodlamasına geçebiliriz. Bu arada listelerimizi de oluşturmaya devam edebiliriz. Sipariş alma işini tamamladığımızda hemen kullanıma hazır, müşteri ile oturup inceleyebileceğimiz ve baştan sona tamamlanan bir işi bitirmiş olacağız. Bunun projenin devamlılığı ve müşteri iletişimi açısından önemi çok büyük. Müşterimize ne kadar hızlı çalışan birşey gösterirsek o kadar hızlı yol alırız.

Bu liste programı nasıl yazacağımızı söylüyor aslında. Eğer nesne yönelimli programlama yapıyorsak Sipariş, Yiyecek, İçecek gibi sınıflarımızın olacağını, Yiyecek sınıfımızın porsiyon, içecek sınıfımızın da buzlu, ekstra şekerli, limonlu gibi özellikleri olacağını görebiliyoruz. Hatta listedeki 6a adımındaki dallanma yiyecek ve içecek sınıfımınızın ortak noktaları olduğu ve bunların ortak bir sınıftan türetilebileceği hakkında ipucu veriyor.

Eğer kodlarımızı test etmek için otomatik testler hazırlıyorsak yine bu listeler neyin test edilmesi gerektiğini bize çok iyi gösterir. Test hazırlamasak dahi programda kullanıcı testi yapan kişilerin sadece listelerin tamamlanıp tamamlanmadığını kontrol etmesi yeterli olur.

Sınıfların çıkarılması ve testlerin hazırlanması aslında üzerinde özellikle durulmayı hakeden konular. Şimdilik ana konumuza devam edelim.

Sıra listemizi kullanarak yapacağımız çalışmanın ana hatlarını ortaya çıkarmaya geldi. Öncelikle müşterimizin satacağı ürünleri ve bunların fiyatlarını tanımlayacağı bir yere ihtiyacımız var. Buna stok kartı diyebiliriz. Üzerinde sadece Ürün Kodu, Ürün Tipi ve Satış Fiyatı alanları listemizi tamamlamamız için yeterli. Dikkat çekmek istiyorum. "Gelecekte ihtiyacımız olacak" düşüncesi ile listemizle ilgisi olmayan özellikleri eklemememiz gerekiyor. Listemiz neyi gerektiriyorsa o kadarı. Diğer işler için oluşturacağımız listelerle birlikte zaten stok kartında olması gereken diğer alanlar da açılmış olacak. Müşterimize kalabalık ekranlar göstermenin daha iyi olacağını düşünsek bile kısa zamanda çalışan birşeyler göstermek her zaman müşterinin kendisini daha rahat hissetmesini sağlayacaktır. İkinci olarak siparişleri gireceğimiz bir listeye ihtiyacımız var. Listemizde Ürün Kodu, Açıklama ve Satış Fiyatı sütunları olacak. Açıklama sütununda siparişin tipine göre porsiyon veya içecek özelliklerini göstereceğiz. Bir dakika! Satış fiyatı sütunu mu? Listemizde Garsonun toplam sipariş tutarını görebileceği söylenmiş ama tek tek her siparişin fiyatlarının gösterilmesi söylenmemiş. Peki Satış Fiyatını koymayalım. Bu listeye de Sipariş Formu diyelim. Listemize göre ürün porsiyonunu ve içecek özelliklerini seçebileceğimiz iki küçük ekrana daha ihtiyacımız var. Stok Kartı olmadan Sipariş olmaz ama Sipariş olmadan Stok Kartı olabilir. Bu nedenle önceliği Stok Kartına vermek gerekir. Bu işleri liste haline getirirsek.

1. Stok kartlarının tasarımı ve veritabanı işleri.
2. Sipariş formunun tasarımı ve veritabanı işleri.
3. Sipariş formuna sipariş satırı eklenmesi ve stok kartından ürün kodu, fiyat bilgilerinin okunması.
4. Porsiyon ve içecek tipleri için Seçenek Formlarının hazırlanması.
5. Sipariş formuna sipariş eklenirken Ürün Tipine göre ilgili seçenek formunun gösterilmesi ve seçimin yapılmasının sağlanması.
6. Ürün tipi ile ilgili bilgilerin sipariş satırındaki açıklama sütununda gösterilmesi.
7. Porsiyon seçeneği de dikkate alınarak sipariş tutarının güncellenmesi.
8. Siparişin kaydedilmesi ve Mutfağa gönderme sistemine hazır hale getirilmesi.
9. Programa bir ana menü tasarlanıp Stok Listeleme, Ekleme, Düzenleme, Yeni Sipariş alma gibi komutların yerleştirilmesi.


Elimizdeki bu listeyi hemen kodlamaya başlayabiliriz. Tabii bu liste ekip halinde çalışıyorsak işleri ekip arkadaşlarımıza dağıtma anlamında da çok faydalı. Sadece hangi işin bitmeden hangi işin başlayamayacağını belirlemek yeterli. Ayrıca bu liste o kadar küçük parçalara ayrılmıştır ki her birinin ne kadar sürede bitebileceğini de kestirebilmek mümkündür. İşlerin bitiş ve başlangıç sıralarını da gözönüne alarak listeyi kodlamanın ne kadar sürebileceğini kestirebiliriz.

Kodlama işlerimizi tamamladıktan sonra listemizin ilk adımından başlayarak son adımına kadar denememizi yaptıktan sonra gönül rahatlığıyla işimizi bitirip sıradaki listemize geçebiliriz.

Anlattığım sistemi elimden geldiğince esnek tutmaya çalıştım. Siz bu yapıyı kendi ihtiyaçlarınız doğrultusunda istediğiniz şekilde daraltıp genişletmeniz mümkün.

a. Son listedeki iş parçalarını tek tek veya birleştirerek kartlara yazıp dağıtabilirsiniz. İş süreleri ile ilgili yaptığınız tahminleri de kartların üzerine yazarsanız gelecekte daha isabetli tahminler yapabilmenize faydalı olacak bir hafızanız da oluşmuş olur.
b. Bahsettiğimiz stok kartı, sipariş formu ekranlarının prototiplerini hazırlayıp kartlara iliştirebilirsiniz.
c. Veritabanı yapısını veya sınıf diyagramlarını üretebilirsiniz.
d. Kartlarla eşli programlama yapabilirsiniz.
e. Otomatik testler yapıp listelerin her adımının doğru çalışıp çalışmadığını test edebilirsiniz.
f. Liste adımları arasında detaylı açıklamaya ihtiyaç olan varsa onlar için akış diyagramları da oluşturabilirsiniz.


Ne sistem kullanırsanız kullanın sisteminizin en önemli parçasının müşteriniz olduğunu unutmayın.

Finansçı Olmayanlar İçin Finans

www.kitapyurdu.com'dan satın alNakit Akış Ölçüm Çeyreği kitabını okuduysanız tablonun sağ tarafındaki yüksek refah seviyesine sahip gruba geçiş yapma kararı almış olabilirsiniz. Bu gruplar şirket sahipleri ve yatırımcılardır. Belki de hali hazırda şirket sahibisiniz veya ucundan kıyısından yatırımla ilgileniyorsunuz. Hedefiniz ne olursa olsun işin içinde para varsa temel finans bilgisine sahip olmak çok önemli bir avantaj olacaktır. Sırada para işinden hiç anlamayanlara temel bilgiyi verecek Finansçı Olmayanlar için Finans kitabı var.

Finans ve Temel Muhasebe bilgisi yatırımcılar için yatırım yapacakları şirketin gerçekten para kazandıracak bir şirket olup olmadığı anlayabilmeleri için gereklidir. Bir hisse senedinin yükselişinin ana nedeninin normalde şirket durumundaki iyileşme kaynaklı olması gerekir. Yani bir şirket finansal yapısı, üretim seviyesi, satışları, karlılığı iyileşmelidir ki daha çok insan bu şirkete ortak olmak istesin ve hisse senetlerinin değeri yükselsin. Aslında borsada çoğunlukla işler bu şekilde yürümez. Gözle görünür bir neden olmadığı halde şirketin hisse senedinin değeri aniden yükselir. Bu yükseliş o kadar iştah kabartıcı olur ki herkes kazanmak ister. Borsada iki tür yatırımcı vardır. Kazananlar ve kazanmak isteyenler. Yani kazananlar ve kaybedenler. Ortada bir kazanan olabilmesi için bir de kaybeden olması gerekir. Kaybedenler genellikle yükselişin nedenini tam anlamadan hisse senedi satın alanlardır. Kazanmak isteyen hisse senedine girmeye karar verdiğinde artık çok geç kalmıştır çünkü kazanan kazanacağını kazanmış artık satma fırsatı kollamaya başlamıştır. Satışlar yapılır ve hisse senedi fiyatı olması gereken seviyesine iner. İkinci kaybeden türü ucuz gördüğü bir hisse senedini alıp hissenin herhangi bir nedenle yukarı hareketlenmesini bekleyenlerdir. Bekleyiş o kadar uzun olur ki günün birinde hisse senedi değer kazansa bile o bekleyiş süresinde paranın yaşadığı değer kaybını bile karşılamamış olur. Kısacası yükselişin bir nedeni olması gerekir. Bu nedeni bulabilmek veya yükselişin doğal olup olmadığını anlayabilmek için temel finans ve muhasebe bilgimizin olması gerekir.

Aslında şirket sahiplerinin de çoğu kendi şirketleri ile ilgili yeterli bilgiye sahip değildir. Bu eksiklik şirketin gücü olsa dahi bazı yatırım fırsatlarının kaçmasına veya şirketin finansal anlamda sıkıntı yaşamak üzere olduğunun anlaşılamamasına neden olur. Bazen de problem hissedilir ama nedeni bir türlü anlaşılamaz. Çoğu kimse muhasebeyle ilgili devlet tarafından vergi kontrolü yapmak amacıyla tutulması zorunluğu tutulan birşeymiş gibi düşünse de muhasebe hesabı bilmek demektir ve şirket ile ilgili çok önemli bilgiler içerir. Tek düzen muhasebe sistemi yapısı gereği fazla karışık gibi görünse de bazı temel hesapların kontrol edilmesi çoğu durumda yeterli olacaktır. Detayları bilmek muhasebecinin işidir. Şirket sahipleri hem kendi şirketlerinin hem de yatırım yapacakları şirketlerin durumunu bilebilmek için yine bu temel bilgilere sahip olmalıdır.

Kitap temelde borsa yatırımcılarını hedef almış olsa da yukarıda saydığım nedenlerden ötürü şirket sahiplerinin de çok işine yarayacak önemli bilgiler içeriyor. Kitapta 4 ana bölüme yer verilmiş.

Bölüm 1: Temel Finansal Matematik

Bu bölümde finans aritmetiği, faiz hesaplamaları, anüite (kredi ve geri ödemesi gibi) hesaplamaları ile ilgili temel bilgiler verilmiş. Bu bölüm için finans'ın ABC'si diyebiliriz. Bu bölüm 4 işlemi bilen herkesin takip edebileceği şekilde tasarlanmış.

Bölüm 2: Temel Muhasebe Bilgisi ve Temel Finansal Analiz
Bu bölümde şirketlerin mali yapılarını inceleyebilmek için gerekli temel bilgiler verilmiş.

Bölüm 3: Mali Piyasalar ve Enstrümanlar
Para piyasaları, işleyişleri, risk analizi, portföy yönetimi gibi konulara yer verilmiş. Daha çok borsa yatırımcılarını ilgilendiriyor ve çok önemli bilgiler içeriyor.

Bölüm 4: Teşkilatlanmış Piyasa ve Borsalar ve Birbirleriyle Etklileşimleri
Para piyasalarının haricinde yatırım yapılabilecek diğer alternatif piyasalarla ilgili bilgiler veriliyor. Ayrıca Türkiye piyasalarına özel bilgilerden de yine bu bölümde bahsediliyor. En son olarak da piyasaların birbirlerini nasıl etkilediğini anlatıyor. Ne ne yükselirse ne düşer gibi sorularınıza cevap bulacak, bazı yükseliş veya düşüşlerin ne anlama geldiğini daha iyi anlayacaksınız.

Bu kitabı okuduktan sonra tüyolardan, çok bilgili arkadaşlardan, size hiç bir anlam ifade etmeyen konuşmalardan kurtulacak, kendi ihtiyaçlarınıza göre analizlerinizi ve yorumlarınızı yapababilecek kadar işin içine girmiş olacaksınız.

Perşembe, Ağustos 02, 2007

HDR Tekniği ve ToneMapping

Bu ilk yazımda HDR ve Tonemapping tekniği ile ilgili temel bilgi vermeye çalışacağım. Fotoğraf çekerken çekeceğimiz fotoğraftaki aydınlık ve karanlık alanlardaki ışık farkı önemli bir problemdir. Fotoğraf makinesi ortam ışığına göre otomatik olarak kendisini ayarlar. Ancak ayarlar aydınlık alana göre yapılırsa karanlık alanlar siyah çıkar. Eğer ayarlar karanlık alanlara göre yapılırsa bu seferde aydınlık alanlar beyaz çıkar. Bu nedenle ortalama değerlere göre ayarlama yapılır.

Ortalama ayarlara göre çekilmiş bir fotoğraf. Perdeden gelen ışık nedeniyle perdede ve vazonun üzerinde patlamalar var. Normal ayarlarla elde edeceğimiz sonuç budur.


Bu ayarla perdedeki ve vazonun üzerindeki problemleri çözdük ama bu sefer de dolap içlerinde ve koyu renkli perdenin gölgelerinde kararmalar var. Ayrıca fotoğrafın geneli de karanlık oldu.

İnsan gözü bu problemin üzerinden kolaylıkla gelebiliyor ancak ne yazık ki bu fotoğraf makinesi için pek kolay değil. Bu sıkıntıyı çözmek ve güzel görünümlü fotoğraflar oluşturabilmemiz için HDR adı verilen özel bir formatla çalışmaya ihtiyacımız var. HDR basitçe renk bilgisi ile birlikte ışık bilgisinin de tutulduğu özel bir dosya formatı. HDR dosyayı oluşturmak için fotoğrafımızı normal ayarlarla birlikte bir aydınlık bir de karanlık halini çekmemiz gerekir. Dijital fotoğraf makinelerinde AEB (Auto Exposure Bracketing) adı verilen bir özellik vardır. Bu özellik sayesinde Exposure değeri 0, +2 ve -2 üç fotoğrafı peş peşe çekebilmek mümkün. Makine otomatik olarak üç fotoğrafı bu ayarlarla çeker. Aslında yukarıdaki verdiğim örnekteki ilk iki fotoğraf AEB kullanarak çektiğim 0 ve -2 değerli fotoğraflar.



Bu da +2 ile çekilen fotoğraf. Eğer makinenizde AEB yoksa bu ayarları manüel değiştirerek de yapabilirsiniz. Şimdi bu üç fotoğrafı birleştirerek HDR fotoğrafı oluşturacağız. Bunu yapabilmek için Photomatix isimli bir program kullandım. Bu özellik Photoshop'ta da var ama hem Photomatix çok basit bir program hem de Photomatix ile daha iyi sonuç aldım. Bu 3 fotoğraf peşpeşe çekildiği için doğa fotoğraflarında hareketlilik olacağı için sıkıntılar çıkabilir. Photomatix'in Auto Align özelliğini de devreye sokarak bu sorunu gidermeyi deneyebiliriz.
Üç fotoğrafı programa yükleyerek HDR'yi oluşturuyoruz. HDR önceden de bahsettiğim gibi ışık değerlerini de içeren 32 bitlik özel bir dosya formatı. Başka amaçlar için de bu dosyayı Photoshop'a yükleyerek kullanabiliriz. Şimdi biz bu dosyayı kullanarak Tonemapping denilen özel bir teknik ile ışık değerleri düzgün olan sonuç fotoğrafımızı üreteceğiz. Yine Photomatix programının ToneMapping ile ilgili penceresinden bazı küçük ayarlarla oynayarak sonuç fotoğrafımızı üretiyoruz.

Hareketsizlik sağlayabilme amacıyla makinemi koltuğun üzerine koyarak çektiğim için fotoğraf eğri idi. Bunu photoshop ile düzeltip bir iki küçük renk ayarı yaptıktan sonra bu sonucu elde ettim. Aslında diğer fotoğraflara bakıldığında çok etkileyici bir sonuç oldu. Photomatix'in ince ayarlarıyla oynayarak çok daha iyi sonuçlar elde edebilmek mümkün.

Sonucu dikkatle incelerseniz perdedeki patlamayı ve dolap içlerindeki kararmayı düzetmiş olduk. Yazının anafikrinin kolayca anlaşılabilmesi için programla veya makineyle ilgili detaylara fazla girmedim ama sorularınız olursa yanıtlamaya çalışırım.

Çarşamba, Ağustos 01, 2007

Dijital Fotoğrafçılar Icin Photoshop

Photoshop adını artık neredeyse duymayan kalmadı. Profesyonelinden amatörüne dijital fotoğrafla ilgisi olan herkesin bir şekilde faydalandığı çok önemli bir araç. Kırmızı göz giderme, renk düzeltme gibi basit ihtiyaçlara hitap edebildiği gibi, profesyonel rötuşlama, restorasyon gibi çalışmaların da yapılabilmesini sağlıyor. Photoshop dijital fotoğrafçılara hitap ettiği gibi resim sanatçılarına ve grafik tasarımcılara da hitap ediyor. Kullanım amacı farklı olunca programın genel özellikleri ortak amaçlarla kullanılsa da amaca yönelik özellikler de barındırıyor. Örneğin bir ressam burn aracını çok kullanırken grafik tasarımcı bu araca hiç itibar etmeyebiliyor. Bu nedenle Photoshop'u kullanma amacı neyse bu konudaki detaylı özelliklerin detaylı bilinmesinde büyük fayda var.

İnceleyeceğimiz kitap dijital fotoğrafçılar için çok önemli photoshop tekniklerini öğretiyor. Kitabın genel anlamdaki tasarımı ve teknikleri işleyiş şekli gayet başarılı. Tekniklerin hepsi adım adım ekran görüntüleri ile anlatılarak işleniyor. Kimi işler için kullanılan birden fazla teknik varsa onları da ayrı ayrı anlatıyor ve sonuçların karşılaştırılabilmesini sağlıyor. Renkli ve kaliteli kağıda baskı olduğu için fiyatı normal kitaplara göre biraz pahalı. Benim elimdeki kitaba özgü bir problem olabilir ama bazı sayfalarda baskı netliği yeterli gelmediği için karşılaştırmalı görüntülerde uygulanan efektin yarattığı etki fazla belli olmuyor. Bu ufak problemlerin dışında kesinlikle ödenen fiyatı hakedecek seviyede bir kitap.

Uzun zamandır Photoshop kullanıcısı olduğum ve programın her türlü detayını bildiğim halde yine de "belki bilmediğim birşeyler vardır" umuduyla bu kitabı aldım. İyi ki almışım. Bazı teknikleri gerçekten hiç bilmiyordum. Bazı tekniklerde kullanılan kestirme yöntemleri de bilmediğim için aynı şeyi daha uzun yoldan yapıyordum. Bu kitap her anlamda bana çok faydalı oldu. Konuya yeni başlayanlar için de anlatım seviyesinin çok iyi bir düzeyde tutulduğunu söyleyebilirim. Az Photoshop bilginiz olsa dahi bu kitaptan güzel numaralar öğrenmek mümkün.

Kitap temelde 11 ana bölüme ayrılmış.

1. Bölüm: File Browser'a Hakim Olma.
Bu bölümde photoshop kullanımı ile ilgili başlangıç seviyesinde önemli bilgiler verilmiş. Yeni başlayanların atlamaması gereken bir bölüm.

2. Bölüm: Kırpma ve Yeniden Boyutlandırma.
Bu bölümde fotoğrafların boyutları ile oynama, fotoğrafları kesme biçme, kadrajı bozuk veya eğik çekilmiş fotoğrafları düzeltme gibi konulara yer verilmiş.

3. Bölüm: Dijital Makine Görüntü Problemleri.
Az veya fazla pozlama, gürültü, kırmızı göz problemleri gibi sıkıntıları gidermek için kullanılan teknikler anlatılmış.

4. Bölüm: Fotoğrafçılar için Renk Düzeltme.
Beyaz ayarı gibi renk hatalarını düzeltme, fotoğrafları baskıya hazırlama, 16 veya 32 bit ile çalışma gibi konulara yer verilmiş

5. Bölüm: Maskeleme Teknikleri.
Bu bölümde çeşitli seçim yöntemleri ve dekupe (arka planı temizleme) gibi teknikler anlatılmış.

6. Bölüm: Portreleri Rötuşlama.
En beğendiğim bölümlerden birisi. Gözaltı torbaları yoketme, sivilce temizleme, saç rengi değiştirme, göz veya diş beyazlatma ve cilt yumuşatma gibi fotoğrafçılar için önemli birçok tekniğe yer verilmiş.

7. Bölüm: Vücut Yontma.
Bu bölümde de Kalça zayıflatma, beldeki yağları alma, vücut zayıflatma gibi plastik cerrahi konularına girilmiş :)

8. Bölüm: Fotoğrafik Özel Efektler.
Bazı profesyonel fotoğrafçıların makinelerini konuşturarak elde ettikleri özel efektleri ve daha fazlasını siz de photoshop ile basit birkaç teknik uygulayarak yapabilirsiniz. Bunun için bu bölümde anlatılan teknikleri öğrenmek yeterli.

9. Bölüm: Renkliden Gri Ölçekliye
Fotoğraf makinenizde siyah beyaz çekme özelliği olduğu halde yine de bazı yerlerde gördüğünüz kalitede siyah beyaz fotoğraf çekemiyorsanız bu bölümü kaçırmamanız gerekir. Sırrın birkaç basit teknikte yattığını görmek sizi şaşırtmamalı.

10. Bölüm: Profesyonel Keskinleştirme Teknikleri
Ne kadar kaliteli fotoğraf makinesi kullanırsanız kullanın eninde sonunda bazı fotoğraflarınızda oluşan fluluğu giderecek bazı yöntemlere ihtiyaç duyacaksınız. Bu bölümde bunu nasıl yapacağınız anlatılıyor

11. Bölüm: İşinizi Müşteriye Göstermek
E bu kadar teknik öğrendikten sonra profesyonelleşmeye karar verip bilginizi paraya dönüştürmek isteyebilirsiniz. Bu bölümde verilen bilgiler yaptığınız işleri müşteriye sunulacak hale getirme konusunda size çok yardımcı olacak.