
Bir robot kolun kahveyi dökmeden fincanı taşıması, yalnızca başlangıç ve bitiş noktalarını bilmesiyle mümkün değildir. Motorların ne zaman hızlanacağı, nerede yavaşlayacağı ve eklemlerin birbiriyle nasıl uyum sağlayacağı da hesaplanmalıdır. İşte yörünge planlama, robotun A noktasından B noktasına giderken izleyeceği hareketi zamana bağlı ve pürüzsüz biçimde tasarlar.
Devamı...
Bir dağıtık sistemde sunucuların aynı karar üzerinde anlaşmasını sağlamak, kalabalık bir arkadaş grubuyla nerede yemek yeneceğine karar vermeye benzer: herkes konuşursa gürültü çıkar, kimse konuşmazsa aç kalınır. Raft konsensüs algoritması bu sorunu anlaşılır bir liderlik modeliyle çözer. Sunuculardan biri lider olur, diğerleri onu takip eder ve lider ortadan kaybolursa sistem demokratik sayılabilecek yeni bir seçim başlatır.
Devamı...
Dağıtık sistemlerde birkaç sunucunun aynı gerçek üzerinde anlaşmasını sağlamak, dışarıdan bakıldığında basit bir oylama problemi gibi görünür. Fakat mesajlar gecikebilir, makineler çökebilir ve ağ ikiye bölünebilir. Paxos, bu kaos içinde güvenli biçimde karar vermeyi sağlayan en önemli konsensüs algoritmalarından biridir; aynı zamanda ünü kadar korkutucu notasyonuyla da geliştiricilerin rüyalarına girer.
Devamı...
Tek bir bilgisayarın günlerce uğraşacağı bir veri kümesini yüzlerce makineye paylaştırıp kısa sürede işlemek kulağa sihir gibi gelebilir. MapReduce, bu sihri iki temel adıma indirgeyen klasik bir programlama modelidir: Veriyi bağımsız parçalara ayır, parçaları paralel işle ve sonuçları anlamlı bir bütün hâline getir.
Devamı...
İki tekerlek üzerinde duran bir robot, fizik kurallarına meydan okuyor gibi görünür. Oysa yaptığı şey düşmeyi engellemek değil, düşüşünü sürekli ölçüp tekerleklerini doğru yöne sürerek gövdesini yeniden dengelemektir. Bu proje; mekanik, elektronik, sensör füzyonu ve kontrol teorisini eğlenceli biçimde bir araya getirir.
Devamı...
Bir robotun hareket eden topu izlemesi, raftaki kutuya yönelmesi veya sahibini takip etmesi dışarıdan sihirli görünebilir. Oysa perde arkasında kamera görüntülerini sayılara dönüştüren bilgisayarlı görü, hedefin konumunu tahmin eden algoritmalar ve motorlara komut veren kontrol mekanizmaları birlikte çalışır. Kamera robotun gözü ise nesne takip sistemi de dikkatini nereye yönelteceğine karar veren beynidir.

Devamı...
Bir robotun GPS verisi bir sağa bir sola sıçrarken ivmeölçeri en küçük titreşimi bile hareket sanabilir. Peki telefonlar, dronlar ve otonom araçlar bu karmaşadan nasıl düzgün bir konum çıkarır? Cevap çoğu zaman Kalman filtresidir: Ölçümlere körü körüne inanmak yerine model ile sensörler arasında matematiksel bir güven pazarlığı yapan akıllı bir tahmin mekanizması.
Devamı...
Bir para transferinin iki farklı veritabanına dokunduğunu düşünün: İlk sistem bakiyeyi azaltırken ikinci sistem alıcının hesabını artırıyor. Sistemlerden biri işlemi tamamlayıp diğeri çökerse para dijital boşlukta kaybolabilir! İki Aşamalı Taahhüt, yani Two-Phase Commit (2PC), dağıtık bir işlemin tüm katılımcılarda birlikte onaylanmasını veya tamamen geri alınmasını sağlayarak bu tehlikeyi azaltan klasik bir koordinasyon protokolüdür.
Devamı...
Step motorlar komutları adım adım uygulayan disiplinli çalışanlara benzer; encoderlar ise işin gerçekten yapılıp yapılmadığını denetleyen dikkatli yöneticilerdir. Bu ikili doğru bir kontrol algoritmasıyla birleştirildiğinde CNC tezgâhlarından robot kollarına kadar pek çok sistemde hassas, tekrarlanabilir ve güvenilir hareket elde edilir. Gelin açık çevrim rahatlığından kapalı çevrim hassasiyetine uzanan bu mekanik yolculuğa çıkalım.
Devamı...

Bir drone’u havada tutmak, dört motoru çalıştırıp şans dilemekten çok daha fazlasıdır. Uçuş kontrolcüsü; sensörleri okuyan, aracın mevcut durumunu tahmin eden ve motorlara saniyede yüzlerce kez düzeltme komutu gönderen gerçek zamanlı bir bilgisayardır. Manuel dengeden GPS destekli otonom rotaya kadar bütün uçuş yetenekleri, iç içe çalışan kontrol döngülerine dayanır.
Devamı...
Bir sunucunun öğrendiği haberi rastgele birkaç komşusuna söylediğini, onların da aynı şeyi başkalarına aktardığını düşünün. Bir süre sonra bütün ağ haberdar olur; üstelik ortada süreci yöneten bir merkez yoktur. Dağıtık sistemlerde bu modele gossip, yani dedikodu protokolü denir. İnsan topluluklarında bazen baş ağrıtan dedikodu, bilgisayar ağlarında ölçeklenebilirlik ve arıza toleransı sağlayan son derece kullanışlı bir mekanizmadır.
Devamı...
İki kullanıcının çevrimdışı çalışırken aynı belgeyi değiştirdiğini düşünün. İnternet geri geldiğinde hangi sürüm kazanmalı? Birini seçmek veri kaybına, her değişikliği sırayla işlemek ise koordinasyon maliyetine yol açabilir. CRDT (Conflict-free Replicated Data Type), farklı kopyalarda yapılan eş zamanlı değişikliklerin merkezi bir hakeme ihtiyaç duymadan güvenli biçimde birleştirilmesini sağlayan veri yapıları ailesidir.

Devamı...

Merkezi bir veritabanı olmadan milyonlarca anahtarın hangi bilgisayarda tutulduğunu bulabilir miyiz? Dağıtık Hash Tabloları, yani DHT’ler, tam olarak bu problemi çözer. Chord ve Kademlia ise aynı hedefe farklı rotalardan giden iki meşhur protokoldür: Biri düğümleri halka üzerinde yürütür, diğeri XOR uzaklığıyla dijital bir pusula kullanır.
Devamı...
Bir veritabanı tasarlarken yalnızca “Veriyi nereye kaydedelim?” diye sormak yetmez; verinin nasıl okunacağını ve yazılacağını da düşünmek gerekir. B-tree ile LSM-tree arasındaki seçim tam olarak bu noktada karşımıza çıkar. B-tree genellikle dengeli ve hızlı okumalarıyla öne çıkarken LSM-tree yoğun yazma trafiğini sıralı işlemlere dönüştürerek depolama aygıtını mutlu eder. Kısacası biri düzenli bir kütüphaneci, diğeri masasına gelen belgeleri önce hızlıca kutulayan enerjik bir arşivcidir.
Devamı...
Bir robotun başlangıç noktasından hedefe gitmesi kolay görünebilir; ta ki odanın ortasına sandalye, kutu ve duvarlar yerleştirene kadar! Robotik yol planlamanın amacı, hareketli sistemi engellere çarptırmadan hedefe ulaştıracak mümkün olan en düşük maliyetli rotayı bulmaktır. A* algoritması, gerçek maliyet ile hedefe yönelik tahmini birleştirerek bu işi hem verimli hem de anlaşılır biçimde yapar.
Devamı...
Büyük bir sayı dizisini hem az yer kaplayacak biçimde saklamak hem de üzerinde hızlı sorgular çalıştırmak kulağa iki ayrı hedef gibi gelir. Wavelet ağacı, bu hedefleri aynı veri yapısında buluşturur. Özellikle metin indeksleme, genom analizi, coğrafi veriler ve analitik sistemlerde; bir aralıktaki k’ıncı küçük elemanı ya da belirli bir değerin kaç kez geçtiğini etkileyici hızlarda bulabilir.

Devamı...
Bir metin içinde desen aramak, tekrarları bulmak veya sözlük sırasına göre son ekleri incelemek istediğimizde suffix tree güçlü bir çözümdür. Ancak düğümler, bağlantılar ve yüksek bellek tüketimi yüzünden uygulaması biraz “orman yangınına” dönüşebilir. Suffix array ise aynı fikirlerin önemli bir bölümünü yalnızca bir tamsayı dizisiyle sunar: Daha sade, önbellek dostu ve pratik!

Devamı...
Dinamik programlamada durum değişkeni bir sayı olduğunda, her olası değeri ayrı ayrı tutmak çoğu zaman pahalıdır. Slope trick, parçalı doğrusal dışbükey bir DP fonksiyonunu değerleriyle değil, eğiminin değiştiği noktalarla temsil eder. Böylece devasa bir koordinat aralığı, birkaç öncelik kuyruğu ve şaşırtıcı derecede az kodla yönetilebilir.
Devamı...
Bir sudoku çözmek, işlemci devresini doğrulamak veya çalışanların vardiyalarını planlamak ilk bakışta tamamen farklı problemlerdir. SAT ve SMT çözücüleri ise bu karmaşanın karşısına aynı soruyla çıkar: “Verilen bütün kuralları aynı anda sağlayan en az bir değer ataması var mı?” Problemi bu dile çevirebilirsek çözüm arama işini son derece gelişmiş algoritmalara bırakabiliriz.

Devamı...

Büyük bir ağaçta yalnızca birkaç seçili düğümle ilgilendiğinizi düşünün. Milyonlarca düğümü her sorguda dolaşmak, çay demlenene kadar çalışan algoritmalar üretir. Sanal ağaç (virtual tree) ise yalnızca önemli düğümleri ve bunların bağlantısını koruyarak sorguyu küçük bir ağaca indirger.
Devamı...