MacOS X’te Yerel DNS

August 17th, 2010

Önce hazırlık yapıyor(muş)uz.
Root olarak,

rndc-confgen > /etc/rndc.conf 
head -n 6 /etc/rndc.conf > /etc/rndc.key
cd /System/Library/StartupItems
mkdir BIND
cd BIND
vim BIND

Read the rest of this entry »

Birlikte kodlamak

July 7th, 2010

Çok oldu yazmayalı.. Slm.

Biriyle birlikte çalışmak zor.  Çalıştığınız kişiyle anlaşıyor olmanız lazım. Şimdiye kadar birkaç defa biriyle ortak iş yaptım, Memnun kaldığım biri olmadı. Yani benimle çalışıp da bana mı söylüyorsun bunları demeyin. Evet size ve müstakbel iş arkadaşlarıma söylüyorum.

Aşağıda madde madde yazdım çalıştığım kişiden ne beklediğimi. Bu maddeleri kendimi büyük gördüğüm için, veya bir çeşit ego tatmini için falan yazmıyorum. Bu konuda ne düşündüğünüz umurumda değil, ve ben biraz kendini beğenmiş biriyimdir ama burada olan şey bu değildir.

Read the rest of this entry »

G15 ve Transmission

August 1st, 2009

Yeni klavyem oldu: Logitech G15. Cihazın güzel bir LCD ekranı var. İşi gücü olmayan bir grup insan da sağolsun buna Linux sürücüsü yazmış. Bir grup başka insan da sağolsunlar, G15Composer diye güzel bir dalga yapmışlar. LCD ekranı programlayabilmek için.

Efem şimdi ilk olarak ortamımız Debian Lenny.

apt-get install g15daemon g15composer

komutuyla kuruyoruz şeylerimizi. G15′e gönderilebilecek komutlara http://manpages.ubuntu.com/manpages/intrepid/man1/g15composer.1.html adresinden ulaşabilirsiniz. Biraz bakının, tekrar görüşürüz..

Baktınız değil mi?
Orada görüldüğü üzere kullanacağımız temel komut, “Ts “line 1″ “line 2″ …”. TS(Text Small), küçük boyutta yazı yazmaya yarıyor.

g15composer > /tmp/g15

komutuyla composer ı başlatıyoruz. G15′imizde kocaman G15COMPOSER yazıyor olmalı şimdi. Örnek bir komut verelim,

echo 'TS "Hello G15"' > /tmp/g15

Ne oldu? Klavyede hello yazdı. :) Şimdi bu komutları kurcalaya kurcalaya kurcalaya aşağıdaki şey çıktı. Kodun çalışması için Transmission 1.5x e ihtiyacınız var; ki bu da kararlı Debian deposunda yok. Ben sitesinden indirip derledim. “transmission” ile Transmission’ı başlatıyoruz, sonra konsolda “transmission-remote -l” ile Transmission’daki torrent bilgilerini listeliyoruz. Aaaa gösteriyor hepsini. İşte aşağıdaki şey burada görünen şeyleri düzgün bir hale sokup G15 e yazıyor.

Buyrun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
function sendCommand($c)
{
	shell_exec("echo '".$c."' > /tmp/g15");
}
while(1)
{
	shell_exec('transmission-remote -l 2>&1');
	$output = shell_exec('transmission-remote -l 2>&1');
 
	$output = explode("\n", $output);
	unset($output[0]);
	unset($output[count($output) - 1]);
	foreach ($output as $out)
	{
		$cout['done'] = trim(substr($out, 7, 3));
		$cout['have'] = trim(substr($out, 13, 6));
		$cout['haveMB'] = trim(substr($out, 20, 2));
		$cout['up'] = trim(substr($out, 37, 4));
		$cout['down'] = trim(substr($out, 44, 5));
		$cout['status'] = trim(substr($out, 57, 12));
		$cout['name'] = trim(substr($out, 70));
		$torrents[] = $cout;
	}
 
	foreach ($torrents as $tor)
	{
		if(empty($tor['name']))
			continue;
//		print_r($tor);
		$commands[] = "\"".str_pad("%$tor[done]", 3, ' ').str_pad("(".intval($tor['have'])."$tor[haveMB])", 8, ' ').str_pad(round($tor['up'])."/".round($tor['down']), 6, ' ')." $tor[name]\"";
	}
 
	sendCommand('PC 0');
	sendCommand("TS \"|||||||+++==--TRANSMISSION--==++|||||||| \" \"  Done    Up/Down          Name\" ".implode($commands, ' '));
 
	unset($commands);
	unset($torrents);
	sleep(2);
}
?>

G15Composer çalışıyorsa, php transmission.php (Yukarıdaki dosyanın adı) komutuyla scriptimizi çalıştırıyoruz, ve G15′de iki saniyede bir güncellenmek üzere Transmission ile indirdiğimiz şeylerin listesiniz görüyoruz..

Hoşuma gitti bunu yapmak, aylak bir zamanda Sistem bilgisi şeyedici, mail şeyedici, RSS şeyedici falan gibi bilimum dalga dümenle karşınızda olabileceğim. Tekrar görüşene kadar “ei bakın gennize ha!”.

xchat-exaile eklentisi

May 10th, 2009

XChat Resim Göndericisinden sonra ikinci eklentimi de yaptım. Exaile‘de çalan şarkı türkü ne varsa bulunduğunuz kanalda gösteriyor.

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import xchat
import commands
import random
 
__module_name__ = "Exaile"
__module_version__ = "0.1"
__module_description__ = "Exailede çalan şarkıyı türküyü şeyeder."
 
def exa(word, word_eol, userdata):
        turkucu = commands.getoutput("exaile --get-artist")
        album = commands.getoutput("exaile --get-album")
        parca = commands.getoutput("exaile --get-title")
 
        xchat.command("me %s - %s albümünden \"%s\" dinliyor. (Exaile)" % (turkucu, album, parca))
 
xchat.hook_command('exa', exa)
xchat.prnt(__module_name__ + ' v' + __module_version__ + ' loaded..')

Bu dosyayı bir yere kaydedip xchat’te XChat » Load Plugin or Script menüsünden dosyayı göstererek çalıştırabilirsiniz. /exa komutu ile o an dinlediğiniz şeyi gösterirsiniz.

Ubuntu Rocks

March 1st, 2009

Logdur. :)

<omerozkan> anlamadığım bir nokta da şu neden ubuntu gibi rocks tercih etmemişler
<omerozkan> gerçi onlara sormam lazım :)
<acemi> rokcs derken?
<omerozkan> geçen rocks tabanlı olduğu söylnedi
<omerozkan> pardus ise sux tabanlıymış
<acemi> hmm tamam
<acemi> dogru
<acemi> ben dogrudan rocks kullaniyorum
<omerozkan> nasıl yani
<acemi> rocks var makinede
<omerozkan> anladım
<penguen> :)

Web tabanlı metin editörü

February 3rd, 2009

Geçenlerde ilginç bir iş için javascript ile kod renklendirmesi yapabilen pek güzel bir şey (ne denirse artık) keşfettim.

Ana sayfa Çeşitli örnekler

?View Code JAVASCRIPT
	<script src="edit_area/edit_area_full.js" type="text/javascript"></script>
	<script type="text/javascript">
		editAreaLoader.init({
			id: "textarea",
			syntax: "php",
			start_highlight: true, 
			allow_resize: 'both', 
			font_size: 6, 
			min_width: 1580, 
			min_height: 650
		});
 
	</script>

diyorsunuz, idsi textarea olan textarea yı içinde php kodu olduğunu varsayarak renklendiriyor.
Satır numarası gösteriyor, autoindent fonksiyonu var, eklenti desteği var, isterseniz ekranı kaplatabiliyorsunuz, bul & değiştir fonksiyonu var.

Bir sürü özelliği de düzenlenebilir, pek hoşuma gitti. “gedit”in javascript hali diyebiliriz. Süper hızlı değil ama çok ağır da çalışmıyor.

XChat Resim Göndericisi

January 19th, 2009

IRC’ye şipşak ekran görüntüsü göndermek için bir xchat eklentisi yaptım. Aşağıda:

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python
from os import system
import xchat, httplib, urllib, base64, sys 
 
__module_name__ = "Resim Gonderici"
__module_version__ = "0.1"
__module_description__ = "Ekran goruntusunu gonderir."
 
def ss(words, word_eol, userdata):
        system("import /tmp/xchat-ss.jpg")
        cnn     = httplib.HTTPConnection('s.tugrul.org:80')
        gonder  = cnn.request('POST', 
                                '/r/remoteUpload.php', 
                                urllib.urlencode({'image': base64.b64encode(open('/tmp/xchat-ss.jpg').read())}), 
                                {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text:plain'})
        xchat.command("me screenshot: " + cnn.getresponse().read())
        cnn.close
xchat.hook_command("ss", ss, help="/ss")

Bu dosyayı bir yere kaydedip xchat’te XChat » Load Plugin or Script menüsünden dosyayı göstererek çalıştırabilirsiniz.
/ss komutunu verdikten sonra fare imleci + şeklini alır. Göndermek istediğiniz alanı seçip bırakarak komutu tamamlarsınız. Alan seçmeyip yalnızca tıklarsanız, seçtiğiniz pencerenin tümünü gönderir.
Sonucu /me [link] şeklinde komutu verdiğiniz IRC penceresine yazar.

İki önemli şey:
* import komutunun çalışması için imagemagick paketinin yüklü olması gerekir.
* Resimler 3 saatte bir rm -f komutuyla silinir. Bu yüzden yalnızca anlık işleriniz için kullanın.

Otomatik Yedek

January 7th, 2009

Günlük yedek almak için bir betik yazdım. Dosyalar rsync ile internet üstündeki bir sunucuda tutuluyor. Betiği kullanmak için önce parola kullanmadan sunucuya bağlanmak için birkaç şey yapıyoruz:
(http://www.linuxproblem.org/art_9.html adresinden kopya çektik bunun için)
Kendi bilgisayarımızda

ssh-keygen -t rsa

komutunu veriyoruz. Bu bize bir dosya üretiyor.

ssh kullanici@sunucu mkdir -p .ssh

ile sunucuda .ssh dizini oluşturuyoruz.

cat .ssh/id_rsa.pub | ssh kullanici@sunucu 'cat >> .ssh/authorized_keys'

komutu ile az önce oluşturduğumuz dosyayı sunucuda oluşturduğumuz dizine gönderiyoruz.

ssh kullanici@sunucu komut

komutunu verdiğimizde sunucuya bağlanacak, komut komutunu sunucuda çalıştıracak ve çıkış yapacak.

Artık sunucuya parola kullanmadan bağlanabiliyoruz. Aşağıdaki bash betiğini ben /usr/bin/Yedekle.sh diye kaydedip çalıştırma izni verdim. Yedekle.sh komutuyla belirlediğim dizinleri sunucuda belirlediğim yerlere kopyalıyor. rsync’nin güzelliği, yalnızca değişen dosyaları sunucuya göndermesi. Yani her gün birkaç saat beklemiyorsunuz yedek alabilmek için. Read the rest of this entry »

Çift monitör ile Guake

December 22nd, 2008

Guake’nin varlığından haberdar olduğumdan beri Yakuake yerine kendisini kullanıyorum. Pek de memnundum, ta ki ikinci monitörümü takana kadar. İki monitörü xinerama özelliğiyle kullanıyorum. Bu da ekran genişliğini 1600 + 1280 pixel yapıyor. Guake de ekran genişliği olarak bunu algılıyor doğal olarak. Bir genişlik ayarı da olmadığından beni epeydir sinir etmekteydi bu durum. Nedense kodu indirip bir bakmak geldi içimden. Neden mıncıklamayayım dedim. Sitesinden kodu indirdim ve aşağıdaki değişikliği yapınca durum düzeldi. Şimdi yalnızca soldaki monitörde görüyorum Guake’yi. Çözüm benim işimi görüyor..

src/guake.py:

?View Code PYTHON
748
749
750
751
    def get_window_size(self):
        width = self.window.get_screen().get_width()
        height = self.client.get_int(GCONF_PATH+'general/window_size')
        return 1600, height

Değişikik 751. satırda. width yerine 1600 gönderiyoruz.

Sonsuz kategorilendirme

December 14th, 2008

Sonsuz kategorilendirme için güzel bir fonksiyon:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function kategori($lev, $par, $arr)
{
	foreach ($arr as $a)
	{
		if($a[2] == $par)
		{
			for($i = 0; $i < $lev; $i++)
				echo " »";
			echo $a[1]."<br />\n";
			kategori($lev + 1, $a[0], $arr);
		}
	}
}
 
$kategoriler = array(
			array(1, 'Bilgisayar', 0),
			array(2, 'Donanım', 1),
			array(3, 'İşletim Sistemi', 1),
			array(4, 'Ekran Kartı', 2),
			array(5, 'Nvidia', 4),
			array(6, 'ATI', 4),
			array(7, 'İşlemci', 2),
			array(8, 'Intel', 7),
			array(9, 'AMD', 7),
			array(10, 'Linux', 3),
			array(11, 'Debian', 10),
			array(12, 'Ubuntu', 10),
);
kategori(0, 0, $kategoriler);
?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/python
 
kategoriler = [
	[1, 'bilgisayar', 0],
	[2, 'donanim', 1],
	[3, 'isletim sistemi', 1],
	[4, 'ekran karti', 2],
	[5, 'nvidia', 4],
]
 
def f(seviye, par, arr):
	for a in arr:
		if a[2] == par:
			for i in range(seviye):
				print '+',
			print a[1]
			f(seviye+1, a[0], arr)
 
f(0, 0, kategoriler)