Minimalist PHP Çatısı Slim

Artık kimse bir çatı (framework) kullanmadan web uygulaması yazmıyor. Kim hammaliye işlerle boğuşarak zaman kaybetmek ister ki. Bütün çatıların odağı yapacağınız işleri kolaylaştırmaktır, daha az kod daha çok iş. Çoğunlukla da bir ton güzellikle gelirler, vertiabanı katmanları, imaj işleyiciler, dosya yöneticileri, şablon motorları vs.

Basit bir web uygulaması hazırlıyor ve topu topu 3-5 farklı varış noktası olan bir uygulama yazıyorsanız, tek ihtiyacınız olan şey bir kod navigasyonudur, gerisi işinizi kolaylaştıracak kütüphanelerdir fakat bir çatının tüm elementlerini kullanmak istemeyebilirsiniz veya sadece ufak bir yardımcı kütüphane yetecek bir uygulama yazıyor olabilirsiniz. Örnegin sadece xml işleyen bir api hazırlıyorsunuz. Tek ihtiyacınız genel kod navigasyonunu halledecek bir yardımcı ve xmlinizi işleyeceğiniz bir kütüphane.

Bu yazıda Slim adında minimalist bir php çatısını kısa bir örnek kod ile tanıtacağım. Slim, altı üstü, hata ayıklama, oturum yönetimi ve çok basit bir şablon mekanizmasından oluşuyor. Şablon motoru bile değil, sadece yardımcı. Aşağıdaki kodda ikinci varış noktası tanımlamasında görebilirsiniz şablon kullanımını.

Çok detaya girmeye gerek yok kod zaten kendini anlatıyor 🙂

Slim’e istediğiniz şablon motorunu entegre edebilirsiniz.

Slim’e http://www.slimframework.com adresinden ulaşabilirsiniz. Dökümantasyonu çok detaylı değil fakat zaten çok detaya da ihtiyacınız olmayacak.

MongoDB ile Flörtleşme ve MongoLab ile Bulut Veritabanı

NoSQL vertiabanı motorları son yıllarda çok popülerleşti, çünkü yapısız olmalarından dolayı daha kolay mimari değişiklik yapabileceğiniz veri yapıları olduğu için tercih edilmeye başladı. Ölçeklenebilirlik de klasik sql veritabanlarının sınırlı ve geleneksel kaldığı konulardı.
NoSQL çıkışı kesinlikle modern bir çözüm olarak görülebilir.

İnternette bir çok karşılaştırma, performans analiz yazıları bulabilirsiniz sql ve nosql veritabanları hakkında. Ancak her yere uyan mükemmel bir çözüm yok. Benim gördüğüm kadarıyla, hibrid ve akıllıca kurgulanarak dengelenmiş ve dağıtılmış sistemler en yaygın kullanımlar. Yani bazı şeyleri nosql ile daha zor ve daha çok kodlama zamanı harcayarak yapabilir, bazı şeyleri de sql ile yönetemez ve yapamazsınız.

Daha teknik konulara giriyorsanız zaten bu yazıdan daha çoğuna ihtiyacınız var 🙂 Bu yazı daha çok mongo’ya giriş ve flörtleşme dönemi hakkında.

Eğer MongoDB’yi denemek istiyorsanız, mongodb sunucusunu bilgisayarınıza yüklemek zorunda değilsiniz. Kurulumu da çok zor değil fakat sadece denemek için sunucu kurulumu konfigurasyonu gibi şeylerle uğraşmak zorunda değilsiniz. Sadece istemci sürücülerini kurmanız yeterli. Bu konu hakkında mongodb dökümantasyonundaki http://docs.mongodb.org/ecosystem/drivers/php/ sayfasını inceleyebilirsiniz.

MongoLab adında bağımsız bir servis sayesinde ücretsiz bir mongo veritabanı oluşturabilir ve denemelerinizi onun üstünde yapabilirsiniz. MongoLab veritabanı ve kullanıcınızı oluşturduktan sonra açık erişim izni veriyor. Dolayısıyla php’den veya herhangi diğer bir ortamdan doğrudan erişebiliyorsunuz.

Tabi ki servisin amacı mongo denemek isteyen insanlara servis sunmak değil. MongoLab bulut veritabanı servisi. Veri dosyalarının saklanmasını istediğiniz alt servisi (Amazon, Rackspace, Windows Azure vs…), hatta yüzeysel de olsa bölge seçebiliyorsunuz (Amerika veya Avrupa veya uzak doğudaki bir veri merkezi şeklinde).

MongoLab 500mblık bir alanı ücretsiz sağlıyor. Diğer sınırlamalarını bilmiyorum fakat ufak projeleriniz için veya deneme yapmak için ideal. Eğer uygulamanız çok veri kullanmaya başlarsa küçük, büyük paketleri veya kurumsal hizmetlerinden faydalanabilirsiniz.

MongoLab ile tamamen php mongo eklentisi bağımlılığından da kurtularak doğrudan servisin basit REST apisini kullanabilir ve tek başına çalışan bir uygulama yazmanız da mümkün.

Konumuz mongo iken, birkaç php-mongo interaksiyonunu denediğim bir php dosyasının kodunu doğrudan vermek istiyorum.

İlk satırlarda göreceğiniz dsn’i mongolab’den edineceğiniz sunucu adresi ve portunu (tahminimce her kullanıcı için farklı olma durumu var), veritabanı kullanıcı adınız ve şifrenizi belirterek tek parça string şeklinde belirttiginiz takdirde bağlantı sağlayabileceksiniz.

Mongo, küçük uygulamalarda veri düzeni zorunluluğu olmadığı için kullanması çok keyifli, fakat verinizi dökümante etmeyi unutmayın. Yoksa neyin ne olduğunu unutur veya ipin ucunu kaçırarak karmaşık bir veri yığını elde edebilirsiniz günün sonunda.

MongoDB dökümantasyonunu inceleyerek indeksleme, sorgulama ve veri yönetimi nasıl yapılıyor fikir edinebilirsiniz. Ayrıca php manual’daki bazı SQL örneklerinin php ile mongo sınıfında nasıl yapıldığını gösteren bu sayfayı: http://php.net/manual/en/mongo.sqltomongo.php incelemekte fayda var.

MongoLab servisinin adresi https://mongolab.com

SequelPro: MacOSX kullanıcıları için PHPMyAdmin alternatifi

MacOSX’de php geliştirme ortamı kurmak, diğer işletim sistemlerine göre çok daha kolay. MAMP ile neredeyse tek drag & drop ile apache, php, mysql üçlüsünü çalışır hale getirmek mümkün.

Eğer *AMP kullanan bir web geliştiricisi iseniz muhtemelen tüm veritabanı yönetiminizi phpmyadmin ile yapıyorsunuzdur. PHPMyAdmin kuşkusuz taşınabilir ve esnek yapısıyla istediğiniz gibi özelleştirebileceğiniz bir yönetimsel araç. Fakat bazı noktalarda bazen bir masaüstü aracının sunacağı özellikleri sunamayabiliyor.

Sequel Pro, adından paralı bir yazılım gibi bir çağrışım yapsa da ücretsiz bir yazılım. Basit ve minimalist bir arayüze sahip Sequel Pro’nun kullanımı oldukça kolay.

Okumaya devam et “SequelPro: MacOSX kullanıcıları için PHPMyAdmin alternatifi”

MAMP ile MacOSX’de PHP tabanlı web geliştirme ortamı hazırlamak

MacOSX üzerinde php ile geliştirme yapmak istiyorsanız ilk yapmanız gereken şey geliştirme ortamınızı hazırlamak olacaktır.

MacOSX üzerinde halihazırda kurulu bir apache ve php sürümü bulunuyor zaten. Bunları basitçe aktif hale getirebilir ve geri kalan ayarları elle yapmak isteyebilirsiniz fakat macosx ile yüklü gelen php, apache sürümü ve eklentileri, standart ihtiyaçlara bile cevap veremeyebilir. Basit bir wordpress kurulumu bile gd, zip, iconv ve benzeri php eklentilerine ihtiyaç duyacaktır. Dolayısıyla bir noktada php kurulu php sürümünü güncellemeye ihtiyaç duyabilirsiniz. Apache için de durum aynı. Ayrıca sadece eklentiler değil, mysql gibi birkaç sunucu uygulaması da kurmak zorunda kalacaksınız. Bunları tek yerden başlatıp durdurabilmek için de başka araçlar bulmanız veya geliştirmeniz de gerekebilir.

Varolan apache ve php kurlumunu kullanmak dışında en hızlı kurlumu, MAMP (MacOSX Apache MySQL PHP) ile yapabilirsiniz. Bir çok genel eklentiyle beraber universal olarak derlenmiş ve paketlenmiş bir uygulama diyebiliriz MAMP için. MAMP ile birkaç dakika içinde standart bir web geliştirme ortamını ayağa kaldırabilirsiniz.

http://www.mamp.info/ adresinden indirebileceğiniz MAMP, basit bir şekilde kurulabiliyor. Applications klasörünüzde MAMP adında bir klasör içinde herşeyi toplu bir şekilde bulabileceğiniz MAMP, birçok ayar dosyasını da barındırıyor. Dolayısıyla Web root dizininizi kolayca değiştirebilir, php.ini veya my.cnf’i modifiye ederek istediğiniz eklentileri aktifleştirebilir pasifleştirebilirsiniz.

http://www.mamp.info/en/mamp/index.html adresinden MAMP ile beraber gelen tüm kütüphane / eklenti ve sunucu yazılımlarının listesini görebilirsiniz. MAMP’in standart sürümü ücretsiz ve basit bir yönetim arayüzü sunuyor.


Eğer vhost, dns, email sunucusu ayarlarınızı görsel bir arayüzde yönetmek istiyorsanız tek seferlik satın alabileceğiniz bir lisans ile MAMP PRO yani sadece yönetimsel arayüz uygulaması satın alarak varolan MAMP kurulumunuzu kolayca yönetebilirsiniz.


Birkaç ipucu vermem gerekirse, MAMP PRO’da çok göz önünde olmasa da “File > Edit Template > …” menüsünden php.ini, my.cnf, httpd.conf gibi ayar dosyalarınıza hangi dizinde olduklarını çözmeye gerek kalmadan ulaşabilirsiniz.

Web root klasörünüzü (kullanıyorsanız) Dropbox’unuzda bir dizini belirterek tüm web geliştirme dosyalarınızı ve projelerinizi dropbox’da tutarak anlık yedekleme sağlayabilirsiniz.

iOS’de otomatik yenilenen abonelikleri doğrulamak

Baştan belirtmek zorundayım, iOS uygulamalarına otomatik yenilenen abonelikleri entegre etmek tam bir baş ağrısı. Her ödeme yönetminin zor yanları olabilir, ancak iOS uygulama mağazası üstünden yapılan otomatik tekrar eden abonelikleri yönetmek çok daha karışık bir mevzu.

Baştan başlamak gerekirse, otomatik ödeme yönetime ile yapılan abonelikler diğer tür ödemelerden farklı. “iOS uygulama içi satış entegrasyonu ve ödemeleri doğrulamak” yazısında iOS uygulama mağazası ödemelerini entegre etmek ve ödeme türleri üzerine bir yazı yazmıştım. Otomatik tekrar eden abonelik dışındaki diğer ödeme türlerinin entegresyonunu o yazıdan inceleyebilirsiniz. Ancak bu konuda bilginiz yoksa önce o yazıdaki bilgilere ihtiyacınız olacak, önce o yazıyı incelemenizi tavsiye ederim.

Otomatik tekrar eden abonelikler sayesinde, kullanıcınızın iznini aldıktan sonra iTunes aracılığıyla, 1 haftalık, 1 aylık, 2, 3, 6 veya 12 aylık periyodlarla otomatik şekilde ödemelerini sağlayabiliyorsunuz. Bir ürün için kullanıcıyı elde tutmak açısından diğer, tek seferlik satın almalardan çok daha değerli. Kullanıcınız ödemeyi ilk sefer yaparken satın almayı yapıyor ve sonrasında servisi iTunes üstünden iptal edilene kadar ödemeler otomatik tekrarlanıyor. Siz kazancınızı Apple’dan alıyorsunuz.

Okumaya devam et “iOS’de otomatik yenilenen abonelikleri doğrulamak”

iOS uygulama içi satış entegrasyonu ve ödemeleri doğrulamak

iOS uygulaması geliştirmek bu günlerde oldukça popüler. Turkiye’de de birçok oyun geliştiricisi iOS platformlara yönelmeye başladı.

Uygulamanızda geliştireceğiniz gelir modeliniz bir şekilde Apple ödeme sistemine bağlanmak zorunda çünkü Apple uygulama geliştirici kontratınıza göre uygulama üzerinde yapacağınız herhangi bir satış modelini Apple ödeme sistemi üzerinden yapmak durumundasınız. Apple uygualama içi ödeme sistemini kullanmanın avantajları ve dezavantajları var.

En büyük dezavantajı her ödemede, Apple’a 30% vermek. Bunun dışında ödemeleri doğrulamanın teknik zorlukları da var. Bunun dışında avantajları, dezavantajlarını unutturacak kadar değerli. Çünkü iOS üstünden yapılacak bir alışverişte herhangi bir ödeme bilgisi sorgusu olmayacak, kullanıcılar ödeme bilgilerini zaten sistemde tanıtmış durumda. Yani bir ödeme kabul edebilmek aslında sadece bir onaylama kutusuna indirgeniyor. Çoğu durumda tek onay sorusuna cevap vermek ve Apple kimlik şifresini doğrulamakla ödeme sağlanabiliyor.

Bir diğer avantaj da, herhangi bir ödeme yönetim sistemi, banka vs gibi bir entegrasyonla uğraşmak durumunda olmamanız.

Şimdi gelelim entegrasyona, iOS geliştirici (objective-c) tarafında gerekli entegrasyonu StoreKit denilen bir Apple arabirimi ile iOS uygulamanıza yapmanız gerekiyor. Bazi amatör programcılar veya sunucu bağımsız uygulama yazmaya çalışan geliştiriciler ya gözden kaçırıyorlar ya da gerek görmüyorlar ama aslında StoreKit’den aldığınız tüm fatura kopyalarını (receipts) Apple sunucularına göndererek doğrulamanız gerekiyor.
Okumaya devam et “iOS uygulama içi satış entegrasyonu ve ödemeleri doğrulamak”

PHPStorm, PyCharm veya RubyMine kullanıcıları, projenizi veritabanı entegrasyonu ile geliştirin

PyCharm, PhpStorm, and RubyMine kullanıcıları, jetbrains son güncellemelerden biriyle saydığım IDE’lere gelişmiş veritabanı desteği ekledi. Daha önce de vardı fakat hiç veritabanı bağlantısını PHPStorm’da kullanmamıştım fakat bu videodan sonra denemeye karar verdim ve oldukça efektif buldum.

Java bağlayıcılarını yükledikten sonra birçok veritabanı motorunu projenize bağlayabiliyorsunuz. Projenize veritabanı bağlantınızı kurduktan sonra veritabanı yapısını gözden geçirebilir, yapıyla oynayabilirsiniz. Teknik olarak phpmyadmin yerine bu kısımları kullanabilirsiniz. Bu kısmı ilgimi çok çekmedi, fakat spesifik olarak SQL geliştirirken veritabanı konsolunu kullanabilir ve kod yazım zekasını kullanabilirsiniz. Buraya kadar IDE’den bağımsız bir veritabanı yönetim aracı gibi geldi.

Asıl işe yarayan kısmı ise, kodunuzdaki SQL’leri doğrudan çalıştırabilir veya php kodunuzda SQL yazarken kod yazım zekasını kullanabiliyorsunuz. Videoda örnek kullanımda görebilirsiniz.

Kaynak: http://blog.jetbrains.com/webide/2012/11/sql-support-and-database-tools/

PHPStorm bu güne kadarki en eli yüzü düzgün PHP IDEsi

Çıktığından itibaren kullanmaya başladığım ve son 3 yıldır tüm web geliştirme işlerimi PHPStorm IDEsini kullanıyorum.

Java tabanlı NetBeans’i modifiye ederek bir IDE (Integrated Development Environment) yani Entegre Geliştirme Ortamı oluşturdular.

PHP’de en büyük problem entegre bir geliştirme ortamı olmaması. Yani derleyiciyle iyi konuşan, iyi bir hata yakalama, test ortamı veya kod ve yazım zekası na sahip bir editör bulmak çok kolay değil. Bunları, kullandığınız işletim sistemine uygun ayrı ayrı araçlarla sağlayabiliyorsunuz tabii ki, fakat entegre şekilde çalışmalarını sağlamak çok da kolay değil.

PHPStorm ilk çıktığında minimal bir konfigürasyon sunarak kod yazım zekası ile bazı temel yazılım geliştirme araçlarını sunuyordu fakat çok hızlı bir şekilde birçok modern web geliştirme dilini (less, sass, haml) ve birçok uygulama geliştirme çatısını destekler hale geldi. Minimal ayarlarla gelişmiş bir editörden ek farkı yok fakat aşağıda kısaca sıraladığım entegre araçları aktif hale getirildiğinde gerçekten çok güçlü bir geliştirme ortamına dönüştürebiliyorsunuz. İşte benim çok sık kullandığım ve sizin de yüksek ihtimalle işinize yarayacak bazı özellikler ve araçlar.

Gelişmiş kod yazım zekası sadece php’de değil php tabanlı bir web projesinde kullanabileceğiniz olası tüm kodları (html, javascript, css, xml) geliştirmek için kullanabilirsiniz. Ek olarak bu altyapılardaki tüm popüler uygulama çatılarını (framework) kod yazım zekasında kullanılabilir şekilde bulabilirsiniz.

Eş zamanlı hata yakalama, xdebug ile çalışan web uygulamanızı editörünüzle entegre ederek eş zamanlı uygulama analizi yapıp hata yakalayabilirsiniz.

Versiyon kontrol sistemi entegrasyonu ile kodunuzu subversion, git gibi depolardan indirip yönetebilirsiniz.

Veritabanı bağlantılarınızı sadece editörünüzden veritabanınıza erişmek için değil kodunuzda yazdığınız SQL’leri kodu yazarken çalıştırıp test edebilir, SQL geliştirirken kod yazım zekası kullanabilirsiniz.

Bunların dışında otomatik yayınlama (deployment), otomatik ftp yüklemesi, zen coding, kod template’leri vs vs gibi bir ton diğer özelliği var.
3 yılda 6 ana sürüm çıkartarak çok kararlı ve güçlü bir php geliştirme ortamı sunuyor jetbrains. Malesef paralı olan ide diğer profesyonel idelere göre çok ucuz, ilk aldığınızda 100 dolar sonasında her yıl ana sürüm güncellemelerini almak için 50 dolar ödemek zorundasınız fakat yaptığınız yatırımı kesinlikle karşılıyor.

Jetbrains PHPStorm’daki birçok aracı Ruby, Python için geliştirdikleri IDE’ler için de sunuyor. Eğer Python veya Ruby yazıyorsanız kesinlikle PyCharm ve RubyMine’a göz atmanızı tavsiye ederim.

PHPStorm’un sayfası için: http://www.jetbrains.com/phpstorm/

PHP en iyi uygulama geliştirme kuralları

En iyi uygulama kuralları çevirisini çok beğenmesem de Türkçe olarak bu şekilde çevrilen “best practices” kavramı, her uygulama geliştirme ortamı için düşünülmesi gereken, genel bir yöntem/yordam tanımı veya bir grup kural olarak tanımlanabilir.

Biliyorsunuz ki php eski bir dil, her ne kadar güncellense ve yeni sürümler çıksa da geriye dönük destek verdiği için eski methodlar/teknikler yeni sürümlere uyarlanmadan çoğu zaman çalışır durumda kalıyor. Dolayısıyla çok eski methodlar kullanan geliştiriciler, kodlar görmek mümkün.

Bu durumdan rahatsız olan bir grup php geliştiricisi kendi uygulama kurallarını, standartlaşmış veya kabul görmüş yöntemleri güncel bir şekilde tuttukları bir döküman hazırlamışlar ve açık kaynak olarak herkesin katkısına açmışlar.

Sunucu konfigürasyonu, kod yazım standartları gibi bir çok konuyu topladıkları konu başlıkları, yararlı en iyi uygulama kurallarını barındırıyor. İncelemekte kesinlikle fayda var.

Buyrun: http://www.phptherightway.com

PHP ile Zaman Farkı Hesaplamak

Daha önce php’de iki tarihi karşılaştırmayı anlatmıştım https://mfyz.com/tr/phpde-tarih-karsilastirma, ancak iki tarih arasındaki ay, gün, yıl farkını kullanmanız gerektiğinde, php’nin tarih-zaman sınıfını kullanarak iki tarih arasındaki zaman farkını istediğiniz periyodda hesaplatabilirsiniz.

Bu yönetmle hesaplayacağınız tarih farkının iki genel kullanımı vardır. Birincisi hesaplamalarınızda iki tarih arasındaki geçen zamana göre yaptığınız bir kuralınız vardır. Mesela bir blog yazınızın 1 aydan önce yazıldığını denetlemek ve buna göre “Bilgiler geçerliliğini yitirmiş olabilir” gibi bir not göstermek istiyorsunuz. Bunun için şu an ile yazının yazılma tarihi arasında 1 ay olup olmadığını sorgulayabilirsiniz.

Bu hesaplama aslında basit bir matematiksel bir hesap gibi görünse de aslında ay uzunluğu, artık yıl hesabı gibi nedenlerden dolayı ve her zaman 1 ay = 30 gün olmaması nedeniyle biraz daha karışık olabiliyor. Dolayısıyla anlattığım yöntem gibi hazır yöntemleri kullanarak bu hesaplamaları doğru şekilde yapabilirsiniz.

Şimdi basit bir kod ile örnekleyeceğim.

Yukarıdaki kodda $diffStr değişkeni, yazınızın kaç dakika, saat, gün önce eklendiğini gösterecektir. Eğer isterseniz ayı, yılı da ekleyerek herhangi bir tarih formatını “3 gün 8 saat 3 dakika önce” şeklinde bir metine çevirebilirsiniz.