30.12.2020 20:28    

ProhibiT
Merhaba, arkadaşlar,

Yine uzunca bir paylaşım yapacağım izninizle. Oğlum Alp Eren Güvercin (oğlum diyorum ama, teşhis ve tespitlerine çok değer verdiğim insanlardan biridir.) derki, "Baba, bu devirde hiç kimse bu kadar uzun yazıları okumuyor." Mehmet Şamil Demiryürek (ehya) Hocam ise, "Hocam, ben böyle uzun yazıları okuyamam. Ama makale gibi yazmışsın, sonuna kadar okudum." Bu iki değerli görüşün çelişkileri içinde bir başka can dostun kulaklarını çınlatarak başlamak istiyorum. Şu sıralar Amerika'da yaşayan değerli dost Dr. Osman Serdar Türkoğlu (tanıştığım ilk günden beri, "la bu adam benden daha zeki galiba!" diye düşündüğüm nadir insanlardan biridir). Serdar Hocam, el alem bir kaşık suda fırtına koparıyormuş; biz de çay kaşığında transatlantik yüzdürüyoruz işte. Ne! Kaşık mı görünmüyor? Gemi büyüktür de ondan... Herkese selam ve saygılar.

Gelelim konumuza. Başlıktan da anlaşılacağı üzere önce logand fonksiyonumuzu, dostlarımızın pek te sevmediği, kendilerini bulanık sularda balık avlar gibi hissettikleri bu olayı da gene malum kitabımızdan ekran görüntüleriyle bir inceleyelim.







Var mı anlaşılmayan bir şey! Havalı havalı baynari (binary) dedikleri, esrarengiz bir şeyden söz edermiş gibi 'Logical Bitwise And' dedikleri şeyler, pekte öyle karmaşık, zor konular değilmiş demekki. Yazdıklarımı gözden geçirirken farkettim; 0'lar 1'ler neredeyse mikro işlemcinin bitlerini ayıklamışız. :) Burada hemen aklıma geldi, Neyzen Necdet Özkılavuz Hocam (benden zeki olduğu kesin olan insanlardan biri. Bakmayın Neyzen dediğime Gazi Üniversitesinde öğretim görevlisi) bizim mühendis çevresine takılır(dı), söz matematikten açılınca da, "Heerif, birin küp'ü gine bir ediyo! Yüksek matematiğe girer, ben annamam." Derdi. Der, demesine de, bilenler bilir ki, çoğu mühendisten daha iyi matematik bilirdi.

Kitabımızın loagand'i anlattığımız bu bölümünün sonunda, "Nasıl ve Nerelerde Kullanılır?" demişiz...
Anlatmıyorum kardeşim, anlatmayacağım işte! Betonarme Hocamız Prof. Dr. Aytaç Mertol (o zamanlar Doçent idi) derdi ki; "Evladım, defteri var kitabı var, oku öğren... bana ne soruyorsun!" (2017'de rahmet-i Rahmana kavuşmuş, Allah rahmetini esirgemesin). Kıssadan hisse alın kitabı okuyun, diyorum. Yok tükenmiş te, yok baskısı kalmamış ta... yeterince talep olursa yayınevi yeni baskısını yapacaktır elbette. AutoLisp&Visual Lisp - Kodlab Yayınevi Bu kitapta AutoLisp ve Visual Lisp'in yanısıra, pek çoğumuzun adını bile duyduğunda ürperdiği Türev, İntegral ve Matris konuları gayet kolay anlaşılır, (neredeyse) elle tutulur, gözle görülür bir şekilde anlatılmıştır.

Burada bir can dostu daha anmadan geçmek olmaz, şu sıralar Surinam'da (dünyanın öte ucu) mesleğini icra eden İnş. Müh. Oğuz Çetin (vay be! O da benden zeki bir adam... benden zeki ne çok insan varmış şu dünyada). Neden hatırladım Oğuz'u! 80 öncesi yıllar, Oğuz bir gün bana, "Bizim Betonarmeci Aytaç Hoca, Sakarya Devlet Mühendislik Mimarlık'ta da derse giriyormuş. Oradan bir arkadaş buldum, onun da adı Oğuz, soyadı da Çetin, futbolcu muymuş neymiş... Hoca onların sınavını bizden erken yaparsa soruları otobüse verip o bana gönderiyor, bizim sınav önce olursa aynı yoldan ben ona gönderiyorum" diye anlatmıştı. Sonraki yıllarda o Oğuz Çetin Fenerbahçe'de İmparator Oğuz Çetin oldu. Surinam'a, Oğuz Çetin kardeşime selam ve sevgilerimizi gönderiyoruz.

Gelelim bu roman gibi yazıyı neden yazma gereği duyduğuma.
Geçen günlerde bir paylaşımımla ilgili Travacı (Erkan Travacı) arkadaşımız özel mesaj yazmış. "Hocam bir de undo yu seçim varsa işleme koy deseniz tadından yenmicek : ) Başa koyunca, error trap da olmayınca undo açık kalabiliyor." Demiş. Okuyunca mahcup oldum doğrusu. Erkan da Adem Ercan (alumina) arkadaşımız da beni bu konuda defalarca uyarmışlardı. Ben de bir türlü elim erip te yazmadığım, bu undo olayına el atmadığım için paylaşımlarımda kötü alışkanlığım devam ediyordu. Bu mahcubiyetten sonra düşündüm... bu konuyu çözmek için Lisp kodlarının tam göbeğine bir "if" koyup, programın neredeyse tamamına yakınını "progn" (gruplama) içinde yazmak pek te hoşuma gitmiyordu açıkçası. Bunun üzerinde de yeni bir hata yakalama (error trap) fonksiyonu yazıp bunu kötü alışkanlıklarımın yerine kullanmaya karar verdim.

Yukarıda logand fonksiyonunu ayrıntılı anlatmıştık. Şimdi de AutoCad ortamında bu undo ve onu düzenleyen/düzenlenen undoctl sistem değişkenine bir göz atalım.



Bu sistem değişkenini anlatırken kırmızı ile işaretlediğim kısım dikkatinizi çekmiştir. undo "group" direktifi kullanılıp grup başlatıldıktan sonra undoctl sistem değişkenine 8 ekleniyor (binary olarak). Hata yakalama fonksiyonunda (lisp programda bir hata oluştuğunda veya cancel edildiğinde tetiklenecek fonksiyon) bakarız... bu sistem değişkeninin değerine, 8 çentilmişse undo "end" yaparız, kapatırız undo grubunu.

İlgilenenlere ve meraklısına bir soru: undoctl sistem değişkeninin varsayılan değeri neden 53?

Kod:

(defun *error* (er)
    (if (and (member er '("Function cancelled" "quit / exit abort"))
             (= (logand (getvar "undoctl") 8) 8))
      (progn (command-s "_.undo" "e") (setvar "cmdecho" ocmd)))
    (princ (strcat "\n" er)) (prin1))


Hazır yazmışken, çoğu zaman hoyratça değiştiriverdiğimiz kullanıcının cmdecho değerini de girişte saklayıp, çıkışta veya hata çıkışında eski değerine getirmeyi de ekledim. Bir başka dikkat edilmesi gereken nokta da, *error* fonksiyonunu ana fonksiyonun yerel değişken (local variable) listesine eklemekte fayda var.

Belki pek çok arkadaşımızın bildiği ve kullandığı şeylerde söz ettik, yukarıda yazdığım gibi çay kaşığında transatlantik yüzdürdük... ama ilgi ve ihtiyaç duyan arkadaşlarımıza özellikle logior ve logand fonksiyonlarını biraz anlatabilmişizdir diye düşünüyorum. Gene ilgi duyan arkadaşlarımızın kitabımızdan ~ (bitwise NOT - Bit seviyesinde değilleme) ve lsh (Logical Bitwise shift - Bit seviyesinde kaydırma) konuları ile boole işlemleri bölümünü okumalarını tavsiye ederim.

Selam ve saygılarımla herkese kolaylıklar dilerim.

ProhibiT (04.01.2021 16:26 GMT)

04.01.2021 12:05    

Travaci
Alp haklı günümüzde artık bu uzun yazıların yerini vlog lar aldı ama yazan siz olunca keşke dahada yazsa diyoruz :)
Peki hocam logand kullanmak şart mı ? (if (= (getvar 'undoctl) 61) ... desek olmaz mı ?
Varsayılan değerin 53 olmasını bulamadım :blush

04.01.2021 16:09    

ProhibiT
53'ün esbab-ı mucibesini bulamadığına inanmıyorum Travaci :) Ben sana değil başkalarına sormuştum.
Layer gruplama 32 + Zoom gruplama 16 + Auto 4 + Undo açık 1 = 32+16+4+1=53
Dikkat edilirse Group aktif değil ve Yalnızca bir komut geri alınabilir seçili değil.

Neden logand? Konusuna gelince:
Günlük hayatta bir deyim var ya, "Ağanın eli tutulmaz" diye. İşte bunun AutoCAD ve programcılıktaki (ve başka boyuttaki) karşılığı, "Kullanıcının eli tutulmaz!" Kullanıcının canı istedi, "Auto" seçeneğini kapattı... oldu mu sana 53 yerine 49. Group aktif mi diye kontrol etmek için 57'yi mi kontrol edeceğiz. Kullanıcı gene masumdur, kurabileceği tuzaklar sınırlıdır. İnternet ortamında bol miktarda bulunan (kullanıcıya pekte saygılı olmayan) programlardan birini kullanıyordur... o program UNDOCTL'nin değerini öngörülemez bir şekilde değiştirmiş olabilir. Diğer seçenekler ve ayarlar bizi ilgilendirmiyor (kullanıcıya saygıdan dolayı ilgilendirmemeli) bu durumda loagand ile doğrudan Group aktif mi, değil mi? buna bakmak daha mantıklı değil mi?

Yukarıdaki (uzunca) yazımda, "Kitabımızın logand'i anlattığımız bu bölümünün sonunda, "Nasıl ve Nerelerde Kullanılır?" demişiz..." diye yazmıştım. Elinde kitap olanlar da bakmamıştır herhalde. :) Ben bir kolaylık daha yapayım.





Burada görüldüğü gibi, pek çok değerin aynı anda kontrol edilmesi söz konusu olunca logand çok daha kolay oluyor.

Ve yine yazının son bölümde ilgilen ve merak edenler loagand yanında logior, ~, lsh ve boole konularına da bakmalıdır... demiştim.
Yukarıdaki ekran görüntülerinde, "AutoCAD’de bit düzeninde değere sahip pek çok sistem değişkeni vardır." Demişiz. Şimdi bahsettiğimiz bu bit düzenindeki mantık işlemlerinin bir veya birkaçını AND, OR ve XOR düz mantık işlemleriyle ile birlikte kullanabilir miyiz?

Selam ve saygılarımla herkese kolaylıklar dilerim.

ProhibiT (04.01.2021 16:26 GMT)

05.01.2021 06:21    

Travaci
Hesabını yapmıştım aslında ama default değerlerin birşeylere bağlı olduğunu düşünmüştüm :blush

> 1 <
Copyright © 2004-2022 SQL: 0.993 saniye - Sorgu: 53 - Ortalama: 0.01874 saniye