Asal Çarpanlara Ayırma Makinesi

26 Ağustos 2010 – Matematik, Tanıtım, Web1 Yorum

Önceki yazımızda tanıttığımız Wolfram Alpha sitesindeki “Widget Builder” özelliği yardımıyla bir “Asal Çarpanlara Ayırma Makinesi” yapalım. İşte sonucunda ulaşacağımız bileşen:

Öncelikle Wolfram Alpha’nın Widgets sayfasına gidip “Create account” butonuyla siteye geliştirici olarak kaydolmamız gerekli. Ardından hesabımızla siteye giriş yapıp makinemizi yapmaya başlayabiliriz.

Oluşturduğumuz bileşene sol üst kısımdaki “Edit” tuşunu kullanarak bir isim verelim ve “Save” tuşuna basalım:

Ardından asal çarpanlara ayrımayı sağlayacak Wolfram sorgusunu ekleyelim ve “Next” tuşuna basalım:

Şimdi bu sorguda değişken olarak belirleyeceğimiz sayı kısmını imleç yardımıyla seçeceğiz. Ve “New Variable” tuşuna basacağız.

Oluşturduğumuz değişkenle ilgili özellikleri aşağıdaki gibi belirliyoruz ve yine “Next” tuşuna basıyoruz:

Sıradaki “Widget Layout” ekranında bileşenimizin görünümüyle ilgili değişiklikler yapabiliyoruz. Başlık, çerçeve rengi ve bileşene yeni öğeler ekleme gibi özellikler bu ekranda bulunuyor. İstediğimiz görsel değişiklikleri yapıp yine “Next” tuşuna basıyoruz.

Açılan “Widget Output” ekranında ise hesaplanan sonucun nasıl gözükeceğini, hangi alanları içereceğini belirliyoruz. Çıktı ayarlarında “Show Assumptions” yani “Varsayımları Göster” ve “Show Warnings” yani “Uyarıları Göster” seçeneklerini isteğimize göre belirliyoruz. “Next” tuşuyla sonraki adıma geçiyoruz.

Output Type” adımında sonuçların gösteriliş biçimini belirliyoruz. Lightbox, Popup ve iFrame seçeneklerini önizlemelerde inceleyerek içlerinden birini seçiyoruz ve sonraki adıma geçiyoruz.

Widget Info” adımında bileşenimizle ilgili bilgi kutucuklarını dolduruyoruz.

Son olarak “Publish” tuşuna basıyoruz ve bileşenimiz artık hazır. Hazırladığımız Asal Çarpanlara Ayırma Makinesinin sayfasını görebilir ve aşağıdaki kodu sitemize ekleyerek sitemizde bu makineyi yayınlayabiliriz.

<script type="text/javascript" id="WolframAlphaScript4c26774d852f62440fc746ea4cdd57f6" src="http://www.wolframalpha.com/widget/widget.jsp?id=4c26774d852f62440fc746ea4cdd57f6"></script>

Wolfram Alpha

23 Ağustos 2010 – Matematik, Tanıtım, Web1 Yorum

Wolfram Alpha 2009 mart ayında duyurulan ve 15 Mart 2009′da yayına başlayan bir cevap motorudur. Sorduğumuz sorulara web sayfalarında arama yapmak yerine, kendi veritabanındaki bilgilere dayanarak ve gelişmiş bir hesaplama yaparak yanıt verir. Wolfram’ın önceki ürünlerinden, fonksiyonal bir programlama paketi olan Mathematica‘ dan da faydalanan sistem, sadece matematiksel sonuçlarla kalmıyor ve çok geniş bir yelpazede cevaplar sunabiliyor.

Çok yetenekli bu cevap motorunda, cevap alabileceğimiz geniş içerikten bazı örnekler:

Matematik:

Üçüncü Dereceden bir bilinmeyenli bir denklemin çözümü: x^3 – 4x^2 + 6x – 24 = 0

Bir mantıkla ilerleyen sayı dizisinin hangi düzende olabileceği : 5, 14, 24, 35, 47, …

Bir denklemin türevinin çözümü : Türev => (x^4)sin(x)

Bir diferansiyel denklemin çözümü:  2 y ‘ = sin(2x)

Belli bir adet atılan zarla ilgili olasılık durumları: 8 zar

Diğer

Fizikte İdeal gaz kanununa göre gazın hacmi: 2.2mol, 2.0atm, 500Kelvin

Görüntü ve mercek arasındaki uzaklık: Odak uzunluğu: 20cm, Nesne-mercek uzaklığı:400cm

Belli bir tarihte bir gezegenenin durumu: 10 Kasım 1983′te Jupiter

Birim çevirileri :  400 cm kaç “feet”tir?

Bir sözcüğü MD5 metoduyla şifreleme: cebirci

Belli bir yapıyla ilgili bilgi : Boğaziçi Köprüsü

Bir sözcüğün barkoda dönüştürülmüş şekli: cebirci

İki tarih arasında geçen sürenin analizi: 10 Kasım 1983′ten bugüne

Bir yerdeki saat: Kongo saati

Bir ülkeyle ilgili sosyo-ekonomik veriler: Türkiye’nin enerji üretimi

Dünya üzerindeki bir ülke, şehir, dağ, nehir gibi coğrafi yerlerin detaylı özellikleri: Erciyes Dağı

Tarihsel bir kişi veya olayla ilgili bilgi: Fatih Sultan Mehmet

Bir şirketle ilgili detaylı bilgi: Vodafone

Bir film, kitap veya şarkıyla ilgili bilgi: Babam ve oğlum

Bir yerin hava durumu: İstanbul

Bir dövizin başka bir döviz cinsinden karşılığı: 1 USD’nin TL karşılığı

Belli bir yılda belli bir yerde olan depremler: 1999 yılında İstabuldaki depremler

Geliştirilmekte olan bir çok bölüm daha var. Anatomi, Spor ve Müzik Sanatçıları bu geliştirilecek konulardan bazıları. Tüm bu sorgu örneklerini kategorize edilmiş biçimde Wolfram Alpha örnekler sayfasından inceleyebiliriz ve istediğimiz sorguları yapabiliriz. Çok nitelikli bir site olan Wolfram Alpha‘yı gerçekten tavsiye ediyorum.

Project Euler

17 Ağustos 2010 – Matematik, Yazılım1 Yorum

Bu yazıda www.projecteuler.net sitesini tanıtacağım. Project Euler, içinde 299 matematik problemi barındırıyor. Ancak bu problemleri çözebilmek için sadece matematik bilgisi yetmiyor. Çünkü sorular bilgisayar yardımı olmadan çözülmesi çok zor sorular. Zaten 117501 kullanıcısı olan sitenin amacı da bilgisayar ve programlama yeteneklerinin kullanılmasını sağlamak.

Üye olduğumuzda isteğe bağlı olarak kullandığımız programlama dilini ve ülkemizi seçebiliyoruz. Bu bilgiler ışığında sıralamamızı görebiliyor, üyelerin hangi soruları doğru yanıtladığını inceleyebiliyor, hangi programlama dillerinin daha başarılı olduğunu yorumlayabiliyoruz.

Üyeler 6 aşama atlayabiliyorlar. Birinci aşama için 25, ikinci aşama için 50, üçüncü aşama için 100, dördüncü aşama için 150, beşinci aşama için 200 ve altıncı aşama için 250 soru çözülmesi gerekiyor. Ülkesini Türkiye olarak seçmiş 340 üyeden altıncı aşamaya geçmiş tek bir üye bulunuyor.

Ancak Project Euler sitesinin Türk kullanıcılar için bir dezavantajı soruların tamamının İngilizce olması. Her ne kadar sorularda matematiksel terimler yoğunlukta olsa da, İngilizce bilmeyenlerimiz için dil bir sorun olarak karşımıza çıkabilir.

İşte bir örnek soru, siz de kendi programlama dilinizle bu problemi çözmeye ne dersiniz?

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

Türkçesi,

3′ün veya 5′in katı olan 10′dan küçük tüm doğal sayıları listelersek, 3, 5, 6, ve 9′u elde ederiz. Bu katların toplamı 23′tür. 3′ün veya 5′in 1000′den küçük tüm katlarının toplamını bulunuz.

Bakalım sonucu bulabilecek miyiz?

FQL (Facebook Query Language) İle Sorgu Yapma

27 Temmuz 2010 – Facebook, Javascript, YazılımYorum Yap

Facebook’un kendi sorgu dili olan FQL ile Facebook veritabanına sorgu yapabiliyoruz. Sorgu yapabileceğimiz tabloları ve alanları Facebook resmi kaynak dökümanlarında inceleyebiliriz. Şimdi bir FQL sorgusuyla, kullanıcının Facebook’taki bazı temel bilgilerine nasıl ulaşacağımıza bakalım.

Önce FB.api fonksiyonuyla kütüphaneye erişiyoruz.

FB.api('/me', function(response) {
}

Bu fonksiyonun döndüğü sonuç değişkeninde, bağlı kullanıcının Facebook ID değeri bulunuyor. Oluşturduğumuz sorguda Facebook ID değerini kullanıyoruz:

var sorgu= FB.Data.query('select name, hometown_location, sex, pic_square from user where uid={0}', response.id);

Sorguyu wait metoduyla çalıştırıp, sistemin fonksiyon sonuç dönene kadar beklemesini sağlıyoruz.

sorgu.wait(function(rows){
});

Ardından da sorgudan gelen sonuçları ayrıştırıp sayfaya yazıyoruz.

document.getElementById('divBilgiler').innerHTML =
"İsminiz: " + rows[0].name + ",<br/> Cinsiyetiniz: " + rows[0].sex + ",<br/> Resminiz: <br/>" + "<img src='" + rows[0].pic_square + "'></img>";

Fonksiyonumuzun tamamı şu şekilde:

function fqlSorgu(){
FB.api('/me', function(response) {
  var sorgu= FB.Data.query('select name, sex, pic_square from user where uid={0}', response.id);
  sorgu.wait(function(rows) {
    document.getElementById('divBilgiler').innerHTML =
"İsminiz: " + rows[0].name + ",<br/> Cinsiyetiniz: " + rows[0].sex + ",<br/> Resminiz: <br/>" + "<img src='" + rows[0].pic_square + "'></img>";
    });
  });
}

Örnek sayfayı şurada görebiliriz: http://www.cebirci.com/demo/FB_FQL

Facebook API ile otomatik durum güncelleme

21 Temmuz 2010 – Facebook, Javascript, Yazılım5 Yorum

Sitemize giriş yapmış birinin, Facebook’taki durumunu otomatik olarak nasıl güncelleyeceğimize bakalım.  Durum güncellemesi yapabilmek için kullanıcının sitemize Facebook Connect ile bağlanması gerekmektedir. Bu entegrasyonun nasıl yapılacağını Graph API ile Facebook Connect – 1 yazımızda paylaşmıştık.

Amacımız kullanıcının Facebook sayfasında şu şekilde bir durumu otomatik olarak yayınlamak:

Facebook Api ile Otomatik Durum Güncelleme

Öncelikle kullanıcıdan gerekli izinleri almamız gerekiyor. İzin almak için login-buton’unda perms özelliğine alacağımız izinleri ekleriz. Bu örnekte kullanıcıdan duvarında yazı yayınlama izini isteyeceğiz. Bu izini isteyecek publish_stream değişkenini ekliyoruz.


<fb:login-button autologoutlink="true" perms="publish_stream"></fb:login-button>

Ardından otomatik durum güncelleyecek kodu sayfamıza ekleyelim:

function statuGuncelle(){
var body = "cebirci.com'da 'Facebook API ile otomatik Statü güncelleme' yazısını inceliyor.";
FB.api('/me/feed', 'post', { message: body }, function(response) {
if (!response || response.error) {
alert('Hata Oluştu');
} else {
alert('Duvara eklenen Post ID: ' + response.id);
}
});
}

Örnek sayfayı şurada görebiliriz: http://www.cebirci.com/demo/FB_DurumGuncelleme

Graph API ile Facebook Connect

08 Temmuz 2010 – Facebook, Javascript, Yazılım2 Yorum

Geçtiğimiz aylarda Facebook yeni API’sini duyurmuştu. Graph API isimli bu arabirim beraberinde yeni kullanım şekilleri de getirdi. Ayrıca eski API’de bulunan “Facebook Connect” entegrasyonu ve uygulama izinleri gibi kısımlar da daha güçlü ve kolay bir altyapıya oturtuldu. Bu yazıda kısaca Graph API’ nin Facebook Connect entegrasyonunda nasıl kullanıldığından bahsedelim.

Örnek sayfayı şurada görebiliriz: http://www.cebirci.com/demo/FB_GraphApi

Öncelikle, API Anahtarı alabilmek için bir Facebook uygulaması yaratmak gerekiyor. Buradan uygulama yaratabiliriz. Veya daha önce yarattıysak API Anahtarımızı aşağıdaki kodda xxxxxxxxxx yazan yere kopyalayım.

<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: 'xxxxxxxxxx', status: true, cookie: true, xfbml: true});
};
(function() {
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = document.location.protocol +
    '//connect.facebook.net/tr_TR/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());

Yukarıdaki kodu sayfamızda body tagleri arasına ekliyoruz. Bu kod parçacığını ekleyerek Facebook Javascript SDK ‘yı sayfamıza asenkron şekilde yüklüyoruz. Böylece sayfadaki diğer elementlerin bu yüklemeyi beklemesini engelliyoruz. Ayrıca FB.init fonksiyonunun detaylarına da buradan ulaşabiliriz.

Html Tag’imizi şu şekilde düzenliyoruz ki FBML kontrollerini sayfamızda kullanabilelim:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

Şimdi sırada login, logout ve sessionChange gibi olayları canlandırmak için FB.Event.subscribe metodunu kullanacağız. Kodu şu şekilde yeniden düzenliyoruz:

<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
 FB.init({appId: 'xxxxxxxxxx', status: true, cookie: true, xfbml: true});
 /* Bütün olaylar tanımlanıyor */
 FB.Event.subscribe('auth.login', function(response) {
    // cevap geldiğinde çalışacak kod
    login();
 });
 FB.Event.subscribe('auth.logout', function(response) {
    // cevap geldiğinde çalışacak kod
    logout();
 });

 FB.getLoginStatus(function(response) {
 if (response.session) {
    // login olmuş ve bağlanmış kullanıcı
    login();
 }
 });
};
(function() {
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = document.location.protocol +
    '//connect.facebook.net/tr_TR/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());

Böylece kullanıcı ilk login olduğunda login() metodu, logout butonuna basıldığında da logout() metodu çağırılacak. Kullanıcı daha önceden uygulamaya izin vermiş ve giriş sırasında Facebook’ta online durumda ise otomatik olarak login() metodu çağrılacak.

Kullanıcının login ve logout işlemlerini yapabilmesi için FBML kontrolü olarak login butonu ekliyoruz.

<fb:login-button autologoutlink="true" ></fb:login-button>

Son olarak login ve logout durumlarında sayfamızdaki değişiklikleri yapacak javascript metodlarımızı ekliyoruz.

function login(){
    FB.api('/me', function(response) {
    document.getElementById('login').style.display = "block";
    document.getElementById('login').innerHTML ="Sayın " + response.name + ", başarıyla bağlandınız!";
    });
 }
function logout(){
    document.getElementById('login').style.display = "none";
 }

Ve sayfamızın son hali şu şekilde:

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <title>Graph API ile Facebook Connect Örneği</title>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: '121581787886211', status: true, cookie: true, xfbml: true});

/* Bütün olaylar tanımlanıyor */
FB.Event.subscribe('auth.login', function(response) {
   // cevap geldiğinde çalışacak kod
   login();
});
FB.Event.subscribe('auth.logout', function(response) {
   // cevap geldiğinde çalışacak kod
   logout();
});
FB.getLoginStatus(function(response) {
   if (response.session) {
   // login olmuş ve bağlanmış kullanıcı
   login();
   }
});
};

(function() {
   var e = document.createElement('script');
   e.type = 'text/javascript';
   e.src = document.location.protocol +
   '//connect.facebook.net/tr_TR/all.js';
   e.async = true;
   document.getElementById('fb-root').appendChild(e);
}());

function login(){
   FB.api('/me', function(response) {
   document.getElementById('login').style.display = "block";
   document.getElementById('login').innerHTML ="Sayın " + response.name + ", başarıyla bağlandınız!";
});
}
function logout(){
   document.getElementById('login').style.display = "none";
}
</script>

<h3>Graph API ile Facebook Connect Örneği</h3>
<p><fb:login-button autologoutlink="true" ></fb:login-button></p>
<br /><br /><br />
<div id="login" style ="display:none"></div>
</body>
</html>

cebirci.com

05 Temmuz 2010 – Genel1 Yorum

Tam beş yıldır içerik bekleyen cebirci.com, sonunda blog formatında yayına başladı. Blogu açtığım bu günlerde düşüncem; yazılım ve matematik alanında profesyonel içerik sağlamak.

Herhangi bir iddiayla veya önemli bir ideal uğruna başlamadığım blogun yararları olabileceğini düşünüyorum. Umuyorum ki yayınladıklarımla okuyanlar için, katkı sağlayabilirim.

Ayrıca, web teknolojilerinde profesyonel olan biri olarak bu ortamı değerlendirmek de gerekiyor diye düşünüyorum.