Author

Hasan Eren Keskin

Browsing

Optimizasyon konularını ele aldığımız yazı serimizde bu yazının konusu “SSO (Short/Small String Optimization)”. Kulağa garip geliyor olabilir ancak SSO, C++ arkaplanda sizin yerinize yaptığı optimizasyonlardan bir tanesidir. C++ Derleyicilerinde Optimizasyon Serisi: C++ Derleyicilerinde Optimizasyon: 1 – noexcept C++ Derleyicilerinde Optimizasyon: 2 – Compile Flag’leri Ne Anlama Gelmektedir? Yazı dilinde bile kısa yazılar, uzun yazılara nazaran anlık olarak bile olsa daha akılda kalıcıdır. Bunun sebebi ise hatırlamak için çok fazla efor sarfetmemiz gerekmediğidir. Aynı olay yazılım tarafında da hafızadan yer kaplama olarak düşünebiliriz. Küçük bir örnekle daha net bir şekilde anlatabileceğimi düşünüyorum. Bilgisayar hafızası için “Yazılım” ve “Ben bir yazılım mühendisiyim” aynı şeyi ifade etmiyor. Alt katmanlara inildiği zaman hafızadan ayrılan yer ve onlara erişim metodları değiştiği için yapılan geliştirmelerle bunlar…

C++ Derleyicilerinde Optimizasyon: 2 – Compile Flag’leri Derlenebilen dillerin bir çoğunda derleme zamanı problemleri yaşanmaktadır. C++ özellinde incelediğimiz zaman, proje büyüdükçe derleme zamanı geliştiriciler için çok büyük zaman kayıplarına yol açmaktadır. Hatta sadece compile-time’ı düşürmek için çalışan şirketler mevcuttur. Özellikle oyun endüstrisinde ortaya çıkan ürünlerin büyüklükleri yüzünde bu işlem oldukça vakit alır. Increbuild gibi şirketler bu işlemleri daha hızlı hale getirecek teknolojiler geliştirmektedir. Ben ise bu yazıda GCC üzerindeki optimizasyon flag’lerinden bahsetmeye çalışacağım. Optimizasyon işlemi için compiler’lar kendi içlerinde flag’ler barındırır. Bu flag’ler ile çeşitli seviyelerde optimizasyon işlemi gerçekleştirmeniz mümkündür. GCC üzerinde optimizasyon işlemleri “-O” flag’i ile gösterilir ve optimizasyon seviyesine göre yanına farklı parametreler alır. -O ile başlayan optimizasyon işlemleri aslında -f ile başlayan ve spesifik olarak kontrol edilecebilecek…

Agile yazılım geliştirme denildiği zaman akla ilk olarak Scrum metodolojisi gelmektedir. Bu yazımda da Scrum içerisinde yer alan ve birçok takım tarafından atlanan bir yapı olan Sprint Demo’dan bahsedeceğim. Scrum metodolojisi yazılım ekipleri için bir çok fayda sağlamaktadır. Scrum takımların geliştirme hızını artırır ve müşterilerin isteklerine daha hızlı ve güvenilir şekilde cevap verilmesine yardımcı olur. Bunları sağlarken de bazı adımlarını uygulamanızı bekler. Bu yazı içerisinde uzun uzun backlog, product owner vb. kavramlardan tek tek bahsetmeyeceğim, yazının konusu gereği Sprint ve Sprint Demo nedir ondan bahsedeceğim. Sprint Nedir? İlk olarak, Sprint, Scrum içerisindeki iş parçalarının belirli periyotlara bölünerek takip edilmesinin sağlandığı yapıya verilen isimdir. Ürün geliştirilirken hazırlanmış olan backlog’lar (iş parçaları) genellikle 1-4 hafta arasında belirlenen süreler içerisinde tamamlanacak şekilde iş…

Bu yazıyı hazırlarken 2021 için tam bir hedefler yazısı yazmadığımı farkettim ama 2020 yılı sonunda hazırladığım özet yazımda biraz ucundan dokunmuşum. Bu sene ise hem 2021 özetini hem de gelecek sene içerisinde hedeflerimi tek bir yazıda toplamaya karar verdim. 2021 bireysel olarak çok güzel bir sene oldu benim için. Hem kişisel hem de mesleki olarak kendimi geliştirdiğimi hissettiğim bir yıl geçirdim. Hala Ankara’dayım ve ULAK Haberleşme’de RAN Software Engineer olarak çalışmaya devam ediyorum. Mesleki olarak 2020 yılında biraz daha haberleşme sektörüne hazırlık olarak ilerlemiş olsam da 2021 içerisinde direkt olarak geliştirme işlerini üzerime almaya başladım. Sektöre hakim olanlar bilecektir, haberleşme sektörü biraz kendi içine kapanık ve bazı şeyleri anlaması kolay olmayan bir sektör. İlk dezavantajı aşırı derece kısaltma kelime içermesi…

Derleyiciler, yazdığımız yüksek seviyeli kodları bilgisayarların veya mikroişlemcilerin rahatça çalıştırabilmesi için makine kodlarına dönüştürmeye yarayan, bu dönüşüm işlemi esnasında da çeşitli optimizasyon işlemleri sayesinde sistemden maksimum verim elde etmeyi amaçlayan araçlardır. Arkaplanda çalışan sistemleri karışık olduğu için genelde es geçilir ancak derleyicilerin bize sağladığı optimizasyon seviyeleri kadar bizim de yapmamız gereken bazı optimizasyon işlemleri vardır. Bu yazı serisinde derleyicinin otomatik olarak yaptığı optimizasyonlardan ve geliştiricinin yapabileceği optimizasyonlardan bahsediyor olacağım. Geliştirici gözüyle bakıldığı zaman derleyiciler tüm işlemleri otomatik olarak yapıyor olarak görünür. Örneğin; GCC derleyicisinde derleme işlemi sırasında kullanabileceğiniz optimizasyon flag’leri (bazı kelimelerin direkt Türkçe çevirisinin anlamlı olmayacağını düşündüğüm için İngilizce karşılığını kullanmayı tercih ediyorum.) vardır. Onlar sayesinde kodunuzu hangi seviyede optimize etmek istediğinizi ayarlayabilirsiniz. Her zaman maksimum optimizasyon flag’ini kullanmak…

Yazdığımız kodlar içerisinde birçok uyarı ve hata ile (“warning” ve “error”) karşılaşırız. Kullandığımız derleyiciler bu uyarı ve hataları derleme sırasında bizim için ortaya çıkartır ve buna bağlı olarak düzeltilmesi gereken yerlerde bu düzenlemeleri yaparız. Birçok derleyici bunu kendi içerisinde yaparken harici olarak yapılma ihtiyacı olan durumlar da olmaktatır. Bu işleme statik analiz adı verilir. Statik analiz işlemini gerçekleştirmek için de birçok araç mevcuttur. Bu yazımda CppCheck aracı ile nasıl statik analiz yapabileceğimiz hakkında bilgi vermeye çalışacağım. Statik Analiz Statik analiz, kodu derlemeden (yani pre-compile) tespit edilebilecek hataları tespit ederek bunları düzeltmemize olanak tanır. Bu sayede oluşabilecek bug’ları erken dönemde tespit etmeye ve tanımlanmamış davranışları ve tehlikeli kod yapılarını (undefined behaviour ve dangerouscoding constructs) tespit etmeye odaklanır. Aşağıda kullanabileceğiniz bazı statik…

Her sene bitiminde bitirmiş olduğumuz yıl hakkında, sene başında ise önümüzdeki yıl içerisindeki beklentilerim ve planlarım hakkında bir yazı yazmaya çalışıyorum. Bu senenin başında da var olan gidişatla ilgili bir yazı yazmıştım. Biraz sallantılı başlayan bir yıl olması aslında gidişatını gösteriyormuş diyebiliriz. Yazımda da belirttiğim gibi senenin başında bana maddi getiriden başka bir şey kazandırmadığını düşündüğüm eski işimden ayrılıp yeni fırsatlar aramaya başlamıştım. Tam bu sırada hepimizi dize getiren korona virüs salgını patladı ve yaklaşık 4 ay işsiz kaldım. Bu süreçte yaptıklarımı da yine bir önceki yazımdan bulabilirsiniz. Mayıs ayından sonra duygusal olarak kötü birkaç ay geçirdim. Bu döneme paralel olarak temmuz ayında yeni bir işe başlamamın ardından artık hayatımı Ankara’ya taşıdım. Bir süre daha Ankara’da kalacağım gibi duruyor. 4…

DPDK ile ilgili hazırlamış olduğum bir sunum sırasında Türkçe içerik eksikliğini görerek, aldığım notları derlediğim bir içerik oluşturmak istedim. Benim de içerisine yeni dahil olduğum bir yapı olduğu için vereceğim bilgiler tecrübelerden daha çok araştırdığım yabancı kaynakların derlenmesi sonucu ortaya çıkmış oldu. Bazı terimlerin Türkçe karşılığı anlamsız kaldığı için ve bu alanla ilgilenen insanların halihazırda bu terimleri bildiğini varsaydığım için İngilizce olarak kullandım. Kısaca DPDK’nın tarihinden bahsederek başlamak istiyorum. Data Plane Development Kit yani DPDK, 17 Eylül 2010’da BSD (Berkeley Software Distribution) lisansı ile yayınlandı. 2013 Nisan’dan itibaren dpdk.org üzerinde tamamen bağımsız ve kendi topluluğu olan bir hal aldı. Mikroişlemci üreticileri ve mimari geliştiriciler tarafından da desteklenerek projenin büyümesi hızlandırıldı. Günümüzde ise Linux Foundation tarafından destekleniyor. DPDK’nın amaçladığı ana iş…

Birbirini hiç yalnız bırakmaması gereken iki kavram üzerine biraz konuşmak istiyorum. Öncelikle günümüzde bazı kelimelerin her yerde kullanılarak içinin boşaltılmış olmasından oldukça rahatsızım. Bunun siyasal, politik boyutundan bahsetmiyorum, en basitinden karşıdakine edilen hitap kelimeleri bile anlamsız hale gelmeye başladı. Ben bir insana, içimde beslemediğim bir duyguyu belli edecek kelimeler kullanmaktan oldukça kaçınan birisiyim. Yolda gördüğüm bir insana “Kardeşim bir bakar mısın?” gibi bir cümleyi çok dalgın bir anıma gelmemişse, kurmam. Çünkü orada yatan kardeş kelimesinin bambaşka bir anlamı vardır bende. Bir insana kolayca edilen “canım, aşkım, hayatım” kelimeleri bunların altını boşaltmaktan başka bir şey ifade etmemekte benim için. Kimisi için basit görünen bu duygu içeren kelimelere çok mu edebi yaklaşıyorum bilmiyorum ama böyle hitap edilmemesi gerektiğini düşünmekteyim. Özellikle kız arkadaşların…

Birim (Unit) testleri yazarken sadece kendi içerisinde statik olarak uygulanan algoritmalarla çalışmayız, hatta çoğu zaman bu şekilde çalışmayız. Onun yerine diğer objelerle sürekli etkileşimde olan, gerçek zamanlı (real time) olarak işlemler gerçekleştiren şekilde tasarımlar yaparız. Benzer sistem tasarımlarının testlerini yazarken de her zaman gerçek objeler üzerinde çalışamayız. İşte tam olarak burada karşımıza kurtarıcı niteliğinde bir kavram çıkıyor, Mocking. Mock kavramı anlamı itibarı ile taklit objeler oluşturmamıza izin vermektedir. Gerçek zamanlı testlerde karşılaşacağımız objelerin taklit edilen hallerini oluşturarak testimize dahil etmemize yarar. Bu yazıda üzerinde işlem gerçekleştireceğimiz Mock framework’ü ise GoogleMock (gMock) olacak. Yazı içerisindeki anlatımların bir çoğunu YouTube kanalımda anlattığım GoogleTest video serisi içerisinden de ulaşabilirsiniz (Henüz yayınlanmadı). Mock objeleri ile diğer diller üzerinde çalışırken sizin için işin bir kısmını…

Yazılımda test kavramı sadece kelimelerle aşina olduğum bir durumdu ancak daha öncesinde hiç üzerine araştırma yapmamış, hiç bir yerde kullanma ihtiyacı hissetmemiştim – ne salakmışım. Bir sistemi kafanda kurguluyorsun, kağıt üzerinde adım adım her şey çalıştırıyorsun, oturup kodunu yazıyorsun ama sonra canlıya çıkınca bir bakıyorsun patır patır dökülüyor. Bunun hepimizin öncesinde karşılaştığı bir problem olduğunu düşünüyorum. Kimse yoktur ki “Benim yazdığım kod tek seferde babalar gibi çalışır, kafamda oluşturduğum yapı Nikola Tesla’nın yansılarında oluşturduğu gibi kusursuz çalışır halde olur” diyebilsin. İşte bu problemleri, kodu yazdıktan sonra debug etme süresini, oluşabilecek ekstra senaryoları ve projenin ilerleyen süreçlerinde yapılacak ekleme çıkartmaların yazdığınız koda etkisini görebilmek için test yazmak çok büyük önem arz ediyor. Hele bir de gömülü sistemler gibi yazdığınız kodun çıktılarını…

Çok uzun zamandır bloguma ne kişisel ne de uğraştığım şeylerle ilgili içerik girmiyordum. Ancak artık bloguma biraz daha önem verip içerikler oluşturmaya karar verdim. Yeni içerikler için de başlangıç olarak hepimizin muzdarip olduğu konuyu kendi özelimde ele almak istedim. 2020 hepimiz için ‘mutluluk’ getirecek bir sene olarak başlamış gibi görünüyordu ama çok geçmeden foyası ortaya çıktı. Depremler, savaşlar, salgın hastalıklar derken herkes için hayat farklı bir hal almaya başladı. Bunun sosyolojik ve ekonomik etkileri içinde bulunduğumuz virüs salgınından kurtulduktan sonra hızlı bir şekilde ortaya çıkacaktır. Sosyologlar konu üzerine onlarca tez yazacaklardır, sosyal medya ekonomistleri ise kimsenin ciddiye alıp dinlemeyeceği yüzlerce methiyeler düzeceklerdir – millet haksız da sayılmaz bu dinlememe konusunda. Ben geçtiğimiz sene Haziran ayında mezun olduktan sonra Eskişehir’de bir…

Bir önceki yazımda bir dizin içerisindeki dosyaların isimlerinin nasıl değiştirileceğini anlatan bir Python script’i paylaşmıştım. Bu yazımda ise bir dizin içerisindeki görsel boyutlarının nasıl küçültüleceğini hakkındaki script’imi (python image resize) paylaşacağım. Görsel küçültme işlemi için yararlandığım kaynak: https://www.techtrekking.com/how-to-compress-images-using-python/ Şimdi ise bu işlemi bir dizin içerisindeki tüm dosyalar üzerinde nasıl gerçekleştireceğimize bakalım. İlk olarak Python Image Library olarak da bilinen PIL (Pillow) paketini pip ile sisteminize dahil etmeniz gerekiyor. pip install Pillow Eğer Python 2.x ve 3.x versiyonlarını aynı sistemde kullanıyorsanız bu işlemi yaparken pip3 kullanmanız gerekebilir. Yukarıdaki script içerisinde ‘path’ değişkeni ile script’i çalıştıracağımız dizinin adresini alıyoruz ve bu ana dizin yolumuz oluyor. ‘extensions’ değişkeni ise bir liste halinde bu script’ten etkilenmesini istediğiniz dosya türlerini içerisinde tutuyor. ‘files’ değişkeni sayesinde…

Python dili ve kullanım alanları hakkında bilgi sahibi değilseniz araştırarak ne kadar kuvvetli bir dil olduğunu öğrenebilirsiniz. Şu an çalıştığım yerde Raspberry Pi üzerinden GPIO işlemleri yapmak için, hem masaüstü hem de Raspberry Pi ekranı için görsel arayüzler tasarlamak için ve de bazı hayatınızı kolaylaştırabilecek kod blokları yazarak iş yükünüzü çok kolay bir şekilde azaltabilmenize fayda sağlıyor. Üzerinde çalıştığımız bir projede içerisinde neredeyse 2.000 JPG, PNG ve PDF dosyası olan bir klasör vardı ve bizden ilk aşama için istenilen şey bu görsellerin hepsinin ismindeki boşlukların “-” ile değiştirilmesi, tüm Türkçe karakterlerin Unicode karakterlere dönüştürülmesi ve tüm görsel adının küçük harf olmasıydı. Belki 20-30 dosya için bu işlemi el ile yapmak daha kolay bir yol olabilir ancak söz konusu 2.000 dosya…

Seri haberleşme ve Paralel haberleşme arasındaki farktan daha önceki yazılarımda bahsetmiştim. Seri haberleşmelerin en çok kullanılanlarından birisi olan SPI yani Serial Peripheral Interface haberleşme protokolünden bahsedeceğiz. SPI haberleşme protokolü master/slave yapısını baz alarak çalışır ve full-duplex işleme izin verir. SPI haberleşmesi gerçekleştirebilmek için 4 pin gereklidir. Bunlar; MOSI (SDO) (Master Out Slave In)MISO (SDI) (Master In Slave Out) CS (SS) (Chip Select)Clock (SCL, CLK) Burada bulunan MOSI ve MISO veri aktarımını gerçekleştirdiğimiz pinlerdir. CS pini ile hatta bulunan herhangi bir slave aygıtı seçmemiz sağlanıyor. Clock pini ise seri haberleşme gereği olarak verilerin iletilmesini sağlıyor. Veri iletimi 8-bit olarak gerçekleşir. CS pinini kullanarak slave seçimini yaptıktan sonra master cihazından göndermek istediğiniz veriyi MOSI pinini Lojik 0 ve Lojik 1 şeklinde binary…

Bu yazıyı yazmaya başladığımda Ocak ayıydı ancak bir türlü tamamlayamadım. Artık yeni yazıcımız demeyelim de uzun kullanım testimiz diyelim. 2016’da 1 adet Prusa i3 modeli kendi topladığımız yazıcımız vardı. 2017 yaz başında bir tane de Prusa i3 model metal şaseye sahip yazıcı satın aldık. 3 ay kullandıktan sonra artık bu 2 yazıcının da kalibrasyonları, kaymaları, arızalarının bize çok fazla vakit ve para kaybettirdiğinin farkına vardık. O kadar fazla uğraştırıyorlardı ki gönül rahatlığı ile bir baskıyı bırakıp dışarı çıkamıyordunuz. Biz de Burak’la birlikte elimizdeki iki aleti de satıp yeni bir yazıcı almaya karar verdik. Biraz araştırdıktan sonra yeni aletimizin Tevo Tarantula olmasında karar kıldık. Aşağıda da resimlerini gördüğünüz aleti sipariş etmek için uygun bir vakit kollamaya başladık. Siparişi vereceğimiz sıralarda “Black…