Tuesday, August 28, 2007

Computer Sayings (My Favorites)

There are two ways to write error-free programs; only the third one works.

  • A printer consists of three main parts: the case, the jammed paper tray and the blinking red light.
  • The programmer's national anthem is 'AAAAAAAARRRRGHHHHH!!'.
  • At the source of every error which is blamed on the computer, you will find at least two human errors, including the error of blaming it on the computer.
  • Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for "still doesn't work."
  • Computer analyst to programmer: "You start coding. I'll go find out what they want."
  • Computer Science: solving today's problems tomorrow.
  • Hidden DOS secret: add BUGS=OFF to your CONFIG.SYS
  • Hit any user to continue.
  • I wish life had an UNDO function.

  • If your computer says, "Printer out of Paper," this problem cannot be resolved by continuously clicking the "OK" button.
  • It said "Insert disk 3..." but only 2 fit in the drive.
  • Microsoft Windows: computing While U Wait
  • 665.9238429876 - Number of the Pentium Beast
  • I have yet to meet a C compiler that is more friendly and easier to use than eating soup with a knife.
  • My software never has bugs. It just develops random features.
  • Programming graphics in X is like finding sqrt(pi) using Roman numerals.
  • "To know recursion, you must first know recursion"
  • Life's unfair - but root password helps!
  • Mountain Dew and doughnuts... because breakfast is the most important meal of the day.
  • Hey! It compiles! Ship it!
  • "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
  • Intel: We put the "um..." in Pentium.
  • Helpdesk tip #2: When the support analyst says "Click...", wait for the rest of the sentence.
  • BREAKFAST.COM Halted...Cereal Port Not Responding
  • BUFFERS=20 FILES=15 2nd down, 4th quarter, 5 yards to go!
  • As a computer, I find your faith in technology amusing.
  • Disinformation is not as good as datinformation.
  • Smash forehead on keyboard to continue.....
  • Enter any 11-digit prime number to continue...
  • All wiyht. Rho sritched mg kegtops awound?
  • A good programmer makes all the right mistakes.
  • Managing programmers is like herding cats.
  • "There is an old saying that if a million monkeys typed on a million keyboards for a million years, eventually all the works of Shakespeare would be produced. Now, thanks to Usenet, we know this is not true."
  • "A good programmer is someone who looks both ways before crossing a one-way street."
  • C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg.
  • A computer scientist is someone who, when told to "Go to Hell," sees the "go to," rather than the destination, as harmful.
  • 1010011010 - The binary number of the Beast
  • APATHY ERROR: Don't bother striking any key. Application has reported a "Not My Fault" in module KRNL.EXE in line 0200:103F
  • "The three most dangerous things in the world are a programmer with a soldering iron, a hardware type with a software patch and a user with an idea."

Monday, August 27, 2007

Veritabanı Nedir?

GİRİŞ

Bu dökümanda aşağıdaki konular ele alınacaktır

  1. Veritabanı tanımı
  2. SQL nedir?
  3. Veritabanlarının kullanım alanları
  4. Relational veritabanlarının açıklanması
  5. Veritabanı çeşitleri ve açıklamaları
  6. Hangi veritabanı nerede kullanılmalıdır?
  7. e-posta listeleri

Veritabanı nedir?

http://www.m-w.com/ adresindeki Merriam-Webster sözlüğünde bir veritabanı :

“a usually large collection of data organized especially for rapid search and retrieval (as by a computer)” olarak tanımlanır. Şuanda çalışmakta olduğum ortramdan çıkardığım tanımıysa “You know DB is most complicated arena , just behind Operating system” olarak değerlendirilmesi gerken en karmaşık ve önemli yapılardandır.

Kitaplıklar, uygulamalar ve yardımcı programların birleşmesinden oluşur.

Verilerin saklanması ve yönetilmesi ile ilgili konulardaki ayrıntılardan veritabanı yöneticilerini kurtarır.

Kayıtların güncellenmesi ve kayıtlar üzerinde araştırma yapılması da mümkündür.

SQL (Structured Query Language)

Veritabanı dilidir. Program geliştiriciler, bir veritabanına veri eklerken, silerken, güncellerken veya sorgularken bu dili kullanırlar.

ANSI ve ISO standardıdır.

Select, Delete, Update, Where

SQL Nedir?

SQL (Structured Query Language)

Veritabanı dilidir. Program geliştiriciler, bir veritabanına veri eklerken, silerken, güncellerken veya sorgularken bu dili kullanırlar.

ANSI ve ISO standardıdır.

Select, Delete, Update, Where

Neden Veritabanı?

Gerçekten veritabanına gereksinmeniz var mı?

Veritabanları, verilerin saklanması ve yönetilmesi için kullanılmalıdır.

Küçük bilgiler için metin dosyaları yeterli olabilir.

Amacınızın iyi belirlenmesi gerekir.

Veri sadece bir konuyu içeren bir listenin içinde mi?

Sorun karmaşık mı?

İstatiksel bir analiz mi yapmak istiyorsunuz?

Bir yönetim mi yapacaksınız?

Metinsel veritabanları

Kullanım kolaylığı

Bilimsel formüllere gereksinmeniz olacak mı?

Veriyi paylaşma gereksinmeniz olacak mı?

Veriyi webde sunacak mısınız?

Relational Database Modeli (RDBMS)

Tablolardaki kayıtlar matematiksel açıdan tuple olarak tanımlanırlar.

Bir tuple tanımlanmış bir veri tipi olan bileşenlerden oluşan sıralı grup olarak tanımlanır.

Tüm tuplelar aynı sayıda ve tipte bileşenlerden oluşur.

{“ab01”, “Aydın”, “2001”}.

{“ab02”, “İstanbul”, “2002”}

Örnekteki her bir tuple da 3 bileşen bulunmaktadır:

Kaçıncı akademik bilişim olduğu (string)

Hangi ilde yapıldığı (string)

Yıl (numeric)

Relational veritabanlarında bu “kümeye” ya da tabloya eklenen tüm kayıtlar aynı biçemde olmalıdırlar

{“ab02”, “Aydın”}

– eksik bileşen

{“ab02”, “Aydın”, “2002”, “Şubat” }

fazla bileşen

{2002, “ab02”, “Aydın”}

– yanlış bileşen tipleri (yanlış sırada)

Ayrıca tuple lardan oluşan bir tabloda aynı veriler bulunmaz.(No duplicate record). Dolayısıyla relational veritabanlarındaki herhangi bir tabloda birbiriyle tamamen aynı iki kayıt (row or record) bulunamaz.

Bu, çok gereksiz bir sınırlama olarak görünebilir. Örnek vermek gerekirse, aynı kullanıcının aynı malı iki kez sipariş etmesi görünürde engellenmiştir. Bunu da tabloya bir bileşen ekleyerek çözebilirsiniz.

Bir kayıttaki her bir bileşen “atomik”, yani bir veri olmalıdır; başka bir kayıt ya da diğer bileşenlerin listesi olamaz.

Tablodaki bileşenlerin veri tipleri de üsttekilerle ve dolayısıyla tablo tanımlarındakilerle aynı olmalıdır. (Veritabanı tarafından desteklenen veri tiplerinden biri olmalıdır.).

Birbiriyle eş kayıtları ayırmak için kullanılan bileşenlere key denir.

referential integrity.

Tablodaki bir kaydı diğer tüm kayıtlardan ayırmak için kullandımız bileşene, primary key adı verilir. Primary key, o kaydı “unique” yapar. Tüm relational veritabanlarında her bir tablo ya da relationda mutlaka primary key olmalıdır.

Veritabanı çeşitleri

Öncelikle ne yapılacağına karar verilmelidir:

  1. Bu veritabanı ile neler yapacaksınız? Küçük bir şirket çalışanlarının özel bilgileri mi tutulacak, yoksa büyük bir şirketin binlerce müşterilerinin bilğileri mi?
  2. Sitenizi günde kaç kişi ziyaret edecek?
  3. Aynı anda kaç işlem yapılacak?
  4. Güvenlik ne ölçüde olacak?

Verilerinizin güvenliği ne ölçüde olacak?

Yanlış bir kanı : “Paralı ürünler iyidir, ücretsiz ürünler iyi değildir!

Linux, bu tezi çürüten, bilgisayar sektöründeki son yıllardaki en iyi konudur.

Bir veritabanının ücretsiz olup olmamasından çok işinizi görüp görmeyeceği önemlidir.

  1. Microsoft Access (Hala bankalarda kullanılan m.ö’den kalan db)
  2. MySQL (tam anlamıyla sp yazamadığın nasa’nın nasıl kullandığına hayret ettiğim db)
  3. IBM DB2 (Yetenekleri hiçbirzaman Oracle kadar olamayacak pahalı db)
  4. Informix
  5. Microsoft SQL Server (Her ms ürünü gibi kullanmaya mecbur kalacağım db)
  6. PostgreSQL (Favorim – Open Source’un en kral db’si)
  7. Oracle (Hala var olan en yetenekli ve gelişmis db)
  8. Interbase

MS Access

Microsoft Office ürünüdür.

Küçük ölçekli uygulamalar içindir.

Tablo başına 2 GB a kadar veri depolayabilir.

Aynı anda 255 bağlantıya izin verebilir.

Linux/MAC sistemlerinde kullanılamaz.

“Transaction locking” özelliğine sahiptir, ancak “trigger” ve “stored procedure” özelliklerine sahip değildir.

MySQL

MySQL Inc.

Windows, Linux, OS/2,Solaris, AIX vb.

“trigger” ve “stored procedure” özelliklerine sahiptir, ancak “Transaction locking” özelliği bulunmamaktadır.

Tablo başına 2 GB veri depolayabilir.

IBM DB2

IBM

Access ve MySQL e göre daha performanslı, ancak küçük işletmelere göre daha yüksek maliyete sahiptir.

*nix ve Windows üzerinde çalışabilir.

Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.

Informix

Illustra

Ücretli ve güçlü bir veritabanıdır.

Orta ölçekli işletmelerin yükünü kaldırabilecek kapasitededir.

1994’deki Postgres kodundan geliştirilmeye başlanmıştır.

MS SQL Server

Microsoft

Dezavantajı: Sadece Windows üzerinde çalışabilir. Yüksek maliyet

Kullanım kolaylığı, güvenilirliği,işlem gücü

Maliyeti diğer veritabanlarına göre yüksektir.

Tablo başına 4 TB veri depolayabilmektedir.

“Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.

PostgreSQL

PostgreSQL Global Development Group

Linux, Unix, BSD, Windows, AIX vb.

Ücretsiz, akademik bir veritabanı

Çok güçlü işlem yapısı

Veri güvenliği ön planda

Tablo başına 64 TB veri tutabilme özelliği

“Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.

Anlıyacağınız Oracle’ın ücretsiz haline yakındır, 14tb veri tuttuğunu gözlerimle gördüm :)

Oracle

Oracle, Inc.

Dünyanın en güçlü ve güvenilir veritabanı olarak gösterilmektedir.

Support konusunda sorunu olmayacak, yüzlerce tool’u olan bir efsanedir.

Çok yüksek maliyetlidir

Windows, Unix, Linux

Oracle, sınırsız sayıda tabloları desteklemektedir.

Hangi Veritabanını Seçmeli?

Çok derin ve stratejik bir karar olmakla birlikte çok çok sığ bakarsak olaya;

Küçük yoğunlukta trafik: MySQL ya da Access

Daha büyük ve orta ölçekli uygulamalar içinse, MS SQL ya da Linux makineler ve Server'lar üzerinde PostgreSQL kullanılabilir.

Oracle ise çok yüksek güvenilirlik ve işlem gücü gerektiğinde tercih edilen bir veritabanı sunucusudur.

Port Forwarding Nedir?

Port yönlendirmeyi anlayabilmek için IP ve Port hakkında biraz ön bilgiye sahip olmak gerekiyor, buradan gün itibariyle hakim olduğum akademik bilgi ölçüsünde olay şöyle:


Her internete girdiğimizde bir adet global IP adresi alırız, bu IP adresi tüm dünyada tekil olduğu için aslında bizim bilgisayarımızın Internet üzerindeki adresine denk gelir. Gerçekte Internete bağlantı kuran cihaz modem olduğu için aslında internete giren modemdir, modem internet bağlantısını sağlayıp sonra kendisine bağlı bilgisayar(lar)la bunu paylaşır, tüm dünyada tekil olan IP adresini de modem almış olur. Modemle bilgisayarımız arasında da küçük bir lokal network oluşur, lokal networkteki her cihazın yine birer IP adresi olması gerekeceği için, sonuç olarak bilgisayarımızın bir adet, modemin ise iki adet IP adresi olur.Modemin sahip olduğu IP'lerden biri tüm dünyada tek olan global IP adresidir, diğeri de kendi lokal networkumuzde geçerli olan lokal IP adresidir. Bilgisayarımız ile internet arasında kurulan iletişim, gerçekte bilgisayar ile modem arasında lokal ip'ler üzerinden kurulur, modem port yönlendirme yaparak bizim isteklerimizi internette ilgili bilgisayarlara yönlendirir ve bu işlem otomatik olarak gerçekleştiği için biz bunun farkına varmayız ama bazı durumlar vardır ki bu port yönlendirme işlemi otomatik yapılamaz bu durumda bizim bir takım tanımlamalar yapmamız gerekir.
Hangi durumlarda port yönlendirmeyi bizim yapmamız gerekir?
Buradaki en önemli konu, iletişimi kimin başlattığını bilmektir. Çünkü bu bizi port yönlendirmeye ihtiyacımız var mı yok mu noktasına getirecektir. Eğer iletişimi başlatan taraf biz isek herhangi bir port yönlendirme işlemi yapmaya gerek yoktur, çünkü iletişime başlarken karşı tarafa nerde olduğumuzu iletiriz. Eğer bilgisayarımıza uzaktan erişilmesini istiyorsak bu durumda iletişimi uzaktaki bilgisayar başlatacaktır ve uzaktaki bilgisayar sizin IP adresinizi ve hangi port'u kullanarak iletişim kuracağını bilmesi gerekir. Internetteki IP adresinizi en pratik olarak http://www.checkip.net adresine girerek öğrenebilirsiniz. Bunu öğrenmek yeterli olmamaktadır çünkü bu IP ile bilgisayarımıza değil ancak modemimize erişilebilir, bu durumda modem'e demelisiniz ki "dışarıdan sana gelen bu istekleri benim bilgisayarıma yönlendir". Aslında dışarıdan gelen isteklerin içinde bir de port bilgisi olacağı için modeme tam olarak şunu demelisiniz "Dışarıdan senin X portuna gelen istekleri, benim bilgisayarımın X portuna yönlendir." bunun adı port yönlendirmedir. Eğer modeme birden fazla bilgisayar bağlı ise X portundan gelenleri A bilgisayarına, Y portundan gelenleri B bilgisayarına yönlendir diyebilirsiniz. Örneğin bu bilgisayarlardan biri WEB sunucu diğeri Email sunucu olabilir. Sahip olduğunuz bir IP adresi ile modeminize bağlı birden fazla bilgisayara erişim yapılması sağlanabilir, bu nedenledir ki Port Yönlendirme işlemine bir çok yerde Virtual Server (sanal sunucu) oluşturma adı da verilir.

Dia ile çizdiğim yukarıda şekil, Windows'un Remote Desktop uygulaması ile bilgisayarınızı uzaktan kullanırken oluşan akışı gösteriyor. Uzaktaki bilgisayar 'dan Remote Desktop programını başlattığınızda size bir IP soracaktır bu IP evdeki modeminizin internete bağlanırken aldığı IP'dir e.g. 160.75.114.119'dur.
3389 portunu siz vermiyorsunuz, Remote Desktop bu portu kendisi kullanarak bağlantı sağlıyor. Sonuçta IP ve Port bilgisi ile modeminize erişim sağlanıyor, modem ayarlarında yer alan port forwarding ya da virtual server bilgisi sayesinde bağlantı isteği, evdeki lokal networkte yer alan bilgisayarınıza yani örnekteki 192.168.1.2 numaralı IP'nin 3389 portuna yönlendiriliyor. Bundan sonra artık iki program arasında sağlanan iletişim ile evdeki bilgisayarınızı uzaktaki bilgisayar ile kullanmaya başlıyorsunuz.

Port Yönlendirme veya Virtual Server tanımlama işlemi modem yönetim programı ile yapılmaktadır, görüntüsü modem üreticisine göre farklılık gösteren ama genelde web tabanlı çalışan bu arayüzlerden gerekli örnekleri web'ten de bulabilrsiniz.

Tercih edilen üreticiler, arayüzlerinin gelişmişliği sırasıyla dlink, linksys, zoomve us robotics olarak verilebilir.