Haber

BitCoin Kaç Lira

Kripto Paralar ve arkasında geliştirilen Blok Zinciri teknolojisi uzunca bir süre (bence bundan sonra hep) konuşulacağa benziyor. Ben, bitcoin ve diğer kripto paraları alıp satıp nasıl kar ederiz yerine blok zinciri teknolojisini başka hangi alanlarda kullanabiliriz onu düşünmeyi tercih ediyorum. Çevreden gelen “bitcoin alım satım yazısı yaz” baskılarına şimdilik direnmeye çalışıyorum. Ama olayı tam olarak anlamak için de biraz alım satım yapmanın gerekli olduğuna inandım. Bu yüzden çok küçük bir miktar alım yaptım. Ama üzgünüm bu yazı o yazı değil. Yani şimdi bitcoin nasıl alınır yazısı yazmayacağım. Onun yerine bitcoin sahiplerinin en çok yaptığı şeye (bitcoin kaçlira oldu ve benim bitcoinlerimin değeri ne oldu) getirdiğim çözümümü anlatacağım.

Daha önce ev otomasyonları ve Türkçe Anlayan Yapay Zeka çalışmalarımda geliştirdiğim ve telegram bot kullanarak bitcoin fiyatını ve benim bitcoinlerimin değerinin ne olduğunu gösteren, sorularıma cevap veren bir chat bot uygulaması anlatacağım. Nasıl bir sonuç verdiğini aşağıdaki videodan izleyebilirsiniz.

 

 

telegram bot bitcoin price

 

Kullanmayanlar için şidletle tavsiye ediyorum: node-red öğrenin ve kullanın. IBM destekli ve arkasında Google’ın node js i var olan, kafanızdakileri hızlıca hayata geçirebileceğiniz bir geliştirme aracı.

Temel olarak sistem şöyle çalışıyor: Telegram bot dan bir mesaj gönderdiğinizde bizim uygulama bunu alıp değerlendiriyor. Gelen mesajı temizleyip komutun ne olduğunu bulduğunuzda, eğer ilgili komut sizin listenizde ise bununla ilgili fonksiyon çalıştırılıyor. Bazı mevcut API ler kullanılarak bitcoinin o anki fiyat bilgisi ve sizin cuzdanınızdaki bitcoinlerin o anki parasal değeri gösteriliyor.

İleride bazı EMA göstergeleri ve eğilimlerini değerlendirerek bitcoin almalı mı yoksa satmalı mı sorularına cevap verecek bir ilave yapmak istiyorum. Bir baska ilave de diğer tüm altcoinlerin bilgilerini de sunacak şekilde sistemi geliştirmek.

Konu üzerinde çalışmak isteyenler yorum kısmından iletişime gecebilirler.

Haber

Blok Zinciri

Blok-Zinciri; bitcoin olarak adlandırılan kripto para teknolojisinin arkasındaki temel kuramdır. Sanal, güvenli ve merkezi bir otorite tarafından yönetilmeyen bir para biriminin el değiştirme kaydının tutulması için tasarlanmıştır. Arkasındaki emsalsiz teknoloji, sanal para başta olmak üzere daha bir çok alanda çığır açmaya adaydır. Burada blok-zinciri teknolojisinin anlaşılır bir şekilde ifade edildiği Türkçe bir kaynak yazmak amaçlanmıştır.

Temel Kavramlar

Aslında basit bir işleyişi olan blok-zinciri, temel kavramların bilinmemesi nedeni ile anlaşılması zor bir hale bürünmektedir. Bu nedenle temel kavramların neler olduğunu başta sıralayıp daha sonra yeri geldikçe bu teknolojilerin nasıl birleşerek blok zincirine hizmet ettiğini göstermeye çalışalım.

  • Sayısal imza (Digital Signature)
    • Açık ve gizli anahtar şifreleme (Public Private Key Encription)
  • Hash fonksiyonu
  • Büyük defter (Ladger)
  • Uçtan uca iletişim (Peer to Peer Networking)
    • Dağıtık mimariler (Decenterilized Arcitecture)
  • Proof of Work (İş Kanıtı)

Bu temel kavramlardan bazılarına şimdi bazılarına da yazının ilerleyen bölümlerinde deyinmeye çalışacağım.

Kriptografik Hash Fonksiyonu

Herhangi bir uzunlukta bir veriyi alıp sabit uzunlukta bir özet bilgi üreten hash fonksiyonu temelde üç ana unsuru içinde barındırır. Bunlardan ilki, geri dönüştürülememe özelliğidir. Yani, bir hash çıktısına bakarak fonksiyonun girdisi olan veri tahmin edilemez olmalıdır. Bir diğer özellik ise, girdi verisinde olan ufak bir değişikliğin bile hash sonucu üretilen bilgide çok fazla değişiklik olarak gösterilmesidir. Üçüncü özellik ise farklı veri setlerinden aynı hash bilgisi üretilme olasılığının çok düşük olmasıdır. Sonuç olarak Dijital imza ve block-zinciri işlemlerinde çok fazla kullanılan bu fonksiyon, verilen bir bilginin belirli uzunluktaki özetini üretir. Aynı veri için her zaman aynı Hash özeti oluşturulur. Bitcoinde kullanılan hash fonksiyonu sha256 olup, üretilen özetin uzunluğu girdi verisinden bağımsız olarak her zaman 256 bit uzunlukta olur.

Örnek:

SHA256(“Selam Dünya”) =

540bbddfcbf316188821239130dcd40a0efdf4c92cfae5775a2e0f5d8ba2ffc5

SHA256(“Selam Tünya”) =

d2446caf29b55a0aa8ed2a7944cca74822b5f80627868599f30c8d40d90670f1

Uçtan uca iletişim ağ yapısı (Peer to peer networking)

Client Server mimarisinin aksine, uçtan uca iletişim ağ yapısında her bir bilgisayar bir birine bağlantı kurmaktadır. Tüm kullanıcıların bağlandığı bir sunucu sistemi mevcut değildir. Merkezi bir yönetim yoktur ve herhangi bir bilgisayarın kapatılması sistemin işleyişini engellemez. Tüm bilgisayarlar networkte eşit işlem görürler. (Ağ yapısı kurgusuna göre bazı özel düğümler özel işlemler gerçekleştirebilirler)

BitCoin

2008 yılında Satoshi Nakamoto isminde biri yada birileri tarafından sekiz sayfalık bir makale yayınlandı. “Bitcoin: A Peer-to-Peer Electronic Cash System” orjinal başlığındaki makalede bitcoin teknolojisi ayrıntılı olarak anlatılmaktaydı. Kimse Satoshi Nakamoto’nun kim olduğunu bilmiyor. Bir grup mu yoksa hükümet destekli daha büyük bir proje mi? Asıl ilginç olan, böylesine akıl dolu bir sistemi tasarlayan birisinin ünlü olmak varken saklanmayı tercih etmesi. Gizemli olmanın olayın populerliğine katkı sağladığı açık.

Sistem tasarlanırken aslında en önemli amaç, bir merkez yada hükümet tarafından yönetilmeyen bir yapı kurmak. Aynı zamanda güvenilir de olmalı. Birazdan zekasına sizin de hayran kalacağınız bu insan, bu iki özelliği bir para sistemine dönüştürmek için aslında zaten bilinen ve yukarıda bahsettiğim temel kavramları kullanmış. Peki ama nasıl?

Mevcut para birimleri ve buna bağlı ödeme sistemi, bir devlet tarafından onaylanmış bir para ve el değiştirme kayıtlarının tutulduğu bir banka ile yürütülmektedir. Bir kağıt üzerine yazılan sayılar ile takası ortadan kaldırarak insanlığın ticaret yapmasını mümkün kılan para, değerli ve geçerli olduğu sürece anlamlıdır. Bunun sağlanması için ülke ekonomileri var gücü ile çalışır. Ama günün birinde bir dahi çıkıp merkezi bir otoriteye bağlı olmadan işleyecek bir para sistemini sadece sekiz sayfada tarif ediveriyor. Ve bu para birimi kabul görüyor ve hızla değerleniyor.

Bankalarda kimin hesabında kaç lira oldugu tutulur. Birine havale yaptığınızda havale miktarı kadar tutar sizin hesabınızdan düşer ve karşı tarafın hesabı havale miktarı kadar arttırılır. Kısacası bankalar kimde kaç para olduğunu ve kimin kime kaç lira gönderdiğinin kaydını tutarlar.

Bitcoinde de mantık aynıdır. Yalnız merkezi bir banka olmadığı için kayıtlar bitcoin kullanan herkezin bilgisayarında tutulur. Bu kayıt defterine ledger denir ve sistem gereği herkeste bulunan defter kaydı birbirinin aynısıdır. Bu defterin içerisinde tüm bitcoin kullanıcılarının gerçekleştirdiği hesap hareketleri vardır. Tek bir merkezde tutmak yerine kayıtların bire bir aynı kopyasını tüm kullanıcılarda tutmak; işte bu kadar basit! Herkes bir melek olsaydı gerçekten bu kadar basit olabilirdi. Zaten bankalar kimse kimseye güvenemediği için var. Sistemin arkasında yatan teknoloji tam da bu güveni sağlıyor. Kimin kime ne kadar para gönderdiği, bir zincir misali bir biri ardına kayıt defterine yazılıyor. Teknolojik olan ise, zincirin yeni halkasını oluştururken bu halkayı bir önceki bilgi ile ilişkilendiriyor olmanız. Böylece zincirin herhangi bir halkasında bir değişiklik yapılırsa tüm zincirler bundan etkileniyor ve değişiyor. Kendi bilgisayarınızda yaptığınız bu değişiklik (sahtekarlık) diğer kullanıcıların defterleri ile tutarlılık göstermeyeceği için kısa sürede sizin verinizin gecersiz ve hatalı olduğu sistem tarafından algılanıyor ve verileriniz gözardı ediliyor.

Örneklerle biraz daha teknik bir şekilde anlatmaya başlayalım. Bitcoin kullanıcılarının bir birleri ile ticaret yapıp aldıkları bir mal karşılığında bitcoin ödediklerini düşünelim. Ali Ahmet’ten araba almış olsun ve karşılığında 2 bitcoin ödesin. Yani Ali Ahmet’e 2 Bitcoin verdi. Bu kaydın büyük deftere işlenmesi gerekli.

Bu işlemin deftere yazılması için öncelikle bu ödemenin gerçekten Ali tarafından yapıldığının garanti altına alınması gerekli. Bankada bunu yaparken işlem kağıdına imzanızı alırlar. Aynı mantıkla burada da devreye dijital imza girmekte ve işlemler, işlemi yapan tarafından dijital olarak imzalanmaktadır.

Dijital imza normal imzadan daha fazla özellik içermektedir. Bir belgeyi dijital olarak imzalamak için 2 anahtara ihtiyaç duyulur. Bu anahtarlar açık ve gizli anahtarlar olarak ifade edilir (Public Private Key). Bu anahtar çifti asal sayılar kullanılarak oluşturulur ve bir birleri ile özel bir kriptografik ilişki içerirler. Bu anahtarları oluşturan yazılımlara kolaylıkla internet üzerinden ulaşabilirsiniz. Internet üzerindeki günümüz işlemleri (webden alışveriş yada bankacılık gibi) bu altyapı kullanılarak yapılır. Bir bankanın web sitesine bağlandığınızda bağlandığınız yerin gerçekten o banka olduğundan emin olmanız için banka ile aranızda geçen iletişimde kullanılan bilgiler hep bu teknoloji ile şifrelenir. Nasıl çalıştığına dijital imza çerçevesinden bakalım.

Dijital imzanın en önemli özelliği hem imzalayanın kim olduğunu göstermesi, hem de imzaladığınız belgenin değiştirilmediğinden karşı tarafın emin olmasını sağlamasıdır. Yani siz bir datayı (belgeyi) imzaladıktan sonra birisi bu data ile oynar ve değiştirirse imza bütünlüğü bozulur.

Aşağıdaki grafiktede gösterildiği gibi siz mesajı ya da belgeyi gizli anahtarınızla bir fonksiyona soktuğunuzda bir dijital imza elde edersiniz. Mesajı ve imzanızı bir başkasına gönderdiğinizde o kişi bu bilginin tam ve değiştirilmemiş olduğundan emin olmak için mesajı ve imzanızı alıp sizin açık anahtarınızla bir fonksiyona sokar. Eğer imza sizin ve mesaj değiştirilmemiş ise fonksiyon, doğru sonucu döndürür. İmza sizin değil yada mesaj oynanmış ise fonksiyon, yanlış bir sonuç döndürür.

 

 

Foksiyon olarak tanımlarsak;

Imzala(mesaj,gizli anahtar) = Dijital imza

Doğrula(mesaj,dijital imza,açık anahtar) = Doğru/Yanlış

Burada bu sistemin nasıl işlediğini ve matematiksel olarak bunun nasıl yapıldığını anlatmayacağım. Ama akıllarda tutulması gereken, birinin gizli anahtarına sahip değilseniz ve onun imzasını belirli bir mesaj için taklit etmek isterseniz, tek yapacağınız bir dijital imza uydurup mesajı ve imzayı bir doğrulama fonksiyonuna sokmanız. Bunu defalarca yapıp olup olmadığına bakmak gerçekten zordur ve büyük bir bilgisayar işlem gücü gerektirir. Ne kadar zor diyenler için; 256 bitlik bir dijital imzayı 2 üzeri 256 kere denemeniz gerekir. (En kötü durumda bu sayı geçerlidir ama belki şansınız yaver gider ve daha önce tutturursunuz)

Bitcoin’e dönersek; Mesaj ve imza bir biriyle uyumlu ve siz büyük deftere bu kaydı girdiniz. Ali Ahmet’e 2 bitcoin verdi ve bu Ali tarafından imzalandı. Bu bilgi seti artık herkesin elinde var. Ödemenin birden çok kez yapılmaması gerekir. Birileri bu şifrelenmiş ve doğru bilgiyi tekrar tekrar deftere yazarsa Ali Ahmet’e sürekli ödeme yapmış olur. Bunu engellemek için mesaj içerisinde eşsiz bir sıra numarası bulunur ve bunu ödemenin yapıldığı anki zaman bilgisi ile türetebilirsiniz. Böylece her bir işlem eşsiz hale getirilir.

Önemli bir bilgi de, Ali’nin Ahmet’e verecek 2 bitcoin’inin var olduğundan emin olunmasıdır. Olmayan bir paranın ödenmemesi için tüm işlemler zincirde kayıt altında tutulur. Zincirde geriye doğru olarak Ali’nin en baştaki parası ve sıra ile ödediği ve aldığı sanal paraların hepsi kayıtlıdır. Böylece bir t anında Ali’nin parasının olup olmadığı bilinir.

Daha önce, yapılan tüm işlemlerin herkeste bulunan ve aynı olan bir deftere yazıldığını söylemiştik. Bir işlem yapıldığında işlemi gerçekleştiren bunu networkte yayınlar ve herkes bu işlemi defterine yazar. Peki herkes bu bilgiden haberdar olmazsa (o an bilgisayarı kapalı olabilir) ya da aldığı bilgileri aynı sırada deftere yazmazsa? O zaman defterler bir biri ile aynı olmaz ve sistem doğru işlemez. İşte bunu sağlayan teknoloji bence bu işin en akıl dolu kısmı.

Sekiz sayfalık bitcoin dokumanında da bahsedilen ve tüm dataların aynı olmasını sağlayan kavram Proof of Work olarak adlandırılır. Bu ortak karara varma (Consensus) kavramı temel olarak en uzun zincir baz alınarak sağlanır. Zincire bir halka takmak yani gerçekleşen transfer işlemlerinin kaydının zincire eklenmesi için bilgisayarların hemen kolayca başaramayacağı bir yöntem uydurulmuştur. Zincire kayıtların şifrenelerek eklenmesine mining deniliyor. Bu hesabı ilk olarak doğru yapana da bir ödül var. Sistem kendi kendine ayakta kalsın diye zinciri dokuyanlar ödüllendiriliyor. Madenciler temelde şu işlemi gerçekleştiriyor.

Ödeme kayıtlarını bir biri altına yazdınız. Belli bir adete ulaşınca bir zincir halkası (blok) yapmaya karar veriyorsunuz. (1 blok büyüklüğü 1MB) Bunun için işlemlerin sonuna öyle bir sayı (nonce) uydurmanız ve eklemeniz gerekli ki tüm ödeme bilgilerini ve bu sayıyı SHA256 dan geçirince SHA256 özetinin ilk 30 biti 0 lardan oluşsun.

 

 

Bu sizce ne kadar zor olabilir? Herhangi bir mesajın başında 30 sıfırlı bir SHA256 özeti bulmak milyarda bir ihtimal olarak hesaplanıyor. (1/2^30) Bu sayıyı bulmanın tek yolu deneyerek görmektir. Sistemin böylesine bir kural koymasının sebebi, bu işlemin fazladan bir bilgisayar gücü gerektirmesini sağlamak ve bu nedenle de kolaylıkla sahtekarlık yapılmasını önlemektir. Kayıtlarda küçük bir değişiklik yapsanız bile hash özetini bozacaksınız. O zaman tekrar başında 30 sıfır olan yeni bir hash yakalamanız gerekecek.

İşte bu bilgisayar iş yüküne proof of work deniliyor. Zincire her bir halkayı eklemek için böylesine bir işlem gücü gerekli. Şimdi biraz toparlayalım.

Elinizde kimin kime para gönderdiğini tutduğunuz bir liste var. Her bir gönderi, işlemin gerçekten o kişi tarafından yapılmış olduğundan emin olmanız için kişi tarafından dijital olarak imzalanmış. Bu gönderiler alt alta yazılıyor ve büyüklüğü 1 MB olunca (Her blokta yaklaşık 2400 transaction vardır) sonuna öylesine bir sayı ekliyorsunuz ki SHA256 sonucunun ilk 30 biti sıfır oluyor (Proof of work). Bunu bulduğunuzda blok hazır. Yalnız, blokların bir birine bağlanması için de her bir bloğun başında bir önceki bloktan türetilen bu 30 sıfırlı hash özeti yazılmış olmalı. Grafik daha iyi anlatacaktır.

 

 

İşte blok zinciri oluşturuldu. Hehangi bir blokta küçükte olsa bir değişiklik yaptıysanız yada blokların yerini değiştirdiğinizde SHA256 imzaları bozulacak ve bu imza bir sonraki zincirde bulunduğu için sonrasında gelen bütün zincirleri bozacaktır.

 

 

 

Bir Blok yapısında var olan veriler

Neden bilinçli olarak bilgisayarın hesaplamakta zorlanacağı bir sistem kurgulansın ki diye düşünenlere, “sahteciliği önlemek için.” diye cevap vermiş olalım. Zincirin herhangi bir halkasında bir transferde sahtecilik yaparak değişiklik gerçekleştiren birisi zincirin geri kalan tüm halkalarının yapısını bozmuş olur ve tekrar bütün zincirleri hesaplamak zorunda kalır. Bu arada diğer taraftan yeni halkalar sürekli zincire eklenmektedir. Bozulan yapıyı onarıp mevcut yere gelmek için çok yüksek bir bilgisayar gücü gereklidir. (Networkün %51 den daha çok kısmı bir kişi tarafından yönlendirilebiliyorsa bu belki mümkün olabilir) Dağıtık mimaride binlerce hatta milyonlarca madenci ile yarışmak mümkün olamayacağı için sahtekarlık önlenmiş olur. Zincire en uzun halkanın takıldığı kullanıcı, ortaya koyduğu en fazla işlem gücü nedeni ile baz alınır. Diğer düğümler de bu zinciri kopyalar. İşte en fazla işlem gücünü ortaya koyanın sözünün geçtiği bu yapıya proof of work denilir.

Proof of work dışında elinde en fazla kripto parayı bulunduranın sözünün geçtiği kripto paralar da vardır. Buna da Proof of Stake denilmektedir. Bu consensus sağlanma mekanizması, bitcoin ve diğer kripto paraların en can alıcı noktasını oluşturmaktadır.

Buraya kadar sabredip okuyanlara teşekkür ediyorum. Daha değinilmeyen bir çok konu olsa da umarım size genel olarak blok zinciri nedir ve bitcoin nasıl işliyor anlatabilmişimdir.

Konuyla ilgili olanlar ve fikirlerini paylaşmak isteyenler lütfen aşağıdaki Yorum kısmını kullanın.

Güzel Linkler:

https://www.youtube.com/watch?v=bBC-nXj3Ng4&t=712s

http://chimera.labs.oreilly.com/books/1234000001802/index.html

 

 

Haber

3D Baskı Hizmeti İçin Online Fiyat Hesaplama

Üretim yöntemlerindeki hızlı gelişmeler 3D yazıcıların seri üretimde de kullanımlarının artacağını ve 3D yazıcı çifliklerinin giderek yaygınlaşacağını göstermektedir. Bizde böyle bir sistemi yönetmek ve Online sipariş alabilmek için bir web sitesi geliştirmeğe karar verdik.
Bu projenin amacı 3D print hizmeti veren bir işletme için online sipariş alma ve anında fiyat verme işlerini yürütecek digital alt yapının hazırlanmasıdır.

Proje büyümeğe açık ve başka üretim yöntemlerini de kapsayacak şekilde API’ler geliştirilerek tasarlanmıştır. Kullanıcı arayüzü işlemleri için PHP Laravel MySQL kullanılmış, zaman alan ve response süresinin geciktiği durumları yönetebilmek için (bütük dosya transferleri ve büyük STL dosyalarında fiyat hesaplanması gibi) JQuery ile çözüme ulaşılmıştır. STL dosyasının resminin çekilmesi ve fiyat hesaplaması için 3D objenin dilimlenmesi gibi asıl teknik hesaplamaların yapıldığı kısımlarda API bazlı NodeJs uygulamaları geliştirilmiştir.
Sistem STL dosyasının hacim yada ağırlığının bulunması ile fiyat hesaplaması yapmamaktadır. Mevcut çözümlerin çoğunda bu yöntem kullanılmakta fakat doğru sonuçlar alınamamaktadır. Bizim sistemimizin en önemli özelliği 3D model 3D printer için hazırlanırken kullanılan dilimleme algoritmalarının çekirdek kısımlarını kullanıp gerçekten bu obje basılması durumunda ne uzunlukta filament kullanılacağını ve nekadar süre gerektiğini bulup buradan bir fiyat hesaplamasına gitmesidir. Bunu NodeJS serverı üzerinde CuraEngine kulanarak gerçekleştirdik.
Sistem şu anda FDM 3D printerlar ile hizmet veren işletmeler için hazırlanmış olsa da API bazlı sistem mimarisi sayesinde ileride CNC işleme, lazer kesim ve diğer 3D baskı methotları kullanılarak gerçekleştirilen üretim hizmetleri için de online fiyat hesaplamaları yapabilecektir.
Sistem içerisine, müşterinin, hizmet veren ile iletişim kurabileceği bir ticket sistemi eklenmiştir. Bu sayede müşteri soru sorabilecek yada hatalı ve basımı mümkün olmayan parçaları sisteme gönderdiğinde hizmet veren de bu kanaldan kendisini doğru tasarıma yönlendirebilecektir. Aynı altyapı, sisteme yeni bir model yüklendiğinde yada yeni sipariş geldiğinde eposta ile hizmet vereni bilgilendirmekte, hizmetveren de (admin) gelen işleri yada soruları kendi ekibindeki arkadaşlarına yönlendirebilmektedir.
Tamamen kendi yazılımlarımızla ve Türkçe olarak geliştirdiğimiz sistemi kullanmak isteyenler bizimle iletişime geçebilirler. nerginer@gnexlab.com
Haber

Bu Stres Çarkı ile Kodlama Öğrenin

Uzun süreden beri genç nesile kodlamayı eğlenceli bir şekilde öğretmenin yollarını düşünüyorum. Hepimiz, kodlamayı öğrenmenin çok önemli olduğunu biliyoruz, ancak bu iş o kadar da kolay olmuyor. Zaman alan bu süreç gençlerin daha işin başında vazgeçip başarısız olmalarına neden oluyor. Devam etmek için ilginç bir şeye ihtiyacınız var. Defalarca başarızız olsanız bile vaz geçmemeli arka arkaya gelen başarısızlıklardan yılmamanız önemli. Bu nedenle sizi vazgeçmeden denemeye teşvik eden bir motivasyon geri bildirim mekanizmasına ihtiyacınız var.

Tüm bunları düşünürken aniden aklıma stres çarkları geldi. Bu alete sadece genç neslin değil, aynı zamanda yetişkinlerin de ilgisinin büyük olduğunu fark ettim. Bu oyuncak başlangıçta otistik ve dikkat eksikliği olan çocukları hedef alıyormuş ancak satış istatistikleri bize işin böyle olmadığını gösteriyor. Oyuncak mağazaları ve online satışlar talebi karşılamaya yetişemiyorlar. Sanki yılbaşı zamanıymış gibi insanlar çılgınca bu aletlerden satın alıyor. Bu cihazın genç insanların kalbine girdiği kesin bir gerçek.
Bende bu fırsatı değerlendirip en çok sevdiğim iki şeyi Arduino ile Stres Çarkını birleştirmeye karar verdim. Bu tasarım aslında RGB LED’ler, stres çarkı ve Arduino’yu bir araya getirmekten başka birşey değil. Tüm bunları birleştirdim ve ortaya bu çıktı:

Lightino fidget spinner

En popüler olan üç kollu tasarım üzerinden devam ettim. Bir kola pili, bir kola RGB ledleri, diğer kola da Arduino’yu koydum. Ortada diğer tüm stres çarklarında da vazgeçilmez olan kaliteli ve uzun dönme süresini garantileyen iyi bir rulman bulunuyor.

Benim için bu oyuncağın en önemli kısmı USB bağlantısıdır. Yeni bir ışık şovu deseni elde etmek için arduinoyu usb den programlıyorsunuz. Bu işlevselliği onu diğerlerinden ayıran en önemli özelliği. Sıradan bir stres çarkına sahip olmak ve onu çevirmek, birkaç dakika içinde sıkılmanıza neden oluyor. Yeniden programlanabilme yeteneğine sahip olması Lightino’ya bence çok şey katıyor. (Bu arada çihazın adı: Lightino)

Lightino’nun arkasındaki asıl düşünce, öğretmenler ve öğrencilerin bir arada deniyerek öğrenmelerini sağlayan programlama, mekanik ve elektronik içeren, yenilikçi bir öğrenme deneyimi oluşturmak ve bu işe yarayan uygun maliyetli bir araç tasrlamakdı.

 

Umarım bu alet çocuklarınız için iyi bir STEAM (Bilim, Teknoloji, Mühendislik, Sanat ve Matematik) eğitim aracı olacaktır. Gnexlab’da iyi dokumante edilmiş dersler ve kod örnekleri vermeye çalışacağım. Her zaman olduğu gibi, bu aygıtla ilgili tüm donanım ve yazılımlar açık kaynak olacak. Harika gnexlab topluluğun yardımıyla, bu araç genç kuşağın dikkatini çekebilir ve onları kodlamayı öğrenmeye motive edebilir.

Bu cihaza ilk siz sahip olmak isterseniz, aşağıya yorum bıakarak talepte bulunabilirsiniz. Ya da bana bir mail atmanız yeterli olacaktır. nerginer@gnexlab.com

Haber

Türkçe Anlayan Yapay Zeka (Şimdi Siri, Alexa Düşünsün)

Bu yazida bazı web servislerini kullanarak nasıl Türkçe komutları anlayan bir yapay zeka sistemi kurabileceğimizi ve akıllı ev sistemimize bunu nasıl entegre edebileceğimizi göstermeye çalışacağım.

 

Birden bire bazı servisleri ve teknolojileri beraber kullanmak fikri beliriveriyor kafamda. Ondan sonrada denemeden rahat edemiyorum. İşte koca bir pazarımı alıp götüren ama sonra hoşuma giden çalışmamı sizlerle paylaşıyorum. En son Mark Zukerberk’in evi için yaptığı çalışmayı görünce benzerini hangi teknolojilerle yapabilirim diye düşündüm. En hoşuma giden kısmı her zaman yanımızda olan cep telefonu ile akıllı evi ile konuşması oldu. Bir önceki yazımı okuduysanız bunun temellerini size anlatmıştım. Telegram Bot bu işte benim konuşmalarımı alıp akıllı ev komutlarını anlayacak olan sisteme yönlendirecekti. Telegram Bot tam bir geliştirici dostu kurcalamanızı tavsiye ederim. Bundan sonraki adım Türkçe komutları, cümleleri alıp bir yapay zeka servisine göndermek ve orada işlemek olacak. Gördüğünüz gibi aslında yoğun geliştirme ve kodlama yerine mevcut sistemleri bir biri ile entegre ediyorum. Sakın burdan kod yazmayın zaten herşey var alın kullanın anlaşılmasın. Aksine siz de başkalarına hizmet verecek güzel yazılımlar geliştirin ve hizmete sunun. Bugun malesef yabancı marka telefon, araba veya bilgisayar kullandığımız gibi yarın da yabancı yazılım servislerini kullanıyor olacağız. O nedenle şimdiden yerli servisler ve API lar yazalım hizmete açalım.

Sistemin ana akışını çizersem daha anlaşılır olacak sanırım. Aşağıdaki resimde sistem ana bileşenleri ve akış yönü görülebilir

gnexlab_telegram_wit

Birbirinden farklı sistemleri bir arada çalıştırırken en zor kısım, bir sistemin ürettiği datayı diğer sistemin anlayacağı data yapısına dönüştürmek oluyor. Burada da birden çok sefer data yapısını değiştiriyor ve hatta ses dosyası formatını bile on the fly mpeg den wav’a çeviriyoruz.  Çevirme işlemi diyince tabiki biraz kod devreye giriyor. Onu da Wit servisinden biraz bahsettikten sonra anlatacağım.

Wit.ai

Wit.ai aslında doğal dil işleme servisi. Facebook tarafından satın alındı. Birçok programlama dilini destekliyor ve bedava. Aslında neredeyse tüm firmalar yapay zeka servislerini bedava yapıyorlar. Milyon dolarlar harcanan bu servisleri neden bedava kullandırıyorlar derseniz? Bence nedeni bizi bu yapay zekaları eğitmekte kullanıyorlar. Yapay zeka algaritmalarının çok büyük ve doğru veri setleri ile eğitlesi gerekiyor. Bu hizmetler şimdilik kullanıcılara bedava kullandırılıp algoritmalar mükemmelleştiriliyor. Bundan 10 sene önce aslında başta IBM ve diğer büyük bilişim firmaları yapay zeka algoritmalarını eğitmeye başladı. 10 yıl sonrada bu algoritmaların çok güçlü olacağını ve başta savunma ve medikal olmak üzere bir çok alanda kullanılacaklarını tahmin etmek zor değil. Biz 10 yıl sonra kendi yapay zeka yazılımlarımızı eğitmeye başlasak onlarınki bizden 20 yıl daha eğitimli olacak. Bazı önemli ve kırılım yaratacak teknolojilerden devlet büyüklerimizi haberdar etmeli ve bu alanlara milli yatırımlar yapılması gerektiğini anlatmalıyız. Wit.ai den başka herşeyden bahsettim galiba 🙂 Siz en iyisi açıp bakın. Türçe ses dosyasını Türkçe yazıya dönüştürmede oldukça iyi Wit.ai. Ses yazıya dönüştürüldükten sonra da sizin temel kurallarını koyduğunuz bir doğal dil işleme sistemi ile komut ve cümleler sistem tarafından yourumlanıyor ve belli program bloklarını çalıştırabiliyor. Yanlız sakın burada akıllı bir yapay zeka var sanmayın. Wit’in size sunduğu sadece dil işleme fonksiyonları bir akıl katacaksanız siz her bir olası komutu düşünüp verilmesi gereken cevabı sisteme tanıtmalısınız. Meraklı arkadaşlar ile belki bir Akıllı Ev için gerekli mümkün olduğunca çok komutu tespit edip Wit.ai üzerinde tanımlarız. Artık Bu servisleri birleştiren dataları çeviren ve asıl benim geliştirdiğim yazılım kısmına bakalım. Bunları yapmak için Node-Red Kullandım.

 Nod-Red

IBM’de çalışan bir kaç yazılımcının ortaya çıkardığı bir geliştirme aracı node-red ve kesinlikle öğrenilmesi gerekiyor bence. Bu uygulamadaki az sayıda kodu ben bu platformda geliştirdim. Aslında Node-Red Server tüm servislerin API lerini çağırdığımız ve gerekli dönüşümleri yapan ana yazılımı içeriyor. Node-Red adından da anlaşılacağı gibi google’ın Nodejs Server tarafı javascrpit motoru üzerine geliştirilmiş. Kullanımı son derece basit ve IoT ve akıllı ev uygulamaları için tamda aradığınız şey. Aşağıdaki resim benim tüm bu işleri yapan yazılımının node-red görüntüsü. Her bir kutucuğun içerisinde yazdığım bazı kod satırları var.

gnexlab_node-red_AI

 

Biraz karışık görünebilir ama kolay değil Türkçe komutları anlayan bir Akıllı Ev Sistemi bu. Daha önceki yazılarımda bahsettiğim MQTT haberleşme protokolü de akıllı ev sistemi ile konuşma tanıma sistemi arasında iletişim kurarak komutların Akıllı Ev sisteminde nasıl bir karşılık bulacağı ile ilgili mesajları yönetmektedir.

Sonoff Wifi Röle

Sistemin bir diğer bileşeni de içerisinde hepimizin sevdiği Esp8266 wifi çipi barındıran Itead firmasının Wifi Rölesi. Bu röle 4-5 Dolar fiyatlara satılıyor. İçinde kendi firmware yazılımı olsada bu çipi iyi bildiğimden devre üzerinde belirli pinlere bağlantılar yaparak içerisine kendi firmware yazılımımı yükledim. Artık kendi ev networküme ve kendi MQTT serverıma bağlanıyor. İlginizi Çektiği ise ileriki bir yazıda bunu nasıl yaptığımı daha ayrıntılı olarak anlatabilirim. Aşağıdaki yorumlar kısmına isteklerinizi lütfen yazın. Sonoff’un yazılımıda değiştiğine göre Ses tanıma sisteminden gelen komut eğer açma isteği ise MQTT nin belirli Topiğine on mesajını yayımlıyoruz. Sonoff da bu mesaja subscribe olduğundan on mesajı gelir gelmez röleyi açıyor. Aynı şekilde kapama da benzer şekilde çalışıyor.

sonoff_03

Sonuç

Gelecek Web servislerini bir problemi çözmek için bir araya getirmek ve eksikleri de kendi yazacağınız servislerle tamamlamak üzerine gelişecek diye düşünüyorum. API ve web tabanlı servislerin nasıl kullanıldığı ve buradaki haberleşme protokollerini ve otorizasyon sistemlerini öğrenmek gerek diye düşünüyorum. Başta amazon olmak üzere bir çok büyük bulut hizmeti sunan firmalar serverless sistemleri tanıtıyorlar. Burada büyük bir gelecek olduğunu düşünüyorum.

Sizde gelişmiş bir Akıllı Ev sistemi kurmak yada bu sistemlere dahil olabilecek cihazlar tasarlamak istiyorsanız benimle iletişim kurabilir ortak projelere dahil olabilirsiniz.

Evlerin bile Akıllı olduğu bir çağda yaşıyoruz. Yolunuza hep akıllı insanların çıkması dileği ile…

Haber

Telegram Bot Nasıl Geliştirilir ?

telegram

Yapay zeka ve Derin Öğrenme konularında çok fazla haber ve yıkıcı gelişmeler olduğuna dair rivayetler var. Biraz araştırdığınızda neredeyse tüm büyükler (Google, Microsoft, Facebook ve yıllardır zaten IBM) bu konuya milyon dolarlar doküyorlar. Bunlardan en ilginci Elon Mask’ın Tesla’sı. Kendi kendine giden arabalar için görüntü ve sensorlerden gelen bilgilerin fizyonu konularında çok yoğun olarak yapay zekadan yararlanıyorlar. ABD’de iken Tesla ile bir test sürüşü yapma imkanım olmuştu. Size şöyle söyleyim adamlar arabanın iphone versiyonunu yapmışlar. Araba üzerinde dört yıl LTE ücretsiz internet bağlantısı ile geliyor. O zaman anlayamamıştım ama şimdi bunun nedeninin araba kullanıldıkça kaydedilen görüntü ve verilerin Tesla merkezine transfer edilerek merkezdeki yapay zeka algoritmalarını eğitmek için kullanıldığını anlıyorum. Dikkat ederseniz tüm büyükler yapay zeka yazılımlarını ve servislerini ücretsiz kullandırıyorlar. Bunun nedeni de aynı mümkün olduğunca çok kullanıcı bilgisi ile sistemi eğitebilmek. Yapay Zeka çok fazla veri ile eğitilen sistemler olduğu için firmalar buna muhtaçlar. Gerçi geçenlerde MIT’de internette gezinerek kendini eğitebilen bir yapay zeka yazılımı yapıldığı haberi çıktı.

Bu eğitilmiş zekalar tabiki servis olarak bizlerin hizmetine sunulacak. Şimdilik bedava ilerde daha yeteneklileri para ile en yeteneklileri ise ülkelerin savunma ve güvenlik sistemlerinde kullanılacak. Ülke olarak bizde milli yapay zeka yazılımımızı şimdiden eğitmek zorundayız.

Anlatacak çok şey var ama biraz uygulama yapmaya nedersiniz? Biz Türkler hemen çalışan birşeyler görmek isteriz. Hadi başlayalım.

İlk olarak yapay zeka sistemi ile iletişim kuracağımız bir arayüz gerekli bizim için. Bunun için herzaman yanımızda taşıdığımız akıllı telefondan daha iyi bir araç aklıma gelmiyor. Zaten Apple Siri Microsof Cortana vs yazılımlar telefonlarımızda yerini aldı. Benim anlatacağım sistem biraz daha size ait olacak. Size ait olan bir sistemi geliştirmek ve değiştirmek çok daha kolay oluyor.

Yazılım olarak Telegram denilen bir mesajlaşma yazılımını seçtim. Bu yazılım Whatsapp, Facebook messanger benzeri bir chat programı. Ama bazı güzel yanları var. Hızlı olmasının yanında API arayüzleri sayesinde geliştiriciler için çok güzel imkanlar sunuyor. Ayrıca yazı yazmak yerine ses ile de mesaj gönderebiliyorsunuz. Şuanda sesli Türkçe koutları işleyerek yapay zekalı bir sistemi evde çalıştırıyorum. Nekadarını burda anlatıcam bilmiyorum ama bana çok fazla gelecek kokan bir uygulama oldu gibi geliyor.

Telegram bot sizin bir asistanınız. Ona yazı yada sesle verdiğiniz komutları yerine getiriyor. Tabi hangi komuta nasıl bir tepki vereceğini sisiz programlamanız gerekli. Bunlardan bahsedeceğim. Sizlerde ihtiyaç duyduğunuz yada fikir olarak şöyle bir bot olsa faydalı olurdu dediğiniz konuları aşağıda comment olarak yazın tartışalım.

Telegramı çep telefonunuza kurup gerekli adımları geçiyoruz. Bundan sonra yeni bir bot oluşturmak için tüm botların babası BotFather’ı arayıp (search) chat yapmak için sistemimize ekliyoruz. BotFather’in resmi şu şekilde benzer isimde sahte hesaplar da var onlara kanmayın 🙂

telegram

Bu arkadaşı ekledikten sonra onunla chatleşerek yeni Botumuzu oluşturacağız. Mevcut kullanabileceğimiz komutları görmek için /help yazabiliriz.

sc-1

Yeni Botunuzu oluşturmak için  /newbot yazıp BotFather’a gönderin. Bundan sonra size Botunuza ne isim vereceğinizi (name) daha sonrada sonu Bot ile bitecek olan username’ı seçmenizi isteyecek.

Bu adımları tamamlarsanız Tebrikler ilk Botunuzu oluşturdunuz. Burada en önemlisi size gönderilen API token. Bunu sağlam bir yere kopyalayın bundan sonra lazım olacak. API Token aşağıdakine benzeyen harf ve rakamlar topluluğu

270485614:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0

Yeni botunuzu arayıp konuşmak için listenize ekleyin. Birkaç mesaj yazın. Ne oldu hiç cevap gelmedi mi? Çünkü botunuzun henüz bir zekası yok 🙁

Bir sonraki yazıda botumuza zeka katıp bazı işleri yapmasını sağlayacağız. Fikir ve önerilerinizi bekliyorum.

Haber

Yapay Zeka ve Öğrenen Makinalar

Hızla dünyada en çok konuşulan konulardan biri haline gelen yapay zeka benim de yıllardır ilgimi çeken konuların başında gelmektedir. Daha önceden de bu alanda yapılan yazılımları incelemiş ve önemli bir konu olduğuna kanaat getirmiştim. Ama hep kendi kendine düşünebilen makinalar yapmak için bu düşünce sisteminin dışından probleme bakmak gerektiğini savunmuşumdur. Bunu da insan oğlu nasıl yapabilir ki demişimdir. Bu düşünce sisteminin dışından bir bilgisayar peki hala bunu yapabilir. Yapay zeka konuşmaları mutlaka felsefi bir yöne doğru gitmeye meğillidir ama ben bunu yapmayacağım. 2017 yılında kendimi bu konuda geliştirmek yönünde bir karar aldım ve öğrendiklerimi buradan sizlerle paylaşacağım. Gnexlab’da çoğunlukla laf üretmek yerine çalışan örnekler vermeye çalışıyorum. ML (Machine Learning) konusunda da durum böyle olacak. Bu konuya ilgi duyan bu konuda çalışan sizlerle iletişim kurmak beni mutlu eder. Ama ödev sorularınızı cevap veremiyeceğimi belirtmek isterim. Bu yazıda sadece 6 satır kod ile çalışan bir ML uygulaması yapacağız.

Şimdi hızlıca ML nedir ve neden bu kadar önemli biraz bundan bahsedelim. Aslında ML yapay zekanın bir alt dalı. Bir çok problemi yeniden kodlama yapma gereği olmadan çözmek amacı ile geliştiriliyor.

Yalçın Yenigün burada şu şekilde türkçeleştirmiş

ML : Bilgisayarların dışarıdan programlanmaya ihtiyaç duymadan kendi kendine öğrenme yeteneğine “machine learning” denir.

Aslında ML kod içine gömülmüş kural setleri yerine örneklerden ve tecrubelerden öğrenen bilgisayar yazılımlarına verilen genel bir isim bir kavram.

Bu tanım bile ne kadar önemli olduğunu anlatıyor ama basit olmasına rağmen ML dışında çözümü pek de mümkün olmayan bir örnek üzerinden devam edelim.

Elma ile Portakal arasındaki farkı anlatan bir kod yazmanızı istesem. İlk aklımıza gelen turuncu ve yeşil pikselleri saymak bir çözüm olarak gelebilir.

Inline image 1

Turuncunun fazla yeşilin az olduğu resimleri portakal olarak ayırabilirsiniz. Fakat gerçek dünya bu kadar basit değil malesef. Kod içine yazdığınız sabit kural setleri çok kolay kırılacaktır. Mesela size siyah beyaz bir resim versem.

Inline image 2

Emin olun yukarıda yazdığınız kural setlerini kıracak bir çok resim bulabilirim. Siz de tonlarca kod ekleyerek tüm bu kural setlerini benim bulduğum uygunsuz resimleri de kapsayacak şekilde düzeltmeye çalışırsınız. Peki ya problemi değiştirirsem? Yeni problem için sil baştan tekrar tonlarca yeni kural seti mi yazacaksınız?

O zaman bizim için tüm bu kural setlerini yazacak bir algoritmaya ihtiyacımız var.

Şimdi işte işin zevkli kısmına geliyoruz. Bizim bir sınıflandırıcıya (Classifier ) ihtiyacımız var. Nedir bu sınıflandırıcı? Aslında sınıflandırıcıyı bir fonksiyon olarak düşünmek gerek. Bu fonksiyon dataları input olarak alıyor ve sonuç olarak bir etiket döndürüyor. Örnek olarak sınıflandırıcınız bir e-postayı alıp bunun spam mi yoksa değilmi diye ayrıştırıyor olabilir.

Örnekler içerisindeki belirli patternleri (kalıpları) bulmak için sınıflandırıcı geliştirmeye Supervised Learning deniliyor. (Türkçe terimlerde yardımlarınızı bekliyorum.)

Sınıflandırıcımıza girdi olarak verdiğimiz datalardan birisi eğitim datalarıdır. Mesela yukarıdaki örnek için meyvaların ağırlık ve yüzeyleri tablosu eğitim datamız olsun.

Inline image 3

 

ML de bu ağırlık ve yüzey pürüzlülüğüne features denilmekte. Bu özellikleri ne kadar doğru ve çeşitli verirseniz sınıflandırıcınız o denli doğru çalışacaktır. Bu örnekde Karar ağacı (decision tree) sınıflandırıcısını kullanacağız. Bunun gibi bir çok sınıflandırıcı algoritması geliştirilmiştir. Şimdilik karar ağıcı yada diğer sınıflandırıcı çeşitlerinin iç yapısına girmeden onları bir kurallar kutusu olarak düşünmekte yarar var. Buradaki en önemli konu içeriğini şimdilik bilmesek de tüm sınıflandırıcıların girdi ve çıktıları aynıdır. Data girer tahmin çıkar.

Sınıflandırıcıyı oluştururken örnekler içerisindeki kalıpların kullanılacağından bahsetmiştik.

Inline image 4

Mesela portakal genellikle elmadan daha ağırdır. O zaman ağır olan meyva daha büyük olasılıkla portakaldır diye bir kural seti olabilir. Demin de dediğimiz gibi bu kural setini biz elimizle yazmıyoruz. Verdiğimiz ağırlık datalarına bakarak bu kural setini sınıflandırıcı otomatik olarak oluşturuyor. Bu kural seti gibi yüzlerce binlercesini kendisi oluşturabilir. Mesela verdiğiniz yüzlerce hastalık belirtilerinden, tahlil sonuclarından o hastalığın büyük olasılıkla ne olduğuna bir makina insandan daha doğru karar verebilir. Ya da insansız bir hava aracı işlediği görüntü verilerden hareket kalindeki insan topluluğunun terorist mi yoksa yöre halkı mı olduğunun kararını doğru bir şekilde verebilir.

Konuyu dağıtma eğilimimi bastırıp ilgimi çeken ve bundan sonra derinlemesine inceleyeceğim iki açık kaynak ML kütüphanesinden bahsederek devam edeyim. Bunlardan ilki scikit-learn diğeri de çıkalı bir yıl olmasına rağmen Linux dan daha fazla yıldız alan Google’ın TensorFlow kütüphanesi. Bundan sonra çalışmalarımda bu iki kütüphaneden yararlanacağım.

Yukarıdaki örneği scikit’de kodlarsak aşağıdaki 6 satır kodu elde ediyoruz. (Python kodu)

Inline image 5

 

Burada etiketleri ifade etmesi için sayıları kullanmamız gerekiyor. Zira aslında ML kütüphaneleri dediğimiz kodlar büyük matris işlemlerini çok hızlı yapabildikleri için günümüzde ML bir ivme kazandı. (ML kodlarının çalıştırıldığı donanımlardan ilerde bahsedeceğim)

0  bumpy yani pürüzlü yüzeyi 1 ise smooth yani düzgün yüzeyi
1 portakalı 0 ise elmayı temsil etsin.
Kodu yukarıdaki tablolarla birlikte incelerseniz özellikler tablosundan features dizinini oluşturuyoruz. Labels da bunlara karşılık gelen meyvenin ismini tutuyor.
clf olarak Karar ağacı sınıflandırıcımızı tanımlıyoruz. Bu sınıflandırıcıya features ve labels dizinlerini fit foksiyonu yardımıyla input olarak veriyoruz. Bu sınıflandırıcımızın eğitim işlemi. Daha sonra yine clf objesinin bir fonksiyonu olan predict ile ağırlığı 150 gram ve yüzeyi pürüzlü meyva nedir diye tahmin etmesini istiyoruz. Cevap 1 yani Portakal oluyor.

Tebrikler

Buraya kadar geldiyseniz 6 satırlık ilk ML kodunu anladınız demektir. Asıl güzel kısmı bu kodu hiç değiştirmeden yeni örneklerle eğitip başka problemleri çözmesini isteyebiliriz.

Inline image 6

 

Konu, anlaşılması için ne kadar sadeleştirilmiş olsa da eğer buraya kadar anlatılanlardan hoşlandıysanız ML sizin için de öğrenmeye değer olabilir. Zira Önümüzdeki 10 sene bunu çok konuşuyor olacağız.

Bir sonraki bölümlerde kod geliştirme ortamı kurulumu ve basit örneklerle devam edeceğiz. Takipte kalın.

Kaynaklar :

1- Açık kaynak ML kütüphanesi Scikit-Learn:  http://scikit-learn.org/stable/index.html

2- Açık kaynak ML kütüphanesi TensorFlow: https://www.tensorflow.org/

3- Google Developers:  https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw

4- ML Recepies by Josh Gordon : https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal