May 20, 2012

Anlıyorum. Çünkü dilimler de zaten elemanları gösteren bir işaretçi barındırıyorlar. (Sen "işaretçi" diyorsun diye öyle yazıyorum yoksa ben "gösterge"ye sadığım. :p)

Ama bir işaretçinin dizi gibi kullanılması yalnızca C kütüphaneleri ile etkileşirken gerekiyor. Normal D programlarında yeri olmadığı için bir D olanağıymış gibi anlatmaya gerek olduğunu sanmıyorum.... Diyeceğim ama genel bir D tanıtımı konusunu atladık. Acaba D'yi merak edip gelenler olacak mı? Konuşmalardan birisinin yerine "D nedir" diye bir konuşma mı eklesek? En başa o gelir. (?)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Alıntı (Salih Dinçer):

>

bağlantı kurmak için diğer dillerde olmayan (öyle değil mi?) dilimleri ifade edebileceğim, daha doğrusu devam edebileceğim önemli bir başlık

Çok haklısın. Güzel bir akış olur. Python'da dil olanağı olarak, C#'ta da kütüphane olanağı olarak dilim olduğunu biliyorum. Ama D'den farklarını bilmiyorum.

Alıntı:

>

İşte 'D Nedir'i anlatmak Ali hocamın işi olsa gerek. Bunun da en yakıştığı yer açılış konuşması...

O da doğru. O zaman örneğin Unicode'a o kadar zaman ayıracağımıza baştaki tanıtım konuşmasının arasında hızlıca geçilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Alıntı (acehreli):

>

Konuşmalardan birisinin yerine "D nedir" diye bir konuşma mı eklesek? En başa o gelir. (?)

Bence de kesinlikle çok iyi bir fikir. Böyle bir sunum böyle bir açılışla başlamalı zaten.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 21, 2012

Alıntı (acehreli:1337409553):

>

Yanılmıyorsam taşma olmadığı zaman toplam her iki sayıya da eşit veya daha büyüktür:

>     assert((sonuç >= sayi1) && (sonuç >= sayi2),
>            "Sayıların toplamı int sınırını aşıyor.");
> ```

>
Bunu denedim ve sayılardan herhangi biri eksili olduğunda hata veriyor. Şu nasıl Zafer?


int Topla(int sayi1, int sayi2)
{
long sonuç = cast(long)sayi1 + cast(long)sayi2;
assert ((sonuç >= int.min) && (sonuç <= int.max), "Sayıların toplamı int sınırını aşıyor.");

//assert((sonuç >= sayi1) && (sonuç >= sayi2), "Sayıların toplamı int sınırını aşıyor.");
//assert(sonuç < int.max, "Sayıların toplamı int sınırını aşıyor.")
//assert(sonuç > 0, "Sayıların toplamı int sınırını aşıyor.");
//assert(sonuç >= 1, "Sayıların toplamı int sınırını aşıyor.");

return cast(int)sonuç;

}



-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
May 21, 2012

Alıntı (Salih Dinçer):

>

Bunu denedim ve sayılardan herhangi biri eksili olduğunda hata veriyor. Şu nasıl Zafer?

Salih, aslında amacım taşmayı yakalamaktan ziyade 'assert' sunumu için çarpıcı bir örnek hazırlamaktı. Ancak bu konuda istediğim gibi içerik bulamadım.

Taşma ilgili konuda ise Ali'nin verdiği adres (https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow?showComments=false) gayet güzel, içinde tüm durumlar için kontrol ifadeleri yazılmış, ancak dediğim gibi benim istediğim çarpıcı bir örnek bulamadım.

Benim istediğim örnek, assert kullanmadığımızda programda ölümcül bir hata oluşsun ama assert kullanımı bu hatayı engellesin gibi bir örnek. Örneğin şöyle bir şey

Alıntı:

>

1985-1987 — Therac-25 Tıp Kazası: Bir radyasyon terapi cihazı hatalı çalıştı ve çeşitli tıbbi tesislerde ölümcül düzeyde radyasyon verdi. Daha önceki bir tasarım geliştirilerek yaratılmuş bulunan Therac-25 iki farklı tür radyasyon verilen “ileri” bir terapi sistemi idi. Ya düşük güçlü elektron ışını (beta parçacıklar) veya X-ışınları veriyordu. Therac-25′in X-ışınları yüksek güçlü elektronların elektron silahı ile hasta arasına yerleştirilmiş bir metal hedefe çarptırılmaları ile yaratılıyordu. İkinci bir “ilerleme” de eski Therac-20 nin elektromekanik güvenlik bağlantılarının yazılım kontrolüyle yapılmasıydı. Bu karara yazılımın daha güvenli olduğu düşüncesiyle varılmıştı. Mühendislerin bilmediği şey hem 20 hem 25′in hiçbir resmi eğitimi olmayan bir programcı tarafından yazılmış olduklarıydı. Bir görünmez hata nedeniyle, hızlı yazan bir klavye kullanıcısı kaza yaparak Therac-25′in elektron ışınını yüksek enerjili modda, fakat metal hedef yerinde olmadan, hastaya gönderecek şekilde çalışmasına yol açabilirdi. Böyle oldu ve en az 5 hasta öldü başkaları ciddi şekilde yaralandı.

Tabi burada tüm olayın programcının üzerine yıkılmasıda başka bir ironi, sanki orada o programcının bir üstü veya bir test ekibi yok muydu? Eğer yoksa zaten iş baştan bir felaket, yok eğer böyle bir ekip veya amir varsa, bu seferde programcı hata yaptı böyle oldu demek bana pek doğru gelmiyor.

Ancak bu yazıyı arasıra okuyor ve TEST, TEST, TEST diyorum :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 22, 2012

Alıntı (zafer):

>

Salih, aslında amacım taşmayı yakalamaktan ziyade 'assert' sunumu için çarpıcı bir örnek hazırlamaktı. Ancak bu konuda istediğim gibi içerik bulamadım.
Anladığım kadarıyla gerçekten işe yarar bir örnek istiyorsun. Bu konuda biraz düşüneceğim ama ben hiç 'assert()' kullanmayan programcılardanım. Hiç bir zaman ihtiyaç duymadım. Ama kütüphaneler içinde çok yararlı olduğunu gördüm. Sadece assert ifadesine bakarak onun ne işe yaradığını denemeden anlayabiliyorum. Çünkü biliyorum ki o ifadeyi yerleştiren 'assert()''e takılmayan algoritma geliştirmiş. O halde güvenle kullanabilirim diyorum...:)

Bunlar dışında aklıma dosya okuma sırasında elzem olabilecek örnekler gelmiyor değil. Ancak onlar release olmuş bir uygulama için anlamsız olacak. Dolayısıyla 'try {} catch {}' kümeleri kendi hata iletilerini veya log'lama sistemini oluşturmak için daha ideal görünmekteler. Bilmiyorum bu konulara da değinecek misin?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 22, 2012

Alıntı (Salih Dinçer):

>

Anladığım kadarıyla gerçekten işe yarar bir örnek istiyorsun.

Kesinlikle haklısın Salih. Amacım sadece anlatmış olmak için anlatmak değil, insanların aklında bir şeyler kalmasını, assert kelimesinin bir şeyler çağrıştırmasını istiyorum. Neticede bu kavram aslında D diline özgü bir şey değil genel bir programcılık tekniği ve bir önceki mesajda anlatılan örnek gibi hataların olmaması için programcılar bu olanakları içine sindirmeli ve kullanmalı, hangi dilde olursa olsun.

Alıntı (Salih Dinçer):

>

Hiç bir zaman ihtiyaç duymadım. Ama kütüphaneler içinde çok yararlı olduğunu gördüm.

Dıoğruyu söylemek gerekirse bende çok ender kullanıyordum ama özellikle Ali'nin dersanedeki dersini okuduktan sonra çok daha fazla kullanmaya ve faydasınıda görmeye başladım. Neticede assert bir kontrol ve bunu farklı bir takım imkanlarlada sağlayabiliyorsun, belki bu sebeple ihtiyaç duymadın ama assert kullanmaya başlayınca çok daha pratik ve etkili olduğunu görüyorsun.

Belki benzetme biraz kaba olacak ama ekmek kesmek için testerede kullanabilirsin ama bu iş için en uygunu bir ekmek bıçağıdır ve işi bilen bunu kullanır. Sanırım assert olayında durum biraz bu ve ben katılımcılara işi öğretmeye niyetliyim :)

Alıntı (Salih Dinçer):

>

Dolayısıyla 'try {} catch {}' kümeleri kendi hata iletilerini veya log'lama sistemini oluşturmak için daha ideal görünmekteler. Bilmiyorum bu konulara da değinecek misin?

Genel manada değinmek istiyorum, sebebine gelince özellikle scope yapısı benim çok hoşuma gidiyor ve onuda bir araya şıkıştırmak niyetindeyim dolayısıyla try-catch olanağınıda açıklamak durumunda kalacağım. Aslında assert ve try-catch olayı birbirinden farklı, birbiri ile karşılaştırmak doğru değil. Sanırım bu konuda öncelikle kavramları açıklayıp herşeyi yerli yerine koyduktan sonra bu olnakları anlatmak daha doğru olacak.

Bakalım bir hazırlıkları bitirelim, şimdilik yapacağız edeceğiz diyoruz ama ortada bir şey yok :) Ayrıca açık öğretim sınavlarına kadar bir şeyler yapmamda zor. Ayrıca sınavdan sonraki hafta arkadaşımın düğünü için izin alıcam memlekete gidicez dolayısyla o haftada öyle gidecek. Bakalım dönüşta artık gece geç saatlare kadar yoğun bir çalışma yapacağız gibi görünüyor :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 22, 2012

Aklıma şöyle bir şey geldi:

Bir otomasyon yazılımı düşünelim. Bu bir elektrikli aleti kontrol ediyor. Tıpkı önceki sayfadaki tıbbi vakıa gibi. Örneğin uzaktan kumandalı bir vinç kumandası olsun. Motorun yanındaki pano ile iş birliği içinde çalıştığını farz edelim. Hatta bunu D programı ile yazmışız...:)

Biz vinçin, tutma/kilitleme aksamının yüksekteyken çalışmamasını istiyoruz. Bunun için gerekli tüm manuel (operatörü bilgilendirme ve kapaklı tuş koyma) ve otomatik güvenlik tedbirlerini aldık. Öyle ya, bu cihaz bir şekilde sapıttı, örneğin kablosuz olduğu için RF sinyaller karıştı. İşte bu durumda:

"Vinç tarafındaki yazılım,
yükseklik algılayıcısından aldığı değere rağmen,
gönderilen "yükü bırak" işlevini aldığında program,
ACİL BİR ŞEKİLDE DURMALI ve sonraki işlemi yapmamalı".

Elbette çeşitli durumlarda (senaryolarda) alçaktan yük alıp, yükseğe bırakma olabilir. Ancak bu işe alınmış tecrübesiz bir işçiye emanet edilecek vinç ise "KORUMALI MOD" gibi bir şey devreye alınabilir diye aklıma geldi. Belki bunu çeşitlendirebilir, ayrıntı katabilir ve daha güzel hale getirebilirsin. Hoşuna gittiyse sunumunda güzel bir vinç resmi ile kullanabilirsin.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 22, 2012

Çok hoşuma gitti Salih :) Her nekadar ülkemizde geliştiricilerin büyük bir kısmı (ben dahil) veritabanı programcılığı ile uğraşsada bu tür mekanik sistemlerle çalışan ve güvenliğin çok önemli olduğu alanlarda mevcut ve böyle alanlarda kod güvenliği çok daha fazla öne çıkıyor. Örneğin depolar için geliştirilen otomatik yükleme/boşaltma sistemleri (Automated Storage/Retrieval System (http://en.wikipedia.org/wiki/Automated_storage_and_retrieval_system)) gibi sistemler bunlara örnek olabilir.

Bu senaryodan bir şeyler çıkarmaya çalışacağım, umarım istediğim gibi bir örnek elde edebilirim. Yeni fikirlerinide bekliyorum Salih. :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »