Çevik Süreç Prensipleri – Agile Principles

9 Ağu

Bu yazıda çevik süreçlerde benimsenen 12 prensibi ingilizce ve türkçe anlamlarıyla açıklamaya çalıştık. Çevik süreçlerde proje geliştirenlerin bu ilkelere uyması gerekmektedir. Şunu da belirtmekte fayda var ki, çevik süreçler bir yazılım geliştirme metodu değildir. Yazılım geliştirme disiplinidir. Belli kurallar dahilinde ilerlemeyi amaçlayan bir disiplindir. Aşağıdaki ilkelerle de bu disiplini anlamaya çalışalım.

EN: “Our highest priority is to satisfy the customer through early and continuousdelivery of valuable software.

TR: “En önemli önceliğimiz, çalışır haldeki programları kısa sürelerde oluşturup teslim ederek müşteriyi tatmin etmektir.

Müşterinin tatmin olması demek, müşterinin yaptırdığı projenin ilerleyişini görerek eksikliklerinin giderilmesi ve aklındaki soru işaretlerinin ortadan kalkmasıyla olu. Bu sadece yazılım işinde değil diğer sektörlerde de böyledir. Örneğin inşaat işi yaptırıyorsa sık sık gidip inşaat alanını gezer. Müşteri işin istediği gibi ilerlediğini gördüğünde tatmin olur. İş bitiminde de müşteri isteklerini karşılayan bir proje teslim edilmiş olur.

 EN: “Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”

TR: “Yazılımdaki değişiklikler hoş karşılanmalıdır. Bu değişiklikler yazılım süresini uzatsa bile hoş karşılanmalıdır. Çünkü çevik süreçler değişiklikleri müşterinin rekabet avantajını korumak için kullanılır.

EN: “Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter timescale.”

TR: “Birkaç hafta ile birkaç ay gibi kısa zaman dilimlerine çalışan yazılımları oluştur.

Müşteriye plan ya da belgeleri teslim etmek değil çalışan programları sunmak gerekir. Teslimatlar arasındaki değişim, gelişimin göstergesidir.

EN: “Business people and developers work together daily throughout the project.”

TR: “Müşteri ve programcılar proje boyunca beraber çalışır.

Projenin çevik olması; müşteri, programcılar ve hissedarların beraber etkileşim içerisinde olmasını gerektirir. Müşteri veya programcı tarafındaki gereksinimlerin anında giderilmesi sağlanır.

EN: “Build projecsts around motivated individuals, give them the environment and support they need and trust them to get the job done.”

TR: “Motivasyonu yüksek bireylerle proje oluştur. Onlara ihtiyaç duydukları ortamları sağlayarak işi yapabilecekleri konusunda onlara güven.”

Bireyler en önemli başarı faktörüdür. Her birey takımın bir parçasıdır. Bireyler, kendilerine duyulan güvenle motive olurlar. Bu şekilde kendilerini önemser ve işe verirler. Yardımlaşma ve dayanışmayla, bilgi bakımından kısa sürede aynı standartlara gelirler.

EN: “The most efficient and effective method of conveying information with and within a development team is face-to-face conversation.”

TR: “Bilgi alışverişinde en etkili yöntem yüz yüze görüşmektir.

Çevik süreçlerde insanlar birbirleriyle konuşurlar. Ekip, konuşarak sorunların çözümüne daha kolay oluşur.

EN: “Working software is the primary measure of progress.”

TR: “Çalışan yazılım, sürecin işlediğinin birincil göstergesidir.

Çevik projelerde sürecin ölçütü, o anda müşterinin ihtiyacını karşılayan bir yazılımın ortaya koyulmasıyla belirlenir. Sunulan ilerleme raporları veya dökümantasyonlar ile ölçüm yapılmaz. Dökümanlar yalan söyleyebilir fakat çalışan uygulama gerçekleri söyler. Bu da çevik süreçlerin müşteri lehine olduğunu gösterir.

EN: “Agile processes promote sustainable development. The sponsors, developers and users should be able to maintain a constant pace indefinitely.”

TR: “Çevik süreçler sürdürülebilir gelişimi destekler. Müşteriler, yazılımcılar ve kullanıcılar bir arada çalışabilmelidirler.

Süreç istikrarlı bir şekilde ve rutin bir tempoda ilerlemelidir. Motivasyonun bozulmaması açısından aşırı iş yükü ve fazla mesai hoş karşılanmaz. Görevler, ekibe adil bir şekilde dağıtılır.

EN: “Continuous attention to technical excellence and good design enhances agility.”

TR: “Teknik mükemmelliğe sürekli özen gösterilmesi ve iyi tasarım, çevikliği güçlendirir.

Hızlı ilerlemek için, yazılımın temiz ve sağlam tutulmasıyla olur. Bu yüzden tüm ekip en kaliteli kodu üretmek için kararlıdır. Hataları gidermeyi ve kod iyileştirmelerini refactoring sırasında gerçekleştirebilirler.

EN: “Simplicity – the art of maximizing the amount of work not done – is essential.”

TR: “Baitlik esastır.

Çevik takım üyeleri, hedeflerine uygun en basit çözümü uygularlar. Karmaşık ve gereksiz kod yazmaktan kaçınırlar. Bugün yarın şu da lazım olur diye iş yapmazlar. Günün ihtiyaçlarına uygun en basit çözümü sunarlar.

EN: “The best architectures, requirements and designs emerge from self-organizing teams.”

TR: “En iyi mimariler, gereksinimler ve tasarımlar kendi kendine organize olan takımlardan çıkar.

 Çevik ekipler kendi kendine organize olabilirler. Sorumluluklar ekibe eşit şekilde paylaştırılır.  Bu sorumlulukları yerine getirmek için en iyi yol belirlenir.

EN: “At regular intervals, the team reflects on how to become more effective, then

tunes and adjusts its behavior accordingly.”

TR: “Takım, nasıl daha etkili olabileceği konusunda kendini belirli aralıklarla sorgular ve buna göre davranışlarını belirler.

 Çevik bir ekip sürekli olarak, kuralları, ilişkileri, sözleşmeleri ve organizasyon yapısını ayarlar.

Kod Kata

6 Ağu

İyi bir futbolcu olmak için, ya da iyi futbol oynamak için sürekli antrenman yapmalısınız. Ya da bir dil öğreniyorsanız sürekli okuma,yazma ve konuşma pratikleri yapmalısınız. Pratikler sayesinde mesleğiniz, gündelik işleriniz gibi bir hal almaya başlar. İyi bir programcı olmak içinde ürekli pratikler yapmak zorundasınız. İş yükünüzün durumuna göre kendinize pratik yapma fırsatları sunabilmelisiniz.

Karatecilik terimi olan kata kelimesi de sporcunun gündelik yaptığı beden hareketleridir. Yani günlük pratikleridir. Tabi bu pratiker sporcunun seviyesine göre değişir.

Programcı olarak biz de kodlarla birtakım pratikler yapmalıyız. Önce basit pratiklerden başlayarak sonralara doğru seviyemize göre pretikleri geliştirebiliriz. Bir probleme ait çözümü hergün deneyerek, probleme farklı açılardan yaklaşmayı öğrenebiliriz. Aynı örnekleri yapmak bizi sıradanlaştırmaz. Aksine geliştirip hızlandırır. Bu pratikler sayesinde geliştirme yaptığmız ortamları (visual studio, eclipse, v.s) daha iyi tanımaya başlarız.

Üniversitede yıllarından hatırladığım bazı hocalarımız, derste iki saat boyunca hiç kitaba bakmadan, yardım almadan en ağır matematiksel ispatları tıkır tıkır çözerdi. Bunda şüphesiz çok tekrar yapmanın etkisi büyüktür. Ustalaşmak, çok tekrar ve çok pratik ile mümkündür. Usta programcı olmakta kod yazma yeteneklerimizi geliştirmekle mümkün olacaktır.

Kod kata hakkında yazılara ve videolara ilerleyen yazılarımızla devam edeiyor olacağız. Ayrıca Özcan ACAR tarafından kurulmuş olan www.kodkata.com internet sitesi üzerinden de kod katalar yayınlanmaktadır. Faydalı bir site olacağı kanısındayım.

Faktoriyel Kata C# – Kod Kata

4 Ağu

Faktöriyel Kata

Bu katanın amacı, faktöriyel işleminin çözümünü Test Driven Development tekniklerini uygulayarak geliştirmektir. Faktöriyel çözümü yapan programın evrimsel bir şekilde ortaya çıkışını bu uygulamada göstermeye çalıştım.

Umarım faydalı olur.

WCF Transfer Security Ayarları

4 Ağu

WCF transfer güvenliği seçeneklerini None,Transport security, Message security, Mixed ve Both olarak sıralamıştık. Bu güvenlik seviyelerinin WCF uygulamalarında uygulandığı yer binding kısmıdır. İstemci ve sunucu aynı ulaşım güvenliği seçeneğini uygular. Binding konfigurasyonu, programatik olarak kod tarafında ayarlanabildiği gibi config dosyası yardımıyla da ayarlanabilmektedir. Aşağıdaki listede hangi binding ile hangi ulaşım güvenliğinin kullanılabileceğini göstermektedir.

Adı None Transport Message Mixed Both
BasicHttpBinding Evet(Varsayılan) Evet Evet Evet Hayır
NetTcpBinding Evet Evet(Varsayılan) Evet Evet Hayır
NetNamedPipeBinding Evet Evet(Varsayılan) Hayır Hayır Hayır
WsHttpBinding Evet Evet Evet(varsayılan) Evet Hayır
NetMsmqBinding Evet Evet(Varsayılan) Evet Hayır Evet

Intranet için kullanılan binding tipleri şunlardır: NetTcpBinding, NetNamedPipeBinding, NetMsmqBinding.

Config dosyasında binding ayarlarını şu şelide yapabiliriz.

<bindings>
    <wsHttpBinding>
       <binding name="Binding1">
           <security mode="Message"/>
                <message clientCredentialType="UserName"/>
           </security>
       </binding>
    </wsHttpBinding>
</bindings>

Binding türüne göre security mode seçeneğinde, kullanılabilen güvenlik tipleri listelenmektedir. Yani bu güvenlik tiplerinin nerede kullanılacağını ezberlemek zorunda değiliz.

Kaynak: Bu yazının hazırlanmasında Programming WCF Services kitabından faydalandım.

WCF Transfer Security Seçenekleri

2 Ağu

WCF transfer güvenliği için beş farklı seçenek sunmaktadır. Bir servisin güvenliğini sağlamak istediğimizde hangi öncelik bizim için daha avantajlıysa o biçimde transfer seçeneğini belirleriz. Güvenlikte birincil önceliğimizi doğru şekilde belirlemeliyiz. Transfer güvenliği seçeneklerini şu şeklide sıralayabiliriz: None,Transport security, Message security, Mixed ve Both.

None Transfer Security

Adından da anlaşılacağı üzere bu seçenekte herhangi bir güvenlik bulunmamaktadır. WCF güvenliği tamamen kapalıdır. Herhangi bir istemci kimlik bilgisi istenmemektedir. Mesajlar, herhangi bir mahremiyet korumasında değildir. Mesaj gizliliği açısında doğru bir yöntem değildir.

Transport Transfer Security

Bu güvenlik seviyesinde WCF, güvenli iletişim protokollerini kullanır. Bu protokoller, HTTPS, TCP, IPC ve MSMQ protokolleridir.Transport security, kanal üzerindeki tüm iletişimi şifreleyerek, bu şekilde mesaj bütünlüğünü, mahremiyeti ve kimlik doğrulamasını sağlar. Mesaj içeriğinin değiştirilmesine yönelik herhangi bir girişim, şifreleme anahtarı bilinmediğinden başarısızlıkla sonuçlanacaktır ve bu da mesaj bütünlüğünün sağlandığının bir kanıtıdır. Alıcıdan başka kimse mesaj içeriğini göremediğinden mahremiyet sağlanmaktadır. Karşılıklı kimlik doğrulamaları gerçekleştirildiğinden, mesajı sadece alıcı okuyabilmektedir. Bu sayede güvenilir olmayan end point’ler ile mesaj aktarımı sağlanmaz.

Başlıca dezavantajı, sadece noktadan noktaya (point-to-point) olan taşıma güvenliğini garantilemesidir. İstemci, arada herhangi bir aracı bulunmadan direk servise bağlanır. Dolayısıyla ulaşım, güvenli bir ortamda sağlanmış olur. Bu iletişim güvenliği genelde intranet uygulamalarında kullanılır.

Message Transfer Security

Mesaj güvenliği seviyesinde mesajın kendisi şifrelenir. Mesajın şifrelenmesiyle, Transport güvenliğinde olduğu gibi, mesaj bütünlüğü, mahremiyeti ve kimlik doğrulaması sağlanarak mesajın içeriğinin okunmasına yönelik yapılan herhangi bir okuma girişimi başarısızlıkla sonuçlanmış olur. Mesaj içeriği şifrelendiğinden HTTP gibi güvenli olmayan protokoller üzerinden gönderilebilir. Bu nedenle ulaşım sağlayan aracılara ve taşımanın güvenliğine bakılmaz. Buna ek olarak Mesaj güvenliği, Dos Attack ve replay attack gibi saldırılara yönelik bir dizi standart ile tasarlanmıştır. Message transfer güvenliğinin dezavantajı da mesajın iletim süresinin artmasına bağlı gecikmelerin yaşanmasıdır. Bu güvenlik seçeneği internet uygulamalarında kullanılır.

Mixed Transfer Security Mode

Mixed güvenlik seçeneği, servis doğrulamasının yanı sıra mesaj bütünlüğünü ve mahremiyetini sağlamak için Transport güvenliğini, istemci kimliğinin doğrulanması için de Message güvenliğini kullanır. Bu karma yapı sayesinde Transport ve Message güvenlik seçeneklerinin avantajlarından faydalanmak hedeflenmiştir. Dezavantajı, Transport  güvenliğinden dolayı, noktadan noktaya (point-to-point) ulaşımlarda kullanılmasıdır.

Both Transfer Security Mode

Adından da anlaşılacağı üzere Both transfrt güvenliği, hem Transport hem de Message güvenlik seçeneğini kullanır. Mesajın kendisi şifrelenerek güvenli bir şekilde iletilir.

Kaynak: Bu yazının hazırlanmasında Programming WCF Services kitabından faydalandım.

Coğrafi Bilgi Sistemleri Yazılımı ve Uygulamaları

31 Tem

Bir önceki coğrafi bilgi sistemleri nedir başlıklı yazımızda, CBS konusu hakkında ön bilgi vermeye çalışmıştık. CBS uygulamalarının kullanım alanları ve amaçlarından bahsetmiştik. Bu yazımızda da CBS uygulamaları konusunda konuşacağız.

CBS uygulamalarının yazılım kısmı, önceden hazırlanan harita verilerinin WEB ortamında dış dünyaya sunulmasını gerçekleştirmektedir.

Yazılım geliştirme konusunda CBS uygulamalarında genellikle Silverlight, Java Flex, Javascript kullanılmaktadır.

Silverlight ortamında CBS yazılımı geliştirmiş biri olarak şunu söyleyebilirim ki, ESRI firmasının sunduğu Silverlight tool sayesinde işler kolay bir biçimde yürümektedir. Ancak CBS işi, bir programlama dilini öğrenmek kadar basit bir iş değildir. Sizden birçok bilgiyi birden istemektedir. Haritacılık, sistem, veritabanı gibi konuları da bilmenizi ister. Çünkü sorun anında nereye müdahale edileceğini söyleyebilmelisiniz. Bu açıdan gerçekten uzun soluklu bir öğrenim süreci varsır.

Yazılım konusunda tam anlamıyla serbestsiniz. Ancak benim tecrübelerim, Silverlight ve Java Flex tarafında kodlama gayet kolay ilerlemektedir. Ancak son zamanlarda alıştığım Test Driven Developmant geliştirme biçiminden sonra çokta haz veren bir kodlama yapısı yoktu benim için. Yani şelale tarzı kodlamaya devam.

CBS silverlight uygulamalarını buradan inceleyebilirsiniz.

Coğrafi Bilgi Sistemleri (CBS) Nedir ?

30 Tem

Coğrafi Bilgi Sistemleri (CBS), teknolojinin birçok dalının bir araya gelerek coğrafi veri üreten kurum ve kuruluşlara, veri üzerinde tasarım ve analiz imkanı sağlayan bir yapıdır. Verinin şekillendirilip anlamlı hale gelmesiyle kurum ve kuruluşlar, coğrafi verilerle de artık stratejik planlarını rahatça yapabilecek hale gelmektedirler.

Kullanım alanları

Ülkemizde CBS işlerinin devlet eliyle Ulusal Coğrafi Bilgi Sisteminin oluşuturlması, kontrolü ve yürütülmesi amacıyla 2011 yılında Coğrafi Bilgi Sistemleri Genel Müdürlüğü kurulmuştur. Bu da devlet olarak işin önemini benimsediğimizi ortaya çıkarmıştır.

İşin idari boyutundan ziyade, teknik boyutu hakkında konuşmaya devam edelim.

CBS, teknik olarak birden fazla alana yayılmış şeklidedir.

  • Haritacılık. (CAD, ArcGIS, ArcMAP,diğer yazılımlar)
  • Sistem (Harita yayınlarının sunumu, Sunucuların optimizasyonu)
  • Veritabanı (Oracle, MsSQL,…)
  • Yazılım (Silverlight, Java Flex, Javascript)

Yani tek başına CBS diye birşey yoktur. CBS uygulamalarının hayat bulabilmesi için sağlam bir ekibin oluşturulması şarttır.

CBS uygulamalarını şu şeklide sıralayabiliriz: Kent Bilgi Sistemi, Orman Bilgi Sistemi, Karayolları Bilgi Sistemi, Arazi Bilgi Sistemi, Tapu ve Kadastro Bilgi Sistemi, Lojistik Bilgi Sistemi, İç Güvenlik Bilgi Sistemi, Araç İzleme Bilgi Sistemi, Trafik Bilgi Sistemi, Kampüs Bilgi Sistemi, Deprem Bilgi Sistemi, Harita Bilgi Sistemi, vb. şekilde adlandırılırlar.

CBS uygulamalarının kullanım alanlarını da şu şekilde sıralayabiliriz: kaynak yönetimi, varlık yönetimi,alt yapılar (doğalgaz, elektrik, su), kentsel planlama, madencilik, askeri alanlar, trafik ve karayolları, ticaret… şeklinde sıralayabiliriz.

CBS, metinsel veriler yerine coğrafi verilerler çalışan bir sistemdir. Örneğin deprem inceleme merkezleri ölçekler vasıtasıyla deprem olan yerlerin koordinatlarını alarak, şu saatte şu koordinatta deprem olmuştur, şeklinde bir liste tutarlar. Bu, kağıt üzerinde metinsel bir veridir. CBS sayesinde bu koordinatlı metinsel veriler, harita üzerinde de görünür hale gelektedir. Aynı şekilde doğalgaz, su hatları, yollar gibi stratejik önemdeki veriler de tek noktadan yönetilebilir hale gelmektedir. Örneğin bir caddedeki doğalgaz kesintisinden etkilenecek vatandaşların listesi alınıp, bu kişilere otomatik mail göndererek veya otomatik arama yaparak and kayıtlarıyla bilgiler vermek mümkündür.

Yani CBS, gelişen dünyanın olmazsa olmazı haline gelmiştir.

Windows 7 ve IIS 7 Üzerinde SSL Sertifika Oluşturma

28 Tem

Güvenli web sayfaların olmazssa olmazı olan SSL sertifikalarının oluşturulma isteği ve bu istek sonrasında oluşturulan sertifikanın sistemimize kaydını inceleyelim.

Bir SSL sertifika satın almaya karar verdiğimizde önce, satın alacağımız sertifika için bir istek oluşturmamız gerekmektedir. Bu işlemi IIS 7 üzerinden gerçekleştirmek oldukça basittir. IIS penceresinden Bağlantılar panelinden Server’a tıklayıp, Sunucu Sertifikalarına tıklıyoruz. Açılan pencerede, sağ panelde Eylemler bölmesinde Sertifika İsteği Oluştur seçeneğini seçtiğimizde aşağıdaki sihirbaz karşımıza çıkacak.

Bu form sertifikamıza ait bilgileri içermektedir.

Şifreleme hizmet sağlayıcısı özelliklerinden bit uzunluğunu 2048 olarak seçerek devam ediyoruz.

Şimdi sertifika isteğimizin oluşturulacağı bir txt dosya belirliyoruz.

İşlem sonlandırıldıktan sonra oluşan dosya aşağıdaki şekildedir. İçeriğini anlamamıza gerek yok zaten. Çünkü bu dosyayı, sertifika satın alacağımız yere göndererek, bu isteğe göre bir sertifika oluşturtmuş olacağız.

Ben deneme için COMODO üzerinden deneme amaçlı bir sertifika oluşturmuştum. Üyelik v.s. işlemlerinin ardından yukarıdaki CertRequest.txt dosyasını upload ettim ve  sertifika dosyam oluşturulup hemen mail adresime atıldı.

Artık oluşturulan deneme sertifikanın sunucuya yüklenme işlemi var sırada.

Bu işlemi de IIS üzerinden Sunucu Sertifikaları‘nı tıklayarak sağ taraftaki Eylemler penceresinden bu kez de Sertifika İsteğini Tamamla seçeneğini seçiyoruz. Yukarıda Sertifika İsteği Oluştur demiştik.

Açılan pencerede şu şekildedir:

Bu şeklide sertifika isteğinin yanıtını da eklemiş bulunuyoruz. Artık sertifika yükleme işlemi tamamlanmıştır.

Şu andan itibaren bu sertifikayı, https gerektiren sayfalarda veya güvenli veri aktarımı gerektiren WCF servislerinde kullanabiliriz.

Asp.net MVC DisplayTemplates Kullanımı

27 Tem

ASP.NET MVC projelerinde Model tarafından gelen property’ler için özel görünüm şablonları oluşturabiliriz. Bunun için kullanılacak yöntem DisplayTemplates şeklinde şablonlar oluştırmaktır. Display Template oluşturma işlemini gerçekleştirmek için Views/Shared altına DisplayTemplates şeklinde bir dizin oluşturmalıyız. Bu dizin altına şablonlarımızı tanımlayabiliriz.

Display  template içerisinde YesNo.cshtml adında bir partial view oluşturuyoruz. Bu view içerisini bool tipindeki değişkenleri istediğimiz gibi göstermek amacıyla doldurabiliriz. Örneğin kişinin profil tipinin gene veya özel olduğunu gösteren bir şablon oluşturalım. YesNo.cshtml içeriği aşağıdaki gibi olacaktır:

Model içeriğimizde şu şeklide olacaktır:

public class Register

{

[UIHint(“YesNo”)]

[Display(Name=”Profil Türü”)]

public bool Accept { get; set; }

}

Bu durumda view sayfalarında @Html.DisplayFor(m=>m.Accept) şeklindeki render istekleri sonucunda Genel veya özel şeklinde bir format oluşacaktır.

Sonuc: