Cihan Okyay

Feed Rss

  http://casnic.org

Eğer python ile geliştirme yaparken virtualenv kullanıyorsanız ve psycopg2 kurmaya kalkarsanız bir hata ile karşılaşıyorsunuz. (Kullandığım işletim sistemi Ubuntu 11.04)

How To Utilize Your Electric Beard Straightener Properly

A quality blossom straightener can help you maintain that healthful look no matter where you go. Many guys spend hours styling their beards with one small adjustable gadget or some other. Though some men are rather diligent in their beards, many simply get lucky and have no issues with developing a nice thick beard. However thick or wholesome your blossom is, it is likely to grow back no matter what attempts you take. The one thing that really matters is that you just take some opportunity to look after your manly beard correctly.

A healthy lifestyle requires having the very best nutrition in your diet plan and maintaining an active lifestyle. Unlike the normal person who stops functioning when their face begins to sag, a beard straightener can keep you looking younger for longer. Together with the best heating technologies, your beard will be smooth, shiny and moisturized all day long. A blossom straightener is a very simple and affordable method to keep up a healthful, clean and well-kept beard.

The greatest benefit of working with a beard straightener rather than utilizing traditional hairbrushes is the balm on the heating apparatus will allow you to avoid damaging your own hair. The balm acts as a barrier between the hair and the heating component, keeping your hair safe. Hairbrushes on the other hand melt down the hairs, which can lead to harm if it occurs while your hair is being straightened. There's also usually a limit to how much heat may be implemented in the heaters, based on the brand and model. If you are concerned about damaging your hair with excessive heat, you may wish to take into account a small, battery operated, cordless grooming brush instead.

An essential component to any electrical beard straightener is an ionic rechargeable ceramic disk. These discs maintain ionic charge, which keeps them billed in any way times even when the blossom straightener is in use. In order to achieve the best benefits, the temperature setting must always be set to the same value on every individual comb. This makes sure that the moisture onto the entire scalp is evenly distributed through the strands.

Aftershave balms can be utilised in conjunction with standard bar soaps to further moisturize the hair. You can ensure that your soaps are developed for use in conjunction with the blossom straightener to ensure you receive the most effective results. Conventional bar soaps will only work if they are used in combination with the conventional bar gadget. Make sure that you read the directions carefully so that you can make sure that you are using the correct type of product so you don't harm your hair whilst attempting to accomplish your styling goals.

If you want the most enjoyable experience possible with your beard straightener, it will help to know how to properly look after your beards. Regularly cut or trim your beard that they are smooth and shiny. Don't allow them to become lagged or else they will become brittle and dry. Besides being unsightly, they also make it tough to comb or style daily. Besides your beards, you can also benefit from extra thick hairs on your facial hair, and this will improve your overall appearance.



  1. (hellodjango)[cihann]@[ferrari][~/hellodjango]> pip install -r requirements.txt
  2. Downloading/unpacking Django==1.3 (from -r requirements.txt (line 1))
  3. Running setup.py egg_info for package Django
  4. Downloading/unpacking psycopg2==2.4.2 (from -r requirements.txt (line 2))
  5. Running setup.py egg_info for package psycopg2


  6. Error: pg_config executable not found.

  7. Please add the directory containing pg_config to the PATH
  8. or specify the full executable path with the option:

  9. python setup.py build_ext –pg-config /path/to/pg_config build …

  10. or with the pg_config option in ‘setup.cfg’.
  11. Complete output from command python setup.py egg_info:
  12. running egg_info
  13.  
  14. writing pip-egg-info/psycopg2.egg-info/PKG-INFO
  15.  
  16. writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
  17.  
  18. writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
  19.  
  20. warning: manifest_maker: standard file ‘-c’ not found
  21.  
  22. Error: pg_config executable not found.
  23.  
  24. Please add the directory containing pg_config to the PATH
  25.  
  26. or specify the full executable path with the option:
  27.  
  28. python setup.py build_ext –pg-config /path/to/pg_config build …
  29.  
  30. or with the pg_config option in ‘setup.cfg’.
  31.  
  32. —————————————-

Bu aşamada kaldıysanız eğer ubuntu ‘da kurmanız gereken iki paket var. libpq-dev ve python-dev.

  1. sudo apt-get install libpq-dev python-dev

Ardından tekrar pip ile kurmayı deniyoruz psycopg2 paketini.

  1. (hellodjango)[cihann]@[ferrari][~/hellodjango]> pip install -r requirements.txt
  2. Downloading/unpacking Django==1.3 (from -r requirements.txt (line 1))
  3. Running setup.py egg_info for package Django
  4.  
  5. Downloading/unpacking psycopg2==2.4.2 (from -r requirements.txt (line 2))
  6. Running setup.py egg_info for package psycopg2
  7.  
  8. no previously-included directories found matching ‘doc/src/_build’
  9. Installing collected packages: Django, psycopg2
  10. Running setup.py install for Django
  11. changing mode of build/scripts-2.7/django-admin.py from 644 to 755
  12.  
  13. changing mode of /home/cihann/hellodjango/bin/django-admin.py to 755
  14. Running setup.py install for psycopg2
  15. building ‘psycopg2._psycopg’ extension
  16. gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.4.2 (dt dec pq3 ext)" -DPG_VERSION_HEX=0×080408 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/usr/include/python2.7 -I. -I/usr/include/postgresql -I/usr/include/postgresql/8.4/server -c psycopg/psycopgmodule.c -o build/temp.linux-x86_64-2.7/psycopg/psycopgmodule.o -Wdeclaration-after-statement
  17.  
  18. …..
  19.  
  20. gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-x86_64-2.7/psycopg/psycopgmodule.o build/temp.linux-x86_64-2.7/psycopg/green.o build/temp.linux-x86_64-2.7/psycopg/pqpath.o build/temp.linux-x86_64-2.7/psycopg/utils.o build/temp.linux-x86_64-2.7/psycopg/bytes_format.o build/temp.linux-x86_64-2.7/psycopg/connection_int.o build/temp.linux-x86_64-2.7/psycopg/connection_type.o build/temp.linux-x86_64-2.7/psycopg/cursor_int.o build/temp.linux-x86_64-2.7/psycopg/cursor_type.o build/temp.linux-x86_64-2.7/psycopg/lobject_int.o build/temp.linux-x86_64-2.7/psycopg/lobject_type.o build/temp.linux-x86_64-2.7/psycopg/notify_type.o build/temp.linux-x86_64-2.7/psycopg/xid_type.o build/temp.linux-x86_64-2.7/psycopg/adapter_asis.o build/temp.linux-x86_64-2.7/psycopg/adapter_binary.o build/temp.linux-x86_64-2.7/psycopg/adapter_datetime.o build/temp.linux-x86_64-2.7/psycopg/adapter_list.o build/temp.linux-x86_64-2.7/psycopg/adapter_pboolean.o build/temp.linux-x86_64-2.7/psycopg/adapter_pdecimal.o build/temp.linux-x86_64-2.7/psycopg/adapter_pint.o build/temp.linux-x86_64-2.7/psycopg/adapter_pfloat.o build/temp.linux-x86_64-2.7/psycopg/adapter_qstring.o build/temp.linux-x86_64-2.7/psycopg/microprotocols.o build/temp.linux-x86_64-2.7/psycopg/microprotocols_proto.o build/temp.linux-x86_64-2.7/psycopg/typecast.o -lpq -o build/lib.linux-x86_64-2.7/psycopg2/_psycopg.so
  21.  
  22. no previously-included directories found matching ‘doc/src/_build’
  23. Successfully installed Django psycopg2
  24. Cleaning up…

Gördüğünüz gibi kurulum tamamlandı.

  1. (hellodjango)[cihann]@[ferrari][~/hellodjango]> pip freeze
  2. Django==1.3
  3. psycopg2==2.4.2
  4. wsgiref==0.1.2

Mutlu kodlamalar :)

İşimde ve kendi projelerimde genelde Django kullanıyorum. Django ile yazılım geliştirirken bir çok üçüncü parti uygulama kurmak gerekebiliyor. Örneğin migration işlemleri için south kurmak gerekiyor. Diyelim ubuntu kullanıyorsunuz ve south ubuntu deposunda var. Veya pip, easy_install gibi python paket sistemleri ile kurulum yapıyorsunuz. Bu durumda bu paketler sistemin geneline kuruluyor. Bu durumun ne gibi sıkıntıları var derseniz, projeye özel değişik versiyonda kütüphaneleri denemek zorlaşıyor. İşte tam bu sırada virtualenv gibi harika bir araç yardımımıza koşuyor. virtualenv kısaca bize özel bir python alanı yaratıyor ve orada yaptığımız kurulumların sadece orada geçerli olmasını sağlıyor. Şimdi ubuntu’da adım adım virtualenv kurulumu ve kullanımını inceleyelim.

Öncesinde sistemimizde easy_install ve pip kurulu değilse bu işlemleri halledelim. Terminalde aşağıdaki komutu vererek paket kurulumlarımızı yapalım.

  1. $ sudo apt-get install python-setuptools python-dev build-essential

Evet kurmamız gereken .deb paketleri tamam. Şimdi pip kurmamız gerekiyor. İsterseniz virtualenv ile easy_install’ı kullanabilirsiniz. Ancak ben pip kullanmayı daha çok seviyorum. Şurada neden pip’in daha güzel olduğunu açıklamışlar. Aşağıdaki komutu işletelim.

  1. $ sudo easy_install pip

pip kurulduğuna göre artık virtualenv’yi pip aracılığıyla kurabiliriz.

  1. $ sudo pip install virtualenv

virtualenv sisteme kuruldu ve sanal python ortamları yaratmamız için bir engelimiz kalmadı. Bir virtual environment (sanal ortam) yaratmak için aşağıdaki gibi bir komut işletmeniz gerekiyor.

  1. $ virtualenv –no-site-packages –distribute example
  2.  
  3. New python executable in example/bin/python
  4. Installing distribute………………………………………………………………………………………………………………………done.
  5. New python executable in example/bin/pythonInstalling distribute
  6. ……………………………………………………………………………………………………………………………done.

Buradaki example ortamımızın ismi. Bunu dilediğiniz gibi verebilirsiniz. Python ortamınız bu dizin içinde şekillenecek. İsterseniz path verebilirsiniz. Benim önerim python_environments gibi bir dizin açıp tüm ortamlarınızı burada bulundurmanız. Düzen iyidir

virtualenv’ı kurduk ancak onu aktif etmeden kullanmaya başlayamıyoruz. Aktif etmek için aşağıdaki yolu izliyoruz.

  1. $ source example/bin/active

Bu komuttan sonra imlecin olduğu bölümün değiştiğini farkedersiniz. Genelde sanal ortamın adı yazar. Bir sorun yoksa artık aktif halde bir sanal ortamımız var. Sanal ortamdan çıkmak için diğer bir deyimle deaktif etmek isterseniz;

  1. (example)~$ deactivate

Python sanal ortamından çıkmış oluyorsunuz böylece. Şimdi sanal ortamımızda istediğimiz paketleri kuralım. Örnek olması açısından Django üzerinden gidelim istiyorum. Django kurmak için pip komutunu aktif edilmiş sanal ortamımız içindeyken yazıyoruz.

  1. (example)~$ pip install Django
  2.  
  3. Downloading/unpacking Django
  4. Downloading Django-1.3.tar.gz (6.5Mb): 6.5Mb downloaded
  5. Running setup.py egg_info for package Django
  6. Installing collected packages: Django
  7. Running setup.py install for Django
  8. changing mode of build/scripts-2.6/django-admin.py from 644 to 755
  9. changing mode of /home/cihann/example/bin/django-admin.py to 755
  10. Successfully installed Django
  11. Cleaning up…

Django başarıyla kuruldu. Şu an Django’nun sadece example sanal ortamında kurulu olduğunu hatırlatalım. Ayrıca farkettiyseniz kurulum yaparken sudo ile yetki almaya vs. ihtiyaç duymadık. Sistem geneline kurulmadığı için bir yetki alma gereği duymuyor. Yazı biraz uzayacak ama virtualenv ile ufak bir Django uygulaması başlatalım istiyorum. Böylece requirements.txt denen dosya ile paket yönetiminede girmiş oluruz. Django artık sanal ortamda kurulu olduğuna göre şu komutu işletiyoruz.

  1. (example)~$ django-admin.py startproject example_django

Bu komutla bir Django projesi oluşturmuş olduk. Artık sanal ortamda pip ile paket kurmayı biliyoruz. Ancak bir çok paket kurmak istediğimizde bunları tek tek kurmak yerine paket listesini çıkarıp bunu bir dosyaya yazıp oradan kurulum ve yönetimi yapabiliriz. Bu dosyanın adı requirements.txt. Django projemizin içine gidelim ve requirements.txt adında bir dosya oluşturalım.

  1. (example)~$ cd example_django/
  1. (example)~/example_django$ touch requirements.txt

requirements.txt dosyamızın içine istediğimiz paketleri yazalım. Örnek olarak şöyle bir dosya ile başlayabiliriz.

South==0.7.3
django-taggit==0.9.2
Markdown==2.0.3

Evet requirements.txt dosyamız hazır. Şimdi nasıl bu paketleri bu dosya üzerinden kuracağımızı görelim.

  1. (example)~/example_django$ pip install -r requirements.txt
  2.  
  3. Downloading/unpacking Markdown==2.0.3 (from -r requirements.txt (line 3))
  4. Downloading Markdown-2.0.3.tar.gz (71Kb): 71Kb downloaded
  5. Running setup.py egg_info for package Markdown
  6. Downloading/unpacking django-taggit==0.9.2 (from -r requirements.txt (line 2))
  7. Downloading django-taggit-0.9.2.tar.gz
  8. Running setup.py egg_info for package django-taggit
  9. Downloading/unpacking South==0.7.3 (from -r requirements.txt (line 1))
  10. Downloading South-0.7.3.tar.gz (70Kb): 70Kb downloaded
  11. Running setup.py egg_info for package South
  12. Installing collected packages: django-taggit, Markdown, South
  13. Running setup.py install for django-taggit
  14. Running setup.py install for Markdown
  15. changing mode of build/scripts-2.6/markdown from 644 to 755
  16. changing mode of /home/cihann/example/bin/markdown to 755
  17. Running setup.py install for South
  18. Successfully installed django-taggit Markdown South
  19. Cleaning up…

Süper! Paketler sanal ortamımıza kuruldu. virtualenv ile gördüğünüz üzere çok rahat bir Python çalışma ortamı kurulabiliyor. Geliştirdiğiniz uygulamayı başka bir sanal ortama taşıyıp orada farklı sürüm kütüphanelerle deneyebilirsiniz. Sanal ortamla işiniz bittiğinde onu silebilirsiniz.

Mutlu kodlamalar (:

Merhaba,

Django ile yazılım geliştiren ve daha çok yeni öğrenmekte olan arkadaşlara yararlı olabilecek tips & tricks serisi yapmayı düşünüyordum. Bu ilk yazı olduğundan not düşme ihtiyacı hissettim. :)

Django’da gömülü gelen bir admin paneli mevcut. Eğer INSTALLED_APPS bölümünde ‘django.contrib.admin’ aktif durumdaysa syncdb işlemi sırasında sizden admin kullanıcı adı ve parolası istiyor. Sizde buna göre admin paneline giriş yapabileceğiniz bir kullanıcı adı ve parola belirliyorsunuz. Olur da parolanızı kaybederseniz diye basit bir çözüm sunayım dedim.

Proje dizinimizde aşağıdaki komutu vererek django shell’i açıyoruz.

  1. $ python manage.py shell

Ardından Django user modelini import etmemiz gerekiyor.

  1. >>> from django.contrib.auth.models import User

İkinci adımda kullanıcımızı User modelinden çekip bir değişkene atıyoruz. Ben user kullandım örneğin.

  1. >>> user = User.objects.get(username=‘kullanici_adimiz’)

kullanici_adimiz yazan kısma sizin sistemdeki admin kullanıcı adınız gelecek.

Artık kullanıcımızı çektiğimize göre parolasını değiştirebiliriz. Bir diğer deyişle parolasını set edeceğiz. Ardından bu değişiklikleri kaydetmek amacıyla save() methodunu çalıştıracağız.

  1. >>> user.set_password(‘yeni_parola’)
  1. >>> user.save()

İşte bu kadar. Yeni parolanız ile panele giriş yapabilirsiniz.

İyi çalışmalar…

Merhabalar,

TinyMCE, web uygulamamızda haber girişi, blog postu vb. girerken bir çok kolaylığı sağlayan bir araç. Örneğin, yazı stillerini belirlemek, paragrafları düzenlemek, yazıya resim veya video eklemek gibi işlevlerde yardımcı oluyor. Django’nun en iyi özelliklerinden birisi olan admin paneli içinde tinymce ile gelmiyor. Kolayca biz ekleyebiliriz. Bu adresten TinyMCE’yi indirdikten sonra jscripts altındaki tiny_mce dizinini Django projemizdeki static klasörümüze kopyalıyoruz.

Kopyaladıktan sonra tiny_mce dizinine gidip içinde textareas.js adında bir dosya yaratıyoruz. Bu js dosyasına aşağıdaki kodları yapıştırıyoruz.

  1. tinyMCE.init({
  2. mode : "textareas",
  3. width : "800",
  4. height : "500",
  5. theme : "advanced",
  6. language : ‘en’,
  7. theme_advanced_toolbar_location : "top",
  8. theme_advanced_toolbar_align : "left",
  9. plugins : "preview, searchreplace, paste, table, insertdatetime, media",
  10. theme_advanced_buttons1 :
  11. "preview,undo,redo,visualaid,|,cut,copy,paste,pastetext,pasteword,|,search, replace,|,bullist,numlist,|,outdent,indent,blockquote,|,link,unlink,anchor, image,cleanup,help,code",
  12. theme_advanced_buttons2 :
  13. "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect",
  14. theme_advanced_buttons3 :
  15. "forecolor,backcolor,|,sub,sup,|,charmap,insertdate,inserttime,media,|,tabl econtrols"
  16. });

Ardından kullandığımız application dizinimizdeki admin.py dosyasını editlememiz gerekiyor. Onu da şöyle bir değişiklik ile hallediyoruz;

  1. class NewsAdmin(admin.ModelAdmin):
  2. class Media:
  3. js = (‘tiny_mce/tiny_mce.js’,
  4. ‘tiny_mce/textareas.js’,)
  5.  
  6. admin.site.register(News, NewsAdmin)

Evet bu kadar basit entegrasyon işlemimiz.

Geçenler Python İstanbul toplantısında bir arkadaşım sormuştu FlatPages’a TinyMCE nasıl entegre ederim diye. O da admin.py’de bir kaç satır işe bakıyor :) Şöyle bir kod parçacığı işimizi görecektir;

  1. from django.contrib.flatpages.models import FlatPage
  2. from django.contrib.flatpages.admin import FlatPageAdmin as FlatPageAdminBase
  3. class FlatPageAdmin(FlatPageAdminBase):
  4. class Media:
  5. js = (‘tiny_mce/tiny_mce.js,
  6. tiny_mce/textareas.js‘,)
  7.  
  8. admin.site.unregister(FlatPage)
  9. admin.site.register(FlatPage, FlatPageAdmin)

Bu kadar! Artık Flatpages’ta da TinyMCE kullanabiliriz.

Mutlu kodlamalar :)

Merhabalar,

Herhalde PyCon, Python ile ilgilenen yazılımcıların gitmek istedikleri etkinliklerin başında gelir. Tabi bu şansa herkes sahip olamıyor. Neyse ki PyCon’da ki çoğu sunu kayıt altına alınıyor ve bizde bundan yararlanıyoruz. Son günlerde iş arkadaşım Uğur Özyılmazel (vigo) ile işten kalan zamanlarımızda Jacob Kaplan Moss‘un Django deployment workshop sunumunun kaydını izledik. Maalesef PyCon 2010 sunumunu bulabildik. Çünkü Kaplan Moss 2011 sunumunun kayıt altına alınmasını istemediğini söylemiş PyCon yetkililerine. Sanırım bir düşüncesi var bu workshop ile ilgili. :) Biz workshop’ı izlediğimizden beri deployment ve ölçeklenebilirlik konularında gayet yararlı bilgiler edindik. Kaplan Moss github hesabında bu workshoplarda kullandığı scriptleri paylaşmış. [1] ’den ulaşabilirsiniz. Ben tüm workshop hakkında inceleme yapamayacağım çünkü zaten 3 saat süren bir yığın bilgiyle dolu bir sunum. Sizi video ile baş başa bırakayım :)

[1] https://github.com/jacobian/django-deployment-workshop

Video için;
deployment workshop