Revell Darth Vader’s Tie Fighter (03602)

Basit seviyeli ucuz bir model ararken bunu buldum. Diğer küçük modellerdeki gibi dokununca kırılacak ya da tutulamayacak kadar küçük bir parça yoktu içinde. Bu bakımdan çok hoşuma gitti. Boyaması da benim olmayan yeteneklerime göre kolay sayılırdı. Parçaları yapıştırma sırasında da ciddi bir sorun çıkmadı, her şey yerine iyi oturdu diyebilirim.

Kolay, ucuz bir model yapmak isteyenlere tavsiye edebilirim.

Revell X-wing Fighter (03601)

Geçen gün kütüphaneye gittiğimizde oyuncakçıya da uğramıştık. Orada tank ister misin diye sorduğumda Nuri büyük şeyler seçmek istedi ama ucuz bir şey seç dedim. O da X-wing Fighter’ı seçti.

Maketin güzel tarafı kısa sürede yapılabilmesi. Çok fazla yağıştırılacak parça yoktu. Boyaması da kolay sayılırdı ama gövdeyi birleştirmek ve bir iki tane minnacık çıkartma çok zorluk çıkardı. Gözlerimin görmemesi ve ellerimin de bu kadar küçük parçayı tutamaması işi daha da zorlaştırdı ama yine de yaparken eğlendim. Dün son parçayı da yapıştırdım ama bu sabah temizlikçi anlaşılan maketi yere düşürmüş ve ince parçalarından ikisi yamulmuş. Kırılmaları, hem de Nuri’nin elinde, fazla zaman almaz bence.

Yine de böyle hobilerle uğraşmak çok eğlenceli. Keşke üretici firmalar bunları yapmak için daha çok kolaylık sağlasa. Mesela çıkartmaların bu kadar çetrefilli olmasına gerek yok bence. Ya da minicik parçalar önceden boyanmış üretilebilir bence. Tabii bunlar benim oldukça beceriksiz olduğum bir alandaki yorumlarım. Önemli olan iyi zaman geçirmek ama. O zaman maketlere devam tabii ki.

Wiesel (Blue Brixx)

Çocuklara bu Noel’de Lego muadili olan Blue Brixx setlerinden bir tane aldım ve bugün montajını bitirebildim. Wiesel adlı bir Alman panzeri. Anladığım kadarıyla bu modeli yapan firma Xingbao ve parçalar Blue Brixx’ten. Model üzerinde altı yaş üstü için uygun yazıyordu ve neden olmasın dedim.

Altı yaş üstü elli yaş üstünü kapsamıyormuş ama. Kılavuzdaki ilk adım için rahat onbeş dakika harcadım. Parçalar numaralandırılmış küçük poşetlerde duruyordu ve ilk adımda 1 numaralı paketle başlayın diyor. Güzel dedim ama 1 numaralı altı adet paket var ve kılavuzda da bunun böyle olduğu yazıyor.

Aradığım parçaların olabileceği ilk torbayı kabaca seçip bir kaba döktüm ve doğru parçaları bulmaya çalıştım. İki tanesini buldum ama üçüncüyü bulamadım. İkinci bir 1 numaralı torbayı daha açtım ve kaba boşalttım. Bu sefer de parça sayısı çok olduğundan doğru parçayı bulmak zaman almaya başladı. Ayrıca kılavuzdaki parça resimleri de küçük olduğundan görebilmek için telefonun el feneri modunu da epey kullanmam gerekti. Zamanla panzerdeki parçalar arttı ve kaptakiler azalmaya başladı, dolayısıyla parça arama zamanı da azaldı.

Bazı parçalar takıldığı yerden bir kere çıkarılınca tutuş gücünü epey kaybetti. Bunun dışında sonuç fena değildi bence. Birkaç parçanın gevşekleşmesi yüzünden çok oynanabileceğini sanmıyorum ama vitrinde güzel duracaktır.

Görüldüğü gibi modelde iki değişik top kısmı var. Bunlar kolayca değiştirilebiliyor.

Tensegrity

Tensional Integrity’nin kısaltması anladığım kadarıyla. Aralarında kablo gibi şeylerin gerilimiyle birbirine temas etmeyecek şekilde tutulan parçalardan oluşan yapılar. Sanırım twitter’da görmüştüm bu fikri ilk olarak ve youtube’da bulduğum şu videodan yararlanarak aşağıdaki modeli yaptım.

Parçaları tam dengeye getirmeyi videodaki kadar kolay yapamadım ama oluyor. Benim yaptığım model şöyle gözüküyor.

MuseScore

Geçenlerde aldığım rönesans blok flüt kitabındaki parçaların notalarının CD üzerindeki parçalarla tam uyuşmadığından bahsetmiştim. CD üzerindeki yorumları da notaya dökmeye çalışmaya karar verdim. Bunun için de notalarla çalışabileceğim bir program aramaya başladım.

Arayışım aslında çok kısa sürdü. MuseScore adlı program tam istediğim şeyleri yapan bedava bir program. Programı musecore.org adresinden indirdim. AppImage dosyasını da linux altında da kolayca çalıştırabildim. Bunun için chmod komutuyla programa +x özelliğini vermem yetti.

chmod +x MuseScore-3.6.2.548021370-x86_64.AppImage

Ardından programı

./MuseScore-3.6.2.548021370-x86_64.AppImage

komutuyla çalıştırdım.

Benim bilgisayarımda program arada sırada tekliyor ama bekleyince çalışmaya devam ediyor. Kullanımda hoşuma gitmeyen yerler oldu. Örneğin sonradan eklediğim ölçüleri değiştirmeyi bir türlü beceremedim. Bir süre yardım dosyası okumam gerekecek gibi ama programın parçaları çalabilmesi bu tür sorunları hemen unutturacak gibi geliyor bana.

Matematikte aklıma takılan bir şey

Bir şeyi uygulamakla anlamak arasında epey bir fark vardır. Benim için matematikte de bu hep böyle oldu. En basitinden çarpma işlemini neden öyle yaptığımı üniversite yıllarında anladım. Anlamak için üzerinde düşünmek de gerekiyor tabii. Birçok şeyi bu kadar geç anlamamın nedeni bunların üzerine düşünmüyor olmam. Uygulama işe yaradığı sürece nedenini sormaya ihtiyaç duymuyorum.

Aklıma takılan bu soru da uygulamada hiç sorun çıkartmadı ama biraz düşününce bazı şeyleri pek anlamadığım hissini uyandırdı. Olay lisede sınavlarda sık sık karşımıza çıkan çemberlerin kesişimi problemleri. Daha da açık anlatmam gerekirse, verilen iki çemberin kesiştiği noktaları bulma problemi. Çözümü çok kolay. İki çemberin denklemleri alınır, bu denklemler birbirlerine eşitlenir ve bu eşitliği sağlayan noktalar da çemberin kesiştiği noktalardır deriz. Yöntem basit ama uygulamada bir sorun var. Aklıma takılan kısım da hep bu oldu. Bu problemleri çözerken denklemleri eşitlediğimiz zaman çoğunlukla bir doğru denklemi bulmuşuzdur. Fakat çözdüğümüz problemlerde iki çember birbirini sıfır, bir ya da iki noktada keserdi. Doğru denklemini sonsuz tane nokta sağlar (doğru üzerindeki bütün noktalar) ama bu noktaların en fazla iki tanesi aynı anda bu iki çember üzerinde olur. O zaman bu doğruyu verilen çemberlerin biriyle kesiştirip (denklemleri eşitleyip) aradığımız noktaları buluruz. Şimdi aklıma takılan soruyu ifade edeyim: İki çember denklemini eşitlediğimizde neden bir doğru denklemi elde ediyoruz?

Önce birkaç örnek yapayım:

Örnek 1: Çemberlerimiz \(y^2 + x^2 = 4\) ve \(y^2 + (x – 2)^2 = 1\) olsun. Bu iki çemberin kesiştiği noktaları bulalım.

Birinci örnekteki çemberlerin kartezyen koordinat sisteminde gösterimi

Grafikte de görüldüğü gibi iki çember C ve D noktalarında kesişiyor. Peki şimdi bu noktaları lisede öğrendiğimiz gibi bulmaya çalışalım.

İki çember denklemini de eşitleyelim.

\(y^2 + x^2 – 4 = y^2 + (x – 2)^2 – 1\)

Şimdi bu yeni denklemi çözelim. İki taraftan da \(y^2\) terimlerini sadeleştirebiliriz.

\(x^2 – 4 = (x – 2)^2 – 1\)

Şimdi diğer terimleri açalım

\(x^2 – 4 = x^2 -4x + 4 – 1\)

\(x^2\) terimlerini sadeleştirelim ve sabit sayıları düzenleyelim.

\(– 7 = -4x\)

Bu denklemi de çözersek \(x = 7/4\) çıkar. Yani aradığımız noktalar x koordinatı 7/4 olan noktalar kümesinin elemanları ama bu noktalar bir doğru oluşturmakta. Şimdi bu doğruyu da grafiğimizde gösterelim.

İki çemberin denklemini eşitlediğimizde C ve D noktasından geçen doğrunun üzerindeki noktalar kümesini bulduk

Son olarak bu doğruyla çemberlerden birini kesiştirdiğimizde aradığımız iki noktayı bulacağız. Bunun için A çemberinde x yerine 7/4 değerini koymamız yeterli.

\(y^2 + (7/4)^2 = 4\)

\(y^2 + 49/16 = 4\)

\(y^2 = 4 – 49/16\)

\(y^2 = 15/16\)

\(\left| y \right| = \sqrt{15}/4\)

\(y = \sqrt{15}/4\) ve \(y = -\sqrt{15}/4\)

Şimdi bir de kesişmeyen çemberler örneğine bakalım. Bunun için ikinci çemberi birinci çemberden biraz daha uzağa taşıyacağım.

Örnek 2: Çemberlerimiz \(y^2 + x^2 = 4\) ve \(y^2 + (x – 4)^2 = 1\) olsun. Bu iki çemberin kesiştiği noktaları bulalım.

İkinci örnekteki çemberler.

Aynı yöntemle bu problemi inceleyeyim.

\(y^2 + x^2 – 4 = y^2 + (x – 4)^2 – 1\)

\(x^2 – 4 = (x – 4)^2 – 1\)

\(x^2 – 4 = x^2 – 8x + 16 – 1\)

\(– 4 = – 8x + 15\)

\(– 19 = – 8x\)

\(x = 19/8\)

İki çember denkleminin kesişim noktaları bu doğru üzerindeymiş

Şimdi bu doğrunun denklemini soldaki çemberle kesiştirip kesişim noktalarını bulalım.

\(y^2 + (19/8)^2 = 4\)

\(y^2 = 4 – (19/8)^2\)

\(y^2 = 4 – 361/64\)

\(y^2 = 256/64 – 361/64\)

\(y^2 = – 105/64\)

Bu denklemin de gerçel sayılarda çözümü yok. Demek ki iki çember kesişmiyormuş.

Bu çözümlerden yola çıkarak kendime yıllarca bazı şeyler sorup durdum. İtiraf edeyim bu konuları literatürde çok aratmadım ya da bu hayatımın problemidir diyip hayatımın kalanını buna adamayı düşünmedim. Akademiye girip bu alanda çalışmayı düşünmedim.

Çember denklemi o çemberin üzerindeki noktaları belirleyen matematiksel bir denklem olmalı. Yani düzlemde sırayla ya da rastgele noktalar seçersek buktaları bu denkleme koyarak o noktanın çemberin üzerinde olduğunu ya da olmadığını anlayabiliriz ve bu yöntem asla yanılmaz. İkinci bir çember denklemi daha aldığımızda yine aynı noktaları bu denkleme koyduğumuzda aynı noktaların bu çember üzerinde olup olmadığını da şüphesiz bulabiliriz. Genelde iki denklemi eşitlemekten beklentim çıkan denklemdeki noktaların başlangıçtaki iki denklemi de sağlaması olmasıdır ama en azından ikinci derece denklemlerde anlaşılan bu böyle olmuyor. Heralde genel olarak iki denklemi kabaca birbirine eşitlemek aynı anda bu iki denklemi sağlayan noktalar kümesini bulmak anlamına gelmiyor. Peki denklemleri eşitlemek ne anlama geliyor?

Belki de eşitlediğimizde bulduğumuz şeyler bu denklemleri bir başka şekilde sağlayan daha düşük dereceli matematiksel nesnelerdir. Mesela şöyle bir hayal kurayım. Varsayalım bir çember denklemi düzlemdeki bir doğru (herhangi bir tane ya da belki sonlu sayıda olabilir, şu an sadece doğaçlama yapıyorum) yardımıyla tanımlanabilsin. O zaman iki çember denklemi aldığımız zaman bunları eşitlediğimizde çıkan doğru bu iki çember denklemini de aynı anda tanımlayan (tabii ki her bir çemberin merkezine ve yarıçapına bağlı olan) doğru olabilir belki. Peki yukarıdaki örneklerde bulduğum doğru denklemlerinin anlamı neydi? Kısaca onlardan bahsedeyim.

Bu işlemleri görsel olarak geogebra ile hazırladım. Birinci örneğin linki burada. Burada Çıkan doğrunun üzerindeki herhangi bir G noktasından ve çemberlerin merkezlerinden geçen doğruları çizdiğimizde bu doğrular A çemberini H ve I noktalarında, B çemberini de J ve K noktalarında keserler. Şimdi GH ve GI doğru parçalarının uzunluklarının çarpımına e, GJ ve GK doğru parçalarının uzunluklarının çarpımına da i dersek, G noktasını çözüm doğrusu üzerinde kaydırdığımızda bu sayıların birbirine hep eşit olduklarını görürüz. Burada bahsettiğim çarpımlar lisede bir noktanın bir çembere olan kuvveti diye öğrendiğimiz terimdir. Yani kesişim doğrusu iki çembere de kuvvetleri eşit olan noktalar kümesiymiş.

Peki kesişmeyen iki çember için de bu kural geçerli mi? Yine geogebraya sordum (Matematiksel çıkarımı da zor değil aslında). Bu sefer örnekte bulduğum doğru üzerinde rastgele seçtiğim noktaya C dedim. Bu nokta ile A çemberinin merkezinden geçen doğrunun çemberi kestiği noktalara da D ve E dedim. Aynı şekilde B çemberi üzerindeki kesişim noktaları olarak da F ve G noktaları bulundu. Bu sefer CD ve CE doğru parçalarının uzunluklarının çarpımları, CF ve CG doğru parçalarının uzunlukları çarpımına eşit oldu. Bu da bir önceki örnekte bahsettiğim kuvvet formüllerine karşılık geliyor. Bu denemeyi de bu linkte kaydettim.

Aklıma gelen bir diğer soru da bu İki çemberin kesişmesinde ortaya çıkan doğrunun iki çemberin de ortak kuvvet doğrusu olması gözleminden çıkıyor. Bir çemberin aynı düzlemde verilen herhangi bir doğruya göre kullanışlı bir tanımı var mı? Bu tanımdan yola çıkarak kesişmeleri daha kolay anlaşılır hale getirebilir miyiz?

Bir matematikçi olmadığım için çok basit bir şeyi göremiyor olabilirim ama bu durumu anlamakta zorlanıyorum. Bir bilen bana doğru yolu gösterirse sevinirim. Bu anlayabileceğim bir şey mi yoksa her şey çenemi kapatıp hesaplamalara devam etmekten mi ibaret?

Lego EV3 ve Micropython

Çocuklara yıllar önce aldığım lego robotla neler yapabilirim diye düşünürken internette yaptığım bir arama sonucunda Micropython diye bir programlama yüntemi olduğunu gördüm. Evde Linux bilgisayar kullandığımdan orijinal programlama ortamını kullanmayı düşünmüyordum ama bu ilginç geldi. Ayrıca Lego’nun sayfasında da bu programın desteklendiğini okudum ve hemen denemeye karar verdim.

İlk önce tabii ki eski pilleri kontrol ettim. Eneloop pro piller kontrol biriminin içinde duruyordu ama şarj aletini evde bulamadım. Belki de bodrumdaydı ama aramaya da üşendim ve yenisini sipariş ettim. Şarj aleti gelene kadar da micropython için gereken SD kartı bu sayfada anlatıldığı gibi hazırladım. Pilleri şarj ettikten sonra bu sayfadaki örnek programları yapıp denemelere başladım. Visual Studio Code eklentisi oldukça iyi çalıştı. Tek sorun USB bağlantısının kısa süre sonra kendiliğinden kopması. Yine de python ile programlamanın bloklarla çalışmaktan çok daha kolay olacağına inanıyorum.

Bu yılın denemeleri

Bu sene ektiğim bazı çiçekleri bahçeye çıkardım sonunda. Burada havalar hala soğuk ama iyi uyum sağladılar gibi görünüyor. Soğuk havanın yanındaki diğer tehlike de sümüklü böcekler. Genelde ektiğim çiçekleri yemeyi çok seviyorlar. Geçen seneden kalan bir çiçeğimi neredeyse komple yediler. Yeni ektiğim çiçeklerle pek ilgilenmediler ama.

Kudret narı

Kudret narının iki tohumunu içerde, diğerlerini de dışarıda. İçeridekilein ikisi de çimlendi ve birini bahçeye aktardım. Şimdilik orada iyi idare ediyor gibi görünüyor. İçerdekini de ne olur ne olmaz diye bekletiyorum hala.

Cosmos bipinnatus

Bunlar da çabucak çimlendi ve ilk parti bahçeye uyum sağladı gibi gözüküyor.

Bahçede de hafif hafif çimlenme başladı ama çok fazla ve işaretlemeden tohum ektiğim için neyin ne olduğunu henüz bilmiyorum.

MongoDB Compass

Uzun zamandır ilişkisel veritabanlarını (RDBMS) programladığım sistemlerde kullanıyorum. Bu sırada tabii ki başka türlü veritabanları da yaygınlaşmaya başladı. Şirketteki işlerim biraz azalır gibi olduğunda NoSQL tipi bir veritabanını öğreneyim dedim. Bilgisayarıma hemen MongoDB sunucusunu kurdum ve çeşitli kaynaklardan bu veritabanını nasıl kullanacağımı öğrenmeye başladım. İşlerimi Linux altında konsolda yapıyordum ve bu sırada MongoDB Compass diye bir programdan haberdar oldum. Onu da kurdum ve kullanmaya başladım. Verileri görme, bazı sorguları çok daha kolay bir şekilde yazma ve komutları otomatik tamamlama özellikleri öok hoşuma gitti ama her türlü sorguyu kullanmak mümkün değildi. Yani hala arada konsolu kullanmam gerekiyordu. Bu sırada programın alt tarafında _MONGOSH beta gibi bir yazı gördüm. Belki shell kısmı buradadır diye bastım ve gerçekten de konsol gibi bir şey açıldı ama yazdığım her komut hata veriyordu.

MongoError: No AuthProvider for DEFAULT defined.

Internette bu hata mesajını yazıp yaptığım aramalarda bir sonuca ulaşamadım ama bağlantı tanımlama penceresinde zaten bir miktar ipucu varmış.

Ben connection string kısmına sadece aşağıdaki komutu yazmıştım.

mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

Bunu yazınca mongodb compass compressor tanımı için bir uyarı vermişti ama. Bunun üzerine komutu şöyle değiştirmiştim.

mongodb://127.0.0.1:27017/?compressors=zlib&gssapiServiceName=mongodb

Anlaşılan username ve password de tanımlamam gerekiyordu.

Önce bu sayfada anlatıldığı şekilde konsolu kullanarak bir kullanıcı admini ekledim.

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

Bu komuttan sonra mongodb bu kullanıcı için şifreyi soruyor. Ardından kullanıcı tanımlanmış oluyor. Bundan sonra bağlantı komutunu şifre kısmına yukarıdaki komutla beraber tanımladığım şifreyi kullanarak yazdım.

mongodb://myUserAdmin:şifre@127.0.0.1:27017/?compressors=zlib&gssapiServiceName=mongodb

Bundan sonra programın altındaki _MONGOSH BETA kısmını da konsol olarak kullanabildim.