October 3, 2007 at 6:27 am ·
Youtube gibi flv tabanlı video siteleri gönderdiğimiz videoları online çevirmek için ffmpeg veya mencoder programlarından birini kullanır. İkisi de aynı koddan doğmuş olsa da şu anda aralarında büyük farklar bulunuyor.
FFMpeg ile Video Dönüştürmek
Komut satırından kullanılan ffmpeg ile şu şekilde ilk videomuzu çevirebiliriz:
ffmpeg -i girdi.avi cikti.flv
oldukça basit dursa da bu şekilde kullanınca frame rate’i, görüntü kalitesi ve ses kalitesi öntanımlı değerlerle değişecek. Bunları kendimiz belirlemek için parametreleri kullanmamız lazım.
FFmpeg Parametreleri
-i : Girdi dosyasını belirtmek için
-f : Çıktı formatını belirlemek için
-vcodec: Videonun işleneceği codec
-acodec: Videodaki sesin işleneceği codec
-b : Videonun bitrate’i
-a : Videodaki sesin bitrate’i
-r : Frame rate
-s : Boyut
Örnek Kullanım:
ffmpeg girisParametreleri -i girdi.avi cikisParametreleri cikti.avi
ffmpeg -f avi -i girdi.avi -f flv -ab 96k -b 500k -s 320x240 cikti.flv
bu kod girdi.avi’yi 500kbit/sn bitrate’li, 320×240px boyutlu, 96kbit/sn ses bitrate’li cikti.flv dosyasına dönüştürür. Frame rate belirtilmezse 25 kabul edilir.
Thumbnail Oluşturmak
Thumbnail’i ffmpeg ile oluşturmak yerine mencoder ile oluşturmak daha hızlı olacaktır.
mplayer girdi.avi -ss 40 -nosound -vo jpeg -frames 1 -o girdi.jpg
bu kod girdi.avi’nin 40. saniyesini girdi.jpg’e kaydedecektir.
none
September 24, 2007 at 4:42 am ·
mod_rewrite’ı veya htaccess dosyaları ile yönlendirme yapmayı duymayan kalmamıştır. standart bir htaccess dosyasına bakacak olursak:
1
2
3
4
5
| RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] |
bu kurallar wordpress’in rewrite kuralları.
1. satırda Rewrite motorunun kullanılacağını belirtiyoruz.
2. satırda bu kuralların bütün kök ve alt dizinlerde geçerli olduğunu söylüyoruz.
3. satırda REQUEST_FILENAME değişkeninde tutulan isimde bir dosya eğer yoksa diyoruz
4. satırda REQUEST_FILENAME değişkeninde tutulan isimde bir klasör eğer yoksa diyoruz
<5. satırda bütün istekleri index.php'ye gönder deyip L (LAST) bayrağı ile bu conditionları sağlayan durumlarda yapılacak son rewrite'ın bu olduğunu belirtiyoruz.
Detaylı İnceleme
RewriteEngine on|off
Apache’de , öntanımlı olarak rewrite motoru kapalı olarak geliyor. mod_rewrite ile yönlendirme yapacaksak eğer ilk satırda RewriteEngine On’a ihtiyacımız var.
RewriteOptions Seçenek
Burada Kullanabileceğimiz iki seçenek var. MaxRedirects değeri ve inherit opsiyonu. MaxRedirects aynı isteğin kaç kere yeniden yazılacağını belirliyor. inherit ise MaxRedirets’in değerinin bir üst klasörde geçerli olan değer olmasını söylüyor. Öntanımlı olarak MaxRedirects=10, inherit ise kapalı.
RewriteBase URL
Fiziksel yer ile sanal yer farklı ise RewriteBase ile isteklerin nereye geldiğini belirtmemiz gerekiyor. Örneğin sunucuda /home/yiit/ahmet/mehmet klasöründe bulunan dosyalarımız url olarak www.site.com/cenk yolu ile çağırılıyorsa /home/yiit/ahmet altındaki .htaccess’de
bulundurmamız gerekiyor.
RewriteCond var1 var2
RewriteCond’u eğer var1 var2′ye uyuyorsa bir sonraki satıra geç şeklinde bir if yapısı olarak düşünebiliriz. şöyle örnekler sunabiliriz:
1
| RewriteCond %{REQUEST_URI} yiit.php |
bu satır, eğer %{REQUEST_URI} yiit.php ise diyor. yiit.php’nin başına ünlem koyarak (!yiit.php) REQUEST_URI yiit.php değilse diyebilirdik.
1
| RewriteCond %{HTTP_HOST} gro.tiiy.yiit.org |
burada ise eğer HTTP_HOST gro.tiiy.yiit.org ise diyoruz. .htaccess dosyasında düzenli ifadeler (regular expressions - regex) de kullanabiliriz. Aynı örneği geliştirelim:
1
2
| RewriteCond %{HTTP_HOST} !www.yiit.org
RewriteCond %{HTTP_HOST} ([^.]+).yiit.org |
burada subdomain eğer www dışında bir şeyse dedik. ileride subdomain ismine erişmek istersek %1 değişkenini kullanabiliriz. burada dikkat edilmesi gereken şey iki rewritecond arasında bir and olduğu. yani sadece bu ikisini de sağlayan durumlar rewriterule’a geçebilecek. eğer ikisinden birini sağlamasını isteseydik OR bayrağını kullanacaktık:
1
2
| RewriteCond %{HTTP_HOST} !www.yiit.org [OR]
RewriteCond %{HTTP_HOST} ([^.]+).yiit.org |
Kullanabildiğimiz Değişkenler
RewriteCond ile oluşturduğumuz değişkenlere %n şeklinde ulaşabiliyoruz. örneğin
1
| RewriteCond %{HTTP_HOST} ^(.*).(.*) |
böyle bir kuralımız varsa birinci (.*) yani HTTP_HOST’un ilk noktadan önceki kısmı %1,ilk noktadan sonraki kısmı %2 oluyor.
RewriteRule değişkenleri ise $n şeklinde. rewritecond ve rewriterule değişkenlerini aynı kuralın içinde kullanmak mümkün:
1
2
| RewriteCond %{HTTP_HOST} ([^.]+).yiit.org
RewriteRule ^(.*)$ yok.php?adres=$1⊂=%1 |
bu durumda gro.tiiy.yiit.org/ahmet.php aslında yiit.org/yok.php?adres=ahmet.php⊂=gro.tiiy olarak işlem görecek.
Sunucu değişkenleri ise %{SUNUCU_DEGISKENI} şeklinde kullanılıyorlar. tam listesini yazının sonuna ekliyorum.
RewriteCond’da kullanabileceğimiz iki bayrak var. bunlar NC ve OR. NC büyük-küçük harf duyarsız işlem yapılmasını söylüyor. OR ise daha önce söylediğim gibi iki rewritecond’u öntanımlı olan and yerine or ile bağlamasını söylüyor.
bunların dışında RewriteCond parametreleri var. Wordpress örneğinde gördüğümüz -f ve -d dışında -s ve -l var. -s’nin işlevi -f gibi, fakat yaratılmış bir dosyanın var olup olmadığından fazla olarak bu dosyanın boyutunun 0′dan büyük olup olmadığına da bakıyor. -l ise böyle bir symlink olup olmadığına bakıyor. bu dört parametre de ünlem işareti ile birlikte anlamlarının tersine kullanılabilir. (!-f)
RewriteRule
Örnekle başlayalım:
1
| RewriteRule ^(.*)$ yok.php?adres=$1 [L] |
Bu kural gelen bütün istekleri yok.php’de $_GET[’adres’] değişkeninin içine atar. yani /index.php’ye girmek istedi diyelim ki kullanıcı, sunucu ona aslında yok.php?adres=index.php’yi gösterir. Ama bu bir yönlendirme şeklinde olmaz, adres aynı kalır.
RewriteRule bayrakları
[bayrak] şeklinde kullanılıyorlar.
R=301: Belirttiğiniz adrese 301 yönlendirmesi yapar.
F: Forbidden belirttiğiniz adres 403 döndürür. Kullanıcılara sayfayı görmesi için izin verilmez. RewriteCond ile birlikte kullanılıp toplu adres engellemesi yapılabilir.
L: Bu rewriterule’ın son yönlendirme olduğunu söyler. Eğer bu bayrak olmazsa mod_rewrite maxredirects değişkeniniz doğrultusunda sürekli yönlendirme yapacaktır.
NC: büyük küçük ayrımı yapmadan rewrite yapar.
QSA: GET ile gelen isteği de adrese ekler.
Server Değişkenleri
Devamı »
Etiketler: apache,
htaccess,
mod rewrite
August 20, 2007 at 1:45 pm ·
Wireshark Nedir?
Wireshark, ya da daha çok bilinen önceki ismiyle Ethereal, GPL lisansıyla dağıtılan bir paket dinleyicisidir. Linux, Mac Os X, Windows ve diğer Unix, BSD tabanlı sistemlerde çalışabilir. Promiscuous mode (Yaramaz mod*) özelliği sayesinde ağ kartına gelen paketleri ait olduğu adres yerine önce işlemciye aktarıp başkalarının trafiğini dinlememizi sağlar. Kendi sitesinden programı indirip kurabilirsiniz.
Wireshark Ayarları
Wireshark ilk açıldığında korkutucu bir arayüz bizi bekliyor, kabul etmek lazım. Edit>Preferences altından ulaşabileceğiniz ayarlarda arayüz görünümü, paket yakalama, isim çözümleme, yazdırma ve çeşitli protokollerin kendine özgü ayarlarını değiştirebilirsiniz. Burada önemli olan ayarlar capture (paket yakalama) sekmesi altında capture packets in promiscuous mode ve update list of packets in real time kutularının işaretlenmiş olması.
İlk Paketimizi Yakalamak
Preferences penceresini kapattıktan sonra ana programa geri dönüp ilk paketimizi yakalayalım. Capture menusu altındaki interfaces’den ethernet kartımızın yanındaki start’a basalım. Eğer açıkta çalışan msn gibi, internet tarayıcısı gibi interneti kullanan programlar varsa onların aktivitelerini görmeye başlayabilirsiniz.
Şimdi ilk paketimizi incelemek için basit bir örnekle başlayalım. Terminali veya komut satırını açıp ping google.com komutunu verin.

(Resmi büyütmek için üzerine tıklayın.)
ping google.com komutunu çalıştırdıktan sonra ilk önce dns çözümlemesi yapılır.
- İlk satırda DNS protokolunde kendi makinamızın routera google.com’a denk gelen ip’yi sorduğunu görebiliriz.
- İkinci satırda ise router bize google.com’a ait olan 64.233.167.99 ve 64.233.187.99 ip’lerini cevap olarak veriyor.
- Üçüncü satırda kendi makinamız (10.0.0.4) 64.233.167.99′a icmp paketleri halinde ping isteği gönderiyor.
- Dördüncü satırda ping cevabı gelmediği için tekrar bir ping isteği gönderiliyor.
- Beşinci satırda 64.233.167.99 bizim makinamıza gene icmp paketleri halinde ping cevabı gönderiyor.
- Bundan sonra işlem tekrarlanıyor.
Bu durumda 4 ping isteğine 2 cevapla ping isteğimiz sona eriyor.
Artık paket toplamayı durdurabilirsiniz. Capture menusu altındaki stop işimizi görecektir.
Bugün için bu kadar, şu ana kadar fazla bir şey anlatmasam da programı kurcalamaya başlamanız için bu kadar bilgi yetecektir.
Etiketler: ethereal,
msn konuşmalarını dinlemek,
packet sniffing,
wireshark,
yerel ağ
August 17, 2007 at 10:52 am ·
En basit sıralama algoritması hangisidir? Okullarda genel olarak bubble-sort gösteriyorlar, fakat ben insertion sort’u tercih ediyordum. Bugün ise gnome-sort diye bir algoritmayla karşılaştım. Neredeyse insertion-sort kadar hızlı çalışıyor, ve anlaması hem bubble-sort’tan hem de insertion-sort’tan daha kolay.
Verdiğim linkte c ile örnek bir kod yazılmış, ruby ile yazmak gerekirse de şöyle bir şeyler oluyor:
1
2
3
4
5
6
7
8
9
10
| def gnomesort!(a)
i=1
while i
i+=1 if a[i-1]<=a[i]
else
a[i], a[i-1] = a[i-1], a[i]
i-=1 if i>1
end
end
end |
ruby’deki a,b=b,a yöntemi ne kadar müthiş değil mi? increment ve decrement operatörlerinin eksikliği ise hemen göze çarpıyor.
Etiketler: bubble sort,
gnome sort,
insertion sort,
ruby,
simplest sorting algorithm,
sıralama algoritması
August 11, 2007 at 5:44 pm ·
Bu yazıyı okulumun cinnet geçirttiren bir akşamının ardından yazıyorum.
Pek çok yerde olduğu gibi bizim okulda da p2p programlarının kullanımı engellenmiş durumda. 2 yıldır ağda çalışan bir dc sunucusu kurulacağı söyleniyor, fakat ağ yöneticileri okul yurtlarını tek bir ağda toplamaktan bile aciz durumda.
Burada anlatacağım yöntem sadece p2p programları için değil, bütün engellenmiş sayfalar, programlar, vs. için kullanabilirsiniz.
1. Adım: SSH Hesabı
Bu yöntem için öncelikli olarak bir ssh hesabına ihtiyacınız var. buradaki adreste ücretsiz olarak ssh hesabı veren siteleri bulabilirsiniz. bunların arasında rootshell.be güzel. internette alanınız varsa anlaştığınız firma size ssh hesabı sağlıyor olabilir, onu kullanabilirsiniz. eğer gene de bulamıyorsanız, benimle iletişime geçerseniz size hesap sağlayabilirim.
2. Adım: SSH istemcisi
Linux, Os X ve unix türevleri kullananların ayrı bir program yüklemesine gerek yok, windows kullanıcıları ise putty - plink programını indirebilir.
3. Adım: Port Yönlendirme
Linux, Os X ve unix türevlerinde şu iki komuttan biri işimizi görecektir:
$ ssh -D 1080 sunucuadresi.com:443
veya
$ ssh -D 1080 sunucuadresi.com -P 443
özetle, bu komut bir çeşit socks proxy vazifesi görüp kendi makinamızın 1080. portuna gelen istekleri sunucuadresi.com makinasının 443. portuna iletir. 443. port http portunun ssl ile şifrelenmişidir. internet bankaları gibi sunucu ile iletişimin şifreli olarak yapıldığı https protokolu bağlantılarını bu port üzerinden gerçekleştirir.
Windows üzerinde ise cmd ile indirdiğimiz programın klasörüne gidip şu iki komuttan birini vermemiz yeterli:
plink.exe -D 1080 sunucuadresi.com:443
veya
plink.exe -D 1080 sunucuadresi.com -P 443
kullanıcı adı ve şifremizi de girdikten sonra artık 1080. portumuz socks proxy’si olarak çalışmak üzere ayarlanmış durumda.
4. Adım: P2P programının ayarlanması
p2p programının varsa protokol şifrelemesinin açık olduğuna emin olduktan sonra proxy ayarlarına girip socks5 proxy adresini 127.0.0.1, port’u da 1080 olarak girdikten sonra programı kapatıp açıp istediğimiz her şeyi indirebiliriz. eğer programda port değil de sadece adres girmek için yer varsa adresi 127.0.0.1:1080 şeklinde girebiliriz. Aynı ayar internet tarayıcımız için de geçerli.
5. Adım
Buraya kadar artık her şeyin çalışıyor olması lazım. Yanlız, örneğin bizim okulda herhangi bir websitesi üzerinde bulunan .torrent uzantılı dosyaları indiremiyoruz. bunun için tarayıcımızın proxy ayarlarını 127.0.0.1:1080 olarak değiştirebileceğimiz gibi daha basit yöntemler de var. .torrent dosyasının adresini cgi-proxy olarak geçen sitelere yapıştırırsak sitede login olduktan sonra dosyamız inmeye başlayacaktır.
Cgi-proxy site adresleri için buraya bakabilirsiniz.
Yöntemi Engellemek
eğer servis sağlayıcınız açısından sorun çıkabileceğini düşünüyorsanız, asla bu yöntemi uygulamayın. şifrelenmiş paketleri inceleyebilen yazılımlar yok değil, ama sisteme bindirdiği ek yük gibi sorunlar yüzünden fazla tercih edilmiyorlar. SSH erişimini sağlayan adresin bloklanması söz konusu olabilir, bu durumda da başka bir siteden ssh hesabı alabilirsiniz.
Etiketler: cgi-proxy,
emule,
engellenmiş siteler,
limewire,
p2p,
port forward,
putty,
ssh,
ssl,
torrent,
tunneling
July 12, 2007 at 4:22 am ·
geçen gün ruby dökümanlarını karıştırmıştım. kendimi biraz yeterli hissetmeye başladım. bugun lab’da kubilay metine ruby’i anlatırken ceasar şifresini tek satır kod ile yazdım dedi, ben de özendim uğraştım eve gelince. ufak bi hile ile de olsa tek satırda şöyle bir şey oluyor:
gets.chop!.each_byte{|i| i=(i+29).modulo(29)+97; print i.chr}
gets kullanıcıya metin girişi yaptırtıyor.
chop string’in sonundaki satırsonu siliyor.
each_byte stringler için bir yineleyici. burda her seferinde her karakteri i’ye atıyor.
modulo mod alma methodu.
i.chr ise i tamsayısının karşılık geldiği karakteri temsil ediyor.
bu satırın içinde metnin kaç harf kaydıralacağını almayı beceremedim, 29′a eşitledim şimdilik, ama uğraşmaya devam ediyorum. 
Etiketler: ceasar cipher,
ruby