Forum: Projeler dkv RSS
DKV -Dosya Kaynaklı Veri (Tabanı)-
Sayfa:  1  2  3  4  sonraki 
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: DKV -Dosya Kaynaklı Veri (Tabanı)-
Ali Bey zaten d-okul'u konuşurken böyle bir projeden bahsetmişti. d-okulda ilerledikçe sadece böyle bir proje ile çok kolay d-okulu projesini yapabileceğimizi anladım. Daha önce denediğim dkurucu gibi projeler içinde bu gerekliydi ve hatta bir oyunda skor kaydetmek için bile bu gerekli.

Bu işi yapan filebase var ama en son 2 yıl önce güncellenmiş.(D2 için çalıştığından emin değilim.) Bu yüzden o  projeye benzeyen basit bir proje'ye başladım. DKV.

Şuan yapabildikleri:
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.)
6. Veri tabanı silinebiliyor. (İçinde tablo varsa silinmez)
7. __sil__() işlevi ile belirtilen dosya yada dizin(alt dizinleri ile birlikte.) silebiliyor.

Yapılacaklar :
1. Veri dosyasına güncelleme.(Silip aynı isim ile yeni veri dosyası oluşturma).
2. Veri dosyasını içeriğini değiştirme.
3.Tablo adı değiştirme.
4. Veri dosyasını okuma.
5. Belge yazılacak(Trileri gibi.)
6.Windowsa uyumluluk.
...........

Düşündüklerim :
1. Eğer tablo, veritabanı... yaratılırken aynı adda ise bir daha oluşturmuyor hata veriyor. Ben kullanıcının o tablonun olup olmadığını denetlemesini beklerim.(Mysql'de de kullanıcıdan bunu bekliyor.) Ama hata verdirtmesem mi ? yada 0'dan başka değer mi döndürsem. ?
2. __sil__() işlevi bana çok tehlikeli geldi, sizce ?
3. Veri dosyalarını filan nasıl koruyacağım ? Şifre ile korumam ve dosyayı açtırmamam gerekir. Örneğin şifrelerini saklayan bir program yazacak kişi bu sınıflardan yararlanacak olsa şifreler açıkta gezer. Onun için şifreleri koruma özelliğide olması gerekir.  Sizin fikriniz var mı ?
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
veri oku işlevinde hata var diyor:

    int veri_oku(out dchar[][] okunanVeri_, inout dchar[] veriAdı_, inout dchar[] veriYolu_)
    {
 
        dchar[][] okunanVeri__;
        string veriAdı_s = to!string(veriAdı_);
        veriAdı = veriAdı_s;///Classa eklenecek
        string veriYolu_s = to!string(veriYolu_);
        veriYolu = veriYolu_s;///Classa eklenecek
        string dosyaAdı = veriYolu_s~"/"~veriAdı_s~".dkv";
        File dosya = File(dosyaAdı,"r+");
        int s =0;
        while (!dosya.eof()) {
            string satır = dosya.readln();
            dstring satır_sd = to!dstring(satır);
            okunanVeri__[s][]=satır_sd.dup;
            ++s;
        }
        okunanVeri_[][]=okunanVeri__[][];
 
        return 0;
    }
Verdiği hata
core.exception.RangeError@dkv(119): Range violation
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #1
canalpay:
1. Eğer tablo, veritabanı... yaratılırken aynı adda ise bir daha oluşturmuyor hata veriyor.

Güvenli bir davranış.

Ben kullanıcının o tablonun olup olmadığını denetlemesini beklerim.(Mysql'de de kullanıcıdan bunu bekliyor.) Ama hata verdirtmesem mi ? yada 0'dan başka değer mi döndürsem. ?

Mysql'in nasıl yaptığını bilmiyorum. Bence kullanıcı "bu tablo var mı" diyebiliyorsa ve isterse tabloyu silebiliyorsa hata atmak doğru hareket.

2. __sil__() işlevi bana çok tehlikeli geldi, sizce ?

Haklısın. Ufak bir program hatası gereğinden çok şeyi uçurabilir. Şimdilik gerçekten silmek yerine, belki silinenler gibi bir dizine yollayabilirsin. Veya dizinin isminin sonuna .silindi gibi bir şey ekleyebilirsin.

3. Veri dosyalarını filan nasıl koruyacağım ? Şifre ile korumam ve dosyayı açtırmamam gerekir. Örneğin şifrelerini saklayan bir program yazacak kişi bu sınıflardan yararlanacak olsa şifreler açıkta gezer. Onun için şifreleri koruma özelliğide olması gerekir.  Sizin fikriniz var mı ?

Bence şimdilik kolaylık ön planda olmalı. Hatta dosyalar şimdilik elle de değiştirilebilse kullanışlı bile olabilir. (Bu cevabı verirken şifrelemenin tam olarak nasıl yapıldığını bilmediğimi de söylemem gerek. :) )

Ali
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #2
canalpay:
veri oku işlevinde hata var diyor:

okunanVeri__'nin boyu başta 0 olduğu için onun s'inci elemanına erişemeyiz. En kolayı okunanVeri__ ~= satır.dup olabilir.

Ama ben sınıf üyelerine yaptığın atamaları gözardı ederek şöyle yazdım. Bana daha pratik geldi:

    int veri_oku(out dchar[][] okunanVeri_,
                 in dchar[] veriAdı_,
                 in dchar[] veriYolu_)
    {
        string dosyaAdı = text(veriYolu_ ~ "/" ~ veriAdı_ ~ ".dkv");
        std.stream.File dosya = new std.stream.File(dosyaAdı, FileMode.In);
 
        foreach (char[] satır; dosya) {
            okunanVeri_ ~= to!(dchar[])(satır);
        }
 
        return 0;
    }

Bu char ve dchar konuları zorluk çıkartıyor değil mi... Programladıkça kuralları anlayacağız galiba.

Notlar:

- std.conv modülündeki text'i kullandım. Onun wtext ve dtext diye arkadaşları da var.

- std.stream'deki File'ı kullandım. std.stdio'yu eklemezsen, açıkça std.stream.File yazmak zorunda da kalmıyoruz. Onu kullanmamın nedeni, o foreach ile kullanılabiliyor. (opApply üye işlevin tanımlayan sınıflar foreach ile kullanılabiliyorlar.)

- Parametreler için kullandığın inout'lar bende derlenmiyor. D2'de onları ref olarak yazmak gerek. Ama onlara da burada gerek yok: dinamik diziler referans türleri oldukları için zaten kopyalanmıyorlar. Projenin diğer kodlarında da bütün inout'ları ref olarak değiştirdim.

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Verdiğiniz kodla derlemeye çalıştığımda hata verdi. Bende eski yöntem ile hallettim(2 satırlık veri ile denedim doğru okudu.) :
    int veri_oku(out dchar[][] okunanVeri_, inout dchar[] veriAdı_, inout dchar[] veriYolu_)
    {
 
        dchar[][] okunanVeri__;
        string veriAdı_s = to!string(veriAdı_);
        veriAdı = veriAdı_s;///Classa eklenecek
        string veriYolu_s = to!string(veriYolu_);
        veriYolu = veriYolu_s;///Classa eklenecek
        string dosyaAdı = veriYolu_s~"/"~veriAdı_s~".dkv";
        File dosya = File(dosyaAdı,"r+");
        while (!dosya.eof()) {
            string satır = dosya.readln();
            dstring satır_sd = to!dstring(satır);
            okunanVeri__~=satır_sd.dup;
        }
        okunanVeri_=okunanVeri__;
 
        return 0;
    }
}

text işlevinin yaptığını her ne kadar elle de yapsak çok uzatıyorduk. Text çok yararlı.

 
inout içinde siz dmd2.038 çıktığında dchar[] dstring ve const dchar[] için kullanılabiliyor demiştiniz. O yüzden onu kullandım. Eğer kullanılmıyorsa hepsi için kullanan ne var acaba ?


__sil__ işlevi şimdilik kalmalı. Çünkü alt dizinleri silmek çok uzayacak. Belki ileride 2 aşamalı yaparız. silinenler adlı dizine atarız. Ordan da bir __boşalt__ işlevi yazar boşaltırız. 2 aşama olduğu için geri dönüşü olabilecek.
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
inout içinde siz dmd2.038 çıktığında dchar[] dstring ve const dchar[] için kullanılabiliyor demiştiniz.

dmd 2.038 ile mi derliyorsun? Ben senin kodundaki inout parametrelerde şöyle bir hata alıyorum:

Error: inout on parameter means inout must be on return type as well (if from D1 code, replace with 'ref')

D2'de parametre türü olarak kullanılan inout emekliye ayrılmaktaydı. Onun yerine bir süredir ref kullanılıyordu.

2.038 sürümünden bu yana inout'a başka bir anlam verdiler. "Parametre olarak ne kullanıldıysa, dönüşte de onu kullan" anlamına geliyor. Bu kullanımda, inout, şu üç parametreden birisinin yerini alıyor: const, immutable, değişebilen.

Ama inout hem parametrede, hem de dönüş türünde kullanılmak zorunda.

Böylece tek bir işlev yazarak bu üç durumu da karşılayabiliyoruz. Ama ben Functions sayfasındaki şu işlevi derleyemiyorum:

inout(int)[] foo(inout(int)[] a, int x, int y)
{
    return a[x .. y];
}
 
void main()
{
    int[] a;
    foo(a, 0, 0);
}

Eğer kullanılmıyorsa hepsi için kullanan ne var acaba ?

Ben henüz emin değilim. Bu konuda deneyim kazanarak bize fikir verecek olan sensin. :) File'ı kullanırken bile text ile string'e dönüştürmenin gerekmesi bana saçma geliyor. Belki de zamanla her kütüphane işlevini her dizgi türünü alacak şekilde değiştireceklerdir.

Ya da bazı kurallar geliştireceğiz: "giriş/çıkış işlemlerinde char, programın iç taraflarında dchar" gibi... Yani senin dosyaya yazıp okuduğun yerlerde char olması mantıklı, programın içinde de dchar olmalı... Sanırım... :)

Ali
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şablonları söylemeyi unuttum. trileri'de "herhangi tür" anlamında işlev şablonları kullanmıştık:

void tolowerInPlace_tr(T)(ref T[] dizgi)
{
    dchar[] dene = to!(dchar[])(dizgi);
 
    foreach(int i, dchar büyükHarf; dene) {
        dene[i] = (büyükHarf == 'I') ? 'ı' : toUniLower(büyükHarf);
    }
    dizgi = to!(T[])(dene);
}
unittest
{
    dchar[] d = "AIİĞŞÖZ"d.dup;
    tolowerInPlace_tr(d);
    assert(d == "aıiğşöz");
 
    wchar[] w = "ĞIAİBbCIĞİZİşIıİ"w.dup;
    tolowerInPlace_tr(w);
    assert(w == "ğıaibbcığizişııi");
 
    char[] c = "AİIĞZ"c.dup;
    tolowerInPlace_tr(c);
    assert(c == "aiığz");
}

Testlerindeki bütün türlerle çalışıyor. Zaten şablonlar olduğu için yeni inout'un gereğini tam anlamış değilim.

Ali
canalpay (Moderatör) #8
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
dmd 2.038 ile mi derliyorsun? Ben senin kodundaki inout parametrelerde şöyle bir hata alıyorum:

Dmd sürüm notlarında inout olanağının işinin değiştirildiğini belirtmediği için( yada ben göremedim. ) ve inout önceden de var olduğu için ben de herhalde inout önceden de vardı dedim ve inout kullandım. Ama inout'u kullanırken aslında referans şeklinde kullanıyormuşum(Şimdi anladım :-D ).

Sizde yeni derleyiciyi kullanınca herhalde hata verdi. Bir eski sürümü ile derleseniz herşey doğru çalışacak.( Buradan anlaşılan tembellik etme hemen güncel derleyiciyi edin :-) ).

Şablonu unuttuğum için şablon kullanmadım. Keşke şablon kullansaydım. Yakında düzeltirim. Çünkü projeye 2 haftalık ara veriyorum. (Daha doğrusu iş verimimi düşüreceğim. )

inout ile şablon olayını ben yine anladım, adam seni uğraştırmak istemiyor. İşleve eriştiğin değerde döndür diyor. Temelde bir farklılık var. ( Sanırım var; şablonu çok iyi bilmediğim için kesin yargıya varamıyorum. )

Ama şu sorularım var :
1. cast olanağı ile to şablonun farkı var mı da 2'sini koyuyorlar.( Bunda bir fark olabilir.)
2. std.stream.File ile std.stdio.File farkı( Hadi bunda çok fark var. Ama neden iki tane file aracı var. stream'i kabul et işte. )
3. std.stdio.write() ile std.cstream.writef() farkı. (Ben bunların kaynak koduna baktığımda ikisininde C'den sarmalandığını hatırlıyorum. Ee ne farkı var. Hadi yanlış hatırlıyorum. )
4.write ile writeln farkı. (aynı şey. Sadece işlevin argümanına \n karakteri ekliyor. Ben beceriksizim ama bir \n ekleyemeyecek kadar beceriksiz miyim ? Hadi bunu eklemese ben kendim ekleyeceğim. Beni düşünmüşsün eklemişsin ama daha eklenecek o kadar özellik var, daha senin dünya kadar hatan var. Niye bunlarla uğraştığın kadar kütüphaneni zenginleştirmek için uğraşmıyorsun. Tangoya öylesine baktım, kod düzeni bile çok iyi. Sanki adamlar kod yazmıyor resim çiziyor. ( Doğrusu resim çizerek kodlanan programlama dili vardı. Bilmem ne çiziyorsun hello world diyordu :-) )

Ve anlamadığım Walter Bright ne için phobos kütüphanesini geliştiriyor ? Eğer sen phobos kütüphanesini geliştiriyorsan neden Tango kütüphanesi ile uğraşıyorsun (Ben bazı modüllerde Walter Bright'in adı geçtiğini hatırlıyorum. Hadi diyelim sadece phobostaki kodları aldı -ki ben böyle olduğunu zannetmiyorum. - ne için onları phobosu geliştirmeye davet etmiyorsun yada ne için onların projesine katılmıyorsun.(Ee belki fikir ayrılıkları var. Ama bu belkilerin hepsi tutacak mı ? İlla ki tutmayanlar olacak. )) ? Bunu merak ettim.

Ve birde sorum ,sadece meraktan soruyorum, D ile(sadece phobos kütüphanesini kullanarak) aklımıza gelen herşeyi teorikte yapabilir miyiz ?
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
1. cast olanağı ile to şablonun farkı var mı da 2'sini koyuyorlar.( Bunda bir fark olabilir.)

cast, C'den beri gelen bir olanak. C'de yalnızca temel türlerle çalışır. C++'da ise sınıfları istediğimiz her türe dönüşebilecek şekilde yazabilirdik.

D'de de bu dönüşüm cast ile devam ediyor. Ama C++'dan daha kısıtlı: sınıflar için yalnızca tek bir dönüşüm işleci tanımlanabiliyor.

to şablonu ise her türü her türe dönüştürebilecek genel bir anlaşma gibi düşünülebilir. Ne kadar ilgisiz olsalar da kendimiz de tanımlayabiliriz.

Aşağıda to şablonu özelleştirmesini (specialization), birDeğer isminde üyesi olan herhangi bir türden Masa nesnesi oluşturacak şekilde yazdım.

Oradaki if ifadesini de dmd/src/phobos/std/conv.d dosyasını inceleyerek öğrendim.

import std.cstream;
import std.conv;
 
class Masa
{
    int i_;
 
    this(int i)
    {
        dout.writefln("Masa.this ", i);
        i_ = i;
    }
}
 
class Okyanus
{
    const int birDeğer()
    {
        dout.writefln("Okyanus.birDeğer");
        return 42;
    }
}
 
class Duvar
{
    const int birDeğer()
    {
        dout.writefln("Duvar.birDeğer");
        return 100;
    }
}
 
class UyumsuzTür
{}
 
Masa to(Masa, S)(const ref S kaynak)
if (is (typeof(&S.init.birDeğer)))
{
    return new Masa(kaynak.birDeğer());
}
 
void main()
{
    auto o = new Okyanus;
    auto d = new Duvar;
    auto u = new UyumsuzTür;
 
    Masa mo = to!Masa(o);
    assert(mo.i_ == 42);
 
    Masa md = to!Masa(d);
    assert(md.i_ == 100);
 
//     Masa mu = to!Masa(u);  DERLEME HATASI
}

2. std.stream.File ile std.stdio.File farkı( Hadi bunda çok fark var. Ama neden iki tane file aracı var. stream'i kabul et işte. )

Benim anladığım kadarıyla, std.stdio.File C'nin FILE yapısı etrafında bir sarma. Yapı olarak gerçekleştirilmiş.

Ben std.stream.File'da karar kıldım, çünkü hem sınıf olduğu için daha yetenekli; hem de dout ile aynı şekilde çalışıyor. Tek bir arayüz öğrenmek bütün akımlar için yeterli oluyor.

3. std.stdio.write() ile std.cstream.writef() farkı. (Ben bunların kaynak koduna baktığımda ikisininde C'den sarmalandığını hatırlıyorum. Ee ne farkı var. Hadi yanlış hatırlıyorum. )

Ne olursa olsun, ben cstream arayüzünü daha genel ve daha D'ce buluyorum.

4.write ile writeln farkı. (aynı şey. Sadece işlevin argümanına \n karakteri ekliyor. Ben beceriksizim ama bir \n ekleyemeyecek kadar beceriksiz miyim ? Hadi bunu eklemese ben kendim ekleyeceğim. Beni düşünmüşsün eklemişsin ama daha eklenecek o kadar özellik var, daha senin dünya kadar hatan var. Niye bunlarla uğraştığın kadar kütüphaneni zenginleştirmek için uğraşmıyorsun.

Haklısın. Ama gerçekten yazdırılanların çoğunun sonunda '\n' oluyor. Amaç, çok yapılanları kolaylaştırmak, az yapılanlara da kapı açmak olmalı.

Ayrıca, eskiden bir yerde okuduğum bir yazıya göre, metin işlemenin birimi aslında satırdır. (Yazarın fikri.)

Başka bir bakış açısı: eğer "satır oku" diye bir işlev varsa, bütünlük açısından onun karşıtı da olmalı.

Hatta, amacımızı '\n' gibi kodlarla belirtmek yerine işlevin ismini açık hale getirmek daha yararlı. (Ama 'ln' gibi bir ek o kadar da açık etmiyor. :D )

Tangoya öylesine baktım, kod düzeni bile çok iyi. Sanki adamlar kod yazmıyor resim çiziyor. ( Doğrusu resim çizerek kodlanan programlama dili vardı. Bilmem ne çiziyorsun hello world diyordu :-) )

Ben Tango'ya henüz bakmadım.

Phobos'u yalnızca *daha* standart olduğu için seçmiştim. Andrei Alexandrescu şu sıralarda aralık kavramını (range) ekliyor. C++'ın STL'inin erişicileri (iterator) getirdiği kadar büyük bir değişiklik getirebilir. (Phobos'ta aralık örnekleri yazılmaya başlandı bile. Yapı taşları std.range içinde...

Tabii Tango'yu da aralıklı hale getirebilirler. O zaman daha da güzel olur.

Ve anlamadığım Walter Bright ne için phobos kütüphanesini geliştiriyor ?

Şimdilerde Phobos'un tasarımı çoğunlukla Andrei Alexandrescu'nun. Başkaları da yardım ediyor ve katkıda bulunuyor.

Eğer sen phobos kütüphanesini geliştiriyorsan neden Tango kütüphanesi ile uğraşıyorsun (Ben bazı modüllerde Walter Bright'in adı geçtiğini hatırlıyorum. Hadi diyelim sadece phobostaki kodları aldı -ki ben böyle olduğunu zannetmiyorum. - ne için onları phobosu geliştirmeye davet etmiyorsun yada ne için onların projesine katılmıyorsun. (Ee belki fikir ayrılıkları var. Ama bu belkilerin hepsi tutacak mı ? İlla ki tutmayanlar olacak. )) ? Bunu merak ettim.

Değişik insanlar değişik taraflara yöneliyorlar; değişik fikirleri var. Normal. Biraz da politik olmalı...

Ve birde sorum ,sadece meraktan soruyorum, D ile(sadece phobos kütüphanesini kullanarak) aklımıza gelen herşeyi teorikte yapabilir miyiz ?

Teoride herşeyi yalnızca D'nin (ve başka dillerin) iç olanaklarıyla da yapabiliriz.

Standart kütüphaneler fazla özel de olmamalılar zaten. Örneğin DNA işlemleriyle ilgili kütüphaneleri içermemeliler.

Bence Phobos gayet kapsamlı bir kütüphane. Hatta zipleme gibi özel amaca yönelik modüllerin olması biraz şüpheli bile.

C++'tan düşünüyorum: Standart kütüphanesi algoritmalar ve veri yapıları açısından oldukça yeterlidir ama eksiklikleri olduğu söylenir. Onun eksikliklerini kapatmak için Boost doğmuştur.

İçimden bir ses örneğin std.zip'in standart kütüphanede bulunmaması gerektiğini söylüyor, ama bulunursa da ihtiyacı olanlar için standart bir temel oluşturmuş oluyor.

D'de daha çok bir "pratiklik" hakim. "Koyalım, işe yarasın" gibi bir yaklaşım var. Yararlı; ama tutarsızlık da getiriyor.

Phobos'ta olmayan bir şey: pencereleme modülleri. Olmalı mı? Bilmiyorum. :D

Ali
canalpay (Moderatör) #10
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
İçimden bir ses örneğin std.zip'in standart kütüphanede bulunmaması gerektiğini söylüyor, ama bulunursa da ihtiyacı olanlar için standart bir temel oluşturmuş oluyor.

Ben ise tam zıttını düşünmüşümdür. Hepsi programlama ile ilgili şeyler. Eğer şuan zip ile ilgili modül doğru düzgün çalışsaydı dkv için gereken şifreleme işini yapabilecektim. Eğer indirme modülü olsa dsss gibi bir projeyi çok rahat yazacaktım. Bana göre gereksiz olanlar windows gibi belirli bir platforma yönelik şeyler ki aslında bunu bile belirli yere kadar  ben kabul görebilirim.

Şuan benim düşüncem daha etkin :-D Bir programlama dili seçerken kütüphanesinin genişliğine ve standart kütüphanesinin genişliğine bakılıyor.

Valla şu pythonun kütüphanesini filan çok özlüyorum. Olanak olarak D çok iyi. Phobosta hatasız ve eksik olmayan şeyler çok iyi. Ama gel gelelim çok ama çok eksiği var. Eğer D2 ile ilgili başka bir kütüphane olsa yine önemli değil. Ama yok.(PHP'de grafik bile çizebiliniyordu. Hem de ne grafikler. Neredeyse photoshop muadili :-D )  Kendimi D2'nin gelişimi bitecek o zaman kütüphane gelecek diyorum. Ama ne yazıkki aklıma D3 ve yeni bir macera geliyor :-)

Ama ikimizin programlama yapımız farklı. Ben programcının işi kolay olmalı diyorum. Siz daha çok ben gerçek bir programcıyım demek istiyorsunuz(Bence.). Galiba başka ülkelerde bu iki farklılığa ayrı adlar veriliyormuş. Biri coder diğeri programmer sanırım.


Merak ediyorum. Bir hello world yazısı D'nin iç olanakları ile nasıl yazılır. (ki benim aklım almıyor.).Hele c için hiç aklım almıyor. Daha tür tanımlamak için bile kütüphane eklemek gerekirken hiç almıyor.
 

Kusura bakmayın konu çok dağıldı.
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Ben ise tam zıttını düşünmüşümdür. Hepsi programlama ile ilgili şeyler.

Herşey programlama ile ilgili. DNA çözümlemeyle ilgili olanaklar da standart kütüphane de bulunmalı mı? Veya kamyon şoförlerinin uyku zamanlarını düzenleyen bir kütüphane? :) İstediğimiz kadar uçabiliriz. :)

Eğer şuan zip ile ilgili modül doğru düzgün çalışsaydı dkv için gereken şifreleme işini yapabilecektim.

Neden çalışmadığını merak ettim şimdi. :) Ayrıca zip sıkıştırma için...

Şuan benim düşüncem daha etkin :-D Bir programlama dili seçerken kütüphanesinin genişliğine ve standart kütüphanesinin genişliğine bakılıyor.

Kabul ama bir yerde sınır koyulması gerek. Örneğin çeşitli XML tarayıcı kütüphaneleri var. Hangi tasarım kabul edilsin? Neden daha iyisi olacakken birisi "standart" hale getirilsin?

D2'nin gelişimi bitecek o zaman kütüphane gelecek diyorum

Bundan şüphen olmasın. Herkes D2'nin durmasını bekliyordu. :) Ve durdu... Bundan sonra ufak tefek pürüzler giderilecek ve hatalar temizlenecek.

Ama ne yazıkki aklıma D3 ve yeni bir macera geliyor :-)

Benim tahminim, D3'ün olgunlaşmasına daha 3-4 sene var. İstediğimiz noktada ilgilenmeye başlayabiliriz.

Ama ikimizin programlama yapımız farklı. Ben programcının işi kolay olmalı diyorum.

Katılıyorum.

Siz daha çok ben gerçek bir programcıyım demek istiyorsunuz(Bence.).

Ben C++ kültürünün etkisi altındayım. C++'da dil ve standart kütüphane olanakları çok dikkatle ve çok düşünülerek seçilir.

Dil; türler, deyimler, ifadeler, vs. ile kütüphane yazabilecek bir temel oluşturmalı. Bjarne Stroustrup kütüphane ile çözülebilecek hiçbir şeyi kesinlikle dile almaz. Onun bakış açısıyla; örneğin dizgiler ve eşleme tabloları dilin değil, kütüphanenin olmalıdır. (Kendisinin D için böyle söylediğini hiç bilmiyorum.)

Standart kütüphane ise o dili kullanarak algoritmalar ve veri yapılarıyla bir temel oluşturmalıdır.

Uygulamaya yönelik herhangi başka kütüphaneler de dilin ve standart kütüphanenin üstünde kurulmalıdır.

C++'ın felsefesi o.

Ama bazı insanlar da bunun fazla kısıtlayıcı olduğunu düşünüyorlar. Örneğin iş parçacıkları için standart kütüphanenin destek vermesini isterler. Veya görsel programlama için...

Her insanın ihtiyacı ve görüşü farklı olduğu için, güzel bir sınır bulmak gerek.

Yine zip örneğine dönersek, neden onun kullandığı algoritma olsun da, başka bir algoritma olmasın? (Öte yandan, std.random modülünde rastgele sayı dizileri için birden fazla algoritma var. :) )

Bu arada seninle karşıt görüşte değiliz. Ben de kullanışlılıktan yanayım ama standart kütüphanenin sınırının nerede olması gerektiğinin o kadar bilinemeyeceğini söylemek istiyorum.

Galiba başka ülkelerde bu iki farklılığa ayrı adlar veriliyormuş. Biri coder diğeri programmer sanırım.

O terimler çok karışık ve pazarlama taktiklerinin etkisi altında. :) Örneğin hiç kimse CV'sine "programmer" yazamaz, çünkü düşük bir tanım oluyor. Onun yerine, Amerika'da programcılık mesleğinin ismi "software engineering."

Ali
canalpay (Moderatör) #12
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Herşey programlama ile ilgili. DNA çözümlemeyle ilgili olanaklar da standart kütüphane de bulunmalı mı? Veya kamyon şoförlerinin uyku zamanlarını düzenleyen bir kütüphane? :) İstediğimiz kadar uçabiliriz. :)

Eklenmesi taraftarı değilim ama eklenirse ne olacağını görmek isterim :-D Ben "programlama ilgili" sözcük grubu şu anlamda tanımladım. 1. Zip kütüphanesi sana ne çağrıştırıyor. Programlarken bir veriyi sıkıştırmak için kullanılan kütüphane. Doğru konabilir.
2. Dna kütüphanesi sana ne çağrıştırıyor. Aman hemen klonumuz yapılabilir. kaç kaç :-D Konulamaz. Ben kendime yeterim gibi...

Tabii insanların akıllarında çağrıştırdığı şeyler farklıdır ama bana zip programlamayla ilgisi yüksek gelirken DNA bana bioloji ile ilgisi yüksek geliyor. Yani ben zip'i programlamaya koyarken dna'yı bioloji kitabına koyarım ya siz ?

zip'in hatası http://www.digitalmars.com/d/2.0/phobos/std_zip.html burada yazıyor. Şifrelemeye desteklemiyor diyor ve bir sürü hata.

Ben standart kütüphaneyi ne için isterim ?
1. Herkes tarafından desteklenir(Bu yüzden ne belge sorunu nede hata yer alır.).
2. Kurulum gerektirmez. Hemen deneyebiliriz.
3. Uyum sorunu kesin kez olmayacak.

Diyelim D dili görsel kütüphane standartı olarak Tkinter ile gelsin(python öyle yapıyor.)

bakacağız tkinter iyi hoş kullanımı basit. Ama ne yazik ki eksik ve hatalı. Bizde standart olmasına karşın Gtk kullancağız. Ve belki daha profesyonel bir şey isteyeceğiz ve QT kullanacağız. Bu kadar basit. Gnu'yu sevenler ne için seviyor ? Seçme özgürlüğü için. Ubuntu kur gnome ile gelsin sonra kde kur. Pardus kur Kde ile gelsin sonra x-face kur. Hatta dağıtımın hiç bir şekilde destek vermediği gnome'u kur.

Ee standart ne sağladı ? Standart programı kurduğumuzda bizi çıplak bırakmadı. Kde'yi verdi al paşa paşa kullan dedi. Eğer standart olmasaydı konsol ile bir şeyler yükleyecektik ve o zamana kadar sistemin bir arayüzü olmayacaktı. Standart olmasaydı hiç bir sistem arayüzü benimsenmediği için yeterli destek verilemeyecekti.
acehreli (Moderatör) #13
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
zip'in hatası http://www.digitalmars.com/d/2.0/phobos/std_zip.html burada yazıyor. Şifrelemeye desteklemiyor diyor ve bir sürü hata.

Her programda hata var. Senin kullanımını engellemediği sürece kullanabilirsin. dmd forumlarındaki konuşmalara baksak hiç kullanmamamız gerek. :)

Şifrelemeyi anladım. zip programının -e seçeneğinden bahsediyorlar. Sıkıştırılan bilgiyi açmak için şifre kullanılıyormuş. (Ben de başlı başına bir şifreleme kütüphanesi gibi düşünmüştüm.)

Bence yine de şimdilik zip'i kullan. Şifrelemeyi sonra eklersin. Örneğin verilerin şifreleri, dosyadan okunduktan sonra program içinde çözülebilir.

Böylece kötü niyetli birisi dosyalar açıldıktan sonra programı çökerterek dosyaları da okuyamaz. (Sanırım zip'le açıldığında öyle bir tehlike var.)

Ali
canalpay (Moderatör) #14
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben dosyaları ziplerken şifre koydurtacaktım. Sanırım bu şekilde şifresiz erişemezlerdi.Ama zipi şimdi sadece yedekletmek amaçlı kullandırtacağım.

Şifre  olayını da kafamda şu şekilde tasarladım. Girişte kullanıcı adı ve şifre soracağım. O şifrelerle metindeki yazıları karıştırarak şifreli metin oluşturacağım. Yani metni şifreleyeceğim. Bunu da kullanıcının verdiği şifreyi belirli bir kural ile şifreleyeceğim. Yani geri dönüşümü olacak. Ama geri dönüşüm için şifreyi bilmek gerekecek. Eğer başka şifre yazar ise şifre doğru olmadığı için şifrelenmiş metinin saf hali açılmayacak.

Örn: şifreleme işlevim şifredeki harflerin int değerlerinin bir üstü ile yazıyor.(örnek a =1 a+1 =2 b olarak yazılacak)(Gerçekte tabiki daha gelişkin olacak.) .
Buda şu şekilde olacak:
Yazılan----------Şifre--------------metne yazılan-------şifreyi ca yazarsa okuduğu değer--------şifre na girerse okunacağı değer
can               ca                  dbn                      can                                                   dbm                  

Gibi. Bu yüzden şifreyi bilmeden asla doğru metni elde edemeyecek.


Veri yazmak içinde şöyle bir formül var. İlk satırda yukarıdaki sisteme göre 000 yazdıracağım. Eğer şifreyi girdiğinde ilk satırdaki şifrelenmiş metni 000 okumazsa yazı yazmayacak. Yani Her türlü erişime kapalı olacak. Merak ediyorum da bu şekilde şifre kırılabilir mi ? Yani kırılabilse de çocuk oyuncağımı ? Yani şifreleme kodlarını gören her adam şifreyi kırabilir mi ? (Yoksa pro. biri kırarsa zaten bu çok çok önemli bilgi saklamak için değil.)

Olabilecek tek sorun metni açtıklarında metnin içeriğini değiştirebilir. Ama mevzu oraya kadar geldiğinde zaten adam bilgisayarına istediği zararı verebilir.
acehreli (Moderatör) #15
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Veri yazmak içinde şöyle bir formül var. İlk satırda yukarıdaki sisteme göre 000 yazdıracağım. Eğer şifreyi girdiğinde ilk satırdaki şifrelenmiş metni 000 okumazsa yazı yazmayacak.

İyi fikir.

Yani Her türlü erişime kapalı olacak. Merak ediyorum da bu şekilde şifre kırılabilir mi ? Yani kırılabilse de çocuk oyuncağımı ? Yani şifreleme kodlarını gören her adam şifreyi kırabilir mi ?

Her türlü şifre kırılabilir. Sanırım en büyük sorun, zaman. Yeterli zamanı olan her şeyi çözebilir. Önemli olan, anlamsız derecede uzun sürede kırılan bir şifre kullanmak. Ama ben şifreleme konularında pek bilgili değilim.

Ama bu kütüphane için şifrenin gerektiğinden emin değilim. Gizliliği kütüphaneyi kullanan kişiye de bırakabilirsin. Örneğin senin katmanın yalnızca veriyi yazabilir. İsteyen program veriyi şifreler...

Endişem, kütüphaneni amacının sapıyor olması. Eğer olabiliyorsa, her kütüphane (ve her sınıf, her işlev, vs.) çok küçük bir işi halletmeli. İstisnaları vardır ama en az karmaşıklığı da düşününce; amacı iyi belirlemek gerekir.

Kısacası: nereden çıktı şifreleme? :) Diyelim, programımın ayarlarını hızlıca kaydedebileceğim bir kütüphane istiyorum...

Ali
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:
Sayfa:  1  2  3  4  sonraki 
Forum: Projeler dkv RSS
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-03-25, 14:39:54 (UTC -07:00)