Jump to page: 1 2
Thread overview
Dkv Yayınlandı Ve Dkv2.0(Kod adı: dkvG) İçin Kollar Sıvandı.
Feb 26, 2010
Mengu
January 22, 2010

**Artık dkv1'in benim tasarıma uygun olarak çalıştığını ve hatalardan oldukça arındığını düşünmekteyim. Bu yüzden şuanda kararlı sürümünü duyuruyorum.
**
Bu kararlı sürümde neler mi var ?

  1. Veritabanı oluşturabiliyor.
  2. Tablo oluşturabiliyor.
  3. Veri dosyası oluşturabiliyor.
  4. Veri dosyasını silebiliyor.
    5 Tablo silinebiliyor. (İçinde veri dosyası varsa silinmez.)
  5. Veri tabanı silinebiliyor. (İçinde tablo varsa silinmez)
  6. sil() işlevi ile belirtilen dosya yada dizin(alt dizinleri ile birlikte.) silebiliyor.
  7. veri_güncelle işlevi ile veri dosyasındaki veriyi silip yeni veriyi yüklüyor.
    9.veri_değiştir işlevi ile veri dosyasındaki veriyi değiştiriyor(dkv için std.string'deki replace komudu sayılır.).
  8. v_yedekle ile veriyi yedekleyebiliyor.

Ve bu işlevlerin hepsinin belgesi var. (Belki belgelerin üzerinden geçmek gerekir.) Ayrıca hemen denemek için makefile dosyası da var.
Yani bence bir projede olması gereken her bir şey var ve proje doyum aşamasına geldi. Şuan sadece kod temizliği ve hata düzeltimi yapmayı düşünüyorum.

Ve daha hızlı bir dkv geliyor. Dkv 2. Bu tasarım aşamasında ne gibi farklar olacak:

  1. Anahtar sistemi geliyor.
  2. Eşleme tablosu oluşturuluyor ve aynı dosyayı 2.kere çağırıyorsanız bekleme süresi çok düşüyor(Bencmarka göre 0 dı galiba :-) ).
  3. Şu anlık kodlar daha temiz :-)

Şuan tasarım aşamasında yani tasarım hakkında fikirleriniz çok önemli :-)

Şuanda dkv2 ile ilgili ilk hata kaydınıda açmış bulunmaktayım.
Hata kaydı için : http://code.google.com/p/dkv/issues/detail?id=1&can=7 ('Hata düzeltildi')

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

January 22, 2010

Alıntı:

>

Projeleri böyle küçük adımlar halinde oluşturmak çok daha kolay değil mi. Hepsini bir projede gerçekleştirmek zor olurdu.

Kesinlikle!

Alıntı:

>

dkvG'nin sonundaki G'yi çözemedim. :)

Yeni bir sürüm, yeni özellikler ve gelişmiş bir sürüm.(Yani buradaki G gelişmişliği ifade ediyor. Birazda geliştirilme aşamasında olduğunu ifade ediyor. Çift anlam :-) )
Alıntı:

>

okunmuşVeri'ye gerek olmadığını düşünüyorum. Şimdilik kullanıldığı kadarıyla yalnızca veri_oku'nun içinde tanımlanmalı. Hatta while(dosya.available) bloğunun içinde.

Bu cümleyi pek anlayamadım. Eğer okunmuşVeri diye bir değişkene gerek yok diyorsanız zaten önceden yoktu ama iki satırı yanyana ekleyebilmek için onu ekledim.

Yok sadece sınıfın üyesi olarak tanımlanmasına gerek yoktu sadece işlevde tanımlansa yeterli diyorsanız içimdeki ses ileride lazım olabilir şimdilik öyle kalsın daha sonra düzeltirsin diyor :-)

Alıntı:

>

Bir de, benim alışık olduğumdan daha az boşluk kullanıyorsun. Umarım yakında boşlukları ve boş satırları daha çok sevmeye başlarsın da benim gibiler daha rahat okuyabiliriz. ;)

Seviyor sayılırım ama kaç satır kod yazmışım diye baktığımda sırf boşlukla çoğaltılmış satır sayısı görünce içimdeki ses bana şöyle diyor: "Ne hava atmaya çalışıyorsun 10 satır kod yazmışsın 50 satırda yazmışsın. Şimdi sen büyük bir program mı yazdın ? Böyle ancak kendini kandırırsın" diyor. Ayrıca boşluklar ile de ilgili olarak ne yazık ki python beni boşluk düşmanı yaptı :-) Daha önemlisi de editörümün boş satırlar ile ilgili sorunları var.(Tencere yuvarlanmış kapağını bulmuş :-) )Ama en kısa zamanda tangodan kopya çekmeliyim. Çok güzel bir tasarımı var :-)

Şuan size soracaklarım var.
1.Dkv2'nin tasarımı nasıl olmuş ?

2.Sizce anahtar ile anahtarın verisini silme işini nasıl yaparım.

3.Birde normalde bir dosyadan belirli bir veri nasıl silinir ?

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

January 22, 2010

İlk önce tasarım hakkında açıklamada bulunayım:
http://img402.imageshack.us/img402/8088/dkv2tasarm.png (http://img402.imageshack.us/i/dkv2tasarm.png/)

Eğer resmi iyi okuyamıyorsanız iki kere resme tıklamanız yeterli.(ilkinde ima... diye siteye geçecek. 2.tıkta sadece o resim bulunacak şekilde açacak.)

Değişken açıklamaları(Belgede yazmıyor mu ? Hımm dkv2.0'nin belgesi yok.):
**vTAdı ** = veritabanı adı
**tAdı ** = tablo adı
**veriAdı ** = veri dosyasının(.dkv dosyasının) adı
anahtar = dosyada -anahtar- şekilde belirtilen yer.

Eğer şöyle bir dkv dosyası olursa(Resimdeki gibi):
-ad-
canalpay
-yaş-
15
16

veri_sil("ad"d.dup diğer parametreleri biliyorsunuz.) dediğimde:
-ad- ve canalpay satırlarını(Yani 1 ile 2.satırları ) silmesini istiyorum. Bunu nasıl yapabilirim ? (Yani daha çok kod olarak soruyorum. Yoksa tasarımını nasıl yapacağımı çıkartabiliyorum.)

Eğer anlamadığınız yer olursa tekrar sorun lütfen. Anlaşılabilir yazmamış olabilirim.

Diğer dediklerinize katılıyorum ama belki şu şekilde yapabilirim. Dkv2.0'a olduğu gibi devam ederim. Ve parametreleri sizinki gibi kullanan bir sınıf(Daha doğrusu sınıf değil işlev yazmak istiyorum. Çünkü sınıfları bilmeyenler olabilir.) yazarım.

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

January 22, 2010

Sanırım şu şekilde yaparım:
1.dosyayı tamamen oku.
2.eşleme tablosuna aktar.
3.eşleme tablosundan gereken yerleri sil.
4.tekrar dosyaya yaz.

Eşleme tablosundan string[string][string][string][string] deneme; deki bir veriyi nasıl sileceğimi de buldum. Örn:

   string[string][string][string][string] deneme;
   deneme["11"]["22"]["33"]["44"] = "silinecek";
   writeln(deneme["11"]["22"]["33"]["44"]);
   deneme["11"]["22"]["33"].remove("44");
   writeln(deneme["11"]["22"]["33"]["44"]);

Yaşasın son satır hata verdirtiyor. Demek ki silinmiş. Ama d.ershaneye eklemek gerekiyor.(Yani sadece ss[string] değil ss[string][string][string]'de tanımlanabildiği ve istenen şeyin nasıl silineceğini belirtmek gerekiyor bence.)

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

January 22, 2010

2 dakika farkla yazmışız :-)
Alıntı:

>

Bu arada, o d.dup'lara gerçekten gerek oluyor mu? Parametreleri const dchar[] yapmak galiba işe yarıyor; ve çok daha temiz:

Nedense kendime parametrenin değişmeyeceğini garantileyemiyorum :-) Bence kararlı sürüme ulaştığında bu const işi yapılabilir(Örnek olarak dkv1'inki yapılabilir.).

Dershanedeki dersinizi de buldum ama keşke ddili.org'un sadece derslerde arama yapabileceğimiz bir arama motoru olsa.

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

January 22, 2010

Alıntı (canalpay):

>

kararlı sürümünü duyuruyorum.

Tebrikler! :)

Projeleri böyle küçük adımlar halinde oluşturmak çok daha kolay değil mi. Hepsini bir projede gerçekleştirmek zor olurdu.

dkvG'nin sonundaki G'yi çözemedim. :)

'okunmuşVeri''ye gerek olmadığını düşünüyorum. Şimdilik kullanıldığı kadarıyla yalnızca 'veri_oku''nun içinde tanımlanmalı. Hatta 'while(dosya.available)' bloğunun içinde.

Bir de, benim alışık olduğumdan daha az boşluk kullanıyorsun. Umarım yakında boşlukları ve boş satırları daha çok sevmeye başlarsın da benim gibiler daha rahat okuyabiliriz. ;)

Ali

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

January 22, 2010

Alıntı (canalpay):

>

Yok sadece sınıfın üyesi olarak tanımlanmasına gerek yoktu sadece işlevde tanımlansa yeterli diyorsanız

Değişkenler aksine bir neden yoksa, her zaman için kullanıldıkları ilk yere en yakın noktada tanımlanmalıdır. O durumda, while bloğunun için oluyor.

Alıntı:

>

içimdeki ses ileride lazım olabilir şimdilik öyle kalsın daha sonra düzeltirsin diyor :-)

Ah... O sesi çok iyi bilirim. :) Kulaklarını tıkamayı şimdiden öğrenmeye bak. Her zaman için en basit olan ve yalnızca şu anda gereken şeyi yap.

Kaldı ki, özellikle bu durum için; bir işlevi içinde kullanılmış olan bir değişkenin bütün veri tabanı nesnesinde yeri olmamalı.

Sınıfları da olabildiğince küçük tasarlamak isteriz. Özellikle çok nesnesi bulunan sınıfların yalnızca gereken üyelerinin olması bellek kaybını da önler.

Alıntı:

>

sırf boşlukla çoğaltılmış satır sayısı görünce içimdeki ses bana şöyle diyor:

Dert etme. :) Bir yarış yok. Üstelik boş satırların "kod satırı" sayıldıklarını hiç sanmıyorum.

Alıntı:

>

10 satır kod yazmışsın 50 satırda yazmışsın

Eğer daha okunaklı olacaksa lütfen öyle yap. :)

Alıntı:

>

sen büyük bir program mı yazdın ? Böyle ancak kendini kandırırsın" diyor.

Hiçbir ilgisi yok. :)

Alıntı:

>

1.Dkv2'nin tasarımı nasıl olmuş ?

Alt işlerini başka sınıflara yaptırabilir. Örneğin bu kadar karmaşık bir üyeyle başa çıkman çok güç olacak:

string eş[string][string][string][string];

Veya, kullanıcılar birbirleriyle aynı türden olan bu kadar parametreyi doğru kullanma konusunda sıkıntı yaşayacaklar:

int veri_ekle(dchar[] veri_, dchar[] anahtar_ ,
                 dchar[] veriAdı_, dchar[] vTAdı_, dchar[] tAdı_ )

Onun yerine, işleri sınıflara paylaştırman daha iyi olur. Eğer veri tabanı "tablolardar oluşan bir kavram" ise, senin sınıfının da Tablo nesnelerinden oluşması gerekir.

Eğer tablo kavramı "anahtarlı verilerden" oluşan bir kavramsa, senin Tablo sınıfının da yalnızca o işten sorumlu olması gerekir.

Öyle yaparsan, veri_ekle işlevi'nin de belki de Tablo'nun bir üyesi olması doğru olur.

(Doğrusunu istersen, bunları yaşayarak görmen de önemli. O yüzden bazen sesimi çıkartmıyorum. Kodladığın her ay, bir önceki ay yaptıklarına bakıp "nasıl böyle yapmışım" diyebilirsin. Bana olmuştu, hâlâ da olur. :) )

Ayrıca, mantık olarak genelden özele doğru düşünmek daha kolay olabilir (eğer aynı parametreleri kullanacaksa, sıralarını değiştiriyorum):

veri_ekle(veri_tabani_adi, tablo_adi, anahtar, veri);

(veriAdı_'nı da anlamadım. Anahtar o değil mi?)

Alıntı:

>

2.Sizce anahtar ile anahtarın verisini silme işini nasıl yaparım.

veri_ekle'nin paraleli olmalı, ama veri bulunmamalı:

veri_sil(veri_tabani_adi, tablo_adi, anahtar);

Ama yukarıda da dediğim gibi, bu işlev Tablo'nun bir sınıfı olabilir. O zaman ne veri tabanı adı, ne de tablo adı gerekir:

benimTablom.veri_sil(anahtar);

Temiz... :)

Alıntı:

>

3.Birde normalde bir dosyadan belirli bir veri nasıl silinir ?

Silinmez (veya silinemez). Doğrusu: Bütün veri belleğe okunur. Bütün işlemler (silme dahil) bellekte yapılır. Sonra bütün dosya baştan tekrar yazılır.

Bu işlem sırasında önceki dosyanın üstüne yazmak yerine; o dosyanı ismi başka bir isme değiştirilebilir: veri_tabani.bak, veri_tabani.eski, vs.

Ali

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

January 22, 2010

Alıntı (canalpay):

>

Eğer şöyle bir dkv dosyası olursa(Resimdeki gibi):
-ad-
canalpay
-yaş-
15
16

veri_sil("ad"d.dup diğer parametreleri biliyorsunuz.) dediğimde:
-ad- ve canalpay satırlarını(Yani 1 ile 2.satırları ) silmesini istiyorum.

"Dosya"dan mı silmesini istiyorsun? Silemezsin. Bellekteki verilerden sileceksin ve sonra bütün verileri tekrar dosyaya yazacaksın. Doğal olarak o anahtar artık dosyada bulunmayacak.

Bellekteki bir eşleme tablosundan veri silmek için... D.ershane'ye bakıyorum... ve "Eleman silme" başlığı altında buluyorum:

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

günSıraları.remove("Salı");

Yani senin verilerin içinde, o anahtarın verisi hangi eşleme tablosunda bulunuyorsa, ona .remove diyeceksin.

Bu arada, o d.dup'lara gerçekten gerek oluyor mu? Parametreleri 'const dchar[]' yapmak galiba işe yarıyor; ve çok daha temiz:

void foo(const dchar[] a)
{}

// çağırırken şu çalışıyor:
   foo("abc");

Ali

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

January 22, 2010

Alıntı (canalpay):

>

1.dosyayı tamamen oku.
2.eşleme tablosuna aktar.

Evet: o işi eeen başta tek bir kere yap.

Alıntı:

>

3.eşleme tablosundan gereken yerleri sil.

Veya başka işlemleri de yap. Saatler geçsin. vs. vs.

Alıntı:

>

4.tekrar dosyaya yaz.

Evet: eeen sonunda (sonlandırıcı işlev içinde) ve eğer gerekiyorsa (değişiklik varsa) yaz. Veya, kullanıcı "kaydet" derse yaz.

Alıntı:

>

Ama d.ershaneye eklemek gerekiyor.(Yani sadece ss[string] değil ss[string][string][string]'de tanımlanabildiği ve istenen şeyin nasıl silineceğini belirtmek gerekiyor bence.)

Teşekkürler. Bu gibi önerilere ihtiyacım var. :)

Ali

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

February 26, 2010

ceviz'den bir dostla veritabani sistemi yazmak istiyorduk uzun suredir. gerci biz python ile yazacaktik ama canalpay ustad d ile yazmis. nereden baslayacagimizi bilemedik. nasil bir mimari kullaniyorsunuz siz hocam?

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

« First   ‹ Prev
1 2