RGBA?
I like that rgba shit. Can make transparent some parts of an application. So i write a funky script to make easier patching apps for rgba.
Warning, that’s very risky to use that. But you can have applications like that [link] after the patches..
Here you can download the script, read the instructions carefully!
[Download]
Note: it needs murrine-svn (you can find here) and a theme which supports rgba.
Note2: And, umm..
rgba and this patches can cause X crashes if you don’t use a composite manager (compiz like..)
Note3: you can check [here] for more patches..
Hash sistemleri hakkında!
Büyük büyük dosyalar yapıyoruz, indiriyoruz.. Sağlam mı acaba indirdiğimiz kopyaladığımız bu dosya diye düşündüğümüzde aklımıza hemen tek bir değer geliyomd5sum! Dosyanın md5sum kontrol numarasını alıyoruz, karşıdaki ile karşılaştırıyoruz, aynıysa dosya sağlam diyoruz.. (Pek bilinmiyor da sha1sumkullananlar da var..)
Neyse, aklıma takılan nokta bu hash sistemlerinin yöntemi..
Biraz kafa yordum da, “Dosyanın rastgele yerlerinden bir değer seçip ona bir değer atayabilir mi?” dedim,olmaz.. Çünkü bir rastgele sayacı kolay kolay aynı numarayı döndermez ki dosyada yeri (doğal olarak kontrol numarası) tutsun..
Belli yerlerinden değer alması tek mantıklı yol, tabi bunun da güvenliğinin sağlanması için dosya boyutunun (byte cinsinden) değişken rol oynatması olabilir, (ancak aynı byte boyutundaki 2 büyük dosyadan bir harfin yeri değişik olsun hash değeri farklı çıkıyor, bu konuya girersek iyice az sonraki teorimi desteklemiş oluruz)..
Diyeceğim şudur ki:
Diyelim ki elimizde 10.999.200 Byte değerinde bir dosya var ve karşı tarafa yolladık. Karşı tarafta hash değeri alınırken byte değerine ve dosyanın belirli yerlerinden alınan örnekler kullanıldı ve her ne kerametse dosya sağlam gönderildiği için bu değerler tuttu..
Hash sistemlerine güvenmemek gerek, ki fazla belge okumadım büyük ihtimalle üreticileri de bunu yazmışlardır, %100 doğru çalışan bir sistem değil, olmaması gerek..
Neden mi? Tersi durumda, yani hash sistemi %100 güvenli, en ufak bir değişiklikte kontrol numarası da değişecek olsa..
10.999.200 byte değerindeki bütün diğer dosyalarda farklı bir hash kontrol numarası değerini vermesi gerekecekti. Bu da o bayt değeri için o hash kontrol numarasını özel yapardı.
O zaman bütün 10.999.200 byte’lık dosyayı yollamamıza gerek kalmazdı
Sadece hash kontrol numarası ve “10.999.200″ sayısını gönderirdik, karşı tarafta (teorik bir) reverse-md5 betiği bu değerlerin özel olduğu asıl göndermek istediğimiz dosyayı kendisi üretirdi..
Düşünsene bütün harddiski kopyalayacağına sadece 2 kb veri yolla, karşı taraf üretir..
Hash sistemlerinde hata payı azaldıkça benim dediğim teoriye yaklaşır, çoğaldıkça da güvenilirlik riske girer.. “Çok çok az” hata payı var derseniz, o zaman teorikreverse-md5 betiğimiz o bayt değerinde, aynı md5sum’a sahip 4-5 dosya üretir (olasılıkları). Sonra da sha1sum ya da başka bi ölçüt kullanarak doğruyu eleyip diğerlerini silebiliriz. Yine indirme sıfır, dosya elimde..
Umarım sıkılmadan ve demek istediğimi anlayarak okuyabildiniz. Eğer varsa bilen bi eleman, bunların çalışma-kontrol sisteminin nasıl işlediğini ve güvenlik durumunu anlatırsa çok iyi olur. Gördüğünüz gibi çıldıracam.. ![]()
Sosyal olalım!
Bir geek blogunda tuhaf kaçsa da bugün bilgisayarla uğraşmayın! Çıkın dışarı dolaşın. Bırakın bu sanal işleri. Sosyal olun biraz, rahat kıyafetler giyip dışarı çıkın.
Komşunuzun aksi suratını önemsemeyin. Sadece size uzaylı gibi bakanlardan biri.. Hatta yüzünüze karşı “iyi ki böyle evladım yok” demiş bile olabilir. Boşverin, vurun kendinizi yola. Hemen sokağın başındaki taşmış çöp bidonuna aldırış etmeyin. Kokusundan kurtulmak için karşıya geçmeyi deneyin. Yeşil yanmasını bekleyin, yansa da ne olur ne olmaz yurdumun şöförleri. Siz dikkat edin! Otobüs durağına giderken sırf sizin tipinize gıcık olduğundan size omuz atan uyuzu adamdan saymayın. Bugün sosyalsiniz, bilgisayarsız.
Otobüs kuyruğu görünce şaşırmayın. ite kalka binin otobüse. “Arkaya doğru ilerleyelim” dediklerinde ilerleyin. Koyun gibi hissetmeyin sakın. Ter kokusundan kaçın, hava alan bir yerine gidin otobüsün. Tabi öndeki araba yol vermeyince salyalar saçarak küfreden şöföre de acıyın sadece.
Bu arada herkesin baktığı yöne boşuna bakıp da canınızı sıkmayın.. Onlar sadece etrafa dağılmış insan parçacıkları. Her gün olan şey, kazalar..
Zaten bunlarla uğraşırken ineceğiniz yer geldi, ite kalka inin otobüsten. indiği gibi tüküren kütleyi insandan saymayın. Sahile ilerleyin.. Bir banka oturun, ama sakın yan banktaki tinerciyi rahatsız etmeyin. Canınızdan olmak istemezseniz. Kalkın, gezin.. Aman dikkat basmayın çimlere! O çimlerde uzanıp piknik yapan aileleri de görmezden gelin. “Ne bakıyon lan” tarzında bir hoşgeldine gerek yok boş yere..
Koyun olun yani o kalabalıkta..
Ya da boşverin bunları, açın bilgisayarı. Yan tarafta kahve-kola ne severseniz. Pijamalarınızla kendi kurduğunuz sanal dünyada yaşayın. Elbette “sosyal” ortamdan gelip sizin temiz sanal dünyanızı b*k etmek isteyenler olacaktır. Engelleyin, banlayın.. Dışardan iyidir.. Linuxunu aç, kurcala ne istersen! Bırak “asosyal” desinler sana, koyun olmaktan iyidir!
“Tolga Salgar’ın taa ne zamanki gameworld’deki yazısından düzenlenmiştir.”
Zsh!
Ne kadar zamandır bir farklılık yapmayı düşünüyordum. Terminalde “bash”dan “bash”ka alternatiflerim de vardı, zsh, ksh gibi.. Gentoo forumlarındaki zsh aşıkları başlığını görünce dayanamadım zsh ve zsh-completion paketlerini kurup zsh komutu vererek bilmediğim bi aleme daldım..
Nedir yani?
Bildiğiniz komut satırı işte, şekli biraz değişik. Yine tab tuşuyla tamamlama var ama biraz daha akıllıca yapmışlar bu elemanlar. Ayrıca eix, equery ve genlop’da bile portage paket ismi tamamlaması yapabiliyor (hayvan!)
Ancak biraz ayarlamam gerekti, .bashrc gibi bir .zshrc bakındım ve buldum da. Forumlardan wikilerden derken .zshrc’yi kıvama getirdim.
Ham halde kullanınca zsh’dan nefret edebilirsiniz. Home, End, Del gibi tuşlar çalışmayabiliyor. Ama bu sanki bash’dan daha bi esnek, parmaklanabilir..
Neyse, şöyle böyle derken deneye yanıla bir .zshrc ürettim kendime. Tabi bu işi abartıp konsolu şöyle gösteren arkadaşlar da yok değil nette:
(Boru değil o başta yazan yüzde de bataryanın doluluk oranı)
Ben sade severim diyip daldım rc dosyasına. İşte açıklamalarıyla benim örnek rc:
Bu kısımda standart gentoo otomatik tamamlamalar vs belirlenmiş, bi de arkasına case falan bi fonksiyon atmışım ama nedir hatırlayamıyorum, kesin işe yarıyordur
Sanırım Terminal adı ayarlama meselesi..
autoload -U compinit promptinit
compinit
promptinit; prompt gentoo
zstyle ':completion::complete:*' use-cache 1
export PS1='(%n @ %m) %#'
exec 2>>(while read line; do
print '\e[91m'${(q)line}'\e[0m' > /dev/tty; done &)
chpwd() {
[[ -t 1 ]] || return
case $TERM in
sun-cmd) print -Pn "\e]l%~\e\\"
;;
*xterm*|rxvt|(dt|k|E)term) print -Pn "\e]2;%~\a"
;;
esac
}
Bu bölümde de eğer root’san başta yazan isim kırmızı, değilsen yeşil olsun ayarlanması..
if [ `/usr/bin/whoami` = 'root' ]
then
export PS1="%{${fg_bold[red]}%n%}@%{${fg_bold[blue]}%}%m: %~ %{${fg[white]}%}%# "
else
export PS1="%{${fg_bold[green]}%n%}@%{${fg_bold[blue]}%}%m: %~ %{${fg[white]}%}%# "
fi
Burda bi history dosyası ayarlıyoruz ki yukarı basınca eski komutlar gelsin. Bunu bile biz yapıyoz diye sevdim.. Evet manyağım..
export HISTFILE=~/.zsh_history
export HISTSIZE=50000
export SAVEHIST=50000
# eval `dircolors -c`
Setopt zımbırtısı seçenek belirleme.. baya işe yarıyor, kurcalayın..
setopt autopushd pushdminus pushdsilent pushdtohome
setopt autocd
setopt cdablevars
setopt ignoreeof
setopt interactivecomments
setopt nobanghist
setopt noclobber
setopt HIST_REDUCE_BLANKS
setopt HIST_IGNORE_SPACE
setopt SH_WORD_SPLIT
setopt nohup
setopt nonomatch
Bu kısımda home end falan ayarlamaları yaptım. Sizin makinanızda tuş girdileri farklı olabilir..
bindkey "\e[2~" transpose-words
bindkey "\e[3~" delete-char
bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line
bindkey '\e[2~' overwrite-mode
case $TERM in (xterm*)
bindkey '\eOH' beginning-of-line
bindkey '\eOF' end-of-line
esac
Man sayfaları için otomatik tamamlama, belki lazım olur..
Kodun şu haline bak, yazan manyak olmalı..
compctl -f -x 'S[1][2][3][4][5][6][7][8][9]' -k '(1 2 3 4 5 6 7 8 9)' \
- 'R[[1-9nlo]|[1-9](|[a-z]),^*]' -K 'match-man' \
- 's[-M],c[-1,-M]' -g '*(-/)' \
- 's[-P],c[-1,-P]' -c \
- 's[-S],s[-1,-S]' -k '( )' \
- 's[-]' -k '(a d f h k t M P)' \
- 'p[1,-1]' -c + -K 'match-man' \
-- man
Normal aliaslar, kafanıza göre takılın..
alias ls='ls --color=auto -F'
alias lsd='ls -ld *(-/DN)'
alias lsa='ls -ld .*'
alias f='find |grep'
alias c="clear"
alias dir='ls -1'
alias gvim='gvim -geom 82x35'
alias ..='cd ..'
alias mem="free -m"
Bu kod, bir klasörün sadece adını yazarak o klasöre cd ile girmenizi sağlıyo.. Walla ben uyuşuk adamım..
compctl -/ cd
Bunlar da tamamlama ile ilgili daha garip şeyler..
PID tamamlama falan iyice geek stuff’a kaçtık, elemanın birinden buldum, bakının..:)
# allow approximate
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 1 numeric
# tab completion for PID
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always
# cd not select parent dir.
zstyle ':completion:*:cd:*' ignore-parents parent pwd
Belirli dosyaların adını girerek direkt olarak ilişkilendirdiğiniz programla açın..
compctl -g '*.(jpg|jpeg|bmp|tiff|pcx|pbm|pgm|ppm|xpm|png)' eog
compctl -g '*.(gif)' gthumb
compctl -g '*.(avi|mpg|mpeg|flv)' mplayer
Bunu yazan adamın zihnini özellikle merak ediyorum;
eğer son işlem başarılı sonuçlandıysa yeşil bir gülen surat (
), başarısız sonuçlandıysa kırmızı bi üzgün surat (
) yazdırıyor..
Not: Bunu kullanırsanız o yukardaki yeşil-kırmızılı root kullanıcısı betiğini kullanamazsınız..
PROMPT=$'%{\e[0;32m%}%B[%b%{\e[0m%}%n%{\e[0;32m%}@%{\e[0m%}%(4c,./%1~,%~)%{\e[0;32m%}%B]%b% %(?,%{\e[0;32m%}:%)%{\e[0m%},%{\e[0;31m%}:(%{\e[0m%}) %# '
Eveet. Sevdiyseniz başlayabilirsiniz zsh’a. Ha bu arada unutmadan, zsh’ı öntanımlı kabuk yapmak isterseniz komut:usermod -s /bin/zsh kullanıcı_adi
Tabi bunu root olarak verin. Root kullanıcısı değilseniz bir alternatif yöntem de .bashrc dosyanıza :exec zsh
satırı eklemek, başlar başlamaz zsh’a geçiyor, aynı şey yani. Ama bu yöntem root kullanıcısında güvenlik amacıyla engellenmiş sanırım..
Bu kadar, Kolay gelsin
Not: O resmini gördüğünüz terminal gibi şekil yapmak isterseniz burdan buyrun :[link]
Chroot sisteme giriş (X ile)
Klasör altına derlediğiniz/kurduğunuz sistemin grafiksel ortamdaki ayarlamalarını yapmak ya da normal sisteminiz gibi kullanmak gibi amaçlarla giriş yapmanız gerekiyorsa, buyrun..
Biraz kurcalayarak becerdim ama modüllere ve kernel farklılığına hassasiyeti olabilecek bi yöntem.
Anlattığım yöntem gentoo altında uygulanmış/denenmiş hali, gentoo da olsa diğer dağıtımları kullananların daha kolay kavraması için (sistemimde ve chroota) PATH altına kendim yerleştirdiğim “service” betiğini kulanıyorum. Betiğin işlevi çok basit, “service servis_adı start/stop/restart/vs..”
İlgilenen gentoo kullanıcıları için işte betik:
#!/bin/bash
service=$1 ; shift
/etc/init.d/$service “$@”
Neyse, anlatıma geçelim. Önce ctrl-alt-f1 ile konsoldan root girişi yapıp kullandığımız X ortamını kapatıyoruz:
service xdm stop (ya da killall gdm/kdm)
Kullanıyorsak birincil ekran kartı sürücü modülünü kaldırıyoruz:
rmmod nvidia (ati ise fglrx vs..)
Çalışan xorg.conf’u chroot’a kopyalıyoruz, eskisinin yedeğini alarak..
mv chroot_dizini/etc/X11/xorg.conf chroot_dizini/etc/X11/xorg.conf.yedek
cp /etc/X11/xorg.conf chroot_dizini/etc/X11/xorg.conf
Şimdi rc-status komutu ile çalışan servisleri görüp, local hariç hepsini kapatıyoruz:
service servis_adı stop
Şimdi dizine chroot girişi yapıyoruz:
cd chroot_dizini
mount -o bind /etc etc/
mount -o bind /dev dev/
mount -o bind /proc proc/
mount -o bind /dev/pts dev/pts (bu içerde terminaller çalışsın diye)
chroot . /bin/bash –login
İşimize yarayan servisleri chroot içinde açıyoruz, açmak için “restart” kullanmamız gerek, sistem hafiften aptallaşıyor çünkü artık
service servis_adı restart
Birincil sürücü modülümüzü chroot modüllerinden yüklüyoruz. Eğer kernel sürümü/adı farklıysa bu adım hata verebilir, chroot’taki xorg.conf’u düzenleyerek vesa sürücüsü kullanmanız gerekebilir.
modprobe nvidia (fglrx bla bla..)
Artık gdm, kdm gibi komutlarla X sunucuyu açabiliriz. Servislere bu kadar önem vermeden, sadece ekran ayarlamasıyla da halledebilirdik, ancak bu şekilde neredeyse herşeyin (işlemci seviye ve parlaklık appletleri/ayarlayıcıları gibi) çalışmasını sağladık.
Çıkışta ise bu işlemleri adım adım geri uygulayabilir, ya da kısaca “init 6” komutu vererek sistemi yeniden başlatabilirsiniz..
GRUB with Reiser4 howto
Reiser4, a.k.a wife killer fs [link] + GRUB
Here it is, i won’t warn you about nothing, if you don’t know what the hell are you doing, don’t!
Create >20mB ext2 partition and mount as /boot
I’ll say /boot as sda1 and root directory (/) is sda3
mkdir gdeneme
sudo mount /dev/sda1 gdeneme
sudo cp -aR /boot/* gdeneme/
sudo umount gdeneme
rmdir gdeneme
# Now boot sda1 as /boot reallysudo mount /dev/sda1 /boot
Real shit:
What you need:
grub-0.97 [link]
libaal-1.0.5 [link]
reiser4progs-1.0.5 [link]
grub-0.97-libaal-1.0.5-reiser4progs-1.0.5.patch [link]
Create a seperated /grub directory and untar all of this into grub dir.
Note: if your box is x86_64, don’t forget export that m32 shit:
export CC="gcc -m32"
# exporting temporary LDFLAGSexport LDFLAGS=-L/grub/r4/lib CPPFLAGS=-I/grub/r4/include
We’ll create a directory (like r4) and install into this. First, aal libraries:cd /grub/libaal-1.0.5
./configure --prefix=/grub/r4
make
make install
Now our old reiser4progs:cd /grub/reiser4progs-1.0.5
./configure --prefix=/grub/r4
make
make install
into grub dir:cd /grub/grub-0.97
patch:patch -p1 < ../grub-0.97-libaal-1.0.5-reiser4progs-1.0.5.patch
and compile (look, this time prefix=usr)./configure --prefix=/usr
make
Control:ls /grub/grub-0.97/stage2/*1_5
if you see this files: e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 reiser4_stage1_5 reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
you can OVERWRITE:make-install
Last one, re-write grub:grub-install /dev/sda
And edit /boot/grub/menu.lst if neccesary.
Reference: [link]
Yeni mime türü (mime-type) oluşturma
Taze program yazan kişilerin başına dert olabilecek bir olay: Programınızın ürettiği dosyaların kde/gnome/xfce/blabla altında hiçbir ayar yapmadan, tıklayınca programınızla beraber çalışmasını istersiniz. Bilinen dosya türlerinden biri ile çalışmıyorsanız işiniz zor. Bilemiyorum bu işlemi herhangi bir geliştirme ortamı yardımıyla yapılan programlar otomatik olarak hallediyor mu ama, çift tıklayınca “ilişkilendirilmiş uygulama yok” hatasına kesin çözüm yollarından birisi olarak yepyeni, cillop gibi bir mimetype üretmeyi anlatacağım.
Programınızın ürettiği bir dosyanın mime türünü “file dosya_adi” komutu ile görebilirsiniz. Anlatacağım yöntem, olabilecek en kötü ihtimallerden olan, yalnızca “data” çıktısına sahip dosyalar için işe yaradı.
Programınızı çalıştırmak için gerekli komutun “programim” olduğunu varsayıyorum. Ürettiğiniz/açmak istediğiniz dosyanın uzantısı da “weq” olsun (nasıl salladım ama).
Bu arada programın komut satırından dosya açabildiğini bilmemiz gerek, “programim /home/blabla/dosya_adi” komutu ile açabiliyor olması gerek.
Yeni mime türü oluşturmaya başlayalım, öncelikle/usr/share/mime/packages/programim.xml diye bir dosya oluşturuyoruz. İçeriği şu şekilde ayarlıyoruz:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/programim">
<comment>Programim</comment>
<glob pattern="*.weq"/>
</mime-type>
</mime-info>
sonra /usr/share/mime-info/programim.mime :
application/programim ext: weq
/usr/share/mime-info/programim.keys :
application/programim: description=Benim Programim Walla default_action_type=application short_list_application_ids_for_novice_user_level=programim category=Documents/Data
/usr/share/applications/programim.desktop :
[Desktop Entry] Encoding=UTF-8 Name=Programım Comment=Bu benim öyle gıcıklık olsun diye yazdığım bi program Exec=programim %f Icon=/usr/share/benim_simgem.png Terminal=false Type=Application Categories=GNOME;GTK;Game; #(artık neyse kategoriniz yazarsınız) StartupNotify=true MimeType=application/programim;
Son olarak, /usr/share/application-registry/programim.applications :
programim command=programim name=Programim can_open_multiple_files=false expects_uris=false requires_terminal=false mime_types=application/programim
Bitirdikten sonra da root olarak “update-desktop-database” komutu verirseniz, artık “.weq” uzantılı dosyalara çift tıkladığınızda “programim” ile açılacaktır. Bunu da artık atarsınız kurulum prosedürünün bi kenarına, onu da mı anlatayım..