Jump to page: 1 2 3
Thread overview
March 09, 2013

Bu sadece bir deneme ama çok pis kod yazdım...:D

Övünmek için söylemiyorum! (yoksa şöyle derdim: çok pis kod yazarım!)

Hemen aşağıdaki ilk işlev çalışsa da çok saçma sapan bir şey oldu. Mutlaka daha kolayı olmalı. Derdim sadece std.datetime (http://dlang.org/phobos/std_datetime.html#.DateTime.date) olanaklarını kullanarak ISO Calendar yapmak istedim:

import std.datetime, std.stdio,
      std.range, std.format;

  /* takvim.d (9 Mart 2012)
   * SysTime => takvimGünleri() => ubyte[]: array [ 28, 1, .. 31 ]
   * Date => ayınBiriHangiGün() => DayOfWeek: enum { sun .. mon }
   *
   */
   auto takvimGünleri(SysTime takvim) {
     ubyte[] sonuç;
     auto fark = ayınBiriHangiGün(cast(Date)takvim) - 1;
     auto ayınSonGünü = takvim.daysInMonth;
     auto ay = enumMonth(takvim.month);
          ay--;
     takvim.month(ay.e);

     auto öncekiAyınSonGünü = takvim.daysInMonth;
     auto başlangıç = cast(ubyte)(öncekiAyınSonGünü - fark);

     foreach(ubyte i; başlangıç..(++öncekiAyınSonGünü)) sonuç ~= i;
     foreach(ubyte i; 1..(++ayınSonGünü)) sonuç ~= i;

     auto pisKod = sonuç.length;
     foreach(ubyte i; 1..(8 - (pisKod%7))) sonuç ~= i;

     return sonuç;
   }

   DayOfWeek ayınBiriHangiGün(Date tarih) {
     long roll = cast(long)tarih.day;
     tarih.roll!"days"(-(--roll));
     auto günü = DateTime(tarih);
     return günü.dayOfWeek;
   }

   auto enumPrint(T)() {
       string[] result;
       for(T x = T.min; x <= T.max; x++) {
           auto value = appender!string();
           formattedWrite(value, "%s", x);
           result ~= value.data;
       }
       return result;
   }

   union enumMonth {
     Month e;
     struct {
       ubyte dizin;

       void opUnary(string işleç)() if(işleç == "++") {
         if(dizin < e.max) dizin++;
         else dizin = e.min;
       }
       void opUnary(string işleç)() if(işleç == "--") {
         if(dizin > e.min) dizin--;
         else dizin = e.max;
       }
     }

     string toString() const @property {
       return std.conv.to!string(e);
     }
   }

void main() {
 auto bugün = SysTime(DateTime(2013, 2, 1, 1, 1, 1));//Clock.currTime();
      bugün.writeln();

 writefln("%-(%s%)\n", repeat("_", 52));
 writefln("%-(%s\t%)", enumPrint!DayOfWeek);
 writefln("%-(%s%)", repeat("=", 52));

 foreach(i, gnlr; bugün.takvimGünleri) {
   auto ayraç = (i+1) % 7 ? "\t" : "\n";
   if(gnlr<10) " ".write();
   gnlr.write(ayraç);
 }
 writeln();

 enum Günler { Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar }
 writefln("%-(%s, %)", enumPrint!Günler);
} /*Çıktısı:
2013-Feb-01 01:01:01
____________________________________________________

sun     mon     tue     wed     thu     fri     sat
====================================================
27      28      29      30      31       1       2
3       4       5       6       7       8       9
10      11      12      13      14      15      16
17      18      19      20      21      22      23
24      25      26      27      28       1       2

Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar
*/

Gerçi modül içinde isoWeek() isminde bir işlev var ama işime yarar mı bilmiyorum...
Alıntı:

>

The ISO 8601 week of the year that this SysTime is in.

Neyse önemli olan basit bir örnek teşkil etmesi. Yani bunun bir de Türkçesini hazırlayıp iki farklı DLL halinde RhS'ye veri veren bir şey yapabilir miyiz diye deneyeceğim. Bu konuyu da şurada aralamıştık: http://ddili.org/forum/thread/1130

Sevgiler, saygılar...

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

March 09, 2013

İlk değerlendirme benden:

Kendi kendime, kendin pişir kendin ye...:)

Hatta boşverin bu kodu değerlendirmeyin. Gerçekten saçma sapan, alelacele yazılmış bir şey. Meğer o her yerde gördüğümüz ve alışık olduğumuz biçimde (-bknz. Vikipedia ISO week date (http://en.wikipedia.org/wiki/ISO_week_date) maddesi) takvimi ekrana yazmak ne zor bir şeymiş.

Gerçi basit matematiksel işlemler ile sayıları yazdırmak belki daha kolay olurdu ama açıkcası biraz saç baş yoldurdu... :nuts:

:-D :-D :-D :-D

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

March 09, 2013

Kusura bakmayın hocam pek giremiyorum bu aralar :) Proje raporunu düzenliyorum. Sunuma hazırlanıyorum :) Ama sanırım şu flowchart olayını biraz çözdüm :)

Kodları çok detaylıca incelemedim ama güzel görünüyor. Zaten zamanla düzenli bir hale gelir kimse bu kütüphaneleri tek seferde yazmadı :)

Kodlarda bence atladığımız bir şey var. O da tür. Bu yazılan plug-in rhs ile ilgili bir kütüphane çağırması lazım. O kütüphane de şunlar olabilir.

RhString, RhArray, RhClass gibi. Yani plug-in ile RhS nin veri türleri konusunda ortak konuşması lazım :)

Ben de zamanla ilgili RhS de ufak bir sınıf yazdım.

http://rhodeus.org/downloads/RhodeusScript_1.0.1.0b_win32.zip burada datettime.rhs diye geçiyor. Bu zaman işlemlerinde çok bir bilgim yok ama ufak birşey yazdım :)

Zekeriya

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

March 09, 2013

Alıntı:

>

Övünmek için söylemiyorum! (yoksa şöyle derdim: çok pis kod yazarım!)

Estağfurullah hocam olur mu öyle şey :)

Alıntı:

>

Hatta boşverin bu kodu değerlendirmeyin. Gerçekten saçma sapan, alelacele yazılmış bir şey. Meğer o her yerde gördüğümüz ve alışık olduğumuz biçimde (-bknz. Vikipedia ISO week date maddesi) takvimi ekrana yazmak ne zor bir şeymiş.

Bence bu konuyu dert etmeye gerek yok. Biraz siz yaparsınız biraz ben yaparım biraz Ali hocam yardım eder :) Ortaya güzel bir şey çıkar :)

Zekeriya

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

March 10, 2013

DLL konusunu düşünüyorum...

Slot mantığında bir şey yapmalıyız sanki. Yani derlenmiş bir çekirdeğe tanımlanması gereken null slot'lar olacak. Bunların her birine bir kütüphane yerleştiriceğiz. Onların olmaması yazılımı etkilemeyecek; diğer taraftan varlığı, çağrılmaları için tekrar çekirdeğin derlenmesi gerekmeyecek.

Hepimiz düşünelim, olur gibi ve sonra deneyelim...:)

Bu arada takvim olayını JS'de bir varyasyonuna bakayım dedim de sandığımdan daha karmaşık yapmışlar:

http://tuxgraphics.org/toolbox/cal_year.html

Render kısmı zaten kopmuş, bir sürü if()'ler ile dolu. Ama hesap kısmında Rick McCarty'nin algoritmasından faydalanmış. Belgesinde sözde kod olarak çok güzel ifade etmiş. Kolaylıkla D'ye uyarlanabilir ama std.datetime varken ne gerek var buna!

'/**

  • Author of getWeekNumber function: Thomas Rabaix
  • Small corrections by Guido Socher
  • return the Week Number of a gregorian date using the ISO 8601 format
  • Algorithm from http://personal.ecu.edu/mccartyr/ISOwdALG.txt , Rick McCarty
  • ISO 8601 specifies that Week 01 of the year is the week containing
  • the first Thursday; Monday is Weekday 1, Sunday is Weekday 7;
    */'

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

March 12, 2013

Alıntı:

>

foreach(ubyte i; 1..(8 - (pisKod%7))) sonuç ~= i;

İlahi Salih :-)

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

March 12, 2013

:D

Geçen akşam bir kaç deneme yaptım, olmuyor...:(

Siz, kod koşarken DLL'nin çağrıldığı satıra gelmeseniz bile onun aynı dizin içinde varlığına ihtiyaç duyuyor. Bu olmasaydı bir şeyler yapabilirdik... :rolleyes:

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

March 12, 2013

Salih hocam sanırım runtime işlev çağırma olayını yapmaya çok yaklaştım.

Eğer yapabilirsem paylaşırım :)

Zekeriya

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

March 12, 2013

Salih hocam rica etsem D dili ile bir dll hazırlayabilir misiniz? Ben hazırlamasını bilmiyorum da :blush:

Zekeriya

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

March 12, 2013

Hocam şöyle birşey yaptım ama

import core.runtime;
import std.stdio;
import core.memory;
import core.sys.windows.windows;
extern (Windows)
int function(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) MessageBoxA;
/* Runtime Dll Library */
class RDL{
	void call(){
		HMODULE h;
		FARPROC fp;
		h = cast(HMODULE) Runtime.loadLibrary("user32.DLL");
		if (h is null){
			printf("error loading user32.dll\n");
			return;
		}
		fp = GetProcAddress(h, "MessageBoxA");
		if (fp is null){
			printf("error loading symbol MessageBoxA()\n");
			return;
		}
		MessageBoxA = cast(typeof(MessageBoxA)) fp;
		MessageBoxA(null, cast(char *) "a", "Error", MB_OK | MB_ICONEXCLAMATION);

		if (!Runtime.unloadLibrary(h))
		{   printf("error freeing user32.dll\n");
			return;
		}
	}
}


int main(){
	auto x = new RDL();
	x.call();
   return 0;
}

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

« First   ‹ Prev
1 2 3