Thursday, June 25, 2015

[Django] Changing field widget when when using inlines

For example, if you create a SiteOption model to extend Django's core sites framework you may want to add multiple inlines from one model (SiteOption) for grouping options, like:

General Options
Theme Options
Security Options
SEO Options

"Show me the code!"

Wednesday, June 17, 2015

[Django] Using cloud storage services as default storage backend

To use cloud storage services as default storage backend in Django – or actullay in Python, Apache's Libcloud wrapper can be a nice solution. Because it supports more than 30 providers, and has a huge community.

django-storages-redux app provides storage backends to use in Django. Good news, also supports Apache Libcloud. So you can use more than 30 cloud providers with Django. To install the app execute this:
$ pip install django-storages-redux
Also you must install Apache Libcloud:
$ pip install apache-libcloud
And enable from settings.py by adding following lines:
DEFAULT_FILE_STORAGE = 'storages.backends.apache_libcloud.LibCloudStorage'
DEFAULT_LIBCLOUD_PROVIDER = 'google_storage'
LIBCLOUD_PROVIDERS = {
 'google_storage': {
 'type': 'libcloud.storage.types.Provider.GOOGLE_STORAGE',
 'user': 'yourcloudstorageapikey:)',
 'key': 'yourcloudstorageapisecretkey:)',
 'bucket': 'default-bucket-name',
 }
}
 If you don't create bucket, you can create from shell:
$ ./manage.py shell

$ from storages.backends.apache_libcloud import LibCloudStorage
$ LibCloudStorage('google_storage').driver.create_container('default-bucket-name')

Wednesday, June 10, 2015

Detecting if an image is really an image

About Technique

HTTP protocol has really cool methods such as HEAD. HEAD method allows you to get only head data instead of head and body. Head data contains mimetype of the body, so we can rely on it to detect if it's really an image. Let's get it with JavaScript...

The Code

Sync Example


Async Example


As you can see, you can even detect huge images very quickly. ;)

Originally posted at https://coderwall.com/p/qdg71a/detecting-if-an-image-is-really-an-image

Sunday, April 19, 2015

Using Nginx on Mac OSX

To install Nginx on your Mac you can use simply brew command:
$ brew install nginx 
Default Nginx server name is localhost with 8080 port. So you can see default Nginx page by entering http://localhost:8080 address. Let's change something:

Changing default server name and port
Nginx.conf located at /usr/local/etc/nginx/nginx.conf dir. Open it with your favorite editor, to me the Vim:
$ vim /usr/local/etc/nginx/nginx.conf
 You'll see default server configuration like this:
server {    listen 8080;    server_name locahost;
    ## other things}
Change them with what you want and save the file. To reload Nginx configuration you should restart Nginx by calling these:
$ sudo nginx -s stop$ sudo nginx 
Including multi server defination from different files
Aww, cool topic. To keep different server definations in different files, you should need to this. Open nginx.conf, locate your cursor to the end of http defination block and simple paste this two lines:
$ include /usr/local/etc/nginx/conf.d/*.conf;
$ include /usr/local/etc/nginx/sites-enabled/*.conf;
Now your can create symlinks to these directories. Of course, don't forget to restart Nginx!

Saturday, February 21, 2015

[Django] Farkli App Icerisindeki Model'leri Ayni Grupta Gosterebilmek

Django admin'de birbiri ile alakali olan iki farkli app'iniz mevcutsa, bu modelleriniz asagidaki gibi gorunecektir:

[App 1]
- Model 1
- Model 2
[App 2]
- Model 3
Ancak siz bu goruntuyu istemiyor, asagidaki gibi bir goruntu istiyorsunuz:
[App 1]
- Model 1
- Model 2
- Model 3 
Hosgeldiniz! Yapilmasi gereken islem, App 2 altinda bulunan Model 3'un Meta sinifinda o modelin app'inin aslinda App 1 oldugunu soylemek. Onu da boyle yapiyoruz:



Onemli Guncelleme:
Bu degisikligin etkileri sandiginizdan daha buyuk olabilir. Bu islem tam anlami ile Django'nun app mimarisindeki app'inizin adinin degistirilmesi anlamina geliyor. Yani varsayilan olarak app'inizin adi olusturulan klasor ayni iken bunun degistirilmis olmasini sagladik. Buna ek olarak Python'un package yapisi yine klasor adi uzerinden calisacaktir.

Bu guncellemeyi yapmama neden olan case, bu app adini degistirdigim zaman bu Model 3'un Model 2'de Foreign key olarak tanimlandigi yerde hata almaya basladim. Bunun sebebi olaraki su tanimlamaydi:


Artik app adimiz 'app_1' olduguna gore buradakini de gistirmek zorundayiz. Bu durumda modelin refresh edilecegini de uzuntuyle belirtmem gerekiyor. :(

Saturday, January 3, 2015

Yazar Olma Sorunsali

Yaklasik bir bucuk sene once buyuk paylasim umutlari ile actigim bloguma ozellikle son bes aydir yazamadigimi fark ettim. Draft olarak birkac paragrafi yazilmis 18 adet yazim bulunmaktaymis. Bunlari sirasiyla tamamlayip daha fazla yazmak niyetindeyim. Yazi yazmak uretkenligimi arttirdigini hatirliyorum. Bunun ustune gidecegim. Hatta yazmanin faydalari da bir konu olarak olabilir! Takipte kalin, degerli gunluk bir tane olan ziyaretcilerim! 21 Subat '14 guncellemesi: (Yazamadi)

Thursday, July 31, 2014

[DevOps][Nginx] fastcgi_pass Problems

If you are getting error about fastcgi_pass option like this:
2014/07/31 08:08:39 [error] 3536#0: *6 connect() failed (111: Connection refused) while connecting to upstream, client: 95.95.95.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"
or this:
2014/07/31 08:25:07 [crit] 3644#0: *23 connect() to unix:/tmp/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 95.95.95.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/php5-fpm.sock:", host: "localhost"
You have probably setted wrong or passive TCP or socket address. You can learn PHP's TCP or socket addsress from /etc/php5/fpm/pool.d/www.conf file. Check lines that starts with these:
listen = 127.0.0.1:9000 ;listen = /tmp/php5-fpm.sock
Destroy ; char from starting, and have fun! Don't forget to restart your PHP or your another service -- like this $ service php5-fpm restart!

Monday, July 21, 2014

[Vagrant][Nginx][Laravel] Laravel Kurulum Sorunlari

http://laravel-recipes.com/recipes/26 http://laravel.io/forum/05-14-2014-502-bad-gateway-in-vagrant-permission-denied

Friday, July 18, 2014

[Nginx] Konfigurasyon Dosyalarini Test Etmek

Nginx eger site konfigurasyonlarinizi mazeret gostererek service nginx restart komutlariniza kayitsiz kaliyorsa, asadidaki komut ile Nginx konfigurasyon dosyanizi test edip sorunun kaynagina ulasabilirsiniz.
/usr/nginx/sbin/nginx -t -c /etc/nginx/DOSYA.conf

Wednesday, May 14, 2014

[Git] GitHub Sifresini Kaydetmek

Baslikta her ne kadar GitHub gecse de bu sadece GitHub icin gecerli degil. Bircok Git clientinde durum aynidir. pull, push gibi git sunucunuza baglanmaniz gerektigi islemlerde sizden giris bilgileri istenecektir. Ancak  surekli bilgileri girmek sikici bir hale gelebilir. Tabii bunun adi asla usengeclik olamaz ;)

Onunuzde iki secenek mevcut; gecici olarak cachelemek, kalici olarak saklamak.

Gecici Olarak Cachelemek

$ git config --global credential.helper 'cache --timeout=300'
 Burada 300 yerine saniye bazinda cache suresini girebilirsiniz.

Kalici Olarak Saklamak

$ git config --global credential.helper store
Her iki secenek icin de Git surumunuzun 1.7.9 olmasi gerekli.

Kaynaklar
http://git-scm.com/docs/git-credential-cache
http://wiki.epfl.ch/help-git-en/can-i-store-my-password-for-the-command-line

Wednesday, April 23, 2014

[JavaScript][CoffeeScript] Degisken/Fonksiyon Etki Alanlari

JavaScript'te alisilmisin disinda -PHP'nin disinda!- bir etki alani prensibi mevcut. Ust seviyede tanimlamis oldudugunuz bir degisken ya da fonksiyona asagi seviyelerden ulasabilirsiniz. Alt seviyeden ust seviyeye ise hayir. (Yani bunun yontemleri var ancak konuyla alakali olmadigindan dolayi pas geciyorum.)

Beni bu arastirmaya iten "CoffeeScript'teki -> ile => arasindaki farkin nedenir nedir?" sorusuydu. Sorunun cevabi yukaridaki bilginin varligindan haberi olan kisiler icin gayet net olarak dokumante edilmis CoffeeScript tarafindan. Durumu aciklamaya calisalim:

Peki ya yukaridaki gibi bir kodlamada ust seviyedeki elementi secmek istersek? Ki buyuk ihtimalle oyle bir seye ihtiyaciiz olacaktir. Oyleyse asagidaki gibi yapip baska bir degiskene atamak gerekli, referans gosterip elbette.

Islem bu kadar. Simdi gelelim bunun CoffeeScript ile olan iliskisine:

CoffeeScript ile calisiyorken nesne tabanli calismak zorunda hissediyorsunuz kendinizi, "class" etiketini gordukten sonra, ehehe. Elbette boyle bir durumda this kelimesi sizin icin gerekli oluyor, gerci bu ornekte sinif tanimlanmiyor ancak yine de ilintili. Lafi da  fazla uzatmadan CoffeeScript'in kendi ornegi uzerinden olayi aciklamak istiyorum:

Sorun kendini bellli ettigine gore cozumune de asagidan ulasabilirsiniz:

Bu kadar... :)

Monday, April 21, 2014

[NodeJS][Ipucu] npm Paketlerini Global Olarak Yuklemek

CoffeeScript, underscore gibi bazi paketler her projede (daha dogrusu bir projeden de bagimsiz her yerde) gerekli olarbilir. Boylesi durumlarda "Yok mu bu paketleri her yerde kullanabilmenin bir yolu?!" diyebilirsiniz. Elbette var! Paketleri yuklerken tek yapmaniz gereken npm install <pkg> -g
 seklinde -gparametresinden faydalanmak.

Kaynaklar
http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/

Thursday, April 17, 2014

[Facebook API] Bir Gorusmedeki Tum Mesajlari Almak

Eger bir arkadasinila uzun sureli Facebook'tan iletisim kuruyorsaniz, ve o kisi  ile suan iletisimde degilsiniz ancak iletisime gecmek icin hos bir seyler yapmak istiyorsaniz, Facebook'ta olan guzel konusmalarinizi ona iletmek isteyebilirsiniz.

Kodlama kisisel olduguu icin, ne sintaks, ne testler hic bir sey yoktur. Sadece isinizi gorsun yeterli. :)

Oncelikle mesajlari Facebook API'si ile 30'arli gruplar halinde cekiyoruz. Sonrasinda onlari PHP tarafinda birlestiriyoruz.


Saturday, April 12, 2014

[CoffeeScript] Watcher Shell/Command

Appends seperated .coffee files into one file, and compiles as application.js. So cool, hah?

Example structure:
-- 10_controllers
---- home.coffee
---- show.coffee
---- admin.coffee
-- 90_ui
---- home.coffee
---- show.coffee
---- admin.coffee

Example output:
Imagine all of above Coffee files in one compiled file as well as every hitting CTRL+S!

Saturday, April 5, 2014

AngularJS Ogreniyorum!

Uzunca zmandir kendimi pratik anlamda bir seylerde gelistirmedigimi fark ettim. Teorik bilgimin oldugu Single-Page Application'lar da zaten ne zamandir aklimda iken AngularJS'yeogrenmek uzere kollanrimi sivadim. Umuyorum ki Onumuzdeki birkac yazimda AngularJS hakinda goruslerimi yazacagim. "Neden AngularJS?" sorusuna simdilik tek cevabim "Cunku arkasinda Google var!" olacaktir. Bakalim ilerleyen asamalarda neler olacak...

Yazilar (yazilmasi plananan yazilar)

  • Single-Page Applicationlarda SEO Uzerine
  • AngluarJS vs. Backbone
  • Ucmaya Hazirlik: AngularJS, jQuery ve CoffeeScript!

Saturday, March 15, 2014

[C#] Exe icine Gomulmus Baska Bir Exe'yi Calistirmak

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...

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. :)

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. :)

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. :)

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.

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: