27 Eylül 2009 Pazar

asp.net projelerinde web.config dosyasının kalıtımını engellemek

.NET WEB uygulamaları içerisinde bulunduğu dizin içersindeki tüm erişim kontrolleri Web.config dosyası ile kontrol ediyor. Aynı dizin içerisinde yer alan diğer uygulamalar bu dosyayı inherit ederek çalışıyorlar. Yani root domain dizin içerisinde bir sub domain oluşturduğunuzda ve bu sub folder içerisinde farklı bir .NET WEB uygulaması çalıştırmaya kalktığınızda sub uygulamanızın Web.config dosyası root uygulamanın Web.config dosyasından inherit ediliyor. Bu demek oluyor ki siz sub uygulamanızı çağırdığınıza aslında ilk root uygulamanızın Web.config dosyası da işletilmiş oluyor. Eğer root ile uyumlu olmayan ve sub folder içerisinde yolu doğru olarak bulunmayan namespace'ler var ise uygulamanız doğal olarak hata verecektir. Aşağıda bunu basit bir gösterim ile ifade etmeye çalıştım.



Web.config inheritance
Eğer bu kalıtımı engellemek istiyorsanız root domain içerisinde yer alan web.config dosyanızda aşağıdaki gibi bir yapı oluşturmanız yeterli olacaktır;

location path="." inheritInChildApplications="false"
system.web
.
.
.
system.web
location

19 Eylül 2009 Cumartesi

İnternet Nasıl Çalışır?

Pek çoğumuz, İnternet'i günlük hayatımızda web sayfalarını gezmek için, e-posta alıp göndermek için, sohbet etmek için kullanıyoruz. Acaba bu sistemin nasıl çalıştığını tam olarak biliyor muyuz? Her şeyin yerli yerinde olmasını sağlayan bu düzen nasıl işler? Verinin doğru yere ulaşması, hatasızlığı nasıl denetlenir? Adresler, protokoller ve diğer kavramlar tam olarak nedir? Bu yazımızda bu sorulara cevap aramaya çalışacağız.
Temel Kavramlar

Bilgisayar Ağı: İki ya da daha çok bilgisayar arasındaki iletişimi sağlamak için kurulan yapılara bilgisayar ağı adı verilir. Bilgisayar ağları, bilgi ve kaynakların paylaşımını sağlar. Bilgisayarlar arasındaki iletişim, bakır kablolar, fiberoptik kablolar, kablosuz bağlantı gibi altyapılarla sağlanabilir.

İnternet: Küçük bilgisayar ağları bir araya gelerek daha büyük bilgisayar ağlarını oluşturabilirler. İrili ufaklı pek çok ağın birbirine bağlanmasıyla ortaya çıkan, dünya üzerindeki en büyük ağ sistemi İnternet'tir. En büyük özelliklerinden bir tanesi herhangi bir merkeze bağlı olmamasıdır. Bilgisayarlar, telefon hatları (çevirmeli bağlantı), ADSL, WiFi gibi yöntemlerle İnternet'e bağlanırlar.

İletişim protolü: Bilgisayarlar, ağ kullanan tek sistem değildirler. Örneğin, otomobiller de trafik ağını kullanırlar. Trafik akışında her şey rastgele gerçekleşmez. Hangi aracın nereye gideceği, kavşak noktalarında kimin durup kimin geçeceği, araçların hangi hızda hareket etmesi gerektiği belli bir düzenle sağlanır. Trafik ağındaki trafik kurallarına benzer bir kurallar dizisi bilgisayar ağlarında da vardır. İnternet'te verilerin yerli yerine ulaşması için kullanılan kural dizilerine iletişim protokolleri adı verilir.

IP adresi: Posta ağında, bir mektupun yerine ulaşması için zarfın üzerine gitmesi gereken adres yazılır. Bu adrese göre mektup, önce gitmesi gereken ülkenin ana dağıtım noktasına gönderilir. Oradan ilgili şehre, mahalleye, sokağa ve nihayet doğru eve ulaşır. Bigisayar ağlarında veri paketlerinin iletilmesi ve ara dağıtım noktalarında transferi çok benzer bir şekilde gerçekleşir. Tek fark, mektup adreslerinin yerini IP adreslerinin almasıdır. Bir IP adresi "142.98.254.2" gibi bir yapıya sahiptir. Noktalarla ayrılmış dört sayıdan oluşur ve her bir sayı 0'dan 255'e kadar değerler alabilir. En sağdaki sayı, bilgisayarın yerel ağdaki konumunu gösterirken, sola gidildikçe ağların dünya üzerindeki konumunu belirler. İnternet'te gönderilen IP (Internet Protocol) paketlerinin içinde gönderen ve alan bilgisayarların IP adresleri de yer alır.

Alan Adı Sunucusu (Domain Name Server-DNS): IP adresleri, İnternet'teki verilerin nereye ulaşması gerektiğini anlatmak için yeterlidir. Ancak, ne yazık ki sayılar, kelimeler kadar kolay akılda tutulamazlar. Bu nedenle kelimelerle ifade edilen alan adları (domain name) kullanılmaktadır. Alan adı sunucusu denen bilgisayarlar, alan adlarını IP adreslerine "tercüme" ederler. Bu sayede "144.122.1.1" adresini aklımızda tutmaktansa "www.odtu.edu.tr" adresini aklımızda tutmamız ilgili siteye erişmemiz için yeterli olur.
Veri İletimi

Bir web sayfasını ziyaret etmek istediğimizde, bunun bilgisayarımıza nasıl transfer edildiğini ele alalım. Yapmamız gereken ilk şey, web sitesinin adresini, İnternet tarayıcıya (Firefox, Internet Explorer vb) girmektir: "http://www.odtu.edu.tr". Sayfanın açılabilmesi için hangi adreste bulunduğunu öğrenmemiz gerekir. "odtu.edu.tr" alan adına karşılık gelen IP adresi, alan adı sunucusundan öğrenilir.

Bundan sonra İnternet tarayıcımızın web sunucusuna gönderilecek "Bana ana sayfanı gönder" mesajını, web sunucu programının (Apache vb) anlayabileceği bir dile çevirmek gerekir. Web sunucu programları ile İnternet tarayıcılarının anlaşabilmeleri için kullandıkları ortak dil, HTTP'dir. HTTP (Hyper Text Transfer Protocol), uygulama katmanındaki bir iletişim protokolüdür. Bu protokolde, "Bana ana sayfanı göster" cümlesi "GET /index.php" benzeri bir şekilde tercüme edilebilir.

Şimdi mesajı göndereceğimiz bilgisayarın adresini ve göndereceğimiz mesajı hazırladığımıza göre, geriye sadece bu mesajı yollamak kaldı. Ancak bu mesaj yollama işleminde, mesajın doğru bilgisayardaki doğru programa iletildiğinden, mesajın yolda bozunmadığından ve yerine kesin olarak ulaştığından emin olmamız gerekir. Bu ve buna benzer problemleri çözmek için belli bir düzen gerekidir. Bu düzen, farklı katmanlardaki iletişim protokolleri ile sağlanır. Şimdi bu protokoleri ve bulundukları katmanları açıklayalım.
Protokol katmanları

İnternet üzerinde veri iletimi, iç içe geçmiş pek çok protokol katmanı ile sağlanır. Her katman, veri iletişimi ile ilgili bir takım problemleri çözmeyi sağlar ve bir üst katman için veriyi organize eder. Temel olarak İnternet protokol takımında dört katman bulunur.
1.Uygulama katmanı

Bu katman, ağ üzerinden veri iletişimi yapan programların, işlevlerini gerçekleştirmek için kullandıkları protokolleri içerir ve uygulamaya göre çeşitlilik gösterir. Bir uygulamanın gönderdiği ve aldığı ham veri, en üst katman olan uygulama katmanında yer alır. HTTP, HTTPS, FTP, DNS, POP3, IMAP ve SMTP bu katmanda yer alan protokollere örnektir ve her biri farklı uygulamalar tarafından farklı amaçlar için kullanılır.
2.Taşıma katmanı

Taşıma katmanı, donanım altyapısıyla ve verinin hangi bilgisayara gönderileceğiyle ilgilenmeksizin, iki bilgisayar arasındaki veri akışını sağlayan katmandır. Akış ve bütünlük kontrolü gibi denetlemeler bu katmanda yapılır ve verinin hatasız olması sağlanır. Bu katmandaki protokoller, kendi içinde gerekli işlemleri yaptıktan sonra port numarası denen sayılardan verinin hangi programa ait olduğunu öğrenir ve ham veriyi ilgili uygulamaya iletir. Bu katmandaki protokoller bağantı temelli protokoller ve bağlantısız protokoller olmak üzere ikiye ayrılır. Bağlantı temelli protokollerden en önemlisi TCP, bağlantısız protokollerden en önemlisi de UDP'dir.

TCP-Transmission Control Protocol (Aktarım Denetim Protokolü): TCP, bağlantı temelli bir protokoldür. Veri transferi gerçekleşmeden önce iki bilgisayar arasında sanal bir bağlantı kurulmasını gerektirir. Temel işlevleri, verinin doğru sırada iletilmesini, hatalı ya da yerine ulaşmayan verilerin tekrar gönderilmesini, aynı verinin birden fazla gönderilmesi durumunda ayıklanmasını sağlamaktır. Kısaca verinin yerine doğru biçimde ulaştığını garanti eder.

UDP-User Datagram Protocol (Kullanıcı Veri Paketi Protokolü): UDP protokolünde iki bilgisayar arasında kalıcı bir bağlantı kurulmasına gerek yoktur. UDP, yalnızca alınan verinin hatasızlığını denetler. Ancak gönderilen verinin yerine ulaşıp ulaşmadığını ve paketlerin doğru sırada gittiğini garanti edemez. Bu protokolü kullanan uygulamalar, verinin yerine ulaşıp ulaşmadığını kendileri denetlemek zorundadır. Bunu uygulama protokolünde yapabilirler. UDP, genellikle anında ses ve görüntü iletimi gibi verinin zamanında yerine ulaşmasının önemli olduğu uygulamalarda ya da alan adı sorgusu gibi küçük verilerin transfer edildiği ve kalıcı bir bağlantı kurulmasının "masraflı" olduğu uygulamalarda kullanılır.
3.Ağ katmanı (IP-Internet Protocol)

Bu katmanda kullanılan en temel protokol, IP'dir (Internet Protocol). Günümüzde yaygın olarak bu protokolün dördüncü sürümü (IPv4) kullanılmakta olup, altıncı sürümü olan IPv6 yavaş yavaş bunun yerini alacaktır. Internet Protocol, IP adresi denen sayılar kullanarak gönderilen verinin hangi adresten hangi adrese iletildiğini kontrol eder ve verinin doğru yere gitmesini sağlar. Donanım altyapısından bağımsızdır.
4.Donanım katmanı

Fiziksel bir bağlantı üzerinden iletilen veri paketleri, bu katmandaki protokoller tarafından denetlenir. Bu protokoller, ağ kartlarının sürücü yazılımları ve çipler tarafından yürütülür. IP paketlerinin telefon kablosu, fiberoptik kablolar, uydu bağlantıları ve kablosuz ağlar gibi donanımlar üzerinden gönderilip alınması bu katman aracılığıyla sağlanır. Çevirmeli ağ bağlantıları (dial-up modemler aracılığıyla), PPP protokolü ile, ADSL ve kablo modem bağlantıları PPPoE protokolü ile yürütülür. Ethernet, Frame Relay, ATM gibi donanımsal protokoller bu katmanda yer alır.
Veri Paketlenmesi

Bir bilgisayardan diğerine iletilecek veri, protokol katmanlarından aşağı doğru inerken, sırayla ilgili protokoller tarafından paketlenir. Her protokol, bir üstteki protokolden gelen veriye bir başlık ekler. Daha ender olarak, bazı protokoller verinin sonuna bir dipnot da ekleyebilir. Buna göre veri, aşağıdaki şekle benzer bir biçimde paketlenmiş olur.
Veri Paketlenmesi
Bir web sayfasını açmaya çalıştığımızda gerçekleşen veri transferini örnek alalım. Web tarayıcı tarafından gösterilen HTML formatındaki sayfa içeriği, öncelikle HTTP tarafından paketlenir. Bu protokol, sayfayı gönderen sunucu ve gönderilen sayfa ile ilgili temel bilgilerin ve tarayıcıdan talep edilen işlevlerin yer aldığı bir başlık bilgisi ekler. Daha sonra bu paket, TCP'ye aktarılır. TCP, bu paketin başına port numarası, önceki ve sonraki paketlerin numarası, veri bütünlüğünü denetleyen bir kontrol kodu (checksum) gibi bilgiler ekler. TCP'nin paketlediği veri daha sonra da Internet Protocol(IP) tarafından bir başlık bilgisi eklenerek bir kez daha paketlenir. IP'nin eklediği başlıkta gönderen ve alanın IP adresleri, kontrol numarası, paket büyüklüğü ve kontrol kodu gibi bilgiler yer alır. Yeni oluşan paket son kez de donanım katmanındaki bir protokol tarafından (örn. ethernet) paketlenir ve aktarıma hazır hale gelir.

Yazılım geliştirme

Yazılım geliştirme, kullanıcının istediği ürünü, yazılım ürünü haline getirme işidir. Basit bir yemek yapma işinde bile, önce tarifi kafamızda tasarlayıp, sonra elimizdeki ürünleri kontrol edip eklenmesi gerekenleri bulup, sonra da belli bir sırayla yemeği yapmamız gibi, yazılım geliştirme sürecinde de belirli yöntemler kullanılır.

Bu yazımda, sizlere yazılım geliştirmeyi özetlemeye çalışacağım.

Öncelikle, sizden bu yazılımı geliştirmenizi bekleyen tarafı müşteri diye adlandıralım. Müşteri sizden istediği ürünün özelliklerini, kendi bilgi sınırları içerisinde sizlere aktaracaktır. Mesela bir web sitesi yapmanızı isteyen müşteri, sağ üst köşede, fare üzerine gelince aşağıya doğru açılan bölüm olmasını ister, bunun javascriptle yapılacağı ayrıntısını düşünmek sizin görevinizdir.

Bu ilk görüşmeden sonra; kapsamlı olarak geliştirilecek yazılımı düşünüp, bunun için gereksinimleri ortaya çıkarıp bir dokümana yazmanız gerekir. Bu dokümana “gereksinim raporu” denir. Gereksinim raporunda, geliştirilecek yazılım anlatılır, diyagramlarla* anlatım görselleştirilip daha anlaşılır olması sağlanır.

Gereksinim raporunu oluşturmak için “gereksinim mühendisliği” diye bir çalışma alanı bulunmaktadır, tabi ülkemizde ne kadar yaygın olduğu hakkında derin şüphelerim mevcut :)

Gereksinim raporu müşteriye teslim edilip onay alındıktan sonra daha detaylı çalışmalar başlar ve yine dokümanlaştırılır. Bu yeni dokümanda, daha fazla teknik ayrıntı bulunur. Projenin hangi platformda, hangi dille geliştirileceğinden tutun, geliştireceğiniz kodda kullanacağınız classlar ya da veritabanında tutacağınız tablolar, hatta yazacağınız methodlar bile ayrıntılarıyla anlatılır. Detaylı Dizayn raporu olarak adlandırılan bu raporda, gereksinim raporunda olduğu gibi diyagramlar* kullanılır.

Dizayn raporu, ufak tefek yeni özellikler eklenebilecek esneklikte, yıllar sonra başkaları tarafından okunduğunda da anlaşılabilir, geliştirilebilir, tekrar kullanılabilir ve güvenli olmalıdır. Kısaca, geliştirilen yazılımla ilgili ne ararsak bu dokümanın içinde bulabilmeliyiz.

Dizayn raporu için de onay aldıktan sonra, sıra projenin mimarisini somutlaştırmaya gelir ki bu projemizin programlanması ve -varsa- donanımının üretilmesidir. Daha önce yazılan raporlarda belirtilen yöntemler, diller ve veriler kullanılarak, müşterinin istediği yazılım ürünü geliştirilmeye başlanır. Projenin büyüklüğüne göre, bu aşamada da farklı araçlar ve yöntemler kullanılabilir. Özellikle bu aşamada, ürünün kullanımına göre, hızlı olması , güvenilir olması, anormal durumlarda kendini koruyabilmesi gibi önemli konularda dikkatli olmak gerekir. Ürünü geliştirirken, geliştiren kişi, doğru işi yapıp yapmadığını anlamak için ufak testler yazabilir.

Ürünü geliştirme aşamasından sonra, ürünü test etme aşaması başlar. Yazılım testi de başlı başına bir konudur ve yine “yazılım test mühendisliği” diye ayrı bir çalışma alanı vardır. Ülkemizde, özellikle savunma sanayii alanında yazılım test mühendisleri çalışmaktadır.

Yazılım testini özetle anlatmak gerekirse, geliştirilen ürünün her yerinin teker teker doğru çalışıp çalışamadığının kontrol edilmesidir. Bunun için en basitinden açma - kapama, ya da “a“ tuşuna basınca ekranda “a” harfi görünecek mi? denemesi de yapılır, en karmaşık girdiler verilip, sistem bu girdilere karşı kendini koruyor mu diye kontrolü de yapılır.

Yazılım testi için bir çok yöntem ve araç mevcuttur. Geliştirilen ürünün teslim edilmesinden önceki son aşama olduğundan, en riskli dönem olarak da adlandırabiliriz. Test zamanında bulunan hatalar, geliştiricilere raporlanır ve gerekli düzeltmeler yapılarak tekrar test edilir. Ama unutulmamalıdır ki, yapılan bütün testlerden geçen ürün, sorunsuz ürün demek değildir.

Sanmayın ki yazılım geliştirmek benim yukarıda anlattığım kadarıyla bitiyor. Ürün geliştirme ve test etme aşamasında, konfigurasyon yönetimi ve yazılım kalite grubu, sizleri sürekli denetler ve yaptığınız veya yapma ihtimaliniz olan hatalara karşı sizleri uyarır. Bu da, hem ürün geliştirme aşamasında, hem de daha sonrasında karşılaşabileceğiniz hatalara karşı sizleri korur.

Test işlemlerinden sonra yapılacak iş, ürünün müşteriye teslimi, gerekiyorsa kurulumunun yapılması ve bir süre de bakımının üstlenilmesidir (artık aranızdaki anlaşma neyse ona göre :) )

Siz bir projeyi daha teslim etmiş olmanın haklı gururunu yaşarken, müşteri de yeni aldığı ürünü kurcalamaya başlayacak, belki de ilerleyen günlerde başınızı ağrıtacatır :)

(*) Bu diyagramlar, çok geniş bir konu olduğu için ayrıntılara değinmedim. Özetlemek gerekirse, sistemin akışını, sistemdeki yapıların birbirleriyle olan ilişkilerini, ve sistemin yapısını görsel olarak anlatan diyagramlar kullanılır (use case, class, state diagram...vb). Bu diyagramların bazıları sadece belirli raporlarda kullanılabilirken bazıları hepsinde kullanılabilir.

14 Eylül 2009 Pazartesi


Microsoft Student Partners seçildim

Uzun zamandır hayalini kurduğum çok güzel işi gerçekleştirdim ve Microsoft'un Balıkesir üniversitesi tarafındaki öğrenci danışmanı seçildim. Böylece uzun zamandır vermeyi planladığım .net eğitimleri için resmi anlamda elde ettiğim bulunmaz bir nimet olarak nitelendirebilirim. Tabiki bunda 2 senedir Netronda yoğun miktarda sürdürdüğüm çalışmaların ve değerli hocalarım Uğur Umutluoğlu, Burak Batur ve Cenk Özdemirin katkısı oldukça büyük. Lafı fazla uzatmadan benimle bu sevinçi paylaşan diğer arkadaşlarımın adını yayınlıyorum. Herkese bol etkinlikli seneler :)



2009-2010 MSP Listesi

isim üniversite

İBRAHIM ERSOY ANADOLU ÜNİVERSİTESİ

ATAHAN CEYLAN ANKARA ÜNİVERSİTESİ

HÜSEYIN DURMUŞ ATATÜRK ÜNİVERSİTESİ

NAZIF BERAT ATILIM ÜNİVERSİTESİ

NEVZAT YUŞAN BAHÇEŞEHİR ÜNİVERSİTESİ

DILAN ŞAHIN BAHÇEŞEHİR ÜNİVERSİTESİ

ARMAĞAN SEMIH GÖÇMEN BALIKESİR ÜNİVERSİTESİ

ALPER ÖZÇETIN BİLKENT ÜNİVERSİTESİ

ASIL KAAN BOZCUOĞLU BİLKENT ÜNİVERSİTESİ

ARDA DEVELIOĞLU BİLKENT ÜNİVERSİTESİ

GÖKTUĞ KAAN ŞENGÜL BİLKENT ÜNİVERSİTESİ

BAHADIR BÜLBÜL BOĞAZİÇİ ÜNİVERSİTESİ

ERDENER ORTAN BOĞAZİÇİ ÜNİVERSİTESİ

HALIL AKIN BOĞAZİÇİ ÜNİVERSİTESİ

ÖZLEM HANCIOĞLU ÇANKAYA ÜNİVERSİTESİ

KAAN BAŞLI ÇUKUROVA ÜNİVERSİTESİ

ALPER KOCA ÇUKUROVA ÜNİVERSİTESİ

GIZEM GÜLŞEN DOKUZ EYLÜL ÜNİVERSİTESİ

ENGIN YAĞIZ HATAY DOKUZ EYLÜL ÜNİVERSİTESİ

CANSU SULTAN ÇAKIR DOKUZ EYLÜL ÜNİVERSİTESİ

İLKAY İLKNUR EGE ÜNİVERSİTESİ

MEHMET CEM YÜCEL EGE ÜNİVERSİTESİ

MERVE BAYRAMUSTA EGE ÜNİVERSİTESİ

İBRAHIM KIVANÇ ERCİYES ÜNİVERSİTESİ

MUSTAFA KAYA ERCİYES ÜNİVERSİTESİ

ÖMER FARUK ZORLU FATİH ÜNİVERSİTESİ

İBRAHIM RIZA HALLAÇ FIRAT ÜNİVERSİTESİ

SEVIL GÜLEN GALATASARAY ÜNİVERSİTESİ

YASEMIN ÇELIK GALATASARAY ÜNİVERSİTESİ

AYDAN ŞENTÜRK HACETTEPE ÜNİVERSİTESİ

ONUR VAROL İSTANBUL TEKNİK ÜNİVERSİTESİ

HALIL İBRAHIM SÜNTER İSTANBUL TEKNİK ÜNİVERSİTESİ

KEMAL CAN KARA İSTANBUL TİCARET ÜNİVERSİTESİ

YIĞIT TANER AKÇOK İSTANBUL ÜNİVERSİTESİ

ALP ALTINTÜRK İSTANBUL ÜNİVERSİTESİ

BURAK KANMAZ İSTANBUL ÜNİVERSİTESİ

CENK TÜZÜN İZMİR YÜKSEK TEKNOLOJİ

MERİÇ DÖNMEZER İZMİR YÜKSEK TEKNOLOJİ

MUSTAFA BAŞAL K.MARAŞ SÜTÇÜ İMAM ÜNİVERSİTESİ

BUĞRA AYAN KARADENİZ TEKNİK ÜNİVERSİTESİ

MEHMET AYDIN BAHADIR KARADENİZ TEKNİK ÜNİVERSİTESİ

STEFAN KIROF KOÇ ÜNİVERSİTESİ

EREN ATBAŞ KOÇ ÜNİVERSİTESİ

ORHAN YEDIYILDIZ KOÇ ÜNİVERSİTESİ

ABDURRAHMAN KÖKEN KOCAELİ ÜNİVERSİTESİ

AHMET YUSUF KIN MARMARA ÜNİVERSİTESİ

İSMAIL ŞEN NİĞDE ÜNİVERSİTESİ

HACER KÜBRA KÖSE ONDOKUZ MAYIS ÜNİVERSİTESİ

MEHTAP TUZLU ORTA DOĞU TEKNİK ÜNİVERSİTESİ

FILIZ ÖLMEZ PAMUKKALE ÜNİVERSİTESİ

DORUK DALÇAM PAMUKKALE ÜNİVERSİTESİ

ALP YÜCEBILGIN SABANCI ÜNİVERSİTESİ

AHMET ALI SÜZEN SÜLEYMAN DEMİREL ÜNİVERSİTESİ

FATIH COŞKUN TRAKYA ÜNİVERSİTESİ

MUHAMMED MEDENI BAYKAL ULUDAĞ ÜNİVERSİTESİ

ALI HAKTAN IŞILAK YEDİTEPE ÜNİVERSİTESİ

ALKIM ŞENKAN YEDİTEPE ÜNİVERSİTESİ

YUSUF ÖZTÜRK YILDIZ TEKNİK ÜNİVERSİTESİ

HATICE MERIÇ YILDIZ TEKNİK ÜNİVERSİTESİ

DURSUN AHMET KELEŞ YILDIZ TEKNİK ÜNİVERSİTESİ

MEHMET CENGIZ YILDIZ TEKNİK ÜNİVERSİTESİ

EZGI KAYSI YAŞAR ÜNİVERSİTESİ

GIZEM CANSIN PEKUN DOĞU AKDENİZ ÜNİVERSİTESİ

OLCAY KUK DOĞU AKDENİZ ÜNİVERSİTESİ

UĞUR KAZDAL BEYKENT ÜNİVERSİTESİ

SELIM ÖZENÇ OSMANGAZİ ÜNİVERSİTESİ

BEKIR AYTAÇ AĞMA İSTANBUL KÜLTÜR ÜNİVERSİTESİ

MUZAFFER ARMAĞAN SAKARYA ÜNİVERSİTESİ

BURÇ KAAN ŞEN ULUSLARARASI KIBRIS ÜNİVERSİTESİ

29 Aralık 2008 Pazartesi

Yazilimcinin Zaman İçindeki Evrimi :)

High School/Jr.High

10 PRINT "HELLO WORLD"
20 END

First year in College

program Hello(input, output)
begin
writeln('Hello World')
end.

Senior year in College

(defun hello
(print
(cons 'Hello (list 'World))))

New professional

#include
void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}

Seasoned professional

#include
#include

class string
{
private:
int size;
char *ptr;

string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

string(const string &s) : size(s.size)
{
ptr = new char[size + 1];
strcpy(ptr, s.ptr);
}

~string()
{
delete [] ptr;
}

friend ostream &operator <<(ostream &, const string &);
string &operator=(const char *);
};

ostream &operator<<(ostream &stream, const string &s)
{
return(stream << s.ptr);
}

string &string::operator=(const char *chrs)
{
if (this != &chrs)
{
delete [] ptr;
size = strlen(chrs);
ptr = new char[size + 1];
strcpy(ptr, chrs);
}
return(*this);
}

int main()
{
string str;

str = "Hello World";
cout << str << endl;

return(0);
}

Master Programmer

[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
// bring in the master library
importlib("actimp.tlb");
importlib("actexp.tlb");

// bring in my interfaces
#include "pshlo.idl"

[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{

// some code related header files
importheader();
importheader();
importheader();
importheader("pshlo.h");
importheader("shlo.hxx");
importheader("mycls.hxx");

// needed typelibs
importlib("actimp.tlb");
importlib("actexp.tlb");
importlib("thlo.tlb");

[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype THello;
};
};


#include "ipfix.hxx"

extern HANDLE hEvent;

class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);
~CHello();

HRESULT __stdcall PrintSz(LPWSTR pwszString);

private:
static int cObjRef;
};


#include
#include
#include
#include
#include "thlo.h"
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}

HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws
", pwszString);
return(ResultFromScode(S_OK));
}


CHello::~CHello(void)
{

// when the object count goes to zero, stop the server
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);

return;
}

#include
#include
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"

HANDLE hEvent;

int _cdecl main(
int argc,
char * argv[]
) {
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// Initialize the OLE libraries
CoInitializeEx(NULL, COINIT_MULTITHREADED);

CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);

// wait on an event to stop
WaitForSingleObject(hEvent, INFINITE);

// revoke and release the class object
CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();

// Tell OLE we are going away.
CoUninitialize();

return(0); }

extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;

CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
0x2573F891,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0x2573F890,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

#include
#include
#include
#include
#include
#include "pshlo.h"
#include "shlo.hxx"
#include "clsid.h"

int _cdecl main(
int argc,
char * argv[]
) {
HRESULT hRslt;
IHello *pHello;
ULONG ulCnt;
IMoniker * pmk;
WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];

// get object path
wcsPath[0] = '\0';
wcsT[0] = '\0';
if( argc > 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath);
}
else {
fprintf(stderr, "Object path must be specified\n");
return(1);
}

// get print string
if(argc > 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
else
wcscpy(wcsT, L"Hello World");

printf("Linking to object %ws\n", wcsPath);
printf("Text String %ws\n", wcsT);

// Initialize the OLE libraries
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);

if(SUCCEEDED(hRslt)) {


hRslt = CreateFileMoniker(wcsPath, &pmk);
if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

if(SUCCEEDED(hRslt)) {

// print a string out
pHello->PrintSz(wcsT);

Sleep(2000);
ulCnt = pHello->Release();
}
else
printf("Failure to connect, status: %lx", hRslt);

// Tell OLE we are going away.
CoUninitialize();
}

return(0);
}

Apprentice Hacker

#!/usr/local/bin/perl
$msg="Hello, world.\n";
if ($#ARGV >= 0) {
while(defined($arg=shift(@ARGV))) {
$outfilename = $arg;
open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
print (FILE $msg);
close(FILE) || die "Can't close $arg: $!\n";
}
} else {
print ($msg);
}
1;

Experienced Hacker

#include
#define S "Hello, World\n"
main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker

% cc -o a.out ~/src/misc/hw/hw.c
% a.out

Guru Hacker

% echo "Hello, world."

New Manager

10 PRINT "HELLO WORLD"
20 END

Middle Manager

mail -s "Hello, world." bob@b12
Bob, could you please write me a program that prints "Hello, world."?
I need it by tomorrow.
^D

Senior Manager

% zmail jim
I need a "Hello, world." program by this afternoon.

Chief Executive

% letter
letter: Command not found.
% mail
To: ^X ^F ^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout
------------------------------------------------------------------

28 Aralık 2008 Pazar

WebQuest

WebQuest Nedir?
WebQuest bilginin çoğunun ya da tamamının webden geldiği sorgulama merkezli ders formatıdır diyebiliriz. Bu model 95 Şubatında San Diego State Üniversitesindeki Bernie Dodge tarafından geliştirilmiştir.
Olası Özellikleri:
Genellikle grup etkinliklerinden oluşur.Öğrenciler için rol oynama içerir.Tek veya birden fazla alanı (interdisipliner) kapsayabilir. Webquestler Kısa Süreli ve Uzun Süreli olmak üzere iki çeşittir.
  • Öğretim hedefi: bilgi kazanımı ve entegrasyon
  • Öğrenciler önemli ölçüde yeni bilgiler edinir ve bu bilgileri anlamlı hale getirir.
  • 1-3 ders süresince olabilir.
  • Öğretim hedefi: bilgiyi geliştirmek ve sadeleştirmek.
  • Öğrenciler bilgiyi derinlemesine analiz eder, farklı durumlara uyarlar ve anladıklarını bir şekilde sunarak gösterirler.
  • 1-4 hafta süresince olabilir.

Amacın net bir şekilde ortaya konulması ve etkin olabilmesi için Webquestlerinin minimum olarak aşağıdaki bölümleri içermesi gerekir.
  1. GİRİŞ:Durum ortaya konmalı ve duruma ilişkin ön bilgiler sunulmalıdır.
  2. İŞLEM:Yapılabilir, güdüleyici,ve yönlendirilebilir olmalı, etkinliğin sonunda öğrencinin ne yapmasını istediğimize ilişkin bir açıklama içermelidir.
  3. BİLGİ KAYNAKLARI:Öğrencinin işlemi gerçekleştirmesi sırasında yardımcı olması amacıyla öğretmen tarafından belirlenmiş web sitelerinin adresleridir.
  4. SÜREÇ:Açık bir şekilde tanımlanmış adımlardır.
  5. DEĞERLENDİRME:Elde edilen bilgilerin ne şekilde organize edileceğidir. Sonuçları ölçebilme yeteneğidir.
  6. SONUÇ:WebQuest sona erdirilir, öğrencilere ne öğrendiklerini veya ne başardıklarını hatırlatılır.