Pazar, Aralık 19, 2010

25 Yıldır Ayakta

shiftdelete.net'ten alıntıdır. Yazının orijinaline buradan ulaşabilirsiniz.

25 Yıldır Ayakta

1985 yılında Microsoft, bilgisayar kullanıcılarına büyük bir sürpriz yaparak Windows 1.0 adındaki yeni ürününü piyasaya sundu. Grafik arayüz kavramı bu tarihten sonra gün yüzüne çıktı.


Şimdi bu tarihten iki yıl öncesine gidiyoruz. Yıl 1983 ve yine Kasım ayı. Birçok PC kullanıcısının grafik arayüz hakkında hiçbir bilgisi yok. Hatta "Fare kullanıyor musunuz?" diye sorulsa "Bizim evde yok" cevabını alabilirdiniz. İşte bu günlerde Microsoft adındaki bir firma grafik arayüze sahip bir işletim sistemi yapacağını açıkladı. Birçok otorite, bu tarz bir işletim sistemi yapılacağı söylentilerine şüphe ile baktı. Tabii ki o dönemlerde yazılımcı denilince akla hiçbir şey gelmiyor. Fakat birçok mühendis ve özellikle PC üretici firmaların çalışanları işletim sistemi üzerine hararetli bir çalışma içeresindeydiler. Hatta bazı firmalarzamanına göre oldukça iyi denilebilecek işletim sistemleri piyasaya sürdüler.

Fakat bazı nedenler onların ayakta kalmasına engel oldu. Eğer bu işletim sistemlerinin şansları yaver gitseydi şimdi piyasada birçok kullanıcı tarafından kullanılan 10'nun üzerinde işletim sistemi olabilirdi. Gelin isterseniz Windows'un geçmiş dönemdeki rakiplerine bir göz atalım.

Visi On
1983 yılının Aralık ayında kullanıcıların beğenisine sunulan Visi On basit bir işletim sisteminden başka bir şey değildi aslında. İşletim sistemi, Visi On Applications Manager adı altında ve 495 $ fiyatla satışa çıkartıldı. İşletim sistemiyle birlikte artı 295 $ karşılığında fare de satın alabiliyordunuz. VisiCorp firması Visi On işletim sistemiyle birlikte üç uygulamayı daha kullanıcıların beğenisine sundu. Visi On Calc 395 $'dan, Visi On Graph 250 $'dan ve Visi On Word 375 $'dan satışa çıktı. Bu ürünlerin toplam paket fiyatı ise 1765 $'dı.

Yukarda belirttiğimiz bedelleri ödeyenler Visi On işletim sistemine sahip olabiliyorlardı. Grafik tabanlı bir yazılım olan Visi On zamanının en iyi işletim sistemi olan DOS 6.22 üzerinde çalışabiliyordu. Fakat işletim sisteminin grafik arayüzünü kullanabilmeniz için özel bir fare kullanmanız gerekiyordu. Ayrıca depolama alanınızın en az 5 MB olması şarttı. Zamanına göre yüksek bir depolama alanı olan 5 MB için birçok kullanıcı 7500 $ gibi bir bedel ödedi. Firma 1985 yılının Ocak ayından itibaren basit işletim sisteminin fiyatını 99 $'a kadar çekti. Bu da işe yaramamış olacak, firma 1985 yılının Kasım ayında işletim sistemini PaladinSoftware'e sattı. Yeni firma işletim sisteminin adını Paladin olarak değiştirildi.

TopView
Windows'un bir diğer rakibi ise IBM tarafından yazılan TopView işletim sistemiydi. IBM tarafından yazılan işletim sistemi 1984 yılının Ağustos ayında kullanıcılar ile buluştu. IBM işletim sistemini kendi PC'leri ile birlikte dağıtmayı denedi. Bu konuda başlarda başarılı gibi gözükse de, Microsoft'un Windows'u kullanıcıların beğenisine sunmasının ardından popülaritesi azaldı.

DOS 2.0'dan 6.0'a kadar desteği bulanan TopView'in ömrü sadece 6 yıl sürdü. 1990 yılının Haziran ayına kadar hayatta kalan TopView, IBM'ingeliştirmeyi durdurduğu kararının ardından tarihteki yerini aldı. Aslında IBM kullanıcı dostu ve GUI (Graphical user interface) arabirime sahip olacak bir işletim sistemi için kullanıcılarına söz vermişti. Fakat IBM'in yazılımcıları bu sözü tutamadı.

GEM
1984 yılında Digital Research firması tarfından halkın beğenisine sunuldu. Bu sistemin çalışma mantığı Windows'a çok yakındı. Hatta grafik arayüzü bile Windows'ta olduğu gibi pencereler yardımıyla çalışıyordu. GEM (Graphical Environment Manager) işletim sistemi GUI'nın kullanıldığı ilk işletim sistemi olarak da biliniyor. GEM piyasaya çıkmasının ardından hemen sıkıntıya düştü. Çünkü Apple, GEM'in görünüşünün Mac işletim sistemine benzediği gerekçesiyle dava açtı. Buna karşılık GEM "Elegant Edition" adıyla yeni bir sürüm çıkarttı.

1991 yılında, firma işletim sistemini sattı. Bundan sonra açık kaynak kodlu olarak yoluna devam eden işletim sisteminin 1999 yılında FreeGEM ve OpenGEM adı altında iki sürümü daha halkın beğenisine sunuldu.

DESQview
Windows 1.0'dan beş ay önce 1985 yılının Haziran ayında piyasaya sürülen DESQview, IBM'in TopView işletim sisteminin alternatifi olarak piyasadaki yerini aldı. Bu işletim sistemi üzerinde DOS uygulamalarının hepsi çalışıyordu. Başlarda oldukça iyi satış rakamlarını yakalayan DESQview ileriki zamanlarda Unix temelli X Windows uygulamalarını desteklemediği için fazla ilgi görmedi. Firma 1990 yılında DESQview/X sürümünü çıkarttı, fakat bu çırpınışlar Windows'un popülerliğini azaltmadı. Ufak bir gecikme yaşaması yazılımın hayatına mal oldu. Firma 1998 yılında DESQview'i Symantec'e sattı. Bu satışın ardında hiç kimse DESQview adını duymadı.

DeskMate
Bu işletim sisteminin ilk ortaya çıkışı 1986 yılındaydı fakat stabil çalışan işletim sistemi 1992 yılında halka sunuldu. Metin temelli işletim sistemi grubuna giren DeskMate hiçbir zaman çekici bir varlık gösteremedi. 2. ve ardından gelen 3. versiyonuna rağmen 1990'ların başında sıkışıp kalan işletim sistemini uygun fiyatı dahi kurtarmaya yetmedi.

PC/GEOS
Windows 3.0 ile birlikte aynı yıl (1990) içerisinde halkın beğenisine sunulan PC/GEOS işletim sistemi GUI arabirimini kullanıyordu. 16 bit işletim sistemi DOS tabanlıydı. 2000'li yıllara kadar hayatta kalan GEOS'un son sürümü 2009 yılının Ağustos ayında kullanıcıların beğenisine sunuldu. GEOS'un son sürümü Windows 95'in klonu gibi. 1990 ila 2009 arasındaGEOS işletim sisteminin 24 versiyonu bulunuyor. Bu işletim sistemlerini birçok kişi tarafından kullanışsız bulundu ve hiçbir zaman popüler olmadı.


Sizleri biraz gerilere götürerek Windows'un rakibi olmaya çalışan işletim sistemleriyle ilgili bilgiler verdik. Bu işletim sistemlerinin popüler olmamasının birçok sebebi var aslında. Fakat Microsoft'un gözbebeği Windows'un da oldukça şanslı olduğu söylenebilir. Kim bilir belki 25 yıl sonra başka bir işletim sistemi popüler olacak. Hep beraber bekleyip göreceğiz.

Pazar, Kasım 21, 2010

ASP .Net ile Tic Tac Toe

Geçenlerde bir arkadaşımla msn'de sunucu tabanlı bir dille Tic Tac Toe yazılabilir mi,yazılamaz mı, yazılırsa nasıl olur şeklinde muhabbet etmiştik. İkimizinde hem fikir olduğumuz nokta böyle bir oyunu JavaScript ile yazmanın daha mantıklı olduğuydu ama meraktan sunucu tabanlı bir dille nasıl olabileceğini konuştuk. Bende bu aralar ASP .Net ile haşir neşir olduğumdan ve daha öncede Tic Tac Toe ile ilgili tecrübem olduğunda yazmaya karar verdim.

C++ ile yaptığım versiyonunda tek bir bilgisayarda iki kişi tarafından (fareyi sırayla kullanarak) oynanabiliyordu. Buna ufak bir yapay zeka(AI) yazarak bilgisayara karşı oynayabilecek şekilde yaptım.

Kodlar

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TicTacToe
{
public partial class Default : System.Web.UI.Page
{
//Hangi şekillerde karakterden 3 tane aynı hizaya gelebilir
private static int[,] ihtimaller = new int[,] { {0,1,2}, {3,4,5},
{6,7,8}, {0,3,6},
{1,4,7}, {2,5,8},
{0,4,8}, {2,4,6}};

protected void Page_Load(object sender, EventArgs e)
{
int[] harita = haritaOlustur();

if (Request.QueryString["hucre"] != null)
{
int index = Convert.ToInt32(Request.QueryString["hucre"]);
harita[index] = 1;
bilgisayarOyna();
}
else if (Request.QueryString["yeniOyun"] != null)
{
Session.Clear();
Response.Redirect("Default.aspx");
}

/*kazananVarMi() fonksiyonu 3 farklı sayı döndürebilir:
0 => Kazanan yok
1=>Oyuncu kazandı
2=>Bilgisayar Kazandı*/
int kazanan = kazananVarMi();
if (kazanan > 0)
{
string strKazanan = "<center><span style='font-size:35pt;font-weight:bold'>";
strKazanan += (kazanan == 1 ? "Sen Kazandın" : "Bilgisayar Kazandı")
+ "</span></center>";
Response.Write(strKazanan);
}
else if (berabereMi())
{
string strKazanan = "<center><span style='font-size:35pt;font-weight:bold'>"
+ "BERABERE</span></center>";
Response.Write(strKazanan);
}
else
{
tabloOlustur(harita);
Session["harita"] = harita;
}


}

private void tabloOlustur(int[] pHarita)
{
int sayac = 0;
for (int i = 0; i < 3; i++)
{
TableRow satir = new TableRow();
for (int k = 0; k < 3; k++)
{
TableCell hucre = new TableCell();
hucre.Width = 75;
hucre.Height = 75;
hucre.HorizontalAlign = HorizontalAlign.Center;
hucre.Attributes.Add("onMouseOver", "this.bgColor='#00c0ff'");
hucre.Attributes.Add("onMouseOut", "this.bgColor=''");
if (Convert.ToUInt32(pHarita[sayac]) == 0)
hucre.Text = "<a href='Default.aspx?hucre=" + sayac.ToString() + "'>Tıkla</a>";
else if (Convert.ToUInt32(pHarita[sayac]) == 1)
hucre.Text = "<span style='font-size:35pt;font-weight:bold'>X</span>";
else
hucre.Text = "<span style='font-size:35pt;font-weight:bold'>O</span>";

satir.Cells.Add(hucre);
sayac++;
}
tablo.Rows.Add(satir);
}
}

private int[] haritaOlustur()
{
int[] harita = new int[9];
if (Session["harita"] != null)
{
harita = (int[])Session["harita"];
}
else
{
for (int i = 0; i < 9; i++)
harita[i]=0;
}

return harita;
}

private int kazananVarMi()
{
int[] harita = haritaOlustur();
int durum = 0;
int hucre1 = 0, hucre2 = 0, hucre3 = 0;
for (int i = 0; i < 8; i++)
{
hucre1 = ihtimaller[i, 0];
hucre2 = ihtimaller[i, 1];
hucre3 = ihtimaller[i, 2];

if (harita[hucre1] != 0 && harita[hucre2] != 0 && harita[hucre3] != 0)
{
if (harita[hucre1] == harita[hucre2] && harita[hucre1] == harita[hucre3])
durum = harita[hucre1];
}
}

return durum;
}

private bool berabereMi()
{
//Eğer harita dizisinde değeri 0 olan eleman yoksa oyun Berabere bitmiş demektir
int[] harita = haritaOlustur();
for (int i = 0; i < 9; i++)
{
if (harita[i] == 0)
return false;
}

return true;
}

private void bilgisayarOyna()
{
int hucre1 = 0, hucre2 = 0, hucre3 = 0;
bool durum = false;
int[] harita = haritaOlustur();
for (int i = 0; i < 8; i++)
{
hucre1 = ihtimaller[i,0];
hucre2 = ihtimaller[i,1];
hucre3 = ihtimaller[i,2];

//Bilgisayarın tek hamlede kazanma ihtimali var mı ?
if (harita[hucre1] == 2 && harita[hucre2] == 2 && harita[hucre3] == 0)
{
durum = true;
harita[hucre3] = 2;
break;
}
else if (harita[hucre1] == 2 && harita[hucre3] == 2 && harita[hucre2] == 0)
{
durum = true;
harita[hucre2] = 2;
break;
}
else if (harita[hucre2] == 2 && harita[hucre3] == 2 && harita[hucre1] == 0)
{
durum = true;
harita[hucre1] = 2;
break;
}
//Karşıdaki oyuncunun tek hamlede kazanma ihtimali var mı ?
else if (harita[hucre1] == 1 && harita[hucre2] == 1 && harita[hucre3] == 0)
{
durum = true;
harita[hucre3] = 2;
break;
}
else if (harita[hucre1] == 1 && harita[hucre3] == 1 && harita[hucre2] == 0)
{
durum = true;
harita[hucre2] = 2;
break;
}
else if (harita[hucre2] == 1 && harita[hucre3] == 1 && harita[hucre1] == 0)
{
durum = true;
harita[hucre1] = 2;
break;
}
}

/*Oyunun bitme ihtimali yoksa rasgele oynar.
*Aslında burayıda nasıl oynayacağını detaylandıracak
*kodlar yazılarak daha akıllı hale getirilebilir
*/
if (!durum)
harita[bosHucreBul()] = 2;
}

private int bosHucreBul()
{
Random sayi = new Random();
int hucre = sayi.Next(0, 9);
int[] harita = haritaOlustur();

/*BerabereMi fonksiyonu boş hücre varmı diye kontrol eder.
Eğer kontrole bunu da eklemezsek ve hiç boş hücre yoksa
Sonsuz döngüye girer*/
while (harita[hucre] != 0 && !berabereMi())
{
hucre = sayi.Next(0, 9);
}

return hucre;
}
}
}



Ekran Görüntüsü

Proje Olarak indirmek için aşağıdaki linki kullanabilirsiniz. Visual Studio 2010 ile hazırlanmıştır. İsteyen için PHP versiyonu da mevcut :)
İNDİR

Salı, Kasım 16, 2010

PHP $this İşaretçisinin Adını Değiştirmek

Başlıktada belirttiğim gibi "$this" işaretçisi'nin adını değiştirmek mümkün mü?
Hangi amaçla böyle bir şeye ihtiyaç duyulur şuan için bir fikrim yok ama ceviz.net'in PHP bölümünde böyle bir başlıkla karşılaştım. Konuya buradan ulaşabilirsiniz.


Konu hakkındaki ilk yorumum böyle bir şeyin olamayacağı yönündeydi. Sonuçta bu ad php yorumlayıcısı tarafından belirlenmiş anahtar kelimeydi. Ama biraz düşününce yolu biraz dolandırarak çok basit bir yöntemle yapmak mümkün olabilirdi. Sınıf içinde $this işaretçisine referans olacak bir değişken tanımlayıp, sınıf içindeki değişkenlere yeni tanımladığımız değişkenle erişmek mümkün. Aşağıdaki ufak örnek daha iyi anlamaya yardımcı olabilir.


<?php
class Birsey
{
public $mesaj;
private $bu;//Yeni işaretçi olacak

function __constructor()
{
//Yeni değişkeni $this'e referans olarak ayarlıyoruz
$this->bu = &$this;
}

function birseyYap($mesaj)
{
//Yeni işaretçi ile sınıf değişkenlerine erişiyoruz
$bu->mesaj = $mesaj;
echo $bu->mesaj;
}
}

$nesne = new Birsey();
$nesne->birseyYap("Merhaba Dünya");
?>

Pazar, Kasım 07, 2010

SDL Per Pixel Çarpışma Algoritması

Daha önce Oyunlarda Basit AI(Yapay Zeka) Uygulamaları yazımda Rectangle çarpışma algoritmasından bahsetmiştim. Bu algoritmanın mantığında resmi dik dörtgen olarak algılayıp o sınırlar içine başka bir resim girerse çarpışma var demektir. Aşağıdaki resimlerdeki gibi.











Burada şöyle bir sorun çıkar karşımıza. Nesnelerimiz her zaman bu şekilde dik dörtgen olmaya bilir. Yuvarlak,üçgen, çokgen veya belli bir biçimi olmaya bilir. Bu durumda rectangle algoritması yukarıda belirttiğim gibi resmin etrafında bir çerçeve varmış gibi farz eder ve başka bir resim o çerçevenin sınırları içerisine girerse çarpışma algılar. Aşağıdaki resimlerdeki gibi.












Halbuki ikinci resimde tuğla ile kaya arasında temas yok. Yani çarpışma henüz gerçekleşmedi. Kayaya deydiği anda çarpışma var olarak algılatmamız lazım. İş de bu tip durumlar için Per Pixel Çarpışma algoritmalarına ihtiyaç duyarız.

Per Pixel algoritmalarında öncelikle bilmemiz gereken şey arka planı şeffaf(transparan) resimler kullanmamız gerektiği. Bu algoritmada Rectangle Çarpışma algoritmasında olduğu gibi yine resmin sınırları bir çerçeve gibi belirlenir(resimlerdeki yeşil ve kırmızı arkaplanları ben anlaşılması açısından koydum). Başka bir resim bu sınır içerisine girdiğinde her iki resim içinde kesişen yerlerdeki pixeller taranmaya başlar. Her iki resim içinde taranmakta olan mevcut pixel transparan değilse çarpışma var demektir.












İlk resimde resmin sınırlarına girmiş durumda ama henüz bir temas yok. İkinci resimde ise temas var ve çarpışma algılanmış durumda. Bu işlemi gerçekleştiren kod aşağıdaki şekilde:

SDL_Rect Resim::temasAlani(SDL_Rect rect)
{
SDL_Rect temasRect;
temasRect.x = rect.x - this->getX();
temasRect.y = rect.y - this->getY();
temasRect.w = rect.w;
temasRect.h = rect.h;

return temasRect;
}

bool Resim::perPixelCarpismaKontrol(Resim* hedef)
{
bool durum = false;

int x1 = Maximum(getResimKoord().x, hedef->getResimKoord().x);
int y1 = Maximum(getResimKoord().y, hedef->getResimKoord().y);

int x2 = Minimum(getResimKoord().x + resimW, hedef->getResimKoord().x + hedef->resimW);
int y2 = Minimum(getResimKoord().y + resimH, hedef->getResimKoord().y + hedef->resimH);

int width = x2 - x1;
int height = y2 - y1;

SDL_Rect carpismaRect = {0,0,0,0};

//Eğer width ve height 0 dan büyükse ise resimler temas halinde demektir
if(width > 0 && height > 0)
{
//Ne kadarlık bir alanın temas halinde olduğu
carpismaRect.x = x1;
carpismaRect.y = y1;
carpismaRect.w = width;
carpismaRect.h = height;

/*İlgili resmin hangi koordinatlarında kesişme olduğunu öğreniyoruz
Bu sayede resmin tamamını değil sadece kesişen kısmı kontrol ediyoruz*/
SDL_Rect kaynakRect = temasAlani(carpismaRect);
SDL_Rect hedefRect = hedef->temasAlani(carpismaRect);

//pixel pixel resim taramasına başlıyorum
for(int y = 0; y <= carpismaRect.h; y++)
{
for(int x = 0; x <= carpismaRect.w; x++)
{
if(GetAlphaXY(this, kaynakRect.x + x, kaynakRect.y + y) &&
GetAlphaXY(hedef, hedefRect.x + x, hedefRect.y + y))
durum = true;
}
}
}
else
durum = false;

return durum;
}


Yukarıdaki kodlarda temasAlani() fonksiyonuna dikkat çekmek istiyorum.Ne kadarlık bir alanda temas olduğunu öğrendikten sonra temasAlani() fonksiyonu ile temasın ilgili resmin hangi koordinatlarında yani hangi pixeller arasında olduğunu öğreniyoruz. Bu sayede sadece o alandaki pixellerin şeffaflığını kontrol etmiş oluyoruz.












Aşağıda örnek uygulama anlamanıza yardımcı olacaktır. Farkı görmeniz açısından hem Rectangle hemde Per Pixel çarpışma algoritmalarını beraber verdim.











Not: Program Code::Blocks kullanarak GCC ile derlenmiştir. Proje klasörünün içinde çalıştırılabilir(executable) halleri vardır. SDL'yi kurmadan deneyebilmeniz için.

Linux(Ubuntu) için Kaynak Kod: SDL_Per_Pixel
Windows için Kaynak Kod: SDL_Per_Pixel

Perşembe, Ekim 14, 2010

Ubuntuda PHP hata mesajları görünmüyor!!!

Linux üzerinde php yi elle kurduğunuzda varsayılan olarak php.ini klasöründeki "display_errors" ve "display_startup_errors" seçenekleri "off" olarak gelir. Bu yüzdende scriptinizi çalıştırdığınızda kodunuzda hata varsa görünmez, karşınıza sadece boş bir ekran gelir. Aşağıdaki adımları izleyerek php nin hata mesajlarını görebilirsiniz.

1- /etc/php5/cli/ ve /etc/php5/apache2/ dizinlerinde bulunan php.ini dosyalarını açıp her ikisi için 2.adımdaki işlemleri uygulayın.
sudo gedit /etc/php5/cli/php.ini
sudo gedit /etc/php5/apache2/php.ini

2- "display_errors" ve "display_startup_errors" seçeneklerini bulun ve "off" yerine "on" yazın.

display_errors = on
display_startup_errors= on

3-Son olarak apache'yi yeniden başlatın.

sudo /etc/init.d/apache2 restart

Salı, Ekim 12, 2010

Ubuntu 10.10 Maverick Meerkat Duyuruldu!

Dünyanın en çok tercih edilen ve Canonical tarafından her altı ayda bir yeni sürümleri geliştirilen Linux dağıtımı Ubuntu, 10.10 sürümünü ‘Maverick Meerkat‘ kod adı ile duyurdu.

Kusursuz 10 tanımlası ile duyurulan yeni sürüm, bir önceki sürüm olan 10.04 LTS’a göre bir çok yenilik ve geliştirme içeriyor.

2.6.35 Linux çekirdeği ve 2.32.0 Gnome sürüm temellerine dayanan Ubuntu 10.10, yeni bir yazı tipi ailesi, yeniden tasarlanmış sistem yükleyici, yeni resim görüntüleyici, Evolution 2.30.2, Twitter için Gwibber yenilikleri, Firefox 3.6.10, Open Office 3.2.1, Braserio disk yazma aracının yeni sürümü ve bir çok paket güncellemesi ile hata düzeltmeleri yer alıyor.

Sürüm duyurusunun tamamını okumak için burayı, sürüm notları için de burayı tıklayabilirsiniz.

10.04 kullanıcılarının sistemlerini güncellemeleri için, Alt+F2 tuş kombonasyonu aracılığı ile açtıkları uygulama çalıştırma penceresine, ‘update-manager-D’ yazmaları yeterli.

Sisteminize uygun olan Ubuntu 10.10 sürümünü indirmek için tıklayın.

Bir sonraki sürüm olan 11.04, 2011 yılının Nisan ayında duyurulacak.

Kaynak: www.habertux.com

Salı, Ekim 05, 2010

Google Chrome 7

Google'ın 60 kat daha hızlı olacağını iddia ettiği Chrome 7 test sürüşlerine başlamış. Test sürümleri olan 7.0.497.0 geliştirme ve Canary versiyonları google geliştirme kanallarından yıyımlanmaya başlanmış. Chrome ekibi 2 yılda 6 kez güncelleme yaparak en hızlı güncellenen tarayıcı alanında rekoru elinde tutuyo.
Geçen aylarda Chrome 6 Betayı duran ekip sanırım şu sıralar fırtına gibi esen IE9'un hızını kesmeye çalışıyor. Google yazılım mühendisi James Robinson'un Chrome 7 60 kat daha hızlı olacak iddiasıda bundan dolayı olsa gerek.

Chrome 7 nin kararlı sürümü eylül sonunda kullanıma açılacak. Bu sürümde google'ın online alışveriş uygulaması Click-to-play(Plug-in leri önlemek için) özellikleri olacak ve tabi daha bir çok özellik. Genel olarak Chrome sürümleri ile gelen özellikler aşağıdaki şekilde.

Chrome 5'de Java script hızlandırmaları,
Chrome
6'da sade ara yüz ve Html5 güncellemesi,
Chrome 7'de grafik donanımı ivmesi, anında arama ve daha birçok geliştirme.

Perşembe, Eylül 30, 2010

SDL İle Ekrana Nokta(Pixel) Basma

Allegroda bu işi kütüphane ile birlikte gelen "putpixel()" fonksiyon yardımı ile yapabiliyoduk. Ama SDL için aynı durum söz konusu değil. Bizde oyun programlama dersinde internetten hazır olarak bulduğumuz aşağıdaki algoritmayı kullandık. Bu fonksiyon yardımı ile geometrik şekiller(daire,kare,çizgi) çizebilirsiniz.

Söz dizimi:
void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel)

Parametreler:
surface: Noktanın basılacağı yüzey.(Ör:screen)
x ve y: Noktanın koordinatları.
pixel: Noktanın rengi.(Ör:SDL_MapRGB(screen->format,255,255,255))

Kullanım Şekli:
putpixel(screen,100,200,SDL_MapRGB(screen->format,255,255,255));


void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
int bpp = surface->format->BytesPerPixel;
//Here p is the address to the pixel we want to set
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

switch(bpp) {
case 1:
*p = pixel;
break;

case 2:
*(Uint16 *)p = pixel;
break;

case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
} else {
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;

case 4:
*(Uint32 *)p = pixel;
break;
}
}

Çarşamba, Eylül 29, 2010

Ubuntu için CodeBlocks 10.05 Kurulumu

Uzun zamandan beri beklenen yeni CodeBlocks sürümü 27 Mayıs 2010 tarihi itibariyle yayınlanmıştı. 2008 Şubatında bu yana ilk kez yeni bir sürüm paket olarak yayınlandı. Nightly Builds lerle idare ediyoduk. 10.05 yayınlanalı neredeyse 5 ay oldu. Ben o sıralar KPSS ile haşir neşir olduğumdan bu gelişmeler ile ilgili herhangi bir duyuru yapamamıştım. Evdeki bilgisayardaki ubuntuyu kaldırıp yeniden kurunca yeni CodeBlocks sürümünü de kurayım dedim. O yüzden kısmet bugüneymiş.

Konumuza dönecek olursak windows kurulumu tek bir exe den rahatlıkla kurulabiliyor. Linux dağıtımları için ise paket deposunda son sürümü yoksa siteden indirdiğiniz paketleri doğru sırayla kurarak yeni codeblocks a sahip olabilirsiniz. Ben nasıl kuracağım konusunda araştırma yaparken codeblocks forumunda konuyla ilgili açılmış bir başlık buldum. Ordan yararlanarak kurmayı becerdim. Aşağıdaki adımlar izleyerek sizde kurulumu yapabilirsiniz. Ben ubuntu üzerinden anlatacağım. Diğer dağıtımlar içinde mantık aynı.

Kurulum

1- Öncelikle sistemde eski sürümü(8.02) varsa kaldırıyoruz.

sudo apt-get remove codeblocks


2-wxWidget deposunu sisteme ekliyoruz.

echo "deb http://apt.wxwidgets.org/ lucid-wx main" >> /etc/apt/sources.list


3- Depo güvenlik anahtarını ekliyoruz ardından paket deposunu güncelliyoruz.

wget -q http://apt.wxwidgets.org/key.asc -O- | sudo apt-key add -
sudo apt-get update


4-Gerekli olan wxWidget paketlerini kuruyoruz.

sudo apt-get install libwxgtk2.8-0 libwxgtk2.8-dev wx2.8-headers wx-common


5- Buradan codeblocks 10.05'in binary dosyalarına erişebilirsiniz. Ubuntu için dbg siz debian paketini(i386) indiriyoruz. Daha sonra dosyaları bir dizine çıkartıp konsoldan o dizine geçiyoruz.

6- Aşağıdaki komut yardımı ile paketlerin kurulumunu gerçekleştiriyoruz.

sudo dpkg -i codeblocks_10.05-1_i386.deb codeblocks-common_10.05-1_all.deb libcodeblocks0_10.05-1_i386.deb codeblocks-contrib_10.05-1_i386.deb codeblocks-contrib-common_10.05-1_all.deb libwxsmithlib0_10.05-1_i386.deb codeblocks-doc-en_10.05-1_all.deb


Kurulum bu kadar Uygulamar/Programlar bölümünde yeni CodeBlocks'unuza erişebilirsiniz. Güle güle kullanın.

Pazartesi, Eylül 20, 2010

Bill Gates'in en büyük 10 hatası!

Chip de okuduğum bir yazıda Microsoftun babasının verdiği hatalı kararları toparlamışlar. Bunların kimilerini daha önce duymuştum kimilerini de ilk kez okudum. Mesela dosun ölümüne izin vermesi bunlardan bir tanesi.

Hep 40 lı veya 50 li yıllardan sonraki fotolarına rastladığımız Bill Gates'in gençlik yıllarından kalma kurnazca bir bakış attığı fotosunu koydum. Bu bakışlardan gelecekte teknolojide devrim yapacağı belliymiş zaten :). Devrimini yaptı şimdi ve emekli oldu. Ama hala teknolojiden uzak kaldığı söylenemez. Dünya için yararlı olacağına inandığı için çevre teknolojileri ile ilgileniyormuş. Bazı fikirlerini sevmesem de gerçek olan şu ki bilgisayar dünyasına dolayısıyla insanlığa yaptığı katkılar tartışılmaz. Artık Bill Gates'in hatalarına bakmanın zamanı geldi buyrun:


Bill Gates'in en büyük 10 hatası!

1-Tekelcilik suçlamaları

Bill Gates'in kurduğu Microsoft pazarın tek hakimi haline geldi ve dev şirketin başı anti-tekel davalarıyla derde girdi. 18 Mayıs 1998'de başlayan süreçte Microsoft zor yıllar geçirdi.


2-Açık kaynağa karşı
Bill Gates açık kaynak kodlu yazılımlara hiç prim vermedi. Fortune dergisine verdiği röportajda, açık kaynağa karşı ücretli yazılımların korsan sayesinde tutunacağını söylemişti.

3-Güvenlik sorunları

Windows işletim sistemi Bill Gates'i dünyanın en zengin adamı yaptı ama büyük paralar kazanan şirkete düşmanlık da çoktu. Windows'taki sorunlar, özellikle de kullanım kolaylığının güvenliğe alternatif olarak seçilmesi devamlı eleştiri kaynağı oldu.

4-Windows Mobile

Bill Gates, mobil işletim sistemi konusunda yeterince özgün bir fikir ortaya koyamadı. Windows Mobile'ın başarısızlığı Microsoft'un akıllı cep telefonları furyasında çok geç kalmasına sebep olacaktı. Minyatür Windows yerine sıfırdan bir işletim sistemi geliştirilmeliydi.

5-DOS'un ölümü

DOS işletim sisteminin ölmesine izin verdi. Oysa Wİndows'a alternatif ikinci bir işletim sistemi olarak geliştirmeyi ve pazarlamayı sürdürebilirdi.

6-Bulut bilgi işlem

Bill Gates Windows'a o kadar yoğunlaşmıştı ki gelecekte yani bugün günümüzde önem kazanacak bulut bilgi işlem sistemlerinin önemini farkedemedi.

7-Başarısız işletim sistemleri

Windows Millennium gibi başarısız işletim sistemlerinin piyasaya sürülmesine izin verdi. Her işletim sisteminde donanım ihtiyaçları arttı.

8-Arama hizmetleri

Microsoft gücünün doruğundayken internet hizmetlerine hiç önem vermedi. Arama hizmetlerinde ortaya başarılı bir proje koyamadı. Bunun sonucunda da bugün Google gibi bir dev ile karşı karşıya kaldı ve pazar payından en ufak bir parça için bile milyar dolarlar harcamak, büyük bir mücadele vermek zorunda kaldı.

9-Zune...

Microsoft Zune büyük bir hata oldu. Geliştirmek için harcanan paralara karşılık kar elde edemedi. Taşınabilir eğlence aygıtlarında Apple iPod türevleri ile piyasayı silip süpürdü. Bill Gates şirketin bu alandaki faaliyetlerine önceden yön verebilecek konumdaydı.

10-Tabletler

Bill Gates'in zamanında başlayan tablet bilgisayar projeleri hiçbir zaman ortaya doğru düzgün bir ürün koyamadı. Teknoloji yeterinde gelişmemiş olabilirdi ancak yıllar sonra da bu zaaf devam etti. Bill Gates'in hataları kendisini izleyen yöneticiler tarafından sürdürüldü. Apple ise iPad ile piyasayı sildi süpürdü.