Yaklaşık iki yıldır uğraştığım kitabı sonunda bitirmeyi başardım. Bir kaç sefer yüzlü sayfalara kadar okuyup bıraktığım olmuştu.
Tutunamayanların ne kadar etkileyici, mükemmel, harukulade olduğundan bahsetmeye gerek yok. Haklı ününe biraz geç ulaşmış gibi görünüyor. Yirmi yıl önce okusaydım daha farklı etkileri mi olurdu üzerimde, bilemiyorum.
Okumasının ve yorumlanmasının oldukça zor olduğu söylenebilir. Diğer taraftan sürükleyici olduğu ve sayfalarca dökülen birikimlerin tam olarak anlaşılamasa da bir şekilde hislerinizle anlaşılır olduğu da söylenebilir. Herhalde bunu kitapta anlaşılmaz görülen, karmaşık, çetrefilli durumların insani olmasına bağlayabiliriz. Yine de yazarın tam olarak onu mu ifade etmek istediği ya da her okuyucunun aynı şekilde mi algıladığı konusunda şüpheye düşürüyor insanı. Hep önceki sayfalarda birşeyler mi kaçırdım hissi uyandırıyor.
Kitabı okurken çokça gülümsedim, sesli güldüğüm bile oldu. İçimde bir olric var mı diye yoklamalar :) kitabın dilinde konuşma eğilimi falan, bu kitabı okumanın eğlenceli tarafları. Karakterlerin başından geçenler acıklı olsa da -verdikleri tepki ve ifade biçiminden olsa gerek- hüzünlendiğimi hatırlamıyorum.
Kitapla ilgili konuşulacak o kadar şey var ki nereden başlayacağını bilemiyor insan ve vazgeçiyor:) Uzun da bir kitap ama hiç bir yerinin gereğininden fazla uzatıldığını da görmüyorsunuz. Hatta yarıda kesilmiş, özetlenmiş, kısaltılmış cümleler var. Bu kısa cümleleri gördükçe Oğuz Atay'ın derinliği hakkında daha da hayrete düşüyor insan.
Cumartesi, Ağustos 27, 2011
Pazartesi, Mart 22, 2010
educommons kurulumu -2
Önceki yazıdaki educommons kurulumu ile ilgili bir sorun olmadıysa bu aşama sadece birkaç dakika sürüyor. Şimdi Zope sunucuya bir Plone Site ekleyeceğiz. Bu site educommons ve gerekli diğer özellikleri içerecek:
Önceki yazıda da söylediğim gibi bunlar aslında burada yazıyor.
1. önceki yazının sonunda bahesttiğim gibi localhost:8080/manage adresine giriyoruz.
kullanıcı adı/parolayı değiştirmediysek admin/test1234
2. Sağ üstteki (yanında "add" yazan, "go" yazan değil) açılır listeden "Plone Site" Seçiyoruz ve "add" düğmesine tıklıyoruz.
3. Açılan sayfada "Id" ve "title" alanlarını dolduruyoruz. id oluşturduğumuz sitenin url'sini belirliyor (http://localhost:8080/) title ise web sayfalarının bilinen title özelliği. "Extension Profiles" Kısmında aşağıdakileri ctrl ile tıklayarak seçiyoruz:
PloneBookmarklets
ContentLicensing
IMSTransport
OpenSearch
OAI Intercom
SearchAndReplace
Zip File Transport
Left Skin
Static Site
eduCommons
wordpressexchange
iw.fss (FileSystemStorage)
Working Copy Support (Iterate)
CacheSetup
LinguaPlone
4. localhost:8080/eduCommons ile (id için eduCommons girdiğim için) giriş sayfasını görüyoruz.

5. Eğer yerelleştirme yapacak isek (türkçe sayfalar ve birden fazla dilde yayın için) Zope yönetim arayüzünde (ZMI) oluşturduğumuz siteye tıklıyoruz (burada eduCommons). Burada "portal languages"e girerek gerekli olan dilleri seçiyoruz ve kaydediyoruz.
Bir sonraki yazıda site ayarları ile ilgili birşeyler yazmayı düşünüyorum.
Önceki yazıda da söylediğim gibi bunlar aslında burada yazıyor.
1. önceki yazının sonunda bahesttiğim gibi localhost:8080/manage adresine giriyoruz.
kullanıcı adı/parolayı değiştirmediysek admin/test1234
2. Sağ üstteki (yanında "add" yazan, "go" yazan değil) açılır listeden "Plone Site" Seçiyoruz ve "add" düğmesine tıklıyoruz.
3. Açılan sayfada "Id" ve "title" alanlarını dolduruyoruz. id oluşturduğumuz sitenin url'sini belirliyor (http://localhost:8080/
PloneBookmarklets
IMSTransport
OpenSearch
OAI Intercom
SearchAndReplace
Zip File Transport
Left Skin
Static Site
eduCommons
iw.fss (FileSystemStorage)
Working Copy Support (Iterate)
CacheSetup
LinguaPlone

5. Eğer yerelleştirme yapacak isek (türkçe sayfalar ve birden fazla dilde yayın için) Zope yönetim arayüzünde (ZMI) oluşturduğumuz siteye tıklıyoruz (burada eduCommons). Burada "portal languages"e girerek gerekli olan dilleri seçiyoruz ve kaydediyoruz.
Bir sonraki yazıda site ayarları ile ilgili birşeyler yazmayı düşünüyorum.
educommons kurulumu -1
Son blog girdisini 1 Nisan 2009'da yazmışım, şaka gibi :) Neyse bir yıl dolmadan bir girdi daha yazıyorum.
Educommons kurulumu ile ilgili pyhon'dan bağımlılıklarından doğan bir takım sıkıntılar olduğu için buraya kurulum adımlarını yazıyorum.
Aslında burada anlatıldığı gibi oluyor ama bir kaç ufak değişiklik olabiliyor:
1. educommons'u sitesinden indiriyoruz.
2. python 2.4.4'ü buradan indiriyoruz (çünkü sadece bu python sürümünde çalışıyor). educommons'un resmi stesinde 2.4 gerektiği söylenmiş. 2.4.6 ile çalıştıramamıştım.
3. İndirilen python kurulum dosyasını /usr/local gibi bir yerde açıyoruz ve klasik ./configure
make
make install
üçlüsüyle kuruyoruz.
4. educommons kurulum dosyasını açıyoruz ve içinde:
python2.4 bootstrap.py
komutuyla geerkli dizinlerin oluşturulması ve kurulum ayarları dosyasının üretilmesi,
bin/buildout
ile paketlerin derlenmesi, gerekli olanların internetten indirilmesi, ve kurulması gibi uzunca bir işlem yapılıyor. Burada hata alınması muhtemel. Benim kurulumumda 2 hata vardı fakat bağımlılıklardan dolayı sisteminizden olmayan paketlerden ötürü :) daha fazla hata çıkabilir.
Birinci eksik paket libxml2 ile ilgili idi ve ubuntuda
sudo apt-get install libxml2-dev
ile kurdum. İkinci eksik ise mocker ile ilgiliydi ve bunun tesler ile ilgili olduğunu düşünerek buildout.cfg dosyasındaki mocker ile ilgili 2 satırı comment out ederek sorunu aştım.
Kurulumdan sonra sunucuyu başlatmak için:
bin/instance start
komutunu kullanıyoruz. Çalıştığını görmek ve zope sunucuyu yönetmek için web tarayıcımızdan:
http://localhost:8080/manage
adresini açıyoruz. Yetkili kullanıcı adı ve parolası admin/test1234
Bir sonraki girdide yönetim arayüzü kurulmasını yazacağımı ümid ediyorum.
Educommons kurulumu ile ilgili pyhon'dan bağımlılıklarından doğan bir takım sıkıntılar olduğu için buraya kurulum adımlarını yazıyorum.
Aslında burada anlatıldığı gibi oluyor ama bir kaç ufak değişiklik olabiliyor:
1. educommons'u sitesinden indiriyoruz.
2. python 2.4.4'ü buradan indiriyoruz (çünkü sadece bu python sürümünde çalışıyor). educommons'un resmi stesinde 2.4 gerektiği söylenmiş. 2.4.6 ile çalıştıramamıştım.
3. İndirilen python kurulum dosyasını /usr/local gibi bir yerde açıyoruz ve klasik ./configure
make
make install
üçlüsüyle kuruyoruz.
4. educommons kurulum dosyasını açıyoruz ve içinde:
python2.4 bootstrap.py
komutuyla geerkli dizinlerin oluşturulması ve kurulum ayarları dosyasının üretilmesi,
bin/buildout
ile paketlerin derlenmesi, gerekli olanların internetten indirilmesi, ve kurulması gibi uzunca bir işlem yapılıyor. Burada hata alınması muhtemel. Benim kurulumumda 2 hata vardı fakat bağımlılıklardan dolayı sisteminizden olmayan paketlerden ötürü :) daha fazla hata çıkabilir.
Birinci eksik paket libxml2 ile ilgili idi ve ubuntuda
sudo apt-get install libxml2-dev
ile kurdum. İkinci eksik ise mocker ile ilgiliydi ve bunun tesler ile ilgili olduğunu düşünerek buildout.cfg dosyasındaki mocker ile ilgili 2 satırı comment out ederek sorunu aştım.
Kurulumdan sonra sunucuyu başlatmak için:
bin/instance start
komutunu kullanıyoruz. Çalıştığını görmek ve zope sunucuyu yönetmek için web tarayıcımızdan:
http://localhost:8080/manage
adresini açıyoruz. Yetkili kullanıcı adı ve parolası admin/test1234
Bir sonraki girdide yönetim arayüzü kurulmasını yazacağımı ümid ediyorum.
Çarşamba, Nisan 01, 2009
freeradius + ldap authentication
Freeradius'a ldap hesabıyla bağlanmak için yaptığım yapılandırmayı buraya yazayım ki unutmayayım, hem başkaları da faydalansın. Atım da şurda otlaya dursun :) (bkz. kendi kendine konuşmak).
Aslında ayar dosyalarında kapalı olan birkaç satırı açarak kolayca yapılabiliyor. Önemli olan hangilerinin açılacağını ve Ldap tarafındaki yapıyı bilmek. Problem olduğu zaman freeradiusun da kullanıcıyı doğrularken yaptığına benzer bir ldapsearch komutu ile test etmek, ldap'ın loglarına düşen kayıtları ve freeradius'un hata mesajlarını okumak faydalı oluyor.
Öncelikle freeradiusla gelen şemayı ldap'a ekliyoruz ki böylece freeradius'un baktığı radiusObjectProfile sınıfına sahip kayıtlar oluşturabilelim. Sonra aşağıdaki satıları conf dosyalarında açıyoruz. Hepsi bu.
freeradius 2 serisi için:
radiusd.conf dosyasında:
auto_header = yes
ldap {
server = "192.168.1.2"
identity = "cn=admin,dc=domain"
password = parola
basedn = "dc=domain"
base_filter = "(objectclass=radiusObjectProfile)"
access_attr = "cn"
dictionary_mapping = ${raddbdir}/ldap.attrmap
authtype = ldap
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
dictionary_mapping = ${confdir}/ldap.attrmap
password_attribute = userPassword
set_auth_type = no
}
default dosyasında:
authorize {
ldap
eap {
ok = return
}
}
authenticate {
ldap
Auth-Type LDAP {
ldap
}
}
innertunnel dosyasında:
authorize {
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
eap
}
ldap.attrmap dosyasında:
replyItem Tunnel-Type radiusTunnelType
replyItem Tunnel-Medium-Type radiusTunnelMediumType
replyItem Tunnel-Private-Group-Id radiusTunnelPrivateGroupId
checkItem User-Password userPassword
Aslında ayar dosyalarında kapalı olan birkaç satırı açarak kolayca yapılabiliyor. Önemli olan hangilerinin açılacağını ve Ldap tarafındaki yapıyı bilmek. Problem olduğu zaman freeradiusun da kullanıcıyı doğrularken yaptığına benzer bir ldapsearch komutu ile test etmek, ldap'ın loglarına düşen kayıtları ve freeradius'un hata mesajlarını okumak faydalı oluyor.
Öncelikle freeradiusla gelen şemayı ldap'a ekliyoruz ki böylece freeradius'un baktığı radiusObjectProfile sınıfına sahip kayıtlar oluşturabilelim. Sonra aşağıdaki satıları conf dosyalarında açıyoruz. Hepsi bu.
freeradius 2 serisi için:
radiusd.conf dosyasında:
auto_header = yes
ldap {
server = "192.168.1.2"
identity = "cn=admin,dc=domain"
password = parola
basedn = "dc=domain"
base_filter = "(objectclass=radiusObjectProfile)"
access_attr = "cn"
dictionary_mapping = ${raddbdir}/ldap.attrmap
authtype = ldap
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
dictionary_mapping = ${confdir}/ldap.attrmap
password_attribute = userPassword
set_auth_type = no
}
default dosyasında:
authorize {
ldap
eap {
ok = return
}
}
authenticate {
ldap
Auth-Type LDAP {
ldap
}
}
innertunnel dosyasında:
authorize {
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
eap
}
ldap.attrmap dosyasında:
replyItem Tunnel-Type radiusTunnelType
replyItem Tunnel-Medium-Type radiusTunnelMediumType
replyItem Tunnel-Private-Group-Id radiusTunnelPrivateGroupId
checkItem User-Password userPassword
Perşembe, Ekim 16, 2008
Pardus'ta red5 kurulması
Diğer Linuxlara red5 kurulmasından farklı olmaması beni şaşırtmadı.
Javayı normal bir şekilde kuruyoruz.
Ant için:
Javayı normal bir şekilde kuruyoruz.
Ant için:
wget http://apache.mirror.transip.nl/ant/binaries/apache-ant-1.7.1-bin.tar.gzRed5 için:
tar -zxf apache-ant-1.7.0-bin.tar.gz
sudo mv apache-ant-1.7.0 /opt/ant
export ANT_HOME=/opt/ant
sudo ln -s /opt/ant/bin/ant /usr/bin/ant
svn co http://red5.googlecode.com/svn/java/server/trunk red5Ortam değişkenlerini ayarlamamız gerekiyor:
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/Red5'i derlemek ve çalıştırmak için
export ANT_HOME=/opt/ant/
cd red5
/opt/ant/bin/ant prepare
/opt/ant/bin/ant dist
cd dist
sh red5.sh
localhost:5080 ile test ediyoruz kurulumu
Pazar, Ekim 12, 2008
Kuş uçar
Kuş uçar yavrular
Yuvalarda cıvıldar
Göğe bak ne parlak
Ne saf ne berrak
Haydi derse girelim
İyi yanıt verelim
Hepimiz biliriz
Bu dersleri biz
Çocukluğumdan kalma eski bir okul şarkısıdır. Melodisi ile de pek bi güzeldir. Nerden geldiyse aklıma şimdi :)
Edit: http://www.tuerkisch-lernen-online.de/forum/messages/1243.htm
Yuvalarda cıvıldar
Göğe bak ne parlak
Ne saf ne berrak
Haydi derse girelim
İyi yanıt verelim
Hepimiz biliriz
Bu dersleri biz
Çocukluğumdan kalma eski bir okul şarkısıdır. Melodisi ile de pek bi güzeldir. Nerden geldiyse aklıma şimdi :)
Edit: http://www.tuerkisch-lernen-online.de/forum/messages/1243.htm
Salı, Temmuz 15, 2008
Debian, egroupware, ldap, vsftp, pam, nss falan fıstık - yazı dizisi - 5
Şimdi de nss'yi yapılandıralım.
#nano /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Buraya "ldap" kelimelerini yazdık.
Test etmek için:
#getent passwd
...
[sistem kullanıcıları]
...
mustafa:yGBMuI4R4N8..:1001:1:mustafa:/home/mustafa:
oldu galiba:)
Son satır LDAP'dan geldi.
Hepsi bu.
Bir de ftp ile bağlanalım. Şimdilik /home/mustafa dizinini elle açıyoruz. İlerde onu da pam'a yaptırıcaz:
#mkdir /home/mustafa
#chmod 755 /home/mustafa
#ncftp -u mustafa localhost
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mustafa".
Please specify the password.
Password: ******
Login successful.
Logged in to localhost.
ncftp /home/mustafa >
Mükemmel. Aslında bir haftadır buna çalışıyorum ve bu blog girdilerine başlarken bunun olacağını ummuyordum. Hatta yukarıya "şimdi de nssyi yapılandıralım" derken bile:) nss ile ilgili bir ayar da yapmadım ama pam ile nss bir şekilde anlaştı ve kullanıcının ev dizini bilgisi ldap'dan vsftpye kadar ulaştı. Bütün bunlar 5dk önce oldu :)
Bundan sonra yapılacaklar:
Güvenlik için: İletişimin ssl ile yapılması, parolaların şifreli olması
ldap kullanıcısının ilk girişinde ev dizinini oluşturulması (pam_mkhomedir.so ile).
Sistem kullanıcılarının ldap'a aktarılması (apt-get install migrationtools)
Bunlar nispeten daha kolay işler.
#nano /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Buraya "ldap" kelimelerini yazdık.
Test etmek için:
#getent passwd
...
[sistem kullanıcıları]
...
mustafa:yGBMuI4R4N8..:1001:1:mustafa:/home/mustafa:
oldu galiba:)
Son satır LDAP'dan geldi.
Hepsi bu.
Bir de ftp ile bağlanalım. Şimdilik /home/mustafa dizinini elle açıyoruz. İlerde onu da pam'a yaptırıcaz:
#mkdir /home/mustafa
#chmod 755 /home/mustafa
#ncftp -u mustafa localhost
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mustafa".
Please specify the password.
Password: ******
Login successful.
Logged in to localhost.
ncftp /home/mustafa >
Mükemmel. Aslında bir haftadır buna çalışıyorum ve bu blog girdilerine başlarken bunun olacağını ummuyordum. Hatta yukarıya "şimdi de nssyi yapılandıralım" derken bile:) nss ile ilgili bir ayar da yapmadım ama pam ile nss bir şekilde anlaştı ve kullanıcının ev dizini bilgisi ldap'dan vsftpye kadar ulaştı. Bütün bunlar 5dk önce oldu :)
Bundan sonra yapılacaklar:
Güvenlik için: İletişimin ssl ile yapılması, parolaların şifreli olması
ldap kullanıcısının ilk girişinde ev dizinini oluşturulması (pam_mkhomedir.so ile).
Sistem kullanıcılarının ldap'a aktarılması (apt-get install migrationtools)
Bunlar nispeten daha kolay işler.
Debian, egroupware, ldap, vsftp, pam, nss falan fıstık - yazı dizisi - 4
Şimdi vsftp kimlik doğrulama işini pam'e yaptıralım. pam de kullanıcı kimlikleri için ldap'a da baksın ki ldap kullanıcıları ftp'ye bağlanabilsin. Sonra da sistem kullanıcılarını ldap'a nasıl aktarırız ona bakalım.
libpam-ldap kurulu değilse:
#apt-get install libpam-ldap
ldapscripts paketi kurulurken libpam-ldap paketi de kurulduğu için aslında buna gerek yok.
/etc/vsftpd.conf dosyasında
pam_service_name=vsftpd
olduğundan emin oluyoruz.
/etc/pam_ldap.conf dosyasını yapılandırıyoruz:
Burada değiştirdiğim satırlar:
host 127.0.0.1 //commenti kaldırdık
#uri ldap://127.0.0.1/ //comment koyduk
bindpw
pam_login_attribute uid
scope sub
nın düz şifrelenmiş tutulması güvenlik için daha iyi olur. Ayrıca ssl de açılmalı.
Şimdi vsftp'nin kimlik doğrulama işini pam'e aktaralım:
#nano /etc/pam.d/vsftpd
Burada;
auth sufficient /lib/security/pam_ldap.so
account sufficient /lib/security/pam_ldap.so
password sufficient /lib/security/pam_ldap.so
auth required pam_warn.so
account required pam_warn.so
session required pam_warn.so
satırlarını ekliyoruz. Son üç satır hataları takip edebilmek için.
phpldapadmin ile "people" ismini verdiğimiz (başka isim de olur) bir OrganizationalUnit oluşturuyoruz. Tüm kullanıcılar bu düğümün altında bulunacak. Sonra denemek için mustafa isimli bir kullanıcı ekliyoruz. Kullanıcıyı "Custom" template'inden "account" ve "possixaccount" objectclass'larını seçerek ekliyoruz.
Test edelim:
#ncftp -u mustafa
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mustafa".
Please specify the password.
Password: ******
Unexpected response: OOPS: cannot locate user entry:mustafa
OOPS: cannot locate user entry:mustafa
Evet hata verdi. Kullanıcının ev dizini bilgisini alamadığı için bir klasöre bağlayamadı. Fakat kimlik kanıtlamadan geçti. parolayı yanlış girdiğimizde veya ldap'da (veya sistemde) olmayan bir kullanıcı ile ftp yaptığımızda hata şöyle oluyor:
ncftp -u mehmet localhost
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mehmet".
Please specify the password.
Password: ******
Login incorrect.
Could not open host localhost: username and/or password was not accepted for login.
Bunu vsftp kayıt dosyalarından da doğrulayabiliriz:
#tail /var/log/vsftpd.log
Tue Jul 15 03:53:57 2008 [pid 4943] CONNECT: Client "127.0.0.1"
Tue Jul 15 03:53:57 2008 [pid 4942] [mustafa] OK LOGIN: Client "127.0.0.1"
Tue Jul 15 03:54:06 2008 [pid 4947] CONNECT: Client "127.0.0.1"
Tue Jul 15 03:54:12 2008 [pid 4946] [mehmet] FAIL LOGIN: Client "127.0.0.1
Malesef pam servislere kimlik doğrulama dışında bilgi vermiyor. Ev dizini gibi bilgileri servislere sağlayabilmek için nss (Name Service Switch) kullanmak gerekecek.
libpam-ldap kurulu değilse:
#apt-get install libpam-ldap
ldapscripts paketi kurulurken libpam-ldap paketi de kurulduğu için aslında buna gerek yok.
/etc/vsftpd.conf dosyasında
pam_service_name=vsftpd
olduğundan emin oluyoruz.
/etc/pam_ldap.conf dosyasını yapılandırıyoruz:
Burada değiştirdiğim satırlar:
host 127.0.0.1 //commenti kaldırdık
#uri ldap://127.0.0.1/ //comment koyduk
bindpw
pam_login_attribute uid
scope sub
Şimdi vsftp'nin kimlik doğrulama işini pam'e aktaralım:
#nano /etc/pam.d/vsftpd
Burada;
auth sufficient /lib/security/pam_ldap.so
account sufficient /lib/security/pam_ldap.so
password sufficient /lib/security/pam_ldap.so
auth required pam_warn.so
account required pam_warn.so
session required pam_warn.so
satırlarını ekliyoruz. Son üç satır hataları takip edebilmek için.
phpldapadmin ile "people" ismini verdiğimiz (başka isim de olur) bir OrganizationalUnit oluşturuyoruz. Tüm kullanıcılar bu düğümün altında bulunacak. Sonra denemek için mustafa isimli bir kullanıcı ekliyoruz. Kullanıcıyı "Custom" template'inden "account" ve "possixaccount" objectclass'larını seçerek ekliyoruz.
Test edelim:
#ncftp -u mustafa
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mustafa".
Please specify the password.
Password: ******
Unexpected response: OOPS: cannot locate user entry:mustafa
OOPS: cannot locate user entry:mustafa
Evet hata verdi. Kullanıcının ev dizini bilgisini alamadığı için bir klasöre bağlayamadı. Fakat kimlik kanıtlamadan geçti. parolayı yanlış girdiğimizde veya ldap'da (veya sistemde) olmayan bir kullanıcı ile ftp yaptığımızda hata şöyle oluyor:
ncftp -u mehmet localhost
NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.5)
Logging in...
Password requested by 127.0.0.1 for user "mehmet".
Please specify the password.
Password: ******
Login incorrect.
Could not open host localhost: username and/or password was not accepted for login.
Bunu vsftp kayıt dosyalarından da doğrulayabiliriz:
#tail /var/log/vsftpd.log
Tue Jul 15 03:53:57 2008 [pid 4943] CONNECT: Client "127.0.0.1"
Tue Jul 15 03:53:57 2008 [pid 4942] [mustafa] OK LOGIN: Client "127.0.0.1"
Tue Jul 15 03:54:06 2008 [pid 4947] CONNECT: Client "127.0.0.1"
Tue Jul 15 03:54:12 2008 [pid 4946] [mehmet] FAIL LOGIN: Client "127.0.0.1
Malesef pam servislere kimlik doğrulama dışında bilgi vermiyor. Ev dizini gibi bilgileri servislere sağlayabilmek için nss (Name Service Switch) kullanmak gerekecek.
Debian, egroupware, ldap, vsftp, pam, nss falan fıstık - yazı dizisi - 3
Gelelim fasulyenin faydalarına:)
Şunu da yazmam lazımdır ki burada yazılanlar hatalı olabilir ve kendi sisteminizde denediğinizde sisteminizi çalışmaz hale getirebilir. Use at your own risk.
Önce kurulum:
ftp sunucu için vsftpd,
yetenekli ftp istemci için ncftp,
ssh sunucu için openssh-server
#apt-get install vsftpd
#apt-get install ncftp
#apt-get install openssh-server
vsftp2'nin anonymous dışındaki bağlantılara izin vermesi için /etc/vsftp.conf dosyasında local_enable=YES satırındaki #'i kaldırıp vsftpyi yeniden başlatıyoruz.
#nano /etc/vsftp.conf
#/etc/init.d/vsftpd restart
Kurulumları test edelim:
#ncftp -u kemal localhost
Login successful.
Logged in to localhost.
#ssh -l kemal localhost
bu da successful
Şimdi ldapla ilgili kurulumlar.
ldap sunucu için slapd - OpenLDAP server (slapd),
web'den ldap'ı yönetmek için: apache2, php5, phpldapadmin
ldap komutları ... için ldapscripts
#apt-get install apache2
#apt-get install php5
#apt-get install phpldapadmin
#apt-get install slapd
#apt-get install ldapscripts
Sorun yok. http://localhost/phpldapadmin/ adresine baktığımızda şöyle bir görüntü olmalı:
Malesef base entry eklemeden, /etc/ldap/slapd.conf ve /etc/ldap/ldap.conf dosyalarını düzenlemeden henüz login olamıyoruz. Ayrıca daha sonra ssl kullanarak güvenliği arttırmalıyız.
Daha ayrıntılı bilgi için http://www.openldap.org/doc/admin23/quickstart.html
#nano /etc/ldap/slapd.conf
suffix "dc=nodomain"
rootdn "cn=admin,dc=nodomain"
rootpw'yi de daha sonra şifreli tutmak gerekicek.
base entry eklemek için önce bir ldif dosyası oluşturuyoruz:
# nano base.ldif
dn: dc=nodomain
objectclass: dcObject
objectclass: organization
o: Ev
dc: nodomain
dn: cn=admin,dc=nodomain
objectclass: organizationalRole
cn: admin
#ldapadd -x -D "cn=admin,dc=nodomain" -W -f base.ldif
komutuyla oluşturduğumuz kök düğümü ldap'a aktardık. base.ldif dosyasında satırların başındaki boşlukları silmeden hata veriyor.
Test için
ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain
# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
Artık phpldapadmin ile webdeb login olabileceğimi düşünürken hata alıyorum. Daha önce de aynı problemi yaşamıştım ve birkaç saat aramayla çözmüştüm. Keşke o zaman bu blog girdisini yazsaymışım diyorum ama neyseki fazla aramadan bulabildim bu sefer.
#nano /etc/phpldapadmin/config.php
burada
$ldapservers->SetValue($i,'login','attr','dn');
yerine
$ldapservers->SetValue($i,'login','attr','cn');
yapıyoruz. Tamam artık login ekranını görelim:
Şunu da yazmam lazımdır ki burada yazılanlar hatalı olabilir ve kendi sisteminizde denediğinizde sisteminizi çalışmaz hale getirebilir. Use at your own risk.
Önce kurulum:
ftp sunucu için vsftpd,
yetenekli ftp istemci için ncftp,
ssh sunucu için openssh-server
#apt-get install vsftpd
#apt-get install ncftp
#apt-get install openssh-server
vsftp2'nin anonymous dışındaki bağlantılara izin vermesi için /etc/vsftp.conf dosyasında local_enable=YES satırındaki #'i kaldırıp vsftpyi yeniden başlatıyoruz.
#nano /etc/vsftp.conf
#/etc/init.d/vsftpd restart
Kurulumları test edelim:
#ncftp -u kemal localhost
Login successful.
Logged in to localhost.
#ssh -l kemal localhost
bu da successful
Şimdi ldapla ilgili kurulumlar.
ldap sunucu için slapd - OpenLDAP server (slapd),
web'den ldap'ı yönetmek için: apache2, php5, phpldapadmin
ldap komutları ... için ldapscripts
#apt-get install apache2
#apt-get install php5
#apt-get install phpldapadmin
#apt-get install slapd
#apt-get install ldapscripts
Sorun yok. http://localhost/phpldapadmin/ adresine baktığımızda şöyle bir görüntü olmalı:
Malesef base entry eklemeden, /etc/ldap/slapd.conf ve /etc/ldap/ldap.conf dosyalarını düzenlemeden henüz login olamıyoruz. Ayrıca daha sonra ssl kullanarak güvenliği arttırmalıyız.Daha ayrıntılı bilgi için http://www.openldap.org/doc/admin23/quickstart.html
#nano /etc/ldap/slapd.conf
- database bdb
suffix "dc=
rootdn "cn=Manager,dc=
rootpw secret
directory /usr/local/var/openldap-data
suffix "dc=nodomain"
rootdn "cn=admin,dc=nodomain"
rootpw'yi de daha sonra şifreli tutmak gerekicek.
base entry eklemek için önce bir ldif dosyası oluşturuyoruz:
# nano base.ldif
dn: dc=nodomain
objectclass: dcObject
objectclass: organization
o: Ev
dc: nodomain
dn: cn=admin,dc=nodomain
objectclass: organizationalRole
cn: admin
#ldapadd -x -D "cn=admin,dc=nodomain" -W -f base.ldif
komutuyla oluşturduğumuz kök düğümü ldap'a aktardık. base.ldif dosyasında satırların başındaki boşlukları silmeden hata veriyor.
Test için
ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base
# filter: (objectclass=*)
# requesting: ALL
#
# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain
# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
Artık phpldapadmin ile webdeb login olabileceğimi düşünürken hata alıyorum. Daha önce de aynı problemi yaşamıştım ve birkaç saat aramayla çözmüştüm. Keşke o zaman bu blog girdisini yazsaymışım diyorum ama neyseki fazla aramadan bulabildim bu sefer.
#nano /etc/phpldapadmin/config.php
burada
$ldapservers->SetValue($i,'login','attr','dn');
yerine
$ldapservers->SetValue($i,'login','attr','cn');
yapıyoruz. Tamam artık login ekranını görelim:
Debian, egroupware, ldap, vsftp, pam, nss falan fıstık - yazı dizisi - 2
Ara vermeden yazı dizisinin bu 2. kısmında web tarayıcımız için flash ve java eklentilerini yükleyelim.
saat 01:16
Önce java:
java.sun.com'dan jdk'yı indiriyoruz.
Yaklaşık 15dk sürdü.
#mv Desktop/jdk-6u10-beta-linux-i586.bin /usr/local
#cd /usr/local
#chmod 755 jdk-6u10-beta-linux-i586.bin
#./jdk-6u10-beta-linux-i586.bin
/usr/local/jdk1.6.0_10 dizini oluştu. iceweasel eklentisini sembolik bağlayalım.
ln -s /usr/local/jdk1.6.0_10/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/iceweasel/plugins
http://www.java.com/en/download/help/testvm.xml sayfasından test ediyoruz ve çalışıyor.
Benzer şekilde flash için:
http://www.adobe.com/products/flashplayer/
Bu 2 dk'da indi.
# mv ~kemal/Desktop/install_flash_player_9_linux.tar.gz /usr/local
#cd /usr/local
#tar xvfz install_flash_player_9_linux.tar.gz
#ln -s /usr/local/install_flash_player_9_linux/libflashplayer.so /usr/lib/iceweasel/plugins
Enerjimizin ve vaktimizin önemli kısmını temel kurulumlara harcadıktan sonra artık egroupware,ldap vs mevzulara geçebiliriz.
saat 01:42
saat 01:16
Önce java:
java.sun.com'dan jdk'yı indiriyoruz.
Yaklaşık 15dk sürdü.
#mv Desktop/jdk-6u10-beta-linux-i586.bin /usr/local
#cd /usr/local
#chmod 755 jdk-6u10-beta-linux-i586.bin
#./jdk-6u10-beta-linux-i586.bin
/usr/local/jdk1.6.0_10 dizini oluştu. iceweasel eklentisini sembolik bağlayalım.
ln -s /usr/local/jdk1.6.0_10/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/iceweasel/plugins
http://www.java.com/en/download/help/testvm.xml sayfasından test ediyoruz ve çalışıyor.
Benzer şekilde flash için:
http://www.adobe.com/products/flashplayer/
Bu 2 dk'da indi.
# mv ~kemal/Desktop/install_flash_player_9_linux.tar.gz /usr/local
#cd /usr/local
#tar xvfz install_flash_player_9_linux.tar.gz
#ln -s /usr/local/install_flash_player_9_linux/libflashplayer.so /usr/lib/iceweasel/plugins
Enerjimizin ve vaktimizin önemli kısmını temel kurulumlara harcadıktan sonra artık egroupware,ldap vs mevzulara geçebiliriz.
saat 01:42
Debian, egroupware, ldap, vsftp, pam, nss falan fıstık - yazı dizisi - 1
Bir haftadır kurcaladığım egroupware, ldap, pam, nss ile ilgili yazı dizisidir.
Önce sıfırsan bir debian kuralım. Üzerine daha sonra egroupware, ldap, pam, nss, mysql falan fıstık kuracağız.
saat 23:00 (kuruluma başlamak için biraz geç bir saat).
Bilgisayarı yeniden başlatıyoruz. Elimizdeki debian dvd/cdsini cdrom sürücüye yerleştiriyoruz. Birkaç denemeden sonra çizilmemiş olanını buluyoruz:)
Kurulum başlıyor, bir isim seçelim: "özgür" olsun. Kılavuzla diskin tamamını kullansın. / dizini için 7gb yeter mi acaba, neyse.
root parolası, yeni kullanıcı, temel sistem kurulumu ...
apt yapılandırılıyor. Bizim comunun depo adresi neydi acaba, yanlış olmasın, ftp.tr.debian.org ile devam edelim.
popularity contest'e katılmayalım:)
Yalnızca temel sistem olsun, sonra kde falan kurarız.
Grub'u mbrye mi kursun. Tabiki evet. Ve temel sistem kuruldu. kernel 2.6.18-5-686
Önce güncelleme:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
kernel 2.6.18-6-686 oldu. Birkaç güncelleme daha oldu. Elimdeki cd çok eski değilmiş. Bu arada
Debian GNU/Linux 4.0 r1 "Etch" ile kurulum yaptık.
Grafik ekranı kuralım:
#apt-get install x-window-system
kde kuralım:
#apt-get install kde kdm
//zaman kazanmak için kde-core da kurabilirdik
kahve molası...
...
bir sürü pakette hata veriyor, inşallah kurulum tamamlanır.
...
saat 23:55
hatalarla da olsa beklediğimden hızlı kuruldu.
Bir daha güncelleme:
#apt-get update
#apt-get upgrade
#E: unmet dependencies
bunu bekliyordum.
kurulamayan paketleri kurmak için:
#apt-get install -f (veya --fix-missing)
Hayret yine hata verdi. Hep de cdromdan kurulan paketlerde. Cdrom'u depo listesinden çıkarmalıydım. Nasılsa çoğu paketi internetten indiriyor.
#nano /etc/apt/sources.list (şu vi'yi bir ara öğrenmem lazım:)
cdromla ilgili satıra # koyduk.
#apt-get update
Tekrardan:
#apt-get install -f (veya --fix-missing)
Şimdi tamam. Emin olmak için:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Mükemmel!
reboot edip sistemi inceleyelim.
saat 00:05
cd'yi çıkarmayı ve çizilmeyecek şekilde bir yere koymayı unutmayalım:)
#reboot
oturum açınca unuttuğumuzu farkettiğimiz kde türkçe paketini kuralım:
#apt-get install kde-i18n-tr
Kde Control Center'da Country/Region & Language kısmından Türkçeyi ekleyelim.
Tamam, kurulum neredeyse tamamlandı.
Daha alışkın olduğumuz iceweasel'i kuralım. Sonra javayı ve flash'ı kuracağız.
#apt-get install iceweasel iceweasel-l10n-tr
Kurulum sırasında kağıda aldığımız notları blog girdisine dönüştürelim. Ekran görüntüsü de koyalım. PrintScreen çalışsaydı keşke.

saat:01:08
Önce sıfırsan bir debian kuralım. Üzerine daha sonra egroupware, ldap, pam, nss, mysql falan fıstık kuracağız.
saat 23:00 (kuruluma başlamak için biraz geç bir saat).
Bilgisayarı yeniden başlatıyoruz. Elimizdeki debian dvd/cdsini cdrom sürücüye yerleştiriyoruz. Birkaç denemeden sonra çizilmemiş olanını buluyoruz:)
Kurulum başlıyor, bir isim seçelim: "özgür" olsun. Kılavuzla diskin tamamını kullansın. / dizini için 7gb yeter mi acaba, neyse.
root parolası, yeni kullanıcı, temel sistem kurulumu ...
apt yapılandırılıyor. Bizim comunun depo adresi neydi acaba, yanlış olmasın, ftp.tr.debian.org ile devam edelim.
popularity contest'e katılmayalım:)
Yalnızca temel sistem olsun, sonra kde falan kurarız.
Grub'u mbrye mi kursun. Tabiki evet. Ve temel sistem kuruldu. kernel 2.6.18-5-686
Önce güncelleme:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
kernel 2.6.18-6-686 oldu. Birkaç güncelleme daha oldu. Elimdeki cd çok eski değilmiş. Bu arada
Debian GNU/Linux 4.0 r1 "Etch" ile kurulum yaptık.
Grafik ekranı kuralım:
#apt-get install x-window-system
kde kuralım:
#apt-get install kde kdm
//zaman kazanmak için kde-core da kurabilirdik
kahve molası...
...
bir sürü pakette hata veriyor, inşallah kurulum tamamlanır.
...
saat 23:55
hatalarla da olsa beklediğimden hızlı kuruldu.
Bir daha güncelleme:
#apt-get update
#apt-get upgrade
#E: unmet dependencies
bunu bekliyordum.
kurulamayan paketleri kurmak için:
#apt-get install -f (veya --fix-missing)
Hayret yine hata verdi. Hep de cdromdan kurulan paketlerde. Cdrom'u depo listesinden çıkarmalıydım. Nasılsa çoğu paketi internetten indiriyor.
#nano /etc/apt/sources.list (şu vi'yi bir ara öğrenmem lazım:)
cdromla ilgili satıra # koyduk.
#apt-get update
Tekrardan:
#apt-get install -f (veya --fix-missing)
Şimdi tamam. Emin olmak için:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Mükemmel!
reboot edip sistemi inceleyelim.
saat 00:05
cd'yi çıkarmayı ve çizilmeyecek şekilde bir yere koymayı unutmayalım:)
#reboot
oturum açınca unuttuğumuzu farkettiğimiz kde türkçe paketini kuralım:
#apt-get install kde-i18n-tr
Kde Control Center'da Country/Region & Language kısmından Türkçeyi ekleyelim.
Tamam, kurulum neredeyse tamamlandı.
Daha alışkın olduğumuz iceweasel'i kuralım. Sonra javayı ve flash'ı kuracağız.
#apt-get install iceweasel iceweasel-l10n-tr
Kurulum sırasında kağıda aldığımız notları blog girdisine dönüştürelim. Ekran görüntüsü de koyalım. PrintScreen çalışsaydı keşke.

saat:01:08
Perşembe, Mayıs 22, 2008
Microsoft MS Office formatında geri adım attı
Çarşamba, Nisan 16, 2008
Java paketleri
Ornijanli burada olan belgeyi çevirmeyi hep düşünüyordum. Java paket mevzusu çok sade ve anlaşılır bir şekilde anlatılmış.
JAVA Paketleri
İçerik
* Giriş
* Örnekler
* Java Derleyicisi dosyaları nasıl buluyor
* CLASSPATH çevre değişkeni
Giriş
* Her sınıf bir paketin parçasıdır.
* Bir dosya içindeki bütün sınıflar aynı paketin parçasıdır.
* Paket belirtimi şöyle yapılır:
package paket-adı;
dosyanın ilk (non-comment) satırında.
* Farklı dosyalar aynı paketi belirtebilir.
* Eğer herhangi bir paket belirtilmediyse bir dosyadaki sınıflar özel, isimsiz bir pakete (tüm dosyalar için aynı isimsiz paket) dahil edilirler.
* Eğer package paket-adı belirtildiyse dosya paket-adı dizininde olmalıdır (dizin adıyla paket adı uyuşmalıdır).
* Başka bir (ismi belli olan) paketteki public sınıfa şöyle erişebilirsiniz:
paket-adı.sınıf-adı
Böyle sınıfların public eleman saha veya fonksiyonlarına şöyle erişebilirsiniz:
paket-adı.sınıf-adı.elema-saha-veya-fonksiyon-adı
paket-adını kullanma zorunluluğundan şöyle kurtulabilirsiniz:
import paket-adı.*; veya
import paket-adı.sınıf-adı;
(dosyanın ilk satırlarında package deklerasyonundan sonra). İlki paketteki tüm sınıfları içe aktarır (import), ikincisi sadece belirtilen sınıfı. Bu şekilde sadece paket-adı nı yazmaktan kurtuluruz. Hala sınıfa erişmek için sınıf-adı nı, eleman saha veya fonksiyonlara erişmek için sınıf-adı.eleman-saha-veya-fonksiyon-adı nı kullanmalıyız.
Örnekler
Javadir isimli dizinde çalıştığınızı ve aşağıdaki gibi kodları olan dosyalar oluşturduğunuzu farzedin.
dosya 1
package ListPkg;
public class List { ... }
class ListNode {...}
dosya 2
package ListPkg;
public class NoNextItemException { ... }
dosya 3
public class Test { ... }
class Utils { ... }
dosya 4
class Test2 { ... }
Kullanmanız gereken dizin ve dosya isimleri şöyle olmalı:
* Dosya 1 List.java isimli dosyada, Listpkg dizininde bulunmalı.
* Dosya 2 NoNextItemException.java isimli dosyada ve yine Listpkg dizininde bulunmalı.
* Dosya 3 Test.java isimli dosyada bulunmalı (Javadir dizininde).
* Dosya 4 .java uzantılı her hangi isimli dosyada bulunabilir (Javadir dizininde).
Bunlar da her bir dosyanın kodundan erişilebilecek sınıflar:
* Dosya 1 ve 2:
o İlk iki dosyadaki kodlar (ListPkg/List.java ve ListPkg/NoNextItemException.java) aynı paketin içindeki sınıflara erişebilirler (List, ListNode, ve NoNextItemException). (Bu paketler için erişim belirtilmediğinden varsayılan paket erişimini kullanırlar)
o Dosya 1 ve 2 deki kodlar, her ne kadar public olarak tanımlansa da, Test sınıfına erişemezler. Problem şudur ki Test sınıfı isimsiz bir paketin içindedir, bu yüzden bu paketi veya Test sınıfını içe aktarmanın yolu yoktur.
o Dosya 1 ve 2 deki kodlar Utils ve Test2 sınıflarına erişemezler çünkü bu sınıflar farklı pakettedir ve varsayılan paket erişimine sahiptirler.
* Dosya 3 ve 4:
o Dosya 3deki kodlar (Test.java) ListPkg.List, ListPkg.NoNextItemException, Test, Utils, and Test2 sınıflarına erişebilir. (ilk ikisi isimli bir pakettei public sınıflar olduklarından, son üçü aynı isimsiz pakette ve hem public hem de paket erişiminden dolayı). Yine de dikkat edin, eğer Test.java daki kodlar Test2 sınıfını kullanırsa ve bu sınıf Test2.java isimli dosyada değilse Test2 sınıfının olduğu dosya önce derlenmelidir, aksi taktirde bu sınıf bulunamaz.
o Dosya 4 deki kodlar (Test2 sınıfını içeren dosya) Dosya 3 (Test.java) dekilerle aynı sınıflara erişebilirler.
Örneği özetlemek gerekirse:
Here's a summary of the example:
File Contents Directory/FileName Can Access
package ListPkg;
public class List {...}
class ListNode {...}
ListPkg/List.java List, ListNode, NoNextItemException
package ListPkg;
public class NoNextItemException
{...}
ListPkg/NoNextItemException.java List, ListNode, NoNextItemException
public class Test {...}
class Utils {...}
Test.java ListPkg.List, ListPkg.NoNextItemException, Test, Utils, Test2
class Test2 {...}
any-name.java ListPkg.List, ListPkg.NoNextItemException, Test, Utils, Test2
Java Derleyicisi dosyaları Nasıl bulur
Aynı dosyada tanımlı olmayan bir sınıfı (veya arayüzü [interface]) kullanan bir dosyayı derlediğinizde Java derleyicisi sınıf tanımlamasının olduğu yeri bulmak için şunları kullanır
* sınıfın adı
* içe aktarılan paket isimleri (eğer varsa)
* dahil olduğu paket ismi
Örneğin, içinde Test.java isimli tek bir dosyanın olduğu Javadir dizininde çalıştığınızı farzedin:
import ListPkg.*;
public class Test {
List L;
...
}
List Tedt.java'da tanımlı olmadığından ve dizinde List.java bulunmadığından derleyici ListPkg altdizininde List.javayı arayacak (Test.java Listpkg yi içe aktardığı için).
Şimdi ListPkg altdizininin içinde iki dosya olduğunu varsayalım: List.java ve ListNode.java, her ikisi de ListPkgye dahil. Ayrıca List.java nın ListNode.java da tanımlı olan List sınıfını kullandığını varsayalım. List.java yı ListPkg altdizininde derlemeye çalışırsanız hata alırsınız, çünkü derleyici List.java yı aktif dizinde aramak yerine ListPkg altdizininde bulmayı deneyecektir.
Bu problemi çözmenin (en azından) üç yolu vardır:
1. Bir paketi her zaman üst dizinden derleyin. Örneğin List.java yı Javadir/Listpkg dizini yerine Javadir dizini içindeyken derleyin. Javadir dizininde şu komutu girin:
javac ListPkg/List.java
2. Bir paketteki tüm dosyaları her zaman aynı anda derleyin; örneğin Javadir/LitsPkg dizininde şu komutu girin:
javac *.java
3. Paketin bulunduğu altdizinden kendisine dairesel sembolik link tanımlayın; Javadir/ListPkg dizininde:
ln -s . ListPkg
CLASSPATH Çevre Değişkeni
Aktif dizinin (örn. javac komutunu verdiğiniz dizin) alt dizininde olmayan bir paketi kullanmak için, Java derleyicisinin nereye bakması gerektiğini belirtmek amacıyla CLASSPATH çevre değişkenini girmelisiniz.
Örneğin /p/course/cs368-horwitz/public/ListPkg dizini içinde bir List paketi bulunuyorsa CLASSPATH değişkenini şöyle ayarlamalısınız:
setenv CLASSPATH .:/p/course/cs368-horwitz/public
Nokta ve iki nokta üstüste (.:) derleyiciye ayrıca derlmenin yapıldığı dizine de bakmasını şöyler. Dikkat edin, CLASSPATH çevre değişkeni ListPkg nin üst dizinine ayarlandıi ListPkg dizininin kendisine değil.
JAVA Paketleri
İçerik
* Giriş
* Örnekler
* Java Derleyicisi dosyaları nasıl buluyor
* CLASSPATH çevre değişkeni
Giriş
* Her sınıf bir paketin parçasıdır.
* Bir dosya içindeki bütün sınıflar aynı paketin parçasıdır.
* Paket belirtimi şöyle yapılır:
package paket-adı;
dosyanın ilk (non-comment) satırında.
* Farklı dosyalar aynı paketi belirtebilir.
* Eğer herhangi bir paket belirtilmediyse bir dosyadaki sınıflar özel, isimsiz bir pakete (tüm dosyalar için aynı isimsiz paket) dahil edilirler.
* Eğer package paket-adı belirtildiyse dosya paket-adı dizininde olmalıdır (dizin adıyla paket adı uyuşmalıdır).
* Başka bir (ismi belli olan) paketteki public sınıfa şöyle erişebilirsiniz:
paket-adı.sınıf-adı
Böyle sınıfların public eleman saha veya fonksiyonlarına şöyle erişebilirsiniz:
paket-adı.sınıf-adı.elema-saha-veya-fonksiyon-adı
paket-adını kullanma zorunluluğundan şöyle kurtulabilirsiniz:
import paket-adı.*; veya
import paket-adı.sınıf-adı;
(dosyanın ilk satırlarında package deklerasyonundan sonra). İlki paketteki tüm sınıfları içe aktarır (import), ikincisi sadece belirtilen sınıfı. Bu şekilde sadece paket-adı nı yazmaktan kurtuluruz. Hala sınıfa erişmek için sınıf-adı nı, eleman saha veya fonksiyonlara erişmek için sınıf-adı.eleman-saha-veya-fonksiyon-adı nı kullanmalıyız.
Örnekler
Javadir isimli dizinde çalıştığınızı ve aşağıdaki gibi kodları olan dosyalar oluşturduğunuzu farzedin.
dosya 1
package ListPkg;
public class List { ... }
class ListNode {...}
dosya 2
package ListPkg;
public class NoNextItemException { ... }
dosya 3
public class Test { ... }
class Utils { ... }
dosya 4
class Test2 { ... }
Kullanmanız gereken dizin ve dosya isimleri şöyle olmalı:
* Dosya 1 List.java isimli dosyada, Listpkg dizininde bulunmalı.
* Dosya 2 NoNextItemException.java isimli dosyada ve yine Listpkg dizininde bulunmalı.
* Dosya 3 Test.java isimli dosyada bulunmalı (Javadir dizininde).
* Dosya 4 .java uzantılı her hangi isimli dosyada bulunabilir (Javadir dizininde).
Bunlar da her bir dosyanın kodundan erişilebilecek sınıflar:
* Dosya 1 ve 2:
o İlk iki dosyadaki kodlar (ListPkg/List.java ve ListPkg/NoNextItemException.java) aynı paketin içindeki sınıflara erişebilirler (List, ListNode, ve NoNextItemException). (Bu paketler için erişim belirtilmediğinden varsayılan paket erişimini kullanırlar)
o Dosya 1 ve 2 deki kodlar, her ne kadar public olarak tanımlansa da, Test sınıfına erişemezler. Problem şudur ki Test sınıfı isimsiz bir paketin içindedir, bu yüzden bu paketi veya Test sınıfını içe aktarmanın yolu yoktur.
o Dosya 1 ve 2 deki kodlar Utils ve Test2 sınıflarına erişemezler çünkü bu sınıflar farklı pakettedir ve varsayılan paket erişimine sahiptirler.
* Dosya 3 ve 4:
o Dosya 3deki kodlar (Test.java) ListPkg.List, ListPkg.NoNextItemException, Test, Utils, and Test2 sınıflarına erişebilir. (ilk ikisi isimli bir pakettei public sınıflar olduklarından, son üçü aynı isimsiz pakette ve hem public hem de paket erişiminden dolayı). Yine de dikkat edin, eğer Test.java daki kodlar Test2 sınıfını kullanırsa ve bu sınıf Test2.java isimli dosyada değilse Test2 sınıfının olduğu dosya önce derlenmelidir, aksi taktirde bu sınıf bulunamaz.
o Dosya 4 deki kodlar (Test2 sınıfını içeren dosya) Dosya 3 (Test.java) dekilerle aynı sınıflara erişebilirler.
Örneği özetlemek gerekirse:
Here's a summary of the example:
File Contents Directory/FileName Can Access
package ListPkg;
public class List {...}
class ListNode {...}
ListPkg/List.java List, ListNode, NoNextItemException
package ListPkg;
public class NoNextItemException
{...}
ListPkg/NoNextItemException.java List, ListNode, NoNextItemException
public class Test {...}
class Utils {...}
Test.java ListPkg.List, ListPkg.NoNextItemException, Test, Utils, Test2
class Test2 {...}
any-name.java ListPkg.List, ListPkg.NoNextItemException, Test, Utils, Test2
Java Derleyicisi dosyaları Nasıl bulur
Aynı dosyada tanımlı olmayan bir sınıfı (veya arayüzü [interface]) kullanan bir dosyayı derlediğinizde Java derleyicisi sınıf tanımlamasının olduğu yeri bulmak için şunları kullanır
* sınıfın adı
* içe aktarılan paket isimleri (eğer varsa)
* dahil olduğu paket ismi
Örneğin, içinde Test.java isimli tek bir dosyanın olduğu Javadir dizininde çalıştığınızı farzedin:
import ListPkg.*;
public class Test {
List L;
...
}
List Tedt.java'da tanımlı olmadığından ve dizinde List.java bulunmadığından derleyici ListPkg altdizininde List.javayı arayacak (Test.java Listpkg yi içe aktardığı için).
Şimdi ListPkg altdizininin içinde iki dosya olduğunu varsayalım: List.java ve ListNode.java, her ikisi de ListPkgye dahil. Ayrıca List.java nın ListNode.java da tanımlı olan List sınıfını kullandığını varsayalım. List.java yı ListPkg altdizininde derlemeye çalışırsanız hata alırsınız, çünkü derleyici List.java yı aktif dizinde aramak yerine ListPkg altdizininde bulmayı deneyecektir.
Bu problemi çözmenin (en azından) üç yolu vardır:
1. Bir paketi her zaman üst dizinden derleyin. Örneğin List.java yı Javadir/Listpkg dizini yerine Javadir dizini içindeyken derleyin. Javadir dizininde şu komutu girin:
javac ListPkg/List.java
2. Bir paketteki tüm dosyaları her zaman aynı anda derleyin; örneğin Javadir/LitsPkg dizininde şu komutu girin:
javac *.java
3. Paketin bulunduğu altdizinden kendisine dairesel sembolik link tanımlayın; Javadir/ListPkg dizininde:
ln -s . ListPkg
CLASSPATH Çevre Değişkeni
Aktif dizinin (örn. javac komutunu verdiğiniz dizin) alt dizininde olmayan bir paketi kullanmak için, Java derleyicisinin nereye bakması gerektiğini belirtmek amacıyla CLASSPATH çevre değişkenini girmelisiniz.
Örneğin /p/course/cs368-horwitz/public/ListPkg dizini içinde bir List paketi bulunuyorsa CLASSPATH değişkenini şöyle ayarlamalısınız:
setenv CLASSPATH .:/p/course/cs368-horwitz/public
Nokta ve iki nokta üstüste (.:) derleyiciye ayrıca derlmenin yapıldığı dizine de bakmasını şöyler. Dikkat edin, CLASSPATH çevre değişkeni ListPkg nin üst dizinine ayarlandıi ListPkg dizininin kendisine değil.
Pazartesi, Nisan 07, 2008
Akvaryumumun yeni hali
Akvarist arkadaşım Necdet'in getirdiği bitkilerle akvaryumumun yeni hali böyle oldu.
Akvaryumda 2 zebra, 4 plati, 3 salyangoz, 3 albino corrydoras, 3 de Otocinclus var.
Cuma, Şubat 15, 2008
Pardusta recordmydesktop
Her zaman lazım olabilecek minik kullanışlı bir program recordmydesktop. Dosyayı buradan indirdikten sonra komut satırında:
~$ tar -xvfz recordmydesktop-x.y.z.tar
~$ cd recordmydesktop-x.y.z
~$ ./configure
~$ make
~$ sudo make install
ile kuruluyor. configure sırasındaydı yanılmıyorsam (adını hatırlamıyorum) eksik diyerek hata vermişti yeni kurduğum pardusta. Onu da
~$sudo pisi install
şeklinde kuruyoruz. 0.3.7.3 sürümü olmasına rağmen sorunsuz çalıştı.
qt ve gtk arayüzlerini de indirip kullanmak mümkün ama ben komut satırından daha kolay kullandım.
~$recordmydesktop
ile tam ekran sesli+görüntülü kayıt yapıyor. Ctrl+C ile kayıt durduruluyor.
şöyle de kullanılabilir:
~$recordmydesktop -o dosya -width 200 -height 200 --follow-mouse -dummy-cursor black -stop-shortcut Shift+Mod1+S -pause-shortcut Shift+Mod1+P
Shift+Alt+P pause için Shift+Alt+P stop için klavye kısayolları. Ayrıntılar için man recordmydesktop.
~$ tar -xvfz recordmydesktop-x.y.z.tar
~$ cd recordmydesktop-x.y.z
~$ ./configure
~$ make
~$ sudo make install
ile kuruluyor. configure sırasındaydı yanılmıyorsam
~$sudo pisi install
şeklinde kuruyoruz. 0.3.7.3 sürümü olmasına rağmen sorunsuz çalıştı.
qt ve gtk arayüzlerini de indirip kullanmak mümkün ama ben komut satırından daha kolay kullandım.
~$recordmydesktop
ile tam ekran sesli+görüntülü kayıt yapıyor. Ctrl+C ile kayıt durduruluyor.
şöyle de kullanılabilir:
~$recordmydesktop -o dosya -width 200 -height 200 --follow-mouse -dummy-cursor black -stop-shortcut Shift+Mod1+S -pause-shortcut Shift+Mod1+P
Shift+Alt+P pause için Shift+Alt+P stop için klavye kısayolları. Ayrıntılar için man recordmydesktop.
Cuma, Ocak 11, 2008
Ben Pardus kurdum
1 yıldır kullandığım ve hiçbir şikayetimin olmadığı debian'ı kaldıraraktan geçen haftasonu ani bir kararla pardus kurdum. 21 saniye gibi supersonic bir hızla açılıyor. Daha ayarlara dokunmadım ama hiçbirşeyde sorun yok. Daha önce bir çok kez kurup şöyle bir bakmıştım. Bundan böyle uzun bir süre pardus kullanmayı düşünüyorum. Yanına bir de ubuntu kurabilirim incelemek için.
Perşembe, Ekim 04, 2007
Go'ya başlarken
2002 yılında Ankara'da "Akıl oyunları" filmini izleyene kadar go oyunundan haberim yoktu. Filmde esas oğlanı John Nash bir buluş yapmaya çalışan parlak bir matematikçidir. Diğer arkadaşları ile rekabet halindedir. En büyük rakibi ile bahçede bir go maçı yapar ve yenilir. Hayal kırıklığı. 10 saniye kadar süren bu sahnede go tahtası bir kaç saniye kadar görüntülendi fakat bu goyu merak etmeye yetti. Arkadaşımla bir kaç hafta içinde ortak bir go tahtası aldık. Kendi kendimize öğrenmeye çalıştık. Başlarda oyunun ne zaman biteceğini anlayamadık, sonra hangi taşların ölü olduğunu. Sonra oyun sırasında içimizden "inşallah atariyi görmez" diye dua ettik:) Bu arada yanımıza her gün birileri daha katıldı. Oyunun bu kadar çekici olmasına şaşırdım. Bir haftada 5-6 kişi go oynamaya başladık. Bunun sebebi herhalde kuralların çok basit olması ve 2 dakikada öğrenilebilmesi (yeni başlayanlara bunu söylemek bazen ters etki yapabiliyor, 2 dakikada öğrenemezsem diye strese girenler olabiliyor:) ). Bir kaç hafta böyle sürdü ve başlangıç düzeyinde bir go oyuncusu oldum. Kendimi, goyu Topluluklardan öğrenmeyenler arasında, Türkiye'deki 2. go dalgasına kapılmış olanlardan sayıyorum. Birinci dalga olarak Şibumi'den esinlenenleri görüyorum. 2.si Akıl oyunları filmi (daha sonra başka kişilerin de bu filmden etkilenerek başladıklarını öğrendim). Tabiiki bu işin başını ODTÜ Alpar Kılınç Go Topluluğu ve büyük şehirlerdeki Go Toplulukları çekiyor.
Sonra yaklaşık 4 yıllık bir ara. Çanakkale'ye taşındım, askerlik falan girdi araya. Ortak aldığımız tahta bende kalmıştı fakat oynayacak kimse yoktu. 2006 yılının Eylül ayında KGS'ye üye olarak tekrar goya başladım. Bunun yanında Üniversitemde Go topluluğu kurma girişiminde bulundum ( hala başaramadım).
Bu süre zarfında okuduğum yazılardan, izlediğim oyunlardan go ile ilgili pek çok güzel şey öğrendim. Go ile ilgili güzel şeyleri değişik gruplarda ele almak mümkün.
Mesela felsefe. Bu konuda pek çok yazı var. Go oyununu gerçek dünya ile ilişkilendiren yazılar, oyundaki hamlelerin yaşamdaki kararlara benzetilmesi. İçinde bulunduğunuz durumdan maksimum fayda çıkarma çabası, olumlu şeylerle olumsuzların dengesi. Bunlar çok karmaşık, uçuk, zorlama düşünceler gibi görünse de sanırım oyunu oynayan herkes bunları hissediyor. Basitçe goyu öğreniyorsunuz, bir rakip bulup oynuyorsunuz ve gerçek yaşamdaki taktikleri kullanıyorsunuz. Bu arada uyguladığınız taktikleri geliştirip bunları gerçek yaşamda da uyguluyorsunuz. Hiç bir çabaya gerek yok, oldukça basit (Bir yerde, go oynayan birinin oyundaki taktikleri kullanarak iş bulduğunu okumuştum).Bu kadar basit ve doğal olması beni şaşırttı ve goyu öğrendikçe daha çok sevmeme sebep oldu. Gonun büyülü tarafı bu olsa gerek.
Bir diğer güzel tarafı gonun tarihle bütünleşmiş olması. 4000 yıllık bir oyun, dile kolay. Bir sürü efsane, hikaye, go için yazılmış şiirler. Go'ya adanmış Hikarunix işletim sistemini kurarken şöyle bir konuşma görünüyor ekranda:
Öğrenci: Usta, insanlığın icad ettiği en büyük oyun nedir?
Usta: Satranç!
Öğrenci: Peki Go?
Usta: Go herzaman vardı.
Sanırım bu tarih kısmını özetliyor:)
Bir diğer güzel tarafı da oynarken aldığınız zevk tabiiki. Bu bakımdan diğer oyunlara, hobilere benziyor. Günlük olaylardan sıyrılıp stres atabileceğiniz bir hobi. Bir zihin sporu. Bir oyun. Kendinize ayırdığınız bir zaman. Biraz kaçış.
Go ile ilgili başlangıçtan itibaren bazı maraz düşünceler aklınızdan geçiyor. Birincisi kazanma hırsı ve seviyenizi yükseltme çabası. En basit ifadeyle dan olmak istiyorsunuz. Prestijli birşey. Bir diğeri Türkiyede Go'nun sınırlı oynanması, bilinmemesi, elit oyunu olarak görülmesi düşüncesi. Gerçekten öyle mi görülüyor, yoksa öyle mi. Bir diğeri de kaybetme korkusu. Neticede bir zeka oyunu, bir müsabaka, bir yarış.
İlgimi çeken başka şeyler:
KGS'de 5-6 dan seviyelerine gelmiş oyuncuların hala bir şeyler denemesine çok şaşırmıştım. Oyuna başlıyorlar, bir şey deniyorlar, olmayınca teşekkür edip terk ediyorlar. Bu oyunun bir derya olduğunu gösteriyor. Öğrenecek şeyler bitmiyor. Hani oyunun sonuna geldim, artık bitirdim falan yok. Bilgisayarlar ancak 5x5 bir tahtada siyahın başladığında hep yeneceğini ispatlayabilmiş. 19x19 tahtada ise 1. ve 2. çizgi dışında oyunun her yerden açılabileceği yönünde bir yaklaşım var. Çok büyük bir belirsizlik. Tabiiki denemeyle bitmez:) Zaten dünyanın oluşumundan beri her saniye go oynansaymış yine de tüm ihtimaller tükenmezmiş. Go ile ilgili o kadar çok klişe var ki, alt alta yazılsa sadece klişelerden küçük bir kitap çıkar. Bir diğeri ise oyunu iyi oynamak için hem bir matematikçi hem de bir şair olunması gerektiği (Şibumi'den sanırım). Ne büyük, ne etkili sözler bunlar. Destansı sözler.
Sonra yaklaşık 4 yıllık bir ara. Çanakkale'ye taşındım, askerlik falan girdi araya. Ortak aldığımız tahta bende kalmıştı fakat oynayacak kimse yoktu. 2006 yılının Eylül ayında KGS'ye üye olarak tekrar goya başladım. Bunun yanında Üniversitemde Go topluluğu kurma girişiminde bulundum ( hala başaramadım).
Bu süre zarfında okuduğum yazılardan, izlediğim oyunlardan go ile ilgili pek çok güzel şey öğrendim. Go ile ilgili güzel şeyleri değişik gruplarda ele almak mümkün.
Mesela felsefe. Bu konuda pek çok yazı var. Go oyununu gerçek dünya ile ilişkilendiren yazılar, oyundaki hamlelerin yaşamdaki kararlara benzetilmesi. İçinde bulunduğunuz durumdan maksimum fayda çıkarma çabası, olumlu şeylerle olumsuzların dengesi. Bunlar çok karmaşık, uçuk, zorlama düşünceler gibi görünse de sanırım oyunu oynayan herkes bunları hissediyor. Basitçe goyu öğreniyorsunuz, bir rakip bulup oynuyorsunuz ve gerçek yaşamdaki taktikleri kullanıyorsunuz. Bu arada uyguladığınız taktikleri geliştirip bunları gerçek yaşamda da uyguluyorsunuz. Hiç bir çabaya gerek yok, oldukça basit (Bir yerde, go oynayan birinin oyundaki taktikleri kullanarak iş bulduğunu okumuştum).Bu kadar basit ve doğal olması beni şaşırttı ve goyu öğrendikçe daha çok sevmeme sebep oldu. Gonun büyülü tarafı bu olsa gerek.
Bir diğer güzel tarafı gonun tarihle bütünleşmiş olması. 4000 yıllık bir oyun, dile kolay. Bir sürü efsane, hikaye, go için yazılmış şiirler. Go'ya adanmış Hikarunix işletim sistemini kurarken şöyle bir konuşma görünüyor ekranda:
Öğrenci: Usta, insanlığın icad ettiği en büyük oyun nedir?
Usta: Satranç!
Öğrenci: Peki Go?
Usta: Go herzaman vardı.
Sanırım bu tarih kısmını özetliyor:)
Bir diğer güzel tarafı da oynarken aldığınız zevk tabiiki. Bu bakımdan diğer oyunlara, hobilere benziyor. Günlük olaylardan sıyrılıp stres atabileceğiniz bir hobi. Bir zihin sporu. Bir oyun. Kendinize ayırdığınız bir zaman. Biraz kaçış.
Go ile ilgili başlangıçtan itibaren bazı maraz düşünceler aklınızdan geçiyor. Birincisi kazanma hırsı ve seviyenizi yükseltme çabası. En basit ifadeyle dan olmak istiyorsunuz. Prestijli birşey. Bir diğeri Türkiyede Go'nun sınırlı oynanması, bilinmemesi, elit oyunu olarak görülmesi düşüncesi. Gerçekten öyle mi görülüyor, yoksa öyle mi. Bir diğeri de kaybetme korkusu. Neticede bir zeka oyunu, bir müsabaka, bir yarış.
İlgimi çeken başka şeyler:
KGS'de 5-6 dan seviyelerine gelmiş oyuncuların hala bir şeyler denemesine çok şaşırmıştım. Oyuna başlıyorlar, bir şey deniyorlar, olmayınca teşekkür edip terk ediyorlar. Bu oyunun bir derya olduğunu gösteriyor. Öğrenecek şeyler bitmiyor. Hani oyunun sonuna geldim, artık bitirdim falan yok. Bilgisayarlar ancak 5x5 bir tahtada siyahın başladığında hep yeneceğini ispatlayabilmiş. 19x19 tahtada ise 1. ve 2. çizgi dışında oyunun her yerden açılabileceği yönünde bir yaklaşım var. Çok büyük bir belirsizlik. Tabiiki denemeyle bitmez:) Zaten dünyanın oluşumundan beri her saniye go oynansaymış yine de tüm ihtimaller tükenmezmiş. Go ile ilgili o kadar çok klişe var ki, alt alta yazılsa sadece klişelerden küçük bir kitap çıkar. Bir diğeri ise oyunu iyi oynamak için hem bir matematikçi hem de bir şair olunması gerektiği (Şibumi'den sanırım). Ne büyük, ne etkili sözler bunlar. Destansı sözler.
Perşembe, Eylül 20, 2007
Fenerbahçe vs Inter
Fenerbahçemiz tarihe yazılacak bir oyunla italyan devini devirdi. Şimdi bilgisayarcı şapkamı bir kenara koyup spor yazarı şapkamı takıyorum :)Maçın ilk beş dakkasını avrupa yakasına feda ettim ( rezalet, burayı geçelim)
Maçın başında Spiker aşırı konsantre gibiydi, kezmana yapılan penaltıdan bahsetmedi. Normalde olmayan penaltılar için çıngar çıkartmazmıydı bunlar, hayret. Bir kaç pozisyonda da maçı izlemiyormuş gibiydi.
Wederson süpriz bir şekilde sahadaydı, enteresan işler peşindeydi. Dan dun heryerden vurdu, güzel de vurdu :) Roberto Carlos'un esmer versiyonu gibiydi. Fenerbahçenin yedek kadrosu hakkaten insanı şaşırtıyor. Sol tarafta Uğur Boral'ı da çok beğendim sezon başı ama işi zor. Daha Tümer ve Appiah da var (Appiah'ın solda oynamadığını biliyorum, yedek olması açısından...).
Önder Turacı maçın başında 2 tane kötü orta yaptıktan sonra bir kaç pozisyonda fırsatı varken orta yapmayarak topu arkadaşlarına pasladı. Gereksiz bir güven eksikliği gibi geldi bana. Maç boyunca iyiydi.
Deivid kendisini eleştirenleri utandırmaya devam ediyor. Hem defansta hem ofansta hatasız oynadı. Son derece gösterişsiz ve kaprizsiz oynadı, bana göre takımın en iyisiydi. Beklere yardım etti, halftaymda forması sırılsıklamdı (yazar burada döktürüyor :) ). Top ayağına geldiğinde hiç acele etmeden tereyağından kıl çeker gibi çalımları harikaydı. Deniz ve Aurelio ile birlikte orta saha kusursuz oynadı.
Golden bahsetmeyeyim (burada yazar futbolun salt sonuca yönelik olmadığını şeyettiriyor).
Alexe diyecek söz yok. Topla leblebi gibi oynuyor ( benim icat ettiğim bir fütbol terimi). Tam rakip ayağından alacak sanıyorsunuz bir bakmışsınız çalım atmış. Daha top kendine gelirken tek dokunuşla çalım atıyor, muazzam. Goldeki asisti jenerik seviyesindeydi (ne demekse :) )
Kezman aslında beğendiğim bir futbolcu, geçen sene Parma maçında attığı bir çalımla o zamana kadar uyuyan fenerbahçeyi uyandırmıştı ve ilk golün asistini yapmıştı. O zamandan beri severim kendisini. Fenerbahçenin böyle ateşleyici oyunculara ihtiyacı var. Ama bu sistem ona uymuyor. Fenerbahçede hücumları ortasaha oyuncuları başlatıyor ve bitiriyor. Santrafora yönelik bir hücum anlayışı yok. Kezman da tek başına dolanıp duruyor.
Volkan tam konsantre değil, aklı başka yerde gibi. Hatası da olmadı aslında. Diğer defans oyucuları iyiydi. Luganonun tarzını sevmiyorum pek, Bülent Korkmaz gibi rakible oynuyor, çaktırmadan fauller falan. Ama başarılı oluyor.
Sonuç olarak bütün takım iyiydi ve tarihi bir galibiyet aldık. Her şey mükemmeldi, ta ki basın toplantısına kadar. Türk basınından inciler dökülmeye başladı. Hiç mi kültürümüz geleneğimiz yok anlamıyorum. Muhteşem bir oyun, tarihi galibiyet, her şey harika. Önce adamı bir tebrik et, güzel şeylerden bir bahset. Gerçekten merak edilen şeyleri sor. Hiç biri yok. Sanki karşılarındaki insan değil bir makina. Kendilerini kamera arkasında görünmez sanıyorlar. Tamamen suni soğuk bir iletişim. Neden onu oynatmadın demek yerine neden şunu oynattın demek daha makul değil mi. Gaziantep maçının kadrosunu sordular en son, "beni galibiyetimle başbaşa bırakın" diyebildi Zico. Adamın yüzü düştü valla. Daum da aynı şeyleri yaşadı. Güzel şeyler, eğlenmek pek rating yapmıyor diye insaflı bir şekilde yorumluyorum. Yoksa ben diyceğimi bilirim!
Tekrar diğer şapkamı alayım.
Mazinde bir tarih yatarrrrrrrrrrrr, yaşaaaaa Fenerbahçeeeeeeeee
Kaydol:
Kayıtlar (Atom)

