top of page

Endüstri Mühendisliği Yazıları-8 (Yazılım ve Matematik-2)

Merhaba,


Yazılım ve matematiğin birlikteliğiyle geliştireceğimiz programlar üzerine tavsiyelerimi aktarmaya devam ediyorum. Ana programı, yani C#'yi tanıdıktan sonra, içeriği zenginleştirmek için yapmamız gerekenleri üç grupta toplayabiliriz. Önce bir veri tabanı dizayn edip, buna ana programdan nasıl erişeceğimize ve onu nasıl yöneteceğimize bakacağız. Sonra ana kodumuz içinde kullanacağımız matematiksel yapıda bize yardımcı olacak programları göreceğiz. Son olarak kullanıcının programı nasıl çalıştıracağını belirleyeceğiz, yani önyüzü tasarlayacağız.


Veritabanına Erişim (LINQ to SQL)

Öncelikle programımızın veriyi saklayacağı tabanı ve bunun içindeki tabloları dizayn etmeliyiz. Bu veri tabanı kişinin bilgisayarında, ortak bir alanda (şirketin network'ü içinde) ya da bulut (cloud) sisteminde olabilir. Ortak kanı böyle bir iş için SQL bazlı veri tabanı kurmaktır. Veri tabanı kurulumu ve onunla ilgili işlemleri nasıl yapacağımıza dair eğitime, bir önceki yazımda paylaştığım Pragim Technologies iyi bir örnek sunuyor. Gayet kapsamlı bir eğitim programı hazırlanmış, buradan erişebilirsiniz; SQL Server Tutorial for Beginners.

Veri yönetiminin temel prensiplerini ve komutlarını öğrendikten sonra yapmamız gereken bunu C#'de yazacağımız ana programa bağlamak olacaktır. Klasik metotlar, SQL komutlarının C# içinde yer alacağı fonksiyonlar tasarlamaktır. Yani, SQL'deki bir komutu (örn: Select * from Table) bir yazı verisi (string) olarak C# içinde özel bir fonksiyonun içine yazarsınız. Sonra, programınız çalışır ve SQL veri tabanına bağlanıp bu komutu yerine getirir. Fakat, bu komutlar elle yazıldığı için önceden doğru çalışıp çalışmadığını bilemezsiniz. Bu durum, yüzlerce komutun olacağı bir programda pek de iyi bir yol değildir. Ayrıca, veri tabanında arayacağınız veri parametrik bir şeye bağlıysa, yani zamanla ya da kullanıcı tarafından değiştirilebiliyorsa işiniz iyice zorlaşır. İşte bu noktada LINQ to SQL yardıma koşar. LINQ sisteminin özel bir versiyonu olan bu program sayesinde, C# kodunuz içinden SQL Server'a kolayca bağlantı kurup, daha önce açıkladığım Visual Studio sisteminin nimetlerinden faydalanarak veri tabanıyla ilgili süreçleri yönetebilirsiniz. Bununla ilgili eğitim için yine Pragim'de şöyle bir program var; Linq to SQL Tutorial.


Veritabanı yönetimi ve ana programla bağlantısını sağladıktan sonra, asıl problemi çözmemiz için bize yardımcı olacak bazı paketlerden bahsetmek istiyorum. Bunlar yeni Dünya düzeni Open-Source sayesinde hepimizin kullanımına açık bedelsiz, sorgusuz, sualsiz programlar ve paketlerdir. Dünya'da hala bir umudun olduğunun canlı kanıtıdır.


R'la İletişim (R.NET)

R programlama dili, istatistiksel hesaplama üstüne açık kodlu ve bedelsiz bir programdır. İçinde birçok fonksiyon, test ve veri analiz prosedürü bulunur. Bu programın kullanımıyla ilgili web'de bir çok eğitim programı bulabilirsiniz. Fakat, direk kullanımı zordur; çünkü kullanıcının komutları anlaması ve geçen yüzyıldan kalma editör yapısına uyum sağlamasını bekler. (Visual Studio üstünden çalıştırabileceğiniz bir editörü de vardır) Kullanıcıyı MS-DOS benzeri bir ekrana mahkûm etmektense, onu bu işe hiç karıştırmadan kendi programınız içinde problemi çözmeniz mümkündür. R.NET adı verilen yazılım paketi sayesinde C#'dan R'a ulaşabilir, komutlarınızı gönderebilirsiniz. Konuyla ilgili sınırlı da olsa web'de doküman mevcut. Kısa sürede hakim olacağınız yapısıyla, ana programımızı R'a bağlayıp, kullanıcının kompleks problemlerini kısa sürede çözmesini sağlayabilirsiniz.


Matematiği Programa Taşıma (Math.NET)

Math.NET, bir grup gönüllü yazılımcı ve matematikçinin hazırladığı harika bir kütüphanedir. Kompleks sayılar aritmetiğinden, olasılık fonksiyonlarının yönetimine; sayısal integral hesaplarından, matrix süreçlerine; lineer regresyondan, Markov Chain'e, birçok alanda işinizi kolaylaştıracak fonksiyonel hesaplama prosedürleri sağlar. Yapmanız gereken, paketi web'den indirip Math.NET Numerics adlı web sitesinden ilk eğitiminizi almak olacaktır. Sonra, yazacağınız programın yapısına göre daha özele inip forumları takip edebilir, ya da bu gönüllü gruptan ilgili kişilerle bağlantıya geçip kendilerinden yardım isteyebilirsiniz. Açık görüşlü ve mütevazi insanlar, kısa sürede sorularınızı cevaplıyor ya da ilgili yerlere yönlendiriyorlar.

Math.NET'in önemini bir kez daha belirtmek istiyorum. R kadar geçmişi olmasa da, C# yapısı içinde kurgulandığı için hem yeni nesil program ve beklentilere daha uyumludur; hem de her geçen gün gelişen içeriğiyle bir çok alanda size yardımcı olacaktır.


Bundan daha da özele giren, örneğin Lineer Optimizasyon, Genetik Algoritma ya da Machine Learning gibi alanlarda yine bir çok paketi web'den bulabilirsiniz. Bunlar da yukarıda paylaştıklarım gibi Open-Source felsefesiyle hazırlandığı için bedelsiz ve aracı kurum olmadan rahatlıkla ulaşacağınız program ve/veya paketlerdir. Tek uyarım, bunlar ticari amaç gözeterek hazırlanmadığı için hataya açık olduklarıdır. Programınızı hazırlarken bu paketlerden aldığınız sonuçları başka programlardan (örneğin Excel'de problemin manuel bir versiyonunu hazırlayarak) kontrol etmenizi tavsiye ederim.


Programımızın veri tabanı ve ana kod kısmını aşağı yukarı tamamladık. Şimdi sıra bunu kullanıcıya sunmakta. Aşağıda iki farklı versiyon göreceksiniz.


Ms Office'i Ön Yüz Olarak Kullanmak (VSTO)

Programlama dilinde uzmanlaşmaya başladıktan sonra, önyüz (Front-End) tasarımına geçmek gerekir. Buna yazdığımız programları kullanacak kişilerin erişimi için ihtiyacımız olur. Benim önyüz için tavsiyem Microsoft Office programlarıdır. Örneğin, Excel'de bir Ribbon tasarlayıp, buna koyacağınız tuşlarla kullanıcının programı yönlendirmesini sağlayabilirsiniz. VS içinde bunu yapabileceğiniz şablonlar VSTO (Visual Studio Tools for Office) olarak geçer. Bu konuda uzmanlaşmak için, web'de kısa bir taramayla VSTO kullanımı üzerine bir çok video bulabilirsiniz. VSTO yerine web tasarımı yapıp da kullanıcılara sunabilirsiniz, ama ben geliştireceğimiz programın daha çok matematiksel bir tabanı olacağını düşünerek Ms Office'i öneriyorum. Kullanıcı programı çalıştırırken, Excel'in kendi fonksiyonlarını ve diğer araçlarını da kullanmaya devam edebilir, geliştirdiği senaryoyu bir office dosyası olarak kaydedip, daha sonra tekrar ulaşabilir. Neredeyse her bilgisayarda Ms Office olduğu için ekstra bir yatırıma da gerek kalmaz.


Excel'de UDF (User Defined Function) Hazırlamak

Diğer bir alternatif ön yüz Excel'de kişiye özel tasarlanmış fonksiyonlardır. Literatürde UDF (User Defined Function) olarak geçen bu yapıları mevcut VSTO şablonlarıyla yapmak pek mümkün değildir. Microsoft'un neden bunu mümkün hale getirmediğini bilmiyorum. Onun yerine, bunu sizin için yapabilecek bir yazılım paketi vardır; Excel-DNA. Bu proje sayesinde, Excel'de özel bir problemi çözecek bir fonksiyon yazıp bunu kolayca kullanıcıların bilgisayarına kurabilirsiniz. Kullanıcının tek yapacağı standart bir Excel fonksiyonunu çalıştırır gibi, onun adına geliştirdiğiniz fonksiyonu hücreye yazıp girdileri seçmesidir. Formülü girdiği hücrede ihtiyaç duyduğu sonucu alacaktır. Belli bir sayısal değer beklenen programlar için ideal bir metottur. Ayrıca, VSTO'daki gibi bu program bünyesinde de bir Ribbon kurup, kullanıcının buraya koyacağı tuş ve diğer araçlar vasıtasıyla programı yönetmesini sağlayabilirsiniz. Web'de konuyla ilgili bir çok doküman var. Ayrıca projenin lideri Govert Van Drimmelen, konuyu daha iyi anlamamız için bir de YouTube kanalı açmış, buradan ulaşabilirsiniz.


Bu ve önceki yazıda aktardığım bu programlama araçlarının hepsi bedava. Ortalama bir bilgisayar ve web bağlantısı yeterli. Sadece onları kullanmayı öğrenmek için kendinize yatırım yapmanız gerekiyor, ötesinde hiçbir şey size engel olamaz. Matematik, yazılım ve saha bilgisi bir araya geldikten sonra, çalıştığınız işin, şirketin, ekonominin, ülkenin boyutu anlamını yitirir. Geriye sadece bir katkı yapmak, aldığınız eğitimin hakkını vermek kalır. Ve tabii, geleceğinize yön verecek projelere yelken açmak da olabilir.


Sevgiler


Comments


bottom of page