RSS
 

Archive for the ‘Yazılım’ Category

Windows 7 Uyumluluk Kontrolü

11 Feb

Merhaba,

Windows 7′yi beta sürecinden beri takip ediyorum ve beğenerek kullanıyorum. Win7 çıkmadan önce geliştirmiş olduğumuz C#.NET uygulamalarınıza Win7 uyumluluk kontrolü eklemek için aşağıdaki kodu kullanabilirsiniz.

-

if (Environment.OSVersion.Version < new Version(6, 1))
{
       MessageBox.Show("Windows 7 İşletim Sistemi Gerekmektedir.",
              "Uyumsuz İşletim Sistemi", MessageBoxButtons.OK,
              MessageBoxIcon.Error);
       return;
}

Version(5,1) olarak değiştirirsenizde Windows XP sürümünü denetleyebilirsiniz.

İyi Çalışmalar.

 
No Comments

Posted in C#

 

Small Basic V0.8 Çıktı

09 Feb

Merhaba,

2 sene önce sizlerle paylaştığım Small Basic makaleleri ile giriş yapmıştık. Eğer devam edenler varsa Yeni versiyonun çıktığına çok sevinecekler.

Small Basic v0.8

Yeni sürümde eklenen özelliklere kısaca göz atacak olursak;

  • Paylaşılmış programlar ile ilgili ek bilgi özelliği.
  • Paylaşılmış programları oylayabilme özelliği(Online)
  • Yazdığınız küçük programları çıktı şeklinde almak isterseniz zengin bir formatlama özelliği sizi bekliyor olacak.
  • Kod tamamlama özelliğinde artık kod örnekleride mevcut.
  • API kütüphanelerinde performans iyileştirmeleri yapılmış. ( En çok hoşunuza gidecek özellik bu sanırım. :D )

Paylaşılmış program da ne? Yazdığınız programları online olarak paylaşabiliyorsunuz. Örneğin: http://smallbasic.com/program/?CKM626

Türkçe, Rusça,Fransızca,Çince ve japonca gibi yeni dil destekleri gelmiş.

Small Basic Türkçe

(” Büyük halini görmek için üzerine bolca tıklayınız.”) :)

En çarpıcı özellik olarakta Small Basic için Silverlight desteğinin gelmesi olmuş. Bu sayede IDE yüklü olmadan program veya oyunları blogunuzda dahil heryerde yayınlayabileceksiniz.

Hatırlatma: Small Basic kodlarınızı Converter özelliği ile Visual Basic kodlarına otomatik çevirebilirsiniz.

Bir önceki Small Basic makalemde belirttiğim gibi yazacak çok şey var ve eğer Small Basic’e ilgi duyuyorsanız. Yorum olarak belirtirseniz yeni makale yazarken Small Basic’i de öncelikli olarak yazmaya çalışırım.

İyi Çalışmalar.

 
 

PHP ile MAC adresi alma

20 Jan

Merhaba,

Normalde yoğun şekilde ihtiyacımız olan bir bilgi değil fakat Extreme Web Application veya Securty Tool geliştiriyorsak işimize yarayacak bir bilgidir. MAC adresi her ne kadar eşsiz olarak söylensede değiştirilebildiğini hepimiz biliyoruz. :)

Çalıştırdığım sistem Windows Server 2K8 + PHP 5 (FastCGI Module)

Localhost’ta çalışıyorsak şimdi Windows Command Line’a geçip ipconfig /all yazalım.

Yukarıdaki gibi bir ekran çıktısı ile karşılaşıyoruz. Şimdi bu bilgileri PHP tarafında alsak ve bir metod olsa aynı command line gibi kullanabilsek güzel olmaz mıydı? Hepimizin aklına ilk anda exec() metodu gelebilir fakat bu değil. :) System() metodunu kullanacağız.

<?php
ob_start();
system('ipconfig /all');
$buffContent=ob_get_contents();
ob_clean();
$searchtxt = "Physical Address"; //Linux ise -> "Physical"
$pmac = strpos($buffContent, $searchtxt);
$mac = substr($buffContent,($pmac+36),17);
print("MAC Adresiniz: ".$mac); // MAC Adresiniz: 00-40-D0-C9-48-C7
?>

Şimdi kodumuzu kısaca açıklayalım.

Öncelikle System() metodundan dönen datayı arabelleğe alıp sonra arabellek içeriğini temizliyoruz ve arabellekteki veri üzerinde arama ve bir takım düzenleme işlemleri ile bize dönen string veriyi filtreleyerek içinden istediğimizi alıyoruz. Dönen sonucu direkt görmek isterseniz ob_clean() metodunun hemen altında print($buffContent); exit; yazınız.

Çıktısında size üzerinde çalıştığı makinenin ilk MAC adresini dönecektir. Birden fazla ethernet bağdaştırıcısı olabilir. Bu durumda substr() metoduna vermiş olduğumuz start ve end point sayılarını değiştirmemiz gerekmektedir.

UYARI: Bu MAC adresi istemcinin(Client) değil scriptin çalıştırıldığı makinenin(Server) MAC adresidir.

İyi Çalışmalar.

 
7 Comments

Posted in PHP

 

Chrome RSS Okuyucu Eklentisi

15 Jan

Chrome RSS Okuyucu – v0.7

Merhaba,

Google Chrome bildiğiniz üzere beta versiyonunda eklenti desteğini açtı. Yakında istikrarlı sürüm Chrome’a da bu özelliğini aktaracaktır.  Geliştirdiğim ve Türkçeleştirdiğim bu RSS okuyucu eklentiyi rahatlıkla Chrome tarayıcılarınıza yükleyebilirsiniz. Aşağıda ekran görüntülerinden bazılarını paylaşıyorum.

Chrome RSS Okuyucuyu Şimdi Kur.

İyi Çalışmalar.

 
3 Comments

Posted in Yazılım

 

Google Chrome Eklenti Geliştirme

21 Dec

Merhaba,

Google Chrome’da Firefox gibi eklenti yazılmasını yeni versiyonundan itibaren uygulamaya geçirecek gibi duruyor. Chrome Beta’yı indirerek eklentileri test edebilirsiniz.

Chrome Beta Download.

Öncelikle geliştirdiğimiz eklentinin bitmiş halini inceleyelim. Daha sonra kodlama kısmına geçeriz. Eklentimiz gayet basit bir işlem yapıyor. Bir popup içerisinde flickr api kullanarak resimleri listeliyor.

Flickr eklentisi 1

Kaynak kodları indirmek için tıklayınız.

Öncelikle kaynak dosyalarımızı eklemek üzere kolay erişebileceğimiz bir dizine ChromeExtension isminde bir klasör oluşturalım. Siz farklı bir isimde verebilirsiniz. Ardından bu uygulamada kullanacağımız dosyalar olan logo.png, test.html ve manifest.json dosyalarını oluşturalım.

Bu dosyaları yukarıdaki bağlantıya tıklayarak indirdiğiniz sıkıştırılmış dosya içerisinde bulabilirsiniz.

Chrome Extension Path

manifest.json

{
“name”: “Flickr Resim Galerisi”,
“version”: “1.0″,
“description”: “Flickr’daki resimlerinizi görüntüleyebilirsiniz.”,
“browser_action”: {
“default_icon”: “logo.png”,
“popup”: “test.html”
},
“permissions”: [
"http://api.flickr.com/"
]
}

Google Chrome Extension Manifest JSON

test.html dosyasının içeriği biraz uzun olduğundan vermiyorum. İndirdiğiniz winrar arşivinden çıkartarak inceleyebilirsiniz. İçerisinde ilgili pop-up ile ilgili style(CSS) kodları ve Flickr JS API kodları mevcuttur.

Yukarıdaki resimde de gördüğünüz üzere JSON ile basit bir şekilde extension tanımlamamızı yapabiliyoruz.

Yüklemek için ise aşağıdaki resimlerde gösterilen adımları takip etmeniz gerekmektedir.

Aşama 1;

Chrome Extension Setup 1

Aşama 2;

Google Chrome Extension Install Step 2

Aşama 3;

Chrome Setup Step 3

Aşama 4;

Google Chrome Extension Setup Step 4

Eğer JSON dosyasını düzgün olarak oluşturduysanız hata almadan bu aşamaları tamamlayarak ilk eklentinizi yazmış olacaksınız. Bir sonraki makalemde daha gelişmiş eklentiler yazacağız.

Saygılarımla.


 
2 Comments

Posted in Yazılım

 

Mobile Code Creator

07 Oct

Merhaba,

Bu aralar hep web servislerinden gidiyorum. İşte hazır Google’da barkod’un icadını kutlarken, mobile code oluşturabileceğiniz bir servis.

http://webservices.oxijen.org/Services/MobileCode/

İsteğe göre Link ekleme ve vCard oluşturma özelliklerinide ekleyebilirim.

Şimdilik GET metodu ile 2 tane parametre alıyor.

@param msg (String) – Oluşturmak istediğiniz kodu string olarak vermeniz gerekiyor. (HTML kodu yorumlamaz. Sadece yalın text göndermelisiniz.)

@param msgName (String) – Oluşturduğunuz mobile code’a vermek istediğiniz bir ad. İsteğe bağlıdır. Bu alana genellikle cep telefonu numarası girilir.

İyi Çalışmalar.

 
1 Comment

Posted in PHP

 

Free XMLocation Web Service

29 Sep

Merhaba,

Geliştirdiğimiz web uygulamalarında bazen kullanıcının bir takım bilgilerini almak isteyebiliriz. Böyle bir durumda giren kullanıcının IP‘sine göre Ülke/Bölge/ISP/Bayrak gibi bilgileri bize sağlayan web servislerinden yararlanırız. Bu web servisleride genelde ücretli olur. :) İnternette farklı bir konu üzerinde araştırma yaparken dikkatimi çeken ücretsiz bir web servisi için basit bir kod yazdım. Aşağıdaki kod ile bu ihtiyacınızı ücretsiz sağlayabilirsiniz.

Demo: http://webservices.oxijen.org/Services/XMLocation/

FlagPath."' />";
$shortCN = $xml->ShortName;
$longCN = $xml->LongName;
$region = $xml->Region;
$ipCity = $xml->IpCity;
$isp = $xml->ISP;
$ispDomain = $xml->IPDomain;
?>







 	Country: /
Flag:
Region:
City:
ISP:

Bu güzel ama benim işimi görmez ben kendi database’im üzerinden bu işlemleri yapmam gerekiyor diyorsanız. O zaman buradan 180MB civarındaki SQL’i indirip kullanabilirsiniz. :)

iyi çalışmalar.

 
No Comments

Posted in PHP

 

PHP Performans Testi

27 Sep

Merhaba,

İnternette dolaşan astronomik değerlerden sıkıldığımdan dolayı kendim güncel bir test yaptım. Yaptığım testlere göre sonuçlar aşağıdaki şekilde çıktı.

Testleri gerçekleştirdiğim makinenin konfigürasyonuna http://tinyurl.com/y8lkg5p buradan bakabilirsiniz.

Diğer Değerler;

  • Web Server: IIS 7.5
  • PHP Version: 5.2.10
  • Setup Mode: CGI/FastCGI
  • Browser: Firefox 3.5.2
  • OS: Windows 7 (x64)

Küçük boyutlu test sonucu;

8 Milyonluk bir döngü sonucunu: 0.98745512962341 saniyede getirdi.

Orta boyutlu test sonucu;

350 Milyonluk bir döngü sonucunu: 43.498991012573 saniyede getirdi.

Büyük boyutlu test sonucu;

1 Milyarlık bir döngü sonucunu: 123.0937769413 saniyede getirdi. (Ortalama 2 dk.)

Buda demek oluyor ki araya yazılımsal ve donanımsal caching + diğer performans yöntemleri ile büyük boyutlu bir sitemiz bile olsa hala rahatlıkla PHP’yi kullanabiliriz. :)

Genel Sonuç: print(“Yaşasın Open Source :D ”);

İyi Çalışmalar.

 
3 Comments

Posted in PHP

 

1.0 PHP ile Nesne Yönelimli Programlamaya Giriş

23 Sep

Merhaba,

Bu makalede PHP ile Object-oriented Programming(Nesne Yönelimli Programlama) giriş yapacağız. Makale giriş seviyesi fakat NYP(Nesne Yönelimli Programlama) ileri seviye bir konu olduğundan, PHP ile yeni web uygulamaları geliştirmeye başlayan kişilere tavsiye etmiyorum. Öncelikle PHP’de bir seviye uzmanlaşmakta fayda var. Yoksa bu makaleler zor ve öğrenmesi güç gelecektir.

Bilindiği üzere Class(Sınıf)’lar metodların birleşmesinden oluşur. PHP ile hazır gelen ve kendi oluşturabileceğimiz metodlar vardır. Bunlardan ilk iki tanesi __construct ve __destruct metodlarıdır.

__Construct Metodu; Object(Nesne) ilk yüklediği anda çalıştırılacak kodların bulunduğu bölümdür.  Daha önce ASP.NET ile web programlama yapmış arkadaşlar bunu Page_Load() methoduna benzetebilirler. PHP 4’te bu Class’ın adı ile aynı bir method oluşturarak mümkündü fakat PHP 5 ve sonrasında bunun yerine __construct() methodu getirildi.

void __construct ([ mixed $args [, $... ]] )

__Destruct Metodu; Bu metod ise nesne ile işimiz bittiğinde otomatik çağırılan metottur. İstersek manuel de çağırabiliriz.

void __destruct ( void )

Şimdi bu metodları bir örnek üzerinde inceleyelim.

Gördüğünüz gibi ilk önce __construct() metodu çalıştı ardından sayfa içerisindeki kodlar sonuna kadar çalıştırıldı ve en son olarak __destruct() metodu çağırıldı. Construction’da class içerisinde bolca kullanacağımız parametreler verilebilir. Destruction’da ise açık veri tabanı bağlantıları, session yok etme, hafızayı temizleme, arabelleği boşaltma v.b. gibi işlemler yapılabilir. Bunları ilerleyen makalelerde bolca kullanacağız. Bir class’ı new komutu ile oluşturacaksanız public olarak __construct metodunu kullanmalısınız. Fakat PHP’de __construct() ve __destruct() metodları olmadanda bir class oluşturmanız mümkündür.

__AutoLoad() metodu,  daha önce projelerimizde kullandığımız require_once() ve include_once() metodlarına benzemektedir. Fakat bunu class içerisinde otomatik yaparak bizi, acaba şu class’ı veya interface’i include(dahil etmek) ettim mi? Sorusundan kurtarır.  Bu metodu daha verimli kullanmak için class’larımızı ve interface(Arayüz)’lerimizi hiyerarşik yapıdaki bir klasörde tutmamızda fayda var. Anlatmak istediğimi bir örnek üzerinde inceleyerek pekiştirelim.

Klasör yapımız aşağıdaki şekilde olsun;

+ Proje

++ library

+++ testClass.php

+++ denemeClass.php

index.php

Metodumuzu aşağıdaki şekilde yazarsak Class’larımızı otomatik yükletebiliriz.

__autoload("test");

?>

Bu Class’ımız içerisinden çağırmak için kullanabileceğimiz bir yöntem. Fakat uygulamamız içerisinde, daha önceden hiç bir nesne oluşturmadan __autoload() adında bir fonksiyon yazarakta yapabiliriz. Gördüğünüz üzere yukarıdaki __autoload() metodunu çağırmak için new komutu ile önceden test() adında bir nesne oluşturuyoruz. Bunun yerine aşağıdaki şekilde bir fonksiyon ile de çözebiliriz.

Yukarıdaki fonksiyonu direkt olarak uygulamamızın içerisinde istediğimiz bir yerde, yeni bir nesne oluşturmadan __autoload(string <param>); şeklinde kullanabiliriz.

Not: __autoload() bloğu içerisinde oluşan hatalar catch bloğu ile yakalanamaz!

Erişim Hakları; Nesne içerisindeki bir değişkenin veya metodun nerelerden erişilebileceğini belirlememizde bize yardımcı olan komutlardır. Public, Private, Protected olarak 3 türü mevcuttur.

Public; Bu şekilde tanımlarsak heryerden erişilebilir olduğunu bildiririz. Eğer bir metodun başına hiç bir şey belirtmeden direkt tanımlarsak PHP bunu varsayılan olarak public(paylaşılan) olarak kabul eder. PHP 4’te public yerine kullandığımız var anahtar’ı geriye uyumluluk adına desteklenmektedir fakat PHP’nin 5.1.3 sürümünden önceki bir sürüm üzerinde uygulama geliştiriyorsanız bu E_STRICT uyarısına sebeb olur.

Private; Sadece tanımlanan Class(Sınıf) içerisinden erişilebilir.

Protected; Bu tür tanımlanan metod veya değişkenler sadece ilgili Class içerisinden veya türetilen Class içerisinden erişilebilir. Public gibi dışarıdan erişimi mümkün değildir.

Zend Studio gibi gelişmiş bir PHP IDE’si kullanıyorsanız zaten yeni bir nesne oluşturduğunuzda size Private ve Protected olarak tanımlanmış metod ve değişkenleri göstermeyecektir. Şimdi bunları bir örnek ile inceleyelim.

Zend Studio 7

Gördüğünüz gibi Zend Sutdio’da nesnemizi oluşturduğumuzda bize sadece public metod ve değişkenleri göstermektedir. Aksi taktirde uygulamamız Fatal Error(Ölümcül Hata) ile sonlanır.  Burada _getInfo() ismi ile tanımladığımız bilgi veren metodumuz biraz kafanızı karıştırabilir. Hani private ve protected metodlara dışarıdan erişilemezdi? gibi bir soru ortaya çıkabilir. Biz nesnemizdeki _getInfo() metodunu public olarak oluşturduk ve çağırdık. _getInfo() metoduda class içerisinde olduğundan yine class içerisindeki private,protected ve public değişkenlere erişme hakkı var. Yani biz metodu call(çağırmak) ediyoruz. O metod kendisi erişebildiği değişkenlerin değerlerini bize gösteriyor.

Protected erişim türünü daha iyi inceleyebilmek için, şimdi childClass() isminde yeni bir class oluşturarak bunu parentClass()’mızdan türetelim.

$degisken3 isimli değişkenin değerini burada override(ezmek) ederek değiştiriyoruz. Böylece artık $değişken3 türeyen class’ımızda atadığımız değere göre işlenecektir. Bu nedenle $foo2 nesnemizin _getInfo() metodunu çağırdığımızda ”Ben hem class içerisinden hemde türetilen class’lardan erişilebilirim.” değeri yerine “Değerini değiştirdik.”  yazısını göreceğiz. Hepimizin bildiği gibi başındaki br tag(etiket)’i HTML’e özel bir tag olduğundan tarayıcımız bunu yorumlayarak göstermemektedir. Bu nedenle çıktıda gözükmemektedir.

İyi Çalışmalar.

 
No Comments

Posted in PHP

 

PHP & Bing API 2.0 ile Search

22 Sep

Merhaba,

Bu makalemde sizlere Microsoft’un yeni arama motoru(seçim motoru desek daha doğru olur.)’nun bize sağlamış olduğu Search API(Application Interface) ile kendimize özel bir arama motoru oluşturacağız. Öncelikle http://www.bing2.net adresinden register olarak giriş yapmamız gerekiyor. Eğer Live Messenger kullanıyorsanız bu hesabınız ile de oturum açabilirsiniz. Daha sonra http://www.bing.com/developers/createapp.aspx adresinden yeni bir AppID alarak işlemlerimizi tamamlıyoruz.

Öncelikle her şeyimizi UTF-8 kullanacağımızdan sayfa yapımızı da Zend Studio’nun Project>Properties>Text File Encoding menüsünden UTF-8 olarak ayarlamalıyız. Eğer yeni bir project oluşturmadıysanız sayfanıza sağ tıklayarak properties menüsünden file encoding’i değiştirebilirsiniz.

Arama sorgularımızı göndereceğimiz bir XHTML form hazırlamamız gerekmektedir.






Ara:

Yukarıdaki gibi basit şekilde arama formumuzu da tamamladıktan sonra şimdi sıra geldi bu form’dan gelen değere göre Bing API 2.0′ı kullanarak sonuçları almaya.
Bing API XML olarakta size sonuç dönebilme özelliğine sahip fakat JSON daha hızlı olduğundan ben JSON kullanacağım. Hemen yukarıdaki formun altından kodlarımızı yazmaya devam ediyoruz.

Url. " - " .$value->;Title. " - ". htmlentities($value->Description, ENT_QUOTES, "UTF-8") . " - ". $value->DisplayUrl . " - ". $value->CacheUrl . "";
 }
}
?>

Yukarıdaki şekildeki gibi bir çok bilgiye erişmeniz mümkün. Yukarıda sadece web aramaları verildi fakat resim gibi bir çok arama türüne göre sonuçları almanız yine mümkündür. Bunun yanında sonuçlarda reklamda gösterebilirsiniz. Bunun için Microsoft ile bir anlaşma yapmanız gerekmektedir. Yoksa API yetki kısıtlaması nedeni ile reklamları gösteremezsiniz. Ben yinede onunda kodunu vereyim. Belki ileride işinize yarar. Bunun içinde aşağıdaki şekilde bir HTTP Request (HTTP İsteği) göndermeliyiz.

SearchResponse->Ad->Results as $v){
	print($v->AdLinkUrl."-".$v->Title."-".$v->DisplayUrl."-".$v->Description."-".$v->Position."");
}
?>

Bing bize hizmetlerini kişiselleştirerek kullanmamız için 2.0 versiyonu ile gelişmiş bir API sunmaktadır. Tüm özelliklerini ve bu özelliklerin aldığı değerleri açıklamaya kalksam sanırım çok uzun bir makale olacaktır. Eğer bu konu ile ilgilenenler varsa yorum olarak sorularını konun altına eklerse en kısa sürede cevap vererek. Makaleyi düzenlerim.

Bir Öneri: Bilmiyorum, belkide kötü bir öneride bulunuyorum ama yazmak istiyorum. :D İlk denediğim şey search result’u kendi oluşturduğum database’e kaydederek aynı keyword için bir search request geldiğinde kendi database’imden döndürmek oldu. Eğer geniş bir keyword list’e sahipseniz veya sitenizden çok arama oluyorsa bu şekilde aranılan keyword’lerin Bing’in index server’larından alarak kendi index database’nizi oluşturabilirsiniz. Tabii bunu yapmak için geçerli bir sebebiniz de olması gerekiyor. Yoksa bu şekilde TB’larca büyüklüğünde SQL oluştursanız bile, bu datayı yönetmek ve her yerden erişimini sağlamak çok zor. Yüksek seviyeli internet çıkışlarına ve farklı lokasyonlara hizmet verecek bir sürü server’larınız olması gerekmektedir. Belki farklı ihtiyaçlarınız için veya yapacağınız testler için alabilirsiniz.

İyi Çalışmalar.

 
9 Comments

Posted in PHP