AHMT sicaklikOlc() fonksiyonu

Evveliyat: ##1, ##2, ##3, ##4


ISI ve sıcaklık ile ilgili kısımlara gelmiştik. Biraz açıklamasını da yaparak devam edelim.. // görsel

sicaklikOlc() fonksiyonu

C gibi temel dillerden geliyorsanız Arduino kodları sizin için çocuk oyuncağı olabilir. Hoş farklı dillerden geliyorsanız da çok zor değil hatta bi hayli basit ve net.

Arduino değişken tanımlama

Örneğin bir değişken tanımlarken
Php’de $x=15;
JavaScript’te var x=15;
Python’da x=15

şeklinde belirtiyoruz. Burada ise değişkenin kaç bit/byte’lık oluğuna göre türünü belirtiyoruz. Ya da metin/karakter olma durumunu da söylüyoruz: byte x=15;

Arduino fonksiyonlar

Benzer şekilde fonksiyon tanımlarken de sade ve net. Sadece ufak farklılıklar var.
Python’da def fx(): bişeyler yap..
JavaScript ve php’de function fx() { bişeyler yap.. }

şeklinde tanımlarken burada
void fx() { bişeyler yap.. }
ya da
byte fx(){ bişeyler yap.. }
olarak tanımlıyoruz. void fx() kullanımı, Return ile sonuç döndürmeyen fonksiyonlar için. Şayet fonksiyonumuz bir sonuç üretiyorsa bu durumda üretilecek verinin türünü belirtmemiz gerekiyor. Örneğin fonksiyonmuz byte tipinde bir sonuç döndürüyorsa
byte fx() { bişeyler yap.. return sonuc; } şeklinde tanımlama yapıyoruz. Fonksiyonumuza bir argüman gönderip, ona göre sonuç alıyorsak bunu da byte fx(a){ a.. do.. return } şeklinde kullanıyoruz.

En genel hali ile şöyle:

dönüşTipi funksiyonİsmi( argüman-lar ){
sonuçTipi sonuç;
bişeyler yap..
return sonuç;
}

Böyle çok havada kalıyor sanırım. Yukarıdaki tanımlamaları da kapsayan kısa bir örnek yapalım.

////////////////////////////
void yaz() {Serial.println("Merhaba"); }
// Bi şeyler yapıyor ama bize bir sonuç ile geri döndürmeyeceği için
// void fx(){} kullanıyoruz.

////////////////////////////

byte cevre() {
byte A=20;
byte B=40;
byte cevreuzunlugu = 2*(A+B);
return cevreuzunlugu; }
//return ile 255'ten küçük bir değer döndüreceği için
// byte fx(){} şeklinde kullanıyoruz

////////////////////////////

int alan() {
byte C=30;
byte D=50;
int kapladigiAlan = C*D;
return kapladigiAlan; }
//return ile 255'ten büyük bir değer döndüreceği için
// int fx(){} şeklinde kullanıyoruz

////////////////////////////

int y = 350;
byte x = 75;
void topla(){ int z = x+y; Serial.println(z); }
//return ile bir değer döndürMEyeceği için
// void fx(){} şeklinde kullanıyoruz

////////////////////////////

int p = 300;
byte j = 15;
int carp(int k, int m){
int sonuc;
sonuc = k * m;
return sonuc; }
//return ile 255'ten büyük 32768'den küçük bir değer döndüreceği için
// int fx(){} şeklinde kullanıyoruz
// dışarıdan bizim verdiğimiz değişkenleri kullanarak işlem yapması için
// int fx(int arguman1){} şeklinde kullanıyoruz

////////////////////////////

//tanımladığımız fonksiyonları iş başında görelim 😉

void setup() { Serial.begin(9600);
yaz();
byte ornekIKI = cevre(); Serial.println(ornekIKI);
int ornekUC = alan(); Serial.println(ornekUC);
topla();
int ornekBES = carp(p,j); Serial.println(ornekBES);
}
void loop() {}



 

Bu bilgiler ışığında AHMT’in kodlarına yeniden bakalım..Bu sefer bi tık daha sıcak gelebilir 😉

Sıcaklık Volt ve Sıcaklık değişkenlerimizin integer ve float (noktalı sayı) olduğunu, ayrıca hangi bacağa bağlantı yaptığımızı tanımladık.

Return ile bir sonuç döndürmeyeceği için fonksiyon oluştururken void sicaklikOlc(){} olarak kullandık.

Fonksiyonun içinde ise SicaklikPini’ne bağlı sensörden gelen değerleri okuduk (doğal olarak derece değil volt) sonra kaç voltun kaç santigrat dereceye denk geldiğini hesaplatıyoruz. Bu arada bu işlemin sağlıklı olabilmesi için void setup(){} içinde  kullanacağız.

Kodun ilerleyen kısımlarında, herhangi bir yerde LM35’ten gelen ortam sıcaklığının o andaki değeri lazım olduğunda şöyle demek yeterli olacak:

sicaklikOlc();

 

Akıllı Termostat AHMT v11: İstenen Fatura/Sıcaklık

##1, ##2, ##3


Hani şu bir şeylerin ayarını değiştirmek için çevirip durduğumuz düğmeler var ya, işte onların çoğu Potansiyometre. // görsel

Ve kendi içinde tahmin edilenden çok çeşidi ve isimlendirmesi var 🙂

Potansiyometre: Dışarıdan müdahale ile değeri değiştirilebilen direnç. (~carbon)
Reosta: Yüksek akım değerine sahip olanar (~nikel~krom)
Pot: Kısaca söylenişi
Lineer Potansiyometre: Her 1 birim hareket için, sabit oranlı direnç değişimi sunanlar


Logaritmik Potansiyometre: Her 1 birim hareket için, artan/azalan oranlı direnç değişimi sunanlar, genelde dairesel yapıda olup, piyasadaki çoğu örnek için, direnç değeri 180 dereceye kadar hafif hafif artarken 180 derece sonrası fazla fazla artar. (Bu yüzden kelimenin tam manası ile logaritmik denebilir mi tartışılır.) Azalan versiyonu anti-logaritmik potansiyometre adını alır.


Çok turlu/Sonsuz/Vidalı Potansiyometre
: Belli bir aralığı yoktur, defalarca dönebilecek şekilde hazırlanmıştır

Trimmer/Trimpot: Genelde ayarlanmış değere sahip olarak gelir, bir iki defa ayarlama sonrası yeniden değişime ihtiyaç duymaz (Örn, LCD ekranın arka aydınlatmasıdandaki trimpot’un, yazıların görünmesi için ortamdaki ışığa göre bi defa ayarlanması yeterlidir. Ama radyonun düğmesi her zaman değişebilir)

Meraklısı için daha detay mevcut #1, #2, #3

Bizim isteğimiz şu idi; istenen sıcaklığı ayarlayalım, fatura rakamını girelim 😉 Sistem ona göre ayarlasın.. Evet kulağa hoş geliyor değil mi?

Fatura benim istediğim tutarda gelsin

Bunun için her şeyi tersten düşünmek gerekiyor. 250 TL fatura geliyorsa ortalama olarak günde 8.3 TL’lik kullanım var demektir. Günün her saati farklı elbette ama şimdilik ortalama alırsak demek ki saate 0,34 TL’lik harcama söz konusu. AHMT evde hareketin olmadığı zamanlarda 5 saate karşılık gelen bir düşüş sağlayabilirse (8 saat değil, çünkü tümden kapatmıyor)  bu ayda 50 TL bir düşüşe denk geliyor demek.

Yazılım tarafında, istenen fatura ve istenen sıcaklığa bağlı olarak; tasarruf edilmesi gereken süreyi bulmamız ve bunu gün içi ve geceye yaymamız gerekiyor.

Bunları yapabilmek için de, kullanıcının İstediği ortam sıcaklığını girmesi gerektiği gibi, belirli bir fatura istediği için Fatura tutarını da girmesi gerekiyor. Ve bizim bunu hesaplatabilmemiz için de doğalgaz birim fiyatını bilmemiz gerekiyor. İlk kodlarken bunu girebiliriz elbet ama

Zam gelirse?

Zam gelirse birim fiyatın da değişebilmesi lazım. Şu an için, internet üzerinden cihazların yazılımını otomatik güncelleme gibi bir maceraya atılma niyetimiz olmadığı için, en pratik çözüm: Her bir paramatre için birer potansiyometre.

Biz de mevcut devremize, 3 tane potansiyometre ilave ettik.
Ve.. Bozuldu 

Serial ekrana hiç bir bilgi gelmedi. Bu kadar basit bir devre elemanı ile sorun yaşamış olmak komik. Bi çok sebebi inceledik ve kontrollü deneyle gördük ki 1 tane bile potansiyometre bağlayınca sistem çalışmıyordu. Demek ki komik olan, bizim Arduio’nun A1 A2 A3 bacaklarına direnç-potansiyometre bağladığımızda, direncin değerine göre devrenin tamanın nasıl etkileneceğini, toplam direnç/akım/volt değerlerinin ne olacağını hesaba katmamamızmış.

Elimizdeki potansiyometrler 10K’lık idi. Yani toplam 30.000 Ohm dahil olmuştu sisteme.

Hepsini 1K yapınca, AHMT yeniden uyandı 🙂

Kod tarafında tanımlar şunun gibi oldu;

Sıcaklık derken, Ortam sıcaklığını ölçtüğümüz LM35 sensörüyle ilgili şeyleri kast ediyorum.

ISI derken, kullanıcının istemiş olduğu değerle ilgili, ilk potansiyometre ile ilgili şeyleri kast ediyorum.

Bu tanımların kullanımı ise şöyle;

ve de

bir sonraki yazıda bu kısımların açıklamalarına da değinelim..

 

Akıllı Termostat AHMT v10.-2 W ve Ultrasonic HC SR04

Nasıl yani Eksi 2. versiyon?
ve
Önceki gün daha yeni adını koymuştun ne ara 10. versiyona geldin?

sorularını yanıtlayayım önce 😉

Önceki yazıda Hareket/PIR sensörü sorunundan bahsetmiştim hatırlarsanız. Geçici çözümyolarak Ses’in yankılanması sırasında, önünden geçen olursa, yankı mesafesinin kısalmasını yakalayarak hareketi algıladığımız HCSR-04 Ultrasonic ses sensörünü kullanmıştık. Hem donanım olarak hem de yazılım olarak bu parçalar ilerideki adımlarda yer almayacağı için, bu haline 1 sonraki haline 2 demeye içim elvermedi ben de Eski yaptım 🙂

Versiyon 10 meselesi yine kişisel. Windows 7 demek ile Windows 8 demek arasında algılama olarak çok bariz farklar var. Ancak Firefox 15.27 demek ile Firefox 15.29 demek arasında algı olarak çok fark yok.

“Evet, tam da bu yüzden Köklü değişimlerde 15’den 16’ya geçiliyor.” diyecek bazı arkadaşlar. Ve belki de benim 15-20 satır değiştirip, versiyon 6’dan version 7’ye geçmeme itiraz edecekler. Haklı olabilirler ama böyle olması sadece bir adetten ibaret. Alan Turing nasıl yapıyordu acaba?.

Öyle binlerce satır ya da çok yazarlı kodlar da olmadığı için,
v7.98 sonrası v8.12‘ye geçmek yerine
v7 sonrasında v8‘e sonrasında da v9‘a geçmek istiyorum müsaade ederseniz. w ise working manasında.
Bu şekilde elbet yüksek rakamlar çıkabilir. Ama sonsuz+1 diye tam sayı var malum 😉

 

Bazen, geri dönmek gerekebiliyor. Günlük hayatta “hani şu halde idi, şunu yaptıktan sonraki zamana geri dönmek lazım” gibi konuşulduğu için, ondalık yazmak yerine mevcut durumu belirtmek çok daha pratik olabiliyor.

Bir zamanlar Subversion’daki yöntemler adet iken, şimdi GitHub’daki yöntemler gelenek oldu. Ticket’ler Pull request oldu..
Bkz: https://core.trac.wordpress.org/tickets/latest
Bkz: https://github.com/steemit/steem
Bir dönem

while {
}

yazmak moda iken bir dönem

while
{
}

şeklinde yazmak moda olabilir. Böyle detayları vazgeçilmez kurallarmış gibi gören arkadaşlar için, hayatlarında kolaylık ve sabır diliyorum. Evet detaylar bazen Çok önemlidir, ama bazen de Hiç önemli değildir. Rahat olun 😉

HC-SR04 Çalışmıyor, Donuyor, HC-SR04 Serial’e bilgi göndermiyor

Sanırım “Çalışmıyor” adında bir arama motoru olsa ve forumlardan ve bloglardan, sorunlara ait çözümleri listeliyor olsa, paralı bile olsa kullanılabilirdi 😉
// Özellikle böyle ara başlık atıyorum ki, hata-çözüm arayan başkaları da basit bir sorun için saatlerce/günlerce uğraşmasın.

Eksi 2) Mekanın duvarlarına çarpmadan kendi halinde takılan robotlar yapmak HC-SR04 popüler bir modül. Bununla birlikte, HC-SR04 ya da diğer kankaları HY-SRF05 ve US-015  ile “hassas” işler yapmak pek iyi sonuçlar vermeyebilir. Zira olayın temelinde SES var ve sesin kendisi zaten saniye de ~340 metre ancak gidebiliyor. -Devrimsel bir şeyler söz konusu değilse- Atıyorum alarm için ya da ne bilim metal levhayı  görünce vidalama yapacak bir cihaz için; Lazer kullanan bir sistem ile ses kullanan bir sistemin atışmasından bahseden birisi ancak fıkra anlatıyor olabilir 🙂

 

HC-SR04  , HY-SRF05 ve US-015 ‘in kendi aralarındaki kıyaslaması ise şöyle;

 

Şayet, HC-SR04 ‘ten bir tepki alamıyorsanız şunları kontrol edin;

Trigger ve Echo pinleri doğru mu?
Arduino kodlarına sesver=2 ; sesal =3 yazıp sonra 2 nolu pini Echo‘ya bağlarsanız olmaz.
Trigger: Tetikleyen yani sesi gönderen, yani hoparlör
Echo: Yankıyı alan, yani mikrofon

Güç girişleri doğru mu?
Cihaz 5 Volt ile çalışıyor. 3.3 ile değil.

Sinyal aralıkları uygun mu?
Daha önce yüksek bir aralık kullanırken, yanıt alamamıştık. Kablolardan başlayıp, taşırken sensörü bozmuş olabileceğimize dair pek çok ihtimali düşündük. Ancak tetikleme ve yankı süreleriyle oynayınca bilgi gelmeye başladı.

Ayrıca kütüphane gerektirmeyen pulseIn fonksiyonunu kullanırken HIGH durumuna bakıyorsanız,
ses göndermeden önce ve sonra her ikisin de
Trigger’ı / Sesver pinini LOW yapmanız daha sağlıklı olabilir.

Tabi baştaki tanımlamalarımız ve Setup kısmındaki kodlarımızı da unutmamak lazım. (Steemit üzerinde düzgün görünmüyorsa buraya tıklayın)

 
const byte sesver = 3, sesal = 4;
int sure;
float mesafe;


void setup()
{
Serial.begin(9600);
pinMode(sesver, OUTPUT); pinMode(sesal, INPUT);    
}


void mesafeOlc() {
  digitalWrite(sesver, LOW);
  delayMicroseconds(2);
  digitalWrite(sesver, HIGH);
  delayMicroseconds(10);
  digitalWrite(sesver, LOW);
  sure = pulseIn(sesal, HIGH);
  mesafe = sure / 2 / 29.1;
  Serial.print("uzaklik: "); Serial.println(mesafe); }

 

Ayrı bir mevzu olduğu için şu an detaylarına girmeyeceğim anacak tanımlama yaparken, internetteki çoğu örneğin aksine
int sesver = 3;
yerine
cost byte sesver =3;
kullanmış olduğumuza dikkat edin 😉


görsel
Burada anılanlar bir yazılım tavsiyedir. Yapacak olduğunuz işlerde kullanmanız size zaman kazandırabilir.
Anladın sen 😉

Isı, hareket ve zamana duyarlı termostat yapalım: AHMT

Açılımı ve kılsatması imalı isimleri sevmişimdir. Nasipte böyle bir isim üretmek de varmış 😉
Advisable thermostat for Heat, Moving and Time = AHMT
Isı, Hareket ve Zaman’ı akıllıca kullanma termostatı.

Aynı zamanda çalışmayı beraber yaptığımız arkadaşım Ayhan’ın ve benim ismimden harfler var.
Ve de neredeyse AHMET diye okunabilir 😉

Parça kısmı, isim gibi yormayan bir şekilde olmadı. İki hafta önce, normalde çok basit bir şekilde çalışması gereken Hareket sensörü çok naz yaptı. Neredeyse 9 saatin sonunda elimizde bolca “şu yüzden olmamış olabilir” ihtimalleri birikmişti.

 

 

Geçtiğimiz haftaysa, hareket sensörü PIR yerine ultrasonik ses sensörü HC-SR05/04 kullanmaya karar verdik. Bu aslında 140 derecelik görme açısını, 5-15 derece sayılabilecek düz bir hatta düşürmek demekti. Odanın herhangi bir yerindeki hareket yerine, sensörün önünden geçilen hareketleri algılayacak demekti. Pek istediğimiz bir çözüm değildi ama “Mükemmel, iyiyi engeller. Hem iphone’dan toyota’ya herkes mevcut ile bir şeyler yapıyor zamanla geliştiriyor” düşünceleri eşliğinde kodlamaya başladık..

Dün itibariyle PIR / Hareket Sensörü olayını çözdük; teknik bi hatadanmış. Aynı model sensörden başka bi tane takınca hemen çalıştı.

Tabi, dün ve geçen hafta sonu arasında, ultrasonik mesafe sensörü de devreye girdiği için, kodlara o da misafir olacak 🙂 Zaten şu an very beta olduğu için, ilerledikçe mevcut kodlar adım adım değişecek.

Sıcaklık için gayet popüler olan LM35 kullandık.

 

Zaman içinde “gerçek zaman saati modülü” kullanacağız.


 

“Termostat diye bir şey var. Hatta şu anda kablosuz olarak bi kenarda duruyor. Kombinin sıcaklık ayarını oradan yapıyoruz, zaten.”

Sizin derdiniz ne?

diyebilirsiniz. Bir; Tekerleği KENDİMİZ yapmak istiyoruz. İki; Taş/Tahta/Metal/Kauçuk/Küre.. benzeri tekerleğin gelişerek yeniden icat edilmesi durumunun gelecekteki adımlarından birinde yer almak istiyoruz. Üç.. Dört..

Bu çerçeveden bu örneğin amacı şu;
Mevcut termostatlar, sıcaklığı istenen aralıkta tutmak üzere yapılmış. Isıyı ölçüyor, atıyorum 23 dereceden yüksekse kombiyi kapatıyor, 19 dereceden düşükse açıyor.

Biz ise bi tık daha ileri gitmek istiyoruz;
Oda sıcaklığı 22 derece gibi istenen bir aralıktaysa ama evde kimse yoksa sıcaklığın 22 olmasına gerek yok. Bir süre boyunca hareket olmazsa 21’e düşürsün, bir süre daha olmazsa 20’e düşürsün.. ta ki belirlenen minimum seviye neyse oraya kadar.

Ayrıca, isteğe bağlı olarak, gece zaten herkes yorganın altında iken dışarısı 1-2 derece düşük olabilir.
Ve de yine mevcutta bulunan, her peteği ayrı ayrı yöneten sistemlere ilave olarak; mutfak 1 derece düşükte 21 derecede, koridor 2 derece düşükte 20 derecede yanıyor olabilir ama yine aynı mantıkla, hareket yoksa 20 de yanmasına da gerek olmayabilir. Ayarlanan minimum sıcaklıkta yanabilir.

İyi ama böyle, İşten/okuldan gelince ev soğuk olur?

AHMT üzerindeki gerçek zaman saati modülü bu yüzden var.  18.30’da evde oluyorsanız, siz gelmeden önce,  18.00’da çalışmaya başlayıp sıcaklığı 22 derece olacak şekilde ayarlayabilir 😉

Normal kullanımdan termostata geçmekle bizim doğal gaz faturası ~%25-30 civarında düşmüştü. Kombiyi AHMT yönettiğinde daha da düşebilir 😉

// ..mi? göreceğiz.


görsel 1, görsel 2, görsel 3, görsel 4, görsel 5

Esp8266 Notları

ESP8266 Nar gibi bir modül.
Kendisi çıtı pıtı, ufacık, tırnak kadar bir şey ama içinden Godzilla Sürüsü çıkıyor 🙂

Hal böyle olunca işler bazen fena karışabiliyor. Ki çoktan karışmış durumda.
İnternet çitneşip kör düğüm olmuş gibi. Sağlıklı bilgiye ulaşmak zor. Normalde çalışacak kodlar ya da bağlantılar, bilgi karmaşası yüzünden çalışmıyor.
En azından kod’dan mekatronik’e doğru yürüyen benim gibiler için.

Bu kısımdan sonrası, saatler ve saatler ve de saatlerce ESP8266 ile uğraşıp, kara deliğe düşmüş olanlar, Türkçe kaynak arayanlar ve dönüp bakmak üzere kendim için “less but more” tadında notlar.

—-

Ara sıra, bazı bazı, genellikle, sık sık, sıkılınca şu adrese uğranmalı:

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html

—-

Öncelikle Arduinodan bağımsız olarak, ESP de kendi başına programlanabilir.
Yine öncelikle ESP deyip geçildiğine bakmamak gerekir kendi içinde ESP-01 , ESP-12, ESP32 vb.. çeşitleri mevcuttur.

ESP‘nin RST/Reset pini GND‘ye bağlamak; ESP’yi yeniden başlatır
(Fabrika ayarlarına dönüş değil, kapa-aç gibi)

AT+RST komutu da ESP’yi yeniden başlatır

—-

GPIO_0 >>> GND bağlı ise;
ESP’nin kendi içine yazılım atma modu”, aktif olur

—-

Arduino’un üzerindeki Reset pini, GND’ye bağlanınca,
Arduino kendini devreden çıkarır, sadece aracılık yapar.

Arduino aracı iken, kodları ESP’ye atabilmek için
bağlantı şekli:

ESP TX >>> TX Arduino
ESP RX >>> TX Arduino
ESP GND >>> GND Arduino
ESP VCC/3.3 >>> 3.3 volt Arduino
ESP EN/CH_PD >>> 5 volt Arduino
ESP GPIO_0 >>> GND Arduino

—-

ESP’ye kod atmak için;
Arduino donanım olarak sadece aracı iken,
Arduino kodlarını yazdığımız Arduino IDE 1.8+ arayüz programı kullanılabilir.

Bunun için şu adımlar izlenir:
– Arduino Seçenekler penceresini açın
Board yönetici URLs kısmına
http://arduino.esp8266.com/stable/package_esp8266com_index.json
girin.
Araçlar > Kart Yöneticisi > Yükle seçin
çıkan pencerede ESP aratın, bulunan son versiyonunu Kurun.

Daha sonra
Araçlar/Tools > Kart/Board menüsünden,
Arduino Uno yerine ESP8266 Generic seçin.

Böylece, kodları direk ESP’ye atmış olacağız.

====================================================
========== Arduino ve AT Komutları ile =============

Arduino’ya sadece şu kodları yükleyin:

void setup(){}
void loop(){}

Bu esnada RX ve TX pinleri bağlı ol-MA-sın.

Bağlantıları aşağıdaki şekilde yaparak;
Serial Porttan “manuel” olarak AT komutları girilebilir.

ESP VCC >>> 3.3 Volt Arduino
ESP EN/CH_PD >>> 3.3 Volt Arduino
ESP GND >>> GND Arduino
ESP RX >>> RX Arduino
ESP TX >>> TX Arduino

—-
Kontrol: AT

Ağa bağlanma modu için: AT+CWMODE=1 
Ağ kurmak Ac.Point modu için: AT+CWMODE=2
İkisi birden: AT+CWMODE=3  
3 seçilirse WPA2 vb. seçenekleri de girmek gerekebilir.

Ortamdaki ağları listelemek için: AT+CWLAP

Ağa bağlanmak için: AT+CWJAP=”wifi-adi”,”wifi-sifresi”
Tırnaklar önemli. Copy paste ile tırnaklarda sorun çıkabilir. Tırnakları yeniden klavyeden girmek daha sağlıklı olacaktır.


görsel

Konuşur gibi Türkçe Kod #14: Satır Testi

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları
##3.Bölüm: kendi .tr uzantımız | ##4. Bölüm: Dil = KARAKTER yorumlayıcısı
##5. Bölüm: Donanım Sürücüleri | ##6. Bölüm: Kendi YAZ komutumuz
##7. Bölüm: Tüm harfleri 1 değişkene atama | ##8. Bölüm: Kendi komutlarımız
##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli | ##10. Bölüm: Tırnak
##11. Bölüm: Burası Mühim | ##12. Bölüm: Yeni Satır
##13. Bölüm: İki Satır


Hatırlarsanız İki Satır muhabbet edelim 😉 derken YAZ komutumuz ilk seferinde doğru çalışırken, ikinci seferinde doğru çalışmamıştı. Satır atlama sorununu çözünce de başka bir sorunumuz devam etmişti, cümle değişkenimizin içini silip, yeni karşılaşacağı tırnak sonrasındaki harfleri yakalaması için ayarlamıştık.

Ve istediğimiz sonucu almıştık.


 

Bir önceki konudaki çukura denk gelmemek için isterseniz yeniden testler yapalım. En basitinden 3. satırı eklersek ne olacak, 4. satırı eklersek ne olacak bakalım.

3 satır için sonucu görelim

Şansa olmadı inşallah, garantilemek için bir de 4. satırı sonrası bakalım.

 

Güzel.

Biraz abartalım ve farklı şeyler deneyelim. Mesela programcı alt satıra değil de hemen yan tarafa yeniden bir yaz komutu isterse ne olacak? Hem alta hem yana yazıp görelim.

yaz "+Merhaba Dünya"
yaz "+Nasılsın?"
yaz "-İyiyim"
yaz "-Sen nasılsın?" yaz "-Orada havalar sıcak mı?" yaz "-Burası fena"
yaz "-Hiç kış gibi değil"

Ok.

Peki javascript ya da python gibi pek dildeki noktalı virgül olayına bakalım. Alışkanlık bu ya, art arda birkaç komut yazarken aralarına noktalı virgül ; koyarsa..

bakalım..

Hadi hayırlı olsun  İlk noktalı virgülden sonrası Yok.
Dıırıt, Dırııt..

 

Olağan şüpheli noktalı virgül gibi olsa da sanki o masum gibi.

Önceki yazılarda, dosya içinde yaz geçiyor mu? Tırnak var mı diye baktık. Ancak bunların arasında/öncesinde/sonrasında gelecek karakterler için bir yol yöntem önermedik. Ve görüldüğü üzre ilk beklenmedik karakter sonrası işleme girmedi.

Fakat 😉
Bununla birlikte daha önce aldığımız bir kararın, burada sonucunu görebiliyoruz:
Hatalı olan 88$# karakterler sonrası çalışmadı ama tümden hata vermek yerine buraya kadar olan kısımları işleme aldık. Yaklaşık olarak hatanın en sonra doğru işlemden sonra olduğunu tahmin edebiliriz.
Örneğimizde, hatanın yaklaşık olarak Nasılsın? ‘ın hemen sonrası bir yerlerde olduğunu öngörebiliriz.

Hatayı bulduysak, çözüme yaklaştık demektir 😉


Görsel

Konuşur gibi Türkçe Kod #13: İki Satır

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları
##3.Bölüm: kendi .tr uzantımız | ##4. Bölüm: Dil = KARAKTER yorumlayıcısı
##5. Bölüm: Donanım Sürücüleri | ##6. Bölüm: Kendi YAZ komutumuz
##7. Bölüm: Tüm harfleri 1 değişkene atama | ##8. Bölüm: Kendi komutlarımız
##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli | ##10. Bölüm: Tırnak
##11. Bölüm: Burası Mühim | ##12. Bölüm: Yeni Satır


Daha önce Yaz komutu ve Tırnakları yakalamıştık ve arasında geçen metini, cümle isimli değişkene atamıştık. Ardından bunu da ekrana yazdırmıştık. Tek seferlik bu komut için bir sorun yoktu ancak son bölümde yeni satıra geçip, yeni bir yaz komutu verdiğimizde işler karışmıştı. Satır atlama yani \n sorununu çözdüğümüzde ise karşımıza farklı bir tablo çıkmıştı.

yaz "merhaba dünya"
yaz "Nasılsın?"

Yeni satır karakterini yok ettik ama  Merhaba Dünya ile Nasılsın birleşik olarak geldi.

Bi yerlerde araya girip müdahale gerekiyor. Foksiyonumuzun tamamına bir göz atalım:

def Oku():
UzantiKontrol()
#print okunan
harfler = list(okunan);
#print harfler
komut = ""
tirnak = "son"
cumle = ""
for h in harfler:
komut += h
#print komut
if komut == "yaz":
komut = ""
elif komut == "\"":
print "tirnak var"
if tirnak == "bas": tirnak = "son"; print "ilk tirnak"
elif tirnak == "son": tirnak = "bas"; print "ikinci tirnak"
komut = ""
elif tirnak == "bas":
cumle += h ; print cumle
komut =""
elif komut == " ": komut = ""
elif komut == "\n": komut = ""
print cumle
Oku()

//Kopyalamak için metin olması güzel ama Steemit tab’lere izin vermediği için şöyle baksak sanırım daha sağlıklı olacak:

isterseniz daha önce kontrol amaçlı koyduğumuz, “tınak var”, “ilk tırnak”.. gibi açıklamaları kaldırıp daha sakin olarak görelim.

 

Görüleceği üzre, ilk tırnak sonrası başlattığımız “cümle“, ikinci tırnağı ve sonrasında iki satırdaki ilk tırnağı da görüyor ama birleştirmeye devam ettiğimiz için, ayrı ayrı yaz komutlarının metinlerini birleşik halde çıktı alıyoruz.

Hmm..

Ne yapmalı ne etmeli..

 

🙂

“Merhaba Dünya”nın sonundaki tırnak ile “Nasılsın”ın başındaki tırnak arasında bir şeyler yapmak işimizi çözebilir sanırım. Yani şu el-if’in içi:

burada yine bir karar aşaması var.

Tırnağın kapandığını görür görmez, mevcut cümleyi hemen orada ekrana basacak mı?
yoksa,
atıyorum cümleler adında başka bir dizi içinde mi toplamak lazım?
//Bu tür seçim yapmak durumunda kaldığımız kararlarla, dolaylı olarak programla dilimizin karakteristik yapısını oluşturuyoruz sanki.

Zamanında ASP’nin tüm kodlara bakıp çıktı sunana kadar boş ve beyaz bir ekrana baktığımızı hatırladığım için, benim oyum -şimdilik- hemen oracıkta gereken işlemi yapmak yönünde.

45’e print ekleyip, 49’daki print’i kaldırıp bakalım..

Tamam gibi ama olmadı. İkinci defa ekrana basmadan önce bir de cümle’nin içini silmemiz lazım // ki yeni göreceği tırnak ve sonrasındaki metin, bağımsız ikinci bir cümle olabilsin.

Yani, cumle=”” ekleyelim:

ve bakalım:

Yey!


Görsel ;))

Konuşur gibi Türkçe Kod #12: Yeni Satır

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları | ##3. Bölüm: kendi .tr uzantımız

##4. Bölüm: Dil = KARAKTER yorumlayıcısı | ##5. Bölüm: Donanım Sürücüleri

##6. Bölüm: Kendi YAZ komutumuz | ##7. Bölüm: Tüm harfleri 1 değişkene atama.

##8. Bölüm: Kendi komutlarımız | ##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli

10. Bölüm: Tırnak | ##11. Bölüm: Burası Mühim


Bir şekilde direk bu sayfaya geldiyseniz, konuya direk buradan dalış yapsanız da olur elbet lakin olayı ince ince idrak ederek kavramak isterseniz önceki bölümlere göz atmanız daha sağlıklı olabilir.


Son konumuzda YAZ’ı yakaladıktan sonra gelmesini beklediğimiz TIRNAK işaretini yakalama olayına bakmıştık. Ardından TIRNAK sonrası başlayacak olan metin için, sıradaki her harfi karakteri cumle değişkeni içinde toplamıştık. Ta ki İKİNCİ TIRNAK işaretini görene dek.

Ve aradaki boşlukları yok etmiştik 🙂

Peki programcı şöyle bir kod yazarsa ne olacak?

Yaz "Merhaba Dünya"
Yaz "Nasılsın"

Bakalım nasıl bir sonuç alıyoruz:

What?

Ne oldu ki, ilk satırı bile göremedik? En azından sadece ikinci satırın başlayana kadar olan kısımların bir çıktısı görseydik..

Dikkatlice bakarsak örnek.tr program dosyamızda

Yaz “Merhaba Dünya”

diyor. Ancak yorumlayıcımız TAR ile yaz var mı diye kontrol ettiğimiz komut “yaz”

Yaz ≠ yaz

ASCII tablosunu incelediğimiz yazıyı hatırlarsanız, her bir küçük harf ve büyük harfi ayrı BYTE’lar ile tanımlıyorduk. Bkz: 8 bit ASCII table

Yine bir karar noktası

Programlama dilimiz küçük harf – büyük harfe duyarlı mı olacak yoksa nasıl yazdığı önemli değil mi diyeceğiz.

YAZ = YAz = Yaz = yaz = yAz = yAZ

şahsen kendi tercihim, programcının canın istediği şekilde yazması yönünde. İster YAZ der iterse yaz. Bazı dillerde bu sorun yüzünden zihnimizde Büyük-Küçük bilgisini tutmak zorunda kalıyoruz. Bkz: Serial.Println, pulseIn, digitalWrite ..

her bir IF sınamasında yukarıdaki tüm versiyonları yazmaktansa, bize gelen karakterlerin hepsini önceden küçültür ve öyle işleme alırsak daha sağlıklı olabilir.

// I harfi için korku filmi sesleri size de geldi mi 🙂

 

Tamam küçültelim de standart lowercase fonksiyonları ingilizce temelli olduğu için  IrMak kelimesini irmak olarak küçültüyorlar. Bizde küçük ı harfinin büyüğü yok, i harfinin büyüğü ise I

Kodcu tek satırda değil de iki satırda YAZ derse ne olacak derken, nereye geldik 🙂

Ok. Şu an için örnek.tr dosyamızdaki Yaz komutunu yaz yapıp sonucu görelim ve Harf Küçültme işini sonraki yazılara bırakalım.

E hani “Nasılsın?”

Onun yerine bir boşluk var sadece..

Çoğu zaman, hatanın olduğu yer aynı zamanda çözümün de olduğu yerdir.
Biz bir karakter olarak görmesek bile, NL: New Line: \n CR: Carriage Return: Satır Başı yazısından hatırlarsak, sonraki satırı belirten görüntüsü olmayan ama bit/byte karşılığı olan karakterler vardı.

Biz ENTER tuşuna bastığımızda oluşan  \n gibi  örneğin. O halde boşlukları kaldırdığımız gibi yeni satır karakterlerini de silebiliriz.

Şimdi yeniden bakalım:

Yey!
Nasılsın yazısı da geldi!
Ama öncekilerle birlikte. Çoğu çözüm yanında yeni sorun da getirirmiş 😉 Bkz: internet, tablet..


Görsel

Konuşur gibi Türkçe Kod #11: Burası Mühim

##1: Türkçe kod | ##2: TAR-Python
##3: .tr uzantımız | ##4: KARAKTER yorumlayıcısı
##5: Sürücüler | ##6: YAZ
 ##7: Harfleri değişkene atama. | ##8: Komutlarımız
 ##9: YAZ’ma şekilleri + Teknoloji Oteli | ##10: Tırnak


Önceki bölümdeki bazı kısımları açıklayarak devam edelim. Zira BURASI MÜHİM. Çünkü neredeyse YENİ BİR PROGRAMLAMA DİLİNİ ÜRETMENİN ÖZÜ burada denilebilir.

Gayet basit ama mihenk taşı hikaye burada başlıyor:

Önceki bölümlerde, örnek.tr dosyası için yazılan her şeyi harf harf parçalamış ve hepsini liste halinde harfler değişkenine atmıştık.

Ve bu harfleri TEK TEK YAN YANA GETİRİP, bize lazım olan bir komut var mı yok mu bakıyoruz.

Şimdi kodları yorumlayan pc’nin kendiniz olduğunuzu düşünün. PC ile empati 🙂

Size komut =”” denilmiş. Komut adında bir değişken var ve şu an içi boş.

Ardından komut += h denilmiş.

Yani biraz önce örnek.tr program dosyası içinde yazılmış olanların

İLK HARFİ artık komut’un da değeri. Yani komut=y

ve bakıyoruz; YAZ, TOPLA, EĞER vb.. komut olarak kullanmak istediğimiz bir terim geçiyor mu?

şu an için komut = y olduğu için
komut == “yaz” sınaması bize Hayır diyor.  FOR döngüsü içinde olduğumuz için devam ediyoruz.

komut += h gördüğümüz için komut‘umuza bir harf daha ekliyoruz ve artık komut = ya

yeniden sınama yapıyoruz;
komut, “yaz” a eşit mi?
hayır
devam..

komut += h  peki o zaman, komut = yaz

komut, “yaz” a eşit mi?
Eveet! 🙂
O halde TIRNAK aramaya başlayabiliriz. Tabi öncesinde komut‘u yeniden boşaltalım ki yeni yakalayacağımız terimler için karışıklık olmasın:

komut = yaz ise komut=”” olarak atadığımız için en baştan bakıyormuşçasına devam edebiliriz.

 

Bakalım tırnak var mı?

Varsa, bunu “tırnak var” diye belirtelim. -şimdilik tabi ki, sonra kaldıracağız-

Ve ayrıca Baştaki Tırnak mı Sondaki tırnak mı bu sorunu çözmemiz lazım:

Akış sırasına göre gittiğimiz ver her terim sonrası komut’un içini boşalttığımız için,
tırnağı ilk gördüğümüzde tırnak = bas yaparsak, az sonra gelecek olan Merhaba Dünya gibi bir METİN için hazırlık yapabiliriz 😉

Aradığımız terimi bulunca, sonrakilere hazır olması için komut‘un için boşalttığımız gibi, tırnak = bas ‘ı yakaladığımızda, sonrasına hazırlık için tırnak = son yapıyoruz.
Benzer şekilde tırnak = son ise de tırnak = bas yapıyoruz.

Peki!
tırnak = bas ise cümle başlıyor demek, o halde yeni gelecek her harfi cümle değişkeni içinde toplayabiliriz 😉

Güzel.

Şimdi önceki bölümlerde konuştuğumuz Boşluğu Yokluğa eşitleme olayını yapalım 😉

ve ardından döngünün dışından da cümle‘nin on halini ekranda görelim.

 

Çarşambanın gelişini perşembeden tahmin edebilenler için, “Yeni bir Programlama Dili nasıl yazılır?” sorusuna teknik manada mühim bir açıklama getiren kısım burada yazılanlar. Zira bundan sonraki çoğu şey
for h in harfler döngüsü içinde dönüp duracak. Ve her döngü içinde YAZ var mı KIŞ var mı 🙂 TOPLA var mı ÇARP var mı diye bakıp duracağız.

Canınızın çektiği başka komutlar varsa  kurgusunu burada yapabilirsiniz 😉


Görsel

Konuşur gibi Türkçe Kod #10: Tırnak

##1. Bölüm: Türkçe kod yazma.

##2. Bölüm: TAR-Python ayarları.

##3. Bölüm: Kendi .tr uzantımız.

##4. Bölüm: Dil üretmek = KARAKTER yorumlayıcısı yazmak.

##5. Bölüm: Donanım-Yazılım kesişimi = sürücüler.

##6. Bölüm: Kendi YAZ’ımız.

 ##7. Bölüm: Tüm harfleri bir değişkene atama.

 ##8. Bölüm: Kendi komutumuz.

 ##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli


Son yazıda sadece kod yazmak değil farklı kararlar da almak gerekiyordu. İster istemez diğer dillerdeki YAZ’ma şekillerine yeniden baktım.

Mesela, Basic‘te Merhaba Dünya şöyle yazılıyormuş:

PRINT "Hello, world!"​

Ataların lisanında 😉 ise şöyle
#include
int main(void)
{
puts("Hello, world!");
}

Daha genç versiyonu C++ şöyle
#include
int main()
{
std::cout << "Hello, world!
";
return 0;
}

more+

Görüleceği üzere aynı kaynaktan beslenen iki dil için bile yazım farkları var. Üstelik sadece int main gibi hazırlıklık kısımları değil, direk YAZ işlemini yapan kısımlarda da farklılık var.
puts ya da std::cout <<

Web ile birlikte zirve yapan JavaScript’te ise document.write(‘Hello, world!’); şeklinde.

Her birinde faklı bir şekil söz konusu. Son örnek olarak Logo’da tırnak yerine köşeli parantez kullanılmış: print [Hello, world!]

Buradaki TIRNAK yerine Köşeli parantez kullanımı; önceki yazıda @kagantrky ‘in da katkılarıyla incelediğimiz durumlar için cesaret verdi. Bir dilde ekrana çıktı almak için puts kullanmak gerektiğini öğrenmek zorundayken bir başka dilde aynı işlem için [  köşeli parantez  gerektiğini bilmek/öğrenmek zorundayız.

E madem, yeni bir dil için bazı yeni şeyleri öğrenmek zorunlu o halde TAR için de yeni şeyler pek ala söz konusu olabilir 😉


İsterseniz önce normal yoldan bakalım.

Yani yaz "Merhaba Dünya" şeklinde bir yazım için TIRNAKLARI ve ebetteki arasında METİNİ tespit etmemiz lazım.

A’ a! Yeni bir sorunumuz var.

 

İlk tırnak da ikinci tırnak da aynı şekilde: "

O halde

  • TIRNAK ile İLK karşılaştığımız anda bunun bilgisini bir yerde tutmamız lazım
  • Ve hemen içindeki harfleri bir CÜMLE olarak birleştirmemiz lazım
  • CÜMLEYE eklemeye devam etmeli
  • Ta ki İKİNCİ TIRNAK karşısına çıkana kadar
  • Her tırnak ile karşılaşmada bunun HANGİ TIRNAK olduğu bilgisini güncellememiz lazım

Tabiki bir de BOŞLUK var. ”
Bir şeyin kıymetini yokluğunda anladığımız gibi YAZ’ın bittiğini sonbaharın/BOŞLUK’un gelmesinden anlıyoruz ki YAZ tek başına bir kelime olabilsin.
Ama aynı zamanda YAZ’da sonra SADECE bir boşluk HEMEN ardından TIRNAK şartı koşmak da gıcık edici olabilir.
Bununlabirliktebilgisayarınkelimeleriayırtetmesi için boşlukgörmeihtiyacıolmayabilir; )
Bu yüzden boşluğu yok edebiliriz // Boşluğu yok etmek.. felsefik bi şey gibi durdu 🙂


TIRNAK hangi tırnak bilgisini tutmak için tırnak adında
ve tırnakların arasındaki metini oluşturup saklamak için cumle adın da değişkenler atayalım.
son/kapanış bir tırnağı görmüş ve şimdi karşında çıkanı ilk/başlama tırnağı kabul etmesi için tırnak=”son” yapalım.

Daha sakin bir görünüm için bazı printleri etkisiz hale getirelim.

şimdi
y
ya
yaz
yaz ”
yaz “M

akışı içinden YAZ ve TIRNAK yakalamak için oltamızı atalım 😉

dikkat edilmesi ve anlaşılması gereken kritik noktalardan birisi de

40. ve 46. satırlarda gördüğümüz komut=”” ataması, komut sürekli elimizde tuttuğumuz ve içine baktığımız bir değişken olduğu için HER KOMUT ya da işlemeden üzerinden geçtiğimiz HER KARAKTER sonrası mevcut içeriğini yokluğa eşitliyoruz. //Bi felsefik söz daha 🙂

 


Görsel

Konuşur gibi Türkçe Kod #9: YAZ’ma şekilleri + Teknoloji Oteli

##1. Bölümde Türkçe komutlarla kod yazma düşüncesini ele almıştık

##2. Bölümde TAR için gerekli alt yapıyı hazırlamıştık

##3. Bölümde Kendi .tr uzantılı dosyalarımızı TAR’a argüman olarak çağırmıştık

##4. Bölümde Yeni bir Dil yaratmanın, özünde KARAKTER işlemeye dayandığını söylemiştik

##5. Bölümde Donanım-Yazılım etkileşimi incelemiştik

##6. Bölümde İlk program dosyamız Örnek.tr’yi yazmıştık ve TAR bunu çalıştırmıştı.

 ##7. Bölümde Program dosyamızın içindeki her bir karakteri UTF-8 olarak bir değişkene atamamıştık.

 ##8. Bölümde Program dosyamızdaki YAZ gibi bir komutu nasıl ele almamız gerektiğine değinmiştik.


[West World hakkında Spoiler İçerir]

“Önceki bölümlerde neler oldu” şeklinde özetlemeden başlayınca,
West World’ü son bölümden açıp, Dolores Abernathy,  Dr. Robert Ford‘u vuruyor.”
demiş olacakmışım gibi hissediyorum.

Evet, bu da “..önce bir çerçeve çizmek ve onun üzerinde konuşmak lazım.. Şimdi o tarihlerde..” diye söze başlayıp, reklam arasından sonra günümüze gelebilen konuşmacılar gibi oluyor. Fakat zemin olmadan pat diye;
“Afrika, Mars.. bunları herkes biliyor. Zaten Tesla’nın işi sadece motor yapmak değil bize bir ufuk da çiziyor”
demeye benziyor. Tesla ne/kim? Arfikayla ne alakası var , Afrikanın Marsla ne alakası var..

Neden önceki yazılara atıf yapmak istediğimi anlatabilmişimdir umarım.

Anyway..

Son yazıda bahsettiğimiz, YAZ bilgisinin bize farklı geliş şekilleri yüzünden gol yememek için çözüm arayalım.

İlk akla gelen: YAZ "Merhaba Dünya"

Gelebilecek olan diğer farklı şekiller:
1- YAZ YAZ “Merhaba”
2- “Merhaba” YAZ
3- Yaz “Merhaba” Yaz “Nasılsın” Yaz “Ne var ne yok”
4- Yaz “Mevsime bakmaz, yaz kış hep roman yazardı”
5- “Eve girer girmez “Ayaz‘a da yemek ayırdınız mı” diye sordu” yaz

Birinci durum pek önemli değil zira ” YAZ + Metin “ bloğuna bakacağımız için ilk YAZ geçersiz olacak. [hatta, hata kodu bile verilmeyebilir 🙂 ]

İkinci durum, İngilizce gibi günlük konuşma dillerinde ve hayliyle programlama dillerinde pek rastlanan bir durum değil ve olmaz da. Fakat Türkçe gibi YÜKLEMİ SONDA olan bir dil yapısı için bunu ciddiye almak isteyebiliriz. Ve TAR ile bir şekilde bunu başarabilirsek, uzun vadede Pardus’dan daha faydalı bir şeye imza atacak olabiliriz 😉

//Havaya girdim şimdi 🙂 Bunu ciddi plus++ düşünelim derim 😉

Üçüncü durum, ilerleme adımımız. Çünkü hemen hiç bir program tek satır komuttan oluşmayacağına göre, çok sayıda YAZ, çok sayıda TOPLA, BÖL.. komutları olacak.

Bi karar verme noktası daha..
Peki biz ne yapacağız? İlk YAZ komutundan hemen sonra ekrana “Merhaba Dünya” yazıp, ikinci YAZ komutuna geçip onu ekrana yazıp, TOPLA komutunu işletip o anda toplayıp devam mı edeceğiz..
Yoksa programın tamamına bakıp, sonrasında başa dönüp komutları sırayla işleyecek miyiz.

Yani;
Komut’u yakaladığın anda gerçekleştir, Komut’u yakaladığın anda gerçekleştir = komut > işle, komut > işle..
ya da
Komut’u yakaladığın anda depola, devam et ve Komut’u yakaladığın anda depola.. sayfa sonuna gelince, depolanan komutları sırayla gerçekleştir = komut > depola, komut > depola .. toplu halde işle..

İlerde fonksiyonlar da işin içine girecek ve nasıl düşünmem gerektiğini bilmiyorum. Ve kestiremiyorum.

Sadece atıyorum 1000 satırlık bir kodda, sonradan üstteki kısımlarda düzenleme gerektiğinde -ki genelde bi yerlerde değişiklik gerekir-  ilk yöntem daha hızlı olur gibime geliyor. Diğer yandan objelerin RAM’de saklanması gibi mevzular var ki o kadar derine girersek nasıl geri toplanır hiç bir fikrim yok.


Şöyle bi Teknoloji Kompleksi/Oteli olsa,
insanlar fikirlerini sunsa, çokça fikre ve sahiplerine şans verilse,
kabul edilenler, yaptıkları yazılım / devre / robot / oyun / uygulama ayağa kalkana kadar gelip orada 1 ay / 1 sene kalsa,
Yemek + PC, Yazılım, Donanım, Devre, Sensör  ihtiyaçları karşılansa,
İlgili fikir/proje; Orkestra, Çizer, Senarist, Yönetmen, Modacı, Malzeme mühendisi/Kimyacı, Biyolog, Tasarımcı, Fotoğrafçı, Makina mühendisi, Psikolog/Sosyolog.. gibi multi disipliner çalışma gerektiğinde, bu kişiler de ihtiyaçları karşılanarak burada ağırlansa..

..
..

Buranın taş çatlasa büyük bihastanenin masrafı kadar masrafı olur. Ama buradan çıkacak 3-5-10 sağlam proje, değil hastane, 3-5 şehri topluca emekli edecek ekonomi yaratabilir.


Böyle bi yer olsa, yukarıdaki neyi seçmek gerektiği sorusu bi çay sohbetine çerez olur 2 dakika yanıt bulurdu sanırım. Fakat şu an için benim biraz araştırma yapmam gerekecek.


 

Dördüncü durum, Dikkat edilirse YAZ kadar önemli olan diğer şey TIRNAK. Ayrıca Tırnağın ne zaman başlayıp, ne zaman bittiği de mühim.

Beşinci durum, gelsin danteller gitsin iğne oyaları 🙂


Görsel

Konuşur gibi “Türkçe” Kod #8: Komut

##1. Bölümde Kod yazarken Türkçe komutlar/terimler kullanma fikrini üzerinde durmuştuk.

##2. Bölümde TAR’ın -şimdilik- gerekli olan  Python’u kurmuş ve Path ayarlarına bakmıştık.

##3. Bölümde Kendi dosya uzantımızı .tr olarak belirlemiştik bunu TAR’ın çağrılabilmesini sağlamıştık.

##4. Bölümde Kendi Programlama Dilimizi yapmak demenin KARAKTER yorumlayıcısı yazmak olduğundan bahsetmiştik.

##5. Bölümde Digital 0-1 ile fiziksel bir parçanın etkileşimine değinmiştik.

##6. Bölümde .tr program dosyamızın içindeki YAZ komutumuzu koşturmuştuk.

 ##7. Bölümde .tr dosyamızın içinde tüm harfleri UTF-8 olarak bir değişkene atamamıştık.


Tüm harfleri bir değişkenin içine aldığımıza göre, sırasıyla her birine bakabiliriz. Dahası belli şartlara göre art arda gelme varsa, durumdan kendimize vazife çıkarabiliriz 😉

//”liseliler buradaki espriyi anlamaz” demek istiyorum 🙂

Ne demek istiyorum;
öyle rasgele yzbzey syyuzs dizilişi değil de cümlenin içinde y+a+z dizilişi varsa, bu bizim için bir komut, yerine getirilmesi gereken bir emirdir.

o halde şu yan yana dizilişleri bir de pratikte görelim:

Dikkat edilirse komut adında Null bir  değişken oluşturduk. [Bu arada “Null” kelimesinin; Almanca’da “öyle hiç bir şey ki, sıfır bile değil” manasına da geldiğini öğrendiğim günden bu yana, çok severim kendisini 🙂 ]

komut değişkenini, fonksiyonun dışından da kullanmak için global yaptık.

sonra da sırayla tüm harfleri, başta null olan komut değişkenimize EKLEYEREK bi çıktısını aldık.. görelim Uğur’cuğum

ilk yazıda tam bu olayın mantığından / teorisinden bahsetmiştik.
Şimdi de pratiğini görmüş olduk.


İç içe danteller..

Buraya kadar güzel. İşler dantel dantel olmaya bundan sonra başlayacak.

Yukarıdaki .giften görüldüğü üzere ilk satır işimize yaramaz.
3 satır, gelmesini beklediğimiz komut(lardan birisi)

Hemen
if komut == "yaz":
bişeyler yap
diyebiliriz amma lakin ki farklı senaryoları da düşünmek zorundayız

 

 

Meselam, şu bayan yaz komutunu verdikten sonra, tek boşluk bırakmış olabilir, şu bayansa beş boşluk bıraktıktan sonra “Merhaba Dünya” yazabilir. Tabi bir de şu bayanda tırnak içine “Merhaba Yaz Güneşi” yazmış olabilir.

Öyle bir şey yapmalıyız ki;
* White Space’leri egale edelim
* Komut nerede başlayıp bitiyor, tırnak nerede başlayıp bitiyor bilelim
* Yazılacak cümle içinde YAZ ve başka komutlar geçiyorsa, taklaya gelmeyelim
* İki+ defa art arda YAZ ile çıktı almak isteniyorsa, kontrpiyede kalmayalım.


Görsel