Pardus üzerinde Yapay Zeka Projeleri Geliştirmek


ChatBot uygulamaları yapay zekayı anlamak için çok uygun bir başlangıçtır. Türkçe NLP yazılımları hayli azdır, ancak IBM, Microsoft, Google gibi firmaların NLP yazılımları Türkçe’yi desteklemektedir.

Google Dialogflow ile Türkçe sanal asistan nasıl hazırlanır?

Özellikle Google’ın Dialogflow hizmeti Türkçe dahil bir çok dil desteği sağlamaktadır.

Pardus üzerinde yapay zeka yazılımı geliştirecekseniz Pardus bilgisayarınıza aşağıdaki yazılımları yükleyebilirsiniz:

  1. Visual Studio Code
  2. .NET 5
  3. PostgreSQL
  4. NodeJS
  5. Angular
  6. Ionic
  7. Electron
  8. Android Studio
  9. Flutter

Aslına bakarsanız yapay zeka ve büyük veri projeleri için Python daha fazla tercih edilmektedir. Fakat .NET Core ile de ben bu projeyi geliştirebildim. Python’a henüz ihtiyaç duymadım. Eğer siz Python kullanırsanız Django kullanmanızı tavsiye ederim.

.NET Core’da katmanlı mimari geliştirdim ve Api katmanında üç adet Web Api controller yazdım:

  1. AuthController
  2. ChatController
  3. CrmController

Bu controller’larım Services, Infrastructure, Data ve Model katmanlarımla iletişime geçiyor. Services katmanında CQRS paterni ile Common Result Object kullandım.

UI katmanlarım ise şöyle:

  1. Chat.Web (Angular, Ionic, Electron)
  2. Crm.Web (Angular)
  3. Chat.Mobile (Flutter)

Projeyi geliştirirken mobil uygulamayı hibrit yapmak istedim fakat gördüm ki Ionic’le Safari’de bildirimler yapılamıyor, Hey Siri tarzı sürekli mikrofon dinleme yapılamıyor ve Hibrit uygulamalar arka planda çalışmadıkları, sesle ve kamera ile ilgili sıkıntıları olduğu ayrıca telefon geldiğinde sesin ahize yönlendirilmesi gibi bugları olduğu için daha kaliteli bir mobil uygulama için Flutter ve React Native gibi frameworklere ihtiyaç duydum.

Flutter’ı tercih etme sebebim Google teknolojisi olmasıdır.

Nasıl Yapılır?

  1. Backend katmanlı mimari ile hazırlayın
  2. Backend’te Dialogflow’a sorularınızı gönderip cevapları döndüren apiyi yazın
  3. Frontend’i tema kullanarak hazırlayın
  4. Chat sayfanızı Whatsapp’a benzer şekilde hazırlayın
  5. Gelen mesajı gönder butonuna basıldığında chat apinize gönderin, chat apiniz Dialogflow’a mesajı gönderecek ve cevap döndürecektir.
  6. Dönen cevabı uygulamada TTS ile seslendirin

İsterseniz TTS servisi olarak Google Bulut’un TTS servisini kullanabilirsiniz, Google TTS’i Türkçe destekliyor ve ses kalitesi çok iyidir. Bu durumda Dialogflow cevap metni ile birlikte ses dosyası da döndürecektir ve sizin yapmanız gereken cevap metnini gösterip sesi playletmektir.

Mutlu kodlamalar 🙂

Doğru Teknolojilere Karar Vermek


Hedefiniz Pardus işletim sistemi ise ve benim gibi hangi yönde gitmenize karar vermekte zorlanıyorsanız bu yazımda keşfettiğim bazı hususları paylaşmak istiyorum.

Geçtiğimiz yıllarda ilk ve orta öğrenimde bilişim müfredatını Google belirlesin diye MEB ve Google anlaşmaya vardı. Bu nedenle artık Türkiye Microsoft’la arasına mesafe koyarken Google teknolojileri ile yakınlaşıyor.

Ayrıca Facebook skandalından sonra GDPR (KVVK) konusu kritik hale geldi ve bu nedenle yurtiçi bulutlarda on-premise çözümler tercih ediliyor.

Ayrıca Tübitak’ın geliştirdiği Pardus işletim sistemi olgunlaştırıldı ve Cumhurbaşkanlığı bildiğim kadarıyla aşağıdaki genelgeleri ve tavsiye kararlarını yayınladı:

  1. Whatsapp yerine BIP kullanın
  2. Yurtiçi bulutları tercih edin
  3. Pardus kullanın
  4. Yerli yazılımları tercih edin
  5. KVKK kurallarına uyun
  6. Zaman-damgalı günlük tutan firewall kullanın
  7. Veritabanlarında AuditLog kullanın
  8. Siber Güvenlik ve Bilgi Güvenliğine yatırım yapın

Gelişmeler ışığında yerli yazılımlarda Google ağırlıklı on-premise çözüm ve teknolojiler kullanacağız demektir.

Bu durumda aşağıdaki teknolojileri tercih etmek gerekiyor:

  1. GoLang’e geçinceye kadar Python (Django veya Flusk)
  2. Mobil backend’ler için on-premise Parse
  3. Web uygulamalarında Google’ın Angular frameworkü
  4. Mobil uygulamalarda Google’ın Flutter frameworkü
  5. Firebase on-premise çözümü çıkıncaya kadar PostgreSQL veya MongoDB

Neden .NET Core ve SQL Server ikilisini bırakmaya meylediyoruz?

1) SQL Server çok pahalı
2) .NET Core ve SQL Server çözümü ayarlama yapmadan doğrudan Linux’ta çalışmıyor
3) İş dünyasında Python daha popüler
4) Yapay Zeka ve Big Data projelerinde Python daha popüler
5) MongoDB ve PostgreSQL daha ucuz

Sonuç olarak tamamen free bir yapay zeka projesi yapmak istersek hangi teknolojileri tercih etmeliyiz?

Bu sorunun cevabı yerli bulut kullanacaksak değişir, yerli bulut kullanacaksak en uygun seçeneklerimiz şunlar:

  1. Python, PostgreSQL, Angular, Flutter
  2. .NET Core, PostgreSQL, Angular, Flutter

İster Python ister .NET Core kullanın SQL Server kullanmamak gerekiyor. Çünkü Sql Server’ın on-premise çözümü çok pahalı.

Bu durumda birinci fazda tercihimiz ki bu Pardus üzerinde de çalışacaktır:

  1. Backend: .NET Core
  2. DB: PostgreSQL
  3. Web: Angular
  4. Mobil: Flutter

olması uygundur. Şimdi .NET Core ve PostgreSQL’i test edelim. Bakalım .NET Core Identity PostgreSQL’de çalışıyor mu?

Pardus için Yazılım Geliştirmek


Ülkemizde standart olarak Pardus işletim sistemi kullanılacak görünüyor. Yıllar önce Almanya da Linux’a geçmişti. Pardus işletim sistemi Debian 10 temelli bir sistemdir.

Virtual Box ile bilgisayarınıza sanal olarak Pardus kurabilirsiniz. XFCE daha az kaynak tüketiyor ve daha hızlı.

Ancak ben görsel olarak güçlü olduğu için Gnome’u daha çok sevdim. Buna karşın Gnome sanal ortam için biraz yavaş kalabilir.

Pardus işletim sistemine .NET 5.0 yüklenebiliyor. Ben .NET 5’in Debian’a yükleme dokümantasyonunu takip ederek terminalden yükledim. Ancak biz Python’u tercih edeceğiz. Çünkü yapay zeka ve big data projeleri için Python daha uygun ayrıca Pardus’ta Python yüklü geliyor.

IDE olarak Visual Studio Code’u tercih edeceğiz, bunu da Pardus’un uygulama mağazasından yükleyebilirsiniz.

Pardus platformu için önerilerim:

  1. Backend: Python (Django veya Flusk ile)
  2. DB: MongoDB
  3. Web: Angular
  4. Mobil: Flutter veya React Native (Android Studio ile)
  5. IDE: Visual Studio Code

Python’u temel olarak öğrenmek için https://www.w3schools.com/python/ sayfalarından yararlanabilirsiniz.

Ancak Python’da sektör Flusk ya da Django frameworklerini kullanmaktadır. Django dolu dolu bir frameworktür ve biraz daha popülerdir, Flusk ise daha hafif bir frameworktür. Biz de bu yazımızda Django’yu tercih edeceğiz.

Django’da MongoDB kullanacağız. Aşağıdaki makaleyi inceleyecek olursanız .NET Core’daki gibi Migration’lar olduğunu göreceksiniz:

Mutlu kodlamalar 🙂

Hedef Pardus ise Bilişim Eğitimleri Nasıl Olmalıdır?


Yazılım dünyası çok dallanıp budaklandı. O kadar çok teknoloji var ki, eğitimleri piyasanın ihtiyaçları yönünde ve dünya gündemine uygun olarak düzenlemek gerekiyor.

Microsoft Windows dünyada çok popüler bir işletim sistemi olmakla birlikte .NET Core o kadar çok popüler sayılmaz.

JavaScript, Java, Python gibi diller çok daha fazla kullanılmaktadır. Hedef Pardus işletim sistemiyse eğer bu yazılım dillerine odaklanmak gerekmektedir.

1) WEB YAZILIM EĞİTİMİ
MongoDB
Express
Angular (HelloWorld, CRUD, WebRTC, WebXR, Notifications)
NodeJS

2) MOBİL YAZILIM EĞİTİMİ
Flutter (HelloWorld, KVKK’lı Üyelik, Speech Recognition, TTS, FaceID, VoiceID, AR, VR, Notifications)
MongoDB, Firebase
Python
Parse

3) YAPAY ZEKA EĞİTİMİ
Python
Big Data
Tensorflow
Dialogflow (ChatBot)
AutoML

4) OYUN GELİŞTİRİMİ EĞİTİMİ
C++
Unity/Unreal Engine

5) İLERİ TEKNOLOJİ EĞİTİMİ
Blockchain (HyperLedger Fabric (GoLang), Ethereum 2.0 (Solidity), Diem (Move), Bitcoin)
IoT (Kubernetes, Java)
Kuantum Bilişim (Post-Kuantum Güvenlik, DWaveSys, IBM)

6) SİSTEM VE GÜVENLİK EĞİTİMİ
Network
Pardus
Kvkk
ISO 27001
Backup
Siber Güvenlik
DDoS
Bulut
Post-Kuantum Güvenlik Algoritmaları

7) VERİTABANI VE BİG DATA EĞİTİMİ
Oracle/SQL Server
No-SQL Veritabanları
Big Data
Java
Raporlama

Eğitimlerin içeriğine dikkat ederseniz bu eğitimleri Pardus yüklü bilgisayarlarda verebilirsiniz, eğitimler platform bağımsızdır. Her bir eğitim 100 günde verilecek şekilde planlanabilir, sıralamalar ve kısmen içerik değiştirilebilir.

Ve bu eğitimler JavaScript, Java, C++, Python, GoLang gibi platform bağımsız dillere odaklanmaktadır.

C# aslında kaliteli bir nesne-yönelimli programlama dilidir. Fakat .NET 5 ile ilgili iki kötü gelişme bulunmakta:

  1. Windows.Forms gibi platform-bağımlı bir özelliği eklediler, halbuki bunu platform bağımsız yapmaları gerekiyordu.
  2. .NET Core bilgisayardan bilgi toplayan bir servis içeriyor. Telemetry servisinin casusluk ve yapay zeka eğitimi amaçlı bilgi topladığını düşünüyoruz. Microsoft zararı yok dese de by-default bilgi toplamasının hoş olmadığını biliyorsunuz.

Buna karşın .NET Core Pardus’ta kullanılabilir, Pardus üzerinde eğitimleri verilebilir. Yalnız biz Linux testlerimizde .NET Core EF Core SQL Server nuget paketlerinin Linux’ta problem çıkardığını ve direkt çalışmadığını gördük, o yüzden NodeJS öneririm, böylece JavaScript/TypeScript diliyle hem client ve hem server tek eğitimde daha kolay verilebilir.

Bulut konusunda edindiğimiz bilgiler:

Azure’da 10 siteye kadar bedavaya web sitesi ve restful api hostingi yapabilirsiniz. Sqlite veritabanı kullanırsanız eğitim amaçlı backend servislerini Azure Linux Web App’larına ücret ödemeden yükleyebilir ve yayınlayabilirsiniz.

AWS’de giriş seviyeyi istediğiniz kadar ücretsiz Linux/Windows makina açabilirsiniz. Bu sanal sunucuları hosting ve test amacıyla kullanabilirsiniz.

Firebase Hosting’de giriş seviyesi Angular projelerinizi ücretsiz yayınlayabilir. Ücretsiz Notifications servisini kullanabilir, Firebase No-SQL veritabanlarını ücretsiz kullanabilirsiniz.

Google’ın ve Microsoft’un bazı yapay zeka hizmetleri ücretsizdir, bunları eğitimlerde kullanabilirsiniz. Dialogflow ile hiçbir ücret ödemeden Siri benzeri bir ChatBot uygulaması hazırlayabilirsiniz.

Ek Gereksinimler:

WebRTC ve WebXR konuları için bilgisayarlarda kamera, mikrofon ve hoparlör bulunmalıdır.

Kuantum Bilgisayar
DWaveSys’e GitHub hesabıyla kaydolduğunuzda ayda 1 dk kadar ücretsiz Kuantum İşlemci kullanmanıza izin veriyor. Python kullanıyorsunuz ve Api ile Kuantum işlemcide işlem yapıp sonuç alabiliyorsunuz. Bu hizmetten eğitimlerde faydalanılabilir. IBM’de de benzeri hizmet var diye tahmin ediyorum.

Neden Angular?

React ve Vue’nun daha popüler olduğunu, özellikle Vue’nun daha çok tercih edilmeye başlandığını biliyorum. Ancak:
1) Angular ekibi boş durmuyor, Angular’ın performansını artırmaya yönelik çalışıyorlar.
2) Angular ile all-in-one çözümler daha kolay.
3) Angular’da HTML, SCSS, ve TS dosyaları tamamen ayrıştırılmış durumda.
4) MEAN uygulamaları yaygın.
5) Arkasında Google var ve daha güvenli.

Buna karşın üç önemli dezavantaj var:
1) Angular hatalı işlem yaparsanız yavaş; mesela html’de döngülerde fonksiyon kullanırsanız, istemci işlemcisine ve ramine fena yüklenen uygulamalara neden olabilirsiniz.
2) Angular demode oluyor havası var. Gerekçe olarak backward-compatibility sorunlarını öne sürüyorlar.
3) Angular’da SSR işi çok zor. Yani web siteniz SEO uyumlu olmuyor ve bunu çözmekte hayli zorlandım hatta çözemedim.

Buna karşın Themeforest’taki temalarda ve sektörde büyük projelerde Angular’ın tercih edildiğini gözlemlemeniz mümkün, çünkü arkasında Google var, bence bu iyi bir sebep.

Neden Flutter?
Her ne kadar React Native’de Mac OS X’e gerek olmadan uygulamayı geliştirmeye ek olarak expo ile iPhone’a uygulamayı aktarıp test etmek daha kolay olsa da, Flutter’ın kısa zamanda React Native kadar popüler olduğunu göz önüne alarak nihai karar olarak Flutter’da karar kıldım.

GoLang için biraz erken, devir Python devri

Yapay Zeka ve Big Data denildiğinde genelde akla Python geliyor şu sıralarda. Ancak bilmenizi isterim ki Python yavaş ve çok eski bir dil, bundan dolayı yakın gelecekte yüksek performanslı GoLang’e geçeceğimizi gözlemlemeniz mümkün.

Neden Firebase?
Firebase en hızlı ve en güçlü No-SQL, Mobil ve Yapay Zeka altyapısının backendini sağlıyor. Alternatifi olan Parse projesi Facebook tarafından kapatıldı ve popüleritesini kaybediyor. Ancak bir sorunumuz var: Google’ın Firebase’in ucuz bir on-premise çözümünü sağlaması lazım ki yurtiçi bulutlara yükleyip kullanabilelim. Firebase’in on-premise alternatifi MongoDB’dir.

DevOps:

GitHub/GitLab, CI/CD hizmetleri genel olarak ücretsizdir, eğitimlerde kullanabilirsiniz.

Daha ayrıntılı eğitim müfredatı önerileri:

1) WEB YAZILIM EĞİTİMİ (100 GÜN):

  1. Angular: HelloWorld, CRUD, WebRTC, WebXR, Notifications (25 gün)
  2. Geliştirim Ortamı: Visual Studio Code ve GitHub/GitLab (1 gün)
  3. Backend: NodeJS, JavaScript/TypeScript, OOP, KVVK’lı Üyelik Sistemi, Express, Socket.io (25 gün)
  4. DB: Sqlite, MongoDB, Firebase (25 gün)
  5. Bulut: AWS, Azure, Google Cloud, Yerli Bulutlar (6 gün)
  6. DevOps ile Proje Geliştirimi ve Yayınlama (15 gün)
  7. Test ve Güvenlik (3 gün)

2) MOBİL YAZILIM EĞİTİMİ (100 GÜN):

1. Flutter (25 gün)
2. Android Studio/Visual Studio Code ve GitHub/GitLab (1 gün)
3. KVVK’li Üyelik, FaceID, VoiceID, Speech Recognition, TTS, Notifications (10 gün)
4. AR, VR (10 gün)
5. Python Backend ve Restful Servisler ve KVKK’lı üyelik sistemi (15 gün)
6. MongoDB, Firebase (15 gün)
8. Erişilebilirlik (1 gün)
9. DevOps ile Proje Geliştirimi ve Yayınlama (15 gün)
10. Test ve Güvenlik (3 gün)

Neden Bitcoin’e karşıyım?
Bitcoin ve Satoshi Nakamoto önemli bir buluş yaptı. Fakat Bitcoin kuantum bilgisayarlara dirençli değil ve güncellenemiyor. O bu işin deneme sürümüydü ancak artık güvenli sayılmaz, yani artış ve düşüşler sahte olabilir, o yüzden artık Diem (move), Ethereum 2.0 (solidity) ve HyperLedger Fabric (golang) gibi yeni sürüm kuantum bilgisayarlara dirençli blockchain teknolojilerine odaklanılması gerekmektedir.

KVKK’lı Üyelik Ne Demek?

  1. Veritabanında Kullanıcılar tablosunda Şifre alanı Post-Kuantum Güvenlik Algoritması ile tek yönlü hashlenerek kaydedilmelidir.
  2. Veritabanındaki kişisel veriler post-kuantum güvenlik algoritmaları ile encyrpt edilerek saklanmalıdır.
  3. Üyelik sisteminde ORM üzerinden (veya DB seviyesinde) mutlaka AuditLog olmalıdır. Logların güvenliği sağlanmalıdır.
  4. Kullanıcıların kişisel verileri yönetim panelinde açıkça olmamalı, sadece yetkisi olan kullanıcıların görebileceği şekilde gizli olmalıdır.
  5. Kullanıcıların kişisel verilerinin hangi tarihte (zaman-pulu) hangi amaçla erişildiğinin ve işlendiğinin loglarının tutulması iyi olur.
  6. Güvenlik için iki-faktörlü kimlik doğrulaması yapılmalıdır. SMS yerine Authenticator tavsiye edilmektedir.
  7. SSL kullanılmalıdır. (Let’s Encrypt ücretsiz SSL sağlamaktadır.)
  8. Veritabanı komple encrypt edilerek diske kaydedilmelidir. (Veritabanı yazılımlarının bu tür özellikleri bulunuyor).
  9. İstemci tarafında hassas veri kaydedilmemelidir.
  10. Şifrelerin güçlü olması ve zamanla değiştirilmesi sağlanmalıdır.
  11. Issuer ve Audience (JWT) kontrolleri yapılmalıdır.
  12. Google seviyesinde güvenlik hedeflenmelidir.