Gnexlab Teknoloji Kulübü – ileri teknoloji çalışmaları
26 Aralık 2017 nerginer
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.
20 Aralık 2017 nerginer
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.
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)
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.
SHA256(“Selam Dünya”) =
SHA256(“Selam Tünya”) =
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)
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.
12 Haziran 2017 nerginer
Ü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
30 Mayıs 2017 nerginer
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
12 Mart 2017 nerginer
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
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 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.
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.
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.
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…
30 Ocak 2017 nerginer
1 Ocak 2017 nerginer