7 Nisan 2009 Salı

Firefox, dünyanın en popüler tarayıcısı

Şu anki kaynaklara göre, dünya üzerindeki en çok kullanılan web tarayıcısı IE(%65), ardından Firefox(%25) geliyor(kaynak). Fakat zeitgeist blogunda gördüğüm bir ifade dikkatimi çekti. Firefox'tan "dünyadaki en popüler web tarayıcısı" diye bahsedilmekteydi.
Bunu görünce önce biraz şaşırdım, sonra gayet mantıklı geldi. Zira en yüksek kullanım oranı IE'de olsa bile, IE kullanıcılarının rahat %90'ı IE'den başka bir browser hiç kullanmamış. IE kullanıp da onu savunan herhangi birine neredeyse rastlamadım. Bu durumdaki kullanıcılar IE dışında başka bir browser gördüğünde ne yapar? Burada üç seçenek var, ya çok kolay bir şekilde başka bir browser'a geçer, ya üşenip IE'de kalır, ya da IE savunucuları dediğimiz minik gruba dahil olurlar. Eğer browserların popülerliğini bir browser'ın ne demek olduğunu bilen kişiler üzerinde yaparsak, IE ve Firefox muhtemelen birbirine yakın çıkar, hatta Firefox daha fazla kullanıma sahip olur.
Ha, burada sormak lazım, hiç mi lümpenproleterya analogu internet kullanıcısı yok firefox kullanan? Tabi vardır ama tahminen bunlar manyak linux kullanıcılarının "büyükanne deneyleri"ndeki deneklerle falan sınırlıdır. Bu nedenle buradan diyorum: "Firefox en iyi web tarayıcısı olmayabilir, ama aslında en popüleridir".

Zıbıdık Gerçeği (Acı ama gerçek)

Yıllardır 'Zıbıdık' kelimesini her an her yerde kullanma potansiyeline sahibim(bkz: bu blogun başlığı, postlar, taglar). Yıllar önce simultane bir şekilde bulduğum bir zıbıdıktı o esas Zıbıdık. Yıllar içinde gelişti, büyüdü, tam bir zıbıdık oldu. En sonunda hayatın anlamına dönüştü,
#define ZIBIDIK 42
oldu. Ben tabi bütün bu süre içinde Zıbıdık'ın bundan ayrı bir anlamı olmadığını düşünerek yaşadım. Ancak kısa bir süre önce bir şey öğrendim ve bunu öğrenmek benim için çok acı verici oldu. "Zıbıdık" ın başka bir anlamı vardı! Sinop civarlarında yetişen bir otun adıymış aynı zamanda. Yemeği de yapılıyormuş(ahanda tarifi). Bunca yıldır benden önce anlamsız sandığım kelimecanın anlamı varmış, ben, onun için ilk değilmişim!
Bunun üzerine, uzun süre üzüldüm, ama sonunda farkına vardım ki üzülmek gereksizmiş. Zıbıdık kelimesini oluştururken zıbıdıkotu'nun varlığından habersiz olduğuma göre, tıpkı Anna'nın Basshunter için sürekli bir bot kalması gibi(bkz. Basshunter - Boten Anna) zıbıdık da benim için benim dışımda anlamsız kalacak.

6 Nisan 2009 Pazartesi

Monocan

Mono Project, Maykrozort'unkine alternatif bir .net compiler, vm ve runtime implementasyonu. 2001 yılından beri geliştirilmekte, Windose, Linux ve Mac için ayrı sürümleri var ve gördüğüm kadarıyla gayet güzel, hatta yer yer muhteşem. Öncelikle, performans ve sistem kaynakları tüketimi konusunda .net framework'ten daha bile iyi olduğu söylenebilir(Yazdığım ImageViewer şeysi ortalama 10mb kadar yiyor). Genelde GUI için Winforms yerine GTK# kullanılıyor ki bu bence gayet güzel. Winforms'un o resize konusundaki belalarını, nöblekliklerini çekmiyoruz. Neyse deneme amaçlı GTK# ile bi ImageViewer yazdım, koyuvereyim onu da. Ahanda Image Viewer. Ayrıca Windows'ta kullandığımız .net ile yazılmış şeyler de çoğunlukla ya hiç sorunsuz çalışıyor, ya da az bi değişiklikle çalışır hale geliyor (uyumsuzluğun sebebi genelde windows için üçüncü parti native kütüphaneler oluyor).

Şu da bu deneme amaçlı image viewer'ın screenshotu:

5 Nisan 2009 Pazar

Jethro Tull - Aqualung ve Compiz Fusion'u aynı postta nasıl buluşturabiliriz?

Tam olarak şöyle olabilir:
Yaklaşık 1.5 saat önce Jethro Tull'dan aqualung kafamda çalmaya başladı. Uzun süre boyunca devam etti ve sonunda dayanamayıp dinlemeye karar verdim. Dinledim, kesilmedi. Bi FoF açıp çalayım dedim. Başladım. Şarkının sonlarına doğru ses bir anda takıldı (dadadadadadada şeklinde) ama oyun devam etti. Tabi ben de devam edemeyip oyundan çıkmaya çalıştım. Ana menüye kadar çıkabildim ama ondan sonrası gelmedi görüntü gitti. Alt-tabla system monitore geçtim oradan FoF processini kill etmeyi denedim. Olmadı(ölmedi?). sonra konsoldan kill etmeyi denedim, yine olmadı. Sonra konsoldan sudo kill etmeyi denedim, e hala olmamakta direnmekteydi. Ben de X'i restart ettim.
Geri login olduğumda ilginç bir sürpriz beni beklemekteydi. Bu sürprizi AWN'nin "composition manager not running" hatasıyla farkettim. Compiz Fusion deaktive olmuştu. Appearance şeysinden tekrar extra desktop effects'i açmaya çalıştım, o da bana olmaz diyerek karşılık verdi. Ben o anda dumur konumuna geldim gayet. X i tekrar restart ettim, baktım yine aynı durum. Sonra reboot ettim, durum değişmemekte, benim dumurum da geçmemekte direndi. Sonra dedim, extra değil de normal visual effects i seçsem ne olur diye düşündüm ve seçtim(Programcı usulü düşünme: kelebek etkisini abartarak ufak bir değişikliğin programın çalışışını kökten değiştirmesini beklemek). Sonra bir baktım "enee!oldu" şeklinde bir tepki verdim. Normal desktop effects'i açabildikten sonra extra da açıldı, az bişey configle kullandığım Compiz pluginlerini geri açtım ve herşey eski haline döndü, dostluk, barış ve meyva suyu içinde yaşamaya devam ettiler.

4 Nisan 2009 Cumartesi

DeFacto

DeFacto, sanırım bi giyim firması. daha önce yan odadan TV reklamlarını duymuş ve billboardlarda afişcanlarını görmüştüm. "Jean, Amerika'nın şalvarıdır" formatında. Hiçbişey demeden geçmiştim. Son iki gündür de bu slogancanın modifiye edilmiş formu olan "Jean, Obama'nın şalvarıdır" sözünü duyuyorum. Tamam Obama orada hafiften sembolik olabilir(olmayadabilir) ama Obama'nın jean giyerken çekilmiş bir fotoğrafına hiç rastlamadım. Eşofman(yoksa eşortman mı? kim bilir) giyerken, şort giyerken çekilmiş fotocan var ama jean yok. Ne iştir bu? Sorarım sana defactocan!
Ayrıca, DeFacto karşıtı olarak DeJure adında bir zıbıdık kursalar ya jean ve şalvar satan?

Lyricler falan

Kişilikler: Ben, Birand
Zaman: dün bi ara
Mekan: ben evdeyim, birand kendi evinde. iletişim msn ile sağlanmakta(birand'ı da bir türlü açık bi protokole geçiremedim ya)
Olay: birand'ın lyricwiki'den şarkı sözü arayıp bulduğu sözleri mp3 dosyasının id3 taglarına kaydeden bir programdan etkilenip "yok artık" demesi. akabinde benim gülmem ve "yok artık buna da yok artık denir mi çok basit bişey" demem.
Sonuç: aşağıda görülen ruby ile yazılmış minik zımbırtıyı saçmalamam
require 'rubygems'
require 'open-uri'
require 'cgi'
require 'hpricot'
require 'id3lib'

usage = "lyrics.rb filename"
unless ARGV.length == 1
  puts usage
  exit
end

def lyrics(title,artist)
  file = Hpricot(open("http://lyricwiki.org/#{artist}:#{title}"))
  div = (file/".lyricbox")[0]
  begin
    div.innerHTML.gsub(/\
/,"\n").gsub(/<(.|\n)*?>/,"") rescue puts "No lyrics found" nil end end def escape x CGI.escape(x).gsub(/\+(\w)/){|m| "_" + m[1].chr.upcase}.sub(/(\w)/){|m| m.upcase} end tag = ID3Lib::Tag.new(ARGV[0]) artist,title = escape(tag.artist), escape(tag.title) ly = lyrics title, artist tag.lyrics = ly tag.update!

3 Nisan 2009 Cuma

Ubuntucan üçüncü partcan

son partcandan beri çok oldu ubuntu ile ilgili yazmayalı(gerçi neredeyse hiçbişey yazmadım o zamandan beri ama). tabi o arada çok şey oldu. neyse, anlatmaya başlayayım. okulun beleş verdiği laptopa linux kurmaya üşenip komple windose kurdum. sonra bir süre gayet desktopcanımda ubuntu kullanmaya devam ettim. sonra garip bir şekilde desktopcanın anakartının bir zıbıdığı yandı(tam nesi hatırlamıyorum, çok oldu). sonra desktopu kullanamazken ben leppidi toppidi'me alıştım, bağlandım. tabi üşengeçliğin doruklarında gezdiğim için laptopa ubuntu falan kurmadım. hatta üşengeçliği o kadar abarttım ki windose altındayken reboot'a üşendim, 1 ay gibi uptimelar yakaladım(bunu nasıl yaptığıma şaşıyorum)(1 aydan fazlaya çıkamadım). sonuçta aradan fazlasıyla zaman geçti. ayrıca windose kullanırken neredeyse kernel vs. hariç hiçbir maykrozort ürünü kullanmadım(hani window manager bile farklıydı). sonra bi şekilde mahalle baskısı sonucu(yakınımda bulunan herkes ubuntuya yöneldi, ben ortamdaki en eski olan ama o anda kullanmayan ubuntu kullanıcısı olarak kaldım) kurdum. bu arada bir ara aldığım 500gig external hdd sayesinde yedekleme şeyi biraz daha kolay oldu. soonacıma geçen seferkinden bile daha memnunum. en ufak bir drivermış, codecmiş, zartmış zurtmuş hasanmış hüseyinmiş sorun etmedi(ipod dahil). ayrıca precompiled olarak repositorylerde bulunan bonus ruby libraryleriyle beni mest etti. eğer sürç-ü lisan eylediysek muhtemelen sorun etmezsiniz, zira saçmalamalarım içinde farkedilmezler bile. e gecenin bu saatinde, son 17 buçuk saattir ayaktayken(konferans esnasındaki 10 dakikalık kestirme hariç) saçmalamak o kadar da anormal olmasa gerek. zzzzz....

30 Ekim 2008 Perşembe

bilingual zıbıdık

dünkü ruby ile garip denemelerimden sonra aklıma gelen bişey;
ad soran, ona göre hello diyen ve rasgele bi sayı bastıran bişey yazdım. bunun olayı ise aynı anda hem ruby hem de c'de çalışabiliyo olması. daha ne olsun??


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#if 0
def main; yield if __FILE__ == $0; end
def system(s); `#{s}`; end
def srand(x); end
def time(x); end

def declare; end
def input; $name = gets.chomp; end
NULL = nil
#endif
main(){
srand(time(NULL));

#define input scanf("%s",name)
#define declare char name[80]

printf("name? ");
declare;
input;
#if 0
name = $name
#endif

printf("hello, %s!\n", name);
#if 0
a = rand(100)
#else
#define a rand()%100
#endif
printf("just a random number: %d\n",a);
system("pause");
}

29 Ekim 2008 Çarşamba

rubycan

lan ne uzun zaman olmuş blogcanıma yazmayalı. üşendim baya bi ama sağolsunlar blogger'ı blokladılar ters tepti bi yazıyım dedim. neyse aradan baya bi zaman geçti, ben bu arada ruby kullanmaya başladım. güzel bi scripting dilcanı. perl usulü bir şeyi yapmanın haddinden fazla yolu var. hello world'ün bile. bikaç tane örnek

ben perl'den geldim şöyleyim böyleyim metodu:
print "hello world";

python kullanıyodum ruby de ba benziyo falan dediler metodu:
print "hello world"

python 3000 çıktı uyumlu olmak lazım metodu:
print("hello world")

yok ben c'ciyim eskilerden vazgeçemem metodu:
printf("hello world\n");

c++ güzeldir. oo getirdi diyen oo yu bilmeyen noob metodu:
$stdout << "hello world";

smug lisp weenie metodu:
(print "hello world")

derseniz ki ruby'ye özel bişey yok mu diye:
puts "hello world"

ama tabi bence esas ruby'ye özel olan
send :puts, "hello world"
veya
$stdout.send :<< "hello world"

ayrıca biraz özelleştirmeyle farklı diller de taklit edilebilir.
daha bir c++ mesela:
cout = $stdout
endl = "\n"
cout << "hello world" << endl;

veya c#:
Console = $stdout
class << Console; alias_method :WriteLine, :puts; end
Console.WriteLine("hello world");

java da olur:
module System
def self.out
$stdout
end
end
class << $stdout; alias_method :println, :puts; end
System.out.println("hello world");

fazla mı kastım ne :D

16 Aralık 2007 Pazar

Brainfuckcan

Python ile brainfuck interpreter ı yazdım.bikaç yerde(+ ve - operatörleri) azıcık kopya çekmiş olsam da :p.ahanda:


import sys
import array
class brainfuck:
"Brainfuck code.can be interpreted :p"

def __init__(self,code = "",file_or_string = 's',max_size = 30000 ):
self.data= array.array('B', ( 0 for _ in xrange(max_size)))
if (code != ""):
if(file_or_string == 's'):
self.read(code)
elif(file_or_string == 'f'):
self.read_file(code)
else:
print "WARNING: File_or_string invalid - no code loaded."

def read(self,code):
"Reads the code string"
self.code = code

def read_file(self,filename):
"Reads the code from the specified file"
code_file = open(filename, 'r')
self.code = code_file.read()

def run(self):
"Obviously,interpretes and runs the code"
pos = 0 #the position in code
ptr = 0 #data pointer

while pos < curr =" self.code[pos]"><+-.,[]": #operators currd = self.data[ptr] #current data at the pointer if curr == '>':
ptr += 1
elif curr == '<':
ptr -= 1

elif curr == '+':
self.data[ptr] = (currd + 1) & 0xFF
elif curr == '-':
self.data[ptr] = (currd - 1) & 0xFF

elif curr == '.':
sys.stdout.write(chr(currd))
elif curr == ',':
self.data[pos] = raw_input()[0]

elif curr == '[':
if currd == 0:
par = 1
while(par):
pos += 1
if self.code[pos] == ']':
par -= 1
if par == 0:
break
elif self.code[pos] == '[':
par +=1
elif curr == ']':
if currd != 0:
par = 1
while (par):
pos -= 1
if self.code[pos] == '[':
par -= 1
if par == 0:
break
elif self.code[pos] == ']':
par += 1
#end of operator control
pos += 1 #increementing position by 1
#end of brainfuck.run function
#end of brainfuck class

bide inputu tam düzgün çalışmamakta sanki