Jump to page: 1 2
Thread overview
Selamlar
Jan 31, 2015
kerdemdemir
Feb 03, 2015
kerdemdemir
Feb 04, 2015
Mengu
Mar 05, 2015
kerdemdemir
Mar 06, 2015
Salih Dinçer
Jul 06, 2016
kerdemdemir
Jul 08, 2016
zafer
Jul 12, 2016
Mengu
January 31, 2015

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);
}

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

February 01, 2015

Hoşgeldin kerdemdemir! :)

Alıntı (kerdemdemir:1422763571):

>

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

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

February 01, 2015

İş 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

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

February 03, 2015

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

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

February 03, 2015

Alıntı (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());
}

Alıntı:

>

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.

Alıntı:

>

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.

Alıntı:

>

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

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

February 04, 2015

Alıntı (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

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

March 06, 2015

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

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

March 06, 2015

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.

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

March 06, 2015

Alıntı (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

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

July 06, 2016

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

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

« First   ‹ Prev
1 2