C#'ta bir program yazarken bazen farkli bir calistirilabilir (exe) dosyayi calistirmak gerekebilir. Bu noktada ana sorun, bir programin icine farkli bir dosyayi nasil gomup, onu nasil geri cikartacagimizdir. Hadi yapalim!
Yapacagimiz islem, dosyayi bir temp dosyaya kaydedip, onu calistirmak...
Oncelikle calistirmak istedigimiz dosyayi, projemizin icine gonderiyoruz ve sag tiklayip Properties barini acip Build Action ozelligini Embeded Action olarak ayarliyoruz ki programimizi derledigimizde dosyamiz da exemizin icine gomulmus olsun.
Oncelikle gecici dosyalar olusturmak icin buldugum bir sinif var. Onu programize dahil edelim:
Simdi de programi calistirmak istedigimiz yerdeasagidaki kodu yaziyoruz:
Bu kadar, tabii ihtiyaciniza gore sekillendirmek size kalmis...
Saturday, March 15, 2014
Monday, March 10, 2014
Mozilla Addon SDK'da console.log() Mesajlarini Gorebilmek
Hep REGEDIT tarzi kayit defterlerinde mevcut olmayan, ancak sonradan birilerinin eklemesine izin verebilen sistemlere "gicik" olmusumdur. Yine bu tarz bir seyle karsilastim... *
Sorun, Addon SDK'da main.js'de console.log("log mesaji icerigi"); yazdiginizda bunu varsayilan olarak Browser Console'da goremezsiniz. Sistem elestirisini birakip hemen cozumu veriyorum:
Yeni bir sekme acip adres cubuguna about:config yazip, ardindan cikan uyariyi da kabul edip Firefox'un REGEDIT'ine ulasmis oluyoruz. Burada sag tiklayip, Yeni'yi ardindan da Dizi'yi seciyoruz. Gelen ekranda prefence name olarak extensions.sdk.console.logLevel giriyoruz. Bunun degerini de all yapiyoruz.
Artik console.log() mesajlarini Browser Console'da gorebilirsiniz.
* Guncelleme Biraz daha arastirmadan sonra yukaridaki ilk paragraftaki sitemlerimde haksiz oldugum sonucuna vardim. console referansinda yukaridaki secenegin varsayilan olarak tanimli gelmeyisinin sebebi olarak, eklentiye ozel tanimlama yapabilmemize olanak saglamak amacli oldugu sonucu cikarilabiliyor. :)
Sorun, Addon SDK'da main.js'de console.log("log mesaji icerigi"); yazdiginizda bunu varsayilan olarak Browser Console'da goremezsiniz. Sistem elestirisini birakip hemen cozumu veriyorum:
Yeni bir sekme acip adres cubuguna about:config yazip, ardindan cikan uyariyi da kabul edip Firefox'un REGEDIT'ine ulasmis oluyoruz. Burada sag tiklayip, Yeni'yi ardindan da Dizi'yi seciyoruz. Gelen ekranda prefence name olarak extensions.sdk.console.logLevel giriyoruz. Bunun degerini de all yapiyoruz.
Artik console.log() mesajlarini Browser Console'da gorebilirsiniz.
* Guncelleme Biraz daha arastirmadan sonra yukaridaki ilk paragraftaki sitemlerimde haksiz oldugum sonucuna vardim. console referansinda yukaridaki secenegin varsayilan olarak tanimli gelmeyisinin sebebi olarak, eklentiye ozel tanimlama yapabilmemize olanak saglamak amacli oldugu sonucu cikarilabiliyor. :)
Tuesday, February 25, 2014
.Net2.0 Uygulamalarinin .Net4.0'da Calismamasi
Merhabalar,
Oncelikle sizden cok kendimin saskinlikler icinde oldugunu belirtmeliyim. .Net teknolojilerine her daim karsit birisi oldugum biline dursun, bu konuda bir yazi yazma geregi hissedecegimi dahi tahmin etmezdim. Insanin basina her sey gelebiliyor...
Bir proje icin ufak bir "calistirilabilir uygulama"ya ihtiyac oldu. Mecburen Vusial Studio'yu kurmak zorunda kaldim. :) Uygulamada cok fazla islem olmadigindan dolayi, daha dusuk gereksinimleri olmasi amaciyla .Net2.0 kullanarak yazdim. Ancak is testlere geldiginde .Net4.0 kurulu bilgisayarlarda "Unable to find a version of the runtime to run this application." seklinde bir hata aldim. Biraz arastirmalar sonucunda .Net4.0'in geriye yonelik destek vermedigini ogrendim. (Hayir hayir, elestiri yapmayacagim!)
Cozum olarak ise App.config dosyasi olusturup, icerisine bunun .Net4.0 ile uyumlu oldugunu belirtmemiz gerekliymis. App.config dosyasinin icerigi soyle:
Bunu yaptiginizda sorunun ortadan kalkacagini umuyorum.
---
Simdir bir nokta daha var ki eger siz de "building" isleminden sonra ekstra bir dosya olmasindan sikayetteyseniz, -cok basit bir cozum olarak- WinRAR'in SFX ozelligini kullanarak tum dosyalari tek cati altinda toplayip acildiktan sonra programinizin acilmasini saglayabilirsiniz. Benim isimi gordu. :)
Oncelikle sizden cok kendimin saskinlikler icinde oldugunu belirtmeliyim. .Net teknolojilerine her daim karsit birisi oldugum biline dursun, bu konuda bir yazi yazma geregi hissedecegimi dahi tahmin etmezdim. Insanin basina her sey gelebiliyor...
Bir proje icin ufak bir "calistirilabilir uygulama"ya ihtiyac oldu. Mecburen Vusial Studio'yu kurmak zorunda kaldim. :) Uygulamada cok fazla islem olmadigindan dolayi, daha dusuk gereksinimleri olmasi amaciyla .Net2.0 kullanarak yazdim. Ancak is testlere geldiginde .Net4.0 kurulu bilgisayarlarda "Unable to find a version of the runtime to run this application." seklinde bir hata aldim. Biraz arastirmalar sonucunda .Net4.0'in geriye yonelik destek vermedigini ogrendim. (Hayir hayir, elestiri yapmayacagim!)
Cozum olarak ise App.config dosyasi olusturup, icerisine bunun .Net4.0 ile uyumlu oldugunu belirtmemiz gerekliymis. App.config dosyasinin icerigi soyle:
Bunu yaptiginizda sorunun ortadan kalkacagini umuyorum.
---
Simdir bir nokta daha var ki eger siz de "building" isleminden sonra ekstra bir dosya olmasindan sikayetteyseniz, -cok basit bir cozum olarak- WinRAR'in SFX ozelligini kullanarak tum dosyalari tek cati altinda toplayip acildiktan sonra programinizin acilmasini saglayabilirsiniz. Benim isimi gordu. :)
Tuesday, February 4, 2014
[PHP] Tek Kullanimlik Sinif Yapmak
Merhabalar,
Facebook'taki PHP grubunda birisi boyle bir istekde bulunmus. Siniftan sadece tek bir "instance" uretmek, daha sonra istenildiginde ise bir Exception vermesi isteniyordu.
PHP5.4'un nimaetlerinden traitler yardimiyla bunu hazirladim. Guzel bir ornek olacagini dusunuyorum.
Trait kullanilarak hazirlanan sinif ilk getInstance() metodu kullanildiginda sinifin bir ornegini gonderecek, bir dahaki cagirildiginda ise DisposableClassException gonderecektir. Bunu yakalamak da size kalmis. :)
Facebook'taki PHP grubunda birisi boyle bir istekde bulunmus. Siniftan sadece tek bir "instance" uretmek, daha sonra istenildiginde ise bir Exception vermesi isteniyordu.
PHP5.4'un nimaetlerinden traitler yardimiyla bunu hazirladim. Guzel bir ornek olacagini dusunuyorum.
Trait kullanilarak hazirlanan sinif ilk getInstance() metodu kullanildiginda sinifin bir ornegini gonderecek, bir dahaki cagirildiginda ise DisposableClassException gonderecektir. Bunu yakalamak da size kalmis. :)
Friday, December 27, 2013
[PHP] DOMDocument Sınıfının Desteklenmeyen Etiketlerde Hata Vermesinin Engellenmesi
Başlık pek bi' uzun oldu. Sorun ve çözümü pek kolay hâlbu ki.
DOMDocument sınıfını kullanırken veya kullanan bir dependency ile çalışırken uygun olmayan etiket hatası almanız gayet mümkün. Hele de şu vakitlerde Facebook gibi sosyal ağların semantik algılama için web sitelerine eklenmesini istediği W3 standartları dışında olan etiketlerden dolayı.
QueryPath kullanırken ben de aşağıdaki hatayı aldım. Ufak bir araştırma ile DOMDocument'in hata yakalama özelliğini pasif ederek uyarı vermemesni sağladım. Hatalardan kaçtığımdan değil; ancak bu sorunu aşmanın hatayı gözardı etmekten başka çaresi yok.
DOMDocument sınıfını kullanırken veya kullanan bir dependency ile çalışırken uygun olmayan etiket hatası almanız gayet mümkün. Hele de şu vakitlerde Facebook gibi sosyal ağların semantik algılama için web sitelerine eklenmesini istediği W3 standartları dışında olan etiketlerden dolayı.
QueryPath kullanırken ben de aşağıdaki hatayı aldım. Ufak bir araştırma ile DOMDocument'in hata yakalama özelliğini pasif ederek uyarı vermemesni sağladım. Hatalardan kaçtığımdan değil; ancak bu sorunu aşmanın hatayı gözardı etmekten başka çaresi yok.
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag fb:like invalid in Entity, line: 135 in /.../querypath/src/QueryPath/DOMQuery.php on line 3643Çözümü şu şekilde yapabilirsiniz:
Thursday, December 19, 2013
[Laravel] Denetim (Validation) Sınıfını AJAX ile Kullanmak
Server-side denetim işlemlerinin geçmişte kaldığını (kalması gerektiğini!) düşünüyorum. Daha iyi bir kullanıcı etkileşimi için de client-side yani sayfanın yenilenmeden onaylanması gerektiğini de...
Vereceğim örneği hazırlığında bulunduğum basit bir destek sistemi üzerinden vereceğim. Böylelikle daha gerçek hayattan bir uygulama yapmış olacağız.
Laravel Artisan CLI'de php artisan controller:make TicketsController komutunu çalıştırarak bir resource controller oluşturuyoruz. işlerimiz bunun üzerinden yürüyecek.
Şimdi de Ticket ve TicketMessage adlarında iki adet birbirlerine one to many ilişkisiyle bağlı model oluşturacağız. Bunlar ./app/models klasöründe bulunmalı. Bu arada tablo yapılarını vermiyorum. Zaten gerekli yapıyı siz tahmin ediyorsunuz. ;P
Modellerimiz de hazır olduğuna göre artık podyuma çıkılabilir! (Pek yersiz bir mizah oldu bu, kabul.) ./controllers/TicketController.php'yi açıyoruz. Oradaki store metodu dışındakiler şimdilik bizi ilgilendirmiyor. store metodunda create metodunda verileri denetleyip, duruma göre AJAX ile cevap vereceğiz duruma göre veri kaydedip index metoduna göndereceğiz sayfayı. store metodununun içeriği şöyle:
Şimdi de AJAX iletişimini sağlayan JavaScript kodlarımızı verelim:
Bunun haricinde view'ları vermiyorum. Verilmek istenen mesaj ile alakalı olmadığından dolayı. view'lar tasarrımınıza göre özel olarak hazırlanmalıdır.
Yanlız bu durumda bir sorun oluşmakta. Eğer sadece client-side denetim yaparsak yeterli bilgiye sahip kullanıcı bu denetimleri aşarak karşılaşmak istemediğimiz durumlar altına bizi sokabilir. Öyleyse klasik yoldan denetim yapıp bunu etkili bir biçimde kullanıcıya göstereceğiz, yani AJAX ile...
Vereceğim örneği hazırlığında bulunduğum basit bir destek sistemi üzerinden vereceğim. Böylelikle daha gerçek hayattan bir uygulama yapmış olacağız.
Laravel Artisan CLI'de php artisan controller:make TicketsController komutunu çalıştırarak bir resource controller oluşturuyoruz. işlerimiz bunun üzerinden yürüyecek.
Şimdi de Ticket ve TicketMessage adlarında iki adet birbirlerine one to many ilişkisiyle bağlı model oluşturacağız. Bunlar ./app/models klasöründe bulunmalı. Bu arada tablo yapılarını vermiyorum. Zaten gerekli yapıyı siz tahmin ediyorsunuz. ;P
Modellerimiz de hazır olduğuna göre artık podyuma çıkılabilir! (Pek yersiz bir mizah oldu bu, kabul.) ./controllers/TicketController.php'yi açıyoruz. Oradaki store metodu dışındakiler şimdilik bizi ilgilendirmiyor. store metodunda create metodunda verileri denetleyip, duruma göre AJAX ile cevap vereceğiz duruma göre veri kaydedip index metoduna göndereceğiz sayfayı. store metodununun içeriği şöyle:
Şimdi de AJAX iletişimini sağlayan JavaScript kodlarımızı verelim:
Bunun haricinde view'ları vermiyorum. Verilmek istenen mesaj ile alakalı olmadığından dolayı. view'lar tasarrımınıza göre özel olarak hazırlanmalıdır.
Kaynaklar
Tuesday, December 10, 2013
[Laravel] Validatörde reCAPTCHA Doğrulaması
Biraz uzun bir başlık oldu. Umarım bu uzun başlığın hakkını verebiliriz:
Öncelikle doğrulaması yapacağımız API'yle iletişim için ben cURL-Easy adında bir wrapper kullandım. --Tavsiye ederim.-- Laravel'e eklemek için aşağıdaki packeti composer.json dosyanızda tanımlayıp "composer update" komutunu CLI'dan çalıştırın:
./app/filters.php dosyasında uygulamanın başlatıldığı zamanı temsil eden App:before filtresinde Validator'ü genişleterek "recaptcha" adında bir rulea sahip oluyoruz.
Bu işlemden sonra ./app/en/validation.php'de uygun bir yerde hata mesajının tanımlanması gerekli:
Artık reCAPTCHA doğrulamalarını "recaptcha" adındaki ruleınızla kolayca yapabilirsiniz.
Öncelikle doğrulaması yapacağımız API'yle iletişim için ben cURL-Easy adında bir wrapper kullandım. --Tavsiye ederim.-- Laravel'e eklemek için aşağıdaki packeti composer.json dosyanızda tanımlayıp "composer update" komutunu CLI'dan çalıştırın:
./app/filters.php dosyasında uygulamanın başlatıldığı zamanı temsil eden App:before filtresinde Validator'ü genişleterek "recaptcha" adında bir rulea sahip oluyoruz.
Bu işlemden sonra ./app/en/validation.php'de uygun bir yerde hata mesajının tanımlanması gerekli:
Artık reCAPTCHA doğrulamalarını "recaptcha" adındaki ruleınızla kolayca yapabilirsiniz.
Labels:
laravel,
laravel recaptcha,
laravel validation
Subscribe to:
Posts (Atom)