STEM

STEM

Test Dünyasında Büyülü Bir Pencere : “AI TESTING”

Yazılım test dünyasında bizleri kendine çeken, adeta büyüleyen, test otomasyondan performans testlerine, güvenlik testlerinden sanallaştırmaya kadar birbirinden farklı, kendimizi geliştireceğimiz, çalışacağımız, kariyerimize şekil vereceğimiz test alanlarına son zamanlarda bir yenisi daha eklendi. Endüstri sektöründen gıda sektörüne, metalürji sektöründen otomotiv sektörüne kadar birçok sektörde kendini iyiden iyiye gösteren yapay zeka kavramı IT sektöründe de karşımıza sıkça çıkmaya başlamış ve hatta şirketlerimizin yıllık ya da 5-10 yıllık hedefleri arasına girmiştir.

STEM

Kotlin’de Nesne Yönelimli Programlama (1)

Herkese merhabalar. Bugün Kotlin serimizin son adımı olan nesne yönelimli programlama ve kavramlarına değineceğiz. Nesne yönelimli programlamada temel amaç kod karmaşıklığını azaltmak ve kodun yazımını kolaylaştırmaktır. Kavramlardan bahsetmeden önce kısaca nesne yönelimli programlamanın ne olduğunu anlamaya çalışalım. Nesne yönelimli programlama (Object Oriented Programming), nesnelere (object) ve nesneler üzerinden yapılacak işlemlere odaklanır. Örneğin bir arabanın renginin, fiyatının ya da modelinin bilgisayar ortamına aktarılması nesne yönelimli programlamaya örnektir. Diğer bir deyişle nesnenin kendisine ait özelliklerini kullanmamıza olanak sağlayan bir dil modelidir. Şimdi detaylıca nesne yönelimli programlamanın kavramlarına göz atalım. Class Sınıflar (class) nesne yönelimli programlamanın temelini oluştururlar. Nesnelerin özellikleri ve davranışları ile ilgili ayrıntılar bu yapıda tutulur. Her sınıf nesne üzerinde çalışmak için özellikler ve yöntemler içerir. Sınıf ve nesne birbirine bağlıdır ve her nesnenin bir sınıfı olmak zorundadır. Örnekle açıklayacak olursak, bir araba sınıfımız olduğunu varsayalım. Bu araba sınıfı bazı özellikler ve metotlar içeriyor. Bu sınıftan bir nesne türetebiliriz. Nesnemiz araba sınıfında tanımladığımız her özelliğe ve yönteme erişebilir durumdadır. Arabanın rengini, modelini ve arabanın satılık olup olmadığının bilgisini tutan bir sınıf tanımlayalım. Aynı zamanda bu sınıf bir metot da içersin. Sınıfı tanımlamak için class anahtar sözcüğünü kullandık ve ardından sınıfa bir isim verdik. Gövde kısmında ise bazı değişkenler tanımladık ve onlara değerler atadık. Bu sınıftan bir nesne oluşturmak istediğimizde artık bu değişkenlere erişebileceğiz. Constructors Yapıcı metotlar bir sınıftan nesne türetirken o nesneye başlangıç değeri verilmesine olanak tanır. Kotlin’de bir sınıf primary constructor ve bir ya da birden fazla secondary constructor‘a sahip olabilir. Yukarıda oluşturduğumuz Car sınıfını giriş parametresi alacak şekilde düzenleyelim. Car sınıfımızı düzenledik ve parametreler ekledik. Bu parametrelere ise main.kt dosyasında erişim sağladık. İkinci kodun çıktısı şu şekilde olur: Color: Black Model: 2016 Is for Sale: false Sınıflar default (varsayılan) parametrelere sahip olabilir. Fonksiyonlardan bahsettiğimiz yazıda default parametrelerin nasıl kullanıldığını görmüştük. Aynı şekilde bunu constructorlara da uyarlayabiliriz. Bu şu anlama gelmektedir; sınıftan bir nesne türetildiğinde varsayılan değerler belirtilmek zorunda değildir. Car sınıfımızda ufak bir değişiklik yaparak model parametresini default parametre yapalım. Primary Constructor Primary constructor direkt sınıf tanımlanırken sınıf adının yanında, sınıf içerisindeki değişkenlere başlangıç değeri atamak için kullanılır. Teknik olarak ilk kod bloğu ile ikinci kod bloğu aynıdır. Fakat biz Kotlin’de ilk kod bloğunu daha yaygın olarak kullanıyoruz. Initializer Block Kotlin’de primary constructor içine kod yazamayız. Bu yüzden kod yazmak için init bloklarını kullanırız. Sınıf içerisinde birden fazla init bloğu olabilir ve kodlar sırasıyla yürütülür. Aynı zamanda init bloğu, primary constructor’ın gövdesi konumundadır. Bir örnekle göz atalım. İlk kod bloğunda giriş parametresine sahip bir sınıfımız var. Constructor içinde çalışmak istediğimiz için bir init bloğu oluşturduk ve içine bir ifade yazdık. Bu sınıftan bir nesne türetildiğinde (ikinci kod bloğu) kod yürütüldüğü anda init bloğu çalışır ve println ifadesi çıktımız olur. Secondary Constructor Bir secondary constructorı tanımlarken constructor anahtar sözcüğünü kullanırız. Secondary constructor this anahtar kelimesini kullanan bir primary constructor çağırmalıdır. Bunun yerine primary constructorı çağıran başka bir secondary constructorı da çağırabilir. Calculate sınıfının içinde bir primary constructorımız var. Giriş olarak double tipinde bir radius değişkeni tutuyor. İki tane de secondary constructorımız var. Birden çok constructora sahip sınıflarda init bloğu, secondary constructorlardaki herhangi bir koddan önce çalışacaktır. Bu yüzden çıktı olarak ilk önce println ifadesini görürüz. Getters ve Setters Getter ve Setter her sınıf özelliği için varsayılan olarak oluşturulur ve özelliklere erişmemizi sağlar. Kotlin var anahtar kelimesiyle tanımlanmış değerler için otomatik olarak get ve set metotları oluşturur fakat val anahtar kelimesiyle tanımlanan değişkenler sadece okunur durumdadır. Bu yüzden bu değişkenler için set metodu oluşturulmaz. Kod formatı ise şu şekildedir: field anahtar kelimesi değişkeni (name) temsil etmektedir. Value ise değişkene atanacak değer için kullanılır. Value yerine başka bir kelime de kullanabiliriz. Bu metotlar Kotlin’de varsayılan olarak bulunduğu için özelleştirilmiş halleri dışında kullanımları gerekli değildir. Custom Getter ve Setter Bir sınıfın içinde özelleştirilmiş getter ve setter metotları kullanabiliriz. Parametre olarak belirttiğimiz ad ve soyad değişkenini birleştiren özel bir get metodu tanımladık. Burada fullName’e özellik gibi erişim sağlayabiliriz ve get() metodu yürütülür. Şimdi de özelleştirilmiş setter metoduna göz atalım. Bir Student sınıfının içinde özel get ve set metotları oluşturduk. Her metodun içine ise bu metodun çalıştığına dair ibareler ekledik. Main fonksiyonu çalıştırıldığında kodumuzun çıktısı şu şekilde olacaktır: set method first get method second get method Damla’s grade is 89 Sınıfın içerisinde ilk önce set metodu işleme alındı. Set metodunda koda, değişkene atanacak değerin uzunluğunun ikiden küçük olması halinde name’in (field) geçersiz olacağını söyledik. Sonrasında ise ilk get() metodumuz çalıştı ve ismi string tipinde döndürdü. Son olarak ise ikinci get() metodumuz çalıştı ve grade değişkenine özellik olarak erişebilmemiz sağlandı. Main fonksiyonunda Student sınıfından bir student nesnesi oluşturduk ve “.” operatörü kullanarak name değişkenine bir isim atadık. Sonrasında ise bunları ekrana yazdırdık. Bu yazıda sınıf, nesne, constructor ve getter/setter metotlarına değinmiş olduk. Sonraki yazımızda ise kalıtım (inheritance), extension function ve special classes konularına değineceğiz. Nesne yönelimli programlamanın ikinci yazısında görüşmek üzere, hoşça kalın.

STEM

Dashboard Oluşturmada Yardımcı Araçlar

Merhaba, serimizin dördüncü adımındayız, şimdiye kadar temel veri görselleştirme tekniklerinden ve bunların Python dilinde uygulamalarından örnekler verdik. Şimdi ise aynı konu üzerine birden fazla görseli birlikte sunarak daha fazla bilgiyi bir arada aktardığımız dashboardlara değiniyor olacağız. Serinin önceki yazılarını henüz okumadıysanız bir göz atmanızı öneririm. Adım Adım Veri Görselleştirme: Tipler Ve Tüyolar. Adım Adım Veri Görselleştirme: Python Temelleri Adım Adım Veri Görselleştirme: Ceşitli Senaryolar ile Görselleştirme Dashboardlar aynı veya benzer konular hakkında önemli bilgilerin, genellikle görseller ile bir arada sunulduğu bir raporlama çeşidi olarak özetlenebilir. Veriden anlam çıkartmak konusunda çalışan bizler dashboardları arkadaki gerekli hesaplamaları ve gösterime uygun olan değişkenleri (feature) grafikler ve tablolar ile bir araya  getirerek son kullanıcının ilgisini doğru noktalara çekecek şekilde tasarlıyoruz. Dashboard oluşturmada adım adım kod anlatımı yapmayacağız bu yazıda, fakat hangi araçlar ile etkili dashboardlar oluşturulabileceğini belirtmekte fayda var. Öncelikle daha önce de belirttiğimiz gibi veri görselleştirmede kısıt yok. Grafiklerimizi ister Python veya R, istersek de Excel veya karakalem ile oluşturabiliriz. Dashboard oluşturma aşaması tekil grafik oluşturmaktan bir nebze daha zorlayıcı bir görev olduğundan hazır şablonlardan yararlanmak veya yetkinliklerimizi ileriye taşıyacak araçlar öğrenmeye başlamak bu görevde daha etkili çıktılar ortaya koymamızı sağlayacaktır. Yetkinliklerimiz dahilinde ve ihtiyacımıza göre farklı araçları kullanmak mümkün. Mesela kodlama gerekmeden Excel ile bir veri seti hakkında farklı görseller ile bilgi sunmak mümkün. Aynı konu hakkında haftalık olarak elinize gelen tablolar için bir şablon oluşturmak ve tekrar tekrar uğraşmadan tabloları bu şablon ile görselleştirmek mümkün mesela. Dashboard oluşturmada sınır sadece verilerinizin çeşitliliği ve sunmak istediğiniz bilgi. Bir diğer Microsoft aracı olan Power BI da dashboard oluşturmakta çok güçlü bir araç. İçerisindeki çok sayıda sunulan yardımcı etkileşim araçları ve görsel çeşitliliği ile çok hızlı bir şekilde etkileyici dashboardlar oluşturmamıza olanak sağlıyor. Arayüz üzerinden her türlü küçük görsel detaylarını kolaylıkla özelleştirebiliyor ve tek tıkla tüm grafiklerimizin içeriklerini seçimlerimize göre şekillendirebiliyoruz. PowerBI’ın Python ve R dillerinde scriptler yazmaya izin vermesi, matplotlib gibi kütüphane desteği de Python tarafından gelenler için belki bir nebze daha kolaylık sunacaktır. PowerBI’ı direkt olarak SQL’deki tablolarımız ile bağlayıp SQLdeki verilere göre tablolarımızı güncel tutmak da sadece statik veri ile dashboard ortaya koymaktan fazlasını da sunuyor bizlere. Dashboard oluşturmakta kullanılabilecek araçlar arasında R – Shiny de bulunmakta. Etkileşimli dashboardlar ortaya çıkartmakta R dilinin gücünü de arkamıza almamızı sağlayan Shiny ile gerçekten çok başarılı uygulamalar ortaya çıkartılabiliyor. İstatistiksel analizlerimizin çıktılarını bir arada sunabileceğimiz, özelleştirmelerle etkileşim araçlarını kullanabildiğimiz ve SQL bağlantısı ile sürekli güncel verileri görsellerştirebildiğimiz Shiny uygulamaları diğer programlama dillerine nazaran daha kolay bir şekilde dashboard oluşturmamızı sağlıyor. Google Data Studio Hızlı ve çok kolay bir şekilde dashboard oluşturabileceğiniz bir diğer araç ise Google Data Studio. Birçok eklentisi sayesinde farklı kaynaklardan veri aktarımına olanak sağlayan ve kolay kullanıma sahip bir görselleştirme aracı. Hemen hemen herkesin sahip olduğu gmail hesapları ile giriş yapıyor olup farklı bilgisayarlardan da browser üzerinden bağlansak bile verilerimize ulaşıp çalışmaya / görsellerimizi paylaşıp özelleştirmeye devam edebileceğimiz bir opsiyon olması da ayrı bir güzel yanı. Dahası da var tabi. Mesela açık Grafana’yı duymayanımız yoktur. Etkileyici görselleri ile lider şirketlerin de kullandığını bildiğimiz, ücretli ve açık kaynak versiyonu bulunan farklı kaynaklardan veri okumaya ve sorgulara izin vermesiyle dikkatlerimizi çeken bir görselleştirme aracı. Yine Python tarafında ise StreamLit ve Plotly-Dash öne çıkan ve neredeyse hiç HTML ve CSS bilmeden web uygulaması olarak etkileşimli dashboardlar ortaya koymamızı sağlayan kütüphaneler. Önceki yazılarımda da üzerinde durduğum Python plotly kütüphanesi çatısında bulunan dash, web uygulaması olarak dashboardlar oluşturmamızı sağlıyor. Neredeyse hiç HTML ve CSS bilmeden her türlü detayı özelleştirmeye izin vererek etkileşimli dashboard yapmaya izin veriyor. Python’da işlediğimiz verileri statik veya dinamik bir şekilde görsellere dökmeye, her türlü filtrelemeye ve bunları kullanıma açmaya olanak sağlıyor plotly dash. Mesela eğitilmiş makine öğrenmesi modellerimizin tahmin değerlerini, kullanıcıdan alınan inputlar ile yönetebildiğimiz çıktıları, grafikleri sunmaya olanak tanıyor. Bir kurcalamak isterseniz mesela geçen yazımızda kullandığımız veri seti ile çok basit bir örneği  github adresinden bulabilirsiniz. Bu yazımızda genel olarak bir uygulama yapmayıp sadece kullanılabilir dashboard opsiyonları üzerinde durduk. Bir sonraki yazımızda Python’da etkileşimli bir dashboard oluşturup bu dashboardın özelleştirilmesine ve grafikleri etkilemesine değiniyor olacak ve veri görselleştirme serimizi noktalayacağız. Bir sonraki yazıda görüşmek üzere.

STEM

TI (Texas Instruments) LaunchPad ile MSP430 Mikrodenetleyicisi Programlamaya Giriş

Merhaba, blog yazılarımda yepyeni bir seriye başlıyorum. Bu seride birlikte Texas Instruments (TI) MSP-EXP430G2ET geliştirme kartını kullanarak C programlama dili ile çevre birimlerini tanıyıp örnek uygulamalar geliştireceğiz. MSP430 Nedir? MSP (Mixed Signal Processor) mikrodenetleyicileri 16 bit RISC mimariye sahiptir. Bu mikrodenetleyicilerin en önemli özellikleri düşük güç tüketimine sahip olmalıdır. MSP430 mikrodenetleyecilerin birçok farklı serisi bulunmaktadır. Biz M430G2553 serili mikrodenetleyiciyi öğrenip programlayacağız.  Mikrodenetleyicinin datasheetini buradan indirip inceleyebilirsiniz. TI LaunchPad Texas Instruments tarafından mikrodenetleyicileri programlamak için LaunchPad isimli geliştirme kartları üretilmektedir. LaunchPad başlangıç seviyesine uygun, kullanımı kolay geliştirme kartlarıdır. Bu seride MSP-EXP430G2ET numaralı geliştirme kartını kullanacağız. TI sitesinde kullanacağımız kartla ile ilgili açıklamalara ve dokümanlara buradan ulaşabilirsiniz. Kartımızda 5V, 3V, GND güç çıkışları; RX ,TX, UART pini; MISO, MOSI, SCLK, SPI pini; SCL SDA, I2C pini; PWM pini ve 6 adet I/O pini bulunmaktadır. Uygulamalar yaptıkça bunları daha detaylı inceleyip öğreneceğiz. Code Composer Studio IDE TI LaunchPad MSP430 geliştirme kartımızı programlamak için Code Composer Studio IDE (CCStudio veya CCS Tümleşik Geliştirme Ortamı) kullanacağız. CCS, TI ürünlerini programlamak için kullanılmaktadır. Bu geliştirme ortamı Eclipse açık kaynak geliştirme ortamına dayanmaktadır. C/C++ derleyici, kaynak kod düzenleyici, proje oluşturma ortamı, hata ayıklayıcı gibi birçok özelliğe sahiptir. CCS IDE’yi buradan ücretsiz bir şekilde indirebilirsiniz. İndirdikten sonra programın kurulumunu kolaylıkla yapabilirsiniz. MSP430 registerlar seviyesinde programlayacağız. Bunun sebebi TI’ın yayınlamış olduğu bir kütüphanesinin bulunmamasıdır. Register seviyesinde programlamada kütüphane kullanmadan çevre birimlerini kullanarak mikrodenetleyecinizin registerlarını değiştirerek yapılan programlamadır. Böylelikle flash hafıza olabildiğince en düşük şekilde kullanılmış olacağız. İlk defa register seviyesinde programlama yapacaklar için register seviyesinde programlama aslında o kadar da zor değil birlikte bunu göreceğiz. Bir sonraki yazımda ilk uygulamamızı yapacağız. O zamana kadar kendinize iyi bakın görüşmek üzere 🙂

STEM

Ateşi Donduran Sistem: FireIce

Ateşi dondurarak söndüren sistem olarak nitelendirilen FireIce, yangın söndürme ve termal koruma yapan bir sistemdir. Firelce adlı madde sürülen nesneler yanmadığı gibi, hangi özellikte olursa olsun, yanan nesnenin üzerine sıkıldığında da anında söndürüyor. Jel şeklinde ya da toz şekline de bulunabilen bu madde çeşitli yangınların söndürülmesinde ve korunmasında üstün yeteneklere sahiptir.

STEM

Kotlin’de Fonksiyonlar

Herkese merhaba, bugünkü yazımızda Kotlin’de fonksiyon tiplerine değineceğiz. Fonksiyonlar; kodları bir arada tutan, bir işlemi gerçekleştiren ve bir değer döndürebilen kod bloklarıdır. Kotlin’de fonksiyonlar fun anahtar kelimesiyle deklare edilir ve adlandırılmış ya da varsayılan değerler ile bağımsız değişkenler alabilirler. Şimdi fonksiyon tiplerine göz atalım.

STEM

Türkiye’de Yazılım Test Dünyasında İlham Veren Kadınlar

Geçmişten günümüze her sektörde olduğu gibi IT sektöründe ve yazılım test alanında kadının varlığı, var olabilme çabası ve varlığını sürdürme mücadelesi hep olmuştur. Doğasında var olan mücadeleci ruhla birçok zorluğun üstesinden gelen kadın, kariyer basamaklarını da aynı özgüven, cesaret ve sabırla tırmanmış, elini attığı her işin altına o görünmez imzayı atmayı başarmıştır. Bu cesur kadınlarla tanışmak, hele birlikte çalışma fırsatı yakalamak büyük bir şanstır. Ve şükürler olsun ki bu harika kadınlarla tanışma fırsatını ben de yakaladım. Bu yazımda sizlere bu muhteşem kadınların başarı hikayelerinden ve bir kadın olarak test dünyasında yaşadıkları zorluklardan bahsetmek istedim.

STEM, Toplumsal Cinsiyet Eşitliği

Bilim ve Teknoloji Alanlarında Sürdürülebilir Eşitlik Sağlamak Üzerine Düşünceler

Son yıllarda, hemen hemen her çalışma alanında kadınlar için eşit koşullar sağlanması, kadın uzmanların daha fazla görünür olmaları ve özellikle kız çocuklarının erkek egemen çalışma alanlarını da korkmadan tercih etmelerinin sağlanması için bireysel ve kurumsal ölçeklerde çeşitli çabalar sarf edilmekte. Reklamlar ve kampanyalar düzenlemek, yöneticilerin demeçler vermesi, rol model örnekleri sunmak gibi yaygın yaklaşımların ulaşılmak istenilen hedefe katkıları yadsınamaz. Fakat bu yaklaşımların tartışılması gereken bazı yönleri olduğunu düşünmekteyim. Bu konularda bir otorite olmadığımı yazının hemen başında belirtmek isterim. Okuyacağınız yazıda da kendi görüşlerimi ve gözlemlerimi sizlerle paylaşacağım. Çocukların ve gençlerin aktif olarak takip ettikleri sosyal medya platformları, televizyon programları ve diziler gibi ortamlarda bilimin çeşitli dallarında çalışan kadınları görebilmelerini ve hatta onlara erişebilmelerini sağlamaya çalışmak, onlara bilimi ve bilimsel düşünceyi sevdirmek için etkili bir adım. Bundan yıllar önce durum farklı olsa da artık hiç kimsenin “Bu konuda uzman kadın yok.”  bahanesine sığınabileceğini sanmıyorum. Yeterli araştırmayla bilimin çeşitli dallarında uzmanlaşmış kadınlara ulaşmak mümkün. Bu görünürlüğü sağlayan çeşitli platformlara ve bu platformlarda görünür olmaya çalışan insanlara bu aşamada ne kadar teşekkür etsek az. Bu “görünürlük” yaklaşımının, yazılı demeçlerden, büyük şirketlerin düzenlediği reklamlar ve kampanyalardan çok daha değerli olduğunu düşünmekteyim. Çünkü, farkında olarak ya da olmayarak sosyal, ekonomik ve kültürel seviyesi kendimize benzeyen (en azından ulaşılabilecek derecede yakın olan) insanlarla bağ kurmaya daha yatkınız. Büyük bir şirket yöneticisinin demeçleri, reklamlarda rol alan ünlülerin açıklamaları, en prestijli ödülleri alan kişilerin sürekli birbirine benzeyen, duygusal hikayelerle örnek olarak sunulmaları her ne kadar toplumu uyandırmak adına faydalı olsa da gençlerin bu kişilerle bağ kurabilme ihtimalleri benim düşünceme göre daha zayıf. Bu aşamada, daha küçük ölçekte çalışan ve katılımcılar ile dinleyicilerin birebir etkileşimlerinin çeşitli nedenlerden dolayı daha kolay olduğu platformların önemi devreye girmekte. Kendi öğrencilik yılları tecrübelerimden ve sonrasındaki gözlemlerimden yola çıkarak, dinleyici sayısının çok fazla olmaması, konuşmacıya çekince duymadan sorular sorabilmek, konuşmacıdan gerçek zamanlı cevap alabilmek gibi unsurların daha samimi ve gerçekçi bir iletişim ortamı kurulmasına olanak verdiğini söyleyebilirim. Bu gibi nedenlerden dolayı gönüllü oluşumları desteklemenin, varlıklarını çevremizle paylaşmanın ve aktivitelerine yardımcı olmanın, gençlerin meslek tercihlerini bilim ve teknoloji gibi alanlara yönlendirebilmek adına büyük reklam çalışmalarına kıyasla bireysel ölçekte daha faydalı olduğunu düşünmekteyim. Peki hem küçük hem de büyük ölçekte, kız çocuklarını bilim ve teknoloji alanlarına yönlendirmek için uğraşan platformlar kişileri rol model olarak sunmak zorunda mı? Hayır değil.  Günümüzde, her alandaki başarılarda herkes için bir rol model unsuru aranmakta. Özellikle kadınlar için bu rol modellik yaklaşımı genellikle cinsiyet üzerinden tanımlanmakta. Kişisel bir örnek vermek gerekirse, çalıştığım alanı seçerken benim belirli bir rol modelim yoktu. Çocukken özendiğim, çalışmalarını kendime örnek aldığım çeşitli kadınlar oldu ama bu kişi benim rol modelim dediğim biri olmadı. Kadın veya erkek, ünlü ya da hayatımın içinden beni etkilemeyi başaran tüm insanların karışımı benim hayali rol modelimdi. Çok başarılı bir insanın hayat görüşü bana uymayabilir fakat azmini örnek alabilirim, başka bir kişinin çalışma düzeni bana ilham verebilir ama bilimsel problemlere yaklaşımını eksik bulabilirim. Rol model olmak bence sorumluluk yüklü bir cümle. Başarılı bir insanı topluma “bu kişi size rol model olsun” diye sunduğumuzda aslında hayal kırıklığı yaratma ihtimalini de birlikte sunuyoruz. Ayrıca bir insanın başarıları yerine çok geri planda kalması gereken özelliklerini onu örnek alması gereken grupla özdeşleştirip ‘sizin önünüzdeki örnek bu kişi olsun’ diye sunmak da bence yanlış bir yaklaşım. Popüler bir örnek olarak, Marie Curie’nin çeşitli sohbetlerde özellikle kadınlara rol model gösterilmesi bana hep çok itici gelmiştir. “Ben büyüyünce bilimle ilgilenmek istiyorum.” diyen bir kız çocuğuna, “O zaman Marie Curie’yi rol model almalısın.“ dediğinizde çocuk da size dönüp “Neden?” diye sorarsa verebileceğiniz tek cevap “Çünkü bilimle uğraşmış bir kadın.” ise iyi niyetli ama yanlış yoldasınız demektir. Bilimle ilgilenen erkek çocuklarına Albert Einstein’ı örnek verirken “Çok başarılı bir erkek” demiyorsak ya da Marie Curie’yi erkek çocuklarına örnek olarak göstermekten kaçınıyorsak, kız çocuklarına da başarılı bir insanı örnek verirken o kişinin cinsiyeti haricindeki özellikleriyle çocuğun kendisini özdeşleştirmesini sağlamaya çalışmanın özgüven sağlamak açısından daha faydalı olacağını düşünüyorum. Çocukların ve gençlerin gelecekte bilimle ilgilenebileceklerini ve cinsiyetlerinin buna engel olmayacağını anlamalarını sağlamak ince düşünülerek yaklaşılması gerektiren yöntemler gerektirmekte ve hepimize büyük küçük çeşitli sorumluluklar düşmekte. Benim bu yazıyı yazabilmem konusunda bana ilham ve cesaret sağlayan gönüllü platformların varlıklarını sürdürebilmelerine yardımcı olmak, tecrübelerimizi ve fikirlerimizi bizimle aynı mesleği seçmek isteyen gençlerle paylaşmak bizim sorumluluklarımızın bir kısmını oluşturuyor. Esas sorumlu davranmamız gereken nokta ise bilimde eşitliğin sürdürülebilir olmasını sağlamak. Temel bilim ve mühendislik gibi alanların okul sıralarında eskiye kıyasla çok daha dengeli bir öğrenci dağılımı görmek mümkün. Fakat üniversitelerin kadrolarına, akademideki üst düzey yönetici popülasyonlarına, araştırma merkezlerindeki dağılımlara, prestijli konferansların konuşmacı profillerine baktığımızda halen daha büyük bir eşitsizlik görmekteyiz. Meslek tercihi konusunda yol almış olsak bile kariyer yolculuğunda insanların karşılarına koyduğumuz bariyerlerin ve yaptığımız önyargılı seçimlerin sonucunda bilimde eşitliği her aşamada sürdürme konusunda halen daha sınıfta kalmış durumdayız. Sonuç olarak, toplumun her kesimini bilime özendirmek için için rol modeller sunmak, pahalı kampanyalar düzenlemek, yazılar yazmak ya da konuşmalar yapmak yeterli değil. Atmamız gereken en önemli ve etkili adımlar, bulunduğumuz konumdaki gücümüzü önyargısız bir şekilde kullanmak ve kariyer yolculuğundaki insanların önlerine çıkan cinsiyet, ırk, kişisel tercih, fiziksel ya da ruhsal tabanlı engelleri kaldırmak için çaba sarf etmek. Ancak bu şekilde toplumun her kesiminden gençlerin korkmadan bilime yönelmesi konusunda gerçekçi kazanımlar elde edebiliriz.

STEM

Adım Adım Veri Görselleştirme: Çeşitli Senaryolar ile Görselleştirme

Merhaba, serimizin önceki iki yazısında bir temel atmıştık, bu bölümde bazı sorulara cevap olan görseller sunuyor olacağız. Önceki yazılara göz atmanızı öneririm: Adım Adım Veri Görselleştirme: Tipler Ve Tüyolar. Adım Adım Veri Görselleştirme: Python Temelleri Bu yazıda oluşturulan örnek görsellerde hepimizin anlayabileceği, üzerine fikir yürütebileceği bir konu olan vücut ölçülerini barındıran “Body Fat Prediction Dataset“ini kullandım. Kaggle’dan ulaştığım bu veri setini indirip kurcalayabilir, veri hakkında daha detaylı bilgiye sahip olabilirsiniz. Not: Bu yazıda temel sorular üzerinde gidilip, bazı önemli ön kontrol ve ara aşamalar atlanmaktadır. Temel amaç görselleştirme olup en doğru bilgi için daha detaylı çalışma gerekmektedir. Öncelikle bazı metrik dönüşümler ve ek hesaplamalar yaptım. Kimi veriler bize biraz uzak IBS ve INC cinsinden metrikler ile ifade ediliyordu, bunları cm ve kg cinsine dönüştürmem gerekti. Bu gibi ara hesaplamalar ve tüm kodlara github adresimden ulaşabilirsiniz. Şüpheli bir durum olup olmadığını anlamak için değişkenleri box plot ile kontrol edebiliyoruz. Box plotı birden fazla değişken için tek tek oluşturmak veya tek tek değişken bilgilerini girerek eklemeler yapmak mümkün olsa da bir for döngüsü ile tekrardan kaçınarak tek seferde görseli oluşturmak bize kolaylık sağlayacaktır. Bu görselde direkt gözümüze BMI değerinin 160’ları bulduğu bir gözlem çarpmış olmalı. BMI değeri normalde 25 civarı olması beklenen, 40 üzerindeyken ciddi tehlikeye işaret eden bir durum. Bu değerin gözlemlendiği kişiye baktığımda bu kişinin 44 yaşında  92kg ve 75cm boyunda olduğunu gördüm. Bir karışıklık olduğu ortada, bir hatalı veri girme durumu olabilir veya bu arkadaşımız engelli olabilir, standart ölçümlerde beklenmedik çıktılar elde edilmiş olabilir.BU nedenle bu gözlemi sonraki aşamalarda dışarıda tutmayı uygun buldum. BMI skorlarının düştüğü aralıklar “zayıf”, “normal”, “obez” gibi gruplara işaret ediyor. Bu BMI gruplarının veri seti içerisindeki dağılımı görmek istediğimizi varsayalım. Gösterimimizi Pie Chart ile yapmamız gerekiyor fakat pie chart bir değerin toplamı gibi bir kümülatif gösterim mantığına dayanıyor. Veri setimizde her bir satır 1 kişiyi temsil ediyor olduğundan, her satırın temsil ettiği kişiyi belirtmek için bir dummy değişken oluşturmamız gerekiyor. Bu şekilde pie chart ile ortak dili konuşabiliriz. Veri setimizde 250 civarı gözlem var. Yaşlar 20-70 aralığında seyrederken hemen hemen her yaştan birden fazla kişi bulunuyor. Biri size şöyle bir soru sorabilir “Aynı yaştaki kişilerin max – min BMI skor farkları nedir?” Mesela 26 yaşında 4 kişi var ise ve BMI skorları sırası ile 20-28-23 ve 19 ise 26 yaşın BMI skor max-min aralığı 28-19=9 olacaktır. Böyle bir soruda yaşlara göre bir groupby işlemi gerektiği açık olsa da min-range’e ulaşmamızı sağlayan bir aggrigation func bulunmamakta, böyle bir durumda bu fonksiyonu da bizim yazmamız gerekir. Her bir bar max-min farkını belirtiyorken 0 olan yaşlarda tek gözlem olduğu veya bir gözlem olmadığı, dolayısıyla bir max – min hesabı yapılamadığı sonucuna ulaşılabilir. Verileri anlama çalışmalarımızın sonu bildiğiniz gibi bir model eğitimine / analizine çıkıyor. Temel olarak regression, classification, time series analysis ve clustering  görevlerimiz var. Bir sorudan bağımsız bu veri setine rastgele belirlediğim değişkenleri kullanarak bir clustering algoritması olan KMeans modeli ile kümelenmeleri görselleştirmeye karar verdim. KMeans ile çok sayıdaki değişkenlerce birbirine benzeyen / ayrılan gözlemlerin aynı veya farklı gruplara düşmesine göre yorumlar yapıyoruz. Burada küme sayısını belirlemek için bir çok yöntem var. Ben bunlardan Elbow Methodu’nu (Dirsek Yöntemi) kullandım. Bu yöntem ile küme sayısı ve hesaplanan WCSS skorları grafiğe döküyor ve büyük dirsek (elbow) kırılmasının olduğu noktadaki küme sayısını optimum küme sayısı kabul ediyoruz. Dirsek noktasındaki hata ne kadar düşükse gözlemler de o kadar güzel / keskin bir şekilde kümelere ayrılabilir yorumu yapabiliriz. Görsele baktığımızda bir dirsek kırılması göze çarpıyor net olarak. WCSS’nin durağanlaşmayıp giderek azalması grup ayrımlarının keskin olmayacağı konusunda şüpheye düşürebilir bizleri. İlla bir karar vermek gerekirse 2 ve 4 noktalarındaki kırılmalardan durağana daha yakın olan 4 noktasını seçerek devam ediyorum analizime. Kümeleme sonuçlarını bir görselde göstermek çok da kolay değil aslında. Çünkü eğitimde kullandığımız 10 kadar değişkeni en düzgün gösterim 10 boyutlu bir düzlemde gösterim ile olacaktır. Bu da insan algısının çok üzerinde bir boyut sayısı olduğundan scatter plot ile 2 boyut ile gösterebilmek için bir yardımcıya ihtiyacımız var. 10 boyutlu veriyi 2 boyuta indirgemede de PCA’den yardım alıyoruz. Normal şartlarda PCA’de normal dağılım gibi varsayımlara sahip, fakat temel amacımız görseller hakkında bilgi vermek olduğu için bu kontrolleri yapmıyorum şuan. PCA yüksek boyutlu veri setinin değişkenliğini biraz bilgi kaybı ile daha düşük boyutlarla temsil edecek dönüşümü sağlayan bir yöntem. 10 boyutlu verimizi böylelikle 2 boyuta indirgiyor ve KMeans sonuçlarımızı PCA ile elde edilen 2 Principle Component ile gösteriyoruz. (Bu arada 2 component ile %80+ açıklama yüzdesine ulaştık.) Beklediğimiz gibi kümeler birbirinden keskin bir şekilde ayrılmıyor, fakat 4 kümenin görselini bu şekilde oluşturmuş olduk. Bu yazımızda bir veri setini görselleştirme teknikleri ile tanımaya ve bazı sorulara cevap bulmaya çalıştık. Ek olarak bir kümeleme algoritmasında görselleştirme teknikleri nasıl efektif bir şekilde kullanılır bunlara değindik. Bir sonraki yazımızda yine Python ile dinamik bir dashboard olşturduğumuz bir web app yapacağız. Veri analizi ve veri manipülasyonu hakkında herhangi bir sorunuz ile ilgili iletişime geçmekten çekinmeyin. Serinin sonraki yazısında görüşmek üzere.

STEM

Deneyap Kart ile OLED Ekranda Grafik Uygulaması

Merhaba, bu yazımda bir uygulama yazdım. Bu uygulamada Deneyap kart kullanacağız. Deneyap kart üzerinde yer alan algılayıcı ile karttaki dönüş eksenlerinin (roll, pitch ve yaw) açılarını alacağız. Almış olduğumuz eksen açılarının grafiğini oled ekranda yazdıracağız. Roll, Pitch ve Yaw Nedir? Roll(yatış); uçan hava aracının ağırlık merkezinden geçen burnundan kuyruğuna uzanan eksendir. Uçan hava aracının bu eksende yaptığı sağa veya sola doğru harekete roll hareketi denir. Pitch(yunuslama); uçan hava aracının ağırlık merkezinden geçerek bir kanat ucundan diğer kanat ucuna doğru uzanan eksendir. Uçan hava aracının bu eksen etrafına yaptığı burun aşağı veya yukarı hareketine pitch hareketi denir. Yaw(dönme); ağırlık merkezinden geçerek gövde üst kısmından gövde alt kısmına uzanan eksendir. Uçan hava aracının burun sağa veya sola doğru yaptığı harekete yaw hareketi denir. [youtube v=”pQ24NtnaLl8″] Deneyap Kart Bu uygulamada başlıkta da belirttiğim gibi Deneyap kart kullandım. Deneyap kart, ülkemizde geliştirilen ESP32-WROVER-E tabanlı bir geliştirme kartıdır. Kart ile ilgili detaylı bilgileri “https://docs.deneyapkart.org/” sitesinden üzerinden bulabilirsiniz. Deneyap kartı programlamak için Arduino IDE ya da Platformio IDE’yi kullanabilirsiniz. Verdiğim linkte gerekli ayarlamalar ayrıntılı olarak verilmiştir. Gerekli ayarlamaları yaptıktan sonra kartı programlamaya başlayabilirsiniz.  Deneyap kart üzerinde yer alan LSM6DSM algılayıcısı vardır. Bu algılayıcı ile 3-eksen ivme ve 3-eksen dönüş ölçümü yapılmaktadır. Bu algılayıcı ile roll, pitch ve yaw eksen açılarını -180 derece ve +180 derece değer aralığında yazdıracağız. Roll, Pitch ve Yaw Açılarını Ölçme Aşağıda verdiğim kod ile Deneyap kart üzerindeki LMS6DSM algılayıcısı ile roll, pitch ve yaw açılarını serial ekrana yazdırıyoruz. Deneyap Kart ile OLED Ekran Bağlantı Şeması Benim elimde 1.44 inç OLED TFT LCD ekran modülü var. Bu OLED ekran SPI ile haberleşmektedir. RGB 128×128 çözünürlüğe sahiptir. Uygulamayı bu OLED ekran ile gerçekleştirdim. Uygulamanın bağlantı şeması aşağıdaki görselde gösterilmiştir. Deneyap kart üzerinde D0 numaralı pin OLED ekrandaki CS pinine, D1 pini DC pinine, D4 pini RES pinine, MOSI pini SDA pinine, SCK pini SCL pinine bağlanmıştır.   Roll, Pitch ve Yaw Eksen Açılarının Grafiğini OLED Ekranda Yazdırılması Aşağıda verdiğim kod ile kullandığım OLED ekranın boyutlarına göre roll, pitch ve yaw açılarını grafikte yazdırıyoruz. [youtube v=”Dl-xxMwenRA”] https://github.com/zeynepdicle/Deneyap_RollPitchYaw_OledGraph

Scroll to Top