Şimdi alma, seneye de ödeme

Çok güzel bir kampanyaya denk geldim. “Yavaş Yaşamı Destekleme Derneği” -ki var mı gerçekte böyle bir dernek bilmiyorum :)-  yavasyasa.com adresinde ilk kampanyalarını duyurmuş. “Hayatı, zamanı, dünyayı tüketme!”.

Görseller, sloganlar ve metinler oldukça dikkat çekici. En azından benim gibi bir süredir insanların -ve kendimin- tüketim alışkanlıklarını sorgulayan birisi için oldukça dikkat çekici. Aslında bu yazıda kendi cümlelerimin olmasını isterdim ama sitede o kadar güzel metinler yazmışlar ki, birebir kopyalamaktan başka çarem kalmıyor.

Daha yeni cep telefonu, daha hızlı araba, daha çok ayakkabı, yeni moda giysiler, daha büyük evler… Durmadan tüketiyoruz. Dünyamızın karşılayamayacağı kadar tüketiyoruz ve dünya bize yetmiyor ama başka bir dünya da yok. Daha fazla tüketebilmek için zamanımızı, hayatımızı tüketiyoruz. Cep telefonumuzdan memnunuz ama yenisi çıkınca kendimizi almak zorunda hissediyoruz. Arabamız bizi istediğimiz yere ulaştırıyor ama daha hızlısını, daha güçlüsünü almak istiyoruz. Evimizde mutluyuz popüler bir sitede rezidans almak için için on yıllarca ödeyeceğimiz borcun altına giriyoruz. Satın aldıkça daha popüler, daha güçlü, daha güzel, daha cesur, daha mutlu olacağımızı sanıyoruz.

Yeni aracın 4×4 olunca mı dağlara çıkıp kamp yapacaksın? Daha pahalı kıyafetler giyince daha çok mu arkadaşın olacak? Rezidansta oturunca daha mutlu mu olacaksın? Her ay ödemen gereken faturalar arttıkça daha mı özgür olacaksın? Satın aldığımız ancak mutluluğumuza, yaşam kalitemize bir katkısı olmayan “şeyler” yüzünden her ay daha fazla fatura ödemek, daha az parayla geçinmek, daha çok çalışmak zorunda kalıyoruz.

Daha çok satın alabilmek için daha hızlı yaşıyoruz, hayata yetişebilmek için kendimize ve sevdiklerimize daha az zaman ayırıyoruz. Zihnen ve fiziken daha çok yoruluyoruz daha mutsuz oluyoruz. Buna rağmen ne kadar kazanırsak kazanalım kazandığımız para yetmiyor. Daha çok çalışıyoruz, daha hızlı yaşıyoruz. Sürekli bir yerlere yetişmemiz, başka bir yerde olmamız gerektiğini hissediyoruz. Nerede olursak olalım sanki başka bir yerde olmamız gerekiyormuş, kaçırdığımızı bir şeyler varmış gibi hissediyoruz.

 

Tüketim kültürünü, bize katmadıklarını keyifli bir metinle özetlemişler. Keyifli dedim çünkü benim düşüncelerimi çok iyi yansıtıyor. Belki sizin için çok “banal” gelebilir ya da olur da burdan kendinize pay çıkartıp “evet yaa” derseniz keyfiniz kaçabilir. Her neyse.

Biraz kişisel yaşamımdan örneklendirmek istiyorum. Özellikle yazılım sektöründen başlamak istiyorum. Çünkü öyle bir sektör ki, ne yaparsanız yapın kendinizi yetkin hissedemiyorsunuz. İlk olarak IoT denilen nane ile başlayacağım. Yaklaşık 2 yıl önce RaspberryPi satın aldım. Öyle çok pahalı birşey değil bu. 100 lira kendisi, 50 lira da kabloları, sensörleri vs. Bilmeyenler için, cüzdan boyutunda bilgisayar diyebiliriz. Bu bilgisayar normalden farklı olarak çeşitli sensörlerle, cihazlarla iletişime geçebiliyor. Örneğin ısı-nem sensörü. Çakmaktan küçük bir sensörü Raspberry’e bağlayarak odanızın ısısını ölçebiliyorsunuz. Ne kadar güzel değil mi? Bu cihazı kullanarak evimi akıllı hale getireceğim. Işıkları kapatıp açacağım. Güvenlik cihazı haline getireceğim.

(getiremedi)

Cihazla toplam uğraştığım saat 10-12 filandır tahminen. Uğraşırken keyif aldım. Çünkü küçüklüğümden beri böyle şeyler ilgimi çekmiştir. Ama daha fazlası gelmedi. Şu an cihaz bir köşede yatıyor. Peki neden aldım? Gerçekten alma amacım birşeyler üretip mutlu olmak mıydı? HAYIR. Çok sonradan düşününce farkettim ki, kendimi o cihazı almak zorunda hissettim. Çünkü çevremdeki bir çok yazılımcı bu cihazlarla uğraşıyordu. Çünkü benim onlardan neyim eksikti? Derhal bu duruma ayak uydurmalıydım. Kendimi cihazı almaya şartladım, ihtiyacım olduğunu düşündüm. Halbuki bu sadece tüketim psikolojisiydi. Çevremdeki herkesin yaptığını yapma ihtiyacı.

Bu belki de kendi adıma verebileceğim tek örnek olabilir. Bundan sonra vereceğim örnekler kendimi tüketim kültürüne kaptırmayışımın örnekleri. Tabii ki standart olarak telefonla başlamak istiyorum. 3 yıldır Samsung Galaxy S4 kullanıyorum. Güvendiğim birinden ikinci el almıştım. Evet evet, ikinci el aldım. Ve  bu 3 yıllık süreçte hiç değiştirme/daha iyisini alma ihtiyacı hissetmedim. Çünkü telefonum sorunsuz çalışıyordu. Tüm ihtiyaçlarımı da karşılıyor. Daha iyisini neden almalıyım? iPhone almak zorunda mıyım? Çevremde herkes iphone kullanıyor. Hatta asgari ücretle çalışan kişiler bile (bunu birebir yaşadım, klişe değil) son model iPhone kullanırken, ben 3 yıldır ikinci el bir telefonu kullanıyorum. Olacak iş değil! Oluyor. Çünkü ben ihtiyacıma göre tercih yapan birisiyim. Bugünki ihtiyacım internete girmek, mesaj programlarını kullanmak, maillerimi kontrol etmek. (Aslında maillerimi kontrol etmekte ihtiyacım değil. Öyle gibi hissediyorum.) Eğer şu anki telefonum bozulursa yine aynı ihtiyacımı karşılayacak bir telefon alırım. Tabii ki bunun için son model almama gerek yok. Eğer ihtiyaçlarım farklı olsaydı, örneğin oyun oynamak gibi, o zaman belki daha güçlü bir telefon düşünebilirdim. Aslında ihtiyaç kelimesini kullanıyorum ama oyun oynamak tam olarak bir ihtiyaç değil. Belki kullanım amacı diyebiliriz. Şimdi lütfen kendinizi sorgulayın. Bir telefondaki ihtiyaçlarınız nelerdir?

Bilgisayar ile devam edelim. Malum, günümün çok büyük kısmı bu meretle bakışarak geçiyor. Peki son model bir bilgisayara ihtiyacım var mı? Pek zannetmiyorum. Masaüstü bilgisayar topladığımda, 4 yıl önce, son model işlemciyi almadım. Biraz performans testleri vs araştırarak son modelin bir altı işlemciyi aldım. (i7-i5) Bunu yaparken de yine benzer şekilde davrandım. Son model işlemciye gerçekten ihtiyacım var mı? Hayır. Ne kadar doğru bir karar vermişim. 4 yıldır -nazar değmesin- bilgisayarım hiç beni pişman etmedi. Tahminlerime göre en az 2 yıl daha çok rahat biçimde kullanabileceğim. Eğer ihtiyaçlarımı karşılayamazsa tabii ki değiştirmeyi düşünürüm. Ama unutmayın ki, benim bilgisayardaki güç ihtiyacım “son kullanıcı”nın güç ihtiyacından çok daha fazla işim gereği.

Bu konuda çevremde en çok şunu duyuyorum: “Bende macbook var, 3 saniyede açılıyor. Yanımdaki kişi bilgisayarının açılmasını beklerken ben kod yazmaya başlayabiliyorum” Bir dakika ya! Bilgisayarın bu kadar hızlı açılması neden önemli? 1 dakika bekleseniz -ki benim bekleme sürem parola girme süreleri dahil yarım dakika- milyonlar mı kaybedeceksiniz? Bilgisayarın hızlı açılması nasıl bir ihtiyaç olabilir? Bana hayatımda ne katar? Günlük 1440 dakikadan 1 dakika kazandırır. Bekleyin arkadaşlar. 1 dakika bekleyin. Zaten bütün gününüz bu bilgisayarın başında geçiyor. Bilgisayar 1 dakika daha hızlı açılınca siz o 1 dakikanızı yine bilgisayara harcıyorsunuz. Sizin yaşamınıza hiç bir pozitif etkisi yok.

Geçiyorum programlama dilleri konusuna. Kısa tutacağım. Şu an yazılımcılara bakın, bütün hepsi bildiği dilin haricinde bir dil öğrenmesi gerektiğini düşünüyor. Neden? Çünkü trend öyle. Sürekli yeni şeyler çıkıyor ve o yeni şeyleri öğrenmek zorunda. Neden ya neden? Neden her (yeni) şeyi öğrenmek zorundayım? Yaptığım iş kadarını öğrensem bana yetiyor. Yeni şeyleri de ihtiyacım olduğunda öğreniyorum zaten. Onun dışında yaptığım işi daha iyi yapmak için kendimi geliştirmeye çalışıyorum. Çıkan her yeni teknoloji sizin öğrenmeniz için değil. Öğrenmeyin. Öğrenmezseniz hiçbir şey kaybetmezsiniz. Biraz aslında detaylı bir konu, bunu başka bir yazıda daha detaylıca yazacağım. O yüzden kısa tuttuğumu düşünerek geçiyorum.

Televizyona gelicem. 4K televizyonlar çıkmış. İnanılmaz biçimde pazarlanıyor ve insanlar alıyor. Arkadaşlar en fazla Acun’un programlarını izleyeceksiniz, yapmayın. Kaldı ki çoğu kanal-film-dizi 4K teknolojisiyle uyumlu değil. Eğer gerçekten bir kültürünüz varsa, film izlemekten keyif alıyorsanız, detaylara önem veriyorsanız alabilirsiniz tabii. Bu arkadaşlara lafım yok. Bütün gün reality show izleyen yeni gelin evlerine lafım. Sırf evleniyor diye en iyisini alanlara. Bakın, bir şeyin en iyisi, aslında en iyisi değil. En iyi, kişiseldir. Size en iyi diye satılan şey aslında en iyi olmayabilir, çoğunlukla da olmuyor. Size satabilmek için ona en iyi diyorlar. Düşünüyorum düşünüyorum, son model televizyona sahip olunca siyah-beyaz dönemde televizyon izleyenlerden daha çok keyif alıyoruz mu sorusuna yanıt veremiyorum. Ölçmedim tabi ama, pek zannetmiyorum. En azından aileme bakınca benzer keyif alındığını görüyorum. Tuhaf. Ne yaşam kalitesi artıyor, ne aldığımız keyif artıyor. Ama biz ürünün en iyisini almak için çabalıyoruz.

Kendi açımdan en çok yorumu teknolojik ürünlerde yapabiliyorum. Diğer tüketim konularında da yorum yapmak isterdim. Ama maalesef kendimi yazıda anlatabileceğimi pek düşünmüyorum. Örneğin paylaştığım metinde bahsi geçen araba konusu. Hiç araba kullanmadım, bilmiyorum. Şu an dışarıdan bakınca aracın güvenilir olmasına bakarım diye düşünüyorum. Koltukların altında ısıtma var mı diye bakmam mesela. Ne kadar hızlı gittiği hiç önemli değil. Keşke tüm arabalar hız limitleri aşılmayacak şekilde tasarlansa. Neden bu kadar hıza ihtiyacımız var ki? Ya da, farklı bir konuya değinecek olursak, neden çok büyük evlere ihtiyacımız var? Gereksiz eşyalarla doldurmak için mi? Gerçekten bunu anlayamıyorum. (Bu arada şu emlak balonu bi patlasa da rahatlasak, ev alsak ya. Kaç senedir ha patladı ha patlayacak diye bekliyoruz :() Hele o rezidanslar? Gerçekten insanlar nasıl yaşıyor buralarda anlamıyorum. (Ofisim rezidansta :)) Her fırsatta “yaaa o eski komşuluklar kalmadı” deyip, kart okutarak yan dairemizde kimin kaldığını bilmediğimiz bir binaya giriş yapıyoruz. Bu arada, rezidansları doğuran şeyin  ya da özellikle İstanbul’da binalaşmayı arttıran şeyin, popülasyon artışı olduğunun bilincindeyim. Bu yine başka bir tartışma konusu olabilir. Paragrafın başında kendimi anlatabileceğimi düşünmüyorm diyip, anlatmaya çalışmışım yine :)

Bu çağa ayak uyduramadığımı düşünüyorum. Arafta kalmış gibiyim. Düşüncelerimin %100 doğru olduğunu savunmuyorum. Herşey tartışmaya açık. Ama görüyorum ki, bu tartışmaları yapanların sayısı da çok az. Bu tüketim kültürü beni alıp götürmese de yakın çevrem bundan etkileniyor ve dolayısıyla ben de etkileniyorum. Bazı arkadaşlarım bu durumu zenginin malı, züğürdün çenesi durumu olarak yorumluyor. Komünizmi çökerten “doktorla çöpçü aynı maaşı mı alacak” sorusu gibi “paran olsa en iyisini almıcaksın sanki?” benim düşüncelerimi çökertiyor gibi görünse de aslında tüketim kültürünün varlığını çürütmüyor. Tüketim kültürü paradan bağımsız bir konu bence. Hatta yeni programlama teknolojilerinin tüketilmesi de bu tüketim kültürüne dair güzel bir örnek. Bu konuda daha fazla tartışmaya ihtiyacım var. Daha fazla okumaya. Özellikle karşıt görüşleri dinlemeye. Yazının linkini gönderip zorla okuttuğum arkadaşlarımdan yorumlarını bekliyorum. Eğer yorum yapmıyorsanız okumadı varsayıp başınızı yiyeceğim. Şans eseri bu yazıya denk geldiyseniz eğer her türlü katkınızı bekliyorum. Eğer denk gelen olmazsa çok üzülürüm :(

Bitirirken, nerede okuduğumu hatırlayamadığım bir anı paylaşacağım. Bir Türk, güney amerika seyahatinde bir şehre(ya da kasabaya) gidiyor. Saati olmadığı için oranın yerlilerine soruyor. Sorduğu herkes acayip saatler söylüyor. Örneğin yarım saat arayla sorduğu saatlerde bir kaç saatlik fark söyleyebiliyorlar. Sonradan anlıyor ki (belki de sorup öğreniyor) herkesin saati kendine göre ayarlanmış. Ortak bir saat yok.

Bu da böyle bi anıydı işte…

My PhpStorm file watcher for php-cs-fixer

I started using PHP Code Style Fixer long time ago for automatically fix my code style. You can use this tool via command line. But also you can add a file-watcher for PhpStorm. It runs php-cs-fixer on every file save. So you dont need to run php-cs-fixer manually.

Here you can download watchers.xml : https://gist.github.com/shibby/6cb1fcafe3747ce8e2f7aa0e8dc2b516

All you need to do is import xml file from PhpStorm Settings->File Watchers and installing php-cs-fixer to /usr/local/bin folder.

 

PDF dosyaları PHP ile resim dosyasına çevirme

Imagick kütüphanesi, pdf dosyaları convert etmemize yardımcı oluyor.

<?php

$imagick = new Imagick('file.pdf[0]');
$imagick->setImageFormat('jpg');
file_put_contents($pathToImage, $imagick);

Imagick kullanmak için yapmanız gereken şey imagick paketini kurmanız. (apt: php5-imagick ya da php7.0-imagick)

Bu işlem için daha iyi bir kullanım deneyimi sunan bir paket te mevcut. Arka planda imagick kullanıyor.

https://github.com/spatie/pdf-to-image

Dönüştürme işlemi ise oldukça basit. jpg, jpeg, png formatlarında kayıt yapabiliyor.

<?php

$pdf = new SpatiePdfToImagePdf($pathToPdf);
$pdf->saveImage($pathToWhereImageShouldBeStored);

Running Laravel4 with PHP7

I will not argue about Laravel’s shitty versioning system and dropping support for older versions. They are so excited, everyday adding a new feature to framework’s core. Yeah, thats really good thing but who cares fucking backward compability?

Anyway, if you are using Laravel4 and want to run it with PHP7, you have make some changes on framework’s core. So, you need to fork L4 and publish it as a new package OR (preferred) you need to use it as custom repository.

So, what do you need to change?

Here is a pull request, that contains full change for support PHP7: https://github.com/laravel/framework/pull/13338

changed Exception object references to Throwable because PHP7 uses Error instead of Exception. So, referencing as Throwable is a good idea.

So what i did? Here: https://github.com/shibby/laravel-framework/commit/1ab51571fde84b31d7328e9b9c86033d390187bf

Just deleted Exception references on functions. I’m using my repository for projects that runs with PHP7. So, you can use it if you want with your own responsibility. And you have to watch security/critical fixes on Laravel’s 4.2 branch.

If you want to use this repository, you need to make some changes on your composer.json file.

First, i added "php":">="7.0", to my require section.

And, second, i added my repository as custom repository above require section:

"repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/shibby/laravel-framework.git"
    }
  ],

But i think i need to delete other branches on my fork for make composer’s resolution faster. I’m waiting for your ideas. Maybe we can move as a group? At last, i will upgrade my 4.2 project to latest(or lts) version. I want to do it with less pain. It hurts now :(

Thanks!

PHP7 ve pear paketi

PHP7 kullanmaya karar verdiğinizde pear kurulumunda sıkıntı yaşabilirsiniz. Normalde kurulumu dotdeb repolarındaki php-pear paketiyle yapıyordum ama php7 kullandığımda bazı sorunlarla karşılaştım.

Örneğin şöyle bir hatayla karşılaşmanız mümkün:

[email protected]:~$ pear
PHP Parse error:  syntax error, unexpected ‘new’ (T_NEW) in /usr/share/php/PEAR/Frontend.php on line 91

Bunun sebebi, yüklenen php-pear paketinin PHP4-5 için olması ve deprecated özellik içermesi. Satır 91 e baktığımızda

$obj = &new $uiclass;

Bir objenin referans olarak türetildiğini görüyoruz ki bunun ne için kullanıldığını pek anlamadım. Kısa bir araştırmayla 5.3 sürümünde deprecated özellikler arasına girdiğini gördüm: http://php.net/manual/tr/migration53.deprecated.php

Çözüm:

Pear paketini phar ile yüklemek. Güncel paket adresi işe şu şekilde: http://pear.php.net/go-pear.phar

İndirdiğiniz dosyayı “php go-pear.phar” komutuyla çalıştırın. Kurulum için bir iki soru soracak ve sisteminizde pear komutunu artık kullanabileceksiniz.

Ansible için görev komutu da yazdım, sizlerle paylaşayım.

tasks:
– name: “Download latest php-pear installer to /tmp”
get_url: url=http://pear.php.net/go-pear.phar dest=/tmp/go-pear.phar mode=0740

 

– name: “Copy go-pear installer script”
template: src=install-pear.expect
dest=/tmp/install-pear.expect
force=yes

 

– name: “eecute install-pear.expect script”
command: /tmp/install-pear.expect

 

install-pear.expect

#!/usr/bin/expect

spawn php /tmp/go-pear.phar

expect “1-11, ‘all’ or Enter to continue:”
send “r”
expect eof

spawn rm /tmp/go-pear.phar

Ergene Nehri

Eskiden insanların serinlemek için girdiği, balık tutulan bir yermiş. Şimdi siyah olmuş suyu, ölüm akıyor.

Kampanya başlatılmış bir de. Bu tarz internetten imza kampanyalarını pek sevmesem de, en azından yazılanı çizileni okuyun: https://www.change.org/p/edirne-icisleri-gov-tr-eposta-saglik-gov-tr-ergene-nehrini-temizleyin-kirlenmesine-izin-vermeyin?recruiter=79416633&utm_source=share_petition&utm_medium=twitter&utm_campaign=share_twitter_responsive

LetsEncrypt ile sitelerinize ssl yükleyin

SSL YÜKLEYİN! Ssl önemlidir arkadaşlar. Sizinle sunucu arasındaki trafiği şifreler. Ki bu da çok önemli birşeydir. Baya önemli ama.

Yıllar öncesinde ssl oldukça pahalı bir üründü. Ve anlaması güçtü. Belki de sadece benim için böyleydi bilmiyorum :) Fakat bugün günümüzde ssl kurulumu 2-3 tıklamaya kadar düştü. Bu yüzden ssl yüklemeyi ihmal etmeyin. Kişisel bloga da ssl mi yüklenirmiş demeyin, yükleyin.

Ve artık bunun için LetsEncrypt kullanabilirsiniz. Tamamen ücretsiz.

Nasıl?

Ssh bağlantımızı yapalım ve ilk önce LetsEncrypt dosyalarını sistemimize yükleyip letsencrypt klasörüne geçelim.

git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt

Aşağıdaki komutu çalıştırarak LetsEncrypt için gerekli dosyaların sisteme yüklenmesini sağlayalım.

./letsencrypt-auto –help

Eğer LetsEncrypt komut listesini görüyorsanız kurulum başarıyla tamamlanmış demektir. Eğer göremiyorsanız bir sorun var demektir. Ki ne olduğunu bilmiyorum.

Sertifika Oluşturma

Sertifika oluşturma için birden fazla yöntem mevcut. Hatta sertifikanın oluşturulup apache ve nginx için konfigürasyonların otomatik yapıldığını söyleyen bazı komutlar da var. Ancak ben otomatik konfigürasyon yapanı henüz beceremedim. Bu yüzden size kendi kullandığım komutu göstereceğim:

./letsencrypt-auto certonly –webroot –webroot-path /var/www/site.tld/web/public –email [email protected] –agree-tos –renew-by-default –text -d site.tld

Bu komut webroot yöntemiyle yalnızca sertifika dosyalarını oluşturuyor. Webroot yönteminde site doğrulaması letsencrypt’in otomatik oluşturup doğrulama yaptığı bir yöntemdir. –webroot-path ile tanımladığınız klasöre bir doğrulama dosyası oluşturur. Daha sonra bu dosyanın http://site.tld/olusturulandosya şeklinde kontrolü yapılır LetsEncrypt tarafından. Eğer dosyaya erişim sağlanamazsa sertifika dosyaları oluşmaz. (Zaten LetsEncrypt Domain Validation Ssl oluşturur. Yani domain doğrulama sertifikası)

–agree-tos komutu, kullanım şartlarını otomatik kabul etmenizi sağlar. –renew-by-default ise 1 yıl sonra otomatik yenilenmesini sağlar. Ya da öyle olmasını umut ediyoruz.

Eğer herşey yolunda giderse “Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/site.tld/fullchain.pem.” şeklinde bir mesajla karşılaşırsınız. Yani artık sertifika dosyalarınız kullanıma hazırdır. Peki nasıl kullanacaksınız?

Nginx

Ssl anahtarlarınızı vhost dosyanızda tanımlamanız gerekiyor. /etc/nginx/sites-available/site.tld dosyanızı favori editörünüz ile açın. Eğer dosyanız bu değilse, vhost dosyanızı bulun!

Şu 3 satırı uygun olduğunu düşündüğünüz bir yere ekleyin.

listen 443 ssl;
ssl_certificate    /etc/letsencrypt/live/site.tld/cert.pem;
ssl_certificate_key    /etc/letsencrypt/live/site.tld/privkey.pem;

Son olarak nginx servisini reload etmeyi unutmayın. Eğer reload ederken bir hata almazsanız, sitenizi https:// ile kullanabilirsiniz demektir. İnternetteki örneklerle vhosts dosyanızı oluşturduğunuz varsayarsak, vhost dosyanız en son eklemeden sonra şunun gibi görünecektir: https://gist.github.com/shibby/450e32d7a5a2ef86904d

Apache2

Hiç bir fikrim yok nasıl ekleneceğine dair. LetsEncrypt’in apache için default gelen modülünü kullanmayı deneyin. Başarırsanız bana da öğretin.

  • LetsEncrypt Resmi Web Sitesi: https://letsencrypt.org/
  • LetsEncrypt Github Sayfası: https://github.com/letsencrypt/letsencrypt
  • EFF’ye bağış yapın! https://supporters.eff.org/donate

 

Karşılaştığım sorunlar:

Kurulum esnasında hata alıyorsak ve bu hata içerisinde “Cannot allocate memory” gibi bir şey geçiyorsa (python paketleri yüklerken), sunucunun ram’i yetmiyor demektir. Ama ram arttırmadan önce swap var mı bir kontrol edin. Eğer swap yoksa çok kolay bir biçimde dosya-swap eklemesi yapabilirsiniz: http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

Liseli zamanlarımdı. Bir gün Gülhane parkından geçiyordum. Elimdeki su şişesini uzaktan çöp kutusuna basket atarcasına fırlattım. Girmedi, hiç şaşırmadım. Bir kez daha yerden alıp basket atmayı denedim. Yine olmadı. Yeteneksizlik diz boyu. Üçüncü kez denemeye tenezzül etmedim. Şişeyi yerden aldım, normalce çöp kutusuna attım. Karşıdan gelen orta yaşlı bir teyze yanımdan geçerken “aferin evladım” gibisinden birşeyler söyleyip beni takdir etti. Yapmam gereken birşeyi yaptığım için, üstelik biraz da oyun oynuyordum. İnsan yapması gerektiği bir şeyi yaptığı için neden takdir kazanır ki? İşte yukarıdaki bi fotoğraf ve bunun gibiler yüzünden.

Ali’ye cevaben: Neden Laravel kullanıyorum?

Ali Gündoğdu, Neden Laravel Kullanmıyorum başlıklı bir yazı yayınlamış. Çok fazla yazacak şey bulamıyorum, fırsat bulmuşken bir yazayım dedim. Hem Laravel kullandığım için söz hakkı düştüğünü düşündün hem de polemik olsun dedim. Gerçi burada Laravel’i düşündüğünüz kadar savunmayacağım.

PHP’de aşağı yukarı herkesin hikayesi aynıdır. Önce fonksiyonlar.php dosyası vardır, sonra sınıf kavramıyla tanışılır. Bir klasör içerisinde resim yükleme, form doğrulama, veritabanı, email gönderme, belki smarty gibi bir template motoru vardır ve artık bunları kullanmaya başlarız. Tebrikler, kendi frameworkümüzü yapmayı başardık :)

Zaman geçtikçe bu bize yetmez. Gerek yapmaya başladığımız projeler büyür, gerek bizim ufkumuz genişler. Adım adım, büyürüz ve gerçek bir framework ile tanışırız. (Bu arada direkt büyük projenin içine düşen ya da araştırmacı ruhuyla programlamaya düzgün başlayan bazı şanslı veletler vardır, onlara dicek söz yok. Döngüyü bozdunuz ulan!)

Mesela ben bu frameworklerden ilk olarak Yii ile tanıştım (ismen tanıştık). Bir yazılımcı abimiz; böyle böyle bişey var, süper, şunu yapıyo, bunu yapıyo gibi şeyler söyleyince neymiş la bu bir bakayım dedim. Baktım ve hiç bir şey anlamadım. Bana bir kaç gömlek üstün geldi. Çünkü framework nedir bilmiyorken direkt Yii ile başlamak, ağır bir model kavramı ile tanışmak zordu. Gel zaman git zaman, rahmetli Codeigniter abimiz ile tanıştım. CI’yi öğrenmem yaklaşık 1 günümü aldı. Çünkü gerçekten çok basit bir dökümantasyonu vardı. “+Ne yapmak istiyorsun? -Resim yükleyeceğim. +Buyur, bu şekilde yapabilirsin” gibi net cevaplar içeren bir dökümantasyon. Düşünmene gerek yok, fazla araştırmana gerek yok. Copy-paste yeterli :) Neyse, CI beni uzun bir süre götürdü. Ben bunu baya baya kullandım.

Gün geldi, ihtiyaçlar büyüdü. CI’nin geliştirmesi durduruldu, zaten sürekli $this-> yazmaktan kollarım yoruldu. Daha sonra Ali’yle bir projeye başladık. Çok şükür, CI’nin adı bile geçmedi projede. En azından o bilinç varmış. Ali’nin yazısında bahsettiği, Symfony/Silex, ZF1, Doctrine içeren yapıyı kullanmaya başladık. Ne de iyi yapmışız!

Peki Laravel bu yazının neresinde? Başlayalım Laravel kısmına. Kendi yönettiğin projelerde belki kendine has bir yapı kullanmak güzel, fakat ileride projeyi devretmen gerekirse ya da projeye birilerini dahil etmen gerekirse sıkıntı yaşayabilirsin. Bunun temel sebebi dökümantasyondur. Ne nasıl yapılırın cevabını iyi vermen gerekiyor. Bunun için eğer kendi yapını kullanacaksan, en başından itibaren sürekli dökümantasyon yazman gerekiyor. Kod yorumlarından bahsetmiyorum, bildiğin framework dökümantasyonu gibi yazman gerekiyor. Burada bir parantez açıyorum. Kullandığınız her parçanın bir dökümantasyonu var. Her biri süper dökümantasyon olsa da sizin yapınızda bir bütün oluşturmayacak. Sizin yazdığınız dökümantasyonda bu parçaları birleştirmeniz gerekiyor.

Laravel’in dökümantasyonu, öğrenme açısından oldukça iyi hazırlanmış durumda. Tam benim gibi üşengeç, dummy(bu tam olarak ne demek bilmiyorum, havalı durur diye düşündüm) tiplere hitap ediyor. Öğrenmesi kolay, geliştirme yapması hızlı. Ama burada, Ali’nin bahsettiği, geriye dönük dökümantasyon sorunu ortaya çıkıyor. Bugün 5 sürümü hazırlanan Laravel için 1 yıl sonra 4 sürümüne ait dökümantasyona erişebilecek miyiz ve tüm talepleri karşılayabilecek mi? Evet, versiyonlama sistemi başlı başına sıkıntılı. Ben belki de bu geriye dönük dökümantasyonu ve versiyonlamayı göz ardı ederek bir hata yapıyorum ama burada tercih ettiğim şey hızlı öğrenme süreci. Hızlı öğrenme süreci sayesinde hem projeyi daha hızlı gerçekleştirebilir hem de gelecekte birisinin projeye dahil olması durumunda adaptasyon kolay olur ki zaten bugün elini sallasan Laravel bilen birine çarpıyor. (Eskiden CI öyleydi :))

Bu konudaki sorulması gereken soru şu: Kullandığın frameworkün geriye dönük desteğinin kısıtlı olmasına ne kadar tölerans gösterebilirsin?

Diğer bir noktadan, “kendi yapını oluşturmak” bir takım sıkıntıları daha doğuruyor. Bunlardan ilki dökümantasyondu. İkinci problem ise, her ne kadar güçlü frameworkleri arkana alsan da, sen gerek mimari açıdan gerekse pratik açıdan doğru bir yapı kurabiliyor musun? Örneğin ben bunu kesinlikle göze alamıyorum. Tek başıma girdiğim bir projede artık kendi yapımı kullanamam. Çünkü bunu oluşturabilecek kadar yeterli teknik bilgiye sahip değilim. Hatta şöyle diyelim, eskisi kadar cahil değilim, bu yüzden kendi yapımı oluşturamam :) Ama 2-3 kişi olursun, herkes belli bir bilgi birikimine sahiptir, o zaman kendi yapını kurma girişimlerine başlayabilirsin. Gerek doğru/en iyi mimariyi kurabilmek, gerek hataların takibini yapabilmek ve sorunları çözebilmek, gerek ne bileyim başka şeyler için bir ekip olmak bu konuda çok işe yarayacaktır. Ki biz Ali ile kendi yapımızı kullanalım dediğimizde sadece ikimiz oluşturmadık bunu. Dışarıdan arkadaşlar da buna gerek fikir gerek kod anlamında katkıda bulundu ve hala daha geliştirmeye devam ediyoruz. (Geliştirmeden kasıt, örneğin composer ile yeni araçlar ekliyoruz, değiştiriyoruz. Ya da klasör yapımızda değişiklikler yapıyoruz. Kendimiz için en mükemmel yapıyı oluşturmaya çalışıyoruz)

Peki ya Laravel’de Taylor’un tek adamcılığı? Biz bu tabloya ülkemizden alışığız, o yüzden beni çok rahatsız etmedi, desem yanlış olur. Ama Laravel üzerindeki tartışılması gereken en büyük konu bu değil. Zira, Laravel bir özgür yazılım. İsteyen aynı kodlardan Paraver adında bir framework yapar. (Gerçi MIT lisans bu kadar özgür mü bilmiyorum, birisi aydınlatırsa çok sevinirim.) Neyse, aslında demek istediğim bu değildi ama demiş bulundum. Şunu diyecektim; Laravel üzerindeki tüm kararları tek bir kişi versin. Belki bu kullanmamak için bir sebep olabilir. Ama bunun kilit bir şey olduğunu düşünmüyorum. Bununla birlikte Ali’nin yazısında Ubuntu’nun pencere kapatma butonlarını topluluk ısrarlarına rağmen solda tutmasına atıfta bulunularak bir kıyaslama yapılmış. Ben bir Ubuntu kullanıcısıyım. Bazı dayatmalarından, hatta spyware’a varan uygulamalarından rahatsızım. Ubuntu’dan daha iyisi var. Arch linux. Ama sırf kurulumu bile ömrümden ömür çalıyor. Ki daha hiç kuramadım (çok uğraşmadım). Ubuntu(Canonical) her ne kadar saçma sapan kararlar verse de, bu onu kullanmayacağım anlamına gelmiyor. Bir gün çizmeyi aşar, o zaman bırakır ve ona en yakın dağıtıma geçerim. (Gerçi spyware a doğru yol alması çizmeyi aştığını göstermez mi?) Örneğin Mint. Ubuntu’nun tüm paketlerini destekliyor. Demek istediğim de bu, Laravel konusunda tek adamcılık en büyük sorun değil. Bugün böyle bir sıkıntı varsa, yarın başka birisi Laravel ile %100 uyumlu başka bir framework çıkartır, oradan yürünür. Bu konudaki özet ise şu; Laravel’i seven Taylor Otwell ile sevsin. Sevmeyen de sevmesin.

Ali’nin yazısına büyük çoğunlukla yanıt vermekle birlikte neden Laravel kullandığımı özetlemeye çalıştım. Belki söyleyecek daha çok şey var ama uzadıkça uzayacak gibi duruyor. En iyisi burada bırakmak. Son olarak şunu söylemek istiyorum; Laravel’i “mükemmel” olduğu için kullanmıyorum. Zaten mükemmel de değil. Kullanma sebebim, kurması, geliştirme yapması, öğrenmesi hızlı olması. Bazen kararlılığa bakarsınız, bazen hıza bakarsınız. (Mesela telefonumda stabil olan Samsung firmwarelerini kullanmak yerine Cyanogen modun, telefonum için unofficial modunu kullanıyorum. Cyanogen mod bile unofficial iken ben onun unofficial sürümünü kullanıyorum düşünün :))

Dipnotlar:

* Kendi yapın dediğimiz kavramı biraz açmak gerekli. Burada kastedilen şey “kendi framework”ün değil. Belli başlı frameworkleri arkana alıyorsun, belki sadece beğendiğin kısımlarını alıyorsun ve kendine göre onları kullanıyorsun. Ama burada yine kafana göre bir kullanma geliştirmiyorsun. Bu konuda dahi belli başlı standartlar, teknik konular var. Belki dizin yapın farklı olur, belki config dosyaların ve kullanımın farklı olur. Ama en nihayetinde temelde hepsi aynıdır.

* Kendi yapınızı oluşturma konusunda şu kaynak oldukça fayda sağlayacaktır: https://github.com/fabpot/Create-Your-Framework

Owncloud ve Youtube-dl

Uzunca bir zamandır (8-9 ay gibi bir süre) Google Drive, Dropbox vb. gibi hizmetler yerine kendi sunucumda kurduğum OwnCloud‘u kullanıyorum. Eksileri/artıları nelerdir, neden kullanıyorsun gibi sorulara kısaca, gerek gizlilik gerekse geliştirilebilirlik açısından bu yazılımı tercih etmeye karar aldım diyebilirim. Elbette daha bir çok nokta var.

Owncloud’u kurduğumda kendim için bir Youtube Downloader eklentisi yapmıştım. Belki bu tarz birşey yapmak isteyen olur diye fikir vermesi açısından Github‘a kodları yüklemiştim. Eklenti verilen Youtube linkini downloader ediyor, eğer istersem ogg formatına çeviriyordu. Şimdi eklentiyi geliştirdim ve tüm OwnCloud kullanıcılarının basitçe yükleyebileceği bir forma soktum. Çok ahım şahım bir kod yok üzerinde. Github adresinden kodları inceleyebilir, Owncloud sunucunuza kurup geribildirimde bulunabilirsiniz.

https://github.com/shibby/owncloud-youtubedl