GreaseMonkey: Maymunun Gözü Açıldı

0
FZ
Bugüne kadar pek çok Firefox eklentisi ile, "plug-in"i ile karşılaşmıştım ancak hiçbiri beni GreaseMonkey kadar heyecanlandırmamıştı. Hiçbirini bu kadar güçlü bir araç olarak görmemiştim. Hiçbiri benim gibi bir programcıya çok fazla hitap etmemişti. Hiçbirinin bu kadar fark yaratacağını düşünmemiştim.
GreaseMonkey temelde basit bir fikre dayanıyor ve iyi uygulanmış pek çok basit fikir gibi gayet etkili, gücü, basitliğinde belki de. Yaptığı şey, Firefox'a gelen bir sayfanın istemci yani kullanıcı tarafında programlanabilir şekilde düzenlenmesi. Bir başka deyişle sevdiğiniz bir sitenin görüntüsünden, tasarımından tutun da işlevselliğine dek hemen her şeyi, o sitenin sunucu tarafını etkilemeyecek ve site programcılarının ruhu dahi duymayacak şekilde kendi kafanıza göre değiştirebiliyorsunuz. IMDB'de bulduğunuz bir artistin isminin hemen yanında yaşının da görünmesini ister misiniz? Mümkün. Ya da Amazon.com'da gezinirken gördüğünüz kitapların yanında rakip satıcıların verdiği fiyatların görünmesine ne dersiniz? Bu da mümkün. Slashdot'un tasarımı ve bazı blokları, sütunları hoşunuza gitmedi mi ve de bazı işlevsellikler mi eklemek istiyorsunuz? Hay hay, GreaseMonkey varsa, her türlü maymunluk da var. Artık güç tamamı ile son kullanıcıda ve farklı bir görüntü ya da tonla işlevsellik için ilgili web sitesini ya da siteyi yapan programcıların keyfini beklemek zorunda değiliz. Bir kez daha Internet teknolojileri özgürlüğü genele yaymak için çalışıyor ve Firefox dolayısı ile Mozilla ekibi gönüllerimizdeki yerini sağlamlaştırıyor.

Yukarıda anlatılan güce nasıl erişeceğiz? Bunun için tabii ki ruhumuzu satmamıza ya da karanlık tarafa geçmeye gerek, yapılması gereken tek şey GreaseMonkey isimli Firefox eklentisini şu adresten kurmak: http://greasemonkey.mozdev.org. Daha önceki Firefox eklentilerini (extension) nasıl kurdu iseniz GreaseMonkey de benzer şekilde kuruluyor, yok eğer Firefox'u olduğu gibi kullanıyorsanız ve daha önce herhangi bir ek kurmadı iseniz o zaman da gözünüz korkmasın tek yapmanız gereken sayfadaki "Install GreaseMonkey 0.3.3." linkine tıklamak ve Firefox'un .xpi dosyasını yüklemesini izlemek. Unutmamanız gereken tek şey ise eklenti yüklendikten sonra Firefox'u bir kapatıp açmanız gerektiği (GNU/Linux kullananlar kızacak, MS Windows kullananlar ise gayet doğal karşılayacaktır sanırım ;-)

Her şey yolunda gitti ise, Firefox'u yeniden başlattığınızda üstteki ana menüden Tools menüsünü açtığınızda "Install User Scripts...", "Manage User Scripts..." gibi öğelerin eklendiğini görürseniz GreaseMonkey yüklenmiş demektir.

GreaseMonkey yüklendiğine göre artık pek çok site için hazırlanmış pek çok GreaseMonkey betiğinden ('script'inden) birini ya da birkaçını seçebilirsiniz. IMBD, GMail, Yahoo, DeviantArt, Slashdot gibi yüzlerce popüler siteyi çok daha farklı ve işlevsel görmek isterseniz yapmanız gereken tek şey uluslararası GreaseMonkey betik deposuna gitmek ve betiklerden betik beğenmek: http://dunck.us/collab/GreaseMonkeyUserScripts.

Yukarıdaki adresi ziyaret ettiğinizde ve pek çok GM (GreaseMonkey) betiği ile karşılaştığınızda size uygun gelenleri yüklemek için tek yapmanız gereken ilgili betik dosyasının üzerine gelip (.user.js uzantılı linkler) sağ tıklayıp gelen menüden "Install User Script" maddesini seçmek. İşte bu kadar. Hayır, Firefox'u bu tür işler için yeniden başlatmanıza gerek yok (çok şükür! ;-)

Tabii eğer yüklediğiniz GM betiklerinden biri hoşunuza gitmez ya da geçici bir süreliğine bunun etkisinden kurtulmak isterseniz tek yapmanız gereken Firefox ana menüsündeki Tools menü maddesini seçip "Manage User Scripts" seçeneğinden GM betikleri yöneticisini kullanarak dilediğiniz betiği durdurmak ya da çıkarmak. Güç sizinle.

Programcılar için GreaseMonkey

Yukarıdakiler son kullanıcılar için yeterli olabilir ancak GM gibi güçlü bir araç söz konusu olduğunda başkalarının hazırladığı GM programları ile sınırlı değilsiniz. Kolayca kendi GM betiklerinizi yazmamanız için bir sebep yok. Eğer biraz HTML, JavaScript ve XPath biliyorsanız kolları sıvayıp favori sitelerinizi "dönüştürmeye" ve sonra da yaptıklarınızı .user.js uzantılı dosyalara kaydedip arkadaşlarınızla paylaşmaya başlayabilirsiniz.

GM için tavsiye edilebilecek en iyi başlangıç öğreticisi (Python'dan esinlenerek) Dive Into GreaseMonkey isimli kitap. Bu güzel kitaba http://diveintogreasemonkey.org adresinden erişebilir ve HTML ya da PDF olarak okuyabilirsiniz. Adım adım takip ettiğiniz takdirde kısa sürede GM programcısı olmanız mümkün. Buradaki bilgileri özümsedikten sonra hazır GM betiklerini de inceleyerek deneyim kazanbilirsiniz.

Bunca laf ettikten basit bir örnek vermemizde fayda var. Örneğimizde favori sitemiz olan fazlamesai.net'e küçük bir neşter atacağız. Yapacağımız şey tepedeki (resmin hemen altında) link çubuğuna müdahalede bulunmak ve FM TV linkini kaldırıp bunun yerine hesaplattığımız toplam yorum adedini bastırmak (sadece o anda ana sayfada görünen haberlerin yorumları).

Bunun için yapmamız gereken ilk şey tabii ki FM TV yazısına ulaşabilmek. XPath burada devreye giriyor:
var allLinks, thisLink;

	
allLinks = document.evaluate(
    '//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']',
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

thisLink = allLinks.snapshotItem(0);
Firefox, GreaseMonkey ve XPath sayesinde artık thisLink değişkeni fazlamesai.net sitesindeki ilk FM TV yazısına (linkine) işaret ediyor. İşin püf noktası ise
	//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']
satırında gizli. XPath bilgisinin faydalı olacağını söylerken bunu kast ediyordum. XPath dilini kullanarak bir HTML belgesi üzerinde örüntü işleme yapmanız mümkün (pattern matching). XPath'e çok basit ve somut bir giriş için bu adrese göz atabilirsiniz.

Artık değiştireceğimiz linki bulduğumuza göre yorum saydırma işine geçebiliriz:
var CommentCounter = 0;
var str = document.body.innerHTML.match(/[0-9]+ yorum/g);
for (i = 0; i < str.length; i++) {
    var CommentCount = str[i].match(/[0-9]+/);
    CommentCounter += parseInt(CommentCount);
}
Biraz JavaScript ve biraz da RegEx (Regular Expressions - Düzenli İfadeler) bilgisi ile "xxx yorum" kalıbına uyan metinleri elde ediyor ve sonra da sayı kısmını çekip toplamı elde ediyoruz (tabii siz de pis pis sırıtıyorsunuz, gider haber metninin içine ya da bir ana sayfada görüntülenen bir forum başlığına "197 yorum" lafını sokuştururum ve böylece senin betik patlar, kötüyüm ben çoook kötü! :). Ve sıra geliyor FM TV yazısını tepedeki yerinden alaşağı edip yerine elde ettiğimiz sayıyı yazmaya, bunu da thisLink'in gösterdiği nesnenin innerHTML özelliğine erişerek yapmamız mümkün:
thisLink.innerHTML = 'Yorum adedi: ' + CommentCounter;
Artık yapılması gereken yukarıdaki işlevselliği bir GM betik dosyası içine uygun şekilde yerleştirmek:
// ==UserScript==
// @name          fazlamesai
// @namespace     http://fazlamesai.net
// @description   example script to alert "Hello world!" on every page
// @include       http://fazlamesai.net/
// @include       http://www.fazlamesai.net/
// @exclude       http://diveintogreasemonkey.org/*
// @exclude       http://www.diveintogreasemonkey.org/*
// ==/UserScript==

var CommentCounter = 0;
var str = document.body.innerHTML.match(/[0-9]+ yorum/g);
for (i = 0; i < str.length; i++) {
    var CommentCount = str[i].match(/[0-9]+/);
    CommentCounter += parseInt(CommentCount);
}


var allLinks, thisLink;
allLinks = document.evaluate(
    '//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']',
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

thisLink = allLinks.snapshotItem(0);
thisLink.innerHTML = 'Yorum adedi: ' + CommentCounter;

GM betiğinin tepesinde gördüğümüz ve ==UserScript== ile ==/UserScript== arasında kalan bölge betiğe dair meta bilgi içermekte ve betiğin hangi koşullar altında çalışacağını belirtmekte. Bizim örneğimizde fazlamesai isimli bu GM betiği fazlamesai.net ana sayfa için çalışmaya ve diveintogreasemonkey.org için çalışmamaya ayarlı (evet biliyorum, ben çok tembel bir adamım, huyum kurusun).

Şimdi, GM'nin etkisini kendi başınıza test etmek için lütfen yeni bir Firefox sayfasında fazlamesai.net sitesini açın ve tepedeki resmin altında yer alan link menüsüne dikkat edin: "Forumlar | Haber Yolla | Hesabınız | İletişim | İstatistikler | Arama | FM TV" gibi bir link dizisi göreceksiniz. Eğer yukarıdaki GM betiğini hemen denemek isterseniz ve Firefox için GreaseMonkey kurduysanız bu linke sağ tıklayıp "Instal User Script..." maddesini seçin ve karşınıza çıkan pencerenin altındaki OK düğmesine basın. Her şey yolunda gitti ise size "Success! Refresh page" gibi minik bir uyarı penceresi çıkaracak, OK deyip geçin ve fazlamesai.net'i açtığınız sayfaya gidip FM sitesini yeniden yükleyin ve resmin hemen altında gelen link satırının son öğesine dikkat edin. Artık FM TV yerine "Yorum adedi: XXX" gibi bir şey yazdığını göreceksiniz.

Sonuç

GM ile yukarıda görüldüğü gibi pek çok şey gerçekleştirmeniz mümkün, tamamen hayal gücünüzle sınırlısınız. Uluslararası GM deposuna baktığımda meşhur Türk Internet siteleri için yazılmış GM betiklerine pek rastlamadım, bu da demek oluyor ki yetenekli JavaScript programcıları Türkiye'deki siteler için de pek çok şey yapabilirler.

Önceki bölümde çok çok basit şekilde FM sitesinin nasıl değiştirilebileceğini gösterdikten sonra şöyle bir teklifte bulunuyorum: FM'yi çok daha faydalı ve işlevsel kılacak GM betiklerini yazıp paylaşmaya ne dersiniz? Unutmayalım ki FM sadece FazlaMesai değil aynı zamanda Fark yaratalıM demek ;-) Fonda Jethro Tull'ın "Steel Monkey" parçası çalarken GM ile yapılabilecek fantastik işleri düşünüyor ve bu makalenin güzelliklere yol açması ümidi ile herkese iyi günler diliyorum...

Emre "FZ" Sevinç
emres at bilgi nokta edu nokta tr
2005-05-31

Görüşler

0
vampir
deviantart kullanicisi olarak grease monkey'e pek bir asinayim bu yazi super olmus aklimin ucundan gecmezdi arastirmak..
grease monkey gercekten pek bir eglenceli degisik degisik ozellikler eklemek cikarmak ve gercekten burdaki tabirle turlu maymunluklar yapmak hatta mudavimi oldugumuz siteleri maymuna cevirmek mumkun..
ayrica baskalarinin yazdigi programciklara mudahele ederek onlari daha da ozellestirmek grease monkey'i daha da cekici kiliyor benim icin..
bu arada wikipedia icin de varmis scriptler fz bunu nasil atladin bilemiyorum (=
0
FZ
Hmm, pusuya yatmış Photoshop çılgını arkadaşımızın DeviantArt lafı geçince dayanamayacağını tahmin etmeliydim! ;-)

Evet, haklısın, Wikipedia için de GM betiği var, artarak devamını diliyorum ama asıl görmek istediğim Türk siteleri için faydalı GM betikleri.
0
vampir
HAHA.. devart'in adinin gecmesine sasirdim ondan olmali..
yavas yavas kesfedilecek ve turk sitelerine de gelecektir ben eminim.. (;
0
myss
// @include http://fazlamesai.net/
// @include http://www.fazlamesai.net/
yerine
// @include http://fazlamesai.net/*
// @include http://www.fazlamesai.net/*
yazinca calisiyor. Hos birsey.
0
FZ
Yazmadan çalışmıyor mu? Ben sadece ana sayfada çalışsın diye öyle yapmıştım, bilinçli tercih yani ;-) Tabii o şekilde yazılırsa fazlamesai.net ya da www.fazlamesai.net diye başlayan tüm adreslerde çalışacaktır.
0
myss
Tamam, ben konuyu yanlis anlamisim :)
0
lifesdkver0_1
greeasemonkey scriptlerini firefox eklentilerine çeviren bir compiler da mevcut:

http://www.letitblog.com/greasemonkey-compiler/
0
cbc
Üzerinize afiyet ek$i sözlük şöyle birşey yaptım öğrenmek adına.

ekşisel [canb.net]
0
FZ
Ek$isel/
From CanBurakCilingir

(There is currently no text in this page)

yazıyor...?
0
cbc
0
cbc
404 için kusura bakmayın: http://blog.canb.net/dosyalar/eksisel/eksisel.user.js
0
FZ
GreaseMonkey ile yapılmış güzel bir çalışma:

http://www.fazlamesai.org/forum/viewtopic.php?p=5985#5985
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Telnet ile çeşitli protokollerin uygulamalı kullanımı

honal

Internette kullandığımız her servise ait özelleştirilmiş yazılımlar vardır. Mesela, mail alıp gönderebilmek için pop3 ya da Imap özelliklerini destekleyen bir mail istemcisine(Microsoft Outlook, Mozilla ThunderBird), IRC kanallarında muhabbet edebilmek için bir IRC istemcisine(Mirc, Xchat), FTP yapabilmek için yine bir ftp istemcisine(CuteFTP). Tüm bunları özelleştirilmiş programlar aracılığıyla yaparız. Bu aracı programlar kullandığımız her bilgisayarda olmayabilir, ya da herhangi bir sebeple kullanamayacak durumda olursak yardımımıza mazisi oldukça eski olan telnet uygulaması yetişir. Bu yazıda telnet kullanarak bazı servislerden nasıl yararlanabileceğimizi inceleyeceğiz..

E-Posta, HTML ve Gereksizlik Üzerine

sundance

E-posta, Internet'in belki de en çok kullanılan araçlarından biri. Taa ARPANET zamanlarından itibaren insanların haberleşmesi için kullanılan, daha sonra 70'lerin sonundan itibarense USENET vasıtasıyla çok daha geniş kitlelere ulaşan e-posta, hemen hepimiz için normal postadan daha önemli bir araç halini aldı.

Önceden tamamen text olan e-posta'lar, zamanla dosya naklini mümkün kılmak için attachment kabul eder bir hale geldiler. Uzun süre böyle devam ettikten sonra (bildiğim kadarıyla Microsoft'un bir hareketiyle) HTML e-posta kavramı geldi. Artık e-postamızda, süper html formatında yazılar, resimler, kimden geldiğini bile bilmediğimiz reklam bombardımanları ve katastrofik virüsler başgösterdi.

İyi de Laz'ın söylediği gibi "Şart midur ?"*

USB ADSL Modemler ve GNU/Linux Ayarları

FZ

Debian GNU/Linux, Türkçeleştirme ve Modem konularından sorumlu Internet bakanımız, değerli FM üyesi roktas bu sefer leziz bir ADSL ve Linux yazısı hazırlayıp sıcak sıcak bize sunmuş. Afiyet olsun.

Karadenizin güzide bir şehrinde sıradan bir Cuma gününün sıradan bir öğle sonrasında çalan bir telefonla başladı hikaye. Türk Telekom'dan arıyorlardı. Telefondaki sesi birilerine benzeterek gaf yaptım önce. Öyle ya Türk Telekom beni niye arasın? Ve üstelik içinde ADSL geçen cümleleri niçin kursun? Mevzu yaklaşık 3-5 ay önce hiçbir şekilde ciddiyet belirtisi göstermeyen bir aleladelikle yaptığım ADSL önbaşvurusuyla alakalı idi. "İlimizde ADSL hizmetine geçiş çalışmaları başladı. Ön başvuruda bulunanlara öncelik veriyoruz, merkez müdürlüğe gelmeniz halinde ADSL sözleşmesi yapabilirsiniz?" Hoppala, ağlasak mı gülsek mi? "Emriniz olur, hemen geliyorum" dediğimde saate bakmayı unutmuştum ve saat 16.30 sularıydı. "Acele etmenize gerek yok, Pazartesi günü de olabilir" cevabını fevkalade şüpheli bir tonla kabul ettim. Ya hafta sonu kararlarından cayarlarsa, ya Pazar günü şehrin bütün eşrafı ayaklanarak Ankara destekli bir müdahaleyle bütün o "/alelade/" ön başvuruların önüne geçerse ya kıymetlimisi elimisden alırlarsa, vesaire vesaire...

Bir Kablonet Hikayesi

sefalet

Kablolu bağlantı ile genelağ erişimi sağlayan kullanıcılara küçük bir müjde ile başlayıp, Türksat'ın bağlantı fiayatlarında indirime gittiğini belirtelim. İlgili tarifelere şuradan ulaşabilirsiniz. İndirimin yanında her ay istediğiniz bir tarifeye geçme hakkı da tanındığını duydum ki alışkın olmadığımız bir özellik. Kablolu bağlantı işletmesi 1 temmuz 2005'te Türksat'a geçmiş ve 1 eylül 2006'da Türksat, daha önce Telekom'un destek hizmeti vermesi için kiraladığı firmalar (kablonet, topaz, ultra, interaktif) ile sözleşmeleri feshetti. Bu olaylı geçiş sürecinde bir kaç gün bağlantı hizmeti alamadı kullanıcılar.

Wap uzerinden web´de gezmek

tongucyumruk

Yakın zamana kadar FazlaMesai'yi wap üzerinden okumak için FazlaMesai'ye wap desteği gelmesi veya TurkCell'in SurfCell adlı garabetiyle boğuşmak zorunda olduğumu düşünüyordum... Yanılmışım... Çok sevgili arama motorumuz google beni bir kez daha şaşırttı.
Alıyorsunuz wap destekli telefonu, giriyorsunuz http://wap.google.com'a ve webin tamamında arama yapabiliyorsunuz. İşin güzel yanı arama sonuçları web siteleri olsa bile google bunları sizin için wml formatına çeviriyor güzel güzel browse ediyorsunuz dahası arama ile ulaştığınız siteden başka sitelere link varsa o linkleri de google sizin için wml formatına çeviriyor.
Ne diyelim... İlahi google sen herşeyi düşünürsün...