WordPress.org’da eklenti yayınlamak

WordPress.org’da eklenti yayınlamayı olabildiğince kısa ve basit anlatmaya çalışacağım. Rahat uygulanabilmesi için işlem basamakları şeklinde anlatmanın faydalı olacağını düşündüm. Basamaklara geçelim.

  1. Readme.txt dosyasını buradaki örneğe göre hazırlayın.
  2. Hazırladığınız readme.txt dosyasının doğruluğunu burayı kullanarak teyit edin.
  3. Buradan WordPress.org’a hesap açarak üye olun.
  4. WordPress.org’a oturum açın.
  5. Buradaki eklenti yayınlama başvuru formu doldurun ve gönderin.
  6. Başvurunuz onaylandığında bir eposta alacaksınız.
  7. Eklenti başvurunuz onaylandıktan sonra TortiseSVN programını indirin ve kurun.
  8. Bilgisayarınızda eklenti dosyalarınızı koyacağınız klasörlerin depolanacağı bir klasör oluşturun. (ör:Eklentilerim)
  9. Eklenti klasörlerinin bulunduğu klasörü açarak sağ tıklayın ve “SVN Checkout” komutu verin.
  10. Ekrana gelen Checkout penceresindeki “URL of repository” kutusuna epostadaki SVN repository adresini yapıştırın.
  11. Checkout penceresindeki “Checkout directory” kutusunda eklenti dosyalarınızı içerecek klasörün adı yer alacak.
  12. “Ok” dümesine tıklayın. Eklenti klasöründe “branches“, “trank” ve “tags” isminde klasörler oluşacak.
  13. Readme.txt dahil tüm eklenti dosyalarınızı “trank” klasörün içine kopyalayın.
  14. Trank” klasörüne sağ tıklayın ve “SVN Commit…” komutu verin.
  15. Commint penceresinde listelenen dosyaların solundaki işaret kutularını seçin veya “Select / deselect all” komutunu verin.
  16. Commint penceresini “Ok” düğmesine tıklayarak onaylayın.
  17. Ekrana gelecek olan kimlik doğrulama kutusuna WordPress.org’a üye olurken kullandığınız kullanıcı adı ve parolanızı yazın.
  18. Tebrikler eklentiniz WordPress.org’da yayınlandı.

Eklentinizin SVN deposuna gittiğini görmek için gelen e-postadaki “SVN repository” adresinizin sonuna “trunk” dizinini ekleyerek gözatabilirsiniz. Eklentiler sayfasına giderek en yeni eklentiler (Newest plugins) kısmında eklentinizi görebilirsiniz.

Eğer anlaşılmayan bir nokta olursa diye; buraya ve buraya bakabilirsiniz hatta yorum alanı ile tankado’ya da sorabilirsiniz.

WordPress erişim izni hatasını gidermek

Bu sayfaya erişmek için yeterli izniniz yok” veya ingilizce “You do not have sufficient permissions to access this page” hata mesajını alıyorsanız aşağıda tarif ettiğim işlemleri uygulayarak sorunu çözebilirsiniz.
Bu sayfaya erişmek için yeterli izniniz yok ” hatası çoğunlukla wordpress veritabanınızın bazı badireleri atlatamadığı durumlarda oluşuyor. Bir eklenti kurarken veya WordPress’inizi güncellerken böyle bir hata ile karşılaşabilirsiniz.  Bu hatanın olduğu durumlarda bazen ekleti sayfalarına bazen de WordPress’in yönetim paneline giremiyorsunuz.

Okumaya devam et “WordPress erişim izni hatasını gidermek”

tinyMy ve DBKiss: single PHP file db browser

tinyMy, MySQL veritabanlarını yönetmek için hazırlanmış küçük bir PHP betiğidir. tinyMy tek bir PHP dosyasından oluşan çok küçük ve basit bir betik.

Genellikle web üzerinden MySQL veritabanlarını yönetmek için phpMyAdmin kullanılsada bazı durumlarda phpMyAdmin biraz fazla gelebilmekte. phpMyAdmin birçok özelliği bünyesinde barındırıyor, çok fazla dosyadan oluşuyor ve bazen bu dosyaların boyutu ve kodların çokluğu sunucu başarımı açısından sorun teşkil edebiliyor. Ayrıca dial-up gibi düşük bir bağlantı söz konusu olduğunda biraz konfor kaybı olabiliyor. Çok fazla beklentiniz yoksa tinyMy size göre.

Okumaya devam et “tinyMy ve DBKiss: single PHP file db browser”

WP OnlyWire Auto Poster Plugin

OnlyWire (OW) sitesinden daha önce bahsetmiştim. lionstarr‘ın WordPress Blogları için yazdığı eklentiyi biraz revize ederek yeni özellikler ekledim. WP OnlyWire Auto Poster adını verdiğim bu eklenti yazdığım ilk WordPress Eklentisi. Eklentiyi bir süredir test edip hatalarını düzeltiyordum. Bununla birlikte yakında, yazmaya devam ettiğim katma değeri yüksek SEO eklentilerimi buradan WordPress Blogcuları ile paylaşacağım.

Okumaya devam et “WP OnlyWire Auto Poster Plugin”

YARP ile PageBar eklentilerinin uyumsuzluğunu gidermek

WordPress sitenize YARP (Yet-Another-Related-Posts) eklentisi ile PageBar eklentilerini yüklediğinizde YARP’ın yönetim sayfası aşağıdaki hatayı veriyor ve yönetemiyorsunuz.

Fatal error: Cannot redeclare checkbox() in guvenli_dizin/wp-content/plugins/yet-another-related-posts-plugin/options.php on line 134

Hata mesajından yola çıkarak options.php‘nin 134. satırındaki function checkbox() isimli foksiyonunun daha önce de tanımlanmış olduğunu anlıyoruz. WordPress’in plugins dizininde ufak bir arama yaptıktan sonra PageBar eklentisinin kodlarında aynı isimde bir başka fonksiyonun tanımlandığını gördüm. Sorunu çözmek için fonksiyonun ismini checkbox_() şeklinde değiştirip kaydettikten sonra sorun çözüldü. Tabi  options.php içinde çağrı yapılan tüm yerlere de aynı değişikliği uyguladım. Kolay olması açısından kullandığınız editörün düzen menüsündeki bul ve değiştir seçeneğini kullanarak bu işi hızlıca yapabilirsiniz. Aranacak değeri checkbox( değiştirilecek değeri de checkbox_( olarak verdim ve options.php dosyasını sunucuya tekrar yükledim. Bu şekilde yapınca sorun çözülüyor fakat YARP’ın her güncellemesinde bu işlemi yeniden yapmak gerekiyor. YARP’ın geliştiricileri ilgilenir düşüncesi ile bir hata bildiriminde de bulundum.

Aslında checkbox() ve textbox() gibi jenerik isimlerin eklentilerde fonksiyon ismi olarak kullanılmaması gerekir. Bu isimlerin yerine yarp_checkbox() gibi eklentiye özel bir isimlendirme tercih edilebilirdi.

WordPress ile 404 hatalarını tespit etmek

Benim gibi dotclear‘dan wordpress’e göç etmiş bir blogcu iseniz yeni sitenizdeki bazı URL adreslerinin 404 hatası vermemesi neredeyse mümkün değil. Arama motorlarının indekslemiş olduğu URL adresleri sitenizde karşılık bulmuyorsa başınız biraz dertte demektir. Arama motorları bu adresleri periyodik olarak ziyaret ettikleri için sürekli 404 hataları ile karşılaşacakdır. 404’lerin ele geçirdiği bir site arama motorlarının gözünde değer kaybeder.

WordPress altyapısını kullanan sitenizin derinliklerindeki geçersiz URL adresleri haberiniz olmayan birçok 404 hatasını üretmektedir. Şahsen uzunca bir süre farkında olmadığım ve aslında kolayca tespit de edilemeyecek bu durumu düzeltmek biraz zamanımı aldı doğrusu. Bu sorunu gidermek çin aşağıdaki PHP kodlarını yazdım.

Kodları wordpress temanıza ekleyerek siz de kullanabilirsiniz. Kodlar sitenizde var olmayan bir adres talep edildiğinde, ilgili adresi ve isteğin kimden geldiği gibi bilgileri eposta adresinize göndererek raporlayacaktır. Bundan sonra iş gelen raporlara göre kırık bağlantıları onarmaya geliyor. Bir hafta içerisinde posta kutumda 2000’e yakın rapor birikti. Okumaya devam et “WordPress ile 404 hatalarını tespit etmek”

WordPress’i Hızlandırma ve Performans İpuçları – I

wordpress-performans-hız

WordPress’inizin başarımından (performansından) şikayetçi iseniz bu yazı tam size göre. WordPress başarımı hakkında sürekli yazmayı düşündüğüm bu yazı dizisinin ilkinde başarım artırmaya yönelik WordPress bileşenleri üzerinde duracağım.

WordPress (WP)’in performansını artırmak için kullanılan WP-Cache, Hyper Cache, WP Super Cache ve 1 Blog Cacher gibi birçok  eklenti var. WP sunucuyu çok fazla yoran bir script değil fakat kullanılan eklentiler ve temanızın özellikleri sunucuya yük getirebilir. Bu da sayfalarınızın açılma süresine olumsuz etki eder. Hatta sunucunuzun yöneticisi bu durum hakkında sizi uyarabilir.  WP’e geçtikden sonra eklentilerin sayfa açılma/oluşturma hızını nekadar etkileyebileceğini iyi öğrendim. WordPress başarımını artırmak için önbellekleme (Caching) eklentilerini kulllanmak iyi bir çözüm olabilir.

Okumaya devam et “WordPress’i Hızlandırma ve Performans İpuçları – I”

eniXma: Online özgür ve açık kaynak yazılım dergisi

eniXma isminde yeni bir linux dergisinin varlığını büyük bir sevinç ve heyecan içinde haber veriyorum. Bazıları günaydın diyebilir, haklılar ;) IBM’in çıkarttığı Özgür Yazılım ve Haber dergilerinden sonra Türkçe olarak hazırlanan bu güzel derginin mevcut açığı kapatmada, özgür yazılım hareketinin daha geniş kitlelere yayılması ve özgür yazılımın ülkemize sağlayacağı faydaya katkıda bulunması açısından sevinç verici. Umarım daimi olur. eniXma’nın bu ayki sayısının içeriğinde şunlar varmış:

  • Basket
  • Ekran Kaydediciler
  • Katapult
  • Firefox 3.0
  • GPG Nedir?
  • OTR Şifreleme
  • Mandriva’da Disk Yönetimi
  • Size Özel Fedora
  • Linpus Linux Lite
  • OpenSUSE 11.0

eniXma isminde yeni bir linux dergisinin varlığını büyük bir sevinç ve heyecan içinde haber veriyorum. Bazıları günaydın diyebilir, haklılar ;) IBM’in çıkarttığı Özgür Yazılım ve Haber dergisinden sonra Türkçe olarak hazırlanan bu güzel derginin mevcut açığı kapatmada, özgür yazılım hareketinin daha geniş kitlelere yayılması ve özgür yazılımın ülkemize sağlayacağı faydaya katkıda bulunması açısından sevinç verici. Umarım daimi olur. eniXma’nın bu ayki sayısının içeriğinde şunlar varmış:

  • Basket
  • Ekran Kaydediciler
  • Katapult
  • Firefox 3.0
  • GPG Nedir?
  • OTR Şifreleme
  • Mandriva’da Disk Yönetimi
  • Size Özel Fedora
  • Linpus Linux Lite
  • OpenSUSE 11.0

Okumaya devam et “eniXma: Online özgür ve açık kaynak yazılım dergisi”

Google Summer of Code: PHP-Based Docbook renderer

Burada PhD adındaki,  Docbook formatlı dökümanları chm ve pdf gibi daha taşınabilir ve yaygın formatlara çeviren bir proje yer alıyor. Şimdiden PHP için oldukça kapsamlı bir başvuru klavuzu chm formatına çevrilmiş ve indirilmeye hazır. PHP programcılarının mutlaka elinin altında hazır olması gereken bir klavuz. Siteden indirirken sorun olursa buradan da indirebilirsiniz.

Hertürlü projeniz için: EmbededMySQL

Projelerinizde gömülü olarak kolayca kullanabileceğiniz bir MySQL paketi hazırladım. Google’un bile kullandığı MySQL,herzaman performansı ve rahat kullanımıyla dikkat çeker. Ticari olmayan projelerdeki kullanımında herhangi bir kısıtlama olmayan MySQL veri tabanı sunucusunu, kolay bir şekilde her türlü projenizde kullanabilirsiniz.

Okumaya devam et “Hertürlü projeniz için: EmbededMySQL”

max_user_connections hatası almak için güzel bir yol söyleyebilirim

PHP kodlarken veritabanı sorgularında kolaylık sağlasın diye SQL cümlemizi alıp sorgu sonucunu döndüren execSQL, execQuery vs gibi fonksiyonlar tanımlayıp kullanırız.  Böylece her seferinde sunucu bağlantısı ve veritabanı seçimi ile uğraşmaktan kurtulmuş oluruz. Tabi kurallara uyan tertipli her programcı gibi fonksiyonun sonunda da mysql_close ile açtığımız bağlantıyı sonlandırmayı unutmayız. Aslında bazen unutmalıyız. Peki neden?

PHP kodlarken veritabanı sorgularında kolaylık sağlasın diye SQL cümlemizi alıp sorgu sonucunu döndüren execSQL, execQuery vs gibi fonksiyonlar tanımlayıp kullanırız.  Böylece her seferinde sunucu bağlantısı ve veritabanı seçimi ile uğraşmaktan kurtulmuş oluruz. Tabi kurallara uyan tertipli her programcı gibi fonksiyonun sonunda da mysql_close ile açtığımız bağlantıyı sonlandırmayı unutmayız. Aslında bazen unutmalıyız. Peki neden?
Okumaya devam et “max_user_connections hatası almak için güzel bir yol söyleyebilirim”

PHP ile garantili mail göndermek

PHP’nin resmi sayfasında mail komutunun kullanımı hakkında şu bilgiler yer alıyor:

Kullanımı:

bool mail  ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

Mail komutunda kullanılması zorunlu parametreler:

  • $to: PHP ile mail göndereceğiniz kişinin adresi. Tipi string’dir.
  • $subject: Mail’in konusu. Tipi string’dir.
  • $message: Göndermek istediğiniz mail’in içeriği. Tipi string’dir.

Not: String tipine Türkçe’mizde bazen katar bazen de karakter dizgesi adı verilmektedir.

Dördüncü ve beşinci parametrelerin kullanılması zorunlu olmamakla birlikte görevlerini kısaca söyle açıklayabiliriz.

  • $additional_headers: Bu kısımda, gönderen adresi, karbon kopya (CC) adresi ve gizli karbon kopya (BCC) adresi gibi adresler belirtilebilir. CC adresi, gönderilen mailin bir kopyasının da (karbon kopya) başka bir adrese gönderilmesini sağlar. CC alıcısı gelen mail’in başlık bilgilerinden mail’in asıl alıcısının kim olduğunu görebilir.  BCC, CC ye benzemekle birlikte, tek farkı, asıl alıcı ile CC alıcısının mail’in bir kopyasının da BCC adresine gönderildiğini bilememesidir. Mail sunucusu başlık bilgilerine bu adresi dahil etmez. Bu kısımın da veri tipi String’dir.
  • $additional_parameters: SendMail yazılımına parametre yollamak için kullanılıyormuş. Ayrıntısını şimdilik bilemeyeceğim.

PHP’nin resmi sayfasında mail komutunun kullanımı hakkında şu bilgiler yer alıyor:

Kullanımı:

bool mail ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

Mail komutunda kullanılması zorunlu parametreler:

  • $to: PHP ile mail göndereceğiniz kişinin adresi. Tipi string’dir.
  • $subject: Mail’in konusu. Tipi string’dir.
  • $message: Göndermek istediğiniz mail’in içeriği. Tipi string’dir.

Not: String tipine Türkçe’mizde bazen katar bazen de karakter dizgesi adı verilmektedir.

Dördüncü ve beşinci parametrelerin kullanılması zorunlu olmamakla birlikte görevlerini kısaca söyle açıklayabiliriz.

  • $additional_headers: Bu kısımda, gönderen adresi, karbon kopya (CC) adresi ve gizli karbon kopya (BCC) adresi gibi adresler belirtilebilir. CC adresi, gönderilen mailin bir kopyasının da (karbon kopya) başka bir adrese gönderilmesini sağlar. CC alıcısı gelen mail’in başlık bilgilerinden mail’in asıl alıcısının kim olduğunu görebilir.  BCC, CC ye benzemekle birlikte, tek farkı, asıl alıcı ile CC alıcısının mail’in bir kopyasının da BCC adresine gönderildiğini bilememesidir. Mail sunucusu başlık bilgilerine bu adresi dahil etmez. Bu kısımın da veri tipi String’dir.
  • $additional_parameters: SendMail yazılımına parametre yollamak için kullanılıyormuş. Ayrıntısını şimdilik bilemeyeceğim.

Okumaya devam et “PHP ile garantili mail göndermek”

Revolution OS: Linux, Gnu ve OpenSource

 GNU/Linux’un ve GNU felsefesinin nasıl çıktığını, nasıl geliştiğini ve bu gelişim süreci esnasında yaşanan olayları GNU dünyasının efsaneleri kendi ağızlarından anlatıyorlar. Pek fazla teknik bilgi gerektirmeden izlenebilecek bir film olan Revolution OS Linux, GNU ve Open Source konusunda  güzel bilgiler veriyor.

Oyuncular: Linus Torvalds, Richard M. Stallman, Eric Raymond, Bruce Perens, Larry Augustin, Michael Tiemann, Brian Behlendorf, Frank Hecker, Chris DiBona, Nick Moffitt, Rob Malda, Donnie Barnes

GNU/Linux’un ve GNU felsefesinin nasıl çıktığını, nasıl geliştiğini ve bu gelişim süreci esnasında yaşanan olayları GNU dünyasının efsaneleri kendi ağızlarından anlatıyorlar. Pek fazla teknik bilgi gerektirmeden izlenebilecek bir film olan Revolution OS Linux, GNU ve Open Source konusunda  güzel bilgiler veriyor.

Oyuncular: Linus Torvalds, Richard M. Stallman, Eric Raymond, Bruce Perens, Larry Augustin, Michael Tiemann, Brian Behlendorf, Frank Hecker, Chris DiBona, Nick Moffitt, Rob Malda, Donnie Barnes

Okumaya devam et “Revolution OS: Linux, Gnu ve OpenSource”

3B Linux çekirdek animayonu

Üstteki resimler Linux çekirdek kaynak kodlarının 3-boyutlu animasyonuna ait. Kaynak kod bağımlılıklarının hareketli bir animasyonla gösterildiği filmde çekirdeğin ne kadar kompleks olduğunu daha iyi görülebiliyor. Görüntüyü daha iyi anlamak için animayon hakkında şu açıklamaları yapmakta fayda var;

Yeşil kutular dosyaları temsil ediyor.
Yeşil ağaç, işletim sisteminin dizin yapısını temsil ediyor.
Mavi hatlar fonksiyonların bağımlılıklarını,
Kırmızı hatlar değişken bağımlılıklarını,
Sarı parlak kutular dosya boyut değişikliklerini,
Yeşil parlak kutular dizinler arasında taşınmış dosyaları,
Kırmısı parlark kutular yeni dosyaları temsil ediyor.

Animasyonlar:
http://www.pabr.org/kernel3d/245.mpg (384×288, 2000 frames)
http://www.pabr.org/kernel3d/120-241.mpg (384×288, 1400 frames)
http://www.pabr.org/kernel3d/120-241s.mpg (320×240, 1200 frames, low motion)

Kaynak: http://www.pabr.org/kernel3d/kernel3d.html

Script çalışırken çıktı vermek

Bir PHP script’inin çıktısı script’in çalışması tamamlandıktan sonra gönderilir. Scrip çalışmaya devam ederken sayfada/ekranda bir çıktı gözükmez. Script’in oluşturduğu tüm çıktılar Output Buffer (ob) adı verilen tamponda tutulur. Programcı isterse bu tamponu ob_ fonksiyonlarıyla kontrol edebilir. Tampondaki içeriği istenildiği anda çıktı vermek için için ob_flush() komutu kullanılabilir. ob_flush cağrıldığında o ana kadar çıktı tamponuna biriktirilen tüm içerik tarayıcıya bir header yardımıyla gönderilir ve görüntülenmiş olur.

Çıktının zamanlamasını ayarlayarak göze hoş gözüken sayfa yüklemeleri elde edilebilir. Yine ob_flush ile uzun bir işlemi yerine getiren script’in, kullanıcıyı  o anda yağtığı iş hakkında bilgilendirmesi için faydalıdır. Gerektiğinde bu özellik kullanılırsa ziyaretçinin sayfa izleme kalitesi artacaktır.

Aşağıdaki kodda  ob_imlicit_flush komutunun kullanımına örnek yer alıyor. Bu komut çıktı tamponunu devre dışı bırakır ve echo gibi her çıktı komutunun ardından çıktının anında tarayıcıya gönderilmesini sağlar. Aşağıdaki kodun çalışan halini buraya tıklayarak izleyebilirsiniz.

Dikkat edilmesi gereken bir nokta, ob_flush komutundan hemen sonra flush() komutunun da kullanılması gerektiğidir.

Insan doğrulama için değişik bir yöntem

CAPTCHA insan doğrulama için ençok kullanılan yöntem. CAPTCHA resimli yöntemde (bu sene OSYM sonuçları açıklamak için de kullandı) eğri büğrü (robotik bir yazılımın okuyabilmesi çok güçtür) harfleden oluşan bir kelimeyi kutuya girmemizi istiyor. Kodu doğru olarak okumayı başarır ve gönderirseniz karşı taraftaki yazılım isteği yapanın bir program değil de gerçek bir bir insan olduğuna karar veriyor. Aksi takdirde ilgili servisi kullanmanıza izin vermiyor. Web in kirlenmesi ve haksız web servisi kullanmanın önüne geçmek adına, robot yazılımların kolaylıkla çözemeyeceği bu resim kodları kullanmak son zamanlarda çok işe yarıyor.

Resim kodu kullanmanın yanında daha basit ilginç bir çözüm ise tarayıcı tarafında javascript kullanarak insan etkileşimi teyit etmek. Örnek vermek gerekirse bir insan formu dolduruken kutuların içine tuş basımı gerçekleştirir (onkeydown-onkeyup) veya formu gönderirken submit düğmesinin tıklama (onmousedown-onmouseup-onmousemove) olayını tetikler. Ancak robotik bir yazılım bunların hiçbirini yapmayacağından fark kolaylıkla tespit edilebilir. Javascript ile onKeyDown ve onMouseMove olayları yardımıyla forma verisine bir onay kodu eklenebilir.

Kaynak: http://www.0x000000.com/?i=224

Google javascript ‘i dikkate alıyor

Burada söylendiğine göre;

“/human”+Math.round(99999*Math.random())+”.png”

gibi bir javascript kodu ile dosya ismi olusturulan bir sayfa var diyelim. Bilinenin aksine arama motorları bu sayfadaki javascript’i görmezden gelmiyor (1).  Web sunucusunun kayıtlarından google bot’unun javascript kodu bulunan sayfayı taradıktan sonra aşağıdaki gibi bir istekte bulunduğu görülüyor. Bir ölçüde de olsa javascript içeriğinin taranması güzel bir durum.

66.249.66.73 crawl-66-249-66-73.googlebot.com – -[29/Jul/2007:15:54:11 +0100]
GET /human HTTP/1.1 404 211

[1] Googlebot’unun javascript içeriği de bir ölçüde de olsa taradığını görmüş olmak güzel. [1] – Burada ve burada da geçtiği üzere javascript arama motorları tarafından tanınmayan bir öğe olarak bildirilmiş. Ayrıca javascipt li içerik varsa <noscript> tag’i ile tekrar sunulması tavsiye edilmiş.