Yazılım Geliştirme

İçerik Bulutu Yazılım Mimarisine Ufak Bir Bakış

Blogumuzdaki içerik dünyası ile ilgili yazılarımızın yoğunluğundan sıyrılıp bir de icerikbulutu.com un arka planında yazılımsal olarak neler oluyor ya da geliştiricilerimiz nasıl bu kodlamaları yapıyor o konuya değinelim.

icerikbulutu.com a girerseniz, sizi şirketimizi ve hizmetlerimizi anlatan genelde statik verilerden oluşan bir arayüzün beklediğini göreceksiniz. Ancak buradaki arayüzler dev bir arka planın sadece sunum kısmı. Hizmetlerimizi işleyiş zamanlamasına göre bir sıralamaya sokarsak; yayıncı ve ajans, yönetim, yazar ve editör gibi alt alanlara ayırabiliriz. Bir de ana yapımızda zorunlu bir iletişim içinde olmasa da, bu kaynaklardan beslenen akademi ve bu yazımızın da paylaşıldığı bloğumuz var.

Kısaca bu arayüzlerimizi ve servislerimi tanıyalım. Daha sonra standart yazılım geliştirme metodolojilerinin üzerine biz ne koyduk, müşterilerimize ve yazarlarımıza faydalı olabilmek için hem güvenlik hem de işleyiş açısından ne gibi geliştirmeler yaptık, yazılım geliştiriclerimizin rahat kodlama yapabilmesi için neler yapıyoruz onlara bakalım.

Genel Mimari

Önce ufak bir grafikle işleyişi canlandırmaya çalışalım:

Yazılım Mimarisi

Grafikte görüldüğü gibi kullanıcılar servislerimize 3 farklı yolla ulaşabilirler. Bunlar standart web arayüzlerimiz (html), mobil uygulamamız (native iOS ve Android) ve RESTful API miz. Genel mimariden uzaklaşmayan yapımızda alıcıları (client) dinleyen bir API (server) ve istekleri işleyen bir iş modeli ve tabii ki veritabanımız var. API miz aynı zaman üçüncü parti yazılımlar ya da servisleri kullanarak belirtilen(Twitter gibi) dış uygulamalara da ulaşıyor. Bağımsız çalışan zamanlanmış görevlerimiz ise belirli sürelerde (mesela her saat başı gibi) ya da belirlenmiş tarihlerde çalışarak yine belirlediğimiz iş süreçlerimizi uyguluyor (rapor hazırlamak, içerik üretim sürelerini kontrol etmek, sosyal köprü gönderimlerini takip etmek gibi).

İşler Nasıl Kolaylaşıyor?

Arayüzlerimizde kullanıcıların rahat çalışması ve mümkün olduğunca her işi arayüzlerden tamamlayabilmeleri için sürekli geliştirmeler yapıyoruz. Bu konuda her kullanıcı tipi için örneklerimize bakalım.

Yayıncı ve ajanslarımızın bu konuda yelpazesi biraz daha geniş. Bunun nedeni aslında içerik üretimi sonrası yapılabilecek entegrasyonlardan geçiyor. Üretim arayüzlerinin veri girişi zaten html arayüzlerden sağlanıyor. Ancak üretim sonrası datanın alınması ya da başka uygulamalara aktarılması kısmında devreye entegrasyonlarımız giriyor.  Burada kullanıcı dataları içerik türüne göre ister word, ister excel belgesi ya da düz metin veya html olarak indirebiliyor. WordPress eklentimiz ile direkt olarak içeriği sitesine aktarabiliyor. Sosyal Köprü altyapımız ile twitter ya da facebook’ta direkt bir paylaşım ya da zamanlama yapabiliyor. T-Softa tabanlı e-ticaret sitelerine direkt aktarım gerçekleştirebiliyor. Bunun yanında üretim aşamlarında mobil bildirim ve mail ile de sürekli gelişmelerden haberdar olabiliyor.

Yazarlarımız için de kullanışlı uygulamalarımız ve entegrasyonlarımız bulunuyor. Mobil uygulamamız sayesinde bildirimlerle anlık olarak yeni içeriklerden haberdar olup içerikleri üstlenebiliyorlar. Her türlü aşamadan yine bildirimlerle haberdar olup hızlıca aksiyon alabiliyorlar. Yazarlarımızın metin yazma editörünü (WYSIWYG) ekstra geliştirmelerle daha kullanışlı hale getiriyoruz. İçeriği yazarken anlık olarak kalan kelime ya da harf sayısını, anahtar kelime kullanımını, görsel eklentisi yapıp yapmadıklarını takip edebiliyorlar. Yazı içinde istedikleri noktalarda notlar bırakarak kontrol eden kişiyle kolayca iletişim kurabiliyorlar.

Editörlerimizin de kullanımına çeşitli kontrol araçları sunuyoruz. Yazıları kontrol eden kullanıcılarımız yazarlar gibi içeriğin istene şartları sağlayıp sağlamadığını yazım editöründe görebiliyorlar (kelime sayısı, anahtar kelime kullanımı, görsel v.b.). Ayrıca türkçe metinler için bir yazım denetimi kontrolü, içeriklerin orijinallik seviyesini kontrol eden servisler sunuyoruz. Revizyon olanağı sağladığımız bu kullanıcılar metinlerin istedikleri noktasına notlar alarak konuşma balonları şeklinde yazarlarımızla iletişim kurabiliyorlar. Böylece hızlı ve etkili bir çözüme ulaşabiliyorlar.

Önemli nokta ise bu çözümlerin çoğu kendi yazılım ekibimizin geliştirdiği kodlar ile yapılıyor. Böylece 3. parti yazılımlara ya da dinamik bağlantı kütüphanelerine (dll) ihtiyacı azaltıyoruz.

Yapay Zeka

İçerik Bulutu olarak yapay zekanın önemini de göz önünde bulunduruyoruz. Özellikle makine öğrenmesi hakkında araştırmalar yapıp testler gerçekleştiriyoruz. Tabii ki elimizde var olan data da bize büyük oranda yardımcı olacak. Kısa süre içerisinde 4bin’e yakın yayıncı için oluşturulan 100bin’den fazla içerik bu konuda besleme datası olarak kullanılıyor.

Şu anda ise “kural bazlı doğal dil geliştirme” aracımızla küçük bir excel datası ile binlerce farklı içerik oluşturabiliyoruz. Şu anda rahatlıkla raporlama, bilgilendirme, özel gün metinleri hazırlama, kişiye özel özet çıkarma ve basit içerik oluşturma işlemleri için kullanıcılarımız bu aracı kullanıyorlar.

yapay zeka

Kullanıcımız bu platforumuzu kullanarak.

– Sunduğu datadaki alanları istediği yerde formatlayarak kullanabilme

Metinler için: Aynen kullanma, tamamını büyük ya da küçük harfle yazma, ilk harfi ya da bütün kelimelerin ilk harflerini büyük yazma gibi seçenekleri kullanabilme

Rakamlar için: Basamak sayısı belirleyebilme, metne dönüştürme, datadaki ortalamasını ya da genel toplamını kullanabilme

Tarihler için: İstediği şekilde formatayabilme

True/False için:  Bu şekilde tanımlanabilen bir data varsa, koşul işlemleri için bu formatı kullanabilme (örneğin stokta var/yok gibi)

Liste için: Virgülle ayrılmış listeler desteklenmektedir. Listeler metin gibi işlenip son girdi “ve” “veya” ekleri ile ayrılıp kullanabilir.

– Koşul ekleme

Dataları kullanarak ya da statik verilerle istediği şekilde koşullar ile dinamik ya da statik metinler oluşturabilme.

– İşlem ekleme

Dataları kullanarak ya da elle girilecek verilerle her türlü matematiksel işlemi yapabilme, daha sonra tekrar kullanmak üzere kaydedebilme

– Eş anlamlı kelimeler oluşturma

Eş anlamlı kelimeler ile metin çeşitliliği sağlama, kaydedip tekrar kullanabilme

– Bağlantı yönetimi

Datasal ya da statik linkleri detaylı bir şekilde kullanabilme, bakınız vb. tarzı iletişimleri rahatça kurabilme.

Örneğin elinizde detaylı bir data varsa 3 cümle ile 140bin farklı içerik olulturabilirsiniz 🙂 İlginç değil mi?

Peki ya güvenlik?

SSL gibi standartlar zaten uygulamalarımızın tamamında mevcut. Kişisel şifreler ise scrypt algoritması ile saklanıyor. Bu programcılarımız da dahil hiçkimse bu verileri çözemez anlamına geliyor. Diğer uygulamalarda ise token lar ile veri alışverişi yapılıyor. Bu durumda kişisel verilerin hiç birinin uygulama ve servis arasında gidip gelmemesi anlamına geliyor.

Yakın zamanda 2 faktörlü kimlik doğrulaması uygulamasına da geçeceğiz. Bu uygulama 3 farklı onay mekanizması ile çalışıyor. İlki Garanti Bankası’nın mobil uygulaması gibi bildirim onaylama metodu, ikincisi sms onay kodu ve üçüncüsü ise mail onay kodu. Bu şekilde kullanıcılarımızın hesaplarını maksimum güvenlik ile korumaya çalışıyoruz.

yazılım güvenliği

Örneğin yukarıdaki giriş ekranından sonra otomatik olarak mobil uygulamaya bir onay bildirim gidecek ve o bildrim onaylanmadan giriş yapılamayacaktır.

yazılım güvenliği

Tabii ki diğer giriş türleri de aynı ekran üzerinden desteklenmektedir.

Yazılım geliştirirken kolaylıklar

Klasik geliştirici araçlarından burada bahsetmeyeceğim. Ancak özellikle yönetim tarafındaki ekranlarımızın geliştirilmesinde geliştiricilerimiz için standart kontroller hazırladık. Bu şekilde geliştiricilerimiz 0 (sıfır) html kodu ve çok az javascript yazarak (sadece grid ve grafik oluşturma çağrıları) bütün sayfaları hazırlayabiliyorlar. Bunun için hazır bir css şablonu kullanarak tamamını bizim yazdığımız grid, grafik, sekme, bütün form kontrollerini barındıran ya da bunların bir ksımıyla hazırlanmış farklı şablonlar (widget) hazırladık. “Bizim yazdığımız” kelimeleri aslında bütün bu kontrolleri oluşturan, ajax çağrıları yapan, render işlemlerini gerçekleştiren, dinamik olarak güncelleyen bütün javascript kodlarını bizim yazdığımızı simgeliyor 🙂

Kontroller bir uygulamada gerekli olan bütün olayları sağlıyorlar. Örneğin gridimiz (veriler test verileridir):

yazılım geliştirme

Gridlerimiz ajax çağrıları ile yükleniyor. Bütün içerik, sayfalama, başlıklar, arama (filtre) kutuları, grid içi şablonlar tamamı dinamik olarak oluşturuluyor. Desteklenen özellikler:

– Sayfalama,

– Görüntülenen satır sayısı değiştirebilme (bütün kayıtların ayrıca detayı),

– Dinamik excel aktarımı,

– Başlıklara tıklayarak sıralama,

– Filtreleme kutucukları (çoklu seçim, tekli seçim, tarih aralığı, <, >, <= ,>= ve != fonksyionları desteği)

– Ön filtreleme koşulları

– Satır seçimi için ek kolon açabilme (tek tek veya tümü seçimleri yapabilme – seçimleri bir dizide ilgili kontrole aktarabilme)

– Menü işlemleri için ek kolon açabilme (statik veya ajax çağrımı yapabilme)

– Satır yükseklik ve sütün genişlik ayarlama

– Tarihler, rakamlar v.b. için yerelleştirme,

– Verileri ön tanımlı şablonlar ile şekillendirme (doğru yanlış için yeşil-gri yuvarlaklar ya da yüzdesel gösterimler için progress-bar şablonları, resimler için yuvarlatılmış gösterimler, link bağlantıları, birden çok veriyi aynı kolonda gösterebilme v.b.)

– Koşul bazlı class, css ya da html ekleme-değiştirme (örneğin [Field]<3 ise ‘class=”red”‘ ekleme v.b.)

– Fonksiyon veya matematiksel işlem çalıştırma

Grafiksel olarak ise amChart kullanarak datalarımızı görselleştiriyoruz. Bu konuda da geliştiricilerimiz için baz kontroller yazarak bir kaç satırlık javascript kodu ile sayfalarımıza çıktı üretebiliyoruz. Örnek olarak:

initializeChart(

“grafik için tekil bir ad”,

“simpleBar”,

{ “field”: “X”, “value”: “Y”, “color”:”Z” },

“ajax çağrı adresi”

);

kodu bize çıktı olarak (veriler test verileridir)

data görselleştirme

görselini oluşturuyor. Bu grafik için hiç bir html kodu ya da ekstra başka bir javascript kodu yazılmıyor.

Grafik kontrolümüz şunları destekliyor.

– Yatay veri aralığı dinamik filtreleme (ajax çağrımı)

– Dinamik veri değişimi (veri ekleme ya da güncelleme – tek ya da çoğul)

– Kolon seçiminde javascript method ya da ajax çağrımı

Veri girişleri için ise kontrol kütüphanesi geliştirdik. Örneğin aşağıdaki

kontrol kütüphanesi

Çıktıyı almak için geliştiricinin sadece c# kodu ile bir konteyner oluşturup modeli içine tanımlaması gerekiyor. Örneğin:

new Container{

Items=new List<Item>{

new ControlForm {

Controls = new List<Control>{

new CheckControl {

Field= Model.X,

Header=”Yayıncı”,

IsRequired=true,

….},

new ImageControl {

….},

Burada CheckControl checkBox’ı oluşturan baz kontrolün tanımını içeriyor. Bu şekilde lazım olan bütün kontroller için (fotoğraf, text, label, dropDown,searchBox,link,radio v.b.) baz kontroller yazılıp geliştiricilerin kullanımına sunuldu. Buradaki ControlForm’umuz da farklı formları taşıyan bir baz kontrol. Aynı bu şekilde grid taşıyan bir GridControl, grafikler için ChartControl ya da hepsini içerebilen TabControl gibi yapılarımız da oluşturuldu. Bu yapılar aşağıdaki gibi birçok özelliği destekliyor:

– Modele otomatik bağlama (binding)

– Değer değiştiğinde (buton ise tıklandığında v.b.) belirlenen bir javascript metodunu çağırabilme

– Değer değiştiğinde belirlenen başka bir kontrolü yenileyebilme (ya da doldurabilme)

– Değer değiştiğinde belirlenen bir ajax çağrımını (model ile) çağırabilme, çağrım başarılı ise sayfayı yenileyebilme

– Dinamik (ajax çağrısı ile arama yapılabilen) ya da statik dropdown’lar

– Radio Grupları gibi çoklu datalar için dinamik yönetim

– Diğer form kontrollerinden (grid ve grafik gibi) data alabilme

– Ajax çağrımı ya da javascript metod çağrımı yapmadan önce onay alma

– Editör kontrolü için otomatik olarak kelime-harf sayısı, anahtar kelime kullanımı ve görsel içerme fonksiyonlarını belirleme

– Dosya yükleme kontrolünün bütün bileşenlerini dinamik hazırlama

– Tam ve Ondalık kısımlı nümerik girişleri otomatik hazırlama (iki ayrı model oluşturma)

– Telefon girişi için ülke seçimi ve telefon numarası girişlerini otomatik hazırlama (iki ayrı model oluşturma)

– Başlık, alt bilgi başlığı, placeholder gibi değerler

– İkon kullanımı

– Zorunlu alan tanımı

– Sadece okunabilir alan

Sonuç olarak bütün html ve ilgili Jquery kodları bir kütüphaneye çıkarılarak geliştiricilerin sadece işleyişe odaklanması ve tabii ki testi kolay, aynı görsel yapıda ve hızlı arayüz çıkarmaları sağlandı.

Her ne kadar bu geliştirmeler yazılımsal anlamda olup İçerik Bulutu hariç herhangi bir yapıya da uygulanabilecek olsa da bazı zorunlu kullanımların olması (örneğin WYSIWYG editörü) bize bu konuda biraz daha geniş bakış açısı sağladı.

İlk Yorumu Başlat