December 24, 2016

Harika! :)

Ali

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

December 25, 2016

Alıntı (erdem:1482601592):

>

Bu arada vibe.d ile yazılmış bir günlük dikkatimi çekti.

https://github.com/rejectedsoftware/vibelog

Güzel işler yapıyorsun Erdem. Bende bir süre önce kendi günlük sitemi yeniden kurmaya karar verdim ve bunun için vibelog kullanıyorum. Şimdilik yolun başındayım adres ise şöyle http://www.zafer.in

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

December 25, 2016

Çok güzel.

Peki yayınlamak için sanal sunucu mu kiralamak gerekiyor.

Benim en merak ettiğim konu DIET şablonları yerine

doctype html
html(lang="en")
 head
   // D code is evaluated
   title #{pageTitle}
   // attributes
   script(type='text/javascript')
     if (foo) bar(1 + 5)
   // ID = body-id
   // style = the-style
   body#body-id.the-style
     h1 DIET template

normal html şablonları kullanılabiliyor mu. Ya da bu şablonun üzerine html kodu eklenebiliyor mu.

Eğer öyle bir olanak olmuş olsa çok ilginç uygulamalara kapı açabilir :-)

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

December 25, 2016

Alıntı (zafer):

>

Şimdilik yolun başındayım adres ise şöyle http://www.zafer.in

Sanırım şimdilik bir hata var. Yorum yazmaya çalışınca Error 502 bad gateway hatası verdi.

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

December 28, 2016

Alıntı (erdem:1482737962):

>

Yorum yazmaya çalışınca Error 502 bad gateway hatası verdi.

Eyvallah Erdem'im senin yüreğine sağlık :) Vibelog projesine katkı yapmak isterdim ama iletişim konusunda halen sınırlamalar var. Dolayısıyla bende projeyi fork edip kendi yolumda yürümeye başladım. Örneğin hash işlemi ile ilgi bazı sorunları vardı bunun için bende dauth paketini ekleyerek hash işlemlerini yeniden düzenledim. Ayrıca yaml konusunda derleme hataları vardı. Benim ihtiyacım olmadğı için yaml paketini kaldırdım. Ancak yoğunluktan pek bakamıyorum. İlk fırsatta yorum bölümündeki hatayı düzelteyim. Teşekkürler.

Sunucu kiralama konusunda haklısın neticede bir web uygulaması olduğu için bir şekilde onu insanlara sunmak gerekiyor. Vibe.d çalıştırılabir bir dosya oluşturduğu için mevcut paylaşımlı hostinglerde kullanma şansın pek yok. Bu yüzden sana bir VPS gerekecek yada benim gibi elinin altında makina varsa bunu bir sunucu haline getirip onun üzerinden yayın yapabilirsin. Örneğin benim sitem http://www.zafer.in kendi oluşturduğum bir linux sunucu üzerinden yayın yapıyor.

HTML konusunu ilk başlarda bende istiyordum ancak diet ile çalışmaya başladıktan sonra bence hiç gerek yok. Ancak bildiğim kadarıyla render mekanizması ile oynayarak kendine uygun bir şeyler yapabilirsin. Bu konu hakkında vibe.d forumlarında yazılar görmüştüm ama ben hiç ilgilenmedim.

Bence sistemin devam ettiği yoldan gitmek ileride gelecek yeni sürümlerle uyum içinde en iyisi eğer bu uymuyorsa belki başka bir ortam düşünülebilir.

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

December 28, 2016

Sunucu dinamik ip kullanabiliyor mu. Cloudflare'i kullanmanın ne faydası oluyor. Anladığım kadarıyla vibe.d uygulamasını çalıştırınca bir sunucu gibi çalışıyor.

Bu arada ben ftp yükleme kısmında takıldım.

import std.stdio;
import requests;

void main() {
   auto rq = Request();
   rq.verbosity = 3;
   auto f = File("test.txt", "rb");
   auto rs = rq.post("ftp://login:password@example.com/test.txt", f.byChunk(1024));
   writeln(rs.code);
   rs = rq.get("ftp://login:password@example.com/test.txt");
   writeln(rs.code);
}

Requests kütüphanesinde yükleme ile ilgili bir örnek var. Bu kısımda kullanıcı@kullanıcı.com diye bir kullanıcı adı girilirse hata veriyor. Bunun için bir hata kaydı (https://github.com/ikod/dlang-requests/issues/33) oluşturdum.

Farklı bir çözüm olarak arsd.curl'da olduğu gibi ftp kısmına ufak bir ekleme yapmak gerekebilir. Baktım onlar da (https://github.com/adamdruppe/arsd/blob/master/curl.d) neredeyse basitçe c örneğini kullanmışlar.

Ben de ftp için şu örneği buldum.

#include <stdio.h>
#include <string.h>

#include <curl/curl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
#endif

/* <DESC>
* Performs an FTP upload and renames the file just after a successful
* transfer.
* </DESC>
*/

#define LOCAL_FILE      "deneme.txt"
#define UPLOAD_FILE_AS  "yuklerken.txt"
#define REMOTE_URL      "ftp://erdem.tk/"  UPLOAD_FILE_AS
#define RENAME_FILE_TO  "ismi-degistirildi.txt"

/* NOTE: if you want this example to work on Windows with libcurl as a
  DLL, you MUST also provide a read callback with CURLOPT_READFUNCTION.
  Failing to do so will give you a crash since a DLL may not use the
  variable's memory when passed in to it from an app like this. */
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
 curl_off_t nread;
 /* in real-world cases, this would probably get this data differently
    as this fread() stuff is exactly what the library already would do
    by default internally */
 size_t retcode = fread(ptr, size, nmemb, stream);

 nread = (curl_off_t)retcode;

 fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
         " bytes from file\n", nread);
 return retcode;
}

int main(void)
{
 CURL *curl;
 CURLcode res;
 FILE *hd_src;
 struct stat file_info;
 curl_off_t fsize;

 struct curl_slist *headerlist=NULL;
 static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
 static const char buf_2 [] = "RNTO " RENAME_FILE_TO;

 /* get the file size of the local file */
 if(stat(LOCAL_FILE, &file_info)) {
   printf("Couldnt open '%s': %s\n", LOCAL_FILE, strerror(errno));
   return 1;
 }
 fsize = (curl_off_t)file_info.st_size;

 printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);

 /* get a FILE * of the same file */
 hd_src = fopen(LOCAL_FILE, "rb");

 /* In windows, this will init the winsock stuff */
 curl_global_init(CURL_GLOBAL_ALL);

 /* get a curl handle */
 curl = curl_easy_init();
 if(curl) {
   /* build a list of commands to pass to libcurl */
   headerlist = curl_slist_append(headerlist, buf_1);
   headerlist = curl_slist_append(headerlist, buf_2);

   /* we want to use our own read function */
   curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);

   /* enable uploading */
   curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

   /* specify target */
   curl_easy_setopt(curl, CURLOPT_URL, REMOTE_URL);

   curl_easy_setopt(curl, CURLOPT_USERNAME, "kullanici@erdem.tk");
 //PROBLEM
   curl_easy_setopt(curl, CURLOPT_PASSWORD, "sifre");

   printf("%s",headerlist);


   /* pass in that last of FTP commands to run after the transfer */
   curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);

   /* now specify which file to upload */
   curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);

   /* Set the size of the file to upload (optional).  If you give a *_LARGE
      option you MUST make sure that the type of the passed-in argument is a
      curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must
      make sure that to pass in a type 'long' argument. */
   curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                    (curl_off_t)fsize);

   /* Now run off and do what you've been told! */
   res = curl_easy_perform(curl);
   /* Check for errors */
   if(res != CURLE_OK)
     fprintf(stderr, "curl_easy_perform() failed: %s\n",
             curl_easy_strerror(res));

   /* clean up the FTP commands list */
   curl_slist_free_all(headerlist);

   /* always cleanup */
   curl_easy_cleanup(curl);
 }
 fclose(hd_src); /* close the local file */

 curl_global_cleanup();
 return 0;
}

Ama tabi ftp dizinlerini ekleyen kodu da eklemek gerekecek. Burada windows kısmında 'CURLOPT_READFUNCTION' isminde bir işlev tanımlamak gerektiğinden bahsediyor. Ama bu nasıl bir işlev olacak anlamadım.

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

December 28, 2016

Alıntı (erdem):

>

Farklı bir çözüm olarak arsd.curl'da olduğu gibi ftp kısmına ufak bir ekleme yapmak gerekebilir.

[...]

Ben de ftp için şu örneği buldum.

[...]

Sanırım buna da gerek kalmadı. Tam ben de C kitabını gözden geçirip ufak C programları yazmaya başlamıştım ki; ben yazana kadar düzeltmişler ;-)

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

December 28, 2016

Alıntı (erdem):

>

Sunucu dinamik ip kullanabiliyor mu. Cloudflare'i kullanmanın ne faydası oluyor. Anladığım kadarıyla vibe.d uygulamasını çalıştırınca bir sunucu gibi çalışıyor.

Biz işyerinde sabit (static) IP adresleri kullanıyoruz. Bu yüzden IP sorunu olmuyor. Ben Cloudflare'i DNS (https://tr.wikipedia.org/wiki/DNS) hizmeti için kullanıyorum. Böylece kullandığım bilgisayarı Alan adı sunucusu (Domain Name Server) olarak yapılandırmak zorunda kalmıyorum. Ayrıca Cloudflare'in https gibi ek hizmetleride mevcut.

Bildiğim kadarıyla web temelde bir sunucu-istemci modelinde kurulmuş. Yani bir web sayfasını tarayıcıda göstermek istersen onu sunan bir sunucudan talepte bulunmalısın. Dolayısıyla Vibe.d gibi bir framework kendi içinde yerleşik bir web sunucusuyla geliyor. Ancak bilgidiğim kadarıyla çok gelişmiş bir sunucu değil. Ben ana sunucu olara Nginx kullanıyorum.

Bu arada Requests kütüphanesi güzelmiş, bende işyerindeki zip formatındaki e-fatura dosyalarını yedekleme cihazına aktaracak bir uygulama geliştirmeye çalışıyorum. Yedekleme cihazı ftp bağlantılarını kabul ediyor. Sanırım bu kütüphane ile bu işi kotarabilirim. Sen test ettim mi, sorunsuz çalışıyor mu?

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

December 29, 2016

Açıklamalar için teşekkürler.

Evet ben uzaktaki html dosyalarını indirmek ve sunucuya ftp dosyalarını yüklemek için requests kütüphanesini kullanıyorum.

Örneğin ftp hatası düzeldikten sonra bir dizine ftp yükleyip almak için şu kod kullanılıyor.

   auto rq = Request();
   rq.verbosity = 3;
   rq.authenticator = new BasicAuthentication("kullanici@kullanici.com", "sifre");
   auto f = File("deneme.txt", "rb");
   auto rs = rq.post("ftp://erdem.tk/deneme/çorba.txt", f.byChunk(1024));
   writeln(rs.code);
   rs = rq.get("ftp://erdem.tk/çorba.txt");
   writeln(rs.code);

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

1 2 3
Next ›   Last »