Friday, March 24, 2017

Bulut Uzerinde Unix: GCloud

Bilgisayarı almak, taşımak, üzerinde işletim sistemi kurmak, sonra onu İnternet'e açmak için uğraşmak.. Bunlar saç yoldurucu olabilir. Amazon, Google gibi şirketler bu alanda uzun süredir servis sağlıyorlar. İnternet üzerinde isteğe göre, istenen hacimde, istenen işletim sistemini taşıyan bir makinayı yaratmak bulut servisleri ile çok kolay. Amazon EC2 sisteminden önce bahsetmiştik. Eğer Amazon'un servisi memnun etmiyorsa, Google seçilebilir. İlk hesap açımında $300 dolarlık hediye de veriyorlar - rekabet güzel şey! Amazon müşterilerini kendilerine çekmeye uğraşıyorlar.

Bu yazıda komut satırından SSH ile erişilebilecek servis tarzı bir makina yaratmayı işliyoruz.  Google bu servise "hesaplama makinası (compute engine -CE-)" diyor. Makina yaratmak için önce hesap açmak lazım. 

https://cloud.google.com

Kredi kartı, ya da banka bilgileri verildikten sonra (hediye miktarı tüketilmeden para alınmayacak tabii) giriş tamamlanır. Ardından Google servislerine komut satırı erişimi sağlayan SDK lazım,  

https://cloud.google.com/sdk/

Linux icin 

https://cloud.google.com/sdk/docs/quickstart-linux

Indirdikten sonra cd google-cloud-sdk, ve ./install.sh. 

Sonra gcloud init ile kurulum tamamlanır, sorulan sorulara evet deyin, sisteme girme (login) sorusuna evet deyince tarayıcıya aktarılıyorsunuz, google şifresi ile giriş yapınca bağlantı kuruluyor. 

Yeni makina yaratmak gcloud komut satırı ile olabilir, ama en rahatı başta GUI kullanmak. Bir proje yaratılıyor, sonra proje seçiliyor. Ana konsoldan "Go to compute engine dashboard" ile CE'ye gidiliyor. Burada


Benim daha önce başlattığım makina burada görülüyor. Yeni makina için "create instance" tıklanır, seçenekler hangi tür işletim sistemi (bizde Debian), makina donanımı (machine type), belleği, mikroişlemci sayısı, vs., makinanın hangi bölgede başlatılması istendiği (zone) seçiliyor. Bölge mesela makina ABD'de mi, Asya'da mı, Avrupa'da mı başlatılsın? Eğer müşteriye dönük bir uygalama servis edilecekse müşteriye yakın makinalar daha iyi olur, cevap hızının optimal olması için. 


Bu seçimler yapılırken sağ yanda tahmini aylık bedel gösteriliyor. Makina yaratıldıktan sonra iki üstteki resimde SSH seçeneği var, bu seçenekten "view gcloud command" ile bağlanmak için gereken gcloud komut satırı komutu gösteriliyor. Bunu kopyala, yapıştır ile yerel makinamizin Unix konsoluna verip, buluttaki makinamiza ilk girişi yapabiliriz. 

Makinaların ana diski kalıcıdır (persistent), yani makinayı kapatıp açınca disk üzerine yazılmış şeyler hatırlanır. Tabii sanal makina silinirse, dosyalar da silinecektir. 

Tuesday, March 21, 2017

Yol Bulmak

Monday, March 13, 2017

Baz Istasyonu ile Yer Bulma, Android

Bu bolume bazi ekler:

Altta baz istasyonlari hakkinda veri tabanindan bahsedildi. Telefonun o anda bagli oldugu baz istasyonun verisini Android'den almak ve kaydetmek icin surada bahsettigimiz olcum toplayici kodlara ekler yaptik. Artik cell.txt adli bir text dosyasinda o anda bagli olunan (servis veren) baz istasyonunun bilgileri yaziliyor. Mesela biraz once bir ornek topladik, bir satirda

262:02:15:13227508:

Bunlar sirasiyla mcc, mnc, lac, cid kodlari. Bu kodlari kullanarak opencellid verisine bakiyoruz, ve

UMTS,262,2,15,13227508,167,13.321302,52.502313,185,9,1,1458941010,1478909517,-101

satirini buluyoruz, yani enlem/boylam 52.502313,13.321302 imis (hakikaten de oradaydik). Bu en yakin baz istasyonunun yeri.

GPS ile algilayici fuzyonu (sensor fusion) yapilarak bu veri oldugumuz yeri daha iyi hesaplamak icin kullanilabilir. GPS bilindigi gibi duvarlardan yansima sonucu bazi sinyallerin yolunun uzamasi sebebiyle (multipath problem) bazen yanlis sonuclar verebiliyor.  GPS baglanti da kuramayabilir bazen, ya da  baglanma uzun surebilir. Tum bu sebeplerden dolayi baz istasyonlari yer bulmak icin takviye amacli kullanilabilir.

Tum dunyadaki baz istasyon kodlari ve yerlerini kayitli tutan bir acik yazilim projesi,

opencellid.org

Baz istasyonu kodu uzerinden bulunur, ve tabanda istasyonun enlem  / boylami da vardir, 3 veya daha fazla istasyon ile ucgenleme yapilabilir. Istasyon tabanini almak icin, once Database | request for API key secilir, email / sifre ile kayit olduktan sonra ile bir arayuz anahtari alinir; Sonra Database | Download Database ile ve API anahtari girilerek taban indirilir.

Tum taban oldukca buyuk, sıkıştırılmış hali bile 600 MB civari - eh normal, tum dunyadaki istasyonlar kayitlanmaya ugrasiliyor. Bu dosyayi kucultmek icin icinde oldugumuz sehir disindakileri filtreleyebiliriz. Mesela sadece istenen enlem / boylam yakininda olanlar icin alttaki kod, diyelim icinde 13 enlem 52 ile baslayan baz istasyonlarini alip ekrana basiyor (komut satirinda > ile cikti dosyarina yonlendirilir)

import re
with open(...) as f:
    for line in f:
        if re.search("13\.\d+,52\.\d+",line): print line.strip()


Not: Kaynaklarda telefonun etrafindaki birden fazla olabilecek baz istasyonunun bilgisini almak icin TelephonyManager.getNeighboringCellInfo cagrisindan bahsediliyor. Bu cagri "kizaga alinmis (deprecated)" bir cagri, artik onun yerine TelephonyManager.getAllCellInfo tavsiye ediliyor, API 17'den itibaren bu cagri Android API kod bazinda var. Fakat tum telefonlar bu cagriyi halen desteklemiyor, biz Android 6.0 (API 23) destekli olan bir telefonda denedik (ucuz bir marka) ve getAllCellInfo bos bir liste geri getirdi. 

Monday, February 13, 2017

Algılayıcı Ölçümleri, Video, Android

Surada bahsettiğimiz uygulamada bazı ekler var. Robotik hedefleri (dış dünyada bağımsız gezinebilen yapay zeka uygulamaları) için ölçüm toplama bağlamında faydalı olabilir.

Kamera resimleri, yön algılayıcısı (orientation sensor), GPS değerleri, ivme algılayıcı (accelerometer) belli aralıklarla biriktirir, ve istendiği anda (Rec düğmesine basılınca) sonuçları telefon dizinine kaydeder. Dosya SDCARD/Bass altında bir numaralı dizindir, her Rec sonrası yeni bir dizin yaratılır. Böylece birkaç ölçümü arka arkaya kaydetmek mümkün olur.


Her ölçüm için ayrı bir txt dosyası var, analiz amaçıyla bu dosyaları USB ile dizüstüne aktarmak yeterli. Her veri dosyasındaki satır sayısı ve kameranın kaydettiği tek resim (frame) sayısı birbiriyle aynı, yani eğer ivme algılayıcından 20 satır kaydedildiyse, yön algılayıcısından da 20 satır kaydedilmiş demektir, ve her satırın zaman indisi birbiriyle eşittir. Yani herhangi bir zaman anında tüm algılayıcılardan alınan veri aynı anda bellege alınır. Böylece sonradan analiz sırasında odaklanan zaman diliminde tüm ölçümlerin hangi seviyede olduğu bilinebilir.

Uygulama içinde ve eğer GPS bağlantısı kurulduysa Map düğmesine basılarak o anda olunan yerin haritası alınabilir. Haritalar bir zip dosyası içinde.

Thursday, January 26, 2017

Derin Ogrenim, Bazi Video'lar, Baglantilar

Google kurucularindan Brin Davos'ta

https://www.youtube.com/watch?v=XzkUAxtEQXE

Derin Ogrenim mucitlerinden LeCun semineri, goruntu ile araba kullanim hakkinda ilginc bilgiler. 15:35'te gosterilen robot, piksel bazinda, o pikselin uzerinde yurunebilir olup olmadigi bilgisiyle egitiliyor, diger girdi pur imaj. Robot bu bilgiyle etrafta dolasiyor, onune engel cikinca hemen duruyor.

https://www.youtube.com/watch?v=IbjF5VjniVE

UdaCity kurucusu ve surucusuz arabalar arastirmacilarindan Thrun ile LeCun soylesisi


MIT universitesi derin ogrenim ile araba kullanimi hakkinda yeni ders baslatti. Video'lar YouTube'da (baglantilar alttaki sayfada).

http://selfdrivingcars.mit.edu/

YSA egitiminde kullanilan geriye dogru yayilma (backprop) algoritmasini kimin kesfettigi hakkinda ilginc bir tartisma.