Archive for the ‘programlama’ Category

Google Nereye Gidiyor?

Merhaba, bu yazıda neden Google’ın FOSS (özgür yazılım ve açık kaynak) dünyasına destek verdiğine ve bunun nedenlerine değinip gelecekte bizleri nelerin beklediğine az da olsa göz atmak istiyorum. Ayrıca yazıda Cloud Computing kavramından ve ileride bu kavramın FOSS  dünyasındaki etkilerinden söz edeceğim.

Google’ın nereye gittiğini anlamak için öncelikle onun ekonomik kaynaklarını bilmemiz gerekiyor. Google’ın çoğu yazılım şirketi gibi masaüstü yazılımları satarak bu duruma gelmediğini, internet reklamlarından kazanç sağladığını zaten biliyoruz. Google arama motorundaki üstünlüğünü diğer alanlarda da kullanarak (mesela Adsense) ve daha birçok yenilik sunarak web ortamında hizmet vermekte. O yüzden sürekli web’in gelişmesine ön ayak olmaya çalışıyor. Web ne kadar çok kullanılırsa Google’ın reklam gelirleri artıyor. Bu nedenle ki insanların tüm işlerini web üzerinden gerçekleştirmeleri Google’ın işine geliyor. Bunu sağlamak için de daha iyi bir tarayıcı, çeşitli web yazılım kütüphaneleri, web uygulamaları ve son olarak da yeni bir işletim sistemi (Chrome OS) geliştirdi. Google’ın geçmişte yaptıklarını düşündüğümüzde bu işletim sisteminin de yoğun olarak internet üzerinden çalışması hiç şaşırtıcı olmuyor. Google, Chrome OS’la netbooklarda (ve Android ile Mobil cihazlarda) Windows’a göre bir avantaj yakalayabileceğini gördü. Çünkü notebooklar daha az sistem kaynaklarına sahip ve Chrome OS bu sistemler üzerinde, Windows Vista ve Windows 7’ye göre daha iyi performans gösterebilir. Zaten “Cloud Computing” herşeyin internet üzerinden yapılmasını ve çok büyük sistem kaynaklarına gerek kalmadan çalışmasını sağlamakta. Bu şekilde bakarsak neden Google’ın açık kaynak dünyasında bu kadar aktif olduğunu veya mesela Microsoft’un neden olmadığını da anlayabiliriz. Microsoft kendi teknolojilerini kullandırtmak için tekel olmak zorundayken, Google “açık kaynak” kavramının yenilikler açısından ne kadar önemli olduğunun olup destek veriyor. Chrome OS da tıpkı Chrome tarayıcısında olduğu gibi (Chromium Browser), Chromium OS adında bir açık kaynak işletim sistemine dayanmaktadır. Bu sayede Chromium OS, Google’ın bizzat anlaşması olmayan donanımlarda da kurulabilir olacaktır.

Her ne kadar “Cloud Computing” popülerleşen bir kavramsa da şu an için hala işletim sistemlerine ve güçlü donanımlara bağımlıyız. Bunu oyunlarda veya mühendislik yazılımlarında görebiliyoruz. “Cloud Computing”, internet bağlantısı hızlarının artmasıyla, ileride tam anlamıyla kullanıldığında insanlar, kaynak gerektiren işlemlerini internet üzerinden “kiralama” yoluyla gerçekleştirip, internet üzerinden takip edebilecek. Mesela son çıkan bir oyunu internet üzerinden kiraladığım CPU, RAM, ve Grafik işlemcisi üzerinden oynayıp, kendi bilgisayarımda (ya da ekranı ve interneti olan herhangi bir cihaz üzerinde) izleyebileceğim.

Bana göre Microsoft şu an için işletim sistemlerinden ve diğer masaüstü yazılımlarından 5 yıl sonra para kazanamayacak hale gelecek. Ya daha rekabetçi olan bu yeni ortama girip (Windows Azure ve Mono ile yaptığı gibi) tekel konumundan vazgeçecek ya da tıpkı PC devrimini öngöremeyen IBM gibi batma noktasına gelecek.

Son olarak da GNU/Linux işletim sisteminin ve diğer özgür yazılımların da gelecekte daha da değerleneceğini söyleyebilirim. Çünkü “Cloud Computing” ile birlikte büyük şirketlerin tekel konumları ve standart dışı uygulamaları ortadan kalkacak ve özgür yazılımlar şu an için en rekabetçi ve en verimli yazılım geliştirme yöntemini sunduğu için gelecekte daha çok destek görecek, daha çok kullanılacak.

Taze ubuntu

Bu adresten ubuntunun taze sürümünün isosunu indirip kurabilirsiniz. Update gerekmez.

http://cdimage.ubuntu.com/daily-live/current/

Çalıntı python kitabı

Belki bunu tweet olarak vermem gerekirdi. Ama daha çok insana ulaşırım diye buraya yazıyorum.

Bugün istihza.com sitesi sahibi ve ubuntu topluluğunun tanınan üyesi istihza’ya yapılan haksızlıktan haberim oldu. Burdan geçmiş olsun diliyorum.

Kısaca durumu anlatmak gerekirse, daha önceden “Her yönüyle Pardus” isimli bir kitabın yazarı olduğunu öğrendiğimiz “Talat Uyarer” adlı vatandaşın, istihza’nın sitesinde yayımladığı Python 2.x dersleri araklayarak “Uzmanından Python” adlı bir kitap çıkardığını görüyoruz.

Özgür yazılım camiasından böyle bir hareketin çıkacağını düşünmemiştim.

Herkesin bu kitabı boykoy etmeye davet ediyorum. (Sanırım istihza’nın sitesinde yayımlanan e-kitabı kendiniz ücret ödemeden çıkartabilirsiniz.)

İlgili linkler:
http://www.istihza.com/blog/yeni-bir-python-kitabi.html/
http://www.istihza.com/blog/yeni-python-kitabi-sonuc.html/
http://www.istihza.com/py2/icindekiler_python.html
http://www.kodlab.com/programlama/64-uzmanindan-python.html
http://forum.ubuntu-tr.org/index.php/topic,11522.0.html

python ile dosyanın başına yazı ekleme

linuxta bir dosyanın sonuna birşey eklemek çok basittir. Mesela:

echo "Sonuna ekledim" >> dosya.txt

Bu şekilde bash’te işimizi çok kolay halledebiliriz.

Ancak dosyanın başına yazı eklemek bu kadar kolay olmuyor. Bunu gerçekleştirebilmek için bir python scripti yazmaya karar verdim. Amacım ise unutulan bir satırlık kodu ekleyerek dosyanın tıklanarak çalıştırılmasını sağlamak. (windows kullanıcıları bunu yazmıyorlar çünkü onlarda öyle bir problem yok)

Yapılacaklar sırayla:

  1. o klasördeki dosyaları bulmak
  2. bunlardan uzantısı py olanları filtrelemek
  3. geçici dosya açıp ona eklenecek satırları eklemek
  4. geçici dosyaya asıl dosyanın içeriğini eklemek
  5. geçici dosyanın ismini asıl dosyanınki haline getirmek.

Şu adresten yazdığım scripti alabilirsiniz: http://dhalsim.pastebin.com/f218830cd

pyEmpires v0.2

Version 0.2 is out! Hurray!

First: old post: http://wp.me/pp3Ng-Z
Update: pyEmpires is GPLed!

New screenshot from v0.2:

Changes since v0.1 are:

• Map is a seperate file
• New textures came, water, sand, grass: walking on sand is slower!
• Group’s are easier to find
• Keyboard Shortcut XML file
• Creating groups, and selecting them with CTRL+NUM_KEY
• double clicking select all units of that type
• fixed a few bugs

If you want to work with us, take a look at http://my-trac.assembla.com/pyempires

Or why not here: http://www.assembla.com/spaces/pyempires

pyEmpires v0.1 is finished!

The game which I used pygame and python in writing and published as my graduation thesis, has reached v0.1. I will publish this game as soon as I choose a proper license and an SVN server. By the way, the name pyEmpires was made up and I can change it if it is taken.

Edit: Now it is GPLv3 🙂

Edit: New version avaible!

Here is a screenshot from game:

secim

Installation

source files are here: http://svn.assembla.com/svn/pars_soft/pyEmpires or download directly from

http://svn.assembla.com/svn/pars_soft/pyEmpires/pyEmpires.zip

You have to install these files in order to play.

Python 2.6: for Windows

Pygame: for Python 2.6 Windows

After that extract files from zip. Click Main.pyc in src folder and open it with python (2.6).

To run in *nix, just write “python Main.pyc” in that folder.

Also you can add your music (mp3 or ogg) files or their links to resources/music folder. To seperate music files played in menus and game window, music can be put in separate folders menu and game. They will be played random.

<>

How can I Play?

Controls are similar to the click & go games like diablo2 and AoE2. Click left to select, right to send away (except orange walls) & attack. While holding left button you can draw a selection box to select multiple units.

Pressing ESC key will open menu during game. To exit, use menu option.

Objective of game

You are guiding blue collared dogs. There is a default green collared enemy dog. (colors other than blue are enemy’s).

Your dogs are default in agressive mode, so don’t be surprised if they attack enemy near without your commands. And if your unit is attacking to an enemy, enemy’s health bar will turn red from green. Your units have health bar, too.

What’s happenning at background?

It seems a basic game -probably because there’s no scenario- but at background I use some good techniques. First of them is A* algorithm. It should be improved. Second is Finite State Machines.

A* is used for finding shortest path with obstacles. It has a wide range usage in games and it relies on heuristics. I may add another post just for it later because there is much to be developed in path finding (especially group movements).

Finite State Machine (FSM) is a technique in writing artificial intelligence. It has benefits on reusing so my AI module is one of the shortest module. So what is going on in AI?

First of all with FSM’s, units are in a state and they change their states under particular conditions. These states are attack, evade, chase, etc. Conditions are enemy_near?, enemy_strong?, etc. I put these to tables, so different tables means different AI behaviors.

And the additional keys are: (valid in only your selected units)

A key – Aggressive mode
S key – Defensive mode
D key – Stand ground mode
E key – No attack mode

With these keys you can alter your selected units’ mode. And these modes are:

Aggressive mode

Unit will attack if an enemy is near. Before attacking it chases the enemy so unit’s position will be lost.

Defensive mode

Even in attack mode, unit’s base position won’t be lost. If enemy can escape (become distant to base position), or it dies, unit will return to base position.

In No Attack Mode, unit will only attack if enemy is very close to him. But in No Attack Mode, unit won’t attack at all.

Known issues:
– Save and load game doesn’t work
– There is no collision detection. So units could be overlapped. Then try num-keys to select a particular unit in a selection group.

Support and Feedback:

Anyone interested in making strategy games, could comment here or send mail to baris dot aydek at gmail dot com. I’m open making it a 3D game, code in C/C++ etc. if I can bring together a great team. And if you encounter bugs other than known issues or have a suggestion/criticism don’t afraid of dropping a comment.

pyEmpires v0.1 bitti!

Yapımında pygame ve python kullandığım, aynı zamanda bitirme tez konumdur, oyunun V0.1’e gelmiş olmasını gururla duyuruyorum :). En kısa zamanda SVN sunucusuna atıp paylaşıma açmayı planlıyorum. Bu arada pyEmpires ismini şu dakikada uydurduğumu söylemem gerekir daha hiç isim düşünme çabasına girmemiştim, başlık atarken yazdım.

Oyundan biraz görüntü koyalım:

secim

Kurulum

Evet dosyayı anca rapidshare’e atabildim. Kaynak kodlarını şimdilik dağıtmıyorum, uygun bi lisans seçip dağıtabilirim. Neyse dosya şudur:
http://rapidshare.com/files/250004248/pyEmpires-v0.1.zip

Kaynak kodları: http://svn.assembla.com/svn/pars_soft/pyEmpires

Şimdi programı çalıştırmadan önce gerekli neler var onlara bakalım:

Python 2.6 sürümü: Windows kurulumu

Pygame: Pyton 2.6 sürümü için Windows kurulumu

Bunlar kuruluysa zip’i açın ve src klasöründeki Main.pyc dosyasına çift tıklayın. Eğer açmak için program istiyorsa python’u yüklediğiniz klasörden python.exe’yi seçebilirsiniz.

Linux kullanıcuları python ve pygame kurulumunu zaten biliyorlardır, çalıştırmak içinse:

cd oyunun_bulundugu_dizin/src

python Main.pyc

demek yeterli!

Unutmadan resources/music klasörüne de mp3 veya ogg’lerini atarak da oyunda müzik keyfini yaşayabileceğinizi belirteyim 🙂 music klasöründeki menu ve game klasörlerine menüde ve oyun içinde olmak üzere müzik atabilirsiniz. İsterseniz link olarak koyun. Müzikler karışık olarak çalacaktır.

Oyunu deneyip bana geribildirim yaparsanız çok iyi olur. Şurası olmamış, program şunu yapınca gümlüyo, şurasını çok beğendim, şöyle olsaydı daha iyi olurdu gibi. Yakında oyun yapımı hakkında bilgiler de vericem ve projeyi geliştirmeye devam edicem.

Oyun Nasıl Oynanıyor?

Genel click & go oyunlarında, diablo2, aoe2 gibi, karakterleri sol fare tuşu ile seçip, sağ tuşla yönlendiririz. Ben de fare’yi o şekilde ayarladım. Sol tuş basılı tutarak çoklu karakter seçimi yapabilirsiniz. (şekil 1A)

sağ tuşla götürmek istediğiniz yere götürürsünüz. Duvarlar hariç! (Evet o turuncu şeyler duvar)

ESC tuşu menüyü açar ve kapatır. Çıkmak için menüyü kullanın.

Diğer tuşlara sonra değinicem.

Oyunun Amacı

Siz mavi tasmalı köpekleri yönetiyorsunuz. Oyunda varsayılan olarak yeşil tasmalı bir düşman köpeği var. (Mavi dışındaki tüm renkler kötüdür)

En başta köpekleriniz agresif modda olduklarından yakındaki düşmana saldırabilirler, şaşırmayın.

Eğer kendi biriminiz saldırı durumda olup da düşmanın yanındaysa düşman üzerindeki yeşil bar azalacaktır. Bu durum düşman ölüp kaybolana kadar geçerlidir. (kendi birimlerinizin de yeşil yaşam çubuğu bulunmakta)

Arkaplanda neler oluyor?

Uzaktan basit bir oyun gibi görülebilir bunun nedeni herhangi bir senaryo hazırlamam büyük ihtimal ama kullandığım bazı yöntemleri buraya yazmak istiyorum.

İlki yol bulma. Bunu A* algoritmasıyla kullandım. Çok güzel değil şu an ama mükemmel hale getirmek mümkün.

İkincisi de sonlu durum makineleri.

A* ile kendi birimlerinizi bir yerden bir yere gönderirken en kısa yolu kullanılır. Hatta engelli bir yolda da engelleri en kısa şekilde aşar. Bilgisayar oyunlarında sıkça kullanılan bir algoritmadır ve sezgiye dayanır. Daha sonra yol bulma ile ilgili yazılar ekleyebilirim. Çünkü oyunda geliştirmem gereken kısımlar çok.

Sonlu durum makineleri de yapay zeka yazımında bir teknik olarak kullanılıyor. Yapay zeka kısmı o yüzden benim en kısa kodlama yaptığım yerlerden biri. Peki yapay zeka olarak ne işliyor?

Öncelikle SDM’ler sayesinde birimler belli bir durumda olup, belli koşullarda durumlarını değiştiriyorlar. Bu durumlar saldırı, kaçma, kovalama gibi durumlar olabilir. Koşullar ise düşman yakında mı, düşman benden çok mu kuvvetli gibi. Bunları tablolar halinde saklayıp, farklı tablolarla farklı davranışlar elde ettim.

Şimdi şu tuşları kendi birimlerinizi seçtikten sonra kullanın:
A tuşu – Agresif mod
S tuşu – Defansif mod
D tuşu – Hareketsiz mod
E tuşu – Ataksız mod

Bu  tuşlarla seçili birimlerin SDM’leri değişiyor. Bunları da açarsak:

Agresif mod

Birimin görüş alanı içindeki düşmana saldıracaktır. O yüzden sık sık takiplere başlar.

Defansif mod

Bulunduğu noktayı koruyan bir moddur. Eğer yakına bir düşman gelirse ona saldırır ancak koruması gerek noktadan çok uzaklaşırsa takibi burakıp bölgesine geri döner.

Hareketsiz modda ise sadece ona saldıran birime saldırır. Veya çok yakınındaki birime. Ataksız modunda ise hiçbir şekilde saldırı yapamaz.

Şimdilik yeterli yazdım sanırım. Daha sonra başka yazılarla devam edicem.

Bilinen hatalar:
– Oyun kaydet ve oyun yükle çalışmıyor
– Birimler iç içe geçiyor bu yüzden 2 birim sanki 1 birim gibi görünebiliyor. Tek bir birimi seçmek çok zor olabiliyor. Bu durumlarda 1,2,3 gibi tuşlara basıp sadece o sıradaki birimleri seçebilirsiniz.