Bir dosyayı açtınız, veritabanına bağlandınız veya bir kilidi ele geçirdiniz. Tam işinizi bitirecekken kod bir istisna fırlattı! Kaynağı serbest bırakmayı unuttuysanız dosya tanıtıcıları tükenebilir, bağlantılar açık kalabilir ya da uygulamanız kilitlenebilir. Python’ın with ifadesi, işler yolunda gitse de gitmese de temizlik adımının çalışmasını sağlayarak bu problemi zarifçe çözer.
Devamı...
Java’da her verinin bir kimliği vardır: tipi! Bir değişkenin sayı mı, karakter mi yoksa mantıksal değer mi taşıyacağı önceden belirtilir. Bu yaklaşım başlangıçta biraz katı görünse de hataların daha kod çalışmadan yakalanmasını sağlar. Gelin Java’nın tip güvenliği dünyasına, değişkenlerine ve aynı türden verileri düzenleyen dizilerine yakından bakalım.
Devamı...

İki tekerlekli bir robotun devrilmeden ayakta kalması ilk bakışta sihir gibi görünür. Oysa robotun yaptığı şey, düşmeye başladığı yönü sürekli ölçmek ve tekerleklerini aynı yöne sürerek gövdesini yeniden ağırlık merkezinin altına taşımaktır. Bu hızlı geri besleme döngüsü; mekanik, sensör füzyonu ve kontrol teorisinin eğlenceli bir birleşimidir.
Devamı...
İnsanlarla aynı çalışma alanını paylaşan robotlar artık yalnızca bilim kurgu filmlerinde değil; fabrikalarda, hastanelerde ve laboratuvarlarda karşımıza çıkıyor. Ancak bir robotun nazikçe kahve uzatmasıyla kontrolsüz biçimde kolumuza çarpması arasında ciddi bir güvenlik farkı var. İnsan-robot etkileşimi, yani HRI güvenlik standartları, bu farkı şansa bırakmak yerine temas olasılığını, çarpışma enerjisini ve uygulanabilecek kuvveti sistematik olarak sınırlandırır.
Devamı...
Bir robotun milimetrenin altında toleransa sahip bir parçayı yuvasına yerleştirdiğini düşünün. Yalnızca konum komutlarını takip eden robot, küçük bir hizalama hatasında parçayı sıkıştırabilir veya kırabilir. Kuvvet geri beslemeli manipülasyon ise robota adeta bir dokunma duyusu kazandırır: Robot sadece nerede olduğunu değil, çevreyle nasıl temas kurduğunu da anlayarak hareketini düzenler.
Devamı...
Güneşli bir günde yolu algılamak otonom araçlar için görece kolaydır. Ancak sis çöktüğünde, yağmur kamera görüntüsünü bozduğunda veya kar taneleri LiDAR ölçümlerinde hayalet noktalar oluşturduğunda işler değişir. Sensör füzyonu, farklı sensörlerin güçlü yanlarını birleştirerek aracın tek bir ölçüme körü körüne güvenmesini önler. Kısacası ekip çalışması yapar: Kamera renkleri söyler, radar mesafeyi ölçer, LiDAR çevrenin üç boyutlu haritasını çıkarır.

Devamı...
Diferansiyel sürüşlü bir robotun direksiyonu yoktur; buna rağmen kıvrak biçimde dönebilir, hatta olduğu yerde kendi ekseni etrafında dans edebilir. Bu yeteneğin sırrı, sağ ve sol tekerleklerin farklı hızlarda döndürülmesidir. Alışveriş arabasını tek taraftan daha güçlü ittiğinizi düşünün: hız farkı, aracın yönünü değiştirir.

Devamı...

C++’ta dinamik bellek yönetirken delete ile delete[] arasındaki iki köşeli parantez küçük görünebilir. Ancak yanlış silme ifadesini kullanmak; bellek sızıntısı, eksik yıkıcı çağrıları, heap bozulması ve yalnızca üretim ortamında ortaya çıkan gizemli çökmeler gibi ciddi sonuçlara yol açabilir.
Devamı...

C++’ta const T& gördüğümüzde genellikle “güvenli, değiştirilemez referans” diye düşünürüz. Ancak geçici nesneler devreye girdiğinde konu yalnızca değiştirilebilirlikten ibaret değildir. Referansın neye, nerede ve nasıl bağlandığı; geçici nesnenin hemen yok edilmesini de kapsam sonuna kadar yaşamasını da sağlayabilir. Kısacası const, bazen nesneye adeta fazladan can verir.
Devamı...
C++’ta const, yalnızca derleyiciyi memnun eden küçük bir anahtar kelime değildir; bir arayüzün hangi işlemleri garanti ettiğini anlatan sözleşmedir. Bugün atlanan bir const, kodu hemen bozmayabilir. Ancak proje büyüdükçe yeniden kullanım, eşzamanlılık ve geriye dönük uyumluluk gibi alanlarda faiz işleyen bir tasarım borcuna dönüşür.
Devamı...
Terminalde kusursuz çalışan bir script’in cron tarafından başlatıldığında hata vermesi, Linux dünyasının klasik “ama benim makinemde çalışıyordu” vakalarındandır. Suç çoğu zaman cron’da değil; interaktif shell ile cron job’ının farklı PATH, çalışma dizini ve ortam değişkenleri kullanmasındadır.
Devamı...
Bir C# programında Console.WriteLine yazıp çalıştır düğmesine bastığımızda perde arkasında küçük bir teknoloji festivali başlar. Kaynak kod derlenir, ara dile çevrilir, çalışma zamanı tarafından incelenir ve makine koduna dönüştürülür. C# ile .NET arasındaki ilişkiyi anlamak; performans, hata ayıklama ve taşınabilirlik gibi konuları ezberden değil, sağlam bir mimari üzerinden değerlendirmeyi sağlar.
Devamı...
Aynı toplama, karşılaştırma veya sıralama işlemini int, double ve başka veri türleri için tekrar tekrar yazmak pek eğlenceli değildir. C++ şablonları, algoritmayı bir kez tanımlayıp onu farklı türlerle kullanmamızı sağlar. Böylece derleyici, ihtiyaç duyulan türe uygun kodu bizim için üretir; biz de kopyala-yapıştır bataklığından kurtuluruz.
Devamı...
C dilinde kaynak kod, doğrudan makine koduna çevrilmez; önce birkaç aşamadan geçen küçük bir yolculuğa çıkar. Önişlemci, bu yolculuğun derlemeden hemen önceki durağıdır. #include, #define ve #if gibi direktifleri işler; başlık dosyalarını ekler, makroları genişletir ve hangi kod parçalarının derleyiciye ulaşacağını belirler. Kısacası önişlemci, sahne açılmadan önce dekoru hazırlayan görünmez bir ekip gibidir.
Devamı...
C dilinde göstericiler, ilk karşılaşmada belleğin karanlık sokaklarında dolaşmak gibi görünebilir. Oysa bir gösterici yalnızca başka bir nesnenin bellekteki adresini saklayan değişkendir. Bu mekanizmayı kavradığınızda dizilerin, dinamik belleğin, fonksiyon parametrelerinin ve veri yapılarının neden bu kadar verimli çalıştığını da anlamaya başlarsınız.
Devamı...

Bir robotun odadaki nesneleri toplaması etkileyicidir; yüzlerce küçük robotun lider olmadan alan taraması, yük taşıması veya kayıp bir kişiyi araması ise bilim kurgu gibi görünür. Sürü robotiği, tam olarak bu kolektif davranışı inceler. Karıncaların yiyecek bulması ve kuşların çarpışmadan uçması gibi doğadaki örneklerden esinlenen yaklaşımda karmaşık görevler, basit yerel kurallara uyan çok sayıda robot tarafından çözülür.
Devamı...
Shell betiklerinde <<EOF ile oluşturulan here-document yapısı, çok satırlı metinleri bir komuta aktarmanın en rahat yollarından biridir. Ancak kodu daha okunaklı yapmak için sınırlayıcıya girinti eklediğinizde Shell aniden metnin hiç bitmediğini düşünebilir. Sorun görsel hizalama değil, kapanış sınırlayıcısının karakter karakter eşleşmek zorunda olmasıdır.
Devamı...
Endüstriyel robotların ucundaki esnek olmayan, yani rijit gripper’lar; düzenli kutuları taşırken son derece başarılıdır. Ancak karşılarına yumurta, tornavida, muz veya eğimli bir makine parçası çıktığında işler değişir. Sabit geometrili parmaklar nesnenin yüzeyine uyum sağlayamaz ve robotun güçlü kolu, bir anda nesneyi düşüren ya da ezen pahalı bir sakara dönüşebilir.
Devamı...
Bir robot algoritmasını doğrudan gerçek donanımda denemek, paraşütü uçaktan atladıktan sonra dikmeye benzer: öğreticidir ama pahalı sonuçlar doğurabilir! Gazebo ve PyBullet gibi robotik simülasyon ortamları; hareket, sensör ve kontrol algoritmalarını fiziksel motora, pahalı kameraya veya hassas robot koluna zarar vermeden sınamamızı sağlar.
Devamı...
Bir robotun masadaki bardağı tanıması bize son derece doğal görünebilir. Ancak robot için görüntü, anlamlı nesnelerden değil, sayısal piksel dizilerinden oluşur. Denetimli öğrenme bu sayılara anlam kazandırabilir; fakat bunun için binlerce, hatta milyonlarca doğru etiketlenmiş örnek gerekir. Robotik dünyasında bu gereksinim, algılama modellerinin önündeki en pahalı ve en inatçı engellerden biridir.
Devamı...