Node İle Robot Yazılımı: Robot Hazır!

Node.js ve Php ile yapay zekaya sahip Beybut Robot’u geliştirmeye devam ediyorum. Bundan önceki yazılarımda Node.js kurulumu, hoş geldin iletisi gibi bilindik işlemleri anlatmıştım. Bu yazımda yapay zekaya adımımı atacak; Beybut Robot’u konuşabilir hale getireceğim. Başka bir deyişle, işin asıl bölümüne tanıklık edeceksiniz.

Beybut Robot’u geliştirme aşamasındaki yapay zeka işlemlerinde PHP ağırlıklı çalışmaya karar verdim.  Node.js’yi yalnızca iletişim amacıyla kullanacağım. Yorumlayıcı ve güvenlik dosyamız “suzgec.php” bu açıdan bizim İngiliz anahtarımız olacak. Özetle, Ön yüzden suzgec.php’ye ileti gönderen kullanıcının iletisini bu Php dosyası yorumlayacak; sonuç elde edip sonucu Node’ye gönderecek. Node.js sunucumuz gönderilen iletiyi tekrar ön yüze -kullanıcıya- aktaracak. Yalnızca Ajax ve Php ile bu işi halledebilecek olmamıza rağmen sonraki projelerde de deneyim olması için Node.js’ye hafifçe dürtüyoruz.

Yapay zekanın temelini levenshtein fonksiyonu (hani şu Google’daki “Bunu mu demek istediniz?” benzerlik algoritmasının benzeri) oluşturacak. Mysql veritabanında ön tanımlı sözcüklerin metaphone olarak saklanan biçimini iletiyle karşılaştırıp uygun yanıtları rastgele (random) olarak yansıtacak. Böylece insan zekasına birazcık yaklaşabileceğiz. Ancak robotun yalnızca yapay zekasının temellerini attığımızı; tekrardan kaçınma, ayrıntılı çözümleme gibi işlevlerinin henüz eklenmediğini unutmayalım.

İlk Sohbet, İlk Heyecan

Açıklamalarıyla ekleyeceğim kodları işletip Beybut Robot ile biraz sohbet ettim. Veritabanındaki 20-30 sözcükle gayet insani bir sohbetimiz oldu.

Beybut Robot İlk Sohbet

Bu konuşmayı, veritabanında yalnızca 19 kayıt varken yapabiliyoruz.

Beybut Robot İlk Sohbet 2

Bu kadar eğlence yeter! Tekniğe dönelim…

Firewall işlevi gören, mesajları sunucuya ileten suzgec.php ile devam ediyoruz. suzgec.php’deki kodları sırayla açıklayacağım.

En tepede yer alan bu kodlar hata mesajlarının gösterilmemesini, içsel ve işlevsel kodlamanın UTF-8 ile yapılacağını belirtiyor.

Bu kod bloğu, Session yardımıyla, 1 saniyeden hızlı mesaj gönderen kullanıcıları 1 saniyeliğine durduruyor.

Ajax formdan gelen (post edilen) mesajı Mysql ile içli dışlı olmadan önce uygunlaştırıyor. Sql Injection’dan bir nebze korunuyoruz.

Mysql Yapısı ve Levenshtein Yordamı

… Gelelim asıl meseleye. Bizim açımızdan, yapay zeka dediğimiz şey, elimizdeki verileri en olası ve rastgele biçimde yansıtabilecek robotik bir yaklaşım. Bunu yaparken en az veriyle en çok olasılığı en rastgele halde aktarabilmemiz, bizi amacımıza bir adım daha yaklaştırır. Buradaki temel işlevimiz Mysql için levenshtein yordamı. Bu yordamı kullanmak için önce aşağıdaki tabloyu oluşturun (Sql sorgusu olarak Phpmyadmin’den çalıştırabilirsiniz).

Mysql için levenshtein yordamı oluşturalım. Phpmyadmin’de tablonuzu seçip Sql sorgusu olarak aşağıdaki kod bloğunu çalıştırın. Delimiter hatası verirse görmezden gelebilirsiniz.

Tekrar suzgec.php’ye dönelim. Artık veritabanı işlerini halletmenin ve yordamı kullanmanın zamanı geldi.

Yapay Zekanın Php Yüzü: Mysql Levenshtein, Metaphone, Like

Mysql bağlantısını yaptıktan sonra gelen iletiyi metaphone olarak kodluyoruz. Böylece veritabanında kayıtlı metafon alanımızda like ve levenshtein kullanarak eşleştirme yapabileceğiz.

Sorgusu aynı ve metaphone harf sayısının %50’sini alıp; benzeyen kayıtlardan rastgele birini getirmesini söylüyor. Bu oranı artırırsanız daha fazla kayıt; azaltırsanız daha az kayıt elde edersiniz. Ortalama olması için %50 belirledim.

Geliştireceğimiz yapay zeka bölümü bu kadar. Temel olması açısından, yukarıdaki sohbetleri edebilen Beybut Robot’a şimdilik bu kadar akıl yeter.

Php’den Node.js’ye: Elephant.io

Elephant.io Php içerisinden Node.js sunucusuna mesaj göndermek için hazırlanmış bir kütüphane. Github’da Elephant.io’ya erişebilirsiniz. Src klasörünü projenizin olduğu dizine gönderip aşağıdaki kodları kullanarak Php’den Node.js’ye kolayca mesaj gönderebilirsiniz.

 

Node.js sunucumuza pek bir iş bırakmadık. Mesajı alıp iletsin yeterli. Mysql’u Php içerisinde kullandığımız için Node.js sunucusuna iki satırlık kod kaldı.

Bu son kodlamayla birlikte yapay zeka projemizin temellerini atmış olduk. Artık Mysql’daki sözcük sayısını artırarak; levenshtein’ı geliştirerek… insan zekasına çok yakın bir robot üretmemiz içten bile değil. Temelini attığım bu projeyi dallandırıp budaklandırarak hayal gücümüzün sınırılarını zorlayabiliriz.

Sorularınızı yorum bölümünden iletebilirsiniz. Bu makale şimdilik yeterince uzun oldu. Bana eşlik ettiğiniz için teşekkür ederim. Görüşmek üzere…

Node İle Robot Yazılımı: İstemci ve Firewall – 1

Node.js, Socket.io, Mysql, Php ve birazcık da Ajax kullanan Beybut Robot projemi geliştirmeye devam ediyorum. Bir önceki adımda Node.js, Npm, Socket.io, Mysql kurulumlarını yapmış ve temel ayarları tamamlamıştım. Sırada, sunucuya (beybutrobot.js’ye) Php firewall aracılığı ile mesaj gönderecek istemcimizin (client’in) kodlanması var. Node.js sunucusuna istemci ve ön yüz ile direkt istekte bulunmak yerine bir geçit ve süzgeç kullanarak bu ilişkiyi kurmak istiyorum. Böylece, doğabilecek güvenlik zaafiyetlerini bir nebze aşmak; sunucunun yükünü azaltmak amacındayım. Geçitimizi Php ile kodlayacağım. Ama önce istemci Web yüzümüzün temellerini atalım.

Bir Php sayfası oluşturarak </head> kapanış etiketinden önce aşağıdaki kodları ekleyelim.

Gereksinim duyduğumuz Jquery kütüphanesini ve Socket.io’yu sayfamıza yüklemiş olduk.

İstemci sayfamıza, sunucudan gelen mesajları yansıtmak için <body>’den sonra “ekran” adlı bir div oluşturalım.

“ekran” div’i için css ve js kullanacağımızdan, şimdiden class, id ve name bilgilerini belirledim.

Tekrar </head> öncesine dönüp; sunucudan gelen iletileri bu div içerisine yansıtacak Javascript kodlarımızı buraya ekleyelim.

İleti gönderimi ve gösterimini sağlayacak form elementlerimizi oluşturalım.

“iletiniz” div’i içerisinde “iletici” input’u ve gönder butonuyla suzgec.php’ye (firewall) Ajax yardımıyla post göndereceğim. </head>’dan önce;

Js kodlarıyla verilerimizi, eğer enter tuşuna basılmışsa, suzgec.php’ye sayfayı yenilemeden gönderebiliyoruz. Ardından “iletici” inputumuzun içeriğini silip bu kutuya focuslanıyoruz.

Butonumuza basıldığında aynı işlemi yapması için, ileti gönderimi sağlayan form elementlerinden sonra aşağıdaki JS’yi ekliyoruz.

Böylece kullanıcı dilerse butona basarak da iletisini yollayabilecek. Şimdilik, ön yüzümüz tamamlandı. suzgec.php dosyamızı oluşturalım.

Artık kullanıcının yazdığı her şey #ekran div’i içerisinde gösterilecek.

Unutmadan… beybutrobot.js sunucumuzun son hali şu şekilde:

 

Beybut İlk Mesaj

Sonraki adımda Php içerisinden (suzgec.php’den), Elephant.io kullanarak sunucuya ileti göndermeyi; flood koruması eklemeyi, sansürleme işlemi yapmayı amaçlıyorum.

Node İle Robot Yazılımı: Kurulum ve Temel Ayarlar

Node.js ve Php kullanarak yapay zekaya sahip bir robot yazalım. Robotumuz gönderilen mesajları, değerlendirerek kullanıcıyla sohbet etsin. Bunun yanında belirli komutları giren ziyaretçiye veya ziyaretçinin Internet’e açık bilgilerini (public) kullanarak (Ip adresi vb.) ona yararlı dönütler verebilsin. IOS’un Siri’sine yakın, milyon dolarlık yatırım yapmadan biraz bilgi ve hayal gücüyle neler yapabileceğimize bakalım. Ancak bu projenin 0 TL. maliyetle gerçekleşmesini istediğimden sesli yanıt sistemini es geçeceğim. Tabi Google Translate projeyi görüp sponsor olursa sesli yanıt bölümünü de kolayca halledebilirim.

Başlarken

Robot projemi Ubuntu kurulu bir sunucuda geliştireceğim. Siz dilerseniz Windows’ta Node.js ve Wamp, Lamp vb. bir programla bu işlemleri gerçekleştirebilirsiniz. Projemin her adımını, kurulumundan yayınına kadar, kaynak kodlarıyla birlikte yazılım geliştiricilere armağan ediyorum. GNU lisanslı yazılımların ticari amaçlarla kullanılamayacağını (Kosgeb’den hibe almak amaçlı da olsa) lütfen unutmayalım.

  • Proje Adı: Beybut Robot
  • Proje Başlangıç Tarihi: 05.03.2015
  • Temel Gereçler: Ubuntu, Node.js, Php, Mysql, azıcık akıl, bol çay ve hayal gücü…
  • Sürüm: 1.0.0
  • Öngörülen Maliyet: 0 TL. (Sunucu, Bw masrafı gibi temel harcamalar hariç tutulmuştur.)
  • Geliştirici: Barış YEŞİLÇİMEN

NodeJs ve NPM Kurulumu (Ubuntu)

Ssh’mize girip root olarak kütüphaneleri güncelleyip Node.js’yi kuralım.

Kurulumun tamamlandığından emin olmak için aşağıdaki komutu verelim. Gelen yanıt sayısal bir sürüm çıktısıysa her şey yolunda demektir.

Nodejs sürümünü görmek için;

Npm’nin (Node Package Manager) sürekli (forever) çalışmasını sağlayalım.

Temel kurulum işlemleri bitti. Şimdi bir test scriptiyle her şeyin yolunda olup olmadığına bakma zamanı. Bir JS dosyası oluşturalım. Sunucu başladığında, ekrana aşağıdaki çıktıları basacak kodu girelim.

Bu dosyayı beybutrobot.js olarak kaydedip sunucumuza FTP’den gönderelim (sunucu üzerinde “pico” gibi bir komutla da bu dosyayı oluşturup düzenleyebilirsiniz.).

Ssh’de “cd” yardımıyla beybutrobot.js dosyasını gönderdiğimiz yere gelerek aşağıdaki komutu çalıştıralım.

Yanlış hatırlamıyorsam Windows kullanıcıları ms-dos cmd üzerinden nodejs yerine node olarak çalıştırıyorlardı.

Aşağıdaki çıktı başlangıç için her şeyin harika gittiğini gösteriyor.

Beybut Robot Başladı

Socket.io ve Nodejs için Mysql Kurulumu

Yazılımımızda veri alışverişi için socket.io’ya, Mysql işlemleri içinse Mysql tanımlamasına ihtiyaç duyuyoruz. O halde hemen kuralım.

Socket.io için;

ile kurulumu tamamlıyoruz. Ardından;

komutu Node için Mysql kullanımını aktif hale getiriyor.

Artık beybutrobot.js dosyamıza bu iki işlevi kullanacağımıza dair kodları ekleyelim.

Burada, Socket.io’nun “io” olarak tanımlandığını ve 1919 numaralı portu dinlemesi gerektiğini belirttik. Hemen altında “mysql” kullanacağız dedik. “nodejs beybutrobot.js”  komutunu işlettiğinizde karşınıza console.log içerisindeki mesaj gelmeli. Eğer bu adımda bir hata alıyorsanız socket.io ve mysql kurulumunuzu doğru yapmamış olabilirsiniz.

beybutrobot.js dosyası sunucumuz; arka planda çalışan pek zeki (şimdilik değil) robotumuzdur. Kullanıcılarımızın, sonraki adımlarda oluşturacağım, istemciye (client’e) girdiklerini beybutrobot.js yorumlayacak; onlara yanıt gönderecek.

Node İçin Mysql Bağlantısını Yapalım

Bir Mysql ve bu Mysql için kullanıcı oluşturuyorum. Kullanıcımı yetkilendirip; beybutrobot.js dosyama ilgili bilgileri giriyorum. Sunucumuzun son hali Mysql bağlantısıyla birlikte şöyle:

Böylece Mysql bağlantısını tamamladık. Js içinde Mysql sorgularını, ilerleyen adımlarda kullanacağım.

Eğer “//” ile başlayan açıklamalar girerseniz kod karmaşasından kurtulmuş olursunuz.

Başlangıç işlemlerimizi bitirdik. Sonraki adımda ön yüzü kodlamaya başlayacak; sunucu ve client yazılımı işlerini aynı anda yürüteceğiz.

İpucu: Sunucunuzda 1919 numaralı portu açmak için;

Ip Adresinden Şehir, Ülke, Adres Tespiti

Ip adresinden şehir, ülke, kaba adres tespiti yapan bir Php yazılımı geliştirelim. Ip adresi sorgulaması yapılan form aracılığıyla bu ip adresinin şehrini, ülkesini, enlem ve boylamını Geoplugin veritabanından Json olarak talep edip; gelen bilgileri Google Maps Api’siyle haritada gösterelim. Eğer ziyaretçi bir ip sorgusu göndermemişse, kendi ip’sinin bilgilerini aynı biçimde yansıtalım.

İlk olarak ihtiyacımız olan bir adet Google Maps Api anahtarını, Google’ın geliştirici konsolundan edinelim. Bu anahtara eğer harita kullanıyorsak gereksinim duyacağız.

Bir Php belgesi oluşturarak </head> kısmından hemen önce aşağıdaki Php kodlarını ekleyelim.

Burada, sayfamızı ziyaret eden istemcinin Ip adresini aldık. Eğer Ip sorgulaması gönderilmemişse (Post edilmemişse) istemcinin ip adresini ve bilgilerini elde ettik. Geoplugin.net json apisi ile talepte bulunup; ülke kodu (Örneğin Türkiye için TR), şehir, enlem ve boylam bilgilerini json’dan ayrıştırdık.

Gereksinimimiz olan bilgiler artık elimizde. Şimdi bu bilgileri kullanıcıya yansıtıp Google haritasında gösterelim. Yine </head>’dan önce aşağıdaki Javascript kodunu sayfamıza ekliyoruz.

Büyük harfle belirttiğim bölümü (key=…) Google Maps Api Key’inizle değiştirmeyi unutmayın.

Sayfamızın <body> girişini aşağıdakiyle değiştiriyoruz. Böylece sayfa yüklenirken haritamızda yüklenmiş olacak.

Bu girişten sonra basit bir sorgu formu oluşturarak ziyaretçilerin farklı ip adreslerini de sorgulamasını sağlıyoruz.

Ip bilgilerini ve Ip ile ilişkili bilgileri haritada göstererek projemizi sonlandırıyoruz.

Böylelikle projemiz, demosunu göreceğiniz biçimde bitmiş oldu.

DEMOİNDİR

Sınırlamalar:

Bu uygulama aşılabilir bazı sınırlamalar içerir.

  • Geoplugin.net Ip sorgulama Api’si dakikada 120 sorguyla sınırlanmıştır. Ayda  15 € ödeyerek Premium üye olup bu sınırlamayı aşabilirsiniz.
  • Google Maps Api’si 2016 Mart için, günde 25.000 ücretsiz kullanım hakkı sunuyor. Bundan daha çok sorguya gereksinim duyuyorsanız her ek 1.000 gösterim için 0.50 $ ödeyip limitinizi 1.000.0000’a kadar artırabilirsiniz.

Php İle Gelişmiş Sansürleme

Php ile sansür – yasaklama fonksiyonu, istenmeyen girdilerin engellenmesini, bu tür girdiler varsa sonraki işleme geçilmemesini sağlar. Bu fonksiyon, yorum bölümlerinde, gerçek zamanlı sohbet uygulamalarında, gönderilen verilerin güvenlik denetiminde ve buna benzer pek çok Php uygulamasında kullanılabilir.

Fonksiyonun belirli sözcükleri engelleyen bir işlevden daha fazlasına sahip olmasını; yapay zekasının benzerlerinden bir nebze daha gelişmiş olmasını istiyorum. Tabi burada işin içine deneyim giriyor. Sansürle korumasıyla karşılaşan bir kişi farklı biçimde korumayı aşmayı deneyecek; örneğin “kafir” yerine “k4fir” , “k4f1r” veya “K 4 F İ R” yazacaktır. Bu yazım türlerinin tümünde kişinin söylemek istediğinin “kafir” olduğunu anlayabiliyoruz. O halde uzunca bir str_replace koşusu bizi bekliyor.

Öncelikle yasaklamak istediğimiz sözcük listesini belirleyelim. Burada birkaç hakaret sözcüğünü Türkçe karakter kullanmadan , virgülle ayırarak ve boşluk bırakmadan belirliyorum. Siz bu listedeki sözcükleri çoğaltmalısınız.

Dört adet sansürlü sözcük belirledim. Bunlar; şerefsiz, utanmaz, eroinman ve faşist sözcükleri. Burada sözcüğün tamamını yazmak yerine, örneğin şerefsiz için “serefs” kullandım. Çünkü şerefs… başlangıcından sonra, şerefsiz dışında türetilebilecek başka bir sözcük bulunmuyor.

Sansürleme fonksiyonumuzu oluşturalım.

Girdiyle gelen veri sansür listemizde bulunuyorsa bunu ters soru işaretiyle (alt+168) değiştirecek.

Sansür kontrolüne tabi tutulacak bir cümle girdisi oluşturalım.

Sansür listemizde bulunan eroinman sözcüğünün garip yazılmış biçimini girdi içerisinde geçirdik. Amacımız, sansür fonksiyonunun bu karmaşık “hakaret”i tespit edebilecek yetiye sahip kılınması.

Özel karakterleri sansür listemize uygun harflere çevirmek için kullanacağımız fonksiyon aşağıdadır.

Son kontrolleri yaparak sansürlü sözcük varsa bir mesaj verdirelim.

Bu kadar. Bu sansürleme fonksiyonu, bir girdide geçen, belirlediğimiz sansür sözcüklerini tespit edip; eğer sansürlü bir sözcükle karşılaşırsa mesaj verir. Bu tür bir sansürleme, yasaklı sözcükleri yıldızla kapatmak yerine girdiyi uygunlaştırarak topyekün bir kontrole tabi tutar. Özellikle güvenlik gerektiren alanlarda, saldırgan tavırlı kullanıcıları engellemek için etkili bir sansürleme işlevi.

Zaafiyetleri: Kod bloğu bazı sözcük gruplarını gereksiz olarak yasaklayabilir. Örneğin “Şeref size gelecek.” cümlesinde uygunlaştırılmış kontrol yapısı “serefsizegelecek” olduğu ve sansür listemizde “serefs” girdisi bulunduğu için bu tümce yasaklı sayılacaktır. Ancak sansür fonksiyonu “Ş e r  e f s  i  z” sözcüğünü de engelleyebileceği için, boşluklara izin vermek güvenlik zaafiyeti doğuracaktır.

Ckeditor Kullanımı ve Türkçe Karakter Sorunlarının Giderilmesi

Ckeditor kullanımı kolay, basit birkaç adımla projeye dahil edilebilecek, popüler bir WYSIWYG html editörüdür. Admin panellerinde, yorum alanlarında, Web tabanlı e-mail gönderim araçlarında sıkça tercih edilen Ckeditor’ü ckeditor.com/download adresinden indirebilirsiniz.

Ckeditor Budur

Ckeditor Kullanımı

İndirdiğiniz zip dosyasındaki ckeditor klasörünü Php dosyalarınızın olduğu dizine çıkartın. Ckeditor’ü kullanmak istediğini Php dosyanızı açın. </head> etiketinden hemen önce

kodunu ekleyerek .js dosyasını çağırın.

Oluşturduğunuz formdaki textarea’nın ad ve id değerlerini belirleyin. Örneğin;

Editörü kullanacağımız textarea’nın adı ve id’si “yazi” olacak. </form> tagından hemen sonra aşağıdaki javascript kodunu ekleyerek Ckeditor’ü yazı alanınız için kullanabilirsiniz.

Ckeditor Türkçe Karakter Sorunları

Ckeditor ile bir içerik eklediğinizde, veritabanındaki ve/veya sayfa kaynağındaki Türkçe karakterlerin yazdığınız gibi görünmediğini fark edeceksiniz. “ç” için “&ccedil;”, “Ş” için “&THORN;” gibi girdiler göreceksiniz. Ayrıca gereksiz biçimde”&nbsp;” html boşluk verisinin kullanımı da dikkatinizi çekmiştir. Bunları düzeltmek için Php’nin str_replace fonksiyonunu kullanacağız. Formu post ettiğiniz (gönderdiğiniz) Php dosyanıza aşağıdaki kodları ekleyerek bu sorunu kolayca aşabilirsiniz.

Artık “yazi” alanınız hem görsel bir metin editörüyle düzenlenmiş hem de karakter sorunlarından arındırılmış biçimde kullanımınıza amade.

Konu açılmışken, sıkça karşılaşılan, Türkçe karakter sorunlarını aşmak için birkaç etkili yöntemden de bahsedeyim.

Php ve Mysql’de Türkçe Karakter Sorununu Aşmak

  • Utf-8 ile çalışın. Sayfanızda <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> kodu mevcutsa. Veritabanınızda tablo yapısı dilini “utf8_general_ci” olarak belirleyin.
  • Php sayfalarınızın en başında

    kodunu bulundurun.
  • Mysql bağlantı sorgunuzun ardından karakter kodlama biçimini belirtin.

 

Php İle WordPress’e Yazı Ekleme

Php kullanarak WordPress’e yazı ekleyebilirsiniz. Bu işlem, Php WordPress bot yazılımları için ideal bir seçim olabilir.

Bu içeriğimizde, Php ile WordPress’e yazı ekleme yanında, başlık mevcudiyet kontrolü ve sitemap ping işlemlerini de yapacağız. Neredeyse tam bir WordPress Php botu yazmış olacağız.

WordPress’in standart editöründen sıkıldıysanız veya Php bot ile WordPress’e içerik eklemek istiyorsanız bunu basit bir fonksiyonla gerçekleştirebilirsiniz.

Ekleme yapacak Php dosyanızı WordPress’in bulunduğu dizine göndermeyi unutmayınız. Eğer farklı bir klasör kullanacaksanız include edilen (içselleştirilen) wp-blog-header.php dosyasının tam yolunu belirlemelisiniz.

Gerekli WordPress dosyasını içselleştirelim:

Başlığımız “Beybut Ne Anlama Geliyor?” olsun. Bu başlık daha önce yazılarımızda (çöp dahil) varsa işlemleri durduralım. Eğer yoksa ekleme işlemine devam edelim.

Şimdi içeriğimizi WordPress’e ekleyelim.

wp_insert_post işlevinin bütün değişkenleri için burayı referans alabilirsiniz.

post_category: Yazının gönderileceği kategorinin id’sidir. Eğer id’yi bilmiyorsanız WordPress yönetici panelinden Yeni Yazı Ekle bölümüne gelip sayfa kaynağını görüntüleyin. Kategorilerinizden birinin adını sayfa kaynağında aratın.

biçiminde gördüğünüz seçim düğmesindeki value değeri kategorinizin id’sidir. Burada 35…

post_title: Yazı başlığınız.

post_author: Yazar id’si. Admin için bu id 1’dir.

post_status: Yayınlanma durumu. publish yayına açık anlamına geliyor.

ping_status: Pinglenme durumu 1 ise ping servislerine ping gönderiliyor. Kapatmak için 0 değeri verilebilir.

post_content: Yazınızın içeriği.

Eğer etiket kullanmak isterseniz “tags_input” ile etiketlerinizi belirleyebilirsiniz.

Neredeyse bitti. Son olarak güncellenen sitemapımızı Webmaster Tools’a gönderelim (pingleyelim). Bunun için Php’nin file_get_contents fonksiyonunu kullanacağız. İsterseniz Curl da kullanabilirsiniz.

Artık WordPress’e kolayca yazı ekleyebileceğiniz tam teşekküllü bir Php botuna sahipsiniz.

Php Resim Efektleri

Php ile resme watermark (logo) basımı, resmin üzerine yazı yazma, resme yansıma efekti verme, resmi ters çevirme, büyütme ve küçültme gibi birçok işlemi yapabileceğiniz bir kütüphane bu içeriğimin konusu. GD veya Imagemagick fonksiyonlarıyla içli dışlı olmadan görsel efektleme işlerinizi kolayca yapabileceğiniz Verot classı (sınıfı) bu anlamda büyük bir kolaylık sağlıyor. Haydi başlayalım!

Verot’un Class Upload sınıfını buradan indiriniz. İndirdiğiniz dosyanın içerisindeki src dizininde “class.upload.php” dosyasını ilgili dizine çıkarınız. İşlemlerimiz için sadece bu Php dosyasını kullanacağız.

Resimlerimizle işlem yapacağımız Php dosyasının içerisine “class.upload.php”yi include edelim.

Başlangıç için her şey tamam.

Php Watermark

Şimdi efektlemeye başlayabiliriz. Efekt işlemleri için belli bir sırayı takip etmeliyiz. İlk efekt örneğimizde Atatürk’ün transparan PNG görselini, bayraklı Türkiye haritası üzerine sağ alt köşeye gelecek biçimde basalım. Bunun için gerekli resim dosyaları şunlar:

Türkiye Haritası BayrakAtatürk PNG

Php dosyanıza include’den sonra şu satırları ekleyin:

Yeni görselimiz hazır.

Atam Türkiyem

Diğer örneğe geçmeden önce kodumuzdaki bazı girdilerin ne anlama geldiğine dikkat ediniz.

Php Yansıma Efekti

İkinci örneğimizde bir manzara fotoğrafı için yansıma efekti oluşturalım. Sonbahar manzarası fotoğrafımızın işlenmemiş hali şöyle:

Sonbahar Manzarası

 

Kullanacağımız kodlar;

Yansıma efektli sonbahar manzarası:

Yansıma Efekti

Resmin Üzerine Font Kullanarak Yazı Yazmak

Üçüncü örneğimizde bir resmin üzerine Gdf fontu kullanarak “BEYBUT” yazmayı amaçlıyoruz. Bunu biraz fantastik hale sokalım. Aşağıdaki kalp işaretinin tam ortasına yazımızı yazalım.

Kalp

 

Kodlar uygulandığında ortaya çıkan romantik görselimiz:

Kalp Beybut

 

Resmi Ters Çevirmek

“Çevir kazı yanmasın.” bu örneğimizde bir kaz fotoğrafını vertical (dikey) olarak ters çevireceğiz. Verot sınıfında “V” (vertical) ve “H” (horizontal – yatay) olarak belirtilmiş çevirme seçenekleri mevcut.

Orijinal kazımız bu:

Kaz

Bu kodları uyguladıktan sonra kaz çevirme işlemi tamamlanıyor.

Ters Kaz

ile görselimizi dikey olarak ters çevirdik. Bunu ‘H’ yaparak yatay olarak da çevirebilirsiniz.

Diğer efektleme özelliklerine de değinelim.

Resim Boyutunu/Çözünürlüğünü Küçültme ve Büyütme

Resim boyutunu küçültmek veya büyütmek için basitçe;

kodlarını kullanabilirsiniz. Görseliniz 50×50 pixel çözünürlüğüne dönüştürülecektir.

Blur Efekti

Resmi Siyah Beyaz Yapma

Resme Çerçeve Ekleme

10 pixel genişliğinde yeşil renkli ve yarı transparan bir çerçeve ekledik.

Verot’un diğer örneklerine bu adresten ulaşabilirsiniz.

Bu sınıfı kullanarak, çok fazla kod yazmadan, görsellerinizi efektleyebilirsiniz. İyi efektlemeler.

Php ve Ajax İle Wikipedia Uygulaması

Php ve Ajax Jquery ile Wikipedia hızlı arama uygulaması yapalım. Bir text kutusuna yazılan her harf için başlangıç harfleriyle uyumlu Wikipedia’da yer alan başlıkları listeleyelim. Örnekte, kullanıcı “bey” yazdığında “Bey”, “Beyaz”, “Beyin”, “Beyoğlu” gibi Wiki başlıkları görünecek. Bunun için iki adet dosya kullanacağım. Biri Ajax ile verileri gönderen wiki-demo.php dosyası diğeri gönderilen verilere göre Wikipedia Opensearch’tan arama yapıp başlıkları ayrıştıran wikile.php dosyası.

wiki-demo.php dosyasını oluşturmakla işe başlayalım.

Burada, Ajax yardımıyla, degerim isimli kutucuğa yazı yazılırken, klavye tuşundan elimizi çektiğimizde, wikile.php dosyasına veri gönderen bir yapı oluşturduk.

wikile.php dosyası için kaynak kodlarımız şöyle:

wiki-demo.php’de Ajaxla çağrılan (Get metodu ile) veriyi file_get_contents fonksiyonuyla Wikipedia Open Search’ta arattık. Gelen verileri düzenleyerek liste biçiminde, kullanıcımıza gösterdik.

Hepsi bu kadar!

Demo Projeyi İndir (wikipedia.rar)

 

 

Php Cache İle Çok Hızlı Siteler

Php ile geliştirdiğiniz projelerde, özellikle veritabanı bağlantılarının, sorgularının çokluğu sayfanızın daha yavaş yüklenmesine; sunucu kaynaklarının daha çok tüketilmesine neden olur. Cache (yansı) kullanarak sayfanızın çıktısını bir dosyaya kaydedebilir; sonraki istekler için kaydedilmiş html dosyasını ziyaretçinize sunabilirsiniz. Böylece Mysql gibi veritabanı sorgularının tekrarlanan yorucu işlemlerinden kurtulabilirsiniz. Cache kullanımı, ziyaretçi tarafından özelleştirilmemiş (örneğin dinamik arama sayfaları dışında) tüm Php sayfaları için kullanılabilir.

Sitenizin web dizinine (public_html, htdocs vb.) cache adlı bir klasör oluşturun. Aşağıdaki kodları içeriğinizi işlediğiniz dinamik Php sayfanızın en üst bölümüne yerleştirin.

Bu kod dizisiyle ziyaretçi tarafından talep edilen url adresini alarak ($urlm), $cachedosyam değişkenini belirledik. Ardından eğer cache dosyası mevcutsa ziyaretçiye bunu gösterdik. Bu dosya mevcut değilse oluşturma işleminin startını verdik.

Son olarak Php sayfanızın en alt kısmına aşağıdaki kodları ekleyiniz.

Eğer cache dosyası yoksa bu son kod betiği ilePhp çıktısındaki içerikleri alıp cache dosyamızı oluşturduk.

Birinci kod parçasının sayfanızın en üstünde, ikincinin ise en altında olmasına dikkat edin. Artık dinamik Php sayfanızdaki içerikler bir Html dosyasına kaydedildi. Bir defadan sonra istenen sayfalar artık cache klasöründeki html dosyasından gösterilecek.

Cachelerin yeniden oluşturulması için cache klasöründeki bütün html dosyalarını silmeniz gerekir. cache klasörünüzdeki bütün dosyaları silmek için aşağıdaki fonksiyonu kullanabilirsiniz.

Kullanımı: