Forum: Projeler dkv RSS
DKV -Dosya Kaynaklı Veri (Tabanı)-
Sayfa:  önceki  1  2  3  4  sonraki 
canalpay (Moderatör) #16
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ı
Yanıtlanan mesaj ID 1319
Büyük bir olasılıkla bu projeyi tamamladığımda şifreleme projesine başlayıp bu projeye ekleyeceğim.

Şifreleme işi nereden çıktı diyorsanız her zaman vardı. Bir veritabanında şifreleme şarttır. Yoksa dosyalarınıza erişilir. Eee düşünsenize siz özelinizi saklıyorsunuz biri geliyor sizin özelinizi okuyor. Hadi bu çok önemli değil ama biriniz siz T.C numaranızı saklıyorsunuz ve onu çaldırıyorsunuz. Yada en basitinden şifrelerinizi yazıyorsunuz ve onlar çalınıyor. Şİfreleme bence şart. Bu projenin taslağı bittiğinde ben büyük ihtimalle ona başlarım ve tekrar buna eklerim.

Ben projeyi tanımlarken dosya kaynaklı veri tabanı demiştim. Ve her veritabanının şifrelemesi vardır. Yani bu aklımda hep vardı. Ama nasıl yapabileceğim aklıma gelmedi. Bence proje sapmıyor. Ama bir bakımdan da siz haklısınız. O zaman bu projeyi bitirdiğimde şifreleyici diye bir proje daha açayım. (dokul için gerekecek.) Onda şifreleme işini devam edeyim. Sonra da bu projeyi günceller şifreleyiciyi dahil ederiz. Sınıfta şifreli_mi diye bool değişkeni koyarız. True olursa şifre açık olur. False olursa kapalı olur.(Ön tanımlı false) Sizce nasıl ?
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.

Amacım kırılması çok zor bir şifre yapıcı md5'a yada sha1'a rakip bir şey yapmak değil.

1.Sizin gibi bir kullanıcı şifreyi kırabilir mi ?
2. Benim gibi bir kullanıcı şifreyi kırabilir mi ?

Yoksa adam şifre a verir b verir hareketlerini inceler. Kesin kez çözümü bulur. Şifrenin geri dönüşümü olduğu için giriş değeri sonsuz olduğu kadar çıkış değeride sonsuz olmalı.(Yani fonksiyonun giriş değeri farklı olduğu zaman çıkış değeri de farklı. Bizde bu fonksiyona belirli sayılar vererek yaptığı işlemleri inceleyebiliriz.) Bu yüzden -bence- geri dönüşümlü şifreleyicilerin hepsi çok kolay kırılabilir. Hatta kırılmıştır.(PHP kodlarını şifrelemek için kullanılan zend'in şifreleyicisi. Arkasında koskocaman şirket var. Yinede kırılıyor. girişde çıkışta sonsuz çünkü.) (Bunların hepsi benim düşüncem. Doğru olmayabilir.)
acehreli (Moderatör) #17
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Eee düşünsenize siz özelinizi saklıyorsunuz biri geliyor sizin özelinizi okuyor.

O durumda tabii ki istemem ama programın ayar dosyası gibi bir dosyada da gizlilik yoktur.

Sınıfta şifreli_mi diye bool değişkeni koyarız. True olursa şifre açık olur. False olursa kapalı olur.(Ön tanımlı false) Sizce nasıl ?

Olur.

Veya önce şifresiz bir VeriTabanı sınıfı yazılır; ondan sonra onu içeren ve bilgi giriş ve çıkışlarını şifreleyen ve şifre açan bir ŞifreliVeriTabanı sınıfı yazılabilir. Bu ikincisi, son derece basit bir sınıf olarak bütün işi VeriTabanı'na devreder ama gizliliği sağlar. Bu durumda, dosyadaki her şey gizli olur.

Başka bir yol, bilgiyi taşıyan Veri diye bir sınıf yapılabilir. Veri tabanı sınıfı, bilgiye erişme işlerini verilere yaptırır. Bir de örneğin GizliVeri diye bir sınıf olursa, o veri gizli olur. Bu durumda ise, dosyadaki yalnızca gizli olan veriler gizli olur.

Başka yollar da düşünülebilir.

Benim gördüğüm, veri tabanı kavramının kendisi gizlilikle ilgili değil... O sınıf, veriyi dosyalama işleriyle ilgilenmeli. Gizlilik gibi bir konu ise o konudan sorumlu bir sınıf tarafından halledilmeli.

Ali
canalpay (Moderatör) #18
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ı
Şimdi inout yerine şablon kullanmak istiyorum. Ama sınıflar için nasıl kullanacağımı anlamadım.
class dkv(T){
    string vTAdı;
    string tAdı;
    string veri;
    string veriAdı;
    string veriYolu;
    string silmeYolu;
    string denetçi;
    int v_yarat(T vTAdı_)
    {
        string vTAdı_s=to!string(vTAdı_);
        vTAdı=vTAdı_s;
 
        if (exists(vTAdı_s)) {
        throw new Exception("Hata: Veritabanı zaten var");
        }
        string yaratKomutu = "mkdir "~vTAdı_s;
        system(yaratKomutu);
        return 0;
 
    }
}

Şimdi acaba bunu nasıl şablonlu hale getireceğim ?
Bu mesaj acehreli tarafından değiştirildi; zaman: 2010-01-08, 09:26.
acehreli (Moderatör) #19
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Eğer bir sınıf şablonuyla ilgileniyorsak, o sınıfın üyelerinin türü dışarıdan belirleniyor demektir.

Örneğin x,y koordinatlarını tutmak için çeşitli türler kullanabiliriz. Bunu kullanıcıya bırakırsak:

class Nokta(T)
{
    T x;
    T y;
 
    this(T x, T y)
    {
        this.x = x;
        this.y = y;
    }
}
 
void main()
{
    auto hassasNokta0 = new Nokta!double(1.1, 2.2);
 
    // Üsttekiyle aynı şey:
    auto hassasNokta1 = new Nokta!(double)(1.1, 2.2);
    // Yani tek bir şablon parametresi varsa, türün etrafına
    // parantez yazmak gerekmiyor.
 
    // Bu da int kullandığı için noktayı düzlemde diğerleri
    // kadar hassas olarak tutamıyor
    auto tamsayıNokta = new Nokta!int(3, 4);
}

Yani sınıfın tanımı içinde x,y koordinatlarının geçtiği yerlerde özel bir sınıf belirtmek yerine T diyoruz. Sınıf hangi türle oluşturulmuşsa, T o tür anlamına geliyor. Tabii temel türler kullanmak zorunda da değiliz. Örneğin Nokta!BigInt diye bir kullanıcı türüyle de kullanabiliriz.

D'de ne kadar önemli olduğunu daha bilmiyorum ama C++'da şablonların kullanımı hoş olmadığı için, sınıf şablonlarının yanında bir de işlev şablonu verilir.

Bunu pair ve make_pair gösterebilirim:

foo(pair<double, double>(0.25, 0.35));

yerine, tür otomatik olarak çıkarsanabilsin diye make_pair işlevi kullanılır:

foo(make_pair(0.25, 0.35));

D kodlarında da böyle bir kolaylık istersek, make_pair'in benzerini Nokta için aşağıdaki gibi yazabiliriz.

main içinde artık Nokta şablonunun türünü açıkça belirlemek zorunda kalmıyoruz. Biz double veya int kullanıyoruz, gerisi otomatik olarak hallediliyor:

class Nokta(T)
{
    T x;
    T y;
 
    this(T x, T y)
    {
        this.x = x;
        this.y = y;
    }
}
 
// Kolaylık işlevi
Nokta!T Nokta_yap(T)(T x, T y)
{
    return new Nokta!T(x, y);
}
 
void main()
{
    auto hassasNokta0 = Nokta_yap(1.1, 2.2);
 
    auto tamsayıNokta = Nokta_yap(3, 4);
}

Ama bunun D'de ne kadar yararlı olduğundan emin değilim. new anahtar sözcüğünün işlevin içinde gizli kalması iyi mi kötü mü karar veremiyorum. :)

Ali
acehreli (Moderatör) #20
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Söylemeyi unuttum: Eğer sınıfın üyelerinin türünü dışarıdan almak gibi bir serbesti düşünmüyorsak, sınıf şablonundan yararlanamayız.

inout'u daha önce işlev parametresi olarak konuşmuştuk. inout'un yeni anlamını, şablon olarak da gerçekleştirebiliyoruz. Yukarıdaki Nokta_yap işlevinin dönüş değerinin türü, parametresiyle aynı olabilirdi...

inout da benzer olduğu için, ben "onun yerine şablon da kullanabiliriz" demiştim.

inout, değiştirilebilen, const, ve immutable yerine geçen bir anahtar sözcük.

Ali
canalpay (Moderatör) #21
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:
Söylemeyi unuttum: Eğer sınıfın üyelerinin türünü dışarıdan almak gibi bir serbesti düşünmüyorsak, sınıf şablonundan yararlanamayız.

 
 
Nokta!(double) noktalıvirgül=new Nokta!double(1.5,5.1)

Yazmak benim için sorun değil. Zaten ileride sınıfları bilmeyenler için dkv'nin yanında dkviş(sınıfları tanımlamak için işlevleri kullanırız ve sınıfsız olarak adam projesine dahil edebilir.) dosyası verebiliriz. Zaten sınıfları bilen benden daha iyi bileceği için bir !(double) eklemek zor değil.

inout için :


dmd 2.038i yükledim(39'u çıkmış ama benim için önemli değil. sadece yapılar ile ilgili hata giderilimi var.). Evet inout olabilir ama inout'ta dönüş değeri de  dchar[] olmalı.  Ama ben int istiyorum. O da olmuyor.


Sizce inout yapıp dchar[] değer mi döndürmeliyim. Yoksa sınıflar ile yapmaya mı çalışmalıyım. Benim istediğim iki iş var :
1. Sınıflara üye değişkenleri string tanımladım. Başka bir değerde tanımlamam tanımlatmam.
2. Dönüş değeri int olursa harikulade olur.
acehreli (Moderatör) #22
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sorunun ucunu kaçırdım... :) Amacımız neydi?

Ama öncelikle, bütün inout'ları kaldır. dchar[]'lar referans türleri oldukları için zaten anladığım kadarıyla asıl nesneleri değiştiriyorsun.

Ali
canalpay (Moderatör) #23
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ı
Amaçlarımız :
1.dchar[] const immutable ve değişken ile aynı işlevlerde kullanabilmek.(Nokta sınıfını hem int hem de double kullanır gibi.)
2. Sınıftaki string olarak tanımlanmış sabitleri (veri, veriAdı gibi sınıfın en başındaki tanımlılar.) string olarak kullanmak.(Yani sınıfın immutable char[] olarak tanımlanmış şeylerin türleri değişmeyecek. )

3. Ve mümkünse sınıftaki tanımlı işlevlerin dönüş değeri int olsun.

Ama sanırım sadece dchar[] için tanımlı olması yeterli. Şimdi inoutları kaldırdım.

İleride düşünürüz.
canalpay (Moderatör) #24
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ı
Bugün büyük bir güncelleme yapmış bulunmaktayım.

Bu güncelleme sınıfın işleyişini hiç bozmasa da bence çok önemli ve  büyük bir güncelleme.

Bunu svn'ye not düştüğüm mesaj : Açıklama satırlarının taslak hali eklendi.

Bu olayı bu kadar büyütmüş olmamın nedeni yazdığım kodlardan daha fazla açıklama satırı eklememdir. :-D
Kendime buradan bir not -> Yazdığın her işlevin açıklama satırlarınıda beraberinde yaz. ;-) Yoksa olay işkenceye dönüşüyor.


Ama ne yazık ki html çıktısı almayı başaramadım. belge.ddoc dosyası trilerinki ile aynı. Html dosyalarını oluşturmak için konsola yazdığım kod ise bu :
dmd deneme.d dkv.d   belge.ddoc -D -Ddhtml

Bunda problem yok çünkü html adlı dizin ve dizinin içinde dkv.html ile deneme.html oluşturuluyor.(İçinde açıklama satırlarında yazdığım yazılar yok.)
Ya belge.ddoc'da düzenlenecek bir şey var.
Ya da açıklama satırlarımda.
acehreli (Moderatör) #25
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Yazdığın her işlevin açıklama satırlarınıda beraberinde yaz. ;-) Yoksa olay işkenceye dönüşüyor.

Belgeleme başlıbaşına bir sorundur. Kod değiştikçe açıklamaların da değişmesini unutmamak gerekir. Hiç olmazsa belgenin kod içinde çıkartılması hata şansını da azaltıyor. Apayrı bir dosyada dursalar "gözden ırak" olurlardı. :)

Ama ne yazık ki html çıktısı almayı başaramadım.

dmd hatası mı bilmiyorum ama dkv sınıfın başına bir açıklama yerleştirince içindekiler de belirdi. Ya hata, ya da "kendisi belgelenmeyen sınıfın işlevleri de belgelenmez" gibi bir mantık vardır belki.

belge.ddoc dosyası trilerinki ile aynı.

Projeye belge.ddoc'u sen eklersin diye bıraktım. (Bu arada, ben D.ershane'de "parametre"de karar kılmış durumdayım. Türkçe'ye çok yerleşmiş olduğunu düşündüm. Tabii "değiştirge"ye ısınamamamın da katkısı var. :) )

Html dosyalarını oluşturmak için konsola yazdığım kod ise bu :
dmd deneme.d dkv.d   belge.ddoc -D -Ddhtml

Eğer istersen projeye şunu içeren bir Makefile ekle:

dkv:
    dmd deneme.d dkv.d
    dmd deneme.d dkv.d belge.ddoc -D -Ddhtml

Tabii ki o şimdilik öyle; sonra gelişir. Ben tek make diyerek oluşturabiliyorum.

Ali
canalpay (Moderatör) #26
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:
(Bu arada, ben D.ershane'de "parametre"de karar kılmış durumdayım. Türkçe'ye çok yerleşmiş olduğunu düşündüm. Tabii "değiştirge"ye ısınamamamın da katkısı var. :) )

Şuanki söyleyeceklerim parametrenin kökenini Türkçe kabul etmemem ile alası yoktur:
Evet parametre Türkçeye girmiş bir sözcük. Ve oldukça da kullanılıyor. Ama ne yazık ki kullanmayan kişilerde var. Eğer matematik ile çok alakalı değilse(en erken 2.dereceden denklemlerde parametre sözcüğü ortaya çıkıyor. Anadolu liselerin 10.sınıf konusu) ve programlama bilmiyorsa(D.ershane'nin hedefi sanırım :-) ) ne yazık ki parametre ne olduğu bilmiyor. Ve ne yazık ki anlamınıda tahmin edemiyor. Parametre => parabirimi  en fazla çıkarılacak anlam :-)   Ama değiştirge dense -tirge yapım ekini tam anlamasada en azından oraya değişken konulduğunu anlamından çıkarıyor. Bu da yeterli bence. Ve ayrıca ben Eğer terim sözcüklerin Türkçe sözcükler kullanılırsa daha kolay öğrenildiğini yazan bir yazı okumuştum. Ne kadar doğru olduğu tartışılır ? Ama parametre kullanılacak ise en azından sözcükten başka derste de anlamı verilmeli. Yoksa dersi okuyan kişi sözcüğü okumadıysa derslerden hiç bir şey anlamaz.

Projeye belge.ddoc'u sen eklersin diye bıraktım.

Daha önce açıklama satırları olmadığından şimdi ise html çıktısını doğru üretemediği için koymamıştım. Artık koyabilirim.

Eğer istersen projeye şunu içeren bir Makefile ekle:


Bunu yapacağım.
canalpay (Moderatör) #27
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ı
Makefile konusunuda dediğiniz gibi yaptım ama ./make komudunu verince dosya bulunamadı diyor ?
Ama ./Makefile  deyince buluyor. (Yani gerçekte makefile diye dosya var :-) )

Acaba nereyi atlıyorum?
acehreli (Moderatör) #28
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu konuda daha önce de karışıklık olmuştu. Eğer Windows'da isen, dmd/windows/bin'in altında da bir make var. O, Digital Mars'ınki... Belki o çalışıyordur ve emin değilim ama belki o dosya ismini şart koşuyordur. (?)

Ben klasik, özel bir şey yapmadan GNU make'i kullanıyorum.

Ali
canalpay (Moderatör) #29
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ı
Windows'u D kodu yazarken kullanmıyorum. (Hatta normalde de kullanmıyorum. :-) )

Şuan trileri'de denedim onda da sorun var. Normalde yoktu. Bugün güncelleme yapmıştım ve bilgisayarı yeniden başlatmadım. Belki yeniden başlatınca çözülür. (Windows yöntemi :-) )
canalpay (Moderatör) #30
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ı
Sorun çok basit bir şeymiş. Ben önceden ./make diye Makefile dosyasını açardım. Artık ./make deyince linux dizin yada dosya bakıyor. Şimdi make demek gerekiyor.

Her ne kadar bizimle çok ilgisi olmasa da bana çok garip geldi :-)

Artık Makefile dosyasını yazmaya başlayabilirim. Ama ondan önce Makefile ile ilgili bir kaç yazı okusam çok iyi olur :-)
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:  önceki  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-06-22, 09:31:30 (UTC -07:00)