Trim is a lifesaver

Selection_004I’m working on an application that parsing an XML document. Actually this is an KML document and it has some coordinate informations. I’m reading this document via SimpleXML. This is very usefull and easy library. Thanks to PHP Team for this library but there is a very very small thing that when you get data in a tag that can return the whitespace characters. For example New Line Character “\n”, Tab character “\t”, Space character ” “ etc.

(daha&helliip;)

Design Pattern – Başlangıç giriş önbilgi ne nerde nasıl hangi

java design patternDesign Pattern yada Türkçe ifadeyle Tasarım Desenleri, Tasarım Şablonları. Neden böyle bir mantığa ihtiyaç duyulmuş? On yıllar boyunca çalışacak olan bir projeniz varsa bunu nasıl geliştirirsiniz? Spagetti yöntemle mi? Nesnel yaklaşımla mı? Event driven mı? Veriler nasıl işlenecek ve saklanacak? Kullanıcı ne yapabilecek ne yapamayacak? Hiyerarşik şekilde bir yetkilendirme sistemi olacak mı? Beklenmeyen bir durum olduğunda uygulama nasıl davranacak? Bu soruların hepsi Project Manager ve müşteri tarafından cevaplanır ve bu cevaplar sayfalar dolusu olabilir. Ayrıca proje geliştirilme esnasında farklı sorularla karşılaşılır. Tümünün bir şekilde cevaplanıp uygulamaya konulması gerekir. Peki sürekli geliştirilebilir, çalışan ve müşterinin isteklerini yerine getiren bir uygulama nasıl yazılır? (daha&helliip;)

Upload yaparken 500 hatası almak

Localde bir uygulama yapıyorsunuz ve takır takır çalışıyor. Dosyayı upload yapıyor, PHP ile dosya üzerinde istediğiniz işlemi yapabiliyorsunuz, dosyayı istediğiniz yere kaydediyosunuz vs vs. Sıra uygulamayı internete taşımaya geliyor ve açıyorsunuz FileZilla’yı ve uygulamayı siteye gönderiyorsunuz. Uygulamayı denemek için adres çubuğuna gelip site adını yazıyosunuz. Uygulama sorunsuz açılıyor. Yüklemek için bir dosya seçmenizi istiyor. Yüklemek istediğiniz dosyayı seçiyorsunuz ve tataaa. “500 Internal Server Error” alıyorsunuz. Ama localde herşey düzgündü. Hiçbir problem yoktu. Hatta unit testlerinden bile geçmişti. Nerden çıktı bu problem şimdi. Sorun sizden kaynaklanmıyordu. Çünkü bu sıradan bir PHP Exception değil. Serverın kendisinde bir sıkıntı var. 500 hataları server ile alakalıdır. Sizin scriptinizle alakalı değildir.

Öncelikle problem çözme aşamalarından ilki olan problemin ana kaynağını bulma konusundan başlıyoruz. Problem ne zaman oluşuyor? Dosya yükleyince. Peki biz upload yaparken scriptimiz Apache’nin bir kısıtlamasına müdahale etmeye çalışıyor mu? Hayır. O zaman bizim scriptimizde bir problem yok. Apache’nin kendisinde bir problem var. Artık öyle bir devirde yaşıyoruz ki sizin karşılaştığınız problemle çoook yüksek bir ihtimalle başkası da karşılaşmıştır hatta çözmüştür. Bu yüzden öncelikle Google amcamıza danışıyoruz. (daha&helliip;)

PHPUnit Kullanımı

TDD bildiğiniz gibi Yazılım Geliştirme dünyasının en önemli kavramlarından biri. Günümüzde her türden yazılım için TDD gerekebiliyor. En küçüğünden en büyüğüne kadar. Bazen bir library yazarken bazen bir class yazarken işlerin gerçekten beklendiği gibi gidip gitmediğini bilmek gerekir çünkü yazılımlar o kadar karışıktır ki ufak hatalar büyük sonuçlara sebep olabilmektedir. Sizin yada başkasının bilmeden yaptığı bir hatanın tüm uygulamayı mahfetmesini istemezsiniz değil mi? İşte bu yüzden TDD kullanmak zorundayız.

PHP her ne kadar aslında nesne yönelimli bir dil olmasa da artık OOP desteği baya ilerledi. Bundan birkaç yıl önce neredeyse tüm PHP scriptleri spagetti şeklinde yazılıyordu ama artık PHP geliştiricileri olayın önemini anladı ve yavaş yavaş OOP mantığını kullanmaya başladılar. Sonra birşey daha farkettiler. OOP tek başına herşeyi çözmüyor. Kodun tekrar kullanılabilirliği problemini çözüyor, geliştirme sürecini kolaylaştırıyor, vs vs birçok faydası görülüyor ama bir noktada yeterli olmuyor. Projeye başladıktan birkaç ay sonra işler sarpasarmaya başlıyor ve bir library’nin farklı versiyonlarında bile proje çökebiliyor yada beklendiği gibi çalışmamaya başlıyor. Bu gibi problemleri halletmek için Test Driven Development kavramını PHP’ye uyarlamak gerekiyor. (daha&helliip;)