Okunası Makaleler

26 Tem 2008 In:

Oldukca uzun zamandır yazılım geliştirme konusunda paylaşmayı düşündügüm bir çok şeye Kadir ÇAMOGLU nun sitesinde rastlayınca, yazmış kadar oldum :)
Ve hemen paylaşmak istedim.

Yazılım Geliştirme ve Analiz

Yazılımda Hatalar ve Hata Ayıklama
Yazılım Projelerinde "Proje Yönetimi" Boyutu
Yazılım Geliştirme Süreci
Başlarken.. (Hem müşterinin, hem yazılımcının, hem de yazılımın hakkını vererek yazılım üretelim.)

Çok hoş makaleler, yeni başlayanlar ve proje geliştirme sürecindekilerin için olmazsa olmazları dile getirmiş Kadir bey.
Bedeli ödenmiş tecrübelerden istifade etmemek ahmaklıktan başka bir şey degil.

.Net Micro Framework nedir?

22 Tem 2008 In: .Net Micro Framework
2003 yılında Microsoft un .Net adı ile geliştirdigi yazılım framework ü 5 yıl içerisinde hatırı sayılır bir yol aldı. Piyasaya sürüldügünü zamandaki rakiplerinin gerek sürekli kan kaybetmesi, gerek Microsoftun üstün gayretleri ve destegi sayesinde zamanımızın en popüler uygulama geliştirme platformu olmuştur.

Masaüstü, web, mobil e derken şimdi .Net platformu ile gömülü sistemlerede uygulama geliştirilebilecek. Üstelik Visual Studio gibi yeryüzünün en gelişmiş IDE si ile.

Micro Framework ün PORT edildigi donanımlar çok az enerji ile çalışan, MMU u olamayan 32 bitlik ARM işlemcilere sahip cihazlar. Ve cihazlar kendinden bootable. Yani her hangi bir işletim sistemine gerek duymuyor( on-the-metal ).  640 kb RAM, 512 kb ROM çalışması için yeterli. Mevcut Windows CE ve windows XP embedded tan oldukca az sistem kaynagına ihtiyaç duyuyor.

Sahip oldugu baglantı zenginligi cihazı oldukca güçlü kılıyor, neler yokki:
- flash memory
- EEPROM
- GPIO
- I2C
- SPI
- USB  
- Ethernet

Bu platforma direk C# ile kod yazmak cihazı daha degerli kılıyor. Bir çok sensör baglana biliyor. Sensorlerden alınan veriler tıpkı bir PIC de çalışır gibi kodlanıp işlene biliyor.
 

Mevcut PLC lerin yerine kullanılmamasının tek nedeni real-time olayı. Kodun ne kadar sürede cevap verebilecigini MF garanti edemiyor. Kod çalışması gerektiginde 100 ms veya 20 ms demi tepki verecegi bilemiyorsunuz. Sabit bir süre olmadıgı için gerçek real-time olmuyor.

Ama geliştirdiginiz uygulamada 1 saniyeden daha az sürede tepki vermekte gecikmesinin bir önemi yoksa, Micro Framework tam size göre. Mesela kritik bir uygulamada Garbage Collection çalışmaya başlarsa, tepki süresi elbette geçikiyor, belki 150 ms de interrupt a cevap veriyor.

Dolayısıyla real-time uygulamalar için native kod destegi olması gerekiyor.

Bekliyelim hep beraber görelim...

Saglık-NET

22 Tem 2008 In: .net, program, tam-med

Sağlık-NET, sağlık kurumlarında üretilen her türlü veriyi, doğrudan üretildikleri yerden, standartlara uygun şekilde toplamayı, toplanan verilerden tüm paydaşlar için uygun bilgiler üreterek sağlık hizmetlerinde verim ve kaliteyi artırmayı hedefleyen, entegre, güvenli, hızlı ve genişleyebilen bir bilgi ve iletişim platformudur.

 

Sağlık-NET ile yapılmak istenen; vatandaşların "doğumdan ölüme kadar ve ölüm sonrasında" sağlık verilerini merkezde güvenli bir şekilde tutmak suretiyle sağlık bilgisine erişimi kolaylaştırıp hizmet kalitesini artırmaktır.

e-Saglık olarakda adlandırabilecegimiz bu hizmet Ekim 2008 ayından itibaren devlet hastanelerinde, Ocak 2009 itibarı ilede özel hastanelerde faaliyete başlıyacak. Şu an yanlızca hasta veri setleri iletile biliyor, ama yakın gelecekte mali ve idari veri setleri de iletilmeye başlanacak.

Hizmet WSE ile güzenligi saglanan Web Servisleri üzerinden verilmekte. Saglık bakanlıgı tarafında, Oracle veri tabanı ve Application serverları kullanılmakta. Java kullanılarak geliştirilen web servislerinin listesi aşagıda




Hastanelerin en kısa sürede bu sisteme kendilerini entegre etmeleri gerekmekte. Hastanede ki hasta ile ilgili işlemlerin saglık bakanlıgına Saglık-NET ile iletilmesi bekleniyor. Tabiki iletilecek verilerin çeşitliligi bu sistemi oldukca karmaşık kılıyor.

Mesela basit bir aşı bildirimi için hasta bilgisi, işlem bilgisi,  aşının ICD kodu ve uygulama bilgileri. Yukarıdaki her bir işlem için ayrı web servisler üretilmiş.
Her birinde ortak kullanılan bir çok nesne olmasına ragman, ayrı WSDL lerden eklenip türetilmesinden dolayı her objeyi yeniden yaratmanız gerekmekte.

Buda cod hammallıgına dönüyor. C# da dynamic casting yapılmadıgı için her Web servisinde(WSDL) yeniden tanımlamak gerekmekte. Belki bazı şık çözümler üretmek için tartışılabilir. MSVS ler HL7 kullanılarak modellenmiş (kırpılmış). Bizden once aynı sistemi uygulayan çeşitli ülkelerden örnek alınmış.

Peki client lar ve saglık bakanlıgı hangi ortak dili kullanacak ?
    Mesaj standartı olarak HL7 v3.0 tercih edilmiş, bu yeni standart XML temelli olmasında dolayı, hem gözle takip edile biliyor hemde makinalar arasında çok rahat tranfer edilebiliyor.

HL7 v3.0 da gonderilecek verilerin standartı ne olacak? Herkes aynı saglık terimlerini nasıl kulanıcak?
    Ulusal Sağlık Veri Sözlüğü (USVS) adı verilen yapı ile butun saglık camiası aynı terimleri ve kullanılacak Veri tipleri burada tanımlı. Kullanıcıların gönderebilecegi tanımlı veriler ise Sağlık Kodlama Referans Sunucusu ( SKRS)  serverindeki web servisinden sorgulana biliyor.

HBS ler bu verileri kendi serverlarına taşıyacak ve belli aralıklarla güncelleyecekler. ICD kodları, Aşı kodları, ülke bilgileri, tanı lar hepsi bu serverde tutuluyor:


• Tanı Sınıflama Sistemi (ICD–10)
• Tanı Sınıflama Sistemi (ICPC2)
• İlaç ve İlaç Sınıfları Kodlama Sistemi (ATC)
• Sağlık Uygulama Tebliği (SUT) Kodları
• Klinik Kodları
• Branş Kodları
• Sağlık Kurumu Kodları
• Adres Kodları
• Aşı Listesi
• Aşı Takvimi Değerleri Listesi
• Meslek Grupları Listesi
• Parametreler Listesi
• Bebek İzlem Listesi
• Gebe İzlem Listesi
• Çocuk İzlem Listesi
• Persentil Değerleri Listesi
• Olası Tanı Kriterleri
• Enfeksiyon Etkenleri Tanı Kriterleri
• Tümör Yerleri
• Kesin Tanı Kriterleri
• Histoloji Kodları
• Doktor Bilgi Bankası
• Sözlük Veri Kapsamı Alan Kodları

İzmir, Çeşmedeki çalıştay entegrasyon açısından oldukca verimli geçti. Saglık bakanlıgındaki personel ve SRDC ekibi (TestBATN ı geliştiren ekip) destek konusunda sınır tanımadılar ve özverilerililerdi.

Bizim tarafda mevcut HBS ile entegrasyon hızla yol alıyor. TAMMED , saglık-net'e hazır.

Neden herkes böyle bir telaş içinde?


Herhangi bir kitapçıya gittiğinizde Teach Yourself Java in 7 Days (7 Günde Java Öğrenin) benzeri, size birkaç günde veya birkaç saatte Visual Basic, Windows, Internet (vs.) öğretmeyi vadeden kitaplarla karşılaşırsınız. Amazon.com'da şöyle bir arama yapınca:
    pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
    (1992'den sonra basılmış baslığında gün ve öğrenin kelimeleri geçen kitaplar)

karşıma 248 sonuç geldi. Bunların ilk 78 tanesi bilgisayar kitaplarıydı (79. ise, Learn Bengali in 30 Days (30 Günde Bengalice Öğrenin)). "Gün" anahtar sözcüğünü "saat" ile değiştirdiğimde ise sonuç benzerdi: ilk 77 bilgisayar kitabını 78. olarak Teach Yourself Grammar and Style in 24 Hours (24 Saatte Gramer ve Stil Öğrenin) takip ediyordu. Gelen toplam 253 sonucun ilk 200'ünün %96'sını bilgisayar kitapları oluşturuyordu.

Birkaç günde, Beethoven, Kuantum Fiziği ya da köpek eğitimi öğreten kitaplar yok. Bu sonuçlara bakılırsa, ya insanlar bilgisayar hakkında yeni şeyler öğrenmek için çok hevesli ve aceleci ya da bu iş bir şekilde inanılmaz derecede kolay.

Bakalım Learn Pascal in Three Days (3 günde Pascal Öğrenin) benzeri bir başlık ne anlama gelebilir:


Learn(öğrenin): İlk olarak 3 gün kayda değer programlar yazarak, yazdığınız programlardaki başarı ve başarısızlıklarınızdan ders almanıza yetecek bir süre değildir. Ne tecrübeli bir programcıyla çalışmaya, ne de o ortamın içinde yaşamanın nasıl bir şey olduğunu anlamaya zamanınız olmayacaktır. Bu durumda sadece yüzeysel bir aşinalıktan bahsedilebilir, derinlemesine bir kavramadan değil. Kısacası dili iyi öğrenmeye fırsatınız olmayacaktır. Alexander Pope'nin de söylediği gibi bir "yarı bilgili olmak çok tehlikelidir" .


Pascal: 3 gün Pascal'ın sözdizimini öğrenmeye yetebilir (tabii eğer benzer sözdizimli bir dili önceden biliyorsanız) , ama bu sözdizimini verimli bir şekilde kullanmayı öğrenemezsiniz. Kısacası, eğer bir Basic programcısıysanı z, Pascal'da Basic mantığına dayanan programlar yazmayı öğrenebilirsiniz ama Pascal'ın hangi özellikler için iyi (ve nelerde kötü) olduğunu öğrenemezsiniz. O zaman ne anlamı kalır ki? Alan Perlis "Programla mantığınızı etkilemeyen bir dili öğrenmiş olmanın bir değeri yoktur." demis. Bir ihtimal, belirli bir işin üstesinden gelmek için biraz Pascal (yada muhtemelen Visual Basic ya da JavaScript) öğrenmeniz gerekiyordur. Bu durumda da nasıl programlama yapacağınızı değil, ancak o anki sorunun üstesinden nasıl geleceğinizi öğrenirsiniz.


in Three Days(üç günde): Malesef, ilerki bölümde de göreceğiniz gibi bu süre yetersiz.


On yılda Programlama Öğrenin
Araştırmacıların da (Hayes, Bloom) ortaya koyduğu üzere, satranç oynamaktan beste yapmaya, resimden piyanoya, yüzmeden tenise ya da nöropiskoloji ve topoloji alanlarında araştırma yapmaya kadar bir çok alanda uzman olmak, on yıl civarında bir zaman alıyor ve bunun bir kısayolu var gibi gözükmüyor. Daha 4 yaşında müzik dahisi olduğu anlaşılan Mozart bile, ancak 13 sene sonra dünya çapında ses getirecek bestelerini yapmaya başlamış. Diğer bir tarzda, Beatles, 1964'te sahnelere, ardarda hit olan şarkıları ve Ed Sullivan'ın programında çıkmalarıyla gelmiş gibi gözükseler de, aslında 1957'den beri Liverpool ve Hamburg'da küçük klüplerde çalıyorlardı. Başlangıçta kitleleri çabuk cezbetmelerine rağmen ilk kayda değer başarılarını 1967'de Sgt. Peppers ile yakaladılar. Samuel Johnson'a göre bu süreç on yıldan da fazla sürmekte: "Herhangi bir alanda kusursuzluğun, bir ömürboyu o iş için çalışmaktan daha hafif bir bedeli yoktur." Chaucer de, bir sanatı öğrenmenin çok uzun sürdüğünden, ama hayatın çok kısa olduğundan yakınır.

Benim programcılıkta başarı için tavsiyelerim şunlardır:
Sırf ne kadar eğlenceli olduğunu görmek için programcılıkla biraz uğraşın, programlar yazın. Programcılığın, on sene uğraşmak istemenizi sağlaycak kadar eğlenceli olan boyutunu kaybetmemesini sağlayın.


Diğer programcılarla konuşun, başka programları okuyun. Bu herhangi bir kitap veya kurstan daha önemli ve yararlıdır.


Programlar yazın. Öğrenmenin en iyi yolu pratiktir. Daha teknik bir şekilde ifade edecek olursak; "Bireylerin performansları nın en üst düzeyine, elde edilen tecrübelerle erişilemez, fakat çok deneyimli bireylerin bile gelişme yönündeki yoğun çabaları performanslaı nı yükseltmeye yeter." (s.366) ve "En verimli öğrenme şekli, bireyin seviyesine uygun bir konu üzerinde, bilgilendirici geri beslemeler, tekrarlama fırsatları ve hataların düzeltilmesi gibi çalışmalar gerektirir." (s.20-21) " Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life" isimli kitap bu bakış açısı için ilginç bir referans olabilir.


İsterseniz, üniversitede alacağınız dört yıllık bir eğitim ile (veya yüksek lisans için daha fazlası ile) bazı işler için gereken referansları elde edebilirsiniz. Ayrıca bu sayede konu üzerinde derinlemesine çalışmalar yapma şansı da bulabilirsiniz. Ama okuldan keyif almıyorsanız, biraz daha fazla çaba ile iş ortamında da bu tecrübeyi kazanabilirsiniz. Her iki durumda da kitaplardan öğrendikleriniz yetersiz kalacaktır. The New Hacker's Dictionary(Yeni Hacker Sözlüğü) yazarı Eric Raymond "Sadece boya ve fırça sizi iyi bir ressam yapmayacağı gibi bilgisayar bilimleri eğitimi de, hiçkimseyi uzman bir programcı haline getirmez" der. İşe aldığım en iyi programcılardan biri sadece lise mezunuydu. Çok güçlü ve çok iyi yazılımlar üretti, kendi USENET haber grubuna sahipti ve hiç şüphe yok ki hisse senetleri sayesinde şu anda benim hiçbir zaman olamayacağım kadar zengin.


Başka programcıların da katıldığı projelerde yer alın. Bazı projelerde en iyi, bazılarında en kötü programcı siz olun. Ekibin en iyisi siz olduğunuzda, bir projeyi yönetebilme becerinizi test edebilme imkanı ve vizyonunuzla takım arkadaşlarınızı etkileme fırsatı bulacaksınız. En kötü olduğunuz durumda ise, ustaların neler yaptıklarını ve neleri yapmaktan hoşlanmadıklarını (ki bu size yaptırdıklarıdır) gözlemleme şansı bulacaksınız.


Başka programcıların katıldığı projelerde onlardan sonra yer alın. Başka bir programcının yazdığı programı anlayabilecek seviyeye gelin. Yazılımın yazarı yokken onu anlamak ve düzeltmek neler gerektiriyor görün. Kendi yazdığınız programları da sizden sonra üzerinde çalışacakların işini kolaylaştıracak şekilde nasıl tasarlayacağınızı düşünün.


En az yarım düzine programlama dili öğrenin. Bunların içinde, sınıf soyutlamaları nı içeren bir dil (Java veya C++ gibi), fonksiyonel soyutlamaları destekleyen bir dil (Lisp veya ML gibi), sözdizimi soyutlamaları nı destekleyen bir dil (Lisp gibi), tanımlama özelleştirmelerini içeren bir dil (Prolog veya C++ kalıpları gibi), eşrutinleri destekleyen bir dil (Icon ve Scheme gibi) ve paralelliği destekleyen bir dil (Sisal gibi) mutlaka bulunsun.


"Bilgisayar bilimleri"nde "bilgisayar"ı n da olduğunu unutmayın. Bilgisayarınızı n bir komutu çalıştırmasının, ön ya da ana bellekten bir kelime yakalamasının, ardıl kelimeleri diskten okumasının ve disk üzerinde yeni bir yer bulmasının ne kadar zaman aldığını öğrenin. (Cevaplar aşağıda.)


Dil standartlaştırma çalışmalarından birinde yer alın. Bu ANSI C++ komitesi de olabilir, yerel programcılar olarak içe kaydırma standartlarını zın seviyesini belirleyecek bir çalışma da. Her iki durumda da diğer programcıların bir dilde neyi, ne kadar ve biraz da şanslıysanız neden sevdiklerini öğrenebilirsiniz.


Bu dil Standartlaştırma çalışmalarından bir an önce ayrılabilecek sağduyuya sahip olun.
Tüm bunları göz önünde bulundurunca, sadece kitaplardan öğrendiklerinizle ne kadar ilerleyebileceğiniz tartışılır. İlk çocuğum doğmadan önce, bütün How To (Nasıl) ... kitaplarını okumuştum ve buna rağmen kendimi hala bilgisiz bir çömez gibi hissediyordum. 30 ay sonra, ikinci çocuğum doğacakken, bir tekrar için kitaplara geri mi döndüm dersiniz? Hayır, bunun yerine kişisel tecrübelerime güvendim ve daha sonra gördüm ki bu, uzmanlar tarafından yazılmış binlerce sayfadan çok daha yararlı ve güven verici.

Fred Brooks (***), "No Silver Bullets" isimli eserinde iyi yazılım uzmanları bulmak için üç seviyelik bir plan tanımlamış:
Sistematik olarak ve mümkün olduğunca erken iyi tasarımcıları belirleyin.


Yeni başlayanların kariyer dosyalarını düzenlemesi için onların gelişiminden sorumlu bir kariyer yöneticisi görevlendirin.


Yetişmekte olan tasarımcıların birbirlerinden etkilenip harekete geçecekleri imkanlar yaratın.
Bu gösteriyor ki bazı kişiler müthiş birer tasarımcı olmak için gerekli özelliklere zaten sahipler, iş onları ikna etmeye kalıyor. Alan Perlis bunu daha özlü bir biçimde "Herkese heykel yapmak öğretilebilir: Michelangelo' ya ise nasıl yapılamayacağı öğretilmeliydi. Bu çok iyi programcılar için de böyledir." şeklinde ifade etmiştir.

Hadi, şimdi gidip o Java kitabını satın alın; muhtemelen işinize yarayacaktır. Ama 24 saatte, günde hatta ayda, hayatınızın değişmesini veya programcı olarak gerçek yetenek ve deneyimlerinizin gelişmesini beklemeyin.


------------ --------- --------- --------- --------- --------- --------- --------- -----

Referanslar
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
------------ --------- --------- --------- --------- --------- --------- --------- -----

Cevaplar
2001 yazında, 1 GHz bir bilgisayar üzerinde çeşitli operasyonları n gerçekleştirilme süreleri:

tek komut çalıştırma: 1 ns (nanosaniye) = 1/1,000,000, 000 saniye
L1 ön bellekten kelime yakalama: 2 ns
ana bellekten kelime yakalama:  10 ns 
ardışık disk birimlerinden kelime yakalama: 200 ns
disk üzerinde boş yer arama:  8,000,000 ns = 8 ms (mikrosaniye)

------------ --------- --------- --------- --------- --------- --------- --------- -----

Notlar
T. Capey, Amazon'daki "Complete Problem Solver" isimli kitabın altındaki "Bu ürünü alanlar bunları da aldılar" bölümünde "Teach Yourself Bengali in 21 days" ve "Teach Yourself Grammar and Style" kitaplarının da bulunduğuna dikkatimizi çekiyor. Bence, bu ürünlere bakan kişilerin büyük bir çoğunluğunu bu sayfadan gidenler oluşturuyor.
------------ --------- --------- --------- --------- --------- --------- --------- -----
Peter Norvig (Copyright 2001)


------------ --------- --------- --------- --------- --------- --------- --------- -----
(*) Peter Norvig'in adresindeki Teach Yourself Programming in Ten Years isimli makalesinin Çağıl Uluşahin tarafından gerçekleştirilmiş çevirisidir.

(**)Peter Norvig Google'da Arama Kalitesi Geliştirme bölümünde çalışmakta olup Artificial Intelligence: A Modern Approach kitabının yazarlarındandı r.

(***) Fred Brooks, IBM 360 projesinde yöneticilik de yapmış bir bilgisayar bilimcisi ve profesyonelidir. " The Mythical Man Month"ın yazarıdır. Burada Brooks IBM'deki adam seçme metodundan bahsediyor.

Ben Kimim ?

Celiker BahceciMerhabalar, ben Çeliker BAHÇECİ. 2004 den beri özel sektörde bilgisayar mühendisligi ve egitmenlik yapıyorum. Yine aynı yılın Ekim ayından beri sitemde .Net ile programlama ve hayat görüşüm ile ilgili makalelerimi yayınlıyorum. Blogum dışında Yazgelistir.com, mobilnedir.com gibi ineta kapsamındaki bir çok siteye Microsoft teknolojileri ile ilgili yazılar yazmaktayım.
Bu site ile sizinde hayatınızı anlamlandırmanızda bir parça katkımın olması dilegiyle...