*24 Haziran 2010 Perşembe

Blogger Özel Etki Alan Adı Erişememe Sorunu

      Youtube ip adreslerinin erişime engellenmesi  ve bu ip adreslerinin Google'ın başka servislerinde  de kullanılıyor olması nedeniyle, blogger'ı kendi alan adı ile kullanan bloglara yaklaşık 2 haftadır erişilemiyordu. Bu arada ne kadar acı bir durumdur ki  ben kendi bloguma erişilemediğini olaydan bir hafta sonra farkettim. Bunun nedeni de google dnslerini kullanıyor olmammış. Google dns'leri dışındaki dns leri kullanan kişiler bu sorunla daha erken karşılaştı sanırım.

Her neyse sorunun çözümünü baya bir araştırdıktan sonra şu blogda çözüme ulaştım.

//Anlatım Godaddy içindir.
Yapmanız gereken Godaddy panelinizde "Total DNS Control" kısmından önceden eklediğiniz "www" yi işaret eden "ghs.google.com" adresli "CNAME" kaydını silip onun yerine "www"  ve "@" işaretli 2 tane "A" kaydı eklemektir.

Yeni ayarlarınız aşağıdaki şekilde olmalıdır.

(Not "cs" i işaret eden adres counter-strike serverımızın adresidir. Siz onu görmezden gelebilirsiniz.)

*22 Haziran 2010 Salı

Conky ile rhythmbox bilgilerini göstermek

Conky nedir diyecek olursanız Ubuntu-tr Wiki'den bir alıntı yapayım.

Conky adlı program ile masaüstünüzde text tabanlı olarak sisteminiz hakkında her türlü bilgiye , hatta daha gelişmiş özelliklere (hava durumu, şimdi çalınıyor gibi özellikler) sahip olabilirsiniz..

Bu script sayesinde masaüstünüzde faydalı olabilecek pek çok özelliği ekleyebilirsiniz. özelleştirilebilir olması sayesinde tamamen istediğiniz şekle sokabilirsiniz... 

Bu ufak bilginin ardından size Conky ile nasıl Rhythmbox'da şarkı bilgilerini alacağımızı göstereyim. Sol üst kısımda gördüğünüz resim aşağıdaki kodların ekran görüntüsüdür.


${color #DF5720}${font size=1}${alignc}Music${font}

${color 9ACD32}Artist:
${color a4a4a4}${execi 1 rhythmbox-client --no-start --print-playing-format %ta}
${color 9ACD32}Title:
${color a4a4a4}${execi 1 rhythmbox-client --no-start --print-playing-format %tt}
${color 9ACD32}Album:
${color a4a4a4}${execi 1 rhythmbox-client --no-start --print-playing-format %at}

${color a4a4a4}${execi 0.8 rhythmbox-client --no-start --print-playing-format %te}${alignr}${execi 1 rhythmbox-client --no-start --print-playing-format %td}
Bu kodları .conkyrc dosyamızda gereken bölüme yapıştırıyoruz. Eğer conkyrc dosyasını nasıl düzenleyeceğinizi bilmiyorsanız gerek ubuntu-tr forumlarında gerekse ubuntunun resmi forumlarında kullanıcıların örnek conkyrc dosyalarını paylaştıkları konular var. Ek olarak yararlanabileceğiniz kaynaklar. *http://wiki.ubuntu-tr.org/index.php/Conky_Nedir%3F_Nas%C4%B1l_Kullan%C4%B1l%C4%B1r%3F *http://conky.sourceforge.net/documentation.html *http://ubuntuforums.org/showthread.php?t=281865 *Örnek Conky screenshot'ları

*20 Haziran 2010 Pazar

Compiz Fusion Screenshot Plugin - Imageshack Uploader Bash Script

Eğer Linux'nuzda Compiz Fusion yüklü ise gerçekten işletim sisteminizin yapabildiklerine git gide hayranlık duyuyorsunuz. Compiz'in gerçekten çok hoş özellikleri var. Bunlardan birisi de "Screenshot" aracı.

"Compiz Config Settings Manager" da screenshot yazdıktan sonra screenshot'ın yanındaki kutucuğa "tick" koyarak etkinleştirebilirsiniz.



Etkinleştirdikten sonra screenshot'ın üzerine tıklayarak ayarlar kısmına gelelim.



Bu kısımda ilk kutuya resimlerin kaydedileceği dizini giriyoruz.

"/home/h4ckinger/resimler/screenshots"
gibi
İkinci kısım ise ekran görüntüsü kaydedildikten sonra dosya yolunun argüman olarak verileceği uygulama için kullanılıyor.

Şimdi gelelim fasulyanın nimetlerine. Ben bu güzel Compiz aracı için ufak bir bash script yazdım. Script ekran görüntüsü alındıktan sonra dosyayı "imageshack.us" sitesine upload edip bize direk link şeklinde veriyor. Ayrıca linki otomatik olarak clipboarda alıyor ve bize resmi browserda açmasını isteyip istemediğimizi soruyor.

Hehe. Çok kullanışlı oldu benim için. Sizlerle de paylaşmak istedim.

Düzenleme:Bu arada betiği nautilus scriptlerine ekleyebilirsiniz. Böylece bilgisayarınızda varolan bir resme sağ tıklayarak upload edebilirsiniz.
mv h4-upload /home/kullaniciadi/.gnome2/nautilus-scripts
chmod +x /home/kullaniciadi/.gnome2/nautilus-scripts/h4-upload
#!/bin/bash 
# imageshack uploader bash script
# Kodlayan h4ckinger
# wwww.h4ckinger.org
# h4ckinger gmail com
# Otomatik Clipboarda alır ve isterseniz upload edilen resmi browserda açar
# Compiz Fusion Screenshot aracı ile kullanarak en iyi verimi alırsınız.
# Betiğin çalışması için curl,xclip ve zenity paketlerinin yüklü olmaları gereklidir.
# Yüklü değil ise betik otomatik olarak yüklemeyi dener.
# ./h4-upload.sh /home/h4ckinger/resim.jpg şeklinde kullanılır
#################################### 

#zenity varmı bak
VARMI=`which zenity`
if [ "$VARMI" = ""  ] ; then
    echo "uygulamanın çalışabilmesi için zenity programının yüklü olması gerekmektedir"
    sudo apt-get install zenity
fi
###

#xsel varmı bak
VARMI=`which curl`
if [ "$VARMI" = ""  ] ; then
    echo "uygulamanın çalışabilmesi için curl programının yüklü olması gerekmektedir"
    sudo apt-get install curl
fi
###

#xsel varmı bak
VARMI=`which xclip`
if [ "$VARMI" = ""  ] ; then
    echo "uygulamanın çalışabilmesi için xclip programının yüklü olması gerekmektedir"
    sudo apt-get install xclip
fi
###


linkver () {
SORU=$(zenity --width 450 --height 100 --entry --entry-text="$1" \
 --title="Resim linki"\
 --text="Browserda açmak için tamam'a basın")

if [ "$?" -eq 0 ] ; then
 `gconftool -g /desktop/gnome/applications/browser/exec` "$1"
fi
}

upload () {

out=upl.tmp.`date +%s`
echo "Upload ediliyor: $1"
curl -H Expect: -F fileupload="@$1" -F xml=yes -# "http://www.imageshack.us/index.php" > /tmp/$out 2>&1

if [ `cat /tmp/$out | grep image_link | wc -l` -lt 1 ]
 then
  echo "Error: $1"
 else 
  linkimiz=`cat /tmp/$out | tr -d " " | grep image_link | grep -o  http[^\<]*`
  echo "$linkimiz" | xclip -selection clipboard
  linkver "$linkimiz"
fi

rm /tmp/$out

}


if [ -z "$1" ]
then
 echo "Kullanım: `basename $0` [resim.jpg]"
 exit $E_NOARGS
else

upload "$1"

fi

*14 Haziran 2010 Pazartesi

Kaliteli orospu çocukları

Gözleriyle sevişenlere "namussuz" damgası vuran ey güzel memleketimin güzel insanları!

Hepinize selam eder bu genç.

*1 Haziran 2010 Salı

Python - Dosya Bulucu Betik

Ubuntu kullanmaya başlayalı 2 hafta kadar oldu. Bu dönemde MS yazılımlarına elveda ediyorum.
Ubuntu kullanmaya başladığımdan beri çok hoş bir dil olan Python öğrenmeye başladım. Syntax'ı oldukça güzel. Çoğunuzun da bildiği gibi python düzenli bir syntaxa sahip. Düzenli syntaxtan kastım "{}" ve ";" işaretlerinin yerine girinti çıkıntı kullanma zorunluluğudur. Bu da kod okunurluğunu artırıyor. El alışınca da hakikaten yazdığınız kodlardan büyük haz alıyorsunuz(En azından benim için öyle :) ).

      Bence bir dil üzerinde kendinizi geliştirmenin en kolay yolu gerçekten işe yarayabilecek uygulamalar yazmaktır. Bu sayede algoritma ve akış diyagramlarını ne şekilde nerelerde kullanacağınızı daha fazla düşünme fırsatınız oluyor. Ben de bu şekilde 2-3 günde bir ufak betikler yazmaya başladım.

Betiğimiz verilen regex(Düzenli ifade)'i, verdiğiniz dizin içerisindeki verdiğiniz uzantıyla eşleşen dosyalarda(alt klasörler dahil) arıyor. Eğer dosya içerisinde verilen regexp bulunmuşsa hangi satırda ve hangi karakterler arasında bulunduğunu söylüyor. Ve istenilirse sonuçlar log dosyasına yazdırıyor. Betiğimizde multithread kullandım. MultiThread kullanımı için çok güzel bir örnek oldu sanıyorum.

Betikten bir görüntü.



#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Coded by h4ckinger
#Blog :h4ckinger.org
#Contact:h4ckinger gmail com
import os,re,sys
from threading import Thread
from optparse import OptionParser

log=None

class calistir(Thread):
 def __init__(self,anaklasor,dosyalistesi,aranacak):
  Thread.__init__(self)
  self.dosyalistesi =dosyalistesi    #file list
  self.anaklasor  =anaklasor   #current scanning dir
  self.aranacak  =aranacak   #regex pattern
  
 def run(self):
  logmsg("\n\n[+] Current dir -> %s" % self.anaklasor)
  for dosyamiz in self.dosyalistesi:
   if not os.access(os.path.join(self.anaklasor,dosyamiz),os.R_OK):
    logmsg("\n[-]%s doesnt have permissions to read %s" % (os.getenv("USERNAME"),dosyamiz))
    continue
   fp=open(os.path.join(self.anaklasor,dosyamiz),"r+")
   satirlar=map(lambda line:line.rstrip(),fp.readlines())
   #[x.rstrip() for x in opener.readlines()]
   say=1
   for tek_satir in satirlar:
    bul=re.search(self.aranacak,tek_satir)
    if bul:
     logmsg("[+] Found in %s line %d [char = %s] - string:%s" % (dosyamiz,say,str(bul.span()),bul.group(0)))
    say+=1
   fp.close()

def about():
 return """#Python Example Projects - Project 3 - Multi Threaded File Content Scanner
#Coded by h4ckinger

    """

def clear():
 sil="clear" if (sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin') else "cls"
 os.system(sil)

def list_dirs(klasor,uzanti):
 dosyalar=[]
 for root, dirs, files in os.walk(klasor):
  for x in files:
   if x.endswith(tuple(uzanti.split(","))):
    dosyalar.append([root,x])
 return dosyalar

def logmsg(msg):
 global log
 print msg
 if log:
  log.write(msg+os.linesep)

def main():
 global log
 
 kullanim="python %prog [options]\n\n./%prog -p /home/"+os.getenv("USERNAME")+" -r [0-9a-f]{32} -e .html,.php -o scan.txt\n\nExample search md5 pattern in html and php files.\nAfter scan save output to scanlog.txt"
 optparser = OptionParser(description=about(),usage=kullanim,version="%prog version 1.0")
 optparser.add_option("-p", "--path",type="string",action="store",dest="path",help="Define root path to scan", metavar="/path/to/scan")
 optparser.add_option("-r", "--regex",type="string",action="store", dest="regex",help="Define regex pattern to search",metavar="Regular Expression")
 optparser.add_option("-e", "--extensions",type="string",action="store", dest="extensions",help="Define extension which will be scanned(would be more than one seperate with \",\")",metavar=".html,.php,.txt")
 optparser.add_option("-o", "--output",type="string",action="store", dest="output",help="Save results log file(OPTIONAL)",metavar="FILE")
 
 (options, args) = optparser.parse_args()
 

 
 if not options.path or not options.regex or not options.extensions:
  clear()
  optparser.print_help()
  sys.exit(0)
 if not os.path.isdir(options.path):
  print "[-]%s is not valid path" % options.path
  sys.exit(0)
 if not os.access(options.path,os.R_OK):
  print "[-]%s doesnt have permission on that directory" % os.getenv("USERNAME")
  sys.exit(0)
 
 if options.output:
  log=open(options.output,"w")
 
 tara=options.path    #path
 ara=options.regex    #regex
 uzantilar=options.extensions#extensions
 logmsg("[+] Listing files in root directory -> %s" % tara)
 sozluk=list_dirs(tara,uzantilar)
 logmsg("[+] Listing finished. Creating threads")
 ilk_klasor=sozluk[0][0]
 fazlami=any([True for x in range(len(sozluk)) if sozluk[x][0]!=sozluk[0][0]])# birden fazla klasor varmi
 threadlist=[]
 tmpdosyalar=[]
 logmsg("[+] Scanning content in files")
 
 for k in sozluk:
  dizin,adi=k
  tmpdosyalar.append(adi)
  if not fazlami and k==sozluk[len(sozluk)-1]:
   tek_baslat=calistir(ilk_klasor,tmpdosyalar,ara)
   tek_baslat.start()
  if ilk_klasor!=dizin:
   tek_thread=calistir(ilk_klasor,tmpdosyalar,ara)
   tek_thread.start()
   threadlist.append(tek_thread)
   tmpdosyalar=[]
   ilk_klasor=dizin
 
 for thr in threadlist:
  thr.join()
  
if __name__ == '__main__':
 main()