Arda Çetinkaya Yazılım ve arada kendim ile ilgili saçmaladıklarım…
Razor Pages’in adını ilk olarak ASP.NET Core 2.0 Preview 1 çıktığında duymuştuk. İlk çıktığında da oldukça merak uyandırmıştı açıkcası, akıllara da ASP.NET Web Pages’i getirmişti. Sonu onun gibi olursa falan diye biraz çekinerek yaklaşmıştım. Küçük bir kaç PoC için tercih etmem gerekti ve oldukça hoşuma gitti. ASP.NET Core 2.0 da artık son halini aldığına göre biraz daha ayrıntılı bahsetmenin tam zamanı diye düşünüyorum.
Nedir bu Razor Pages?

ASP.NET Core 2.0 ile beraber hayatımıza giren Razor Pages, ASP.NET Core MVC alt yapısında, sayfa bazlı web uygulamaları geliştirebileceğimiz bir programlama modeli. Tamamen MVC alt yapısı üzerine geliştirilmiş bir kabuk olarak düşünebilirsiniz. MVC template’lerindeki klasör sayısını azaltmak, sayfa bazlı uygulamaları daha kolay geliştirmek için tasarlanmış yeni bir model. Altını çizerek belirtmek isterim ki, MVC’ye alternatif ya da onun yerini alacak bir model değil. Genelde yeni bir şey çıkınca bu şekilde soru işaretleri oluşuyor. Ben baştan söyliyim, yok öyle bir şey…

PHP ya da eski ASP ile tecrübesi olanların ya da scripting dilleri ile uygulama geliştirenlerin daha çok hoşuna gideceğini düşünüyorum. Büyük bir ihtimal, web uygulaması geliştirmeyi daha basite indirgemek ve script tabanlı dilleri tercih edenleri de mutlu etmek için böyle bir modele yönelmiş olabilir Microsoft. Ama asıl önemlisi web uygulaması yapmayı yeni öğrenmek isteyen kişileri çekmek sanırım Razor Pages’ın en büyük amacı.Çünkü gerçekten kolay.

MVC alt yapısını kullanarak yapıldığı için uzun zamandır MVC modeli ile geliştirme yapanlar için çok fazla bir şey ifade etmeyecektir. Hatta bir çok MVC tercih eden kişi, ne gerek vardı falan da diyor. Kendilerince haklılar. Burda tekrar belirtmek isterim ki, Razor Pages, MVC’nin bazı özelliklerini daha basit ve kolay hale getiriyor. Uzaya roket gönderebileceğiniz bir teknoloji değil…

Razor Pages, adından da anlaşılacağı üzere “Razor” ve “Sayfa” konsepti üzerine geliştirilmiş bir model. MVC’deki View kavramı, biraz daha geleneksel tabirle “sayfa” olarak karşımıza çıkıyor. Ama tabii ki Layouts, TagHelpers gibi yaklaşımlar Razor Pages’de de var.

Razor Pages’de sayfalar birer PageModel ile tanımlanıyor. PageModel’leri MVC’deki Controller ve Model olarak düşünebilirsiniz. Web sayfanıza gelen talepler(request), Controller’daki gibi PageModel tarafından karşılanıyor. Controller’a ek olarak View tarafına taşınan model de bu PageModel üzerinde olabilmekte.

Razor Pages dosya düzeniDosya yapısı olarak MVC’den biraz daha basit bir yapısı var. Default olarak Pages klasörü altına koyduğunuz *.cshtml’ler sayfalarınızı oluşturuyor. MVC’deki routing ile ilgili uymanız gereken yapı biraz daha basitleştirilmiş. Bir Razor Pages’in tanımlamak için *.cshtml’in @page yol göstericisinin sayfanın başında olması gerekmekte. Benzer bir şekilde @model yol göstericisi ile de sayfanın hangi PageModel sınıfını kullandığı belirtilmek durumunda. PageModel, Razor Pages ile gelen yeni bir abstract sınıf. Geliştirdiğimiz sınıflar, bu sınıftan(PageModel) türemek durumunda. Razor Pages’i sağlıklı kullanmak için geliştirdiğimiz sayfaların modelleri mutlaka bu şekilde olmalı.

Razor Pages’in önemli bir özelliği *.cs(code-behind) dosyası olmadan, *.cshtml’in içinde C# kodu yazarak, sunucu tarafında çalışacak kod ile HTML ve Razor kodlarını bir arada yazabilmeniz. Biliyorum kulağa çok kötü geliyor. Hatta sadece kulağa değil, göze de çok kötü geliyor. Böyle bir özelliğin olması, illa ki o şekilde kullanmanın zorunlu olduğu anlamına gelmiyor. Bu yüzden siz böyle kullanmayın 🙂

Read More

İş, güç, hayat derken yine burayı çok ihmal ettim. Ayıp bana…Ama artık alışmış olduğunuzu düşünüyorum. (: Bu hafta başında .NET tarafında güzel gelişmeler oldu, hem arayı kapatmak için, hem de bu güzel gelişmeleri özetlemek için güzel bir zaman olduğunu düşünüyorum…Buyrun efenim;

.NET Core 2.0 için geçen hafta nuget paketleri güncellenmiş ama resmi bir açıklama yapılmamıştı. Bu haftanın başında tüm .NET Core 2.0 alt yapısındaki API’ler RTM oldu. Yani artık; ASP.NET Core 2.0, Entity Framework Core 2.0‘ı üretim ortamlarında kullanabilirsiniz. Bu yayınlanma döngüsü içerisinde .NET Standard 2.0‘da tamamlandı. 1.6 versiyonuna göre desteklenen API sayısı ciddi anlamda artmış oldu böylece. .NET Framework’deki toplam yaklaşık 32000 API, .NET Standard 2.0 ile kullanılabilir hale geldi. Bu ne demek? Yani eğer geliştirdiğiniz kütüphaneler,kodlar…vs., .NET Standard 2.0’ın kontratının sunduğu API’leri kullanarak geliştirildiyse, farklı işletim sistemlerinde de çalışabilecek. Çok güzel, değil mi… 🙂

.NET Core 2.0, tamamen .NET Standard 2.0 API’lerini destekleyecek şekilde RTM olmuş durumda. En önemli çıktı bu diyebilirim ama tabi ki bunun dışında performans konusunda da ciddi iyileştirmeler mevcut. Ayrıca ARM32 sistemlerinde de kullanılabilir durumda. .NET’i her ortamda çalıştırabilmek için güzel bir gelişme.

NetStandardPlatforms

ASP.NET Core 2.0 ile beraber de bir çok iyileştirme ve yenilik mevcut. En dikkat çeken Razor Pages diyebilirim. MVC kalıbının biraz daha kolay uygulanabilmesini sağlayan ek bir sayfa modeli diyebilirim. Biraz daha ön yüz tarafına odaklanmanız gerek uygulamalar için kullanabileceğiniz bir yapı. Rahmetli ASP.NET Web Pages’i hatırlayanlar ve sevenler Razor Pages’ı da çok sevecektir diye düşünüyorum.  Bir yeni ve güzel özellik DbContextPooling… DbContext tipindeki EF context objelerinizi pooling yaparak daha performanslı kullanmanıza olanak sağlanıyor. DBContext instance’larının her request’de baştan tekrar tekrar yaratılmasının sebep olduğu sıkıntılar biraz olsun giderilmiş durumda. Tüm geliştirilen maddeler ve giderilen bug’ları daha ayrıntılı bir şekilde GitHub sitesinden takip edebilirsiniz.

Son olarak EF Core 2.0‘dan da biraz bahsederek, sizleri daha ayrıntılı araştırmanız için azat edim. LINQ sorgularının oluşturduğu T-SQL sorgularında ciddi anlamda bir iyileştirme yapılmış. Kompleks LINQ ifadelerinden oluşturulan T-SQL cümlecikleri artık biraz daha hızlı oluşacak. Bunun haricinde EF.Functions.Like() ile artık SQL’deki LIKE ifadesine denk gelen LINQ ifadeleri yazmak mümkün. Bir güzel gelişme EF6.x’de olan ama EF Core’da sıkıntılı olan TableSplitting kavramı da EF Core 2.0’da çözümlenmiş durumda. İki farklı entity’yi tek bir tabloya map etmek artık daha kolay.

Son olarak .NET Core 2.0’ı indirmek için https://www.microsoft.com/net/download/core adresini hatırlatmak isterim. Her şeyin başlangıcı…Yumulun…

Bu zamana kadar içerik ve katılım olarak en dolu etkinliklere imza atan Women Techmakers(WTM) Istanbul, 19 Mart‘da yine güzel bir etkinliğe imza atıyor. Bahçeşehir Üniversitesi’nin Beşiktaş kampüsünde gerçekleşecek etkinlikte, “Telling Our Story” teması altında yazılımcılar bir araya geliyor. 25+ konuşmacının katılımı ile gerçekleşecek etkinlik için ayrıntıları http://2017.wtmistanbul.com adresinden takip edebilirsiniz.

WTM Istanbul

Etkinlikte konusunda uzman ve başarılı bir çok konuşmacı olacak; Google Londra’dan Sarah Gordon, Google İrlanda’dan Hale Dönertaşlı, Gram Games’den Erin O’Brien ve Ayla Kara Çoban, Insider kurucusu Hande Çilingir, Armut.com kurucusu Başak Taşpınar Değim, ScaleX kurucusu Dilek Dayınarlı ve Webrazzi’den Merve Kara bu isimlerden sadece bir kaçı.

Daha önceki etkinliklerde oldukça geniş kitlelere ulaşıldığı için biran önce bu adresten kaydınızı yapmayı ihmal etmeyin.

 

Uzun zamandır bir şey yazamıyordum, güzel bir etkinlik haberi ile bu araya son verim; bu sene ilk defa düzenlenen Devnot Developer Summit, 8 Nisan‘da yazılımcıları İstanbul’da bir araya getiriyor. Devnot‘un düzenlediği bu etkinlikte 15 farklı oturum ile birbirinden güzel konular ele alınacak. Tüm gün sürecek olan etkinlikte, yazılım sektörünün başarılı ve konusunda uzman kişileri, 2 farklı salonda paralel oturumlar gerçekleştirecek. Docker’dan, TypeScript’e, mobil uygulamalardan, Linux’a kadar geniş bir yelpazeye sahip olanetkinlik, Kadir Has Üniversitesi Cibali kampüsünde gerçekleşecek.

Etkinlik ile ilgili gelişmeleri ve kayıt işlemleri için http://summit.devnot.com adresini takip edebilirsiniz. Etkinliğe biran önce kayıt olun derim. Kısa zamanda yer konusunda sıkıntı yaşayabilirsiniz benden söylemesi. Ben şimdiden yerimi aldım 🙂

Developer Summit 2017

Developer Summit 2017 - Konusmacilar

 

 

 

 

Tanımlı bir problemi ya da belirli bir ihtiyacı çözmek için başladığımız yazılım projelerinin büyük bir çamur topuna dönüşmesi oldukça kolay. Çözmeye çalıştığımız problemin karmaşıklığına göre ve bunu çözmeyi vaat ettiğimiz zamana göre işler daha da çirkinleşecektir. Açıkcası bundan kaçmak çok olası değil ama çamur topunun büyümemesi için yapılacakların farkında olup, önlemleri alırsak çamur topunun altında ezilmeyiz.
bigballofmud

(Big Ball of Mud)

“Big Ball of Mud”, belli bir çerçeveye göre tasarlanmamış, iş ihtiyaçlarının baskısı altında ezilmiş, sürekli yamalar ile gelişmiş, sürdürebilirliği maliyetli, kod kalitesinin düşük olduğu ve kötü kokan spagetti kodların olduğu yazılımları tanımlamak için uzun zaman önce yazılım geliştirme literatüründe yerini almış bir kavram. Ne yazık ki kendimizi bu iğrenç çamur topunun içinde bulmak oldukça kolay. İçine düşmenin kötü olduğu gibi, bu çamur topunun oluşmasına katkı sağlamak da ayrı bir kötü durum.

Üzgünüm ama kod yazmaya başladığımız andan itibaren bu büyük çamur topunun oluşması da başlıyor. Bunun farkında olursak, bu topun büyümemesi için farkındalığımız daha yüksek olacaktır. Önemli olan bu çamur yığınının büyümemesi, yönetilebilecek derecede kontrol altında olması. Günümüzde değişimlerin çok hızlı oluyor olması bu çamur topundan kaçınamamamızın en büyük sebebi. Tabi ki insan faktörü de bu sebebin birinci katalizörü.

Yazılım projeleri sonuçta kendi kendilerine ortaya çıkan şeyler değil. Bizler yazıyoruz, geliştiriyoruz. Çamur topunu da biz oluşturuyoruz. Bunu oluştururken de, bir çoğunuza tanıdık gelen belli söylemlerin arkasına sığınıyoruz.

Müşterinin ne istediği net değildi…

Çok sevdiğimiz bir söylem. “Müşterinin ne istediği net değildi”… Bizden istenen ihtiyaç net olmadığı zaman, ister istemez yazdığımız kod da çok net olmaz. Net olmadığını ilk başta fark etmediğimiz için(!!!) ve belli varsayımlara göre ihtiyaçları geliştirdiğimizde ortaya çıkan kod, karmaşıklığın ilk hali olacaktır. Müşterinin istediği bizim tarafımızda net olmadığı sürece, her yeni istek çamur topunu büyütecektir. Kötü bir haberim var; ne yazık ki müşterilerinizin ne istediği %70 net olmayacak… Dolayısıyla müşterinin ne istediğini net olarak anlamaya çalışmak için çaba sarf etmemiz lazım. Değişimlerin sürekli olduğu bir çağda yaşadığımız için de, bu değişimleri yönetebilecek bir yaklaşım içerisinde olmamız gerekiyor. Yazdığımız kodların kolay değiştirilebilir bir alt yapıya sahip olması, kodun içerisindeki bağımlılıkların yönetilebilir olması kod yazarken dikkat edebileceğimiz şeyler olabilir.

dilber-on-customer-requirements

(Big Ball of Mud)

Read More

Son yılların popüler konularından Microservices, beraberinde yeni problemleri ve ihtiyaçları da geliştirme hayatımıza sokuyor. Bu senenin sıcak kavramlarından “Serverless” da bunların başında geliyor. Dağıtık sistemlerin, günümüz yazılım alt yapılarının vaz geçilmez sistemler olması “Serverless” kavramını daha da ilginç hale getiriyor. “Nasıl yani, uygulamalar sunucularda çalışmıyor mu artık?” ya da “Sunuculara gerek yok mu artık?” gibi sorular ne yazık ki ilk aklımızdaki beliren sorular oluyor. Ama tabi ki olay, bu değil.

Açıkcası “Serverless” isminin, -ne yazık ki tüm IT sektörünün isimlendirme konusundaki zaafının en yeni ürünü olarak düşünüyorum. Her türlü karmaşık probleme çözümler üretebiliyor olmamıza rağmen, hala şu isimlendirme olayını çözemiyor olmamız da bizim ayıbımız olsun. Neyse…

There are only two hard things in Computer Science: cache invalidation and naming things.

Phil Karlton

“Serverless” tabi ki, artık sunuculara gerek yok ya da uygulamalar sunucularda çalışmayacak gibi bir yaklaşım değil. Yazılım geliştirme ve yönetme açısından, daha az, sunucu kavramına kafa yormamızı sağlayan bir yaklaşım ya da mimari kalıp diyebiliriz. Ölçeklendirme, yük dağıtımı, sunucu konfigürasyonları, hata yönetimi, deployment ve hatta run-time gibi konuları dert etmeyin temeline dayanıyor aslında.

serverless-architecture“Serverless” için bir başka bakış açısı da, başka sağlayıcılardan alınan servisler ile uygulama mantığını oluşturan ya da destekleyen bir mimari kalıp olması. Yetkilendirme için bir sağlayıcı, e-mail için başka farklı bir sağlayıcı, persistence için başka bir sağlayıcı ile bir logic oluşturmak ve uygulamaları bu şekilde tasarlamak için düşünebileceğimiz bir kalıp olarak da düşünebiliriz. Bu bakış açısında sağlayıcıları basit olarak fonksiyonlar; Functions as a Service(FaaS) olarak düşünmek bazı şeyleri daha iyi anlamamızı sağlayabilir.

Bu iki yaklaşımın da öne çıkan ve önemli olan noktası ölçeklendirmenin önemli olması ve “serverless” çatısı altında otonom bir şekilde yapılması. Ölçeklendirme ve maliyet konuları, dağıtık sistemlerde önemli konular olduğu için bu tarz farklı mimari yaklaşımlar, tasarımlar ve kalıplar gündeme geliyor. Tartışılıyor, geliştirilip uygulanıyor ve zamanla literatürdeki yerini alıyor. “Serverless” ile ilgili daha kapsamlı ve ayrıntılı olarak Martin Fowler’ın sitesindeki yazıyı başlangıç olarak tavsiye ederim.

Peki neden?

Bazı kavramları anlamak için çözdüğü problemlerin farkında olup, problemleri iyi anlamak önemli diye düşünüyorum. “Serverless” kavramını da daha iyi anlamak için problemi önce anlamamız lazım. Geliştirme yaparken, çözmeye çalıştığımız problem logic’i dışında başka şeyleri de düşünmek durumundayız. Çalışacağı sunucu konfigürasyonu, sunucu yetkilendirmesi, oturum yönetimi, yük dağıtımı gibi konular bunlardan sadece bir kaçı. Bir CRM uygulamasının problem domain’i dışında bu tarz konular ile de ilgilenmek, hızlı ve çevik çözüm üretme konusunda günümüzde bir engel artık. Çünkü ne yazık ki hiç birimiz Ninja değiliz ve tüm bu konulara yüksek bir kalitede hakim olamayız. Dolayısıyla bu tarz konuları ya da fonksiyonları başka sağlayıcılardan alabiliriz. Aynı şekilde kendi çözümlerimizi de ihtiyacı olacak sistemlere sunabiliriz. Cloud Computing, servis odaklı mimariler, PaaS ve FaaS gibi konular aslında bunlara çözüm olarak geliştirilen kavramlar. Peki “Serverless” bu noktada nasıl konumlanıyor? Uygulama geliştiren kişiler için yukarda bahsettiğim tüm konular birer maliyet. Sadece maddi anlamda değil tabi ki.

Efor, zaman, yönetim gibi konular da geliştirilen sistemler büyüdükçe artan maliyetler olarak bizlerin karşısına çıkıyor. Verim ve maliyet oranları gündeme geldiğinde “Serverless” yaklaşımı önemli bir konu haline geliyor. “Serverless” yaklaşımında maliyet olabilecek konuları başka sağlayıcılardan alıp, kendi ihtiyaçlarınıza göre ölçeklendirmek mümkün. Bu ölçeklendirmenin de otomatik olarak sağlanması, sadece tüketilen kaynakların maliyet olarak karşımıza çıkması da “Serverless”ın önemli bir avantajı. Uygulamalar açısından, ödeme özelliklerinin kullanılan ya da çalışan fonksiyona kadar indirgenmesi ve bunun maliyet açısından avantaj sağlaması, “Serverless” kavramını daha fazla duymamızın en büyük sebeplerinden biri olacak.

AWS Lambda ve Azure Functions, “Serverless” uygulamalar geliştirebileceğiniz Cloud’daki sistemler. İlginizi çekiyorsa bunlara göz atmanızı tavsiye ederim. Şimdilik bu kadar, bir sonraki yazıda görüşmek üzere.

Agile Turkey Summit

Geçen senelerde oldukça başarılı geçen Agile Turkey Summit, bu sene yine oldukça önemli konuşmacılar ile 6 Ekim 2016 tarihinde IT sektörünü bir araya topluyor. Wyndham Grand Levent‘de gerçekleşecek etkinlik için duyurulan konuşmacılar ile bu sene de etkinlik oldukça cazip.

Bu sene “End to End Agile Mind Shift” ana teması altında 4 farklı alt kategori ile paralel oturumlar yapılacak. “DevOps”, “Agile in a Nutshell”, “The Mind Shift” ve “Software Craftsmanship” konularının işleneceği etkinlik yine çok dolu geçecek. Agile dönüşüm ile ilgileniyorsanız, mutlaka kaçırmamanız gereken bir etkinlik.

Etkinlik ile ilgili son dakika gelişmelerini ve tüm konuşmacıları http://www.summit.agileturkey.org adresinden takip edebilirsiniz. Ayrıca kayıt işlemlerini için de siteden bilgi alabilirsiniz.

speakers

Agile Turkey Summit 2016 Speakers