DevNot - Script Tabanlı Dillerin Önemi ve Geleceği

Merhaba arkadaşlar,

Bir kaç ay önce yaklaşık beş yıldır çalışmakta olduğum turuncu bankanın oldukça yaşlı bir ürününde değişiklik yapmamız istendi. Söz konusu ürün bir devlet kurumunun eski nesil SNA protokol tabanlı sunucuları ile iletişim kurmaktaydı. Bankanın kritik süreçlerinde rol alan bu ürün VbScript tabanlı klasik ASP ile yazılmış bir Web uygulamasıydı. Uygulamanın neredeyse 13 yaşındaydı. Geliştiricisi olan 3ncü parti firma çok uzun zaman önce kapanmıştı.

Yenilenmesi düşünülen proje için gerekli adımlar henüz atılamadan iki önemli değişiklik talebi almıştık. Bunlardan birisi 32bitlik eski Windows Server 2003 sunucularından yeni nesil Windows Server 2012 sunucularına geçiş aşamasıydı. Dolayısıyla uygulamaların 64bitlik yeni nesil sunucularda çalışabiliyor olması gerekmekteydi. Tüm kodların gözden geçirilmesi, testlerin dev,test,pre-prod ortamları için tekrardan yapılması ve daha bir çok taşıma adımı işin içerisine giriyordu. İkincisi talep ise devlet kurumunun artık TCP/IP tabanlı yeni nesil bir iletişim protokolüne geçecek olmasıydı. Buradaki sıkıntı ise SNA tabanlı eski sistemle haberleşen ve kaynak kodu bulunmayan C tabanlı kütüphanenin 64bit işletim sisteminde çalışmıyor olması ve tabii TCP/IP tabanlı iletişimi destekleyecek bir özelliğinin bulunmamasıydı.

İlk problemde bizi zorlayacak olan kısım kod içinde kullanılan .Net 1.1 tabanlı kütüphanelerin 64bit üzerinde çalışacak şekilde ve yeni Oracle veritabanı bağlantılarına göre revize edilmesiydi. Ayrıca proje yazıldığı tarihlerde ne yazık ki veritabanı bağlantı ifadeleri kod içerisinde sabitlenmişti. Kaynak kod olmadığından var olan .net assembly'larını de-compile edip kodu çalışır hale getirip tekrar atmamız gerekiyordu. Hatta .Net 1.1 ile derleyip atmamız şarttı. Nitekim ASP tabanlı uygulamaya dokunmak o zaman dilim için çok riskliydi. TCP/IP tabanlı iletişim sorununu çözmek için biraz daha rahattık. VBScript kodlarında eski nesil iletişim protokolünü kullanan fonksiyonellikleri bulup içeride geliştirdiğimiz REST tabanlı WCF servisi çağrımı yapan kodlarla yer değiştirdik. REST servis devlet kurumu ile gerekli olan TCP/IP haberleşmesini üstleniyordu.

.Net 1.1 kütüphanesinin de-compile edilip tekrar atılmasında ise önemli bir sorunumuz vardı. Kod çok çok eski olduğundan TFS vb bir ortamda tutulmamıştı. Sadece production makinesinin benzeri olan bir pilot ortamda Notepad++ kullanarak gerekli düzenlemeleri yapıyorduk. Sunucu üzerine Visual Studio gibi bir IDE kurmamız zaten mümkün değildi. C# kodlarını düzenlemeyi başarıp komut satırından tekrar derleme işlemini gerçekleştirebilmiştik ama ASP uygulamasının kullanacağı bu bileşenin Global Assembly Cache'e atılmasında sorun yaşıyorduk. Yeni nesil windows sunucusu üzerinde varsayılan olarak yüklü gelen .Net Framework sürümleri olsun veya bizim yüklediklerimiz olsun 1.1 için gerekli GacUtil aracını içermiyordu. Peki ne yaptık?

O anda ihtiyacımız olan şey GacUtil'in yapacağı işi yaptıracak birisini bulmaktı. İmdadımıza basit bir Powershell Script'i yetişti. Bu script'ten yararlanarak derlenen bileşenimizi GAC'e atmayı başardık.

Derken akşam oldu ve evin yolunu tuttuk. El ayak çekildikten sonra ben bir süredir ilgilendiğim Ruby çalışmalarıma devam ettim. Ruby, hobi olarak ilgilendiğim ilk script dil değildi. Bankadaki Vb Script ve Powershell mecburiyetten ilgilendiğim diğer betik dillerdi. Lakin Ruby paralelinde Raspberry PI maceramız sebebiyle Python'a da bakma fırsatım olmuştu. Ufak tefek çalışmalarla bu dili de tanıyordum. Sonra işin içerisine GO girdi. Yazılımcıların yeni göz bebeklerinden olan Google destekli dili öğrenmeye çalışırken biraz zorlanıyordum. İşte hayat C#, VbScript, Powershell, Ruby, Python ve Go arasında gidip gelirken DevNot etkinliğindeki konum belirlendi.

Script tabanlı dillerin önemi ve geleceği...

Her ne kadar günümüzün popüler Script dilleri arasında yer alan Javascript, PHP ve diğer çeşitli betik tabanlı Framework'ler de uzmanlığım olmasa da farklı dilleri araştırabildiğim için bir takım tahminlemelerde bulunabilirim diye düşündüm. İşte sunumum.

Sunuma hazırlanırken yorumlamalı ve derleyici tabanlı diller arasındaki farkları irdeleme fırsatı buldum. IEEE ve Stackowerflow gibi kaynakları kullanarak istatistiki bilgilere de ulaştım. "Hello World" demenin derleyici odaklı bir ortamda nasıl olduğunu ve betik dünyasında nasıl gerçekleştiğini inceledim. Tabii sadece iyi yanlarını anlatan değil, eleştirel bakış açılarına yer veren yazılara da baktım. Muhammed Cuma Tahiroğlu ve Görkem Özdoğan'ın değerli yazıları bana büyük katkı sağladı. Pek tabii en sonunda bazı sonuçlara vardım.

Sunumda çok fazla kod yazmadım aslına bakarsanız. Ruby kullanarak yorumlamalı dillerin basitliğini ifade eden aşağıdaki kod parçalarına yer verdim.

Tabii burada olaya farklı bakmak gerektiğimizi de vurgulamaya çalıştım. Ruby'de her şey bir nesne. Bu yüzden 10 yazdıktan sonra bile Fixnum sınıfının kullanılabilir metodlarına ulaşmamız mümkün. Hatta times metodundan sonra başlayan ifadede aslına parametre olarak iş yapan bir kod bloğunun gönderilmesi de söz konusu. Yani bir kod parçasını bir metoda parametre olarak geçip n defa işletilmesini sağlayabiliyor ve tüm bu kodları işletirken derleme işlemine gerek duymadan ifadeleri yorumlattırarak sonuçlar alabilyoruz. Bu beni etkilediği kadar Ruby ile ilgilenmeyen katılımcıları da oldukça etkiledi diyebilirim.

Sunumun en eğlenceli ve tek kısmı ise Powershell Script'i kullanarak Star Wars'dan Imperial March'ı çaldırdığımız kısımdı. Şöyle bir ekran görüntüsü ile paylaşayım. Evinizde gönül rahatlığı ile deneyebilirsiniz.

Umarım fikir verebildiğim ve farkındalık yaratabildiğim bir sunum olmuştur. Bu arada DevNot tarafından etkinlik boyunca bir de anket düzenlendi. Anket ve diğer bilgilere şu adresten ulaşabilirsiniz.

Başka etkinliklerde görüşmek dileğiyle hepinize mutlu günler dilerim.

Yorumlar (2) -

  • Star Wars'dan Imperial March'ı kodlarını isteyecektim buraya attığınız iyi olmuş Smile

Yorum ekle

Loading