Jump to page: 1 2
Thread overview
D ile görsel programlama
Jan 03, 2017
erdem
Jan 16, 2017
zafer
Jan 16, 2017
erdem
Jan 21, 2017
erdem
Jan 23, 2017
zafer
Jan 23, 2017
erdem
Jan 23, 2017
zafer
Jan 23, 2017
erdem
Feb 07, 2017
erdem
Feb 08, 2017
erdem
Feb 08, 2017
erdem
Feb 08, 2017
erdem
Feb 12, 2017
erdem
Feb 12, 2017
erdem
January 04, 2017

D ile görsel programlamaya başlangıç için ufak bir ders hazırladım.

D ile pencereli uygulama geliştirme (http://www.erdem.tk/gtkd)

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

January 16, 2017

Eline sağlık Erdem çok güzel olmuş. Kaynak kodlar bağlantısı çalışmıyor galiba bu bağlantıya tıkladığım zaman hiç bir sayfa açılmadı.

Diğer bir konu örnek kodlarda keşke orjinal kodları kullansaydın. "pencere" modülü orjinal kodları gizlemiş, öğrenme aşamasında bence bu çok uygun değil. Yinede güzel bir başlanğıç :)

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

January 16, 2017

Teşekkür ederim :)

Kaynak kod kısmında sadece kaynak kodun nasıl çalıştığını anlatmaya çalıştım. Kaynak kodu nasıl olsa github'tan indirmişlerdir (https://github.com/erdemoncel/gtkd/blob/master/merhaba.d) diye koymadım. Yoksa koysa mıydım acaba.

Aslında Zafer senin söylediğin doğru. Bu haliyle kodların yarısı bir yerde gibi gözüküyor.

Asıl niyetim tamamen Türkçe kodlama yapmaktı.

import std.stdio;

import Ana;
import AnaPencere;
import Düğme;
import Olay;

class Pencere: AnaPencere
{
   Düğme düğme;

   this()
   {
       super("Merhaba Dünya");
       düğme = new Düğme("Bana tıklayın");
       this.ekle(düğme);
       düğme.tıklandığında(&iletiGöster);
       tümünüGöster();
   }

   void iletiGöster(Button düğme)
   {
       writeln("Bana tıkladınız");
   }
}

void main(string[] çorbalar)
{
   Ana.ilklendir(çorbalar);
   Pencere pencere = new Pencere();
   Ana.çalıştır();
}

Böylelikle yeni başlayan arkadaşlar D'ye daha kolay geçiş yapabilirler diye düşünmüştüm.

Ama şöyle bir durum var ki kaynak kodda ufak bir değişiklik yapıldığı zaman tekrar derlenmesi gerekiyor anladığım kadarıyla. Bu da tahmini yarım saat sürüyor. Eğer böyle olursa pek mümkün görünmüyor.

Bir süredir de bu ağaç görünümü örneği üzerindeki hatayı düzelteceğim diye uğraşıyorum.

Bu şekilde bir işlevi de yeni başlayan arkadaşlar görse ne derler diye merak ediyorum :-D

süz.setVisibleFunc(cast(GtkTreeModelFilterVisibleFunc)  &ağacıSüz, cast(void *) this, null);

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

January 21, 2017

Henüz kütüphanenin Türkçeleştirdiğim kısmını yüklemedim. Ama neye benzediğini göstermek için ufak bir örnek paylaşıyorum.

import gtk.Ana;
import gtk.AnaPencere;
import gtk.Kutu;
import gtk.İlerlemeÇubuğu;
import gtk.OnayKutusu;
import gtk.BasÇekDüğme;
import glib.Zamanlama;

import std.array;

class Pencere: AnaPencere
{
   Zamanlama zamanlama;
   Kutu dikeyKutu;
   İlerlemeÇubuğu ilerlemeÇubuğu;
   OnayKutusu düğme;
   bool işlemDevamEdiyorMu;

   this()
   {
       super("İlerleme Çubuğu");
       dışBoşluğuAyarla(10);

       dikeyKutu = new Kutu(DİKEY, 6);
       add(dikeyKutu);

       ilerlemeÇubuğu = new İlerlemeÇubuğu();
       dikeyKutu.atSepete(ilerlemeÇubuğu, true, true, 0);

       düğme = new OnayKutusu("Metni göster");
       düğme.seçildiğinde(&metinSeçildi);
       dikeyKutu.atSepete(düğme, true, true, 0);

       düğme = new OnayKutusu("İşlem devam ediyor");
       düğme.seçildiğinde(&işlemDevamEdiyor);
       dikeyKutu.atSepete(düğme, true, true, 0);

       düğme = new OnayKutusu("Sağdan sola");
       düğme.seçildiğinde(&sağdanSola);
       dikeyKutu.atSepete(düğme, true, true, 0);

       zamanlama = new Zamanlama(50, &ilerle, false);
       işlemDevamEdiyorMu = false;

       tümünüGöster();
   }

   void metinSeçildi(BasÇekDüğme düğme)
   {
       auto metniGöster = düğme.seçiliOlanıÖğren();

       string metin;

       if (metniGöster)
           metin = "bir şeyler";
       else
       {
           metin = metin.init;
           assert(metin == null);

       }

       ilerlemeÇubuğu.metinBelirle(metin);
       ilerlemeÇubuğu.üzerindeMetinGöster(metniGöster);

   }

   void işlemDevamEdiyor(BasÇekDüğme düğme)
   {
       işlemDevamEdiyorMu = düğme.seçiliOlanıÖğren();

       if (işlemDevamEdiyorMu)
           ilerlemeÇubuğu.ilerle();
       else
           // İlerleme çubuğu %0'da iken bu değer 0.0, % 100 iken 1.0
           // oluyor
           ilerlemeÇubuğu.yüzdeyiBelirle(0.0);
   }

   void sağdanSola(BasÇekDüğme düğme)
   {
       auto değer = düğme.seçiliOlanıÖğren();
       // İlerleme çubuğu normalde yukarıdan aşağıya ya da soldan sağa
       // hareket ediyor. Yönü değiştirdiğimiz zaman tam ters istikamette
       // hareket ediyor.
       ilerlemeÇubuğu.yönüDeğiştir(değer);
   }

   bool ilerle()
   {
       if (işlemDevamEdiyorMu)
           ilerlemeÇubuğu.ilerle();
       else
       {
           auto yeniDeğer = ilerlemeÇubuğu.yüzdeyiÖğren() + 0.01;
           if (yeniDeğer > 1)
               yeniDeğer = 0;

           ilerlemeÇubuğu.yüzdeyiBelirle(yeniDeğer);
       }
       return true;
   }
}

void main(string[] args)
{
   Ana.ilklendir(değişkenler);
   auto pencere = new Pencere();
   Ana.çalıştır();
}

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

January 23, 2017

Erdem, senden video dersleride bekliyoruz :) Malum görsel programlama anlatıyorsan kodlarla bu iş biraz soyut kalıyor. Şöyle youtube veya vimeoda 1080p video ile kısa zamanda çok daha fazla bilgi aktarabilirsin. Bu arada sese dikkat et bu tür videolarda en önemli etken temiz ve güzel bir ses kaydı.

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

January 23, 2017

Sanırım video dersleri pek olmaz çünkü bilgisayarım biraz eski. Ekran kartının sürücüsü de *.nix altında çok iyi desteklenmiyor.

Bu arada adres biraz değişti :)

http://www.erdem.tk/gtkd/

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

January 23, 2017

Alıntı (erdem):

>

Sanırım video dersleri pek olmaz çünkü bilgisayarım biraz eski. Ekran kartının sürücüsü de *.nix altında çok iyi desteklenmiyor.

Bunlara biz Türkçe'de kısaca BAHANE diyoruz Erdem'cim. Böyle güzel bir site hazırlayan, böyle keyifli yazılar yazan benim bildiğim Erdem bunuda pekala yapabilir. Ben inanıyorum ;)

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

January 23, 2017

Geçenlerde Ali beye Emacs d modunda hizalamayla ilgili bir konu soracaktım. Dedim bir ekranı kaydedeyim. İşte sonuç bu :-D

http://www.erdem.tk/resim/resim/emacs.ogg

Kullandığım bilgisayarda dahili İntel GMA3600 ekran kartı kullanılmış. Intel (https://01.org/linuxgraphics/downloads/intel-graphics-installer-linux-1.4.0) de bu kartı Linux ortamında desteklemiyor.

Alıntı:

>

NOT SUPPORTED BY THE INSTALLER
Reproduced from the FAQ page:

Due to the complex package dependencies of the binary graphics drivers for the Intel® Graphics Media Accelerator 3600 Series used in the Intel® Atom™ Processor N2600 Series and Intel® Atom™ Processor N2800 Series, supported drivers are only available through your device manufacturer or through Linux distributions providing support for the Intel® GMA 3600.

Daha önceden şu sürücüleri (https://ef.gy/ubuntu-cedarview-drivers) kurmuştum sanırım ama o da Emacs için değişik görünüm efektleri oluşturuyordu hatırladığım kadarıyla.

Belki bu sürücüyü kurunca video kalitesi iyileşebilir. Ama diğer taraftan bu seferde bazı programlar ekran çözünürlüğünü yanlış algılıyordu hatırladığım kadarıyla. Örneğin Arduino geliştirme ortamı.

Sonra çekirdek güncellemesi sırasında uçtu mu sildim mi hatırlamıyorum.

Bir de benim günlük programımda programlamaya nispeten az vakit kalıyor sanırım.

Ama diğer taraftan fansız, sessiz çalışan minik bir bilgisayarım var. Allah'a şükür. Elhamdülillah.

Tam programcı bilgisayarı ;-)

Güzel yorumlar için teşekkürler :) Tüm bu nimetleri de Cenab-ı Allah'ın (c.c) bir lütfu olarak düşünmek gerekir.

Cenab-ı Rabbül Alemin (c.c) bizlere sayısız nimet ikram buyurmuş. Bunlardan da en büyüğü iman nimeti. Sonra Allah'u A'lem namaz ve Kur'an nimeti. Rabbimiz lütüf ve Keremiyle bizim üzerimizdeki nimeti tamamlayı nasip buyursun inşaAllah.

Bizler sıcak evlerde kalıyoruz, sıcak yemek yiyebiliyoruz. Ama üzerimizdeki bu nimetlerin de hem şükrünü ifa etmek gerekir hem de bu nimetlerin bir sorumluluğu var. Allah'u A'lem yarın bize sorulacak.

Bu nedenle ekmeğimizi imtihan gereği bu nimetlere sahip olamayan Müslüman kardeşlerimizle bölüşmek gerekir. Ülkemizde kafirin zülmünden kaçıp sığınmış Somalili, Iraklı Suriyeli kardeşlerimiz var. Bu soğukta, kışta dışarıda aç bilaç gezen garip kardeşlerimizle ekmeğimizin bir parçasını bölüşmek elimizden gelmiyorsa bir gönül almak gerekmez mi.

Yunus Emre Hazretleri (k.s) ne güzel söylemiş:
Alıntı:

>

Dürüş kazan ye yedir bir gönül ele getir
Yüz Kâbe'den yigrektir bir gönül ziyareti

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

February 08, 2017

Örneklere devam ediyorum.

Biraz kodlar zorlaşıyor mu bilmiyorum ama bir tane örnek paylaşayım dedim. Eğer kodla ilgili önerileriniz, fikirleriniz varsa paylaşabilirsiniz.

İçerisinde çeşitli yazılımların hangi yıl programladığı ve hangi programlama dilleri kullanıldığını gösteren bir kütüğümüz var. veriler.txt

Alıntı:

>

"Firefox", 2002, "C++",
"Eclipse", 2004, "Java" ,
"Pitivi", 2004, "Python",
"Netbeans", 1996, "Java",
"Chrome", 2008, "C++",
"Filezilla", 2001, "C++",
"Bazaar", 2005, "Python",
"Git", 2005, "C",
"Linux Kernel", 1991, "C",
"GCC", 1987, "C",
"Frostwire", 2004, "Java"

Bu ağaç örneği de seçilen programlama diline göre yazılımları süzüyor.

http://www.erdem.tk/resim/resim/agacprogramlamadili.png

import gtk.Main;
import gtk.MainWindow;
import gtk.Box;
import gtk.ListStore;
import gtk.TreeView;
import gtk.TreeViewColumn;
import gtk.CellRendererText;
import gtk.TreeModelFilter;
import gtk.Grid;
import gtk.Button;
import gtk.ScrolledWindow;
import gtk.TreeModel;
import gtk.TreeIter;

import gobject.Value;

import std.format: formattedRead;
import std.stdio: File, writeln;

class Pencere: MainWindow
{
   Button[] düğmeler;
   string seçiliProgramlamaDili;
   TreeModelFilter süz;

   this()
   {
       super("Ağaç örneği");
       setBorderWidth(10);
       auto ızgara = new Grid();
       ızgara.setColumnHomogeneous(true);
       ızgara.setRowHomogeneous(true);
       add(ızgara);

       auto model = new VeriModeli();

       seçiliProgramlamaDili = "Hiçbiri";

       süz = new TreeModelFilter(model, null);
       süz.setVisibleFunc(cast (GtkTreeModelFilterVisibleFunc) &dilleriSüz,
                          cast(void *)this, null);

       auto görünüm = new GörünümModeli(model);
       görünüm.setModel(süz);

       string[] programlamaDilleri = ["Java", "C++", "C", "Python", "Hiçbiri"];

       foreach (i, dil; programlamaDilleri)
       {
           düğmeler ~= new Düğme(dil);
           düğmeler[i].addOnClicked(&seçimDüğmesiTıklandı);
       }

       auto kayarPencere = new ScrolledWindow();
       kayarPencere.setVexpand(true);
       ızgara.attach(kayarPencere, 0, 0, 8, 10);
       ızgara.attachNextTo(düğmeler[0], kayarPencere, GtkPositionType.BOTTOM, 1, 1);

       foreach (i, düğme; düğmeler[1..$])
           ızgara.attachNextTo(düğme, düğmeler[i], GtkPositionType.RIGHT, 1, 1);
       kayarPencere.add(görünüm);

       showAll();
   }

   void seçimDüğmesiTıklandı(Button düğme)
   {
       seçiliProgramlamaDili = düğme.getLabel();
       if (seçiliProgramlamaDili != "Hiçbiri")
           writeln(seçiliProgramlamaDili, " dili seçildi!");
       else
           writeln("Hiç bir dil seçilmedi.");
       süz.refilter();
   }

   static extern(C) int dilleriSüz(GtkTreeModel * gtkModeli,
                                   GtkTreeIter * gtkErişici, void * veriler)
   {
       auto model = new TreeModel(gtkModeli, false);
       auto erişici = new TreeIter(gtkErişici, false);
       Pencere pencere = cast(Pencere) veriler;

       string dil = model.getValue(erişici, 2).dupString();

       if (pencere.seçiliProgramlamaDili == "Hiçbiri")
           return true;
       else
           return dil == pencere.seçiliProgramlamaDili;
   }
}

struct Yazılım
{
   string isim;
   uint yıl;
   string dil;
}

class VeriModeli: ListStore /* model */
{
   Yazılım[] yazılımlar;

   this()
   {
       yazılımOku();
       super([GType.STRING, GType.INT, GType.STRING]);

       foreach (yazılım; yazılımlar)
       {
           yazılımEkle(yazılım);
       }

   }

   void yazılımOku()
   {
       auto kütük = File("veriler.txt", "r");
       foreach (satır; kütük.byLine())
       {
           string isim, dil;
           uint yıl;
           formattedRead(satır,"\"%s\", %d, \"%s\"", &isim, &yıl, &dil);
           yazılımlar ~= Yazılım(isim, yıl, dil);
       }
   }

   void yazılımEkle(Yazılım yazılım)
   {
       auto erişici = createIter();
       setValue(erişici, 0, yazılım.isim);
       setValue(erişici, 1, yazılım.yıl);
       setValue(erişici, 2, yazılım.dil);
   }
}

class GörünümModeli: TreeView /* görünüm */
{
   this (ListStore model)
   {
       auto isimSütunu = new TreeViewColumn("İsim", new CellRendererText(), "text", 0);
       appendColumn(isimSütunu);
       auto yılSütunu = new TreeViewColumn("Yıl", new CellRendererText(), "text", 1);
       appendColumn(yılSütunu);
       auto dilSütunu = new TreeViewColumn("Dil", new CellRendererText(), "text", 2);
       appendColumn(dilSütunu);
   }
}

void main(string[] args)
{
   Main.init(args);
   auto pencere = new Pencere();
   Main.run();
}

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

February 08, 2017

Alıntı (acehreli):

>

En basiti, yazılımEkle() ve yazılımOku() this()'in içinde iç işlev olabilirler. Ama daha iyisi, this() parametre olarak Yazılım[] almalı... Böylece "veriler.txt"e bağımlı kalmamış olur.

Ali bey bu kısmı açabilirmisiniz. yazılımOku() sizce serbest işlev ya da Pencere sınıfının bir üyesi mi olmalı? O zaman MVC tasarımını bozmuş olmaz mıyız. Gerçi kütükten okuma yapma belki veri modelinin içinde olarak düşünülmeyebilir.

İç işleve bir örnek verebilir misiniz.

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

« First   ‹ Prev
1 2