0%

jsDelivy

Bugün bir GitHub repositorysindeki dosyaları CDN (Content Delivery Network) olarak kullanmanın yolunu keşfettim.
Bu sayede resimleri github üzerine upload edip, CDN ile daha hızlı ve optimize
şekilde yüklenmesini sağlayabiliyoruz.

Tabi bu sadece resimler için geçerli bir yöntem değil, aynı şekilde kendi kütüphanelerinizi ve kodlarınıza da
bu şekilde, dünyanın her yerinden hızlı erişime sunabilirsiniz.

Siteniz zaten GitHub Pages üzerinde bulunuyorsa bile sitenize erişimde (arada CloudFlare gibi proxyler
kullanıyorsanız ) bir yavaşlık oluşacaktır. Kendi GitHub Pages sayfanızada da resimler, javasscript kodları için
bir CDN ile erişmek süreci hızlandıracaktır.

Avantajları

  • Hızlı erişim
  • Dünyaya geneline yayılmış bir ağdan dosya alarak gecikmelerin azaltılması
  • Kalıcılık (Dosyalar public bir repositoryde güvenli olarak saklanacak)
  • Websitelerini veya webe bağlı uygulamaları hızlandırmak için birebir.

Kullanımı

Bu şekilde GitHub reposundaki dosyanızı linkliyorsunuz. Kendisi otomatik olarak optimize ediyor.

https://cdn.jsdelivr.net/gh/{github kullanıcı adı}/{repo kodu}/{dosyanın adresi}

Tabi Branş ve versiyonda kullanabilirsiniz.

https://cdn.jsdelivr.net/gh/{github kullanıcı adı}/{repo kodu}@{versiyon veya branş}/{dosyanın adresi}

Sadece GitHub için değil, npm ve wordpress içinde kullanabilirsiniz : https://www.jsdelivr.com/?docs=gh

Örnek

https://cdn.jsdelivr.net/gh/farukcan/farukcan.net/
(Repodaki bütün dosyaları listelemek için)

(Tek bir resme erişim örneği)
https://cdn.jsdelivr.net/gh/farukcan/[email protected]/source/images/embedded/Untitled%204.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// load any GitHub release, commit, or branch
// note: we recommend using npm for projects that support it

https://cdn.jsdelivr.net/gh/user/[email protected]/file

// load jQuery v3.2.1

https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js

// use a version range instead of a specific version

https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js
https://cdn.jsdelivr.net/gh/jquery/[email protected]/dist/jquery.min.js

// omit the version completely to get the latest one
// you should NOT use this in production

https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js

// add ".min" to any JS/CSS file to get a minified version
// if one doesn't exist, we'll generate it for you

https://cdn.jsdelivr.net/gh/jquery/[email protected]/src/core.min.js

// add / at the end to get a directory listing

https://cdn.jsdelivr.net/gh/jquery/jquery/
1
<script src="https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js"></script>

Gömülü Yazılım Testi

Özet

Bu yazıda, “Gömülü yazılım nedir?”, “Gömülü yazılım testleri neden önemlidir?”, “Gömülü yazılım nasıl test edilir?”, “Gömülü Yazılımda TDD nasıl yapılır?”, “Standart yazılım testinden farkları nedir?” gibi soruların cevapları işlenmektedir.

Gömülü Yazılım Nedir?

Gömülü yazılımlar , gömülü sistem diye bilinen kontrol aygıtları ve makineleri için bilgisayar yazılımlarıdır.

Gömülü sistem bir görev için atanmış, mekanik ve elektronik fonksiyonları yerine getiren işlemciden, hafızadan, girişler,çıkışlardan oluşan bir bilgisayar sistemidir.

Endüstriyel robotlar, GPS alıcıları, Kameralar, Routerlar, Oyun konsolları, Fotokopi makineleri, Arabalar, Akıllı cihazlar, Saatler, Mikrodalga fırınları, Beyaz eşyalar, Trafik Işıkları, İHAlar, Telefonlar, Tabletler, Askeri cihazlar, Hava araçları bir gömülü sistemdir.

Son istatistiklere göre tahminen dünyadaki işlemcilerin %90’ına yakını bir gömülü sistem parçasıdır.

/images/embedded/Untitled.png

Gömülü yazılım testi neden önemlidir?

Gömülü sistemler hayatımızın her aşamasına girmiştir. Bunlardaki bir kusur, hata ve zayıflık can güvenliğimizi bile tehdit edebilecek seviyelere gelebilmektedir. Geçtiğimiz yıllarda, Chrysler adında birçok ünlü markaların sahibi olan bir firma, arabalarının uzaktan hacklenebilme zayıflığı yüzünden 1.4 milyon arabayı geri çağırmıştır. Bu arabalar yapılacak siber saldırılarla sürücüyü öldürecek ciddiyette riskler taşımaktadır.

Yine geçtiğimiz yıllarda Toyotanın güç sisteminde hiçbir test ve belgeleme içermeyen spagetti kodlar ortaya çıkmıştır.

İngiltere de satılan bir akıllı termostat sistemi, yazılımındaki bir bug sebebiyle müşterileri soğuğa mazur bırakmıştır. Bir can kaybı yaşanmasa da, bu bug bebekler için ölümcül olabilirdi.

Bir Airbus A400M uçağı, gömülü sistemindeki bir bug sebebiyle düşmüştür. Bu boyutta bir uçağın askeri mühimmat taşıması ve yerleşim yerlerine düşmesi büyük can kayıplarına yol açabilirdi.

Gömülü sistemler hastanelerde de kullanılmaktadır. Bir hastanın ilaç pompasını kontrol eden yazılımda bug bulunmuştur. Bu bug sebebiyle, hastalara ölümcül doz verilebilirdi.

Ayrıca gömülü sistemler birbirine bağlı olduğu için birindeki kusur diğerlerini de etkileyebilir. Geçtiğimiz yıllarda bir WiFi destekli Akıllı Lambada bir güvenlik açığı bulunmuştur. Bu açık sayesinde hackerlar WiFi şifresine erişip, bütün evin ağına sızabilmekteydi.

Uzay mekikleri ve roketlerde bir gömülü sistemdir. Geçtiğimiz yüzyıllarda gömülü yazılım kusurları sebebiyle, birçok uzay faciası yaşanmıştır.

Bu sebeplerden dolayı, gömülü yazılım testi, standart yazılım testlerinden ayrılır. Çünkü bir hata, kusur, açık ve zayıflık bizi öldürebilir.

Sektörlere göre gömülü yazılım test tekniği paper sayısı

/images/embedded/Untitled%201.png

Test Nedir?
Test bugların, kusurların, noksanlıkların ve zayıflıkların bulunmasıdır.

Gömülü yazılım nasıl test edilir?

Benzer bir çok yazılım test sisteminde olduğu gibi, gömülü yazılımda da test geliştirme döngüsünün ayrılmaz bir parçasıdır.

Sağlamlık için hem fonksiyonel hemde fonksiyonel-olmayan nitelikler denetlenmelidir.

Fonksiyonel Nitelik Testi, yazılım yerine getirmesi gereken görevleri kusursuz bir şekilde yapmasıyla alakalıdır. Gömülü yazılımda fonksiyonellik fiziksel çevreye bağlı kontrol ediliyor olabilir. Bu çevresel girdilerin tanımı ve aralığı açık olmalıdır.

/images/embedded/Untitled%202.png

Örnek kodda, fonksiyon çevresel bir girdi olan ivmeölçer ile kontrol edilmektedir. Fakat bu fonksiyonun ivmelenme girdilerinden biri “0” değeri aldığında bozulacaktır.

Fiziksel çevre, rastgele oluşturulan sentetik girdiler ile simüle edilebilir. Fakat bu yaklaşımda ilişkili girdi sentezlemek başarısız olabilir. Bunun önüne geçmek için bu simülasyon evrimsel veya metaheuristic algoritmalar ile yapılabilmektedir.

Gerekli olan durumlarda tüm olası girdiler test edilebilir. Fakat çok önemli olmayan fonksiyonlarda, bu yöntem maliyetlidir. (zaman açısından)

Anlaşılacağı üzere girdi uzayı ve bu uzayın test edilebilirliği ve test yöntemleri büyü önem taşımaktadır.

Fonksiyonel Olmayan Nitelik Testi , bir gömülü yazılımın birkaç fonksiyonel olmayan nitelikleri vardır. Bunlardan en önemli ve temel nitelikler : zamanlama, enerji ve güvenirliktir. ( timing, energy, reliability)

Zaman Kısıtlamaları, yazılımın görevlerini kısıtlı zamanda tamamlanmasıyla alakalıdır. Gömülü yazılımların çoğu gerçek zamanlıdır. Tepki süreleri ve gecikmeleri çok önemlidir. Örneğin bir arabanın kaza anında darbe sensörlerindeki verilere göre hava yastıklarını doğru zamanda tetiklemesi hayati önem taşır. Bir kaza olduğunun doğrulanması, emin olunması, hesaplamaların yapılması ve çok geç olmadan hava yastığın tetiklenmesi, milisaniyeler düzeyinde kısıtlı bir zamanda yapılmalıdır.

/images/embedded/Untitled%203.png

Dolasıyla bu süreleri optimize ederken, işlemcinin kod talimatları işleme süresi bilenerek yazılım geliştirilmelidir.

Her bir fonksiyon için bir “zaman bütçesi” belirlenmeli ve o fonksiyon o zamanı aşmayacak şekilde optimize edilmelidir.

İşlemciler, boolean operatorlerini çok hızlı işler, toplama işlemini çarpmaya göre daha hızlı yapar. Hafızaya erişmek bile zaman tüketir.

İşlemci-hafıza arasında zaman kaybı olmaması için işlemcinin önbelleği kullanılmalıdır.

/images/embedded/Untitled%204.png

Her bir fonksiyonun zamanını ölçen testler yazılmalıdır.

Örneğin: assert(time <¼ 1ms)

Her bir önemli fonksiyon için WCET (Worst-case execution time) yani en kötü senaryoda çalışma zamanı bilinmelidir.

Enerji Kısıtlamaları, zaman gibi gömülü yazılımda göz önünde bulundurulması gerek şeylerden biridir. Özellikle batarya kaynaklı sistemlerde önemlidir. Enerji tükenen işlemlerin, komponentlerin tüketim değerlerin testi yazılmalıdır. Zaman kısıtlamalarında olduğu gibi, enerji tüketimi içinde, WCEC (worst case energy consumption) yani en kötü enerji tüketim senaryosu ölçülmelidir.

Güvenirlik Kısıtlamaları, gömülü sistemler çoğu zaman fiziksel çevreyle etkileşim içindedir. Fiziksel çevreden sensörler ile güvenilebilir veriler elde etme çalışır. ( jiroskop , ivmeölçer, kablosuz iletişim vs. ) Ancak bu sensörlerden ve alıcılardan tutarsız veriler alınabilir. Ağda veri paketleri bozulabilir, kaybolabilir. Çoğu sensör kusursuz değildir ve hata payları vardır. Ayrıca daha tutarlı, kaliteli sensör ve alıcı sistemler pahalıdır. İşte burada bu çevresel verilerin kabul edilebilir tutarlılık seviyeleri belirlenmeli ve ona göre bir yazılım geliştirilmelidir.

Test Metodolojilerin Kategorizasyonu

/images/embedded/Untitled%205.png

/images/embedded/Untitled%206.png

Kara-kutu Soyutlaması: Sistem kara kutu gibi davranır. Test senaryoları örnekler ve rastgele girdiler ile oluşturulur. Sistemin gereksinimleri test edilir. Fonksiyonlar test edilir. Sık rastlanmayan uç senaryolar test edilemeyebilir.

/images/embedded/Untitled%207.png

Gri-Kutu Soyutlaması: Kara-kutu ve Beyaz-kutu yaklaşımın karışımı olarak düşebilir. Ancak sistem kara kutu gibi davranmış, bir model gibi temsil edilir. Bilgiyle alakalı özellikler test edilir. Testler arama uzayına göre oluşturulur.

Beyaz-kutu Soyutlaması: Bütün kaynak kodunun ve yollarının test edildiği bir işlemdir. Girdi uzayına göre testler yazılır. Daha çok sistem yapısı test edilir. Bu yöntemde eksik özellikler tespit edilemez.

/images/embedded/Untitled%208.png

Yapısal olmayan yaklaşımlar

Bu yöntemlerde bir düzel ve yapı yoktur. Testin kalitesi testi yapana bağlıdır. Yazılımın ne kadar test edildiğini bilmek zordur. Bu bu testin sonuçları objektif değildir. Çok taraflı ve görecelidir.

Smoke Testing (Duman testi)

Yazılımın bir çok ana fonksiyonun çalıştırılıp duman çıkıp çıkmadığın test edilmesidir. (Bu daha hardwarelar için yapıldığı böyle tanımlanıyor. Tabi duman çıkıp çıkmaması değil, fonksiyonu yerine getirip getirmemesi test edilir)

Geniş ve sığ bir yaklaşımdır

Exploratory Testing (Keşifsel yaklaşım)

Uzman bir tester, sistemin açıklarını bulmayı sistemi alt etmeye çalışır.

Learn(Öğren), Design(Tasarla), Execute(Uygula), Analysis(Sonuçları analiz et) diye 4 aşaması vardır.

Bu çok dağınık bir yöntemdir.

Testing Coverage

Bir yazılımın, test senaryolarının yüzde kaçını başarıyla tamamladığını gösteren değerdir.

%100 coverage, yazılım 100% test edilmiş olduğunu göstermez, çünkü test-caselere bağlıdır.

Aynı şekilde 100% test edilmiş bir yazılım 100% güvenli de değildir.

Test geliştirme döngüsü

TDD (Test Driven Development)

  1. Testleri oluştur.
  2. Bütün testleri çalıştır, hatalı olanı gör.
  3. Ufak(!) değişiklikler ile hatayı düzelt.
  4. Testi yeniden çalıştır. Testin geçildiğini gör.
  5. Testleri refactor et. Fazlalıkları kaldır.

/images/embedded/Untitled%209.png

TDD ve Gömülü Yazılım

  • Testlerde donanıma bağlılık vardır.
  • Gerçek zamanlılıktan gelen zaman kısıtlamaları kısıtlamalar vardır.
  • Sınırlı bir hafıza vardır. (Normal yazılama göre)
  • Pek OOP(Nesneye yönelimli programlama) kullanamazsın.

V-model

/images/embedded/Untitled%2010.png

Unit Test

Yazılımın her bir çalıştırılabilir fonksiyonunun test edilmesidir.

Integration Test (Subsystem Test)

Yazılım her modülünün test edilmesi ve bu modüllerin uyumluluklarında test edilmesidir.

Software Test (System Test)

Sistemin bir bütün olarak test edilmesidir.

Acceptance Test

Müşteriyle beraber yapılan, yazılım kabul edilebilirliğinin testidir.

Emulated Target Board

Gömülü yazılımlar test edilirken ve geliştirirken, sanal donanım kartları kullanılır. Çünkü bir hata yüzünden kart bozulabilir ve kullanılamaz hale gelebilir.

Sanal kartlar yoksa, bu kartları mocklayan bir yazılım yazılarak testler çalıştırılabilir. Fakat bunu donanımdan bağımsız yazılım parçaları için yapmak gerekir.

/images/embedded/Untitled%2011.png

Sunum

Embedded Software Testing Sunum

Kaynakça ve İleri Okuma

On Testing Embedded Software
Abhijeet Banerjee, Sudipta Chattopadhyay†
, Abhik Roychoudhury

What we know about testing embedded software?
Vahid Garousi, Hacettepe University and University of Luxembourg
Michael Felderer, University of Innsbruck
Çağrı Murat Karapıçak, KUASOFT A.Ş.
Uğur Yılmaz, ASELSAN A.Ş.

Automating Embedded Software Testing on an Emulated Target Board
Jooyoung Seo, Ahyoung Sung, Byoungju Choi, Sungbong Kanga
Dept. of Computer Science and Engg., Ewha University, Seoul, Korea
Mobile Solution, System LSI Division, Samsung Electronics Co., Ltd., Yongin, Koreaa
{jyseo, aysung}@ewhain.net, [email protected], [email protected]

Formal Testing Applied in Embedded Software
Li Zhen,Liu Bin, Ma Ning and Yin Yongfeng
Dept. of System Engineering of Engineering Technology
Beihang University
No.37 Xueyuan Road, Beijing, China, 100191

The Effectiveness of Real-time Embedded Software
Testing

Bo Zhang,Xiangheng Shen
Changchun Institute of Optics, Fine Mechanics and Physics
Chinese Academy of Sciences
Changchun, China

Embedded Software
Testing

Distributed Embedded Systems
Philip Koopman
September 30, 2015

Tool Support for Automated Traceability of
Test/Code Artifacts in Embedded Software Systems

Christian Wiederseiner, Vahid Garousi, Michael Smith
Department of Electrical and Computer Engineering, University of Calgary
2500 University Drive NW, Calgary, AB Canada T2N 1N4

Embedded Software Testing in Research
Environment

Marcin Bajer, Marek Szlagor, Marek Wrzesniak
ABB Corporate Research Center
Krakow, Poland

Effective Test Driven Development for Embedded Software
Michael J. Karlesky, William I. Bereza, and Carl B. Erickson, PhD

Test Driven Development for Embedded Software
James Grenning
San Jose, April 2007, ESC Class# 241

Dünyayı sadece irade gücü değiştirebilir
irade isim (ira:de) Arapça irāde
  1. isim Bir şeyi yapıp yapmamaya karar verme gücü, istenç
    Korkunç bir irade kuvveti sarfıyla baş ucundaki lambayı yaktı.“ - S. F. Abasıyanık

(TDK 2018)

 

İrade gücü , karar uygulama ve verme gücüdür ki 3 tarafı vardır ; [1]

1 - Yapmayacağım : Baştan çıkarıcı şeylere dayanmak

2 - Yapacağım : Yapılması gereken şeyleri yapmak

3 - İstiyorum : İnsanın hedef ve isteklerin farkında olması

İrade gücünün, Beynin Prefrontal Korteks‘inden geldiği düşünülüyor.

Prefrontal Korteksin önemi ile ilgili en iyi örneklerden biri beyinlerinin bu bölümü bir kaza sonucu zarar görmüş kişiler. 1848’de Phineas Gage adında sakin, saygılı, çalışkan bir ustabaşı prefrontal kortekse ciddi şekilde hasar veren bir kaza yaşadı ve bu kaza onun hayatını sonsuza dek değiştirdi. Gage’in arkadaşları artık onu tanıyamıyordu. Çünkü Gage sabırsız, çabuk öfkelenen bir insana dönüşmüştü. Bakıldığında eski Gage’in tam tersi bir insan gelmişti. Phineas Gage’in yaşadığı kaza, prefrontal korteks bölgesindeki bir hasarın karakterde nasıl bir değişiklik yaratacağına dair yüzlerce örnekten bir tanesi. İradenin mistik bir şey olmadığı, bunun yerine beynin yüzlerce fonksiyonundan biri olduğu da anlaşılıyor.“ [2]

Sol bölge iradenin “yapacağım” yönünden ,
Sağ bölge iradenin “yapmayacağım” yönünden ,
Orta bölge ise iradenin “istiyorum” yönünden sorumludur.

Bir teoriye göre :

İrade bir kas gibi onu çok kullandığınızda yoruluyor. İradenin kullanıldıkça azalan(yorulan) bir şey olduğu sonucuna varıldı. Bir içgüdüye karşı geldiğiniz her seferde, ne kadar küçük olursa olsun, irade kasını kullanıyorsunuz ve bu yüzden irade rezervini azaltıyorsunuz.

Meditasyon prefrontal kortekse kan akışını artırır. Görünen o ki, beyin kaslarla aynı şekilde adapte oluyor: Nasıl şınav çektiğinizde kol kasları kazanıyorsunuz, meditasyon yaptığınızda da öz-kontrolden sorumlu bölgelerdeki sinirsel bağlantıları geliştiriyorsunuz.

İradeyi güçlendiren şeyler

İrade bir kas gibi olduğu için güçlenmesi için çalıştırılmalı ve zorlanmalıdır. Ancak irade gücünüzü doğru zamanlarda yormalısınız. Yoksa irade yorgunluğu önemli işlerinizi aksatmaya neden olabilir. İrade gücümüzün sınırlarını bilmeliyiz. Bazen tek şey yapmak, çok şey yapmaktan daha iyi olabilir. Odağımızı asla kaybetmemeliyiz.
  1. İrade gücünü kullanırken, irade gücünü kullanma nedenini asla unutmamak, robotlaşmamak. Kendini sürekli motive etmek.
  2. Meditasyon, düşünce kontrolü, soğuk duş, bazı ibadet türleri ( başka bir şey düşünülmemeye çalışılan namaz , zorlayıcı bir oruç , çoğu budist ibadeti gibi )
  3. Dengeli ve yeterli uyumak. ( Fazla uyku, ve sabah kalkma güçlüğü irade azlığına işarettir. Karşı konulması gerekir. )
  4. Spor yapmak ve özgüven arttırmak. Spor, özgüveni arttıracağı için karar alırken daha az çekiniriz.
  5. Beyin için spor yapmak. Beyni kullanmak, kitap okumak, düşünmek. Sudoku çözmek.
  6. Düzgün ve doğru nefes olmak. Stresi yenmek. Önemli durumlarda ve aşırı uç duygular yaşadığında (korku,heyecan,mutluluk) , 5 saniye durup nefes almak ve sakinleşmek. Tekrar düşünmek.
  7. Kendinle barışık olmak. Kendini asla cezalandırmamak. Kendini affetmek. Başka insanlara yardım etmek, iyilik ve doğru eylemler yapmak.
  8. Önemli işlerden başlamak. Mümkünse bu işleri sabah erken halletmek. ( Çünkü güniçinde irade git gide azalıyor )
  9. Aynı hedefe giden bir yol arkadaşı bulmak. Karşılıklı olarak birbirinizi motive edebilecek birinin olması.
  10. Kararsızlığın önüne geçmek. Plan yapmak, Öncelik belirlemek, küçük adımlarla başlamak (kaizen/1 dk yöntemi), prensip sahibi olmak.
  11. Sorumluluk ve risk almak. ( Tek bir risk almadan hayallere ulaşılamaz )
  12. Başarıyı asla hayal etme, o gerçek olmayan hayalle kendini ödüllendirme. Başarı için çalış.

 

[1] Maximum Willpower McGonial

[2] Bilinmeyen kaynak

Sun Bin, Antik Çin’de yaşayan bir stratejisttir. Sun Tzu ile akraba oldukları düşünülmektedir. 20.yy’dan önce Sun Tzu ile aynı kişi olduğu düşünülmekteydi. Çünkü eserleri henüz bulunamamıştı. 20.yy’da “Kayıp Savaş Sanatı” bulundu. Ancak yazdığını kitabın sadece bir kısmı bize ulaşabilmiştir.

Problemler üzerine

Karmaşık bir yumağı çözmek isteyen ipleri düşüncesizce çekiştirmemelidir.
Bir problem olduğunda, en iyisi ona hemen bulaşmamaktır ve düşünüp en uygun imkanı ve zamanı yakaladığımızda onu ince ince çözmemiz gerekir.

Bütün problemler İskenderin Gordion düğümü gibi değildir. Mutlak çözümü yoktur. Dolayısıyla, düğümü parçalayacak kılıcımız yoksa,onu ince ve karmaşık işçilikle çözebiliriz.

Yazılım geliştirirken, öncesinde ince ince plan yapmamız gerekir, çünkü plansız başlanıp devam ettirdiğimiz bir süreç, sona gelindiğinde istenen sonucu vermez. Gözden kaçırdığımız çok şey olduğunu farkeder ve herşeye baştan başlamamız gerekir. Dolayısıyla emeğimiz de boşa gitmiş olur.

Aynı durum Felsefi problemlerde de geçerlidir, bir probleme hemen ön yargıyla yaklaşmamak onu objektif olarak incelemek ve araştırmak gerekir. Doğru olduğunuzu zannettiğiniz şey doğru olmayabilir.

Zhao'yu kurtarmak için Wei'i kuşatmak

Zhao, Sun Bin'in müttefiğinin bir şehriydi. Wei ise , Zhaoya saldıran düşmanın şehridir. Sun Bin, Zhaodaki kuşatmayı kırmak yerine, bütün gücüyle Wei'e saldırır. Wei de yaşlılar ve sakatların dışında ufak bir ordu olduğu için kolaylıkla ele geçirir. Bunu duyan düşman çılgına dönerek, kuşatmarı bırakıp, Wei'e geri döner. Fakat kuşatmadan yeni çıkmış , morali bozulmuş ve dönerken yorulmuş düşman, Weideki ordu tarafından kolaylıkla bozguna uğrar.
Dövüş sanatı: Size tekme atan bir düşman, dengesinden taviz verir ve diğer bacağını savunmasız bırakır. O tekmeyi karşılamak yerine , düşmanınızın diğer bacağına vurmak daha mantıklıdır.

* : Saldıran, saldırmak için gücü bir yerde toplamalıdır. Gücün bir yerde toplanması, diğer yerlerdeki gücü azaltır. Güçlü olduğunu hisseden saldırgan, zayıf yerinden vurulduğunda gücünü sorgular ve moralini kaybeder. Zayıf yerini koruma çabası, ön görülebilir olduğu içinde, stratejik olarak kaybeder.

Strateji : Rakip size saldırıyorsa ya bunu geri püskürtürsünüz ya da ona saldırırsınız. Savunma bekleyen rakibe, saldırı yapmak onun kafasını karıştırır. Bir an da saldıran iken, savunan olur.

Retorik : Biriyle tartışırken, kendinin zayıf olduğu konuyu değiştirip, karşı tarafın zayıf olduğu konu üzerinden tartışmayı sürdürürsen, karşı taraf yetersiz kalacaktır. Kendini savunma ihtiyacı hissedeceği için, az öncesinde üstün tarafın kendi olduğunu unutacaktır. Zihninin odağı değişecektir.

Siber Güvenlik : Bazı DOS saldırısı koruma sistemleri, saldıra yapan bilgisayarların bufferlarını hedef alıp, onları hafızasını doldurarak , saldırı yapamaz hale getirmektedir.

Savaşta ilk adım

Savaş istenmez, zafer arzulanmaz. Harekete geçmek için ilk adım, zafer için gerekli koşullar var olduğunda atılmalıdır.
Bir düşmana, savaşmayı istediğin için saldıramazsın. Haklı sebebin ( Casus Belli ) yoksa, ne halkın ne de ordunun desteği yeterli olur. Haklı olan düşman, sayıca az da olsa daha güçlüdür. Saldırıdan önce bakılacak ikinci şey de, savaşın kazanılabilirliğidir. Öyle ki düşmandan en az iki kat güçlü olunmadığında savaş risklidir.

Savaş ancak savaşla engellenir

Beş imparatorun erdemi, üç kralın yeteneği karşısında zayıf düşenlerin savaşı insanlığı ve adaleti yayarak yasaklayacağım dedikleri söylenir. Bu yöntemi bir çok kral denedi ama başaramadı. Savaş ancak savaş ile engellenir.
Yaklaşan bir savaş engellenemez, engelleme çabaları sadece bunu erteler ve daha beklenmedik bir savaşa neden olur. Onun için bir savaşı engellenmenin yolu savaştır. Ertelemek, tembellik ve kaçmak zafer kazandırmaz. Düşmana avantaj sağlar.

İnsan ilişkilerinde yaşanacağı malum bir tartışma varsa, onu tartışmayla engellersin. Ertelemek sadece şiddetti ve bilinmezliği arttırır.

Ancak ;

Savaşa sadece mecbur* olunduğunda girilmelidir.

Ordunun boyutuna göre durumlar

  • Ordumuz fazlaysa, fishing yapılır. (yem atılır, düşman kontrollü olarak yönlendirilir.)
  • Ordumuz azsa, beklenir ve asıl güç gizlenerek tuzak kurulur. (Gizlenilir, zayıf olduğumuz ve saldırma cesaretimiz olmadığı ima edilir. Ancak asıl güç ile düşman parçalara ayrılarak yok edilir.)
  • Ordular eşitse, yukarıda ki iki teknik aynı anda uygulanır. ( Yem at, yemi yuttur. Eş zamanlı olarak asıl güçle saldır. )

Dar geçitler ve engeller

Bunlar her çağda her savaşta etkili silah olmuştur, düşmanı yenmez ancak düşmanın tam gücünün kullanamamasını sağlar. ( Dağlar,denizler,çöller,vadiler,astroitler, güneş sistemleri,insan yapımı engeller ... )

Kaçışı olmayan düşman

Çıkış yolu kalmamış düşmanın, hala çıkış yolu olduğuna ve beklemesi gerektiğine inandırılması gerekir.
Yoksa düşman savaşmaktan başka çaresi olmadığını anlar ardından büyük cesaret ve fedakarlıkla savaşır.

Asıl güç nedir?

Nüfuz, sayı, hile, strateji değildir. Analiz ve kontroldür. (Bilgelik ve İrade)

Analiz olmazsa hile ve strateji uygulanamaz. Kontrol olmazsa nüfuz ve sayının anlamı kalmaz.

Zafer

Zafer seçimlere, yiğitlik düzene, esneklik duruma, vurucu güç güvenirliğe, kalite eğitime bağlıdır.

Kılıç taşımak

Kılıç bütün gün taşınır ama bu ille de kullanılacağı anlamına gelmez.
Kılıç doğuştan sahip olmadığımız bir silahtır. Tertip ve düzene de doğuştan sahip olamayız. Gücümüzü kullanabilmek için sürekli düzen içerisinde birşeylere hazırlıklı bulunmalıyız. Fakat bu gücümüzü sürekli kullanacağımız anlamına gelmez. Kılıç yanımızda değilse, gücümüzü kullanmamız gerektiğinde kullanamayız.

Facebook üzerinde yayınlanan reklamlardan elde edilen bilgilerle dönüşüm ve retargeting yapılmasını sağlayan kod parçasıdır.

Retargeting : sitemize alışverişe giren birine ileri aşamalarda farklı yerlerde reklam göstererek onu geri dönmesini sağladığımız bir hedefleme sistemidir.

İki türlü retargeting vardır : Pixel temelli ve Liste temelli

Pixel temelli retargeting de, kullanıcının tarayıcısında javascript kodu çalıştırılır ve çerez ile kullanıcıya başka bir yerde reklam gösterilir.

Liste temelli retargeting de kullanıcının sitenizle etkileşim kurması gerekir. Üye olduğunda email adresi alınan kullanıcı tekrar bu email adresi yoluyla sosyal medya hesapları belirlenerek, bunlarla giriş yaptığı yerlerde, kullanıcılara reklamlar gösterilir.

Olay Kodu : Javascript koduna eklenen satırlardır. Kullanıcın hangi aşamada olduğunu retargeting sistemine bildirir.

Pixeldeki olay kodları şunlardır : Search, ViewContent, AddCart, AddToWishList, IniateteCheckOut, AddPaymentInfo, Purchase,Lead

ViewContent : Bir kullanıcının içeriği görüntülenmesi, o ürüne ilgi duyduğunu gösterir. Onun için görüntülenmede bu olay kodu çağrılır. (ürün/sayfa görüntüleme çağrılır)

Search : Bir kullanıcının sitenizde arama yapması, markanıza ve ürünlerinize ilgi duyduğuna işarettir. Bu kişiler birincil potansiyel müşterilerdir. (Aramalarda bu olay çağrılır.)

AddToCart : Sitenizden herhangi bir ürünü satın almaya karar verip, vazgeçmiş kişi, indirim ve kampanyalarda ilk hedeflenmesi gereken kişilerdir. (Bu olay sepete eklemede çağrılır.)

AddToWishlist : Site istek listesi oluşturmaya müsaitse, istek listesine ekleyen kullanıcılara o ürünle ilgili kampanyaları sunabilirsiniz. (istek listesine eklemede çağrılır)

InitiateCheckout : Sizden alışverişini tamamlayan, ürün sahibi olmuş müşteriniz için bu olay çağrılır. Bu kişileri yeni fırsatlardan haberdar edebilirsiniz. (alışverişi tamamla butonunda çağrılır)

AddPaymentInfo : Kişinin ödeme bilgilerini paylaşması size güven duyduğuna ve potansiyel müşteri olduklarına işaret eder. (ödeme formu gönderme butonunda çağrılır)

Purchase : Sizden satın alma işlemini tamamen başarıyla tamamlamış müşteriler için kullanılır. Bu kişilerin sizden yeniden ürün olma ihtimalleri yüksektir. (satıl alma sonrası teşekkürler sayfasında çağrılır)

Lead : Sitenizde kullanıcılar yorum yapabiliyorsa, kullanıcının yorum yapması ürününüzden etkilendiği ve ürünü merak ettiğini işaret eder. (yorum gönderme butonunda çağrılır)

CompleteRegistration : Sitenize üye olma olayıdır. Birinin sitenize üye olması, ürününüzü almaya meyilli olduğunu gösterir. (kayıt formu gönderme butonunda çağrılır)

fpq('track','ViewContent');

Yazılım projesi geliştirirken, kademeli olarak kodları yedeklemek ve saklamak gerekmektedir. Bu yedeklemeler yapılırken gerektiğinde önceki sürüme geri dönebilmemiz ve önceki sürüm ile farkları (change log) belirlememiz gerekmektedir.

Bunun yanı sıra, bir projede birden çok yazılımcı çalıştığı için, yapılan değişikliklerin birbiriyle çakışmaması gerekmektedir. Sürüm kontrol sistemlerinin yaptığı şey de budur.

Şu an en yaygın versiyon kontrol sistemi “Git“dir. Bu yazılım aynı zamanda Linuxun da geliştiricisi olan Linus Torvalds tarafından geliştirilmiştir. Açık kaynak kodlu, ücretsiz bir yazılımdır.

Github“ ise kodların saklanıldığı uzak sunucu (remote) git servisidir.

Repository : git projelerinin her birine verilen addır.

Commit : Herbir sürüme verilen isimdir. Her değişiklik yapılan adımdır. Hash Key , Ad ve açıklama içerir.

Branch : Değişliğin yapıldığı branşa verilen isimdir. Her repositoryinin ana branşı masterdır. Yani uygulamanın asıl sürümünü master branch oluşturur.

git clone <adres>
- uzak sunucudaki kodları geliştiricinin bilgisayarına klonlar

git commit -am <mesaj>
- Kodda yapılan değişikliklerden commit oluşturur

git push
- Commitleri uzak sunucuya gönderir

git pull
- Uzak sunucudaki commitleri ve güncellemeleri alır.

git init
- Herhangi bir klasörde git repositorysi oluşturur.

Bilgisayar bilimin insana öğrettiği en önemli üç gerçek ;

  1. Evren hata yapmaz, irade sahipleri hata yapar. Bilgisayarın hatalarının sebebinin sadece kullanıcı ve yazılımcılarının olması gibi.
  2. Bir şeyi yönetmek için onu parçalamak ve ayrıştırmak gerekir. Bu süreç yönetimininden, Toplumu yönetmeye kadar her şeyde geçerli bir kuraldır.
  3. Evrende ki her şey veridir. Anladıklarımız ise bilgidir.

Sokratese göre, bir ülkede, Tıp ve Hukuk mesleklerinin yaygın olması, o ülkede düzenin bozuk olduğunu gösterir. Çünkü insanlar haklarını bilmedikleri için hukukçulara ihtiyaç duyar. Ve yine çünkü insanlar kendi sağlığı hakkında bir şeyler bilmediği için hasta olur ve doktorlara ihtiyaç duyar. (Devlet 405a/b Platon)

Mutluluk, beyinde doğuştan yüklü gelen bir programdır. Yemek yemek,alışveriş yapmak gibi ihtiyaç karşılamaya yönelik şeylerde, beynimiz kendini mutlu eder, çünkü hayatta kalmaya yönelik bir şey yapıyoruzdur. Hayır, aslında tam olarak bu değil. Mutluluğa, “Hayatta kalmaya yönelik,kendini ödüllendirme mekanizması” diyemeyiz. Doğrusu, mutluluk “İnsan ırkının hayatta kalmasına yönelik, kendini ödüllendirme mekanizmasıdır.” Onun için ikincil ve üçüncül ihtiyaçlar olan, üremek, yardımlaşmak, bir şeyler öğrenmek, kendini geliştirmek ,intikam alıp-düşman yok-etmek ve birlik/beraber olmak gibi şeylerde, insanı mutlu eder. Mutsuz isen, bu program, ya alarm vermektedir yada sigara,içki veya uyuşturucu yoluyla kimyasal olarak bozulmuştur. (31/7/16)

Kanser, virüs değildir. Bir hücremizin mutasyona uğrayarak ,işbirliğini bırakıp, sadece kendini düşünüp, sürekli çoğalarak , bencilce vucuda zarar vermeye başlamasıdır. Çok hücreli olan her canlıda ansızın meydana gelebilir. Onun için hiçbir canlı kusursuz ve mükemmel değildir. Hatta dünyanın ve doğanın kanseri de insanoğludur. (30/7/16)