Leoman’s blog

bi blög

Archive for the ‘Gezegen’ Category

Güle güle Kerem Can

6 comments

Bugün hayatımda ilk kez yakın bir arkadaşımın ölüm haberini aldım telefonda ve zannediyorum ki bundan sonra bazı şeyler eskisi gibi olmayacak.

Dedemi yıkayıp mezara koyan, ananemi aynı şekilde mezara koyan ve metanetini hiç bozmayan ben maalesef ki bu sefer yapamadım mesela. Telefonda “Cenaze arabası bekliyoruz abi” denmesiyle şirazeden çıktım.

Bir insan otobüs, tramvay bekler, ne bileyim vapur filan bekler ama cenaze arabası bekleyemez, beklememeli. Bu sıcak havada soguk bir mermer üzerinde yatan şey olsa olsa kedi olur. Ne olursa olsun kediden başkası yatmaz soğuk mermere, yatmasında zaten. Hayat sadece azıcık yere yığıldın diye seni terk etmemeli mesela. Ne bileyim hormonal bozuklukla gelen aşırı kilo insanın tercihi değil ki ya da aşırı sıcak hava da hiçbirimizin tercihi değil. O zaman bu hayat denen nane neden bunun hesabını bir insana sorsun ki? Neden yani! Tamam, kendi deyimiyle “Farkedilmemesi mümkün olmayacak derecede büyük bir adamım. Hem de ziyadesiyle” büyük bir adamdı ama o vücudun ihtiyacına çok daha büyük gelecek bir kalbi vardı bir kere. Sağda solda gördüğü kediye-kuşa üzülecek, ülkenin bir tarafında katledilen insanları dert edinip üzüntü nöbetleri geçirecek, okuduğu/gördüğü her zulümü/haksızlığı elem-kedere dönüştürüp içine atacak, sırf ailesini üzmemek için eyleme gitmeyip, protesto edememeyi dert edinecek kadar kalbi büyük bir adamdan bahsediyoruz burda. Bu çarkın mekaniği nedir hayat?

Ben bugün çok önemli şeyler kaybettim. Sizi, sizden önce düşünen bir arkadaş edindiniz mi mesela? Ben bugün onlardan birini kaybettim. Ne bileyim; blues ile jazz’ın ayrımının nereden başladığını anlatırken, hangi entrümanın nerede/nasıl doğdunu anlatan. Ardına dünya tarihinden konularla girip, matematikten çıkan, PostgreSQL’de ne zaman hangi sıralama algoritmalarını kullanmak gerektiğine geçip veritabanlarının doğuşunu anlatırken saatler sonra “Evet, bazen çok konuşabiliyorum. Yani bazen dediğim genellikle öyle oluyor ama durduramıyorum eki eki eki” diye saatlerce dinlenesi bir arkadaşımı kaybettim. Biz arjantinlerimizle, o biraverle içerken haldur huldur boş konuştuğumuz arkadaşımı kaybettim. Belki farkında değilim ama kimbilir daha neler kaybettim. Bugün bilişim sektörü kendi deyimiyle “A natural born Geek”, bizim bakış açımızla “A natural born NERD” dahi bir çocuğunu kaybetti.

Bu kadar üzüntünün arasında bir yanda da sözde muhalif ya da ahlaksız medya, her gördüğü şeyi haber sanan paylaşım ahmakları, galeyan şakşakçıları, katil balina misali kan kokusuna saldıran canavarlara, klavye spartaküsleri ve komple teoricilerine maruz kalmak daha da ayrı ve büyük bir acı. Biz son 3 senedir tatil yapmayan, ölümüne ve durmaksızın çalışan, her şeyi kendine dert/keder/stres eden, son üç gündür hastalıktan dolayı evden çıkamayan fakat yine de bir problemi çözmek için işyerine gitmeye son 30 metre kala kalbi yetmeyen bir arkadaşımızı yitirdik. Üzüntümüz de yeterince büyük. Ama durun da bir siz sorun kendinize siz neler kaybetmişsiniz de farkında değilsiniz. Bu kadar gözü kapalılıkla muhtemelen bunun da farkına varamaayacaksınız ama bir kaçınız farketseniz o da iyi.

Şu saçmalıkları görseydin muhtemelen baya bir gülerdin. O yüzden güle güle koca adam, güle güle can insan, güle güle.

Written by leoman

May 31st, 2013 at 6:37 pm

Posted in Gezegen,Kişisel

Apache üzerinde Geo-IP filtering

leave a comment

Bir web projesinde gelen ziyaretçinin geo-location kaynağına göre farklı durumlar yaratmak isteniyor ise bunun için kullanabileceğimiz çözümün adı MaxMind-GeoIP [1].

Ne?

MaxMind bu konuda birden farklı veritabanı sunuyor. Eğer kaynak ülkeye göre işlem yapmak isterseniz GeoIP [2], şehire göre işlem yapmak istiyorsanız GeoCity [3] veritabanını kullanabilirsiniz. Ücretli satılan bu veritabanları yerine ücretiz kullanıma sahip olan GeoLite [4] [5] serilerini de kullanmak mümkün. Yalnız bu serileri belirli aralıklarda elle güncellemeniz gerekeceğini unutmamalısınız.

Nasıl?

Bu işlemlerin tamamı için PHP, Python, C, C# gibi MaxMind’ın sağlamış olduğu kütüphaneleri ya da Apache modülü gibi API’leri kullanabilmektesiniz.

Apache için geo-ip modülünü aktif etmek 3 adımlık bir süreçten ibaret;


apt-get install libapache2-mod-geoip
nano /etc/apache2/mods-available/geoip.conf

ile yüklediğimiz geoip modülünü açarak aşağıdaki satırlarla aktif olmasını ve bu işlemleri yaparken kullanacağı veritabanının yolunu belirteceğiz;


GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

Bu işlemin ardından güncel GeoIP veritabanını belirttiğimiz path’e indirerek mod’u kullanılabilir hale getirmemiz yeterli olacaktır.


cd /tmp
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
mkdir -p /usr/share/GeoIP
mv GeoIP.dat /usr/local/GeoIP/
a2enmod geoip
apache2ctl restart

Artık GeoIP  modülümüz kullanıma hazır dilerseniz .htaccess içerisinde ya da direkt olarak apache config’i içerisinde işleme sokabiliriz. Örneğin;


RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US)$
RewriteRule ^(.*)$ http://us.domain.com$1 [L]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(TR|DE|SE)$
RewriteRule ^(.*)$ http://eu.domain.com$1 [L]

Gibi big kod ile Kanada ve USA’den gelen kullanıcılaru us subdomain’ine, Türkiye, Almanya ve İsviçreden gelen kullanıcıları eu domain’ine yönlendirmiş oluruz.

Başka bir örnek olarak BTK tarafından anlmasızca siteleri bloklanan Google kısasa kısas yaparak Türkiye’den gelen kullanıcıları bloklamak isteseydi eğer, Apache içerisine şöyle bir ekleme yapması


SetEnvIf GEOIP_COUNTRY_CODE TR MalUlkeler
Deny from env=MalUlkeler
Allow from all

Bunun türevlerini GeoCity gibi veritabanlarını kullanarak genişletmeniz de mümkündür.

Neden?

Peki neden bunu yazılım içerisinden değil de Apache üzerinden yapıyoruz? Tamamen kişisel bir tercih ve performans kaygısıdır. PHP interpreter’ına girirek bu işlemleri yapmaktansa daha web sunucuya bağlantı kurulduğu anda bu işlemi gerçekleştirmek bir çok yönüyle daha hızlı olacaktır.

Linkler;

[1] http://www.maxmind.com/app/ip-location
[2] http://www.maxmind.com/app/country
[3] http://www.maxmind.com/app/city
[4] http://www.maxmind.com/app/geolitecountry
[5] http://www.maxmind.com/app/geolitecity

Written by leoman

June 5th, 2010 at 8:34 pm

Akademik Bilişim’09 – Şanlıurfa/Türkiye

2 comments

11-13 Şubat 2009 tarhleri arasında Harran Üniversitesi’nde yapılacak olan Akademik Bilişim Konferasında Arda Çetin ile birlikte Mikrotik Router OS, Mikrotik Router Board ve Appliance cihazları tanıtıp anlatacağız hatta ve hatta 30dk. süremiz içerisine sığdırabilirsek ufak bir uygulamada yapacağız.

Written by leoman

February 5th, 2009 at 3:09 pm

Posted in Gezegen,GNU/Linux

Tagged with ,

Canis aureus izlenimleri

leave a comment

Evet Pardus 1.0’dan beri kurup kullanmak için pek fırsatım olmamış idi. Şu anda bir test için kurup Pardus kullanmam gerekti ve şu noktaları gözüme çarpan noktalar şunlar;

  1. Ubuntu’nun çalıştırmak için 40 takla attıran ekran ve kablosuz ağ kartım canavar gibi çalışıyor.
  2. Sevgili Kaptan “Windoze ile aynı disk ile kurulu olduğundan burdaki verilerinizi göç ettirmek ister misiniz?” dedi. Bunu test etmek için vaktim olmasa da bir ara deneyeceğim.
  3. Yine sevgili Kaptan Internet’e ağ ayarlarınızı yapılandıralım dedi ve bunu profil bazlı yapacağım dedi. Bu da ayrı bir güzel fakat keşke profil oluşturduktan sonra hemen ağa kendi bağlansaydı sanki daha hoş olacak idi.
  4. mp3, divx, dvd vs. gibi medyalar için beni uğraştırmadı kesinlikle ben hepsini çalar, oynatırım yeterli aralar bozulmasın dedi.
  5. Ön tanımlı konsol renklendirmesi hoş, hele ki grep’lediğimde sonuçları renklendirmesi gayet iyi bir cilve idi. Keşke bunu daha önce ben de yapsaymışım.
  6. NTFS olarak biçimlendirilmiş harici diskim yazılabilir mount edilmiş, yazabiliyorum evet. 😀
  7. Pisi ile paket kurmak istediğimde 3 paket seçtiniz fakat 7 paket kurulacak dedi ama diğer ek paketler nedir açıklama gereğinde bulunmadı! Paketler yüklenirken türlü maymunluklarla güldürmeyi unutmadı.
  8. Üzerinde IM olarak Kopete kurulu gelmiş. Her nasıl oluyorsa tek bir IM hesabımı eklemiş olmama rağmen login olmamla birlikte bilgisayarım kitlenlenmesi aynı ana denk gelme olasığını yok varsayıyorum. Bir IM nasıl komple bilgisayarı down eder enteresan.

Zannedersem test maceramız bu kadar kısa sürecekmiş. 🙂  Bir daha ki boş vaktime kadar kurulu bekleyecek. O zaman biraz daha detaylı da inceleyebiliriz.

Sonradan gelen edit : Kurulum süresi Ubuntu’ya göre çok çok daha kısa sürdü 🙂

Written by leoman

February 5th, 2009 at 1:45 pm

Posted in Gezegen,GNU/Linux

Tagged with ,

Mikrotik betiklerinde döngüler ve koşullar

leave a comment

Belli bir öğe dizisi için bir özelliği belli koşullara göre ayarlamamız gerekiyorsa bunu winbox üzerinden defalarca tıklayarak yapmak bir çözüm olabileceği gibi aynı işi bir betik aracılığı ile de yapmak mümkün olacaktır.

Kabuk üzerinde koşul dizilimi şu şekildedir.


[admin@Mikrotik] > :global deger1 "degerli"
[admin@Mikrotik] > :global deger2 "degersiz"
[admin@Mikrotik] > :if ($deger1 = $deger2) do={:put "Eslesiyor"}\
[admin@Mikrotik] > else={:put "Eslesmiyor"}

Bu şekilde şartlara göre seçimimizi yapabilir ve işlemlerimizi gerçekleştirebiliriz.

Döngüler; belirtmiş olduğumuz durum sağlanıncaya kadar işlem tekrarıdır.
Kabuk içerisindeki söz dizimi ise şu şekildedir;


[admin@Mikrotik] > :for i from=1 to=10 do={:put $i}

ile 1’den 10’a kadar sayıları ekrana bastırabiliriz.

Daha reel bir uygulama yapacak olursak kuyruk listemizde ekli olan tüm kuralların maksimum download ve upload’ını 1Mb ile limitlendirelim;


[admin@Mikrotik] > :local queueLen [ :len [ /queue simple find ]]; \
:for i from=0 to=$queueLen do={ /queue simple set $i max-limit=1000000/1000000}

Bu örnekte öncelikle :len ile tüm kuyrukta yer alan kuralların sayısı aldık. Bu değeri daha sonra kullanabilmek için lokal bir değişken olan queueLen’e atadık. Bir sonraki komut dizesinde ise tüm kuyruk boyunca max-limit değerini 1Mb olarak atamış olduk.

Yine diğer programlama dillerinden aşina olduğumuz diziler üzerinde çalışabilmeyi mümkün kılan foreach döngüsünü de kabuk üzerinde kullanabilmekteyiz.

[admin@Mikrotik] > :local toplamIP [/ip address find interface="ether1"];\
:foreach idIP in=$toplamIP do={\
:local durum [/ip address get $idIP disabled];\
:local IPadresi [/ip address get $idIP address];\
:if ($durum="false") do={:put ($IPadresi . " Kapali\n")}\
else={:put ($IPadresi . " Acik\n")}}

Burdaki örnekle beraber ether1 üzerindeki IP adreslerinin Kapalı ya da Açık olması durumuna dair bir listesi alınabilir.

Sadece belli sayıdaki işlemler için değil belirli bir koşula göre işleyebilecek bir döngümüz de var. Bu döngümüz do..while ya da while…do döngüsü. Bu döngüye ait söz dizilimi de şu şekildedir.

[admin@Mikrotik] > :global ethernetCount [:len [/interface find type=ether]]; :global $i 0;
[admin@Mikrotik] > :while ($i < $ethernetCount) do={\ :put [/interface ethernet $i name]; :set i ($i+1);}


[admin@Mikrotik] > :global i 11;
[admin@Mikrotik] > :do {:put $i; :set i ($i - 1);} while=($i > 0)
[admin@Mikrotik] > :unset i;

Written by leoman

January 20th, 2009 at 8:34 am

Mikrotik betik programcılığı – Değişkenler

leave a comment

Mikrotik betik dili üzerinde iki tip değişken bulunmaktadır.

  • global – Tüm aktif kullanıcılar ve betikler tarafından erişilebilen değişken tipidir. global deyimi ile tanımlanır.
  • local – Sadece tanımlandığı blok içerisinden erişilebilen değişken tipidir, yine local deyimi ile tanımlanır.


[admin@Mikrotik] > :local testDegiskeni; :set testDegiskeni "Test ediyoruz"; :put $testDegiskeni

Aynı kod bloğu içerisinde öncelikle local bir testDegiskeni adında bir değişken oluşturduk, değerini Test ediyoruz olarak atadık, daha sonrada değişkenimizin değerini ekrana bastırdık.

Peki bu değişkeni daha birden fazla satırı ve/veya kod bloğu olan bir betik içerisinde kullanma ihtiyacımız olsa idi?

[admin@Mikrotik] > :global testDegiskeni
[admin@Mikrotik] > :set testDegiskeni "Mikrotik dunyasina hosgeldin\n"
[admin@Mikrotik] > :for i from=1 to=3 do={:put $testDegiskeni}

Bu örnekte de görülebileceği gibi testDegiskeni adında bir global değişken tanımladık ve daha sonraki kod bloklarımızdan değişkenimize ulaşarak gerekli işlemleri yaptık.

Written by leoman

January 20th, 2009 at 6:08 am

Mikrotik üzerinde betik programcılığı

leave a comment

Mikrotik bildiğiniz üzre kolay kullanımı için güzel bir görsel kullanıcı arayüzüne sahiptir.  Bu arayüz sayesinde çok kolay ayarlanabilen, takip edilebilen, kullanıcı dostu bir işletim sistmidir.

Bu kadar kolaylık arasında ya kendimize/duruma özel işlemler yapmak istersek? Ya aynı işlemi defalarca yapmak zorunda isek? Ya da bir işlemi sayısız kere belirli aralıklarla yapmak zorunda isek?

Bu kadar esnek bir sistem tabi ki de buna da imkan tanıyacaktır. Mikrotik güçlü kabuğu sayesinde tüm işlerinizi otomatik hale getirmenize ya da durumlara özel çareler üretmenize yardımcı olacaktır.  Kabuk üzerinden (Telnet/SSH/Winbox/Serial) işinize uygun bir betik yazarak dilediğiniz gibi tüm işlemlerinizi gerçekleştirebilirsiniz.

Genel anlamda kullanacağımız kabuk *nix üzerinde yer alan kabuklardan pek te farklı değildir. Bash ya da sh’ta kullanmış olduğumuz “\”, “;” ,”#”,”{}”,”[]”  sınırlayıcılar pek fark olmadan yine bu kabuk üzerinde kullanılabilir.

Veri tipleri

Betik yazımı sırasında sık sık kullanacağımız değişkenler için önceden belirlenmiş tipler mevcuttur. Bunlar;

  • number – 64 bitlik Integer tipi değişken türü (işaretli +/-), aynı zamanda hexadecimal veri girişi de mümkündür.
  • boolean – doğru/yanlış veri tipi, true ya da false değerlerini alabilmektedir.
  • string – karakter dizisidir. “test verisi” gibi bir değer alabilir.
  • IP – IP adresi barındırabilen veri tipidir.
  • time – tarih ve zaman tutan veri tipidir.
  • array – dizi verileri tutabilen veri tipidir.
  • nil – öntanımlı veri tipidir, değişken değer verilmediği sürece değeri nil’dir.

Ayrımlama işaretleri

  • \”       –  çift tırnak
  • \\     – ters bölü
  • \n     – yeni satır
  • \r     – satır başı
  • \t     – yatay sekme
  • \$
  • \?
  • \_     – boşluk
  • \a     – zil
  • \b     – gerisilme
  • \f     – sayfa ileri
  • \v     – yatay sekme
  • \xx     – onaltılık düzende değer

Operatörler

Aritmetiksel Operatörler

  • +  toplama
  • –   çıkarna
  • /  bölme
  • *  çarpma
  • –  negatif

Karşılaştırma Operatörleri

  • < küçükse
  • > büyükse
  • <= küçük ve eşitse
  • >= büyük ve eşitse
  • = eşitse
  • != eşit değilse

Mantıksal Operatörler

  • “!” / “not”  değilse
  • “&&” / “and” ve
  • “||” / “or” veya

Bitsel Operatörler

Bitsel operatörler yanlızca number ve IP veritiplerindeki değişkenler/değerler için kullanılabilmektedir.

  • “~”  değil, bitin tersini alma
  • “&” ve (1 ve işleminde etkisiz, 0 biti ise yutan elemandır)
  • “|” veya (0 ve işleminde etkisiz, 1 biti ise yutan elemandır)
  • “^” özel veya (aynı bitler için 0, farklı bitler için 1 elde eder)
  • “<<” sola kaydırma  (belirtilen değer kadar bitleri sola kaydırır)
  • “>>” sağa kaydırma (belirtilen değer kadar bitleri sağa kaydırır)

Birleştirme operatörleri

  • “.” İki karakter dizisini birbirine bağlar.
  • “,” Dizi elemanlarını birbiri ardına sıralar/Diziye yeni değer ekler.

Written by leoman

January 20th, 2009 at 6:05 am