Yürüyen İnternet

Hareketi/sıcaklığı/zamanı algılayıp bunlara göre kombiyi yönetebilmesi için AHMT‘i,  Hareketin bulunduğu mekana koyalım demiştik. Ve bu durumda Balkondaki kombi ile iletişim sorunu çıkmıştı.

Biz de asırlık  bir teknolojiyi, Radyo frekanslarını kullanarak çözüme gitmiş. AHMT’e bir de radyo frekans modülü (nRF2401L) eklemiştik. [Ya Evde Yoksan? + Radyo’dan Haberleşme]

Fakat o da ne modülün kütüphane kodlarında garip bir şey vardı..

Görsel1 Görsel2

Saniyede 2 Megabit’lik bir hızdan bahsediyor.

nRF modülü için teorik olarak 500 metre – 1000 metre gibi rakamlar söz konusu olsa da; şehir içi evler ve yollar gibi gerçek hayat ortamlarında bizzat test ettiğimizde, açık alanda 200 metre civarında, arada en fazla bir duvar olmak şartıyla ev içi ortamlarda az bir kayıpla haberleşebiliyor.

Bu mesafe Bluetooth’un 10-15 katı, Wifi modemlerin 2-3 katı bir uzaklık demek. Üstelik hız da; -şimdilerde vatandaşlık maaşı deneyleri yapan- Finlandiya’nın, daha önce Geniş Bant İnterneti İnsan Haklarına Dahil Edip ardından tüm vatandaşlarına ücretsiz olarak sunduğu 1 Mbit hızın iki katı.

Diyorum ki;
Yürüyen uçak yapabiliriz 

Kendi Kablosuz İnternet Protokollerimizi bile geliştirebiliriz.

E hadi standart demeyelim ama kendi özel iletişim sistemlerimizi kurabiliriz pek ala. “Uçuyorsun..” diyeceklere şöyle yanıt vermek isterim:  Düne kadar (1992) ASCII  varken, Bob ve Ken kafa kafaya verip UTF-8’i çıkardılarsa, yeni bir tanesi daha neden olmasın?

Atıyorum;
Daha önce geçtiği üzere bazı kelimeler daha çok kullanılıyor. [Steemit’te En Çok Kullanılan Kelimeler]

Çok basit 3-5 analiz ile Türkçe’de en sık kullanılan kelimeleri bulmak pek ala mümkün. Kaldı ki UTF8’in sunduğu  2,097,152 karakter sayısı hacmine, Türkçe’deki 616.767 kelime+deyimin 3.4 katı sığdırılabilir. (ekler ve tanınmayan heceler için öyle zemberek vari kelime yorumlama işlemlerine hiç girmeden basit formüller bulunabilir)

Yani?

İki saniye şuraya bi bakalım:
https://onlineutf8tools.com/convert-utf8-to-binary

“yağmur yağacak” yazabilmek için 32 byte harcadım.
bize hayli yetecek şekilde her kelimeyi 4 byte ile kodlamış olsak, 8 byte ile aynı iletişimi kurabiliriz. Yani şöyle:

y = 0111101
yerine
yağmur = 0111101

Abartırsak, bu sistem, web sitesi tarzı 4000X adet sunucu sayısının, 1000X adete düşmesi demek aynı zamanda text bazlı internetin 4 kat hızlanması demek.

Hatta yukarıdaki kelime öbeğindeki gibi sık kullanılan kelimeler ilk 1-2 byte içine oturacak şekilde ayarlanırsa çok daha optimize bir sistem ortaya çıkabilir.

Dünya Kabul Edecek mi?

AHMT’in Kombi haberleşmesi için Radyo frekans 1/0-AÇ/KAPA gönderebiliyorsak,
0111101 gönderince, arkadaşımın cihazının ekranına y yazdırmak yerine yağmur yazdırmak çok mümkün. Anteni biraz güçlendirince, toplasan 3-4-5 hava alanı kadar yer kaplayan Uşak’ta bizim işimizi hayli hayli görür..

Dünya kendi bilir 

 

Konuşur gibi “Türkçe” Kod #7: Harf Listesi

Önceki kısımlar:

 #1. Bölümde Türkçe Kod yazma fikrini ele almıştık.

#2. Bölümde TAR’ın üzerinde koşacağı Python’u kurmuş ve herhangi bir .exe dosyası gibi çalışabilmesi için Path ayarlarını yapmıştık.

#3. Bölümde nasıl PhotoShop’un kullanacağı dosyaların uzantısı .psd ise bizde TAR’ın kullanacağı uzantıyı .tr olarak belirlemiş bu bunların konsoldan çağrılabilmesini sağlamıştık.

#4. Bölümde Programlama Dillerinin mantığına bakmış, Php’den C++’a hepsinin aslında KARAKTER yorumlayıcısı olduğuna değinmiştik.

#5. Bölümde “A “gibi bir harfin de aslında 0-1’lerden oluştuğuna ve bunu göstermek için Ekranın/Donanım ve Yazılımın eklem noktalarına değinmiştik.

#6 Bölümde YAZ kodumuzu çalıştırmıştık.


Yukarıdaki yazıların toplamı ışığında, YAZ kodumuzun çalışma mantığını biliyoruz.  Biraz mutfak tarafına geçelim.

 

UzantiKontrol fonksiyonumuz ile TAR kelimesi sonrasına yazılacak olanları argüman olarak kabul ediyor ve ardından DosyaIcerik fonksiyonumuzla dosyanın içeriğini okuyorduk.

Şimdi önceki yazılarda üzerinde durduğumuz HARF HARF didikleme işlemimiz için,
Dosya içindeki BÜTÜN karakterleri bir liste içinde toplayalım. Boşuklar, Tablar, Satır atlamalar, tırnaklar, virgüller, parantezler elbetteki harfler ve rakamlar.. BÜTÜN her şey, harfler listemizin bir elemanı olsun.

So..

Bi tane Oku() fonksiyonumuz olsun. Bunun için
def Oku():
yazıyoruz alt satırda 1 TAB içeriden yazmaya başlıyoruz. (Çoğu editör bunu otomatik yapacaktır, ola ki TAB sayılarında bir aksilik çıkarsa, DELETE ile alt satırı yukarı ya çekip, arada hiç bir şey kalmadığında yeniden ENTER yaparak alt satıra geçebilirsiniz.

Oku() içinde önce UzantiKontrol() fonksiyonumuzu çalıştıralım.
Ardından harfler = list(okunan)  ataması yaparak yukarıda bahsettiğimiz tüm KARAKTERLERİ bi listede toplama işini yapalım. Ve bunu ekrana basalım.

 

Ve bakalım elimizde ne var.

Evet. Tam istediğimiz gibi. Listenin elamanlarına dikkat ederseniz y harfi,  a harfi, z harfinin yanında ardaki boşluk ve tırnak ve ardından Merhaba kelimesinin harfleri tek tek bulunmakta.

İyi ama şöyle olması gerekmez miydi? [‘y’,’a’,’z’,’ ‘, ‘”‘,’M’,’e’,’r’,… ..]

her tırnağın önünde bir u harfi var?
u’y’

Öyle olması gerekirdi. Ancak Türkçe karakterlerde sorun yaşamamak için hatırlarsanız üçüncü yazıda şu kodları eklemiştik
icerik = unicode(icerik,'utf-8')

ve özellikle UTF-8 kayıt yapan bir editör ile dosyalarımızı kayıt etmiştik.

Dolayısıyla, her değerin önündeki u, tırnağın içindeki karakterin UTF-8 formatında olduğunu söylüyor.


Görsel

“Türkçe”, Konuşur Gibi Kod Yazmak #4: Harf Harf Didikleme & Karakter Meselesi

Önceki Bölümlerde: #1: Giriş#2: İlk adımlar#3: Dosya Çağırma, adımlarına bakmıştk. Kaldığımız yerden devam ediyoruz.. Next.. Sonraki.. 😉


İlk, kodlamasını Türkçe olarak yazacağımız dosyamızı oluşturalım. Bunun için

Not Defterini açın.

“`
Hey! Selam, nasılsın?

““

..yazın. Ve uzantısını otomatik .txt yapmaması için Kayıt Türü: Tüm Dosyalar olarak seçin, kaydedin.

 

Kullanım kolaylığı açısından,
Başlat > Cmd >
Cd şu klasör > cd bu klasör.. şeklinde uğraşmamak için, tar.py ve ornek.tr dosyalarının bulunduğu klasör seviyesine çıkın ve Shift’e basarken bu klasör üzerinde Sağ tıklayın.

Böyle yaptığımızda explorer menüsünde “Komut penceresini burada aç” seçeneği de gelecek 😉

Görüleceği üzere,
E:
cd Equinox
cd _Python
cd KendiDilim
cd v1
gibi tek tek yazmak durumunda kalmadık. Direk ilgili klasörde başladık.

O halde “` tar “` yazıp enterlayalım ve bizden dosya ismi beklesin

peki..
TaR az önce içine “Hey! Selam, nasılsın?” yazdığımız, ornek.tr dosyamızı çağırsın.

hadi bakalım..

What?! Bu da ne?

Hemen her yerde karşımıza çıkan, bazen saç baş yolduran Türkçeye karakterlerle ilgili hatalardan birisi. Bu tip hatalara genel olarak “ığşü hatası” diye bir isim mi versek acaba 🙂

Neyse ki UTF-8 olarak kaydetme şansımız var.

–UTF-8 derken?
Unicode Transformation Format’ın kısaltılmışı yani Unicode Dönüşüm Biçimi.
–Himm.. Unicode? Üniversal kod? galiba. Da nasıl?
Unicode: (Evrensel Kod) Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standartıdır.

 

–İyi de her karakteri neden sayı ile ifade edelim ki? A harfi, A olsun işte.
–Olsun da şekerim, sen Google’a A yazıp aradığında, kablonun içinden A harfi mi gidiyor 

–Elektrik/Elektron falandır herhalde giden.

–Elektrik gibi bir şeye “bak bu A harfi bu da B” diye nasıl anlatırsın.

–Anladığı dilden 🙂 Elektrik var, Elektrik yok. 1-0. Mesela;
VarVar-Yok-Var: 1 1 01 : A harfi
Var-Yok-Yok-Var: 1 0 0 1 : B harfi
olursa ortak anlaşma yolunu bulmuş oluruz 😉

Fakat ben B için böyle değil de daha farklı bir Var-Yok sıralaması seçebilirim. Keyif benim değil mi,
Var-Yok-VarVar : 1 0 1 1 : B olsun diyebilirim.
Evet diyebilirim. Ama atıyorum Tukcell’in Avea’nın sunucuları bu sıralamayı Z olarak yorumluyorsa, yazdığım SMS karşı tarafa başka bir şey olarak gidebilir..

Operatörle anlaşıp şöyle diyebiliriz, bundan hepimiz şu sıralama şeklini esas alalım:

1 1 1 1 : A
1 1 1 0 : B
1 1 0 1 : C
1 1 0 1 : Ç
1 0 1 1 : D
1 0 1 0 : E
1 0 0 1 : F
1 0 0 0 : G

0 1 1 1 : Ğ
0 1 1 0 : H
0 1 0 1 : I
0 1 0 1 : İ
0 0 1 1 : J
0 0 1 0 : K
0 0 0 1 : L
0 0 0 0 : M

Ee.. Var-Yok seçeneklerimiz bitti 🙂

–“O halde bize 4 bit yetmeyecek.. bunun küçük harfi, boşluğu, virgülü sayısı sayısı var, biz en iyisi bunu 8 bit yapalım ki M’de tıkanıp kalmadan 256 seçeneğimiz olsun” denilmiş.

Yani ASCII tablosu.
Sağ solda karşımıza çıkan ASCII dediğimiz şey; aslında çocukken 13121 yazarak, ACABA ‘yı kast ettiğimiz şifreli   haberleşme şeklimizin, karşılıklar tablosundan çok farklı değil aslında.

Amma Velakin

Şu tabloya bir bakın hele..
Dünya toplamında kullanılan BAYA bi harf var.

Oysa bizim elimizde M‘ye kadar kesmiyor deyip kullanmaya başladığımız ASCII içinde bile 256 karaktere yer var. Böyle olmaz. En iyisi Dünya üzerinde kullanılan bütün dillerin, bütün harfleri için bir tablo yapalım, kökten çözüm bulalım denilmiş.

Unicode Organizasyonu toplanmış. Yukarıdaki liste gibi bir standart çıkarmış.
–İyi de o zaman bu 8 bit [1 0 1 0 1 0 1 0] olamaz ki.
–Evet değil. Unicode bir saklama biçiminde her bir karakter için ayırmanız gereken yer 32 bit.

Eh 32 bit ama herkes için sorun çözüldü.

İnternet

Elektronik devreleri ve karakter setleri, kendi aralarında top çevirirken İnternet diye bir çıkar ve hayli popüler olur. Böyle olunca, bir karakter için 8 bit yerine 32 bit yani 8 GB yerine 32 GB veri birilerinin canını sıkar, hem harddiskte çok yer demek, hem yoğun ve yavaş bir trafik..

Bu kişiler; şimdilerde Google’ın kendi yeni programlama dili GO‘yu geliştiren Rob Pike ve Ken Thompson‘dır. Gayet zekice bir yöntemle, hem yine tonlarca harfle eşleşecek hem de 32 bit’lik Unicodu’u 8 bit’e dönüştürecek bir yöntem icat ederler:
Unicode Transformation Format : Unicode Dönüşüm Biçimi: UTF.

Sanırım biraz yukarıdaki kısa açıklama, şimdi daha yerli yerine oturdu 😉
İyi de nasıl yapıyorlar? diye merak edenler buradan dalışa geçebilir.
//SEO açısından, Google’ın neden utf-8 siteleri bir tık daha fazla sevdiği de anlaşılabilir 😉

Soo..
TaR’ımıza dönelim.
Madem Türkçe Karakter sorunu için Unicode veya UTF-8 çözüm sunuyor. Onların formatında kayıt yapalım.


ornek.tr
‘yi açın ve Dosya>Fark Kaydet menüsü altından, yine Kayıt Türü: Tüm Dosyalar seçili iken,
Alt taraftan Kodlama: UTF-8 seçip öyle kayıt edin.

 

Ok. Şimdi yeniden konsola geçelim.

 

.. ve Nihayet!

diyecektik ama diyemeden kursağımızda kaldı.

 

–Şimdi ne oldu?

Daha içeriden bakalım…

Not ve Sub diye iki klasör oluşturun.
Not Defteri açın, yeni bir dosya içinde sadece “`ğ“` yazıp, Not klasörü içine ğ.txt adıyla kayıt edin.
SublimeText açın, yeni bir dosya içinde sadece “`ğ“` yazıp, Sub klasörü içine ğ.txt adıyla kayıt edin.

Text dosyası olmalarına rağmen, bunları Sağ tıklayıp, Birlikte Aç diyerek  IrfanView ile açalım. (ilk defa irfanview kuracaksanız, resim görüntüleme programı olduğunu, kurarken seçtiğiniz ayarlara, kendini varsayılan resim gösterici olarak atayabileceğini akılda tutun)

Ardından View > Show HEX view seçelim.

 

 

Görüleceği üzere, Note pad bizim istediğimiz şekilde kayıt yapmamış. Bize doğru gösteren SublimeText ile yaptığımız kayıt lazım.

SublimeText açalım, yeni bir dosya içine
“`Hey! Selam, Nasılsın?“`
yazıp, kayıt edelim.

ve yine konsola geçelim.

..vee

Yey!
İki tane I harfi içeren bir dosyayı TaR ile çağırdık ve tüm harflerini elden geçirip, çıktı olarak sunduk.

En başta, “SublimeText ile ornek.tr oluştur” deseydin, bu kadar uğraşmazdık” demiyorsunuzdur umarım.

Kendi Programlama Dilimizi yazacaksak, Hele ki bu TÜRKÇE olacaksa, ASCII, UTF vb Karakter Setleri ve Karakter  Kodlamaları hatta RAM‘da kaç byte veri tutulacağı gibi bilgileri de öğrenmek sanki hiç fena değil 😉