10 Dakika 7 Saniyede Kendi Github Sunucumuzu Kurmak

"21 Günde Python Öğrenin" veya "24 Saatte Java" gibi kitapları görmüşsünüzdür ve sonuç, hiç de kitabın adında yazdığı gibi olmaz. Bu başlıkta yazan da aslında doğru değil ama bir farkla: zaman kısmı doğru, GitHub kısmı yalan... Aslında GitHub değil, web arayüzü GitHub'a çok benzeyen, kendi Git sunucumuzu kuruyoruz.

Saat tutup denedim ve gerçekten de 10 dakika 7 saniye sürdü. Ve daha da güzeli, bütün yapacağımız, sadece 2 komut yazıp basit bir web formunu doldurmak...

Bu bilişime fazla kafa yorarsan, sıyırırsın
Aslında yapılacak işlem hiç de basit değil. Birazdan yazacağım birkaç basit komutu çalıştırdığınızda, arkaplanda şunlar gerçekleşecek:
  • host makinede, dışarıya kapalı sanal bir network oluşturulacak
  • bir Linux container (LXC) oluşturulacak ve ayarlanacak
  • veritabanı sunucusu kurulacak
  • Reverse proxy olarak çalışacak bir Nginx sunucu kurulacak ve ayarlanacak
  • Git sunucu kurulacak
  • iptables ile NAT ayarları yapılacak
  • Self signed SSL sertifikası oluşturulacak
  • vs vs vs
Şimdi bütün bu adımları detaylı detaylı yazarsam ne olur? Değerli bir büyüğümüzün dediği gibi kafayı sıyırılsınız. Büyüğümüz ne demiş bakalım: "Bu bilişime fazla kafa  yorarsan sıyırırsın, nimetlerinden kullanıp yararlanıp işini göreceksin. Kafayı taktın mı o zaman işin kötü."                        
                                                  
"Yok, ben illa kafayı sıyırmak istiyorum. Olayın detaylarını da öğrenmek istiyorum" dersen, kaynak kodlar açık. Dilediğin gibi inceleyebilirsin. Takıldığın yer olursa bana email at.              
                                                  
Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor              
Yalnız bu işi yapabilmek için tek bir şey gerekiyor: Debian Jessie kurulu bir makine...                                         
                                                  
"Ya şimdi kim uğraşacak Debian kurmakla" dersen, cevap yine sayın büyüğümüzden geliyor: "Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor gelen oradan işine yarayanı alıyor kullanıyor ben böyle anlıyorum. Sistematik bir şey yok. Abur cubur dolduruyorsun, herkes ihtiyacını oradan alıyor ama hiç de karışmıyor. İstediğini buluyorsun"             
                                                  
Siz de öyle yapın. Ben öyle yaptım. Gittim Digital Ocean'a, açtım Debian Jessie bir makina... Beyin bedava...

"Yok ben yine arıza çıkaracağım. Bulutsuz olmaz mı" dersen, sanal makineye, Debian Jessie kurup deneyebilirsin. Yalnız (swap dahil) minimum 1 GB RAM ayırmanız gerekiyor ve (i386 değil) AMD64 mimarisini kullanın.

Bildiğiniz gibi bilgisayarlar Binali sistemiyle çalışır
Şimdi sıra geldi mucizevi komutlarımıza... Debian Jessie makineye root olarak bağlandıktan sonra şu 2 komutu veriyoruz:

wget https://raw.githubusercontent.com/emrahcom/emrah-jessie/master/installer/ej
bash ej ej-gogs

Birinci komut, kurulumu yapacak olan Bash scriptini indiriyor. İkinci komut ise kurulumu yapıyor. Script işini bitirdikten sonra web tarayıcımızı açıp IP adresini kullanarak sunucuya bağlanıyoruz. Açılan formda sadece 2 yeri değiştirmeniz gerekiyor: Domain ve Application URL

Eğer bu sunucu için bir alan adı kullanmayacaksanız, "your.domain.name" yazan yerlere, sunucunun IP adresini yazabilirsiniz. Bu kadar...

Başka numaraların var mı
Evet, var. Aynı yöntemle kendi Gmail sunucunuzu, canlı video yayını yapabileceğiniz stream sunucunuzu, web panelden yönetebileceğiniz PowerDNS sunucunuzu veya web sitenizin önüne koyabileceğiniz WAF (web application firewall) sunucunuzu da kurabiliyorsunuz. Her biri yaklaşık 10 dakikada ve 2 komutla oluyor. Detaylar, benim GitHub hesabında var ama siz yine de detaya girmeyin, kafayı sıyırmayın.

selamlar

21 Ocak 2017

Posted In: Debian, git, github, linux, lkd

Müziğe Evet, Yağlı Saçlara Hayır

Aydınlanma
 Her şey, yeni bir eve taşınmamla başladı. Önceden iş yerine varmam 5 dakika sürüyordu. Bu süre, bir anda 45 dakikaya çıkınca aydınlanma yaşadım ve bazı insanların neden müzik olmadan yapamadığını anladım: bu yol (ve bazen de hayat), başka türlü çekilecek gibi değildi.

Aydınlanma sürecim, daha önce anlam veremedim bir çok şeyi de anlamamı sağladı. Örneğin "yolu bilmek ile yolda gitmek" aynı şey değildi. Bu koduğumun yolu, git git bi türlü bitmiyordu ama yolu bilmek için Google Map'e bakmak yeterliydi. Ayrıca o bilgenin, Ferrari'sini neden sattığını da artık çok iyi anlamıştım.

Neyse, bu yeni hayatımda artık müziğe daha çok yer verecektim. İşyerinde bilgisayar ile çalışırken de radyo dinlemeye karar verdim ve yoldayken dinlediğim Radio Slow Time'ın Internet üzerinden yaptığı yayını buldum. Artık bilgisayar başına oturunca bir konsol açıyor ve şu komutu çalıştırıyordum:


mplayer http://46.20.7.104/

Ama hayat bu kadar basit değildi ve yeni zorluklar beni bekliyordu.

Yağlı Saçlar
 İnsanlığın en büyük sorunu ile yüzleşmem de bu vesile ile oldu. Radio Slow Time, reklam kuşaklarında çağımızın vebası "yağlı saçlar" konusunda bilinçlendirici yayınlar yapıyor, bunun bir son olmadığını, hala bir umut olduğunu anlatıyordu.

Önceleri çok önemsemedim. "İnsanlar, o mucize şampuanı nasıl olsa alır, yağlı saçlar sorunu da kısa sürede çözülür" diye düşündüm ama cahil halkımız, her zamanki tavrı ile bu sorunu da görmezden geldi. Israrla o mucize şampuanı almadılar.

Artık önümde iki seçenek kalmıştı. Ya o mucize şampuanı ben alıp milletin yağlı saçlarını zorla yıkayacaktım ya da reklam kuşağı başladığında mplayer'ın sesini kısacaktım. Birinci yöntem bana pek pratik görünmedi.

Sessizlik
mplayer'ın sesini kapatmak için işimi yarım bırakıp mplayer'ın açık olduğu masaüstüne geçmek, sesi kapatmak ve tekrar çalıştığım masaüstüne dönmek iyi bir çözüm değildi. Bir kısayolla bu işi halletmem gerekiyordu.

Biraz araştırma yapınca mplayer'da slave mod diye bir şey olduğunu öğrendim. Slave moddayken mplayer, input noktasına gönderilen komutları algılıyor ve gerekli işlemi yapıyordu. Yani artık mplayer'ı şu şekilde başlatacaktım:

mkfifo /tmp/mplayer.pipe
mplayer -slave -input file=/tmp/mplayer.pipe http://46.20.7.104/


Sesi açıp kapatmak için de input noktasına (yani named pipe'a) şu komutu göndermem yeterliydi:

echo mute > /tmp/mplayer.pipe

Bu komutu, bir kısayola bağlayınca düşündüğüm oldu ama hala yolunda gitmeyen bir şeyler vardı.

Özgür İrade, Aslında Bir Yanılsama mı
"Hayatımızı reklamlar yönetiyor" derlerdi de inanmazdım. İnsanın aklı vardı, neden duyduğu bir şeyden bu kadar etkilensindi ki... Ama geldiğim duruma bakar mısınız? Reklam kuşağından kurtulacam derken farkında olmadan Pavlov'un köpeğine dönmüştüm. Reklam başlayınca otomatik olarak kısayola tıklıyordum.

Bu insanlık dışı durumdan kurtulmam gerekiyordu. Özgürlüğümü yeniden kazanabilmek için daha çok bilgi sahibi olmalı ve öğrendiklerimi eyleme dökmeliydim. Yeniden araştırmaya başladım.

mplayer çıktılarını inceleyince kanalın, yapılan yayınla ilgili bazı bilgiler gönderdiğini gördüm. mplayer çalışırken şu şekilde çıktılar geliyordu:

ICY Info: StreamTitle='"YASMIN_LE - "NO TENGO';StreamUrl='&artist=
A:1464.9 (24:24.8) of 0.0 (unknown)  0.8% 40%
ICY Info: StreamTitle='"","Title" - V1","Code"';StreamUrl='&artist=
A:1479.3 (24:39.2) of 0.0 (unknown)  0.8% 40%
ICY Info: StreamTitle='"SAM_SMITH - RITING'S O';StreamUrl='&artist=
A:1751.3 (29:11.3) of 0.0 (unknown)  0.8% 40
ICY Info: StreamTitle='"Reklam","","":';StreamUrl='&artist
A:2003.0 (33:23.0) of 0.0 (unknown)  0.8% 40%


Çıktıdan da görüleceği gibi StreamTitle kısmında yayınlanacak şarkı ile ilgili bazı bilgiler vardı. Reklam başlayacağı zaman da bu kısımda Reklam yazıyordu. Reklam yazısını gördüğüm anda mute komutunu otomatik tetikletirsem artık özgürdüm.

Konsolun Kalbine Giden Yol, Borudan Geçer
Konsolla aranız iyi ise "|" (yani pipe, Türkçe'siyle boru) ile herhangi bir komutun çıktısını, başka bir komuta girdi olarak gönderebileceğinizi biliyorsunuzdur. mplayer çıktısını bir while döngüsüne yönlendirilsem ve bu döngü içinde bazı kontroller yapıp uygun anda mute komutunu tetiklersem bu iş olabilirdi. Komutu hazırladım:

mplayer -quiet -slave -input file=/tmp/mplayer.pipe http://46.20.7.104/ | \
while read line
do
   echo $line
   [ "$(echo $line | grep -v StreamTitle)" ] && continue

   title=$(echo $line | cut -d '"' -f2)
   [ -z "$title" ] && continue
   [ "$title" = "Reklam" ] && echo mute > /tmp/mplayer.pipe
done


mplayer çıktılarını alan while döngüsü kısaca şunu yapıyordu:
  • Satırda StreamTitle kelimesi geçmiyorsa bu satırla bir işi olmadığında bir sonraki satıra atlıyordu.
  • StreamTitle kelimesi geçiyorsa şarkı adını alıyordu.
  • Şarkı adı belirlenemediyse (bazen boş geliyor) bir sonraki satıra atlıyordu.
  • Şarkı adı olarak Reklam yazıyorsa sesi kapatıyordu.

Obsesyon (Takıntı)
Israrlı bir şekilde sürekli aklımıza gelen, bir türlü engel olamadığımız, beynimizi bir tahta kurdu gibi sürekli kemiren sinir bozucu düşünce...

Yapılan klinik deneyler, düzgün çalışmayan yazılımların obsesyona sebep olduğunu ve yazılımcıların %93.27'sinin sinir bozucu (amiyane tabirle gıcık) olduğunu göstermekte... Bu son örnek de bunu doğruluyordu.

Reklam başlayınca, ses otomatik olarak kapatılıyordu ama reklam bitince otomatik açılmıyordu. Reklamın bittiğini farkedip manuel olarak sesi açmak gerekiyordu. Dolayısı ile ses kapatıldıktan bir süre sonra beynimi, "acaba reklam bitmiş midir, sesi artık açsam mı" gibi sinir bozucu düşünceler kaplıyordu. Bir yazılımcı olarak kendi sinirlerimi de bozmayı başarmıştım.

Komutu biraz düzenlemem gerekiyordu. Reklam bittiği zaman da sesi otomatik olarak açtıracaktım. Yalnız dikkat edilmesi gereken bir nokta vardı: ses zaten kapalıyken sesi kapatmaya, ses zaten açıkken de sesi açmaya kalkmamalıydım. Yoksa her tetiklendiğinde modu tersine çeviren (yani on ise off, off ise on yapan) mute komutu, yanlış çalışacaktı. Dolayısı ile mute durumunu takip etmek gerekiyordu.

Komut artık şu şekli almıştı:

MUTE=false
[ -e /tmp/mplayer.pipe ] || mkfifo /tmp/mplayer.pipe

mplayer -quiet -slave -input file=/tmp/mplayer.pipe http://46.20.7.104/ | \
while read line
do
   echo $line;
   [ "$(echo $line | grep -v StreamTitle)" ] && continue

   title=$(echo $line | cut -d '"' -f2)
   [ -z "$title" ] && continue

   if [ "$title" = "Reklam" ]
   then
     $MUTE || echo mute > /tmp/mplayer.pipe
     MUTE=true
   else
     $MUTE && echo mute > /tmp/mplayer.pipe
     MUTE=false
   fi
done


 Değişen kısımlar:
  • Named pipe (/tmp/mplayer.pipe) henüz oluşturulmamışsa mkfifo ile oluştur.
  • Reklam kelimesi yakalandıysa ve mute modunda değilse, sesi kapat.
  • Bir şarkı adı yakalandıysa ve mute modunda ise sesi aç.
Fiber Internet
Reklamları bir türlü anlayamıyorum. Mesela bi tane firma var, "fiber Internet" diye garip bir şeyin reklamını yapıyor. Reklamı yapıldığı için ben de satılan bir şey sandım, "şundan eve alalım" dedim. Firma ile görüştüm ama bizim eve getiremiyorlarmış, bize satmadılar. Halbuki sokağın başındaki laz bakkal, avokado bile getiriyor. Avokadonun bile gelebildiği bir yere, fiber Internet nasıl gelemiyor anlamadım.

Bizim iş yeri de o şeyden satın almak istemiş ama onlara da satmamışlar. O nedenle Internet bağlantım, über süper değil. Über süper bir bağlantı olmayınca sanırım mplayer, müziği kesintisiz verebilmek için buffer kullanıyor. Buffer olunca da gelen bilgi ve müzik arasında bir süre farkı oluyor. Yani "Reklam" bilgisi geldikten 5-6 saniye sonra reklam başlıyor. Oysa ki ben komutu, 21. yüzyılda çalışacak şekilde tasarlamıştım ve gecikme olacağını hesaba katmamıştım.

Durum böyle olunca İlber Ortaylı Hoca'ya hemen bi telgraf gönderdim. "Osmanlı döneminde Internet kullanımı" ile ilgili temel bilgileri aldıktan sonra bu gecikmeyi de hesaba katacak şekilde komutu düzenledim. Artık komut şu hale gelmişti:


MUTE=false
WAIT=5
echo $WAIT > /tmp/mpwait
[ -e /tmp/mplayer.pipe ] || mkfifo /tmp/mplayer.pipe

mplayer -quiet -slave -input file=/tmp/mplayer.pipe http://46.20.7.104/ | \
while read line
do
   echo $line;
   [ "$(echo $line | grep -v StreamTitle)" ] && continue

   title=$(echo $line | cut -d '"' -f2)
   [ -z "$title" ] && continue

   if [ "$title" = "Reklam" ]
   then
     $MUTE || (sleep $(cat /tmp/mpwait); echo mute > /tmp/mplayer.pipe) &
     MUTE=true
   else
     $MUTE && (sleep $(cat /tmp/mpwait); echo mute > /tmp/mplayer.pipe) &
     MUTE=false
   fi
done


Bu seferki farklar:
  • Gecikme süresi, komut çalışırken istenirse değiştirilebilsin diye, /tmp/mpwait dosyasına kaydediliyor.
  • Ses açılıp kapatılacağı zaman bu gecikme süresi kadar beklenip ondan sonra mute komutu tetikleniyor.
Mutlu Son
Sonunda istediğim olmuştu. Artık rahat bir şekilde müzik dinliyebiliyordum ama kafama takılan bir şey vardı: o mucize şampuandan ben de almalı mıydım?

28 Mart 2016

Posted In: linux, lkd, mplayer

Gerçek zamanlı bir Linux masalı

Cahil Cesareti
Bir gün Linus adında bir genç, yaşına başına bakmadan bir işletim sistemi çekirdeği (kernel) yazmaya başlamış. Cahil cesareti diye buna deniyor herhalde. Başlamış kodlamaya... Yazdıkça yazmış, yazdıkça yazmış. O sırada bir kahkaha sesi duyulmuş. Linus umursamamış, yazmaya devam etmiş. Üç bin, beş bin satır derken kodlar çoğalmaya, çalışan birşeyler ortaya çıkmaya başlamış. Bu sefer 'mikro kodla' diye bir ses duyulmuş. Sağa sola bakınmış, kimseyi görememiş. Yazmaya devam etmiş. Sonunda çalışan bir çekirdek çıkmış ortaya. Bunu arkadaşlarına göstermiş, arkadaşları çok beğenmiş. Hatta bazıları makinesine kurup kullanmaya başlamış. O bilmiş ses bi daha duyulmuş: 'mikro kodla'

Linus sağa sola bakınmış kimse yok. Başını kaldırıp kürsüye bakınca orada oturmakta olan Tanenbaum Hoca'yı görmüş.

[ Tanenbaum Hoca ] Evladım, kaç yılındayız biz?
[ Linus ] 1992
[ Tanenbaum Hoca ] 1992 yılında monolitik çekirdek yazılır mı? Ne bulduysan koymuşsun çekirdeğin içine... Kim yapacak bu kodun bakımını? Ya bi hata yaparsan, bütün sistem çöker valla
[ Linus ] Hocam iyi ama...
[ Tanenbaum Hoca ] Mikro çekirdek yazacaksın. Çekirdek dediğin ayak işlerine bakmaz. Dosya sistemini, hafızayı filan bırak da hizmetçiler halletsin. Yoksa senin çekirdek, başkalarının hizmetçisi olur.
[ Linus ] Hocam, güzel diyorsun da bak Richard Stallman Abi mikro çekirdek yazacam diye yıllarını harcadı, saç sakal birbirine karıştı ama hala ortada birşey yok. Emacs bile bitti, çekirdek bitmedi.
[ Tanenbaum Hoca ] Bak hala konuşuyor. Dua et benim öğrencim değilsin, yoksa sınıfta kalmıştın.

Linus, 'bu akademisyen tayfası adam olmaz' diye içinden geçirip, bildiği gibi yoluna devam etmiş. Sonunda ortaya oldukça yetenekli ve hızlı bir çekirdek çıkmış. GNU araçları ile de bu çekirdeği birleştirince GNU/Linux işletim sistemi doğmuş. Bu işletim sistemi çok tutmuş, her yerde kullanılmaya başlanmış.


Mühim Adamlar
GNU/Linux'un başarısı, hard real-time sistemler tasarlayan mühim adamların kulağına gitmiş. 'Şu GNU/Linux'u bir de biz görelim, belki işimize yarar' demişler. Toplanıp Linus'u ziyarete gitmişler.

[ Mühim adamlar ] Slm
[ Linus ] Slm
[ Mühim adamlar ] Senin çekirdeği, bizim işlerde kullanmak istiyoruz. Sence olur mu?
[ Linus ] Ben çekirdeğime güveniyorum. Her işin üstesinden gelebilir
[ Mühim adamlar ] Hmm, tamam öyleyse bir deneme yapalım. Şimdi ben şu topu havaya atacam, senin çekirdek yere düşmeden vuracak, tamam mi?

Mühim adam topu havaya atmış, 'pat'... Çekirdek anında havada vurmuş topu.

[ Mühim adamlar ] Hmm, güzel... Bir deneme daha yapalım.

Bir top daha atmış, 'pat' vurmuş. İki, üç derken sıra onüçüncü topa gelmiş. Mühim adam topu havaya atmış, çekirdekte hiç bi hareket yok. Herkes şaşkın birbirine bakınmış. Linus çekmiş çekirdeği kenara.

[ Linus ] Hayrola?
[ Çekirdek ] İşim vardı, topa bakamadım
[ Linus ] Nasıl bakamadın?
[ Çekirdek ] Abi, önemli işim vardı. Kesip topa bakamadım
[ Linus ] Dalga mı geçiyorsun sen benle? Bunlar mühim adamlar. Ne işin varsa kesip bunlarınkine bakacaksın
[ Çekirdek ] Kritik bölgedeyken nasıl keseyim işi
[ Linus ] Keseceksin, pre-emptive olacaksın
[ Çekirdek ] Sen bilirsin abi

Linus, mühim adamlara dönüp 'tamam hallettim sorunu, bi daha olmayacak böyle birşey' demiş. Yeniden başlamışlar top atmaya. Çekirdek pek bi pre-emptive hareket etmiş başlarda. Baya bi top vurmuş ama doksan dokuzuncu topta yine kaçırmış.

[ Mühim adamlar ] Hmm, bu olmamış, bizim işleri beceremez

deyip gitmişler. Linus ve çekirdek kalmış başbaşa.

[ Linus ] Niye kesmedin yaptığın işi
[ Pre-emptive çekirdek ] Bu sefer gerçekten çok önemli işim vardı, gerçekten kesilecek gibi değildi
[ Linus ] Ben sana gösteririm önemli işi. Seni Ingo Molnar'a göndereyim de, herbir yerini un ufak etsin. Kesilemeyecek işin kalmasın
[ Pre-emptive çekirdek ] Ama Tanenbaum Hoca demişti sana. Yıktın bütün işleri bana, hangisine bakacağımı...
[ Linus ] Sus!


Bu işi çözse çözse Kerim Yağmur çözer
Bu arada mühim adamlar da sonuçtan memnun değilmiş. Kendi aralarında durumu değerlendirmeye başlamışlar.
[ Mühim adam 1 ] Yok, bu çekirdek bizim işi görmez
[ Mühim adam 2 ] Evet görmez
[ Mühim adam 1 ] Halbuki üzerinde ne de güzel yazılımlar çalışıyordu. İşimizi görseydi, hepsi elimizin altında olacaktı
[ Mühim adam 3 ] Öyle ama monolitik yazmış çekirdeği. Bi sürü kritik bölge vardır kodda
[ Mühim adam 4 ] Evet. Kritik bölgeye girdi mi, çıkana kadar top çoktan yere düşer.
[ Mühim adam 1 ] Kritik bölgedeyken işi yarım bırakıp bizimkine bakamaz mı?
[ Mühim adam 3 ] Teoride olur ama bütün kritik bölge kodlarını baştan yazmak lazım. Çoook uzun iş ve yine de güven olmaz
[ Mühim adam 1 ] Öyleyse bu iş yatar, eski sistem devam ediyoruz
[ Mühim adam 4 ] Bi de Kerim Yağmur'a sorsak. O teknik konularda iyidir, belki aklına bir şey gelir
[ Mühim adam 3 ] Hmm soralım

Toplanıp hep birlikte Kerim Yağmur'a gitmişler.
[ Mühim adamlar ] Slm Kerim, bizim bir sorun vardı
[ Kerim Yağmur ] Evet?
[ Mühim adamlar ] Güzel bir işletim sistemi var, GNU/Linux Bizim işlerde kullanmayı düşündük ama çekirdek monolitik. Milyonlarca satır kod var içinde. İşleri toparlayıncaya kadar top yere düşüyor.
[ Kerim Yağmur ] Hmm, öyleyse QNX kullanın
[ Mühim adamlar ] QNX kullanıyoruz zaten ama GNU/Linux üstünde çok güzel yazılımlar var, onları istiyoruz
[ Kerim Yağmur ] Siz şimdi GNU/Linux üstünde çalışan servis ve yazılımları mı istiyorsunuz yoksa yeni bir gerçek zamanlı işletim sistemi mi?
[ Mühim adamlar ] Asıl istediğimiz servis ve yazılımlar
[ Kerim Yağmur ] Öyleyse iş kolay. Yazarız bir gerçek zamanlı mikro çekirdek, GNU/Linux'u onun üzerinde servis olarak çalıştırırız
[ Mühim adamlar ] O zaman GNU/Linux bizim işleri yapabilecek mi
[ Kerim Yağmur ] Sizin işleri, yazacağımız gerçek zamanlı mikro çekirdek halledecek ama GNU/Linux'da bir yanda çalıştığı için onu da kullanabileceksiniz
[ Mühim adamlar ] Linus bozulmasın kendi işletim sisteminin servis olarak çalışmasına
[ Kerim Yağmur ] Yok yahu, niye bozulsun
[ Mühim adamlar ] Adam bi garip. Zaten 'mikro' kelimesini duyunca gözü seğirmeye başlıyor, sinirli oluyor
[ Kerim Yağmur ] Tamam canım, biz de mikro değil, nano çekirdek deriz. Adını da ADEOS koyarız.

O sırada bir kahkaha sesi duyulmuş.

26 Nisan 2009

Posted In: linux, lkd, realtime

Gerçek zamanlı (real-time) sistem nedir?

İşlerini, tam zamanında yapan sisteme, gerçek zamanlı sistem denir. Dolayısı ile tam zamanında yapılması gereken işlerimiz yoksa, gerçek zamanlı bir sisteme de ihtiyacımız yok demektir.

Bir işin, tam zamanında yapılması gerekiyorsa bu iş, zaman açısından kritik bir iştir. Zaman açısından kritik işler, zamanında yapılamazlarsa başarısızlıkla sonuçlanmış olurlar.

Örneğin yemek pişirmek, zaman açısından kritik bir iştir. Bir yemek, olması gerekenden az veya çok pişirilirse, başarısızlıkla sonuçlanmış demektir. Dolayısı ile iyi aşçılar, gerçek zamanlı çalışan organik sistemlerdir.

Yalnız bu tanımda dikkat edilmesi gereken bir şey daha vardır. O da tam zamanında ifadesi ile kastedilen işin bitirilme anının, aslında akıp giden zaman içinde bir anı değil, bir süreyi ifade ettiğidir.

180°'de 45 dakika pişmesi gereken levrek buğulamayı, 44. dakikada veya 46. dakikada fırından çıkarırsak aslında hatalı birşey yapmış olmayız çünkü bu ufak sapma, kabul edilebilir düzeydedir ve kimse kalkıp da 'bu yemek iyi pişmemiş' demez. Eğer yemeği yapan, işinin ehli bir aşçı ise yemeğin, çiğ veya yanık şekilde önümüze gelmeyeceğini biliriz.

Gerçek zamanlı sistemler, latency terimi ile ifade edilen bu sapmaların, belli bir değerden küçük olacağını bize garanti ederler.


Soft Real-time ve Hard Real-time
Aşçı denilen organizmaların, yemeklerin pişirilme süreleri konusunda ne kadar hassas sistemler olduğuna değinmiştik. Peki ama aşçılar hiç mi hata yapmaz? Bir aşçı, arada bir hata yapıp yemeği hafif yaksa ne olur?

Ne olacağı, bu aşçının yemeklerini kimin yediğine bağlıdır. Eğer Sirkeci'de bir lokantada çalışıyorsa (ki burada kasdedilen Konyalı'nın aşçıları değildir) hafif yanık yemeği müşteriye kakalarsın gider, en kötü ihtimal o müşteri, bir daha lokantaya uğramaz. Yani çok da dert değil, müşterinin suyu mu çıktı? Bu gelmezse öbürü gelir.

Eğer söz konusu aşçımız, sarayın aşçıbaşısı ise ve yemeklerini yiyen padişah ise, işte o zaman durum kritiktir, hayati bir durum söz konusudur. Artık aşçıya reset mi atarlar, kazığa oturtup Youtube'da videosunu mu yayınlarlar bilemiyorum.

Birinci aşçı organizması, soft real-time sisteme; ikinci aşçı organizması, hard real-time sisteme örnektir.

İşlerimizi, belli bir sapmayı aşmayacak şekilde yapacağını bize garanti eden sistemimiz, arada sırada bu sözünü yerine getiremiyor ama bu kusurun, göz ardı edilebilir sonuçları oluyorsa, söz konusu sistem soft real-time'dır.

Sistemimiz, garanti edilen sapma aralığının asla ve asla dışına çıkmıyorsa ve bu sistemde çalışan işler, sapma aralığının dışına çıkıldığında kabul edilemez sonuçlar doğuruyorsa, sistemimiz hard real-time'dır.


Jitter
Aşçıların bir tipi vardır ki buna da jitter denir. Mutfak havalandırmasının iyi olmamasından dolayı sürekli buhar altında kalan ve yamaklığı sırasında her gün zorla üç çuval patates soydurulan aşçılar arasında sıklıkla bu tipe rastlanır. Jitter'lar yemeği, bazen az pişmiş bırakır, bazen hafiften yakarlar. Ama bazen de bakarsın en mükemmel yemekle çıkıp gelirler.

Bu tip aşçılar lokanta sahipleri tarafından pek sevilmez ve istenmezler çünkü müşteriyi kaçırırlar. Yemeği hep pişkin yapsa sorun değil, o zaman en azından pişkin yemek seven müşteriler sürekli gelir. Sürekli az pişmiş bıraksa da sorun değil, o zaman da az pişmiş yemek seven müşterilerle idare edilir. Mutfaktan ne çıkacağı belli olmayınca, müşterinin hiçbir türü kalmaz.

Bu nedenle gerçek zamanlı sistemlerde jitter sevilmez. Sapma olacaksa bile (ki mutlaka olur, bu sadece ne kadar hassas ölçüm yaptığımıza bağlıdır) en azından sapmaların hep aynı yönde ve benzer oranlarda olması istenir; tabii garanti edilen aralığı da aşmamak koşulu ile...

Gerçek zamanlı sistem hızlı mı olmalı?
Aşçımız, evde çocuklarına yemek pişiren bir anne ise hızlı olmasına gerek yoktur, üç tencereyi kontrol altında tutabilmesi yeterlidir. Ama onlarca yemeğin aynı anda hazırlanması gereken bir lokanta söz konusu ise bunca yemeği aynı anda kontrol edebilecek ve hepsinin tam kıvamında pişmesini sağlayabilecek hızlı bir aşçıya ihtiyaç vardır.

Tabii aşçının hızlı olması, yemekleri tam kıvamında pişireceğinin garantisi değildir. Ama aynı zamanda, beş kap yemeği tam kıvamında pişirebilen bir aşçının, yeterince hızlı değilse on kap yemeği tam kıvamında pişireceği de garanti değildir.

Gerçek zamanlı sistemler, kaldırabileceği oranda iş yükleri varsa gerçek zamanlı olma özelliklerini koruyabilirler. Dolayısı ile gerçek zamanlı bir sistem kurgulanırken iş yükü, baştan kesin bir doğrulukla hesaplanmalıdır.


Gerçek zamanlı sistemde tampon (buffer) kullanımı
Börekçiler tampon ile çalışır. Bi sabah börekçiye gidip 'peynirli var mı' diye sorulduğunda '10 dakika sonra hazır' cevabı alınabilirken, ertesi gün tezgahın üzerinde tonlarca peynirli börek bulunabilir. Dolayısı ile 'bugün kesin peynirli börek yiyecem' diye börekçiye gidip oturduğumuzda böreğin ne zaman önünüze geleceğinden asla emin olamayız. Bu nedenle hard real-time sistemlerde tampon kullanılmaz.


Pre-emptive nedir?
Aile terbiyesi almamış aşçıya, pre-emptive denir. Bu aşçı tipi, yemeklerine özen göstermez, kimini yakar, kimini çiğ bırakır. Yemek diye çiğ tavuk sunduğu bile görülmüştür ama ne zaman ki kapıdan yağlı bir müşteri girer, hemen Oktay Usta kesilir. Bu müşterinin yemeklerine özel bir hassasiyet gösterir, mükemmel olması için gayret eder. Tabii bu tip bir aşçı bozuntusunun ne derece mükemmel(!) iş yapacağı malumunuz. O nedenle hard real-time dünyasında yeri yoktur, adam yerine konulmaz.

Bu yazıdan çıkarılacak sonuca gelirsek, son söz olarak şunu diyebiliriz: 'Hamburger yemeyin'

21 Nisan 2009

Posted In: linux, lkd, realtime, rtai

Twitter Auto Publish Powered By : XYZScripts.com