Forum: Tanışma ve Kaynaşma RSS
Selamlar
kerdemdemir #1
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Selamlar
Yeni öğrenmeye başlayan bir D dili meraklısı olarak küçük bir kod ile merhaba demek istedim. 5 seneye yakındır C++ kodu yazıyorum. Son 1 senedir çokta aktif olmayarak, Ali Çehreli'nin çevirdiği "Neden D dili" kitabını okuyarak D dilini öğrenmeye çalışıyorum.

Herkese başarılar diliyorum.
Kadir Erdem

import std.stdio;
import std.random;
import std.math;
  
double calcFractionalDelay ( int[] slice, double delay )
{
    int filterLength = slice.length;             // Number of FIR filter taps (should be odd)
    int centreTap = filterLength / 2// Position of centre FIR tap
    double result = 0;
    for (int t=0 ; t<filterLength ; t++)
    {
       // Calculated shifted x position
       double x = t - delay;
    
       // Calculate sinc function value
       double sinc = sin( PI * (x-centreTap)) / (PI * (x-centreTap));
    
       // Calculate (Hamming) windowing function value
       double window = 0.54 - 0.46 * cos(2.0 * PI * (x+0.5) / filterLength);
    
       // Calculate tap weight
       double tapWeight = window * sinc;
       result += tapWeight*slice[t];
    }
    return result;
} 
 
 
 
void main() {
    
    int[1000] abc;
    foreach (ref i; abc) 
        i = uniform(1, 100);
     
    foreach (int index, int data; abc)
        writeln(index, " ",  data);
    
    auto filterResult = calcFractionalDelay(abc[0..10], 0.25);    
    writeln("Filter Result is : ", filterResult);
}
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hoşgeldin kerdemdemir! :)

kerdemdemir on 2015-01-31, 20:06:
Ali Çehreli'nin çevirdiği "Neden D dili" kitabını

"Neden D" ve başka makaleleri çevirdim:

  http://ddili.org/makale/

ama kitap bana ait:

  http://ddili.org/ders/d/

Kitabı İngilizce'ye de çevirdim:

  http://ddili.org/ders/d.en/

Kodu paylaştığın için teşekkürler. Lütfen devam et; son zamanlarda çok sessizleştik. :) Aralara yorumlar yerleştirdim:

import std.stdio;
import std.random;
import std.math;
 
/* [Ali] Ben de çoğu zaman öyle yapmıyorum ama dizi elemanlarını değiştirmeye
 * niyetimiz olmadığında parametreyi 'const' yapmakta yarar var. */
double calcFractionalDelay ( const int[] slice, double delay )
{
    /* [Ali] .length'in türü size_t'dir. size_t 32 bitlik ortamda uint'in
     * kendisi olduğundan int'e dönüşebilir. 64 bitlik ortamda ise ulong'un
     * eşdeğeridir ve ulong int'e otomatik olarak dönüşmez. O yüzden ben
     * burada bir derleme hatası aldım:
     *
     *   Error: cannot implicitly convert expression (slice.length) of type
     *   ulong to int
     *
     * Aşağıdaki üç çözüm de hem çok kolay hem de her ortamda çalışır:
     *
     * a) int yerine size_t
     * b) int yerine auto
     * c) int yerine const (benim tercihim bu)
     */
    const filterLength = slice.length;             // Number of FIR filter taps (should be odd)
 
    /* [Ali] Yukarıdaki koşulu örneğin enforce ile sağlayabiliriz: */
    import std.exception;
    import std.string;
    enforce(filterLength % 2,
        format("Number of FIR filter taps must be odd; was %s", filterLength));
 
    /* [Ali] Yine size_t konusu nedeniyle const yapıyorum. */
    const centreTap = filterLength / 2// Position of centre FIR tap
    double result = 0;
 
    /* [Ali] Modern programcılıkta açıkça yazılan döngülerden kaçılınıyor. Bu
     * programı biraz sonra hiç döngü kullanmadan yazmaya çalışacağım. Tabii
     * ki hâlâ döngü kullanıyoruz. :) Ama hiç olmazsa for yerine burada da
     * foreach olsun: */
    foreach (t; 0 .. filterLength)
    {
        // Calculated shifted x position
        double x = t - delay;
 
        // Calculate sinc function value
        double sinc = sin( PI * (x-centreTap)) / (PI * (x-centreTap));
 
        // Calculate (Hamming) windowing function value
        double window = 0.54 - 0.46 * cos(2.0 * PI * (x+0.5) / filterLength);
 
        // Calculate tap weight
        double tapWeight = window * sinc;
        result += tapWeight*slice[t];
    }
    return result;
}
 
void main() {
 
    int[1000] abc;
 
    /* [Ali] Bu konuda herkes aynı fikirde değil ama ben yine de tek deyim
     * içeren kapsamları bile küme parantezleri içinde yazmanı hararetle
     * öneririm. :) */
    foreach (ref i; abc) {
        i = uniform(1, 100);
    }
 
    /* [Ali] Burada da küme parantezleri ekliyorum. */
    foreach (int index, int data; abc) {
        writeln(index, " ",  data);
    }
 
    /* [Ali] 0..10 aralığında 10 sayı bulunduğundan eğer tek sayı olacaksa
     * sanırım bunun 0..11 olması gerekiyor. (?) */
    auto filterResult = calcFractionalDelay(abc[0..11], 0.25);
    writeln("Filter Result is : ", filterResult);
}
Ali
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İş olsun diye döngü kullanmamaya çalışan eşdeğer program:
import std.stdio;
import std.random;
import std.math;
import std.exception;
import std.string;
import std.range;
import std.algorithm;
 
double calcFractionalDelay_Ali(const int[] slice, double delay)
{
    const filterLength = slice.length;
 
    enforce(filterLength % 2,
        format("Number of FIR filter taps must be odd; was %s", filterLength));
 
    const centreTap = filterLength / 2// Position of centre FIR tap
 
    /* Bu iyice zorlama oldu ama döngü kullanmamayı başardım. :) reduce iki
     * parametre alır: başlangıç değeri (yani 0.0) ve bir aralık (yani
     * slice.enumerate).
     *
     * .enumerate kendisine verilen aralığı artan sayılarla eşleştirir ve
     * Tuple'lar üretir. Örneğin, [ 10, 20, 30 ] verildiğinde şu çiftler
     * oluşur: (0,10), (1,20), (2,30). Numaralara .index ile, değerlere .value
     * ile erişilir.
     *
     * reduce'a verilen delegate iki parametre alır: Birincisi (aşağıdaki 'a')
     * o ana kadarki toplamdır, ikincisi de o sıradaki üye. (Buradaki aralık
     * enumerate'in sonucu olduğundan, 't' dediğim parametre asıl slice'ın
     * elemanlarının 0,1,2,vs. ile eşleşiminde oluşan çokuzludur.)
     */
    const result = reduce!((a, t) {
            const x = t.index - delay;
            const sinc = sin(PI * (x - centreTap)) / (PI * (x - centreTap));
            const window = 0.54 - 0.46 * cos(2.0 * PI * (x+0.5) / filterLength);
            const tapWeight = window * sinc;
            return a + tapWeight * t.value;
        })(0.0, slice.enumerate);
 
    return result;
}
 
void main() {
 
    /* iota 0'dan 1000'e kadar sayılar üretiyor
     *
     * map her birisi için uniform'un sonucunu kullanıyor (map iota'nın
     * ürettiği 0,1,2,vs. değerleri ile ilgilenmediğinden geleneksel olduğu
     * için değişken ismi olarak _ kullandım.)
     *
     * array map'in ürettiği değerlerden bir dizi oluşturuyor
     *
     * abc'nin yalnızca ilk 11 değeri kullanıldığına göre array'i çağırmadan
     * önce take ile yalnızca baştaki 11 tanesini kullanıyorum
     *
     * abc'yi değiştirmeyeceğim için bir de const...
     */
    const int[] abc = iota(1000)
                      .map!(_ => uniform(1, 100))
                      .take(11)
                      .array;
 
    foreach (index, data; abc) {
        writeln(index, " ",  data);
    }
 
    /* Eğer sayaç istemiyorsak yukarıdakinin yerine herhalde en kolayı %( %)
     * belirteçlerini kullanmak olur. (version(none) C'deki #if 0 anlamına
     * geliyor.) */
    version (none) {
        writefln("%(%s\n%)", abc);
    }
 
    /* Bu kodda abc zaten 11 elemandan oluştuğundan ayrıca dilimlemeye gerek
     * kalmıyor. */
    const filterResult = calcFractionalDelay_Ali(abc, 0.25);
    writeln("Filter Result is : ", filterResult);
}
Ali
kerdemdemir #4
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali Hocam zaman ayırdığın için çok teşekkür ederim.  Yorumların gerçekten çok faydalı oluyor. Kitabının ismi yanlış şekilde aklımda kalmış ayrıca ben çeviri olduğunu düşüyordum, gerçekten gurur duydum başarılarının devamı dilerim.
Döngü kullanmadan yazdığın kod çok güzel, bugün izlediğim Walter Bright'ın DConf 2014'deki "High Performance Code Using D"  konuşmasında da aynı nokta vurgulanıyordu.

Ben forum için neler yapabilirim acaba? İş yerinde ana projemiz olmasada, bazen bash scriptleri yerine D kullanıyorum. Örneğin bugün D dili ile gzip'li bir dosyayı satır satır okumakta biraz sıkıntı yaşadım. Böyle sıkıntıları forumda paylaşmak foruma bir şeyler katarmı sizce? Her ne kadar Masterla birlikte iş hayatını yürütdüğümden dolayı pek zamanım olmasada faydalı olmak isterim.

Kadir Erdem
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
kerdemdemir:
Walter Bright'ın DConf 2014'deki "High Performance Code Using D"  konuşmasında da aynı nokta vurgulanıyordu.

Tesadüf! :) Biraz sonra, çalıştığım yerde (Riverbed) bir D tanıtım sunumu vereceğim. Walter'ın örneğini daha bir kaç dakika önce sunuma eklemiştim. Ama dizilerin .sort niteliği ile std.algorithm.sort karıştığı için alias kullandım:
import std.stdio;
import std.array;
import std.algorithm;
 
alias algsort = std.algorithm.sort;
 
void main() {
    stdin
        .byLine(KeepTerminator.yes)
        .map!(a => a.idup)
        .array
        .algsort
        .copy(stdout.lockingTextWriter());
}
gzip'li bir dosyayı satır satır okumakta biraz sıkıntı yaşadım.

Tam forumda sorulacak bir soru işte! :) Ben programcılıkla ilgili hemen hemen her şeyi forumlara (ve haber gruplarına) borçluyum. Yalnızca kitap yazmak ve kendim debelenmek yetmiyor; başkalarının neler yazdıklarını, ne sorunlar yaşadıklarını ve daha başkalarının ne çözümler önerdiklerini okumak neredeyse şart.

Böyle sıkıntıları forumda paylaşmak foruma bir şeyler katarmı sizce?

Süper olur! :) Hem sorular gelsin hem keşfedilen çözümler, vs.

Masterla birlikte iş hayatını yürütdüğümden

Aynısını ben de yapmıştım (Fizik yüksek lisansı sırasından WordPerfect temsilciliği). Öyle yapınca ikisinin de hakkını veremediğimi düşünüyorum. Sana başarılar. :)

Ali
Mengu (Moderatör) #6
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #4
kerdemdemir:
Ali Hocam zaman ayırdığın için çok teşekkür ederim.  Yorumların gerçekten çok faydalı oluyor. Kitabının ismi yanlış şekilde aklımda kalmış ayrıca ben çeviri olduğunu düşüyordum, gerçekten gurur duydum başarılarının devamı dilerim.
Döngü kullanmadan yazdığın kod çok güzel, bugün izlediğim Walter Bright'ın DConf 2014'deki "High Performance Code Using D"  konuşmasında da aynı nokta vurgulanıyordu.

Ben forum için neler yapabilirim acaba? İş yerinde ana projemiz olmasada, bazen bash scriptleri yerine D kullanıyorum. Örneğin bugün D dili ile gzip'li bir dosyayı satır satır okumakta biraz sıkıntı yaşadım. Böyle sıkıntıları forumda paylaşmak foruma bir şeyler katarmı sizce? Her ne kadar Masterla birlikte iş hayatını yürütdüğümden dolayı pek zamanım olmasada faydalı olmak isterim.

Kadir Erdem

kitabin ingilizcesi ceviri evet, (ali ustad'in cevirisi) o noktada haklisin :-D
http://www.mengu.net - some kind of monster
kerdemdemir #7
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali Hocam ,

Bu forumlardaki desteğiniz için ve ayrıca http://forum.dlang.org/'daki desteğiniz için çok teşekkür ederim.

Saygılarımla
Erdem
Avatar
Salih Dinçer #8
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hoş geldin…

Erdem isminde bir arkadaşımız daha (öteki nerede :) ) gelmiş, safa getirmiş. Burası sakin olsa da eminim çok şey öğreneceksin; özellikle Ali hocadan.

Ali hocam,  bu arada kitabın ilk olarak ingilizce epub versiyonunu (tablette olduğumdan) az önce indirdim. Çok tercih edilen bir okuyucu ile açtığımda bazı sayfaların yarıda kesildiğini gördüm. Bunlar genelde tablo içeren/biten sayfalar. Sona denk gelen satır, bir bütün olarak değil de parçalanarak diğer satıra geçmiş ve bu çoğu zaman okunmuyor. Gerçi PDF dosyada böyle bir sorun yoktur ya :)

Forumdaşımıza tekrar hoş geldin diyorum.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer:
bazı sayfaların yarıda kesildiğini gördüm

Çok teşekkürler! Bu konuda tek mesaj yazan kişi sensin. :( Hangi okuyucu ile açtığını ve tam olarak ne sorun olduğunu özelden yazar mısın. Belki ayarlarla oynayarak bir çözüm bulabiliriz.

Ali
kerdemdemir #10
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Arkadaşlar selamlar yeniden,

Çok uzun bir ara verdim. Biraz vicdan azabı yaşadığım için yazma ihtiyacı duydum.
Benim güzel kızım Elacım dünyaya geldi. Aynı andada Yüksek Lisans çok ciddileşti bursum kesildiğinden ciddi manada bitirmem gerekiyordu. Aynı andada iş yerinde 82.5 saati bulan haftalık mesailer oldu. Ne yazıkki kod yarışmaları ve D dilini tamamen bırakmam gibi bir durum oluştu.

Şu anda kızımın biraz büyümesi ve yüksek lisansımın bitmesi ile biraz rahatladım.
Rahatlar rahatlamazda kod yarışmalarına bir daha başladım tabiki D ile yazmaya çalışıyorum.

Bu arada forumda tecrübelerimi paylaşma fırsatım olan bir kaç tane başlık olmuş ve ben hiç bir şey yazamadım. Örneğin "İnternet Trafiğini Denetlemek" başlığı benim 3 sene üstünde çalıştığım bir konu şimdi bunlara yazmaya çalışacağım en kısa zamanda. Ayrıca benim kod yarışmaları başlığını bir daha canlandırmaya çalışıcam umarım zaman bulurum.

Hepinizin Bayramı Mübarek olsun.
Hepinize Saygılar ve Sevgiler
Erdemdem
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Seni tekrar burada görmek güzel. :)

Ali
zafer #12
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #10
kerdemdemir on 2016-07-06, 12:25:
Çok uzun bir ara verdim. Biraz vicdan azabı yaşadığım için yazma ihtiyacı duydum.

Vicdan azabı kısmını sevdim :D İnsan ilgilendiği şeylere gönül bağı ile bağlı olmalı ki, yaptıklarından keyif alsın, mutluluk duysun
https://github.com/zafer06 - depo
Mengu (Moderatör) #13
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #10
kerdemdemir on 2016-07-06, 12:25:
Arkadaşlar selamlar yeniden,

Çok uzun bir ara verdim. Biraz vicdan azabı yaşadığım için yazma ihtiyacı duydum.
Benim güzel kızım Elacım dünyaya geldi. Aynı andada Yüksek Lisans çok ciddileşti bursum kesildiğinden ciddi manada bitirmem gerekiyordu. Aynı andada iş yerinde 82.5 saati bulan haftalık mesailer oldu. Ne yazıkki kod yarışmaları ve D dilini tamamen bırakmam gibi bir durum oluştu.

Şu anda kızımın biraz büyümesi ve yüksek lisansımın bitmesi ile biraz rahatladım.
Rahatlar rahatlamazda kod yarışmalarına bir daha başladım tabiki D ile yazmaya çalışıyorum.

Bu arada forumda tecrübelerimi paylaşma fırsatım olan bir kaç tane başlık olmuş ve ben hiç bir şey yazamadım. Örneğin "İnternet Trafiğini Denetlemek" başlığı benim 3 sene üstünde çalıştığım bir konu şimdi bunlara yazmaya çalışacağım en kısa zamanda. Ayrıca benim kod yarışmaları başlığını bir daha canlandırmaya çalışıcam umarım zaman bulurum.

Hepinizin Bayramı Mübarek olsun.
Hepinize Saygılar ve Sevgiler
Erdemdem

allah anali babali buyutsun. hosgeldin.
http://www.mengu.net - some kind of monster
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 12:19:43 (UTC -08:00)