Linux 2.6.28 Kerneline İlk Bakış

Linux 2.6.28 kerneli resmi olarak yayınlandı. İnternet üzerinde karşıma çıkan bir ilk bakış yazısını okurken bir yandan da Filistin'de, Gazze'deki olaylarla ilgili bir yazıyı okuyordum. İnsan bir an düşünüyor. Bu ne biçim çelişkidir. Linux kerneli yenilikleriyle beraber oldukça kolaylaştırıcı, yararlı şeyler getirmiş. Ama neye yarar? İşimi kolaylaştıracak, artık daha hızlı bir şekilde disklerimi hatalara karşı tarayabileceğim, grafik kartım daha verimli kullanılacak. Falan Filan. E Peki Gazze'de veya dünyanın başka bir yerinde savaş nedeniyle, düzen nedeniyle, açlık nedeniyle, yokluk nedeniyle ölen ve hayatı boyunca bir bilgisayarı olmayacak, bilgisayar görmeyecek olan çocuğa, insana ne faydası var bu kernelin? Bilim ve teknoloji artık çığrından çıkmıştır. İnsanlık için bir işe yaradığı yoktur. Tamamen egemenlere yaramaktadır. Eğer bir Filistin'li çocuğun ölmesine seyirci kalıyorsam ve umursamıyorsam, kernelin yeni sürümü çıkmış, bu da bana yılbaşı hediyesi olmuş neye yarar.

Dünyayı verelim çocuklara hiç değilse bir günlüğüne
allı pullu bir balon gibi verelim oynasınlar
oynasınlar türküler söyliyerek yıldızların arasında
dünyayı çocuklara verelim
kocaman bir elma gibi verelim sıcacık bir ekmek somunu gibi
hiç değilse bir günlüğüne doysunlar
bir günlük de olsa öğrensin dünya arkadaşlığı
çocuklar dünyayı alacak elimizden
ölümsüz ağaçlar dikecekler
Nazım Hikmet

Ayrıntıların ayrımında olmak

GNU lisanslı içerik yönetim sistemi Drupal ile şimdiye kadar bir çok site yaptım (Bir ara Drupal'i size anlatır temel kurulumun nasıl yapıldığını, sizinle paylaşırım). Sitesinden son versiyonu indirip sıkıştırılmış dosyaları açıyor ve ftp ile site sunucunuza(host) yüklüyorsunuz. Siteyi kurmak çok uzun süren bir işlem değil; ancak benim saatlerimi aldı: Yüklediğimde izinlerle ilgili bir hata veriyordu, yani "You don't have permission to access / on this server" hatası. İnternette çözümler aradım, .htaccess dosyasına müdahelelerde bulundum. Dosyaları çalışan sitemin alt klasörüne koyuyor ve alan ismini oraya yönlendiriyorum. İşin tuhaf yanı web sitem ve benzer şekilde alt klasörlerde barındırdığım diğer siteler normal çalışıyordu. .htaccess'te yaptığım değişikliklerle kurulum sayfasını görüyor; ama tasarımını düzgün göremiyordum. Farklı html sayfalarıyla denedim çalıştı, dosyaların izinlerini değiştirip denedim yine de tasarımı tam görülmüyordu. Firefox'ta sayfa biçemiyle ilgili bir sorun da değil. Bilgisayarımı açtım kapattım( sorun çözülmüyorsa başvurulan klasik ilkel yöntem, bazen işe yarar). Başka bilgisayarda denedim, olmadı. Servis sağlayıcımın Drupal ile ilgili önceden bir çok vukuatı var, o olmalı sorun. Değilmiş... Drupal dosyalarını kendi bilgisayarımdan yükledim. Tabii; başka yerden yükleyemem; ama dosyaları bulundurduğum yer ayrı bir disk bölümü ve kullanıcı olarak o bölüme erişme yetkilerim kısıtlı ve sıkıştırılmış dosyaları orada açtığım için tüm dosyaların izinleri de o şekilde ayarlanmış. Yüklediğimde de aynen kalmış. Ben dizinlerin izinlerini değiştirsem de en içteki dosyaları etkilemediği için tasarımsız ve eksik olarak görülüyormuş.Sonuç olarak şunu anladım: bazen sorunların gerçekten "kaynağı"na inmek gerekiyormuş ve sadece ayrıntılar değilmiş önemli olan, o ayrıntıların ayrımında olmak da önemliymiş.

Tahir Özgür : Öykülerin Fotoğrafı

"Öykülerin fotoğrafını çekmek istiyorum

O'nu, bir pasajın girişinde gördüm...

Elinde şemsiye vardı...

Ayağında ise sandelet...

Üzerinde kısa kollu bir gömlek...

Yanında boş bir tabure....

Arkasında yeşil bir duvar...

Bir taburenin üzerinde uyukluyordu...

...Ve yüreğim ağladı o an...

Bayramdan bir gün önceydi....

Yani, "Arefe" günü..

Yani herkesin karınca kaderince bayram hazırlığı yaptığı, çarşıda, 'iğne atsanız yere düşmez' denilen günlerden bir gün...

Alışverişten geliyor ve işyerime çıkıyordum..

İşte öylece gördüm O'nu orada..."

Devamını okumak için lütfen Öykülerin Fotoğrafı adresini tıklayın.

(Sürekli takip ettiğim Fotoritim e-Fotoğraf dergisinden)
(Tahir Özgür'ün özgeçmişi)

GNU/Linux'te kaynak kodtan kurulum yapmak

GNU/Linux işletim sisteminde kaynak kodtan program kurma
Günümüzde artık neredeyse bütün GNU/Linux'lerin (Slackware dışındakiler mi demeliyiz :) ) kullanıcının işini kolaylaştıran bir paket yöneticisi var. Paket yöneticisi olmasa bile kendi özel paket sistemleri (Debian tabanlı sistemler için deb uzantılı, Red Hat sistemler için rpm uzantılı) var. Bu kendi özel paketlerini genellikle çift tıklama ile kurabiliyorsunuz. Paket yöneticisi de çoğu GNU/Linux kullanıcısının bileceği gibi işleri oldukça kolaylaştırıyor. Paketi arıyorsunuz, seçiyorsunuz ve kur diyorsunuz. Paket gerekli bağımlılıklarıyla beraber kuruluyor. Güncellemesi geldiği zaman görebiliyorsunuz, güncel sürümüne sorunsuz bir şekilde yükseltebiliyorsunuz.

Buraya kadar herşey güzel. Diyelim ki paket depolarında olmayan, ve sadece kaynak koduna sahip olduğunuz bir programı kurmak istediniz. Ne yapacaksınız? Paket depolarında aradığı programı bulamayanların ve bir şekilde kaynak koda erişenlerin sorduğu en temel sorudur bu. Özellikle kullanıcı kendisini “uzman” olarak görmüyorsa bu işlem karmaşık ve zor bir işlem olarak gözünü korkutacaktır.

Bu kaynak kod dosyaları arasında aşama aşama ne yapılması gerektiğini anlatan README (Oku Beni) dosyaları vardır. Yoksa, o kaynak dosyasının indirildiği sitede falan olması gerekir. Bütün bu dosyalarda GNU/Linux sistemler için temel aşamalar anlatılır, elbette o program için kurulması gereken bağımlılıklar, kütüphaneler varsa bu “oku beni” dosyasında öncelikle o paketlerin, programların, kütüphanelerin nasıl kurulacağı anlatılır. Bu bağımlılıklar kurulduktan sonra, sıra asıl programı kurmaya gelecektir. Kaynak kodtan kurulma işlemleri aşağıdaki temel adımlardan oluşur. İndirdiğiniz sıkıştırılmış dosyanın tar.gz uzantılı olduğunu varsayarak aşağıdaki aşamalar anlatılmıştır (Bir terminal kullanarak bu komutların girilmesi gerekmektedir):

  • tar xvzf paketismi.tar.gz (veya tar xvjf paketismi.tar.bz2) Bu kod yardımıyla sıkıştırılmış dosyayı açmak için kullanılmaktadır. (Dilerseniz, eğer masaüstü ortama erişiminiz varsa grafiksel bir uygulama ile de sıkıştırılmış dosyayı açabilirsiniz -açabilirsiniz derken genişletmeyi, “extract” kavramını kastediyorum)
  • Açılan paketin oluşturduğu klasöre girmemiz lazım : cd paketismi
  • ./configure yardımıyla derleme öncesi gerekli yapılandırmaların gerçekleşmesini sağlıyoruz.
  • make komutuyla da derleme işleminin başlatılmasını tetikliyoruz.
  • Daha sonra make install komutuyla programın kurulumunu tamamlarız.

Bu komutların ne işe yaradığı, ne olduğu ayrıntılı bir yazı konusu aslında. Temel olarak bunları bilmeden de çoğu paketi kurmak, oluşan hatalar doğrultusunda gerekenleri yapmak sorunları çözecektir. “make” GNU tarafından üretilmiş olan ve çalıştırılabilir veya diğer kaynak kod olmayan dosyaların üretilmesini kontrol eden bir yazılımdır. “makefile” denilen bir dosyadan programın nasıl üretileceğini keşfederek programı üretir (gcc'yi de araştırmanız lazım :), ya da kolay olsun bağlantıları inceleyin ;) ).

Not: Burada anlatılanlar C, C++ kaynak kodlarından kurulumu (derlemeyi) anlatmaktadır. Farklı programlama diline göre, farklı aşamalar olacaktır. Her kaynak koduyla beraber dağıtılan oku beni dosyaları bu işlemi anlattıkları için mutlaka izlenmesi ve okunması gereken belgelerdir. Bu işlemi öğrenmenin en güzel yolu sürekli deneyerek, hataları okuyup çözümler bulmaya çalışarak ve forumlarda hata mesajları için yardım isteyerek mümkündür.

Bağlantılar:
http://www.tuxfiles.org/linuxhelp/softinstall.html 
http://www.newlinuxuser.com/howto-install-deb-rpm-and-source-code-files/
http://linuxpoison.blogspot.com/2008/02/howto-install-software-from-source-code.html
http://www.gnu.org/software/make/ 
http://gcc.gnu.org/ 

Rastgele Sayı Üretme

Bir çok uygulaması olan rastgelelik için, programlarda rastgele sayı üreteçleri kullanılır. Rastgele sayı üreteçleri fiziksel veya yazılımsal bir cihaz olabilir. Fiziksel cihazlara örnek olarak para atma, rulet tekeri (diğer şans oyunları için), Zener diodlarındaki termal gürültü verilebilir. Gerçek anlamda rastgelelilik için özellikle Entropi kaynakları (radyoaktif bozulma, atmosferdeki radyo dalgaları gürültüsü)kullanılabiliyor.

Bilgisayarlara baktığımızda rastgelelik için Yalancı (Pseudo) Rastgele Sayı Üreteçleri dediğimiz algoritmalar kullanılıyor. Bu algoritmalar (PRNG) rastgelelik özelliği olan uzun sayılar oluşturur. En sık karşılaşılan bir PRNG Doğrusal Congruential üreticidir. Bu üretici sayıları üretmek için aşağıdaki tekrarı kullanır:

X_{n+1} = (a X_n + b)\, \textrm{mod}\, m


Kaynak:
Random Number Generation
Bir cevap

MVC ile Java SE ortamında uygulama geliştirme

Model-View-Controller (MVC) nedir?

Grafiksel kullanıcı arayüzü (GUI – Graphical User Interface) kütüphanelerini (AWT, Swing, ..) kullanarak yazılım geliştirdiyseniz, MVC tasarım deseniyle karşılaşmış olmanız oldukça olasıdır. MVC ilk olarak 1979 yılında Xerox Palo Alto araştırma merkezinde Smalltalk geliştiricisi olan Trygve Reenskaug tarafından, veri erişimi, iş mantığını ve kullanıcıya gösterilen davranışları birbirinden ayırmak için ortaya atılmıştır. Daha kesin olarak açıklayacak olursak MVC üç parçaya bölünebilir:



Model: Model veriyi ve bu veriye erişim ile güncellemeyi yöneten kuralları temsil eder. Kurumsal yazılımlarda, model genellikle gerçek yaşam sürecinin yazılım karşılığı olarak hizmet eder.

Görünüm (View):Görünüm modelin içeriğini ortaya çıkarır. Model verisinin tam olarak nasıl gösterilmesi gerektiğini tanımlar. Eğer model verisi değiştiğinde, gerektiğinde görünümde temsili güncellemelidir. Bu itme (push) yaklaşımı kullanımıyla yapılabilir, bu yaklaşımda görünüm model üzerindeki değişiklikler için kendini kaydeder (değişiklik durumunda model katmanı görünümü tetikler). Bir diğer yaklaşım olan çekme (pull) yaklaşımında ise görünüm en güncel veriye ulaşmak için modeli çağırmakla yükümlüdür.

Denetleyici (Controller): Denetleyici kullanıcının görünümle olan etkileşimlerini, modelin gerçekleştireceği eylemlere çevirir. Standalone GUI istemcisinde kullanıcı etkileşimli düğme tıklamaları veya menü seçimleri olabilir, kurumsal web uygulamalarında ise GET ve POST HTTP istekleri olarak gözükürler. Kapsama bağlı olarak, denetleyici kullanıcıya göstermek için yeni bir görünüm üretebilir(sonuçların web sayfası gibi).


Her ne kadar farklı mimariler bu üç bileşenin farklı şekillerde etkileşmesini sağlasa da, Şekil 1'de MVC tasarım deseninin genel kabul görmüş bir gerçekleştirimini görebilirsiniz (Sun BluePrints Catalog'dan alınma):

Şekil 1. Genel kabul görmüş bir MVC gerçekleştirimi


MVC Bileşenleri Arasında Etkileşim


Bu bölümde Şekil 1'deki gerçekleştirime Java platformu (Java SE 6) bağlamında daha derinlemesine bakacağız. Model, görünüm ve denetleyici nesneleri ilklendiği anda aşağıdakiler oluşur:

  1. Görünüm kendisini model üzerinde dinleyici olarak kaydeder. Modelin altındaki verideki herhangi bir değişimde doğrudan değişim bildirimi yayını ortaya çıkar, bu görünüm tarafından alınır. Bu daha önce bahsettiğimiz itme yaklaşımının bir örneğidir. Bu yaklaşımda model ne görünüm, ne de denetleyicinin farkında değildir, sadece değişim bildirimlerini tüm ilgilenen dinleyiciler için yayınlar.

  2. Denetleyici, görünüme bağlanmıştır. Bu tipik olarak görünümde gerçekleştirilen herhangi bir kullanıcı eyleminin, denetleyici sınıfında kayıtlı bir dinleyici metodunu başlatması (invoke) anlamına gelmektedir.

  3. Denetleyici alttaki modele bir referans barındırır.


Kullanıcı görünümle etkileştiği anda, aşağıdaki eylemler oluşur:

  1. Görünüm bir oluşan GUI eylemini -örneğin bir düğmeye tıklamak veya kayan çubuğu hareket ettirmek- algılar. Bunu bu tip bir eylem oluştuğunda çağrılmak üzere kaydedilmiş bir dinleyici metodu kullanarak gerçekleştirir.

  2. Görünüm denetleyici üzerindeki uygun metodu çağırır.

  3. Denetleyici modele erişir, kullanıcının eylemine bağlı olarak uygun bir şekilde güncelleme yapma ihtimali vardır. Eğer model değişirse, ilgili dinleyicileri, görünüm gibi, değişim hakkında bilgilendirir. Bazı mimarilerde, denetleyici ayrıca görünümü güncellemekle de sorumlu olabilir. Bu Java tabanlı kurumsal uygulamalarda sık karşılaşılan bir durumdur.


Şekil 2 bu etkileşimi daha ayrıntılı olarak göstermektedir.

Şekil 2. MVC kullanan bir Java SE uygulaması

Daha öncede söylendiği gibi, model görünüme bir referans içermez, ancak eylem bildirme yaklaşımını değişimle ilgilenen taraflar için kullanır. Bu güçlü tasarımın bir sonucu birden fazla görünüm aynı alt modeli kullanabilir. Modelde bir değişim olduğunda, her bir görünüm bu özellik değişiminden haberdar olarak, kendisini gerektiği şekilde güncelleyebilir. Örneğin Şekil 3 aynı veri modelini kullanan iki farklı görünümü göstermektedir.



Şekil 3. Aynı modeli kullanan birden fazla sayıda görünüm

MVC Tasarımını Değiştirmek


Son zamanlarda daha fazla geçerli olan bir MVC tasarımı denetleyiciyi model ve görünüm arasına yerleştirmektedir. Bu tasarım, Apple Cocoa anaçatısında sıklıkla görülür, Şekil 4'te görülebilir.

Şekil 4.Denetleyicinin Model ve Görünüm arasında olduğu bir MVC tasarımı

Bu tasarımla, daha geleneksel sürüm arasındaki birincil fark, model nesnelerindeki durum değişimlerinin bildirimlerinin görünüme denetleyici aracılığıyla aktarılmasıdır. Böylece, denetleyici model ve görünüm arasındaki veri akışını iki yönlü olarak yönetmiş olur. Görünüm nesneleri, her zaman olduğu gibi, kullanıcı eylemlerini model üzerindeki özellik güncellemelerine dönüştürmek için denetleyiciyi kullanır. Ek olarak, model durumundaki değişiklikler görünüm nesnelerine uygulamanın denetleyici nesneleri üzerinden iletilir.


Böylece, bütün üç bileşende ilklendiğinde, görünüm ve modelin ikisi de denetleyiciye kaydedilir. Kullanıcı görünümle etkileştiğinde, olaylar neredeyse aynıdır:

  1. Görünüm bir oluşan GUI eylemini -örneğin bir düğmeye tıklamak veya kayan çubuğu hareket ettirmek- algılar. Bunu bu tip bir eylem oluştuğunda çağrılmak üzere kaydedilmiş bir dinleyici metodu kullanarak gerçekleştirir.

  2. Görünüm denetleyici üzerindeki uygun metodu çağırır.

  3. Denetleyici modele erişir, kullanıcının eylemine bağlı olarak uygun bir şekilde güncelleme yapma ihtimali vardır. Eğer model değişirse, ilgili dinleyicileri, görünüm gibi, değişim hakkında bilgilendirir. Ancak bu durumda değişim denetleyiciye gönderilir. Denetleyicide gerekli görünüm değişiklikleri için Görünüm katmanıyla haberleşir.


Bu tasarım neden kullanılmalıdır? Bu değiştirilmiş MVC, modeli görünümden tamamen ayırmak için yardımcı olur. Bu durumda, denetleyici kayıtlı olduğu bir veya daha fazla modelde bulmak istediği model özelliklerini zorlayabilir. Ek olarak, kayıtlı olan bir veya daha fazla görünüm için modelin özellik değişimlerini etkileyen metotları sağlayabilir.

Kaynak:Java SE Application Design With MVC

GNU/Linux ile ilgili açık kaynak kitaplar

Altmışın üzerinde açık kaynak GNU/Linux ile ilgili elektronik kitaplara (kitapların hepsi İngilizce)(Kategoriler şeklinde:Kurulum ve başlangıç, güvenlik, sistem yönetimi,programlama, göç{migration}, kernel, Ubuntu, Redhat, Fedora, Knoppix, Debian) şu bağlantıdan erişebilirsiniz.

Shichinin no samurai




Sonunda Yedi Samuray (Shichinin no samurai) filmini izleyebildim :). Sürekli olarak adını ve methini duyduğum Akira Kurosawa filmi. Uzunluğu nedeniyle kesik kesik izlemiş olsam da bir bütün olarak kavrayabildiğime inanıyorum.

Japonya'nın bir dönemini (samurayların aşırı derecede arttığı ve ateşli silahların artmasıyla onlara rağbetin azaldığı diyebilir miyiz?) anlatan film çiftçileri, samurayları, haydutları oldukça güzel anlatıyor. Filmdeki her bir karakterin ince işlenmiş özellikleri ve samurayların onurlu, dirençli mücadele anlayışları samuraylığı bırakmayı düşünen ana kahraman samurayla oldukça güzel anlatılıyor. Çiftçiler, çiftçilerin samuraylara bakışı, korkaklığı, ve korkaklığın nasıl yenilebileceği...

Anlatmakla bitmez bu film, izlemek lazım. Ben özetle mücadelenin gerekliliğini,savaşların birileri için her zaman kayıp olduğunu ve örgütlenmenin önemini anladım filmden. Her izleyen farklı anlayacaktır mutlaka. Teknik olarak filmi değerlendirmek te haddim değil ama görüntüler siyah beyaz olmasına rağmen oldukça güzel, başarılı bence :)