Bloguna yazı yazmayı özlemek

Etiketlenen : , , , , ,

Bir süredir hem PHP hem de C# (henüz ASP.NET değil, bildiğin C#) öğrenmeye ayırdığım vakit yüzünden bloguma yeni yazı bile eklemiyordum. Aslında bu genel bir durum, eğer yapmakta olduğum bir işe bir kaç gün ara vermişsem o verilen aranın daha da büyümesine engel olamıyorum. İşte bu yüzden öğrenme çabamın aralıksız yürümesi için bazı şeyleri gözardı etmem gerekiyor. Son 2 ayda ücretini peşin ödediğimiz spor merkezine sadece 3 kez gitmiş olmak da bunlardan birisi.  Dün akşam da gidemedik ama bugün kesin gidilecek. :)

Kendime verdiğim sözleri başkalarına verdiğim sözlerle aynı seviyeye çekip bugün yeni kararlar almaya çalışacağım. Her ne kadar hanım kafan patlayacak dese de, hem PHP hem C# öğrenmeye devam ederken, satın aldığım İngilizce Eğitim Seti gelir gelmez bir de ona zaman ayıracağım. İngilizce yazılanları anlayıp yazamamak,  konuşamamak kötü birşey benim için. Keşke 5 yaşında Fono ile ingilizce öğrenmeye başlamasaydım. :) Üstelik spor faaliyetimi aksatmadan blogumu güncel tutmayı bile başaracağım. Belki de kilolarımı 90 lar seviyesine indirmeyi de kendime hedef ve söz olarak versem iyi olacak.

Bloguma uzun aradan sonra ayırabildiğim bu vakti burada sona erdiriyor çok yakında OOP (Object-oriented programming) üzerine yazılarımla daha sık görüşeceğiz diyorum. İlginize çok teşekkür ediyorum.

PHP yazarken bunlara dikkat!

Etiketlenen : , , ,

PHP diline hakim olmaya karar verdiğimde öncelikle bu işin püf noktalarını da öğrenmem gerektiğine inanıp biraz araştırma yaptım. Aşağıda sizin de yapabileceğiniz hatalar ve doğru yöntemleri göreceksiniz.

Gelen verileri aynen kullanıyorsanız hack için davetiye gönderiyorsunuzdur.

Mesela aşağıdaki şekilde kullanım hatalıdır:

<?
echo(“<p>Arama sonuçları: ” .
$_GET['arama'] . “.</p>”);
?>

htmlspecialchars kullanmak iyidir ancak yeterli değildir:

<?
echo(“<p>Arama sonuçları: ” .
htmlspecialchars($_GET['arama']) . “.</p>”);
?>

“arama” diye bir query’nin olup olmadığına bakar, <?php ile başlar ve bağlama operatörü olarak “.” kullanmak yerine ENT_QUOTES argümanı kullanılarak aşağıdaki şekilde bir kullanım en ideal olandır :

<?php
if (isset($_GET['query']))
{
echo ‘<p>Arama sonuçları: ‘, htmlspecialchars($_GET['arama'], ENT_QUOTES), ‘.</p>’;
}
?>

Bir başka sorun ise for döngüleri içerisinde count komuturla array boyutunu almak. Her dönüşte tekrar tekrar aynı değeri aldırmak istemeyiz değil mi?

$deneme = array(“bir”,”iki”,”üç”);
for (i==0;i<count($deneme);$i++){
// …
}

Bu döngü boyunca değişmediği belli olan $deneme arrayının boyutu tekrar tekrar alınmakta. Bu nedenle önce bir değere eşitlenmesini önerilir.

$deneme = array(“bir”,”iki”,”üç”);
$max = count($deneme);
for (i==0;i<$max;$i++){
// …
}

Ayrıca tarih formatınızı bir kez tanımlayarak tek bir yerden tarih biçimlendirmesi yapabilirsiniz.

define (“TARIH_BICIMI” , “j F Y”);
şeklinde tanımlama yaparsanız kod içerisinde print(date(TARIH_BICIMI)); olarak kullanabilirsiniz.

Tarihler konusunda işinie yarayacak bir bilgi de aşağıdaki kullanım şeklidir.

<?php
$gelecekHafta = time() + (7 * 24 * 60 * 60);
// 7 gün; 24 saat; 60 dakida; 60 saniye
echo ‘Şimdi:         ‘. date(‘d-m-Y’) .”\n”;
echo ‘Gelecek Hafta: ‘. date(‘d-m-Y’, $gelecekHafta) .”\n”;
// yada strtotime() işlevi ile kullanımı
echo ‘Gelecek Hafta: ‘. date(‘d-m-Y’, strtotime(‘+1 week’)) .”\n”;
?>

Ayrıca echo kullanmak print kullanmaktan daha hızlıymış. Tıpki else if kullanmanın switch kullanmaktan hızlı olacağı gibi. Tabi else if sayısı çok fazla değilse.

Kullanılan hafıza çok değerlidir. Bu yüzden işimiz biten arrayları unset($arrayadi) ile kaldırmalı veya NULL değerine eşitlemeliyiz.

++$i her zaman $i++ dan daha hızlı çalışır. Ama ikisi farklı şeylerdir. ++$i kullanmak $i değerini kullanmadan önce artırır.

Zaman zaman bu türdeki dikkat edilmesi gerekenleri blogumda yazmaya devam edeceğim.  PHP nin çok fazla ayrıntısı olduğunu, bazı kodların 99 çeşit kullanım şekli olduğunu öğrendim. :)

PHP öğrenmek serisi : 2

Etiketlenen : , , , , , , ,

Kaldığımız yerden devam edelim;

Bir önceki yazımda değişkenleri, operatörleri, sabitleri ve syntax ile ilgili bazı bilgilere değinmiştim. Bu yazımda akış kontrol fonksiyonlarından neler öğrendiğimi yazacağım.

Öncelikle bilmeyenler için hatırlatalım akış kontrolleri değişkenlerin değerlerine göre sizi yönlendiren fonksiyonlardır. Yani bir yazılım yazıp 2 ile 5 i toplatırsınız ve 6 dan büyük olduğu için ekrana “6 dan büyük” diye yazdırabilirsiniz, ama bunu her sayı için tekrar tekrar yazarsanız ne bu işin sonu gelir ne de yazılım sağlıklı çalışır. Bu nedenle akış kontrolleri aslında yazılımın can damarıdır.

if ifadesi:

if (koşul) {
// koşul uygunsa çalışacak kısım
}

Yani eğer koşul içerisindekiler doğru (true) ise { ile } aralığındakileri çalıştırmamız gerekir. Koşulun olumsuzu için de işlem yapmamız gerekiyorsa;

if (koşul) {
// koşul uygunsa çalışacak kısım
}else{
//koşul uygun değilse çalışacak kısım
}

şeklinde yazabiliriz. Kısa bir örnek vermek gerekirse:

<?
$test = 3;
if($test<5){
echo $test.” beşten küçük”;
}else{
echo $test.” beşten küçük değil”;
}

Bir de koşulun her hali farklı olması durumunda çalışacak bir if .. else if .. fonksiyonu var. Kullanımı aşağıdaki gibidir.

if (koşul1){
// koşul1 true ise
}elseif(koşul2){
//koşul2 true ise
}elseif(koşul3){
//koşul3 true ise
}else{
// yukarıdaki koşulların hiçbirisi true değilse
}

Ancak çok sayıdaki koşul için üstteki gibi kullanım yerine aşağıdaki gibi switch fonksiyonunu kullanmayı tercih edelim.

switch (deyim) {
case sonuc1:
// deyimin sonucu sonuc1 e eşitse çalışacak kısım
break;
case sonuc2:
// deyimin sonucu sonuc1 e eşitse çalışacak kısım
break;
default:
//üstteki hiçbir sonuçtan biri değilse default olan çalışacak kısım
break;
}

Burada break (araya gir) ifadesi ile switch ifadesinin çalışması sonlandırılır.
Eğer break ifadesini eklemezseniz default değere kadar çalışmaya devam edecek, yanlış yorumlamaya sebep olacaktır.

? operatörünü kullanmak (ternary)
Kısaca bunu (deyim) ? deyim_dogru_ise : deyim_yanlis_ise ; şeklinde gösterebiliriz. Bir örnekle verirsek;

<?php
$deneme = “orta”;
$buluver = ($deneme == “iyi”) ?  “İyi durumda” : $deneme.” durumda”;
$echo $buluver;
// $buluver değeri burada orta durumda olarak dönecektir.
?>

Burada anlatılan “if” fonksiyonu öğrenmeniz gereken en önemli şeyler sıralamasında bana göre ilk 3 içerisindedir.

Bu yazıdaki ifadelerim daha çok ders verir nitelikte olsa da ben kendi anladığım ve okuyana da birşey katacak şekilde yazmak istediğimden böyle oldu. Bir sonraki konuda döngülere değineceğim. Teşekkürler.

FFextra.com da kullanıcı ve kod kaynaklı bir hata ve sonrası

Etiketlenen : , ,

Bir kaç gündür hiç istemediğim kadar kişinin sanki tavuklarına kış demişim gibi üzerime gelmesinden bunaldım. PHP öğrenmeye başladığımı, bunu da bir uygulama üzerinde geliştirdiğimi belirtmiştim. Evet yeni yeni PHP öğrenebilirim ancak program algoritmasına yeterince hakim olduğuma inanıyorum. Yazdığım PHP kodlarında yorumlamasını yapabilecek kadar bilgi sahibiyim.

Dün gece yarısı aklıma gelen bir fikri kodlara dökerken çalışıp çalışmadığını tam test etmediğim bir fonksiyonu da webe gönderme gafletinde bulundum. Oysa her fonksiyonu tek tek önce kendi başına deniyor, gelen sonuçlara göre asıl koduma ekliyordum. Her programcının yapabileceği bariz bir hataydı. Ancak bunu düzeltmem çok uzun sürmedi.

Yapmaya çalıştığım şey friendfeed.com üzerinde BeniTakipEtmiyor isminde bir arkadaş listesi oluşturanlar www.ffextra.com a girdiklerinde onun takip ettiği ama onu takip etmeyenleri bu arkadaş listesine eklemekti. Bu konuda hiçbir sorun yoktu. İki aşamalı kod içerisinde bu kısım gayet sağlıklı çalışıyordu.

Ancak ikinci fikir olan bu kişileri Home Feed kısmından çıkarma kısmında basit bir hata vardı. API tarafına abonelik iptal için gönderdiğim array şu şekildeydi.

‘list’ => “list/home”

Tabi bu işlem sonrası sonuç çıkmayınca list keyini tümden kaldırdım. Bu kullanıcıdan tümüyle aboneliği iptal etmek anlamına geliyor. Yerine ne yazacağımı API dökümanından bulmalıydım. Bu esnada deneme yapan bir kaç kişi malesef tek taraflı takip ettiği kişilerden tamamen abonelik iptali yaşadılar. Bu iptallere http://friendfeed.com/settings/modifications adresinden erişilebilir ve tekrar abone olabilirler. Yani sadece kullanıcıya ikinci bir iş çıkardım. Hatayı farkedip aşağıdaki gibi bir düzeltme yaptığımda sistem istediğim gibi işliyordu.

‘list’ => “home”

Ancak nasıl olduysa ben kodu denerken mağdur ettiğim kullanıcılardan birisi ilk günden beri bana afedersiniz bok atmak için fırsat tepen, daha önce FriendFeed için 3. parti yazılımlar üreten Ahmet Alp Balkan a ulaşmıştı. Ahmet için gün doğmuş olsa gerek, resimde de görüleceği üzere hemen siteye girip gözleriyle olayı görmek istedi. Ancak umduğu sonucu alamadı. Sistem olması gerektiği gibi çalışıyordu. Bunu friendfeed.com üzerinde paylaşarak, bana amatör programcı sıfatını takarak elinden gelen tüm gayretle saldırısını yaptı.

vt

Sistemi denememiş, böyle bir sorunu görmemiş olan ama benimle ne alıp veremediklerini çözemediğim bir kısım yüzyüze de tanışma fırsatı bulduğum insanlar da ateşin altına odun atarak desteklerini sundular.

Evet geri dönülebilir şekildeki bu hatayla, beni lekelemek için fırsat kollayan kişilerin kucağına düşmüştüm. Bu fırsatı her şekilde değerlendirmekten çekinmeyen sözde arkadaşların, kendimi savunmama da takılmaları, bir de buradan vuralım demelerine hiç şaşırmıyordum. Eleştiriye açık olduğum kadar beni karalamak için yapılan eleştirilere de sert cevap vermekle tanınırım.

Çok sevdiğim bir söz vardır; “Bir lafa bakarım laf mı diye, bir de söyleyene bakarım adam mı diye?”.  Bana söyledikleri sözleri düşünüyorum da bu söz tam o anda kullanılacak sözlerden. İşte cevap vermek zorunda kaldığım ama bunu bile anlamak istemeyen, elime düştü ağzına sıçayım bunun hemen diyen kişilerle mümkünse yollarım kesişmesin istiyorum.

Açıklamalarıma ve özürlerine karşılık olarak benden özür dileyen, takip etmekten vazgeçip geri dönen anlayışlı insanlara da teşekkür etmek istiyorum. Dinlemesini bilen insanları bir başka seviyorum. Herkes hata yapar, ama hata önce sahibine iletilir.  Burada yapıldığı gibi kahpece yapılmaz (http://ff.im/7oVYC).

Ayrıca kendini bu işin profesörü sanıp kendinden başkasının aynı işleri yapamayacağına ve amatör olduğuna inanan Ahmet Alp Balkan kardeşimin (yaklaşık 12 yaş fark var aramızda) bu ukala ve kendinden başkasını küçük görme huyundan vazgeçmesini diliyorum.  Kendisi iyi bir yazılımcı olabilir, hatta daha ffextra fikri varken bile görüşmek istedim, ancak beni yeni yetme hiçbirşey bilmeyen, yeni PHP öğrendiğim için yazılıma yeni merak salmış biri sanmasını anlamıyorum.

www.ffextra.com uygulaması sizin izniniz olmadan sizin adınıza hiçbir şekilde friendfeed.com aboneliklerinize dokunmaz, sizin adınıza post göndermez. Hiçbir OAuth şifrelemesi kaydedilmez. Bundan sonra sitedeki hiçbir yeni uygulama yeterince test edilmeden kullanıma açılmayacaktır. Mağdur olduğunu düşünen arkadaşlardan özür dilerim.

FFextra: Sizi takip etmeyenleri ayrı listeye almak.

Etiketlenen : , ,

ffextraBugün geliştirdiğim yeni bir özellik sayesinde artık sizi takip etmeyenleri BeniTakipEtmiyor isimli ayrı bir listeden görebileceksiniz. Bunun için önce http://friendfeed.com/friends adresinden “BeniTakipEtmiyor” (aynen yazın) isminde “Yeni arkadaş listesi” oluşturalım. Daha sonra tek yapmanız gereken http://www.ffextra.com a giriş yapmak. Artık sizi takip etmeyen ama sizin takip ettiğiniz kişilere http://friendfeed.com/list/benitakipetmiyor sayfasında göreceksiniz. Artık arkadaşlar menüsünde Ana Feed vs yanında BeniTakipEtmiyor diye bir bölüm olacak. BeniTakipEtmiyor listenize geçirilen kullanıcıları Home (Ana Feed) üzerinden kaldırıyoruz. Böylece sizin girdilerinizi birileri beğenmeden veya yorumlamadan görmeyen kişileri RSS reader ile onların ne yaptığını takip eder gibi görüyorsunuz. Sizi takip etmeye başladıklarında tekrar FFextra girişi yaparsanız takip eden kişiyi Home (Ana Feed) tarafına taşıyor :)

FFExtra hergün bu kadar gelişirse eminim çok işinize yarayacak bir tool olarak favori siteleriniz arasına girecektir.

bizimhost internet hizmetleri interaktif proje tek parola burçlar vijital Pronected
View my FriendFeed