CEYD-A ile Kurgu Geliştirmeleri

Cenker Sisman
Deep Learning Türkiye
7 min readDec 9, 2019

Blok geliştirmelerimize bu yazımızda da devam ediyoruz. Günden güne gelişen yapı ile CEYD-A geliştirmeleri yazılımcıların odağından kullanıcılara doğru kaymakta. Böyle olunca tüm karmaşık kavramların daha da kolaylaştırılması gerekmekte. Önceki kodsal yapıda öğretilen her bir kavram, komut olarak adlandırılıyordu. Her komut ise Soru, Soru Şablonu, Cevap, İşlem, Önceki Komut gibi alt ögelere ayrılıyordu. Yeni yapıda kod ile yapılabilecek tüm komplike işlemlerin sürüklenip bırakılabilen ve birleştirilebilen bloklar ile yapılabilmesi amaçlanmaktadır. Bu doğrultuda Komut ve tüm alt ögelerin ismi Kurgu olarak adlandırılması hem anlamsal olarak hem de sadeleştirme adına çok daha doğru olacaktır.

Komut dediğimiz kavram tek bir kullanıcının geliştirmeleri göz önüne alındığında doğru isim görünse de çok sayıda kullanıcının kendi komutlarını CEYD-A’ya öğretip diğer kullanıcı komutlarının da gerekli koşullar gerçekleştiğinde uygulanması durumunda Kurgu daha uygun olacaktır.

CEYD-A, aynı yapılar için çeşitli kurgular öğrenmektedir. Kurgunun eyleme dönüşebilmesi için içinde belirtilen koşulların ve CEYD-A’ nın algoritmik çalışmasının gerçekleşmesi gerekmektedir.

Kurguların birbirleriyle etkileşim içinde olduğuna güzel bir örnek: CEYD-A’ ya benim ismim Cenker dediğimde SAHIBINADI değişkeni Cenker olarak değişiyor. Ancak onaylanmış farklı bir kullanıcı kurgusu olan ben senin babanım kurgusu şeffaf bir yapıda SAHIBINADI değişkenini baba olarak değiştirmeyi amaçlamakta. CEYD-A’ ya ben senin babanım dediğimde bu değişken kurgu işleyişinde baba olarak atandığı için benim adım nedir dediğimde cevap baba olarak karşımıza çıkıyor.

CEYD-A, sadece kendi komutlarınızı değil öğrendiği tüm komut kurgularını değerlendirir. Sizin komutlarınız CEYD-A için bir kurgudur ve gerekli koşullar oluşmuş ise komutunuz devreye girer. Yoksa alternatif çözümler aranır.

Kurgu nasıl oluşturulur?

Yazıda geçen (kelime) geçen atasözlerini listele kurgusunun eğitim videosu

Şimdi özetle bir komut kurgusu nasıl oluşturulur bir hatırlayalım:
Komut Girişi
sayfasına giriş yapıp kırmızı kalem işaretinden Yeni Komut seçmeliyiz.

Eğer daha önce komut kurgusu oluşturduysak ve güncellemek istiyorsak listeden komutumuzun üzerine tıklamalıyız.

Yeni bir komut kurgusu için aşağıdaki ekran gibi ekranla karşılaşacağız. Kurgunun içindeki soru kelimesi ve soru şablonu dolduracağımız alanlar arasında olacak. Soru kelimesi bizim cümlemizin içinde mutlaka geçecek olan kelimedir. Varsayılan olarak kelime olarak atanmıştır. Şablon alanını, bu şekilde değiştirmeden bıraktığımızda içinde soru kelimesi geçen her sorumuzda bu kurguyu değerlendirecektir.

Blok panelinin üst kısmında gruplar halinde kullanabileceğiniz bloklar bulunmaktadır. Kategoriler ve içerikleri CEYD-A geliştikçe yenilenmektedir.

Şimdi soru şablonu blokunu nasıl kullanacağımızı inceleyelim: Eğer bu bloku değiştirmeden olduğu gibi kullanır isek içinde kelime geçen bir cümle söylediğimizde kurgunun devamında ekleyeceğimiz bloklar çalışacaktır.

Bu yazımızda örnek olarak (KELİME) içeren atasözleri komut kurgusunu oluşturacağız: Biz, güzel içeren atasözlerini söyle veya iş içeren atasözlerini biliyor musun? dediğimizde güzel veya kelimeleri bize parametre olarak gelmelidir. Söyleyeceğimiz cümledeki ilk kelimeyi parametre olarak kullanmak için blokumuzu aşağıdaki gibi güncellememiz gerekir.

Biz blokları düzenledikçe, CEYD-A kendi kodlarını aşağıdaki bölümde düzenleyecek. Yapının detaylı olarak nasıl işlediğini öğrenmek istemiyorsak bu komplike bölüm ile ilgilenmemize gerek yok. Bırakın CEYD-A kendisi uğraşsın :)

Blokları oluşturup kurgumuzu tamamladıktan sonra Kurguyu Dene tuşuna basabiliriz.

CEYD-A bizden kurguyu aktive edebilmek için sorumuzu isteyecektir. İş içeren atasözlerini söyle yazıp OK tuşuna basalım.

Kurgunun blokları bağlantıları ile birleştirilmiş bir bütün oluşturuyor ise aşağıdaki gibi bir cevap gelecektir. Burada bloklar, yap boz mantığı ile birbirlerine bağlanmıştır. Her blok türü birbirine bağlanmayabilir. Kurgunun doğru çalışabilmesi için birbirleriyle etkileşimli olan bloklar bağlanabilir. Bu şekilde bir kontrol yapısı hem düzgün bir işleyiş hem de doğru sonuçlar almamızı sağlayacaktır.

Kurgu denemelerimizde çok sayıda deneme yanılma yapmamız olasıdır. Denemeleri rahat yapabilmek için çalışmasını istemediğimiz blok grubuna sağ tıklayıp Bloku Devre Dışı Bırak diyebiliriz.

Bu şekilde işaretli olan bloklar koddan geçici olarak kalkacak ve denemeler yapmamızı kolaylaştıracaktır. Aşağıdaki örnekte sayfa kodlarında istediğimiz alanı ayıklamadan önce tüm sayfa kodunu görmemizi sağlamak için ayıkla blokunu geçici olarak devreden çıkarıyoruz. Devreden çıkan bölümün üzerinde sayfa yaz blokunun olduğunu fark etmişsinizdir.
Sayfa değişkeninde https://tr.wiktionary.org/wiki/1.PARAMETRE adresinin yüklenmiş sayfa içeriği bulunmaktadır. Örneğimize bakarsak 1.PARAMETRE cümlemizdeki kelimesi olarak algılanacağı için https://tr.wiktionary.org/wiki/iş adresi yüklenip içeriği sayfa değişkenine atılmaktadır.

Kurguyu denediğimiz zaman sonuç ekranında sayfa değişkeninin içeriğini göreceğiz:

h4 etiketinin içinde Atasözleri kelimesinin geçtiğini ve etiketten sonra aynı seviyedeki ilk etiketin içeriğinde ilgili atasözlerinin olduğunu sonuç ekranından fark ediyoruz.

O zaman devre dışı olan blok kurgumuzun doğru olduğunu anlıyoruz:
h4 etiketi atasöz içermeli ve devamındaki aynı seviyeden ilk * (tüm etiketler) etiketi alanlarını sayfa içeriğinden ayıklanmalı.
Artık bu bloku etkinleştirebiliriz.

Değişik örnekler deneyip kurgumuzun nasıl dönüş yapacağını görebiliriz:

Kurgu sayfasından çıkmadan önce mutlaka kırmızı kaleme tıklayıp güncelle işlemini yapmalıyız. Bu şekilde kurgu cihazınıza inecek ve CEYD-A yeni bir kalıp öğrenmiş olacaktır.

Kullandığımız Bloklar

Örnekte kullanılan bloklara gelirsek:
Komutlar kategorisinde yaz blokunu kullandık.

Komutlar Kategorisi

Yazılacak olan değer ise değişkenler kategorisinde oluşturduğumuz sayfa değişkeni.

Komutlar kategorisindeki yaz bloku ile metin dönen blokları, değişken, metin ve sayıları yazdırabiliriz.
Değişkenler Kategorisi

Değişkenler kategorisinde kullandığımız değişken dışında çok sayıda ortak isimlendirilmiş değişkene ulaşabiliriz. Burada ortak değişken yerine ortak isimlendirilmiş değişken dememizin nedeni değişken içerikleri kişiye özeldir. Farklı komut kurguları içinde aynı isimde değişken olduğunda bizim kurgumuzdaki değişken ismi kullandığımız kurgularda da aynı isimde ise onlarla etkileşim kurulabilir. Kullandığımız komuttaki bir değişkeni sonraki komutlarımızda da kullanabiliriz. O komut kurgusunu başkası oluşturmuş olsa bile bizim cihazımızdaki kurguda değişken içeriği sadece bize aittir ve bizim verimizi tutar. Başkasının makinesinde ise o değişken sadece kullanana özeldir. Bizim verimizi kullanmaz. Bu konuya yazının sonlarına doğru tekrar değineceğiz.

Ortak isimlendirilmiş değişkenler: Havuzdaki kurgu cihazlara yayılır. Cihazlar üzerinde çalıştırılan kurguların içindeki değişkenler, sadece cihaz içindeki kurgular arasında kullanılabilir. Başka kullanıcı cihazındaki aynı isimdeki değişken ile ilişkisi yoktur.

Komut kurguları internet üzerindeki ortak bir havuzdadır. Kurguların içinde kullanılan değişkenler ise kullanıcıya özeldir ve kullanıcı cihazında işlem görür. Kendi cihazınızdan dışarıya çıkmaz.

Sayfa değişkenine sitenin içeriğini aşağıdaki gibi blokları iç içe yerleştirerek atıyoruz.

Site İşlemleri Kategorisi

Site işlemleri kategorisinde, internet sayfalarına ulaşıp içeriğini değerlendirmemiz mümkün olmaktadır. Burada etiket alanlarını içeriğinden ayıkla blokundaki kıvrımlı olan üst kısma Sayfa etiketleri kategorisindeki blokları ekleyebiliyoruz.

Sayfa Etiketleri Kategorisi

Sayfa etiketlerindeki blokları içeriği ayıkla blokuna eklediğimizde ise aşağıdaki gibi bir blok oluşacaktır:

Bu bloku Komutlar kategorisindeki yaz blokuna eklediğimizde aşağıdaki gibi bir görüntü elde edeceğiz.

Cümle yapısı kategorisinde kendi cümlemizin yapısını belirleyecek bloklar bulunmaktadır. Türkçe dilbilgisine uygun kalıplar da mevcuttur.

Cümle Yapısı Kategorisi

Blok üzerindeki ayarlar şekline bastığımızda birden fazla öge içeren bloktaki ögelerin sayısını sürükle bırak yöntemiyle artırabiliyoruz. Bu şekilde cümle kalıplarımızı dilediğimiz şekilde değiştirebiliriz.

Hatta cümle şablonumuzda bir gün isminin geçmesi gerektiğini aşağıdaki gibi seçimli belirleyebiliriz.

Komut Kurguları ve Veriler

CEYD-A’nın çalışma yapısı güvenlik ve gizlilik adına bilinen uygulamalardan biraz daha farklıdır. CEYD-A, cihazınız üzerine kurulan uygulama üzerinde komut kurgularını yorumlar ve çalıştırır. Uygulamanın kendi iç derleyicisi vardır. Benzer uygulamalar genelde verileri sunucuya aldıktan sonra tek bir yerden yorumlayıp çalıştırır. Bu da bilgilerinizin cihazınızın dışına, internet ortamına çıkması demektir. Bu tür uygulamalar verilerinizi kendi sunucuları üzerinde değerlendirip cihaza sonucu döndürürken, CEYD-A ise cihazınız üzerinde kurguyu çalıştırıp yorumlar. Çalışan komut kurguları içindeki sağlanan veriler veya cihazınızdaki veriler yine cihaz üzerinde kalır.

Komut Kurgusu ve Veri (başka deyişle değişken içindeki değer) iki farklı kavramdır. Komut kurgusu CEYD-A’ya verilecek kuralları belirleyen sözdizimdir. Veri ise komut içinde işlenecek olan bilgilerdir.
Kullanıcılar tarafından oluşturulan komutlar internet ortamındaki ortak bir havuzda toplanır.
Veriler ise internet üzerine çıkmadan cihaz üzerindeki derleyici tarafından komut kurgusu içinde yine cihaz içinde derlenir.

İnsanoğlu da benzer yaklaşım içindedir aslında: Dış dünyadan kurguları öğrenir ve öğrendiği kurguları kendi özeline (verilerine) uygular ve iç dünyasını belirler. Öyle değil mi?

Örnekte cevabı benimle evlenir misin işlemini yap bloku vermekte ve sonrasında içinde kullanılan ortak isimdeki değişken staMarriageProposalCount ile teklif sayısı gösterilmektedir. Değişken isimleri ortaktır ama içerikleri cihaz bazlı çalıştığı için kullanıcıya özeldir.
Önceki sohbetlerinizin kurgularında geçen ortak değişkenler yeni sohbet kurgusu ile etkileşim sağlayabilir.
ortak isimlendirilmiş değişken kullanarak oluşturduğumuz yeni kurgu
Görseldeki cümlede kriterler uyduğu için yeni kurgumuz devreye girecektir.
Ancak bu görseldeki cümlede kriterler uymadığı için cevap alternatif kurgulardan alınacaktır. Her iki kurguda aynı değişken kullanıldığı için kilo ilgili tüm komutlar birbirleriyle uyumlu çalışabilir.
Kilo ile ilgili önceden hazırlanan komut kurguları aynı ortak değişken isimlerini kullandığı için farklı sorularımızı cihazda tuttuğu bilgiler dahilinde cevaplayabilecektir.

Eğer cihazınızdan CEYD-A’ yı kaldırırsanız, CEYD-A’nın yorumladığı bilgileriniz de dışarı çıkmadığı ve cihazınızda uygulama kapsamında kaldığı için tamamen silinir. Tekrar CEYD-A kurulduğunda CEYD-A’nın önceden sakladığı bilgilere ulaşamazsınız. Çözüm için uygulamayı kaldırmadan önce CEYD-A’ ya yedekle demeniz gerekmektedir. Bilgilerinizi cihazınızdaki SD kartına kaydeder. Sonrasında tekrar kurulum yapınca bilgilerimi yükle dediğinizde SD kart üzerinde bilgilerinizi bulur ve cihazda kurulu CEYD-A’ya tekrar bilgiler yüklenir.

Ayrıca bakınız: http://cenker.com/main/aydinlatma.html

CEYD-A ile ilgili son gelişmelere https://web.ceyd-a.com adresinden ulaşabilirsiniz.

--

--

Cenker Sisman
Deep Learning Türkiye

Senior Software Architect in OTI Holding, Owner of CEYD-A Turkish Mobile Assistant, Istanbul Technical University Computer Engineering M.Sc.