25 July 2014

15. Sistem Yöneticileri günü


Geleneksel 25 Temmuz, 2014, 15. Sistem Yöneticileri Gününüz kutlu olsun!

Şirketinize bilgisayar ağlarınız nasıl güvende? Bilgisayar ve yazıcı  sistemleriniz, ağ şebekeleriniz nasıl kesintisiz çalışıyor hiç merak ettiniz mi? Çünkü harika bir sistem yöneticisine  ( ya da büyük bir IT departmanına ) sahsipsiniz ve işinizi kesintisiz yürütebiliyorsunuz. İşte şimdi IT biriminiz ile gurur duyma zamanı.

Sistem Yöneticileri Gününüz Kutlu Olsun!

Sistem yönetici günü mü? O nasıl gün öyle derseniz, 24 saatliklik gezenenin en muhteşem günü. :) Gün boyunca sizin IT alyapısını felatetlerden koruyan, kollayan iş sürecinizi aksamadan yürütmenizi sağlayan o kahraman sistem yöneticilerinizi hatırlama zamanı.

Evet şimdi “Harika, benim sistem yöneticim bir kahramam, e peki ne yapalım yani?”  diyorsunuz? Işte size kutlama firsati. Hemen aşağıdakilerden birini seçin  (liste sınırlı olmamak ile beraber) sistem yöneticilerinize koşun!

  • Pasta ve Dondurma,
  • Pizza,
  • Tebrik kartları,
  • Hediyeler,
  • Sistem yöneticinizin harikalığı ile ilgili yazılı ve basılı materiyaller (T-shirt),
  • Balonlar,
  • Konfetiler,
  • Canavar düdükleri

ve sevginizi ve takdirinizi sunun!

Bugun, 25, Temmuz 2014 Cuma, 15. Sistem Yöneticileri  günü. Işte bu özel günde, geceli gündüzlü zorlu çalışma şartları olan sistem yöneticilerinize övgülenirizi sunabiliriz ( Tüm Cuma günü, 24 saat yerel saatinizle)

Gerçekten bakın, sistem yöneticileriniz yılın diğer 364 günü hiçbir saygı görmüyor. Bugün dünya çapında sistem yöneticilerin zor kahır dolu görevlerleri için pahalı spor arabaları ve tomarla para içinde yüzeceği gün olmalı belki.  Tabi ki şaka bir kenara,  sadece bugun, sistem yöneticileri belki sadece basit bir hediye veya teşekkür ile farkındalıklarını sizlere anlatamya çalışıyor.

Dürüst olmak lazım. Aslında gerçekte Sistem Yöneticilerini, onların bizi tanıdığı kadar tanımıyoruz, ne ile uğraştıklarını bilmiyoruz. Mesai saatlerinden sonra  (ya da haftasonu dahil)   sistemlerinizin düzgün çalışabilmesi için gecesini gündüzüne katan sistem yöneticilerini bu çabaları neticesinde en azından bugün hatırlanmak istiyor. Lütfen bari bugün sistem yöneticilerinize, şirketinize ve size gösterdiği emeklerin karşılığı olarak hatırlayın. Onlara tüm çabaları ve profesyonel emekleri için teşekkür edin.

[] http://www.sysadminday.com ‘dan alıntıdır.

 



22 July 2014

Puppet Otomatik İmzalama Hakkında


Bu yazımda Puppet'taki otomatik imzalama çeşitlerinden bahsedeceğim. 3 çeşit otomatik imza kullanılabiliyor. Bunlar:

** Naive Autosigning : Master makinaya gelen tüm imzalar (CSR - Certificate Sign Request) imzalanır.  Master'daki puppet.conf'da autosign = true olması yeterli.

** Basic Autosigning : Otomatik imza için sertifika ve domain isimlerinin olduğu bir beyaz liste oluşturmalıyız. İmzalama gerçekleşecek makinaları önceden tanıtmak gibi düşünebiliriz. Master'daki puppet.conf dosyasında autosign = <whitelist file> diye oluşturduğumuz listeyi bilirtmeliyiz. Bu listenin yolu $confdir/autosign.conf şeklinde olmalı. autosign.conf içeriği şu şekilde olmalı: 
ornek1.ornek1.com
*.ornek2.com
*.local

** Policy-Based Autosigning : Kendi belirlediğimiz ilkelere uygunsa, imzalamanın gerçekleşeceği çeşittir. Diğerlerine göre güvenlik açığı daha az. Çünkü direk imzalama gerçekleşmeden önce ilkelere uygunluk sonucunda işlem yapılıyor.

Bunun için master makinadaki puppet.conf'a autosign = <policy executable file> diyerek belirlediğimiz ilkelerin olduğu çalıştırılabilir dosyayı belirtmeliyiz. Peki ilkeleri hangi kurallara göre yazmalıyız?

* İlkeleri herhangibir programlama dili ile yazabiliyoruz. 
* İstek olarak master makinaya gelen pem formatlı dosyayı, ilkeleri yazacağımız dosyaya stdin ile almalıyız. 
* Çıktı olarak 0 ise onay(imza gerçekleşecek), 1 ise red döndürmeliyiz.

Ayrıntılı şekilde buradan da bakabilirsiniz. Kolay gelsin :)





21 July 2014

Python-Boto İle AWS'ye Bağlanmak


Boto, AWS(Amazon Web Services) arayüzü için bir Python kütüphanesi. Fotoğraftaki seçenekler ve alt başlıkları için fazlasıyla modül içeriyor. Bana stajımda EC2( Elastic Compute Cloud ) kısmı lazım olmuştu. Bağlantı kurup instance_id kısmı ile birkaç işlem yapacaktım.


Krulumu oldukça basit:

pip install boto

ya da kaynak kodu yerelimize çekersek:

$ git clone git://github.com/boto/boto.git
$ cd boto
$ python setup.py install

Yapılandırma:
Bunun için AWS'de hesabımız olmalı çünkü API Key ve Secret Access Key bilgileri gerekiyor. Boto sırasıyla şu dosyalara bakıyor:

* /etc/boto.cfg
* ~/.boto
* ~/.aws/credentials

1. "~/.aws/credentials", "~/.boto" ve "/etc/boto.cfg" dosyalarını oluşturup, API Key ve Secret Access Key bilgileri vereceğiz. Burada fazladan region(alan) tanımı var. Belirtmek zorunda değiliz ama Amazon Servisleri'nin hangi alanına bağlanmak istediğimizi yazabiliriz.

[default]
aws_access_key_id =*******************
aws_secret_access_key = ****************************************
# Optional, to define default region for this profile.
# region=eu-west-1

2. "export AWS_AWS_CREDENTIAL_FILE=/path/to/aws-credentials.txt" ve 
    "export BOTO_CONFIG=/path/to/.boto" diyerek

dosya yollarını çevresel değişkenlerde belirtmeliyiz. "$ set" komutu ile kontrol edebilirsiniz.

Bağlantı kurma kısmı:

ipython ile oldukça hızlı şekilde deneyebilirsiniz.

>> import boto.ec2 

>> regions = boto.ec2.regions () ,

>> regions
[RegionInfo:us-east-1,
 RegionInfo:cn-north-1,
 RegionInfo:ap-northeast-1,
 RegionInfo:eu-west-1,
 RegionInfo:ap-southeast-1,
 RegionInfo:ap-southeast-2,
 RegionInfo:us-west-2,
 RegionInfo:us-gov-west-1,
 RegionInfo:us-west-1,
 RegionInfo:sa-east-1]


>> eu = regions[3]
>> eu_conn = eu.connect()

Kütüphaneyi ekledikten sonra, ilk satırda ec2 bağlantı alanlarının listesini regions değişkeninde tutuyoruz. 3. satırda, regions[3] teki alanı,  bağlanmak için bir değişkene atıyoruz. Son satırda ise connect() ile bağlantı gerçekleşiyor. 

ipython'da tab tuşu ile fazlasıyla modül olduğunu görebilirsiniz.  Örneğin benim işime yarayanlardan biri get_all_instances modülüydü. Alt satırda; i_id değişkeni, bağlandığı alandaki makinalardan birisine ait mi diye kontrol yapılabiliyor.

eu_conn.get_all_instances(filters={'instance-id' : i_id})

 Kısaca Boto'nun ana işlevi böyle. Tabiki daha çok karıştırmak gerektiğini düşünüyorum. Şimdilik görüşmek üzere..




Metallica, Linus Torvalds ve Küçük Başlangıçlar


Geçen hafta Metallica konserindeydim, soranlar için özetle söyleyim; süper bir konserdi. Konseri üst noktalara taşıyan sadece Metallica’nın performansı değildi; ışığından sahnesine, ses sisteminden görüntü sistemine kadar her biri bu şovu üst seviyelere taşımıştı. Konser çıkışı güvenlik barikatlarını kaldıran nakliyat kamyonunu görünce aklıma şu geldi; “aslında bütün bunlar sadece Lars Ulrich’in bir gazeteye verdiği ilanla başladı”. Aslında Devamını Oku […]

20 July 2014

İnterneti Yasaklamanın Dayanılmaz Cazibesi


Bu yazı ülkemizdeki İnternet yasaklarının kısa tarihinin bireysel bir değerlendirmesidir.

Ülkemizde İnternet 12 nisan 1993′de üniversitelerin önerdiği DPT’nin finansını sağladığı tr-net projesi olarak başladı. Türk Telekom ve genel olarak devlet İnternetin pek farkında değildi. İlk yıllar büyük kurumlar, tek kişilik hesab ile yetiniyordu. 1995′e gelince, bir yandan özel sektör ilgilenmeye başlamıştı, öte yandan devlet internetin farkına vardı. Ankara’da yapılan bir toplantıda interneti kısıtlamak/kapatmak fikri tartışıldı. Ama, o toplantıda internetin olumlu olduğuna devlet ikna edildi.

1995 yılında Turnet ihalesi yapıldı, 1996 sonbaharında çalışmaya başladı. 1999-2000 de TTnet calışmaya başladı. 2000 yılında bir genç kızımız satanistlerin etkisiyle intihar etti. Zamanın Milli Eğitim Bakanı “İnternet’den evlere lağım akıyor” dedi. Toplum İnterneti kapatmayı tartıştı. İnterneti savununlar “Trafik kazaları nedeniyle yolları trafiğe kapatmıyoruz”, “Bıçakla insan yaralanabilir ama bıçağı yasaklamıyıroz” örneklerini veriyordu.

RTÜK Tokadı

İnternet üzerine bir sonraki saldırı RTÜK yasası TBMM de görüşülürken geldi. İnternet Medyası oluşmaya ve muhalefet etmeye başlamıştı. Anayasa komisyonundaki görüşmeler sırasında İnterneti ilgilendiren, endişe verici şu 2 ifade vardı. RTÜK yasası taslağındaki “Her türlü teknoloji ile ve her tür iletişim ortamında yapılacak yayın ve hizmetlerin usul ve esasları … RTÜK tarafından denetlenir” ve basın yasasına eklenmek istenilen “ Bu kanun hükümleri bilişim teknolojileri ve internet ortamında sayfa açılması veya elektronik gazete, elektronik bülten vb. suretiyle yayınlanan her türlü yazı, resim, işaret, sesli veya sessiz görüntü, ileti ve benzerleri hakkında da uygulanır.” Bu en basitinden “İnternetde basın kanuna tabidir” anlamında idi. O an TBMM de TBD öncülüğünde kurulan Bilgi Grubu vardı. Bilgi Grubu ve Bilişim STK’larına hiç bir görüş sorma gereği duymadan, madde taslağa ekledi. İnternet camiası bunun ne anlama geldiğini geç farketti. Basın kanuna bağlı yayınlar için, i) izin almak, en azından yayına ilişkin bildirimde bulunmak, ii) her nüshanın 2 kopyasının Cumhuriyet Savcılığına iletmek gerekiyor. Bu farkedilince kıyamet koptu. Neyin kapsam içinde olacağı açık değildi: e-mektup, chat/ irc, forum ve e-posta listelerde, blog ve weblerde yazılanlar ve ucu açık benzerleri. O zaman sosyal ağlar henüz yeteri kadar gelişmemişti. Her ileti, her mesajı, her web sayfası değişikliğini savcılığına nasıl iletecektiniz ? Savcılığında buna uygun bir altyapısı olmadığı da açıktı. İnternet camiasının isyan etmesi sonucunda basın yasası kısmı basitleştirildi, sadece hakaretle ilgili kısım kaldı. Yasa Cumhurbaşkanınca meclise bir daha görüşmek üzere geri gönderildi, 1 yıl sonra aynen geçirildi. Basın kanuna eklenen madde ise 59. Hükümetçe kaldırıldı. Bu maddeden sadece 1 mahkumiyet oldu. Ama, 2 yıl İnternet camiası bu yasayla meşgul oldu. Ama RTÜK’le ilgili madde duruyor. RTÜK İnternet üzerindeki radyo-TV yayınları izlemeye ve kaydetmeye devam ediyor.

Fiili Yasaklar Başlıyor!

2001-2002 yıllarında Askeriyedeki yolsuzlukları açıklama iddiasıyla yolsuzluk.com webi ortaya çıktı. Türk Hukuk sisteminde bir webi kapatma, erişime engelleme için bir düzenleme yoktu. Gerçi 1991′te Fransız ceza hukukuna giren Bilişim Suçları mevzuatı, Sulhi Dönmezer hocanın inisiyatifiyle Ceza Yasasına 525. madde olarak girmişti. Ama, bu bilişim sistemine girme, verileri değiştirme, zarar verme gibi konuları kapsıyordu. Henüz, İnternet Çağına ayak uydurmamıştı. Bilgisayar yerine de “verileri otomatik işleme tabi tutan makine ” ifadesi kullanılmıştı. ATM makineleri, cine5 modemleri, telefon sistemlerine ilişkin suçlar bu madde kapsamında yargılanıyordu. Yolsuzluk.com Genel Kurmay mahkemesinin kararı ile yasaklandı. O yıllarda webteki bir şikayet üzerine web hizmeti veren servis sağlayıcı şirketlerin genel müdürlerinin apar topar gözaltına alındığı oluyordu. 2004 Ceza Yasasında Bilişim Suçları konusunda oldukca kapsamlı bir düzenleme yapıldı. Türkiye Siber Suç Sözleşmesi çalışmalarına katılmış, ama bazı çekincelerle imzalamaktan kaçınmıştı. Bu çekinceleri ve gerekçesi ise kamuoyuna açıklanmadı. (Uzun yıllar sonra Sözleşmeyi imzaladık ama, sözleşme 2 yıl kadar mecliste beklediten sonra twitter yasağı sonrasında muhalefetin önçülüğünde onaylandı.) Ceza yasası sırasında Bilişim STK’ları olarak ilgili maddeler üzerinde çalıştık, ve TBMM deki ilgili komisyona ilettik. Önerimizin bazı kısımları kabul görmedi, ama bunları tartışmaya fırsat bulmadan taslak yasalaştı. Daha sonra CMUK – Ceza Mahkemeleri Usul Kanunu gündeme geldi, ve jet hızıyla yasalaştı. Bizim STK’lar olarak bir öneri götürme şansımız bile olmadı. Adalet Bakanlığı İnternete ilişkin düzenleme gereğini hissetti ve bir “İnternet Yasası” hazırlamak istedi. Bu amaçla, bir Komisyon kurmaya girişti. Ama, ilk yıl bu komisyon çalışmaya başlamadı. İkinci yıl yeniden bir komisyon kuruldu. Komisyon Başkanı bir Bilgisayar Mühendisliği hocası oldu. Üniversitelerin Hukuk Fakültelerinden uzmanlar, güvenlik kuvvetleri temsilcileri, bakanlık temsilcileri ağırlıklı bir komisyon oluşturuldu. Özel sektör ve Sivil Toplum temsilcileri yok denecek kadar azdı. Servis sağlayıcıları temsilcisi ısrarlar üzerine son dönemde komisyona katıldı. “Bilişim Ağı Hizmetlerinin Düzenlenmesi ve Bilişim Suçları Kanun Tasarısı” hazırlandı, kamuoyuna sunuldu, gelen öneriler büyük ölçüde değerlendirildi. Üzerinde çalışılması gereken az bir nokta kalmıştı.

Sansür Yasası 5651 Şapkadan Çıkıyor!

2006 sonbaharında Emniyet teşkilatında ilk “Bilişim Dairesi” İstanbulda açıldı. Daha önce Bilişim ekipleri Kaçakçılık Dairesi içinde idi. İstanbul Bilişim Dairesi elindeki tüm birikmiş cocuk pornosu dosyalarını basına servis etti. Basınımız her zamanki gibi polisin sunduğu dosyaları olduğu gibi yayınlandı. Ülkemizde ciddi bir çocuk pornosu salgını varmış algısı yaratıldı. Bu arada bir kaç tane çocuk taciz olayı da yaşandı. Başbakan bu sorunun çözülmesi talimatını verdi. Bu arada kamuoyunu hazırlamak amacıyla Ankara’da bir “Temiz İnternet” etkinliği yapıldı. Etkinliğin logosu çamaşır ipine asılmış 3 tane W harfi idi. Yıkanmış temizlenmiş İnterneti temsil ediyordu. Adalet Bakanlığı tasarısı kesip biçilerek, daha dar kapsamlı bir Sansür Yasası hedeflendi. Adalet Bakanlığı ve Bakanlık taslağını hazırlayan komisyon deve dışı bırakıldı, Ulaştırma Bakanlığı, esas olarak “zararlı “ içeriğe erişimi engelleyen bir taslak hazırladı. Söylem “Kirli Bilgiyi temizleyip öyle sunmaktı”. Taslak kamuoyu önünde tartışılmadan Meclise geldi. Mecliste biraz yumuşatıldı. Ve Genel Kurulda 1 saat bile görüşülmeden, ciddi bir itiraz olmadan geçti. Çocuk pornosu etrafında öyle bir hava yaratıldı ki, sivil toplum kuruluşlarının feryadına rağmen, ne Cumhurbaşkanı yasayı meclise geri gönderebildi, ne de muhalefet Anayasa Mahkemesine götürebildi.

5651 Katalog suçları Ceza yasası ve Atatürk Kanunu yoluyla tanımladı. Kapsam Katalog suçlar ile sınırlı idi. “ Uyar Kaldır”ı tanımladı. Esas olarak Erişimi Engellemeyi tanımladı. Web sitelerini, tanımsız olarak, yurtiçi ve yurt dışı olarak ayırdı. Yurtdışındaki webler için TIB’e resen yasaklama yetkisi verildi. TIB uygun bulmadığı bir içerik nedeniyle, hiç bir uyarı yapmadan, hiç bir diyalog olmadan, savunma almadan, bilirkişi değerlendirmesi olmadan bir webi yasaklama yetkisine sahip oldu. Şu anda yasaklanan 48 bin webin büyük çoğunluğu bu şekilde yasaklanmıştır. Yurt içindeki weblerde esas olarak mahkemeler yetkilidir. Acil durumlarda Cumhuriyet savcıları, çocuk istismarı, fuhuş konularında TIB mahkeme kararı olmadan erişimi engelleme kararı verebiliyor, ancak 24 saat içinde mahkemeye başvurmak zorunda idiler.

YouTube Trajedisi

Youtube yasağı ülkemizdeki internetin politikalarının turnosul kağıdı olarak görülebilir. Bir kac defa değişik sürelerle kapatıldı. En uzunu yaklaşık 2.5 yıl sürdü: 5 mayıs 2008-31 ekim 2010. 2014 yasağı bile Anayasa Mahkemesi kararından bir kaç gün sonra ancak kaldırılabildi. İlk yasak Yunanlı bir gencin Atatürk aleyhine bir bir video için alınmıştı. Hürriyet ve Sabah gazeteleri bir kampanya ile kamuoyunun dikkatine getirmişti. Bunun üzerine savcılık bir CD’ye videoyu kopyalayıp mahkemeye yasaklama talebiyle gitti. Mahkeme, videoyu youtube üzerinden doğrulamak gereği duymadan yasaklama kararı verdi. Gerçi, mahkemenin böyle bir olanağı yoktu: çünkü UYAP üzerinden youtube ve benzeri sosyal ağlara erişim engellenmişti. Bu karar öncesinde Youtube ile bir temas çabasına girilmedi. Video kısa bir süre içinde kaldırıldı ve youtube açıldı. Bir kaç sonra, 10 adet Atatürk aleyhine video nedeniyle Ankara 1 nolu Sulh Ceza Mahkemesinin youtube için erişimin engellenmesi kararı çıktı. Bu karar öncesinde ve sonrasında başka mahkemelerin de youtube’u yasaklama kararı vardı. Ama, en uzun soluklu olan Ankara 1. sulh ceza mahkemesin kararı oldu.

Youtube 10 videonun yarıdan fazlasını anında kaldırdı. Geri kalanlar için “bunlar ABD’de ifade özgürlüğü sınırları içinde” anlamında bir gerekçeyle onları kaldırmadı. Ama, bugün twitter’inde yaptığı gibi bu videoları Türkiye’den izleyicilere göstermeme yolunu izledi. Bu videolara Türkiyeden yapılan bağlantılarda “Bu videoyu fikri haklar nedeniyle sizin ülkenizde göstermiyoruz” şeklinde bir açıklama sunuldu. Mahkeme kararına ve Türkiye’nin talebine bir atıf yoktu. Sanki, videonun sahibi Türkiye’den gösterilmesine izin vermiyormuş gibi davranıldı.

Sakıncalı bulunan videoların Türkiye’den izlenememesi üzerine Mahkemeye erişim yasağının kaldırılmasını biz INETD olarak, İnsan hakları savunucusu hukukcular Yaman Akdeniz-Kerem Altıparmak ve youtube avukatları itiraz ettik. Mahkeme söz konusu videoların Türkiye dışından erişebildiği nedeniyle başvurmuzu reddetti, ilgili videoların bütün dünya için yasaklamasını isteğini sürdürdü. Bir başka deyişle mahkemelerimiz yetkisinin tüm dünya olduğunu düşünüyor.
Mahkeme, otomatik olarak, kararını bir üst mahkemeye iletip, onunda kararı onaylamasının yolunu açtı. Bizim, üst mahkemeye yeni belge ve argüman sunmamızın önü kesilmiş oldu.

Verilen karar bir tedbir kararı olduğu için iç yargı yolu bitmişti. Yargıtaya taşıma yolu kapanmıştı. Bunun üzerine biz INETD olarak AIHM’e başvurduk. AİHM henüz bize cevap vermedi. Daha sonra sites.google.com ve muzik weblerin yasaklanması (last.fm) AIHM’e taşındı. Sites.google.com konusunda Yıldıırm-Türkiye kararıyla, 5651′in AIHS’nin ifade özgürlüğü maddesine aykırı olduğuna karar verdi. Türkiye bu kararı görmezden geldi. Yeniden düzenlenen 5651 AİHM kararını göz ardı etti.

Mahkemelerin bir video yada bir sayfa nedeniyle tüm webin; bazen alanadı temelli bazenda hem alanadı temelli hemde IP temelli yasaklaması, orantısız cezalandırma olduğu gerekçesiyle çok eleştirildi. Bu eleştiriye zaman zaman zamanın Ulaştırma Bakanı Binali Yıldırım, ve BTK başkanı Tayfun Acarer de katıldı, açıkça mahkemeleri eleştirdikleri oldu. Mahkemelerden, sadece ilgili nesneyi yasaklama kararı çıktığı oldu. BTK’nın çıkardığı yönetmelik URL temelli erişimi engelemeye izin vermiyordu. Ya alan adı bozulması yoluyla o alan adını “Bu sayfaya giriş şu mahkeme kararıyla yasaklanmıştır” içeren sayfaya yönlendiriyordu, ya da o IP’ye giden istekleri çöpe atıyordu.
Pek çok halde mahkemeler ikisini birden yapıyordu: yani hem alanadı hemde IP temelli yasaklama oluyordu. Hatta, youtube, blogger vs örneklerinde olduğu gibi o alan adına ait tüm IP’leri yasaklama yoluna gidiyorlardı. LigTV’nin korsan yayınlarını engellemek isterken, tüm Google servislerine erişim bu nedenle aksamıştı. Yasakların en başında biz, bazı STK’ler, tüm webin yasaklanması yerine URL yasaklanması önermiştik. BTK bunu tartışmadı bile.

BTK ve Ulaştırma Bakanlığının bir taraftan tüm webin yasaklanmasını eleştirmesi, öte yandan kendi çıkardıkları yönetmeliği değiştirmeye yanaşmaması dikkat cekici. Kamu oyunu kazanmaya yönelik demeçler verilirken, sorunun çözümü konusunda bir şey yapmak söz konusu olmadı. Benzeri bir konu, youtube yasağında oluştu. Youtube, sakıncalı bulunan bazı videoları kaldırmış, geri kalanı Türkiye’ye göstermiyordu. Bir başka deyişle URL temelli filtreleme yapıyordu. Bilindiği gibi o dönem, yurttaşlarımız, DNS değiştirme ve başka yollarla youtube.com’a erişiyordu. Başbakanımızda “Ben Youtube’a giriyorum, sizde girin” demişti. Mahkemenin, ülkeye zarar veren uygulmasını geçersiz kılmak için, ilgili yönetmeliği, en fazlası 1 maddelik bir yasa değişikliği ile çözülebilecek bir konu konusunda hiç bir çabaya girilmedi.

Onun yerine konu egemenlik ve vergi boyutuna taşındı. Youtube’un burada bir ofis açması, bakanlığa gerekli saygıyı göstermesi, sürekli iletişim içinde olması ve vergi vermesi gerektiği söylendi. Youtube yasağının bir mahkeme kararıyla oluştuğu, yukarıdaki argumanların yasakla bir ilgisi olmadığı pek dikkati çekmedi. Türk mevzuatında, vergi borcu nedeniyle, bir webin kapatılması mümkün değil. Ama, Cumhurbaşkanı, Columbia Üniversitesinde bir soruya verdiği cevapta, Youtube’un ifade özgürlüğü kapsamında kapanmadığını, vergi nedeniyle kapandığını söyledi. BTK, bilerek Cumhurbaşkanını yanılttı.

Youtube Nasıl Açıldı ?

Youtube’un açılması, ancak bizim bulacağımız bir “hülle” olayıdır. Zamanın İnternet Kurulu, bu videolarda kullanılan Atatürk fotoğrafları nedeniyle bu videoların teklif hakkının Türkiye adına kendilerinde olduğu saptadı, ve Almanya’daki Türklere ait bir firmaya fikri hatları devretti. Bunun üzerine firma, youtube’a bu videoların telif hakkının kendinde olduğunu ve bu videoları youtube’tan kaldırmak istediğini söyledi. Youtube hemen ilgili videoları kaldırdı. Bunun üzerine Ankara Cumhuriyet savcılığı bunu bilirkişi yoluyla tespit ettirdi ve 5651 uyarınca yasak kararının geçersiz olduğu ilan etti. Daha sonra, Youtube Almanyadaki firmaya söz konusu vidoların fikri hakkını görmek istedi. Ve geçerli bir belge olmadığı için, videoları yerine koydu. Videolar açısından yasağın kalkması öncesi ve sonrasında bir fark yok. Hala Türkiye’deki IP’lere o videolar gösterilmiyor. Böylece, ülkemiz, düzgün bir şekilde ilgili yasal mevzuatı düzeltmek yerine gecekondu bir çözüme gitti.

Filtreli İnternet Maceramız

BTK 2011 yılında Avrupa’daki “Safer İnternet”i örnek almak bahanesiyle bir yönetmelik çıkardı. Taslak, ilgili sivil toplum kuruluşlarını dışlayarak oluşmuştu. Çelişkili maddeler içeriyordu. Dört profil tanımlıyordu: standart, cocuk, aile ve yerli. Her kullanıcı bu profillerden birini seçecekti, aksi belitilmeyen herkes standart profilde olacaktı. Standart profil konusunda kafalar karışıktı: yurttaşlar ciddi bir filtreleme yapılacağı düşüncesindeydi, ama BTK ek filtreleme olmayacağını söylüyordu. Bence, en ilginç olanı yerli profili idi: kısaca Türkiye İntraneti ile sınırlı idi. Bir başka deyişle, google, yahoo, amazon, wikipedia gibi Türkiye dışının kapandığı bir profil idi. Bu İnterneti hiç anlamamış, çağın dışında kalmış bir bakış açısının ürünüydü. Ülkede büyük bir tepki oluştu. Bir yandan hukuksal mücadele yolunda danıştaya dava açıldı, öte yandan tepki mitingler şeklinde sokağa taşındı. Sivil toplum örgütlerinden atik davranan girişimci yurttaşlar, büyük ölçüde facebook’u kullanarak, ülkenin kalburüstü şehirlerinde mitingler düzenledi. Daha önce, Sivil toplum Örgütleri öncülüğünde Sansüre Karşı bir Platform oluşmuştu. Bu Platform öncülüğünde ses getiren bir yürüyüş olmuştu. Katılım 20 bin civarında idi. Filtre karşıtı mitingler 10 kadar şehirde yapıldı. İstanbul da yapılan, İnternet konusunda yapılan dünyadaki en büyük miting oldu: 150 bin civarında katılım oldu.
Artan baskılar sonucunda yönetmelik değiştirildi: standart ve yerli profil kaldırıldı, geriye çocuk ve aile profili kaldırıldı ve uygulama bir kaç ay ertelendi. Bu değişiklik sonucunda kamu oyu tepkisi sönümsedi. Bazı Sivil Toplum Örgütleri eleştirmeye devam ediyorlar. Aile profili bir kara listeden oluşuyor; buralara girilemez. Çocuk profili ise bir beyaz listeden oluşuyor: sadece buralara girilebilir.
Bu listelerin oluşmasında ilkeleri belirlemek için bir kurul oluşturuldu. Bu listenin nasıl oluştuğu, içinde kimler olduğu kamuoyundan saklandı. Liste üyeleri çok sonra açıklandı. Kurul ilkeler belirledi, ama uygulamayı BTK/TIB yaptı. Bu listeler oluşturulurken her hangi bir saydamlık ve katılımcılık yok. “ihbarweb” üzeriden şikayet etmek serbest tabii. Bu listelerde kaç web olduğu bilgisi devlet sırrı. Ama, web üzerinden bir alan adının yasaklanaıp yasaklanmadığı sorgulamak mümkün. Bir defada en fazla 10 sorgu yapabilirsiniz. 3 yıl sonunda 1 milyon civarında filtreli aboneye ulaşıldığı ilan edildi . Abone servis sağlayıcı webi üzerinden profil değiştirebilir, çıkabilir. Bu hizmet için ek ücret alınmıyor. Buradaki temel hata, yurttaşa ya hep ya hiç seçeneğinin sunulması ve listenin devlet tarafından belirlenmesidir. Yurttaşın, kendi ailesi için bir filtre koyması en doğal hakkıdır. Burada ciddi bir tehlike, ailelere sahte bir güvenlik hissi verilmesidir. Çocuk filtresi, çocukların bilinçlenme çabalarını engellememeli, ve internete ilişkin güvenlik tedbirlerini göz ardı edilmesine neden olmamalıdır. Yutttaşın, filtre içeriğini değiştirebilme, ekleme ve çıkarma hakkını korumalıdır. Yaklaşık 1 milyar web içinden beyaz ve kara listeyi kim hangi kadroyla, hangi bilimsel yetkinlikle, hangi hukuksal yetkiyle hazırlayabilir?

Yeni 5651 Ne Getirdi?

5651 de son yapılan değişikliklerin önemli bir amacının tüm webin bir kaç URL yüzünden kapatılmasını engellemek olduğu Bakanlık ve BTK tarafından savunulmuştu. Çözüm, sadece sakıncalı bulunan URL’lere erişimi engellemek, webin geri kalanını rahat bırakmaktı. Değişiklikte bunun dışında Erişim Sağlayıcıları Birliği, TİB başkanına bazı hallerde yasaklama yetkisi vermek, çeşitli düzeyde log tutmak, ve kişisel haklar bahanesiyle yargısız infaz yolunun açılması olarak özetlenebilir.

Büyük gürültülerle ilan edilen URL temelli yasaklama uygulanamadı. BTK ve TIB’deki uzmanlar, weblerin çoğunun HTTPS protokolüne geçtiğini farkedemişler. HTTPS tüm trafiği simetrik sifrelemeyle izlenemez hale getirir. Bu temel kriptoloji bilgileri arasındadır. Sunucu sisteminin işbirliği olmadan https trafiğini izlemek mümkün değildir. BTK ve onun baskısıyla/teşvikiyle Türk Telekom https trafiğini de izleyebilecek donanım ve yazılım alıyor haberi basında çıktı. Yapılmaya çalışılan tüm internet tarfigini izlemek, analiz etmek, sınıflandırmak ve bunu çeşitli siyasi, adli ve ticari amaçlarla kullanmaktır. Açıktır ki, bu Anayasal bir suçtur, temel insan nhaklarının ihlalidir ve evrensel hukukun ayaklar altına alınmasıdır.

5651′in getirdiği bir yenilik ise muğlak ifadelerle servis sağlayıcıları yasal olmayan yollara iterek, yasaklama kararlarının her ne pahasına olursa olsun uygulanmasını istemesidir. Alternatif erişim yollarının engellemesi, mahkeme kararı olmadan kişisel içeriği değerlendirip yasaklaması gibi yükümlülükler bir hukuk devletinde kabul edilebilecek şeyler değil.

Twitter ve Youtube Yasakları

Başbakanımız her ne kadar aktif bir facebook ve twitter kullanıcısı gözüksede, facebook, twitter ve youtube’u kısaca sosyal medyayı “insanlığın başbelası” olarak görüyor. Öte yandan AKP, sosyal medyayı en iyi kullanmaktan kıvanç duymakta, geniş bir kadroyu sosyal ağlarda etkin olmakla görevlendirdiği bilinmektedir. Bu çelişkiye dikkati çekmekle yetinelim.

Başbakanımızın, “Twitter miviterin kökünü kazıyacağız” demeci üzerine BTK/TİB twitteri bir yolunu bulup kapattı. 2 mahkemenin 2 hesap hakkındaki kararı vardı, ama twitteri kapatma kararı yoktu. Kanun kuyucu tarafından kapatılan bir mahkeme, yetkisi olmadan twitterı kapatma kararı verdi. Yani, yetkili bir mahkemenin kararı olmadan, TIB yetki gaspıyla twitterı kapattı. Yasağı kaldırma taleplerine, bir mahkeme “yasaklama kararı olmadığı” şeklinde cevap verdi. Bir başka mahkeme, doğrudan yasaklamanın kaldırılması kararını verdi, TIB oralı olmadı. Twitter yasaklaması, 30 mart belediye seçimleri öncesinde gerçekleşmişti. TIB mahkeme kararını, 30 günlük itiraz süresi bahanesiyle uygulamadı. Seçimlerden sonra Anayasa Mahkemesi, ilgili AİHM kararalarına dayanarak, Kerem Altıparmak-Yaman Akdeniz ve benzeri bireysel başvurular üzerine kaldırdı. Bu arada Twitter yöneticileri ile yapılan görüşmeler sonucunda, zaman zaman mahkemelere itirazla birlikte, Türkiye’deki mahkeme kararlarından, cocuk pornosu ve nefret suçları gibi evrensel kabul görenler dışındakilere sadece Türkiye’den erişimi engelleme yoluna gittiler.

Dışışlerindeki bir konuşmanın kayıtlarının internetde yayınlanması ve bir kopyasının youtube konması üzerine, BTK youtube’a erişimi engelledi. Bir yandan ulusal güvenlik nedeniyle bir mahkemeden yasaklama kararı alındı. Ayrıca, youtube’de Atatürk aleyhine videolar olduğu webten ilan edildi. 5651 de ulusal güvenlik nedeniyle erişim enegelleme olanağı yoktu. Ama, yinede yasaklandı. Mahkemelerin yasak kararını kaldırması, yeniden koyması, yürütmeyi durdurma kararları yeterli olmayıp, Anayasa Mahkemesinin Youtube, Barolar Birliği ve bir çok bireysel başvuru üzere ifade özgürlüğü açısından yasağı kaldırması sonucunda erişime açılabildi.

İnternetden korunmak mı, yoksa İnternetle Büyümek mi ?

Ülkemizde İnterneti yasaklamak, çocukları korumak, yurttaşı korumak, ahlakı korumak, ulusal güvenliği korumak, kişilik haklarını korumak, ülkenin “milli çıkarlarını” korumak, değerlerimizi korumak gibi gerekçelerle, kolayca yapılabiliyor. Bu genelde savunma yapmadan, uzman görüşü olmadan, yani yargılama olmadan koruma tedbiri olarak yapılıyor. Bunların hemen hepsi hiç bir zaman bir yargılamayla devam etmiyor. Bunun önemli bir nedeni weblerin yurt dışında oluşu ve pratik olarak itiraz ve yargı yolunun zor ve masraflı oluşudur. Engelliweb’in verilerine göre bu yazının yazıldığı anda 49 bine yakın web kapalı idi. Dünyada 1 milyara yakın web olduğunu gözönüne alırsak, tüm “zararlı “ webleri belirmenin ne kadar zor olduğu açıktır. Çocuk pornosu, nefret söylemi gibi hemen bütün dünyanın uzlaştığı konuların dışında konularda devletin neyin zararlı, neyin iyi, neyin kötü olmasına karar vermesi demokratik değildir.

Devletin, cocuk pornosu ve nefret söylemi dışındaki konularda yapması gereken, yurttaşın neyin iyi neyin kötü olmasına karar vermesini sağlayacak ortamı oluşturarak, kendisinin kenara çekilmesidir. Bu, bilgilendirmek, bilinçlendirmek, gerekli yazılımların gelişmesini sağlamak, ücretsiz dağıtımı ve eğitimini sağlamakla başlanabilir. Devletin bu konularda listeler hazırlayıp uygulatması yanlıştır. Bunu uzman siivl toplum kuruluşlarına ve üniversitelere bırakmalıdır. Yazılımlar konusunda yarışmalar yapabilir, özgür yazılımları geliştirip, bunlar arasında rekabet yaratabilir.

Devletin asıl görevi, yurttaşların internetin zararlarından korumaktan çok, yurttaşın internetden yararlanması, kendini geliştirmesi, işini internete uyarlı hale getirmesi, toplumsal yaşama ve toplumsal denetime katılması, siyasete ve devlet yönetimine aktif bir yurttaş olarak katkı vermesi, sorgulayan ve katılımcı bir yurttaş olmasını sağlayacak, teşvik edecek tedbirler almasıdır. Tabii ki, yurttaşı, intenetden gelebilecek tehliklere karşı eğitmeli, uyarmalı, farkındalık yaratmalı, bu konularla ilgili kurumsal yapılar oluşturmalıdır. Daha da önemli olan, internetin gelişmesi, etkin kullanımı, ülke kalkınması, bireysel gelişim, toplumsal aktılım ve katılımcı demokrasi için çabaların öne çıkmasıdır. Sayısal bölünmenin önlenmesi, bunun için hem internetin kolay, ucuz, hızlı ve güvenli olması, öte yandan bilişim/bilgi/sosyal medya okuryazarlığının, başta ilkokullar olmak üzere, tüm yurttaşlara ulaştırılması önemlidir. Ülkenin Bilgi Toplumu çalışmalarının, ulusal bir strateji etafında, tüm paydaşların katılımı ile saydam bir şekilde açık ortamlarda tartıiılrak belirlenmesi, saydam bir şekilde hayata geçmesi, ve değerlendirilmesi önemlidir. Bunun için araştırma merkezleri, İnternet Enstitüleri kurulmalı; yıllık değerlendirme anketleri, konferanslar yapılmalıdır.

Ülkemiz, İnternetin marjinal problemleri içinde boğulmaktan kurtulmalı, ve internetin bu ülkeye sunduğu potansiyele odaklanmalıdır.

İnternet yaşamdır !



15 July 2014

Python Kullanarak E-mail Göndermek


Merhabalar, mail gönderme durumuyla stajda uğraştığım projede karşılaştım. Ters bir sonuç olduğunda, uyarı niteliğinde yetkili kişilere mail yollamam gerekiyordu. Python ile kolayca yapılabiliyormuş, ben de sizlerle paylaşmak istedim :)

"smtp" kütüphanesi kullanılarak birkaç satırda hallediliyor. SMTP (simple mail transfer protocol) posta sunucuları arasında e-posta göndermek için kullanılan yaygın bir protokol.

"import smtplib" diyerek smtp modülünü yüklemiş oluyoruz.

Önce, Gmail'in SMTP sunucusuna bağlantı kurulmalı. Bu bağlantı TLS veya SSL biriyle yapılabilir. Bu örnekte, STARTTLS bağlantısı (port 587) kullandık. Son olarak Gmail hesabı kimlik bilgilerini ekledik.
server = smtplib.SMTP( "smtp.gmail.com", 587 )
server.starttls()
server.login( '<gmail_address>', '<gmail_password>' ) 

Metin mesajı, mobil taşıyıcıların e-posta avantajlarından yararlanarak gönderiliyor.

Örneğin, T-Mobile numarasına kısa mesaj göndermek için <number>@tmomail.net, AT&T numarasına metin mesajı göndermek için, <number>@mms.att.net biçiminde kullanmalısınız.

Sonra, mesajı ekleyip python dosyasını çalıştırdığımızda mail atmış oluyoruz.
server.sendmail( '<from>', '<number>@tmomail.net', 'Hello!' ) 

Kolay gelsin :)

 
  


14 July 2014

adilga


Uluslararası İşçi ve İletişim Konferansı (LaborComm) [1], 2010 yılından bu yana Ankara Üniversitesi İletişim Fakültesi’nin [2] yürütücülüğünde düzenlenen ve bence oldukça önemli tartışmaların yürütüldüğü, dolu dolu geçen bir konferans. Bu yıl 5. kez düzenlendi. İlk kez geçen yıl dinleyici olarak katılabilmiştim LaborComm’a ve birçok oturumda epey bilgi edinmiş, tartışmalardan faydalanmıştım.

LaborComm 2014′ün teması, geçtiğimiz birkaç yılda dünyada ve Türkiye’de ortaya çıkan direniş hareketlerinin etrafında şekilleniyordu. Çağrı metninden [3] alıntılayacak olursam:

“Geçtiğimiz birkaç yıl tüm dünyada ve Türkiye’de toplumsal hareketlerin yükseldiği ve bu çerçevede iletişim ve iletişim ağlarının önem kazandığı bir dönem oldu. Egemenler interneti artık sadece yeni birikim stratejilerinin ayrılmaz bir parçası olarak değil, aynı zamanda kendi egemenliklerine yönelen büyük bir tehdit olarak da görmeye başladılar. Bu çerçevede internet üzerindeki izleme faaliyetlerinin giderek tırmandığı açığa çıkarken, internetin sınırlandırılmasına yönelik düzenlemeler de giderek daha fazla gündeme geliyor. Ancak diğer yandan internet üzerindeki görece özgür alanların sınırları genişliyor ve buralardaki iletişim ve örgütlenme kent meydanlarında somutlaşıyor. LaborComm 2014, bu alanda yaşanan deneyimlerin bilgisini üretmeyi ve ileriye dönük olarak emeğin ve iletişimin özgürleşim olanaklarını değerlendirmeyi amaçlamaktadır. Bunun yanı sıra düzenlenme amacına uygun olarak iletişim ve emeğin kesiştiği tüm alanlara ilişkin çalışmaları beklemektedir.”

Tahmin edilebileceği gibi, Gezi Direnişi ile ilgili epeyce bildiri vardı, programdan da görülebilir. Biz de, hem Gezi Direnişi’ni, hem de özgür yazılımı, özgür İnternet’i ve özgür iletişimi önemseyen 4 bilişim emekçisi (İzlem Gözükeleş, Taylan Özgür Yıldırım, Oktay Dursun ve ben) olarak bu yıl konferansta bir panel düzenlemeyi önerdik. Konferans yürütücüleri fikre olumlu yaklaştılar ve böylelikle konferansın kapanış oturumunu kapmış olduk. Oturum başkanımızın da şu an iletişim alanında akademik çalışmalarını yürüten ama özünde bizler gibi bilgisayar mühendisi olan Doç. Dr. Funda Başaran Özdemir olmasıyla biraz daha rahatladık :)

Panelimizin başlığını “Direniş Kendi İletişim Kanallarını Oluştururken; Özgürlük, Yazılım, İnternet ve Emekçiler” olarak belirledik, her birimiz konunun farklı birer boyutunu ele almaya çalıştığımız birer sunuş yaptık. Sunuşların ardından salondan gelen soru ve katkılarla da tartışmayı genişlettik. Hem bizlerin izlenimi, hem de panel sonrası dinleyicilerden gelen geri bildirimlere dayanarak söyleyebilirim ki güzel bir panel oldu.

Konferansın bildiri kitapçığı şu anda hazırlanma aşamasında. Önümüzdeki birkaç hafta içinde yayımlanmış olacak sanırım, konferans web sitesinden e-kitap olarak da indirilebilecek. Bizim paneldeki sunuşlarımız konferansın diğer oturumlarındaki gibi akademik bildiri niteliğinde değildi, ama yine de panelde konuşulanların da bildiri kitapçığında yer almasının güzel olacağını söylediler bize. Ben de toparlayabildiğim kadarıyla yaptığım sunuşu genel hatlarıyla kısa bir metinde aktarmaya çalıştım. Aşağıda o metni bulabilirsiniz.

Panelde ilk sunuşu ben yapmıştım ve özgür yazılımı neden bu kadar önemsediğimizi kısıtlı zamanda hızlı biçimde anlatmaya çalışmıştım. Yaptığım sunuşun içeriğinin büyük bir kısmı, bir süredir farklı etkinliklerde yaptığım “Her Yer Linux Her Yer Özgür Yazılım” sunumumla[4] çakışmakla birlikte, o sunumda yer verip burada anlatmadığım ve burada olup onda olmayan bazı kısımlar da var.

Özgür Yazılımı Neden Bu Kadar Çok Önemsiyoruz?

Richard Stallman’ın bundan yaklaşık 30 yıl önce başlattığı özgür yazılım hareketi, artık başladığı noktanın çok ilerisinde. İnternet’in sağladığı yayılma olanağının da katkısıyla bugün dünyanın her yerinde çeşitli özgür yazılımları geliştiren, yaygınlaştıran, yerelleştiren, paylaşan ve kullanan insanlar, şirketler ve hatta devletler bulunuyor. İnternet’e bağlı herhangi bir cihazı kullanan bir kişi, kendi kullandığı yazılımlar özel mülk yazılım olsa bile bağlandığı web sitesi özgür yazılımlar aracılığıyla hazırlandığı ve sunulduğu için dolaylı yoldan da olsa özgür yazılımları kullanmış oluyor. Teknik yeterlilikleri ve üstünlükleriyle özgür yazılımlar bilişim alanında kolaylıkla vazgeçilemeyecek bir yer edinmiş durumdalar.

Öte yandan, özgür yazılımı bu kadar çok önemsememizin ve her fırsatta öne çıkarmamızın sebebi sadece sunduğu teknik olanaklardan kaynaklanmıyor. Tarihçesi, ortaya çıkış gerekçeleri ve gelişim süreci ele alındığında özgür yazılım meselesi, teknik bir tartışma olmanın çok ötesinde, politik bir mesele olarak karşımızda duruyor. Özgür yazılım hareketini başlatan ve günümüzdeki en önemli temsilcilerinden biri olan Richard Stallman, çeşitli söyleşilerinde bu durumu şöyle dile getiriyor:

“Özgür yazılım, sadece teknik bir mesele değildir. Aynı zamanda etik, sosyal ve politik bir meseledir. Sadece bilişim alanında çalışanları değil, toplumun her kesimini ilgilendirir. Düşünce özgürlüğü, ifade özgürlüğü, kişisel bilgilerin gizliliği gibi konularla doğrudan ilgilidir. ”

Richard Stallman’ın çizdiği bu çerçeve, aslında epey geniş bir alanı tarifliyor olsa da, politik bir mesele olarak özgür yazılımı bireysel ve toplumsal özgürlükler bağlamında tartışmanın tek başına yeterli olmadığını düşünüyoruz. Elbette özgür yazılımların yazılım alanında üretici ve tüketiciler olarak bizlere sağladığı özgürlükler çok büyük önem taşıyor, özellikle de çokuluslu yazılım ve donanım tekelleri ile devletlerin bu özgürlüklerimize saldırılarını yoğunlaştırdıkları bir dönemde olduğumuzu göz önünde bulundurduğumuzda var gücümüzle savunmamız gereken bir mevkide bulunuyorlar. Fakat özgür yazılımı politik bir mesele olarak tartışırken, çok daha temelde olan ve aslında bu özgürlüklerin de kaynağını oluşturan, özgür yazılımların hem üretim hem de tüketim süreçlerini de doğrudan etkileyen bir noktayı ele almak istiyoruz: Kamusal mülkiyet. Eğer özgür yazılımlarla özel mülk yazılımları birbirinden net bir şekilde ayırt edebiliyorsak bunu sağlayan şey teknik özellikler değil, üretilen yazılımın ve kaynak kodunun mülkiyetinin kime ait olduğudur. Özgür yazılım hareketi, hem üretilen bir ürün olarak yazılımın, hem de o yazılımın üretilmesini sağlayan üretim aracı olarak kaynak kodlarının mülkiyetini topluma vermesiyle bir devrim yapmıştır. Yazılımın ve kaynak kodunun mülkiyetinin toplumsallaştırılması; yazılım geliştirme pratiklerinden paylaşım yöntemlerine, yazılımların çoğaltılma (kopyalanma) özgürlüğünden istenilen amaç doğrultusunda özelleştirilebilme ve kullanılabilme özgürlüğüne kadar tüm üretim ve tüketim süreçlerinin piyasa ekonomisi koşullarından bambaşka koşullarda şekillendirilebilmesine olanak sağlamıştır. Böylelikle hem bireysel ve toplumsal özgürlüklerimiz korunabilmiş, hem de özgür yazılımlar özel mülk yazılımlar karşısında birçok teknik üstünlüğe sahip olabilmişler ve yaygınlıklarını artırabilmişlerdir.

Politik bir mesele olarak özgür yazılımı ele alırken dikkate aldığımız önemli noktalardan bir başkasını da özgür yazılım hareketinin ortaya çıkış süreci bize anlatıyor. Bu nokta, özgür yazılım hareketinin, yazılımın metalaşmasına karşı geliştirilmiş bir hareket olmasıdır. 1970′li yıllara kadar, Richard Stallman’ın da aralarında bulunduğu yazılım geliştiriciler (hacker’lar) geliştirdikleri tüm yazılımları birbirleriyle paylaşmakta, böylelikle hem birbirlerinden öğrenmekte hem de çözülmüş bir sorunu tekrar çözmekle uğraşmak (“tekerleği yeniden keşfetmek”) zorunda kalmamaktadırlar. Yazılımların ticari olarak alınıp satılması yaygın değildir, bilişim alanında sadece donanım bir masraf kalemi olmaktadır. Ancak 1970′li yıllardan itibaren bu durum değişmeye başlar, yazılımın da parayla alınıp satılabileceği fikri yaygınlaşır ve birçok yazılım firması kurulur. Bunun yanı sıra, bu firmalar ürettikleri yazılımların kaynak kodlarını “ticari sır” oldukları gerekçesiyle paylaşmamaktadırlar. Bütün bunlara duyulan tepki, özgür yazılım hareketinin başlatılmasında tetikleyici olmuştur.

Özgür yazılım hareketinin uygulamaya koyduğu önemli özelliklerden birisi, hem kamusal mülkiyetle hem de hareketin metalaşma karşıtı niteliğiyle bağlantılı olan, “üretimde özgürlük, tüketimde eşitlik” ilkesidir. Özgür yazılımların mülkiyeti topluma ait olduğu için toplumun her bireyi özgür yazılımlar üzerinde aynı haklara sahiptir ve onları dilediği şekilde kullanma (tüketme) özgürlüğü vardır. Dolayısıyla tüketimde eşitlik sağlanmıştır. Öte yandan, yazılımı kullanma karşılığında bireylerden herhangi bir karşılık beklenmez. Üretim sürecine katılıp katılmama konusunda her birey kendisi karar verebilir ve üretime katılmayan bireyler, tüketim haklarını kaybetmezler; üretime katılan bireylerle hâlâ eşit tüketim hakkına sahip olurlar. Üretime katılmak isteyen bireyler ise bu özgürlüklerini istedikleri zaman kullanabilirler çünkü üretim aracı olan kaynak kodlarının mülkiyeti topluma aittir, onlar da bu kaynak kodlarını kullanarak istedikleri şekilde yazılım geliştirebilirler.

Özgür yazılım üzerine bugüne kadar yapılan sosyal araştırmaların bir kısmı, üretime katılan yani özgür yazılımları geliştiren ve diğer yollarla (çeviri, test, hata bildirimi vs.) bunlara katkı sağlayan bireylerin neden bu sürece katıldıkları sorusuna odaklanmıştır. Piyasa ekonomisi şartlarının geçerli olmadığı bir ortamda, bireyleri çalışmaya ve üretime yönlendiren sebepler birçok kez sorgulanmıştır. Bu araştırmalar sonucunda ortaya konan birkaç sonuca kısaca değinelim. Bunlardan biri, özgür yazılım toplulukları arasında bir “hediye ekonomisi” oluşmasıdır. Bir başka sonuç, bazı bireylerin “kendilerini kanıtlama” güdüsüyle üretim sürecine katıldıklarıdır; özgür yazılımlar kamusal alanda (İnternet) geliştirildiği için bu bireyler burada bireysel teknik becerilerini sergilemekte ve piyasa ekonomisinin geçerli olduğu yazılım geliştirme süreçlerinde (özel mülk yazılım üreten şirketlerde) iş bulma şanslarını artırmaktadırlar. Bir grup yazılım geliştirici ise, öğrenme ve merak güdülerini tatmin etmek amacıyla üretim sürecinde yer almaktadırlar; zihinsel emeğin ortaya konduğu yazılım geliştirme pratiğinde sıklıkla çeşitli “bulmaca”larla karşılaşılmakta, bireyler bu bulmacaları çözmekten zevk almaktadırlar. Tüm bunların yanı sıra, bazı bireyler de toplumsal çıkarları gözeterek özgür yazılımların geliştirilmesine katkı sağlamaktadırlar. Elbette saydığımız bu gruplar birbirlerinden homojen olarak ayrışmamakta, üretime katılan bir birey bu gerekçelerden birkaç tanesini sahiplenebilmektedir.

Özgür yazılımların geliştirilmesi aşamalarında kullanılmakta olan ve zamanla çeşitli gelişmeler göstermiş olan üretim pratikleri, ağırlıklı olarak meselenin teknik yönü ile ilgiliymiş gibi görünse de, esasen özgür yazılımın politik yanıyla doğrudan ilişkilidir. Özgür yazılımların tamamına yakını İnternet üzerinde, kamuya açık platformlarda geliştirilmektedir. Sadece geliştirilen yazılım ve yazılımın kaynak kodları değil, aynı zamanda tartışma ve karar alma süreçleri de kamusal erişime açık olarak yürütülmektedir. Bir özgür yazılımın geliştirilmesine katkı veren, yani üretim sürecine katılan bireyler, e-posta listesi ya da forum benzeri iletişim ortamlarında yazılım geliştirme süreci ile ilgili fikir alışverişinde bulunurlar ve bu iletişim ortamlarının arşivleri kamusal erişime açık olarak İnternet ortamında saklanır. Böylelikle üretim sürecine katılmayan bireyler de yürütülen tartışmaları izleyebilir, zaman zaman da çeşitli şekillerde kendi görüşlerini ifade edebilirler. Tüm bu özellikleriyle özgür yazılım geliştirme sürecinin oldukça verimli işleyen bir kolektif üretim süreci olduğu söylenebilir.

Özgür yazılımın, burada kısa kısa ele almaya çalıştığımız bu özellikleri, bu hareketin 30 yılı aşkın süredir adım adım ilerleyen ve büyük başarılar kazanan bir hareket olmasını sağlamıştır. Etkileri sadece bilişim alanıyla sınırlı kalmamış, özgür yazılımın başarısından etkilenen başka birçok alanda benzeri özellikleri taşıyan örnekler ortaya çıkmıştır. En basit ve akla gelen ilk örneği, özgür yazılım geliştirme sürecine benzer bir üretim süreciyle kolektif bilgi birikiminin oluşturulduğu Wikipedia projesidir. Benzer şekilde sinema, müzik, edebiyat gibi alanlarda çeşitli yansımaları olmasının yanı sıra, bilişim sistemlerinde kullanılan çeşitli donanımların kolektif biçimde üretilmesini ve bu alandaki tekellerin ortadan kaldırılmasını amaçlayan hareketler de ortaya çıkmaya başlamıştır.

Altını çizmeye çalıştığımız şekilde, özgür yazılım meselesi bir “politik mesele” olmayıp sadece bir “teknik mesele” olsaydı, tahminimizce şimdiye kadar çoktan sonlanmış bir durumda olurdu ve hepimiz özel mülk yazılımlara muhtaç olurduk. Bilişim ve iletişim teknolojileri hayatımızın her alanına nüfuz ederken, birer bilişim ve iletişim tüketicisi ve üreticisi olarak bugün sahip olduğumuz bazı bireysel ve toplumsal özgürlüklerimizi de çoktan kaybetmiş, ya da tıpkı Gezi Direnişi’nde olduğu gibi bunları savunmaya çalışıyor olabilirdik. Panelimizin ana konusuyla özgür yazılımın birbiriyle ne kadar içli dışlı olduğunu anlamak için, özgür yazılımı anlatırken sıklıkla kullandığımız bazı anahtar sözcüklere bitirirken değinmekte fayda var: “Özgürlük”, “Paylaşmak”, “Dayanışma”, “Kamusallılk”, “Kolektif üretim”, “Eşit tüketim”. Gezi Direnişi’ne baktığımızda, aynı anahtar sözcüklerin orada da meselenin kalbinde olduğunu görebiliyoruz.

adilga

[1] http://laborcomm.org/

[2] http://ilef.ankara.edu.tr/

[3] http://laborcomm.org/cagri-metni-2014/

[4] İlgilenenler LKD Seminer Çalışma Grubu sitesindeki Seminer Notları sayfasında bulabilirler:

http://seminer.linux.org.tr/seminer-notlari/




Android Cihazlarda Rom Değiştirmek


Androidli telefonlarda yüklü olarak gelen rom dışında istediğimiz başka romları kurmak da mümkün. En bilinen romlar ise cynmod, miyui, aokp, paranoid android. Rom chip üzerindeki kalıcı yazılımları oluşturur. Romu değiştirerek cihazın içeriğini baştan sonra değiştirmiş olabiliriz. Bu değişim işlemci ve bellek kullanımı, kısayolları, ekran kilidi gibi birçok özelliği değiştirebilir. Telefondan aldığımız verimi artırabilir azaltabilir.

Ben şimdiye kadar cynmod'u denedim. Cihazınıza uygun cynmod romlarını buradan bulabilirsiniz. Uygun .zip dosyasını indirdikten sonra telefona sdcard içerisine kopyalamalıyız. adb reboot recovery diyerek telefonu recovery modda açıp zip dosyası kurmayı seçerek .zip'in konumunu da belirtmeliyiz. Cynmod'u kurduktan sonra Google Play Store sistemden kalkıyor. Play Store'u kurmak için gapps paketini indirmeliyiz. Gapps paketini de telefona kopyalayıp yine recovery moddan açarak kurulumu gerçekleştirmeliyiz.

Cihazın kendi sahipleri dışında bir firmanın yayınladığı romlara custom rom deniliyor. Cihaza kurulabilecek resmi (offical) romlara ise stock rom deniliyor. Custom rom kurduktan sonra stock romu indirerek tekrar cihazı ilk günkü haline çevirebiliriz.

Genelde stock romların içerisinde bir kurulum betiği oluyor. Nexus cihazlar için stock romlara buradan ulaşabilirsiniz. Nexus-5 için hammerhead .tgz dosyası içerisinde flash-all.sh dosyası var. İndridiğimiz .tgz dosyasını bilgisayarda açmalıyız. Cihazı ise adb reboot bootloader şeklinde fastboot modundan açarak bu dosyayı bilgisayardan çalıştırıp kurulumu gerçekleştirebiliriz.



13 July 2014

Ngxtop: Gerçek zamanlı nginx log monitörleme aracı


Ngxtop, nginx web serverın loglarını gerçek zamanlı okuyarak, tanımlanan değişkenlere göre sitenize gelen sorguları hızlı ve kolay şekilde terminal üzerinden yorumlamanızı sağlayan bir programdır.

Python ile yazıldığından, python paketlerinin kurulumunda kullanılan pip aracı ile yada easy_install ile  kolayca kurulumunu yapabilirsiniz.

Ngxtop Kurulumu

Sisteminizde pip kurulu değil ise, ilk önce epel reposunda bulunan python-pip paketini kurmanız gerekiyor.

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install python-pip

Python-pip paketinin kurulumundan sonra artık pip komutu ile ngxtop programını kurabiliriz.

# pip install ngxtop

Easy_install ile kuracak iseniz, centos’un base reposunda bulunan python-setuptools paketini kurmanız gerekiyor.

# yum install python-setuptools
# easy_install ngxtop

Ngxtop Kullanımı

ngxtop [options]
ngxtop [options] (print|top|avg|sum) <var> ...
ngxtop info
ngxtop [options] query <query> ...

Bazı kullanım şeçeneklerine bakacak olursa,

  • -l <file> : Nginx access log dosyasının tam yolu ( full path )
  • -f <format> : Access log formatı ( default: combined )
  • –no-follow : ngxtop normalde mevcut log kayıtlarını dikkate almadan anlık olarak log dosyasına yeni yazılacak olan kayıtları dikkate alır. Bu seçeneği kullanarak, ngxtop mevcut log kayıtlarada bakarak çıktıyı vermesini söleriz.
  • -t <seconds> : güncelleme sıklığı
  • -n <number> : Gösterilecek satır sayısı. ( default değer 10 dur )
  • -o <var> :  Sonuçları sıralama kriteri ( default olarak count şeklindedir. )
  • -a <exp> …, –a <exp> : Çıktığı ortalama, max, min gibi seçenekler ile filtrelemenizi sağlar. ( exp: sum, avg, min, max  )
  • - v : Ayrıntılı çıktı verir.
  • -i <filter-expression> : Sadece filter ile eşleşen kayıtları işler.

Ngxtop ile kullanabileceğimiz  buil-in değişkenleri,

  • body_bytes_send
  • http_referer
  • http_user_agent
  • remote_addr
  • remote_user
  • request
  • status
  • time_local

Eğer nginx’i yum ile kurdu iseniz default olarak conf dosyası etc nin altına kurulduğu için ( /etc/nginx/nginx.conf ) ngxtop komutu verdiğinizde direk bu conf dosyasını okuyarak access log dosyasının yerini bulacaktır.

#ngxtop

Nginx’i elle derleyerek kurduysanız ve etc altına kurmadıysanız,  ngxtop access log dosyasının yerini bulamadığı için ( -l ) parametresi ile log dosyasının yerini göstermeniz gerekecektir.

# ngxtop -l /usr/local/nginx/log/access.log

Built-in değişkenlerini kullanarak çıktı elde etmek için,

# ngxtop print request http_user_agent remote_addr

# ngxtop top remote_addr

# ngxtop -i 'status == 404' print request status

Ngxtop’un en becerikli diğer bir özelliği ise Apache loglarını da yorumlayabilmesi. Apache loglarını yorumlayabilmesi için ngxtop’u aşağıdaki şekilde kullanmanız gerekiyor.

 # tail -f /var/log/httpd/access.log | ngxtop -f common

 



Android Cihaz Rootlamak


Android telefonlara birkaç farklı şekilde root (yetkili kullanıcı) hakları verebiliriz. Android cihazlarda root olmak ise unix temelli işletim sistemlerindeki süper kullanıcı ile aynı şey.

Telefonu farklı modlarda başlatabilmek için güç, ses kısma-açma gibi tuşlara farklı kombinasyonlarda basmamız gerekli. Bu kombinasyonlar telefonun marka-modeline göre değişebilir ve elimizi sürekli şöyle miydi, böyle miydi düşüncesiyle basılı tutmak biraz zor :). Bunun yerine "android-tools-adb" ve "android-tools-fastboot" paketlerini kurarak telefonu bilgisayardan yönetebiliriz.

Android cihazlara root hakları vermek marka-modele göre değişebilir. Bu konudaki araştırmaları telefonun marka-modeline göre yapmak daha iyi olabilir. Ben burada adb ile kurulumdan bahsedeceğim için modele göre pek değişeceğini sanmıyorum ancak söylemek gerekirse Nexus-5 cihaz üzerinde çalışıyorum.

Usb kabloyu bilgisayara usb debug modda ve geliştirici hakları ile bağlamalıyız. Geliştirici yetkisi root ile aynı şey değil. Bilgisayardan telefona gelecek dosyaları kabul ettiğimizi belirtmek gibi birkaç işlem için gerekli. Geliştirici haklarına "Ayarlar->Telefon Hakkında->" yolunu izleyip "İnşa Numarası"na 5-6 kere basarak elde edilir. Debug mod için ise "Ayarlar->Geliştirici Seçenekleri"nde usb debug modunu aktif etmeliyiz.

Adb ise bilgisayardan telefonu yönetmek için gerekli. Bilgisayarda "adb devices" yazarak makineye bağlı cihazları görebiliriz. "adb shell" ile telefona bağlanabiliriz. Makineye birkaç telefon bağlı ise hangi cihaza erişeceğimizi belirtmeliyiz. "adb shell" ile telefona eriştikten sonra bash komutları ile telefonu yönetebiliriz ancak kullanabildiğimiz komutlar çok kısıtlı. Komut çeşidini artırmak için telefona busybox'ı kurabiliriz (busybox kurulumu root haklarını gerektiriyor). adb pull ile dosyaları bilgisayara çekebilir, adb push ile telefondan bilgisayara dosya aktarabiliriz. Örneğin telefondaki data dizininin içerisini root hakları olmadan listeyemeyiz, adb ile telefona bağlıyken su yazarak komut satırında root yetkilerini alabiliriz. Adb'nin tam belgesine buradan ulaşabilirsiniz.

Fastboot ise telefonu güncellemek, farklı recovery .img dosyaları yüklemek, bootloaderı kiltleyip açmak için kullanılabilir. Fastbooot hakkında daha fazlası için buraya bakabilirsiniz.

Cwm Yükleme

Telefonda yedekleme yapma, bilgileri sıfırlama, kurulum yapma gibi işlemler için birkaç farklı araç var. Bunlardan biri Clock Work Recovery Mod (cwm). Cwm'yi kurmak için buradan bilgisayara .img dosyasını indirebiliriz. adb reboot bootloader ile telefonu fastboot modunda açarak fastboot flash recovery cwm.img şeklinde recovery modu kurmuş oluruz. Şuan cihaz fastboot modda olduğu için ses kısma tuşu ile recovery moda geçerek telefonu yeniden başlatmalıyız. Böylece cwm'yi recovery mod aracı olarak yüklemiş olduk.

Root Hakları Verme

Buradan superSu.zip dosyasını telefona kopyalayıp, telefonu adb reboot recovery şeklinde recovery modda açarak install from zip'i seçmeliyiz. .zip'i kopyaladığımız konuma gidip dosyayı seçersek kurulum tamamlanmış olacak ve aşağıdakine benzer bir çıktı görülecek. Eğer .zip'i sdcarda kopyaladıysak sdcard'ı seçtikten sonra o/, legacy/, obb/ dizinlerinden o/ olan dizini seçmeliyiz. Bu şekilde kurulum tamamlanmış oldu.


İndirdiğimiz .zip dosyasını incelersek içinde SuperSu.apk'sı dışında betikler var, bu betiklerle gereken ayarları yapıp, .apk'yı yüklemeyi gerçekleştiriyor.

Root yetkisi verdiğimizi anlamak için SuperSu uygulaması yüklenmiş mi diye bakmak yeterlidir. Her zaman Supersu .apk'sının sistemde var olması rootlamanın başarılı bir şekilde tamanlanmış olduğu anlamına gelmiyor. Bu yüzden daha iyi bir yöntem ise adb ile telefona bağlıyken su yazınca root hakları veriliyorsa işlem sorunsuz tamamlanmış demektir.

11 July 2014

Hangi Masaüstü Ne Kadar Türkçe Konuşuyor? -6-


Malum yazılım çevirisi hiç bitmeyen bir süreç. Tamamen gönüllülerce sürdürülen bu işin yaygın etkisi çok ama sürdürülmesi oldukça güç. Özellikle aktif olarak geliştirilen yazılımlarda bir seviyeye getirilen çeviri oranı eğer güncellenmezse hızlıca aşağılara düşebiliyor.

Son bir yıldır çok az vakit ayırabildim çeviri işine. Neyse lafı uzatmayayım, masaüstü ortamları çevirilerde durumumuz şöyle:

KDE: Geçen yıl %84 olan çeviri oranı aynı yerde yine %84,
GNOME: Geçen yıl %80 olan çeviri oranı %75 civarında,
LXDE: Geçen yıl %89'a düştüğünü yazdığım çeviri oranı yeniden %100,
Enlightenment: Aradan geçen bir yılda büyük bir sıçramayla %59'dan %90'a yükselmiş,
Fluxbox: Yeni sürüm çıkarmayan Fluxbox'ta durum aynı %100,
XFCE: Bu yıl çok çalışan ekip çeviri oranını %69'dan %98'e çıkarmış.

LibreOffice de yeni sürümü öncesi arayüzde %99.5, yardım içeriğinde ise %96 çeviri oranını yakalamış durumda.

Büyük özverilerle çalışan çeviri ekiplerini tebrik ediyorum. Katkı vermek isteyen herkesi bekleriz.

09 July 2014

adilga


Bilgisayar başında uzun saatler geçirenlerin çeşitli sağlık problemleriyle karşılaştıkları ortada. Sırt, bel rahatsızlıklarından tutun da göz sağlığının bozulmasına kadar pek çok olumsuz etkisi var bilgisayar başında geçirilen uzun saatlerin.

Bugüne kadar bunlarla ilgili pek çok yazı okudum, hemen hemen hepsi, belirli aralıklarla çeşitli egzersizler yapmayı öneriyor. Fakat okuduğunuz uzun bir makaleye yahut binlerce satırlık kodlara gömüldüğünüz zaman çoğunlukla bunlar aklınıza gelmiyor. Bu durum için de çeşitli çözümler üretilmiş tabii, birtakım uygulamalar, belirli aralıklarla size bu egzersizleri hatırlatabiliyor. Mesela RSIBreak[1] adlı uygulamayı kullanmıştım 3-4 yıl önce, belirli aralıklarla bazı egzersizleri hatırlatan küçük, güzel bir uygulama. Bazı dağıtımların paket depolarında bulunuyor, kurup deneyebilirsiniz.

RSIBreak uygulamasının bir süre sonra beni rahatsız eden iki yanını fark ettim:
1) Uyarıları ekran aracılığıyla yapıyor. Odaklanıp bir yazıyı okurken ekranın bir köşesinden çıkan uyarı kutucuğu dikkatimi çok fazla dağıtıyordu. (Tabii uygulamanın amaçlarından biri elbette bu ama işte biz anlaşamadık, napalım).
2) Belirli aralıklarda verdiği uyarılar sırasında bilgisayarı hiç kullanmamaya zorluyor. Mesela 20 sn boyunca fareyi ya da imleci hiç kımıldatmamanız gerekiyor, aksi takdirde uyarıyı sürdürüyor. Yazılımın beni uyarmasını seviyorum ama bu kadar zorlaması hoşuma gitmiyor.

Bu iki sebepten dolayı uzun süredir RSIBreak’i kullanmıyordum, yerine de yeni bir şey aramadım. Lakin yakın zamanda okuduğum sağlıkla ilgili birkaç yazı, beni tekrar önlem almaya itti. Özellikle göz sağlığı ile ilgili kısım, bilgisayar başında geçirilen süreler yüzünden gözleri bozulan bir kişi olarak “yav bu böyle olmayacak” dedirtince alternatif bir şey yapayım dedim.

Göz sağlığı ile ilgili uyarılar içeren yazıların çoğunda önerilen iki şey var:
1) 20-30 dakikada bir kez, 15-20 saniye süreyle ekrana değil de uzak bir noktaya (en az 5-6 metre uzağa) bakın.
2) Gözlerinizi kırpmayı unutmayın. Normalde insan gözü dakikada 10-12 kez kırpılıyor, fakat bilgisayar başında bir şeye odaklandığımızda bunu yeterince yapmıyoruz ve bu da göz kuruluğuna sebep oluyor.

Bu iki basit mevzuyu çözüme kavuşturmak için kendimce basit bir yol buldum: Bunları kendime hatırlattığım iki küçük(3-4 saniyelik) ses dosyası kaydettim. Kendi kendime “gözlerini kırpmayı unutma!” ve “Uzaklara bak!” diye sesleniyorum (şair burada kendine sesleniyor). Ardından crontab’a iki satır ekledim:

        */10 * * * * mplayer /home/adil/sesler/gozlerinikirp.ogg
        15,45 * * * * mplayer /home/adil/sesler/uzaklarabak.ogg

Böylelikle, her 10 dakikada bir kez gözlerimi kırpmam, her yarım saatte bir kez de ekrandan daha uzak bir mesafeye bakmam için sesli uyarı alıyorum. Şimdilik işe yarıyor, ne çok rahatsız edici ne de işlerimi yapmamı engelleyici.

Yukarıda RSIBreak (ve varsa benzeri yazılımları) kötülemiş gibi oldum ama şu farkın altını çizeyim: Benim çözümüm sadece göz sağlığı için. RSIBreak, oturmadan kaynaklı omuz ve bel rahatsızlıklarını da hedefleyen bir yazılım. O açıdan şans vermekte fayda olabilir ilgilenenler için.

adilga

[1] https://userbase.kde.org/RSIBreak

Not: Yazıyı iki gün önce yazıp kenara koymuştum, arada geçen zamanda hem bir iki arkadaştan fikir aldım hem de RSIBreak’i tekrar kurup kurcaladım biraz. Aslında epeyce özelleştirme imkanı sunuyor yazılım, uyarıların görülme sıklığından zorlayıcılıklarına kadar çeşitli düzenlemeler yapabiliyorsunuz, üstelik sesli uyarı seçeneği de var. Daha önce kullandığım zaman bunlar var mıydı hatırlamıyorum, belki vardı da ben fazla kurcalamamıştım. Şu anki haliyle benim ihtiyacımı giderebilecek durumda aslında. Yine de şimdilik kendi çözümüm benim işimi görüyor, iki gündür iyi geçiniyoruz kendisiyle. Öte yandan, yazıyı paylaştığım bir arkadaş, benim rahatsız olduğum zorlayıcılığın (yani yazılımın sizi ara vermeye zorlaması) aslında sağlık açısından daha faydalı olduğunu düşündüğünü belirtti, kısmen hak vermedim değil. Yine aynı arkadaş, göz sağlığı için başka iki yazılım önerdi, onları da not etmiş olalım buraya:

https://justgetflux.com/
http://jonls.dk/redshift/

Ben bunları henüz denemedim, bir ara denemeye çalışacağım bakalım.




07 July 2014

Debian Tabanlı Sistemlerde Paket Sorgulama İşlemleri


Debian tabanlı dağıtımlarda sistemde kurulu paketlerle ilgili sorgulama işlemleri dpkg üzerinden yapılabilmektedir.

Sistemde kurulu tüm paketleri listelemek için -l paramtresi kullanılabilir:

# dpkg -l

Çıktı şuna benzer olacaktır:

ii  0trace                                0.01-3                             amd64        A traceroute tool that can run within an existing TCP connection.
ii  acccheck                              0.2.1-1kali3                       amd64        Password dictionary attack tool for SMB
ii  accountsservice                       0.6.21-8                           amd64        query and manipulate user account information

Kurulu bir paketle ilgili detaylı bilgi almak için ise -s paramtresi kullanılabilmektedir:

# dpkg -s hping3
Package: hping3
Status: install ok installed
Priority: extra
Section: net
Installed-Size: 249
Maintainer: Guillaume Delacour <gui@iroqwa.org>
Architecture: amd64
Version: 3.a2.ds2-6kali3
Depends: libc6 (>= 2.7), libpcap0.8 (>= 0.9.8), tcl8.4 (>= 8.4.16)
Description: Active Network Smashing Tool
 hping3 is a network tool able to send custom ICMP/UDP/TCP packets and
 to display target replies like ping does with ICMP replies. It handles
 fragmentation and arbitrary packet body and size, and can be used to
 transfer files under supported protocols. Using hping3, you can test
 firewall rules, perform (spoofed) port scanning, test network
 performance using different protocols, do path MTU discovery, perform
 traceroute-like actions under different protocols, fingerprint remote
 operating systems, audit TCP/IP stacks, etc.  hping3 is scriptable
 using the Tcl language.
Homepage: http://www.hping.org/

İlgili pakete ait sistem dosyalarını listelemek için ise -L parametresi kullanılabilmektedir:

# dpkg -L hping3
/.
/usr
/usr/sbin
/usr/sbin/hping3
/usr/share
/usr/share/doc
/usr/share/doc/hping3
/usr/share/doc/hping3/SPOOFED_SCAN.txt.gz
/usr/share/doc/hping3/changelog.gz
/usr/share/doc/hping3/BUGS
/usr/share/doc/hping3/MORE-FUN-WITH-IPID
/usr/share/doc/hping3/API.txt.gz
/usr/share/doc/hping3/README
...

Bir .deb paketinin içeriğini görüntülemek için ise -c parametresi kullanılmaktadır.

# dpkg -c rsync_3.1.0-3_amd64.deb
drwxr-xr-x root/root         0 2014-04-16 10:38 ./
drwxr-xr-x root/root         0 2014-04-16 10:38 ./lib/
drwxr-xr-x root/root         0 2014-04-16 10:38 ./lib/systemd/
drwxr-xr-x root/root         0 2014-04-16 10:38 ./lib/systemd/system/
-rw-r--r-- root/root       188 2013-09-30 10:54 ./lib/systemd/system/rsync.service
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/bin/
-rwxr-xr-x root/root    390704 2014-04-16 10:38 ./usr/bin/rsync
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/share/
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/share/man/
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/share/man/man5/
-rw-r--r-- root/root     15833 2014-04-16 10:38 ./usr/share/man/man5/rsyncd.conf.5.gz
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/share/man/man1/
-rw-r--r-- root/root     56207 2014-04-16 10:38 ./usr/share/man/man1/rsync.1.gz
drwxr-xr-x root/root         0 2014-04-16 10:38 ./usr/share/doc/
...

dpkg ile ilgili daha fazla bilgi için ayrıca dpkg’nin sayfasına gözatmanızı tavsiye ederim.


Cagri Ersen tarafından Syslogs adresinde yayınlandı. | Permalink | Etiketler: ,



03 July 2014

Supervisor


  Supervisor kurulu olduğu bilgisayarın üzerindeki süreçleri kontrol edebilen Unix benzeri işletim sistemleri üzerinde çalışabilen bir sistemdir. Aslında süreçlerin kontrolünü rc.d dizini altına betikler yazarak da yapmak mümkün ama supervisor bu işi bi standarta göre yaptığından bakım yapmak da yazmak da yönetmek de daha kolay olacaktır. Ayrıca süpervisor ile zombi süreç oluşumunu engelleyebiliyoruz. Süreçleri gruplayarak toplu işler yaptırabiliyoruz. Tek seferde birden çok sürece parametre gönderebiliyoruz. Duran süreçleri otomatik başlatabiliyoruz. Hepsinden sırayla bahsedeceğim.

  Arayüzünün görünümü ise şöyle:


















   Komut satırını kullanarakta bilgi almak mümkün. Komut satırına supervisorctl yazarak etkileşimli bir kabuk açıldığını göreceğiz. "help" yazdığımızda yapabileceklerimizi rahatlıkla görebiliriz.

   Kurulumu:
  "easy-install supervisor", "pip install supervisor" kullanmak ya da direk kaynak kodundan kurmakta mümkün ama depodan kurabiliyor olmak kullanım alanını genişletecektir. Bu yüzden bunu tercih ediyoruz.

$ sudo apt-get install supervisor

  Şuan varsayılan olarak /etc/supervisor/supervisord.conf yolunda şablon olarak bir yapılandırma dosyası oluşmuş olmalı. İşler karmaşıklaştığında yönetimin daha kolay olması için buradaki bazı bölümleri yavaş yavaş /etc/supervisor/conf.d/ dizini altına taşıyacağız. İlk olarak http yaplandırması kısmını şöyle yazıyoruz:

  # vim /etc/supervisor/conf.d/http.conf

Açılan dosyaya şu yapılandırma bilgierini ekeyelim:

  [inet_http_server]         ; inet (TCP) server disabled by default
  port=*:9001        ; (ip_address:port specifier, *:port for all iface)
  username=user              ; (default is no username (open server))
  password=123               ; (default is no password (open server))

2. satırda * yerine özel bir ip adresi ya da localhost yazabiliriz. * yazmamız supervisor'a tüm arayüzlerden ulaşabilmemizi sağlar. Bu dosyayı kaydedip çıkalım.

  İçinde şuan kayıtlı hiçbir süreç olmadığından çalıştığında bir süreç göremeyeceğiz. Çalıştırmak için şu komutu verelim:

  # server supervisor start

  Şimdi adres çubuğuna localhost:9001 yazdığımızda yukarıdaki resmin süreçler olmadan ki halini görüyor olmamız lazım

  Şimdi hiçbirşey yapmayan örnek bir kod yazalım supervisor'a ekleyelim ve durumunu inceleyelim:

  # vim /usr/local/bin/long.sh

  Açılan dosyaya şu kodu yazalım:

  #!/bin/bash
  while true
  do
      # Echo current date to stdout
      echo `date`
      # Echo 'error!' to stderr
      echo 'error!' >&2
      sleep 1
  done

  Kaydedip çıkalım ve şimid bu dosyaya çalıştırılabilme izni verelim:

  # chmod +x /usr/local/bin/long.sh

   Şimdi yazdığımız bu küçük programı supervisor 'un yapılandırmasın ekleyelim.

  # vim /etc/supervisor/conf.d/long_script.conf 

  Açılan dosyaya şunalrı yazalım:

   [program:long_script]                       ; programa verecğimiz isim
   command=/usr/local/bin/long.sh       ; eklemek istediğimiz kodun yolu
   autostart=true                                    ; supervisor çalıştığında otomatik başlatılıp başlatılmayacağı
   autorestart=true                                 ; otomatik yeniden başlatılıp başlatılmayacağı
   stderr_logfile=/var/log/long.err.log   ; standart hata çıktısının yazılacağı dosyanın yolu
   stdout_logfile=/var/log/long.out.log  ; standart çıktısının yazılacağı dosyanın yolu

 Bu dosyayı kaydedip çıkalım. Bu yaptığımız değişiklikleri okuyabilmesi için supervisor'u yeniden başlatalım:

  # service supervisor restart

  Şimdi adres çubuğuna yeniden localhost:9001 yazdığımızda bir tane satır görüyor olmamız gerekiyor.

  Programla ilgili şu bilgileri göreceğiz:
  Durumu:
      --running
      --starting
      --backoff
      --stopping
      --stopped
      --exited
      --fatal

  Süreç numarası:

      --pid 1800

  Sürecin çalıştığı süre:

     --uptime 3:24:07

  Adı:

    --long_script

  Ve bu süreç üzerinde yapabileceğimiz olaylar:   Yeniden başlat, başlat, durdur, logları temizle, logları görüntüle gibi

   Bir sonraki yazımda XML-RPC API sinin kullanımından API yi kullanarak süreçlere nasıl müdahale edebildiğimizden  bahsedeceğim.



Temel Puppet Kullanımı


Merhaba, önceki yazımda puppetın ne olduğundan bahsetmiştim. Bu yazımda agent ve master makinalar arasındaki iletişimin nasıl olduğundan ve master makinalarda yönergeler yazarak agent makinalara nasıl işlemler yaptırıldığından bahsedeceğim.

Master ve agentta Puppet'ın düzgün kurulu olduğunu varsayıyorum. Çalışma şekli de fotoğrafta anlaşılır halde diye bunu da siteden aldım :D Daha çok bilgi için.

** Makinaların iletişimde olması için öncelikle birbirlerine ping atabiliyor olmalılar.

** Birbirlerinin makina isimlerini (hostname) biliyor olmalılar. ('$hostname' komutu ile kısaca öğrenilebilir.)

** Daha sonra her iki makinada “/etc/hosts”  dosyasına:  “ip hostname.localdomain hostname puppet.localdomain puppet” biçiminde birbirlerinin bilgilerini yazıyoruz. 

** Son olarak saatlerinin de senkron olması gerekiyor.


Şimdik bağlama işlemi için agentta "# puppet agent --test" komutu çalıştırıp bir sertifika oluşturuyoruz. Oluşan sertifika /var/lib/puppet/ssl altında. Masterda "#puppet cert list" komutu ile oluşan sertifikayı görüyoruz. Son olarak "# puppet cert sign hostname.localdomain" diyerek imzalama işlemini gerçekleştiriyoruz.

Bugün çok eğlenerek çalıştığım kısım agenta birşeyler yaptırmaktı :)
Çalışma alanı /etc/puppet altında. 
Önce master makinada manifest dizini altına ".pp" uzantılı bir dosya oluşturmalıyız.
Sonrası agenta ne yaptırmak istediğinize bağlı. Ben 'pgbuncer' kurdurup, servisi çalıştır dedim mesela. Yazım için de biçimleri burada.

Benim site.pp dosyam şöyle:

node 'hostname.localhost' {
    package{"pgbouncer":
      ensure => "installed",
  }
    file {"/etc/pgbouncer/userlist.txt":
      ensure  => present,
      content => '"username" "password"',
  }
    exec {"sed1":
      command => "/bin/sed -i 's/;;   dbname= host= port= user= password=/dbname host=NAME user=username password=password/g' /etc/pgbouncer/pgbouncer.ini",
      path => "/bin/sed/",
  }
    exec {"sed2":
      command => "/bin/sed -i 's/START=0/START=1/g' /etc/default/pgbouncer",
      path => "/bin/sed",
  }
    exec {"start":
      command => "/etc/init.d/pgbouncer start",
  }
}

Burada node kısmında yine agentı belirttik. 
* Package kısmında anlaşıldığı gibi paketi indirip kurulduğundan emin oluyor. 

* File kısmında /etc/pgbouncer/userlist.txt dosyasına pgbouncer için kullanıcı adı ve parola ekliyor. 

exec kısımlarında komut çalıştırıyor. 
* sed1'de dbname, host, kullanıcı adı, parola bilgilerini .ini dosyasına giriyor. 
* sed2 komutunda da /etc/default/pgbouncer dosyasındaki START değerini değiştiriyoruz. Çünkü servisin başlaması için "1" değerini almalı.
*start adındaki komut da pgbouncer'ı başlatıyor.

Bunu kaydedip agentta "# puppet agent -t" komutunu çalıştırdığımızda, masterda bir değişiklik varsa agent bunu uyguluyor. Son olarak agentta pgbouncer çalışıp çalışmadığını "$ ps auxf | grep pgbouncer" diye çalışan süreçlerden görebiliriz.












Kolay gelsin :)


01 July 2014

Bir Takım Geçişken Şeyler



İnsanın hayatında pis rezil olduğu durumlar vardır. Gavur bunu WTF moment olarak havalı bir biçimde söylese de yurdum insanı "astir bea" olarak daha net anlaşılır hale getirmiştir bu olguyu.

Neyse efendim, bendeniz de dün itibariyle benzer bir anı yaşadım ve bu girdiyi yazmak şart oldu kendime ceza kabilinden. Burada resim puslanır sahne siyah beyaza döner ve olaylar şöyle gelişir;

Doktora aday adayımız giriş mülakatına girmek üzere 12 saatlik bir yolculuğun ardından ülkemizin tanınmış üniversitelerinden birine ulaşır. Mülakat saatine kadar araştırma konusu ile ilgili jüri hocalarının yazdığı makaleleri ve kitap bölümlerini okuyarak kendince özgüven depolamaktadır, gelişecek olaylara pek bir hazır olduğunu sanmaktadır.

Derken, mülakat saati gelir lakin, her toplumsal sıralama olayında olduğu gibi olay olması gereken vakitte cereyan etmemekte ısrarlıdır. Mülakat salonu önünde beklemekten sıkıldığı bir anda telefonla konuşmaktadır ki, adı okunur ve kahramanımız telefonunu aceleyle kapatıp olay mahalline intikal eder.

Salona girdiğinde karşısında 6 kişilik bir jüri vardır (WTF moment 1). 6 ya 1 eşitsizliği ilk başta kahramanımızın gözünü korkutsa da, çocukluğu "Kara Murat" serisini izleyerek geçmiş esas oğlanı yıldırmaz bu durum.

Yüksek lisans çalışmalarını kısaca özetlemesinin ardından bir South Park sessizliği oluşmuşken, yüksek lisans jürisinde bulunan bir hoca malum soruyu sorar;

"Sana yüksek lisans jürisinde bir soru sormuştum, hatırladın mı ?"

(Hatırladım lakin hatırlamak istemiyorum, çünkü bildiğin cevaplayamayıp mal gibi kalmıştım)

"Hatırladım hocam" der kahramanımız. Hoca işin peşini bırakmamaktadır;

"Baktın mı sınavdan sonra çözümüne sorunun ?"

"Baktım hocam" der esas oğlan.

(Baktın ama yetmez) der hoca içinden ve bu ses dışarı şöyle yansır;

"Anlat bakalım o zaman, difüzyon denklemlerinde neden ikinci derece türev kullanılır !!! "

"Bakın şimdi hocam, basitçe anlatmak gerekirse geçişen (diffuse) eden maddemizin ilgilendiğimiz bölümünü bir araba gibi düşünelim. Biliyoruz ki bir arabanın hareketini hesaplarken birinci derece türev bize hızı , ikinci derece türev ise hızdaki değişimi (hızlanma/acceleration) verir. Bizim derdimiz t anında x konumunda olduğunu bildiğimiz arabanın t+1 anında nerede olduğunu bulabilmekse eğer, hız ki, biz buna halk arasında birinci dereceden türev deriz bizim için tek başına birşey ifade etmez çünkü; arabamız t anından t+1 anı arasında hızlanmış veya yavaşlamış olabilir, arabanın hızının bu zaman aralığında nasıl değiştiğini bulmak için Anadolu'da ikinci dereceden türev olarak adlandırılan matematiksel işleme ihtiyaç duyarız."

Bu konu aşağıdaki videoda detaylı olarak açıklanmıştır ve dahi tam ekran olarak izlemeniz tavsiye edilir;




"Aslında bu konuyu matematiksel olarak Fick kanunları (ki onlar iki tanedir) ile açıklayabiliriz. Moleküllerin bir bölgeden diğer bölgeye geçişine akı der ve bunu J ile gösterirsek akıyı zamandan bağımsız olarak

  

şeklinde ifade edebiliriz. Burada D ilgilendiğimiz molekülün difüzyon katsayısı C derişim ve x molekülün katettiği mesafeyi gösterir. Bu kanun zamandan bağımsız olarak, derişimi farklı, iki bölge arasındaki geçişi ifade eder ve bu geçiş çok yoğun bölgeden az yoğun bölgeye doğru derişimler eşitlenene kadar devam eder."

"Fick birinci kanununda zaman mefhumunu ihmal edip benim bu soruya sonsuza kadar cevap verebilme şansım varmış gibi davranırken, gerçek durum böyle değildir. Aslında bu soruyu hiç cevaplamayıp doktora yeterlilikte bu soruyu sormanızı garanti altına almak ve daha sınava girmeden bir soru fazla cevaplayarak zamanı bükmek istesem de bunun evrende yol açacağı kaostan korktuğumdan bu ihtimali hızla eliyor ve konuya kaldığım yerden devam ediyorum"

"Neyse, yaptığı eşşekliğin farkına varan Fick "Achtung" der yani "Ben ne yaptım". Bunun üzerine ikinci kanununu yazar,

  

bu noktada akının kendisi hesaplanmaya muhtaç bir dede kaldı ki gayrıya himmet ede diye düşünen Fick bruder J yi birinci denklemden getirip yerine koyarak

  

denklemini elde eder. Bu da neden 2. dereceden türev sorusunun daha kitabi bir açıklamasını sunar bize"


Diyemedim ya la...




30 June 2014

Virtualbox - Aynı IP Sorunu


Merhaba, bugün başıma gelen sorunun çözümünü öğrenince sizlerle paylaşmak istedim :)
p { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); widows: 2; orphans: 2; }p.western { font-family: "Times New Roman",serif; font-size: 10pt; }p.cjk { font-family: "Times New Roman",serif; font-size: 10pt; }p.ctl { font-family: "Times New Roman",serif; font-size: 10pt; }a:link { color: rgb(0, 0, Virtualbox, bir işletim sistemi içinde sanal bir makina oluşturarak 1 veya daha fazla işletim sistemi kurmaya yarayan, sistem içinde sanal bir sistem oluşturan bir program.

Bende de sanalda 2 makina kuruluydu. Puppet'ı denemek için bu makinları birbiri ile iletişimde tutmam, bir bakıma bağlamam gerekiyordu ve Virtualbox aynı ip adresini verdiği için bağlama işlemini yapamadım. 

Çözümü çok kısa ve kolaymış.

1.  Virtualbox uygulaması açıkken sol köşede sırasıyla Dosya-Tercihler yolunu izleyip Ağ bölümünde "Sadece-makina Ayarları" kısmına sağdaki ekleme butonuna tıklıyoruz ve vboxnet0 adında bir bağdaştırıcı ekliyoruz.

2. Daha sonra makinamızın birini seçip Ayarlar'a tıklayoruz. Ağ bölümünde "Bağdaştırıcı 1" ayarını "NAT" olarak ayarlıyoruz.


3. "Bagdaştırıcı 2" kısmında ise "Sadece-Anamakina Bağdaştırıcısı" seçeneğini seçiyoruz. Bunları her iki makina için de yapmalıyız. Tabi bu işlemlerde makinalar kapalı durumda olmalı.

Bu işlemden sonra makiaları çalıştırıp "# ifconfig" komutunu verdiğimizde ip'lerin farklı olduğunu görebiliriz.

Görüşmek üzere :)



27 June 2014

Bootstrap


 

  Bootstrap web uygulamalarımızı ekran boyutundan bağımsız bir şekilde yazmamızı sağlayan bir çatı. Yani uygulamayı tek bir web çatısı kullanarak yazıyoruz ve küçük ekran telefonlardan geniş ekran bilgisayarlara kadar her yerde görünümü bozulmadan kullanabiliyoruz. Bu yazımda bir önceki yazımda Flask ile yazdığım basit blog uygulamasının Bootstrapla iyileştirilme aşamalarını anlatacağım.

  Bootstrap'ın Flask için yazılmış bir modülüde mevcut "pip install flask-bootstrap" diyerek kurup öyle kullanılıyor.  Ama bunu kullanmak yazacağımız uygulamanın kullanım alanını daraltabilir. Örneğin eğer uygulama kararlı depoyu kullanan bir sunucu yada bilgisayarda kullanılacaksa yazacağımız uygulamayı buralarda kullanmak istemeyeceklerdir.

  Bootstrap'ın çok fazla bileşeni olduğundan sadece bloğumuz için gerekli olanlardan bahsedeceğim daha ayrıntılı bilgiyi buradan bulabilisiniz.

  Bootstrap'ı uygulayacağımız blog uygulamasını buradan bulabilirsiniz.

*  Öncelikle linkten Bootstrap için gerekli dosyaları indirmeliyiz. İndirdiğiniz dosyayı açarak uygulamamızın içindeki static dizini altına taşımalıyız.

*  .../templates/layout.html dosyasının başına şu satırı ekleyerek kullanacağımız css dosyasının yolunu belirtmiş oluyoruz:

     <link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap-3.1.1-\
dist/css/bootstrap.min.css') }}">

*  Şimdi bootstrap'ın  her ekran boyutunda düzgün görünmesini sağlayan layout özelliğini ekleyeceğiz. Bootstrap uygulamamızı 12 kolon'a kadar ölçekleyebilir. Biz ekranımızı şekilde görüldüğü gibi bölerek orta kolonu kullanacağız.

  Bunun için Bootstrap içindeki .col-md-* sınıfını kullanacağız. Daha küçük ekranlardaki görünümü için .col-xs-* sınıfını kullanacağız. Yine layout.html dosyasına şu kodu ekleyeceğiz:

<div class="row">
<div class="col-md-4"> İlk bölme </div>
<div class="col-xs-12 col-md-4"> Orta bölme </div>
<div class="col-md-4"> Son bölme</div>
</div>

*  İlk ve son bölmeyi boş bırakacağız. Orta bölmeye kodun layout kısmını içinde kullanıcıya göstereceğimiz kısmı koyacağız. 

* Aynı yerde "log in" ve "log out " butonlarınıda iyileştirmek için  butonların bulunduğu satırı şu şekilde değiştirelim:

 <a class="btn btn-primary btn-lg" role="button" href="{{ url_for('login') }}">log in</a>
 <a class="btn btn-primary btn-lg" role="button" href="{{ url_for('logout') }}">log out</a>

*  .../template/login.html dosyasını açalım ve oradaki kullanıcı adı ve parola kısımlarını ve submit butonunun görünümünü Bootstraptaki sınıfları kullanarak iyileştirmek için form etiketleri arasını aşağıdaki kod ile değiştirelim.

<form action="{{ url_for('login') }}" method=post role="form">
  <div class="form-group">
    <label for="exampleInputEmail1">User name</label>
      <input type="text" name="username" class="form-control"  placeholder="Enter user name please">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
      <input type="password" name="password" class="form-control" placeholder="Enter password please">
  </div>
  <div class="metanav">
      <button type="submit" class="btn btn-primary btn-sm">Submit</button>
  </div>
  </form>

*  .../template/show_entries.html dosyasını açalım Yine aynı şekilde formun ve butonların görünümünü iyileştirmek için aşağıdaki form etiketleri içindeki kodu aşağıdaki kod parçasıyla değiştirelim.

  <form action="{{ url_for('add_entry') }}" method=post role="form">
    <div class="form-group">
      <label>Title</label>
        <input type="text" name="title" size=30 class="form-control"  placeholder="Enter title please">
    </div>
    <div class="form-group">
      <label>Text</label>
        <textarea name="text" row=5 cols=40 class="form-control" placeholder="Enter password please"></textarea>
    </div>
    <button type="submit" class="btn btn-primary btn-sm">Submit</button>
  </form>

* Aynı dosya içinde daha önce yazılmış bloglar liste şeklinde görünüyordu. Onların göürünümünü iyileştirmek için tablo kullanmayı tercih ettim. O kısmıda şu şekilde değiştirebiliriz:

<table class="table table-hover">
{% for entry in entries %}
  <tr class="info text-center"><td><h3>{{ entry.title }}</h3>{{ entry.text|safe }}</td></tr>
{% else %}
  <tr class="info text-center"><td><em>Unbelievable. No entries here so far</em></td></tr>
{% endfor %}
</table>

  Artık dosyayı kaydedip bloğu çalıştırdığımızda pencere küçülterek görüntünün bozulmadığını ve bloğun eskisinden daha iyi göründüğünü görebiliriz.

Ek olarak:

  Belki ileride işimiz yarayabilecek bir bileşen "navbar" bileşeni. Hızlıca nasıl çalıştığını layout.html dosyasının başına şu kodu eklediğimizde hızlıca görebiliriz:

<div>
  <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left" role="search">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
  </nav>
</div>





26 June 2014

Unbound ile Güvenli Recursive DNS Kurulumu


Unbound, güvenlik önplanda tutularak geliştirilen bir DNS sunucusudur. validating (DNSSec), recursive ve caching modları bulunan bu DNS daemon’ı ile kendi alan adlarınızına ait dns kayıtlarını barındırmak üzere authoritative DNS sunucusu kurabileceğiniz gibi üzerinde alan adı barındırmadan sadece çözümleme yapan recursive bir DNS sunucusu da kurabilirsiniz.

Ben bu yazıda unbound kullanarak hızlıca bir recursive DNS kurulum ve yapılandırmasının nasıl gerçekleştirilebileceğini anlatacağım.


Devamini okuyun: Unbound ile Güvenli Recursive DNS Kurulumu


Cagri Ersen tarafından Syslogs adresinde yayınlandı. | Permalink | Etiketler: ,



25 June 2014

İşsizlikten Kanun Yapmak ve Ish/Che Bulmak


h) Kurumdan izin belgesi almadan iş ve işçi bulmaya aracılık faaliyetinin bir işyerinde veya 9/6/2004 tarihli ve 5187 sayılı Basın Kanununda yazılı araçlarla ya da radyo, televizyon, video, internet, kablolu yayın veya elektronik bilgi iletişim araçları ve benzer yayın araçlarından biri ile işlenmesi halinde bu fiili gerçekleştiren gerçek veya tüzel kişilere onbin Yeni Türk Lirası; fiilin her bir tekrarında yirmibin Yeni Türk Lirası,

ı) Kurumdan izin belgesi almadan iş ve işçi bulmaya aracılık faaliyeti gösteren kişiler ile Kurumdan izin almadan yurtdışına işçi götürmek isteyen kişilere ait iş ve işçi bulma ilanını, 5187 sayılı Basın Kanununda yazılı araçlarla ya da radyo, televizyon, video, internet, kablolu yayın veya elektronik bilgi iletişim araçları ve benzer yayın araçları ile yayınlayan gerçek ve tüzel kişilere, beşbin Yeni Türk Lirası,

Kaynak: forum.ubuntu-tr.net

İş bu kanun sebebiyle çıkıp size x firmasının (Vestel Savunma idi ama siz Tübitak deyin, TBMM deyin veya >NASA, FBI, CIA! Ubuntu Merkez Ofis Londra!, Microsoft Japonya, Durex Fransa -Evet bunlar da dahil!- deyin ) bir firmanın şu veya bu vasıflarda eleman aradığını söylemem yasakmış! Çünkü bunu internet ortamında söylemem/yazmam bile bile iş ve işçi bulmaya aracılık faaliyetiymiş ve bunun için dahi işkur isimli Türkiye'de yerleşik bir kurumdan izin belgesi almam lazımmış!

İşte bu yüzden dolayı size Vestel Savunma firmasınca Linux ile ilgili kernel seviyesinde geliştirme yapabilecek uzmanlara ihtiyacı olduğunu söyleyemez/yazamaz mışım!

İyi de iş ve işçi bulmaya aracılık faliyeti’nin tanımı nedir?

Geçen gün mahallemizin bakkalının önündeki ilanda iyi derecede Fransızca bilen eleman aranıyor! ilanı görmüş ve bunu internette dile getirmişsem bu bir aracılık faaliyeti midir?

Secret CV
Yeni Bir İş
Kariyer.net
sitesindeki bir ilanı paylaşmanın neresi iş ve işçi bulmaya aracılık faliyeti içine giriyor?

iş ve işçi bulmaya aracılık faliyeti bu kadar tehlikeli ise; neden eş bulmaya ve evlilik sitesi açmaya yönelik düzenleyici bir kanun yok!
Gönülden Sevenler,
eÇift,
Siberalem,
Evlilik Merkezi
gibi siteler o zaman tamamen kanunsuz bir şekilde eş buluyor, ve bu işten para kazanıyor!

Bir de Freelance/Uzman kavramı var ki; iş bu durumda,
Uzman Kirala
FreeLancer
Proje Kurdu
gibi siteler İşkur’dan izin almadıkları durumda tamamen suçlu oluyor.

Bu durumda Linked-In veya mahalli bir gazetenin bile iş ve işçi bulmak ile ilgili ilan yayınlayabilmesi için İşkur’dan izin alması gerekiyor!

Sosyal medyanın durumu ise daha da karmaşık.

İş arayanların bir Facebook sayfası kurması suç değil, lakin bu Facebook sayfasında aradıkları işi ilan etmeleri suç ve sayfanın kurucularının (Muhtemelen kimse takmayacaktır) yerine Facebook’un İşkur’dan izin alması gerekecektir.

İş/işçi arayan bir kişinin ilanını retweet etmek de suçtur; çünkü bu da faaliyete aracılık etmektir.

TMK’nın Terör’e yardım ve yataklık! maddesinden klonlanmış gibi duran bu yasa hakkında daha fazla konuşmayayım.

“Eleman aranıyor ilanları yasaklandı!” diye bir haber duyarsam, şaşırmayacağıma söz veriyorum ve konuyu kapatıyorum.

/2010 gibi bir Pardus Developer ilanında “TC vatandaşı olmak” diye bir şart vardı ki bu şart yüzünden Linus Torvalds bile o pozisyona başvuramıyordu/

Linux iş ilanları için bakınız:

http://www.indeed.com/q-Linux-jobs.html

http://jobs.linux.com/

http://www.linuxcareer.com/

https://jobs.linuxcareers.com/

http://www.linkedin.com/job/q-linux-administrator-jobs



SSL Sertifikası Nasıl Üretilir?


SSL sertifikasının iki farklı türü bulunuyor; bunlar otorite imzalı SSL sertifikaları ve kendini imzalamış (self signed) SSL sertifikaları.

Kendini imzalamış sertifikalar genellikle test amaçlı veya lokal kullanımda tercih ediliyor. Biri diğerine göre daha güvenli değil. Otoriterler güvenli anahtar değiş tokuşuna olanak sağlarlar ve paylaşılan açık anahtarların doğruluğunu kanıtlarlar.

https sslSSL, anahtar değişiminde asimetrik algoritmalar (RSA,DSA), akan trafikte simetrik algoritmalar (AES, 3DES, RC4 …) kullanılır. Asimetrik kriptografi yaygın olarak açık anahtar (public key, PKI) kriptografisi olarak da anılmaktadır. Açık anahtar kriptografisinde açık (public) ve gizli (private) olmak üzere iki anahtar oluşturulur. Açık anahtar ile kriptolanan veri ancak anahtar çiftinin gizli olan yarısı ile çözülebilir. Bunun tam tersi; gizli anahtar ile kriptolanan veri anahtar çiftinin açık olan yarısı ile çözümlenebilir, bu kaynağın doğrulanması için kullanılır (sertifika doğrulama).

SSL açık anahtar ile şifrelenmiş veriyi İnternet’e gönderiyorsa, neden sertifikaya ihtiyaç duyuluyor? Sertifikalar, güvenilir sertifika otoriteleri tarafından imzalanmış açık anahtarlardır ve sertifikayı gönderen tarafın gerçekten o kişi olduğunu doğrularlar. Güvenilir otorite tarafından imzalanmayan sertifikalar kullanıldığında da veri kriptolanır fakat iletişim kurulan tarafın doğru kişi olduğu kanıtlanamaz.

1- Özel Anahtarın Oluşturulması

SSL özel anahtar oluştururken seçebileceğimiz iki farklı algoritma var, DSA ve RSA. Algoritma seçimi yaparken pek çok farklı kriter göz önünde bulundurulur. Seçimi siyasi veya teknik detaylar belirleyebilir. Örnek olarak yaygın kullanılan RSA‘yı seçiyoruz;

openssl genrsa -out sunucu.pem 2048

Oluşturulan dosya PEM biçimindedir ve ASCII olarak okunabilir.

2- Sertifika İmza Talebinin Oluşturulması CSR (Certificate Signing Request)

CSR üretilirken, özel anahtar kullanılarak açık anahtar oluşturulur ve  imzalanır. Bu CSR dosyası sertifika otoritesine gönderilerek imzalanması istenir. İşlemden sonra otorite imzalı açık anahtarı sertifika olarak geri döner. Bu süreçte gizli anahtarın karşı tarafa gönderilmesine gerek yoktur.

CSR dosyasını sertifika otoritesine göndermek yerine kendi özel anahtarımız ile imzalayabiliriz. Bu tip sertifikalara, kendi imzalamış sertifika (self signed certificate) denir.

CSR dosyası oluşturulurken, sertifika üzerinde X.509 alanlarının tanımlanması istenecek. Bu alanlardan en önemlisi “Common Name” alanıdır. Bu alana SSL ile korumak istediğiniz alanadını yazmanız gerekiyor (fully qualified domain name).

openssl req -new -key sunucu.pem -out sunucu.csr

Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Cankaya
Locality Name (eg, city) [Newbury]:Ankara
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:ozcan.com
Email Address []:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3- Kendini İmzalamış Sertifika (self-signed certificate)

Oluşturacağınız sertifikayı bir otoriteye imzalatmayacaksanız, kendi özel anahtarınız ile CSR dosyasının imzalanması gerekiyor. Self-signed sertifika kullandığınızda tarayıcınız uyarı görüntüleyecektir. Bu uyarının sadece kendi sisteminizde görüntülenmesini önlemek için, sertifikayı tarayıcınızın güvenilir kök sertifikalar (trusted root certification authorities) bölümüne eklemeniz yeterli.

openssl x509 -req -days 365 -in sunucu.csr -signkey sunucu.pem -out sunucu.crt

4- Özel Anahtarın Güvenlik Parolasının Kaldırılması

Özel anahtar oluşturulurken tanımlanmış bir parola var ise bunun kaldırılması, web servisleri yeniden başlatıldığında kolaylık sağlayacaktır. Ek güvenlik gereken durumlarda bu parola tanımlanır ve web servislerinin her açılışında parolanın girilmesi gerekir. Parolayı kaldırdıktan sonra özel anahtara sadece root kullanıcısının erişebilir olması güvenliği açısından önemlidir.

openssl rsa -in server.key.org -out server.key

5- Sertifikanın Web Sunucuya Eklenmesi

Aşağıda Apache web sunucu için örnek ayar satırları bulunuyor;

SSLEngine on
SSLCertificateFile /usr/local/apache/conf/sunucu.crt
SSLCertificateKeyFile /usr/local/apache/conf/sunucu.pem
SSLCACertificateFile /usr/local/apache/conf/sub.class1.server.ca.pem

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !$

CipherSuite ile trafik kripto algoritma önceliği belirlenir. Anahtar derinliği arttıkça performans düşecektir.



23 June 2014

Puppet'a Giriş ve Debian Wheezy'ye Kurulumu


Bu yaz, stajımda Puppet ile çokça zaman geçireceğim. Giriş niteliğinde okuduklarımı ve denediklerimi sizlerle paylaşmak istedim.

Puppet, Ruby dili ile yazılmış bir yapılandırma yönetimi aracı. Aslında bu yapılandırma yönetimi 3 şekilde oluyor. 

1. Elle (manuel)
2. Kurulum sırasında
3. Araç kullanarak

Araç kullanmak bizi birçok uğraştan kurtarıyor. Sunucularımızı nasıl yapılandırmak istediğinizi tarif ediyoruz ve kullandığımız araç yapılandırmayı tarife göre uyguluyor. 

Puppet'ın yapılandırma dosyası (/etc/puppet/puppet.conf) 3 kısımdan oluşuyor.

main: Özel olarak belirtilmiş yapılandırma ayarları yoksa geçerli olacak ayarları içerir.

master: Puppetmaster (yönetim birimi) içindir.

agent: Puppet istemcisi yönetimi içindir.

2 modda çalıştırılabiliyor. "Sunucu-İstemci Mod" ve "Bağımsız Mod".  

Sunucu-İstemci Modu:

Puppetserver: Tüm yapılandırma dosyaları masterda bulunur. CA (Certificate Authority), SSL keyleri tutar. Verilerin şifrelenerek iletişimde olmasını sağlar.

Node: 3o dakikada bir mastera sistem bilgilerini yollar. Master, istenilen yapılandırma durumunu belirten bir katalog yollar. Node, kataloğu uygulayıp mastera raporlar. 

Bağımsız (Standole) Mod: Sunucu-İstemci modu gibi çalışır, tek farkı yapılandırma dosyalarının locale'de bulunmasıdır.

Ben Puppet'ı denemek için sanalda iki makinaya Debian kurdum. Birini master, birini agent olarak ayarladım. Şimdi bu kısımı açıklayayım.

İlk makinayı master yapalım.

1. deb paketini çekip paketi yükleyelim.
#wget http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb 
#dpkg -i puppetlabs-release-wheezy.deb

2. Paket listesini güncelleyelim.
#apt-get update 

3. İsteğe bağlı önsürümler için etkinleştirme:

/etc/apt/sources.list.d/puppetlabs.list dosyasında aşağıdaki bölümde #'yi kaldırarak yapılıyor.

# Puppetlabs devel (uncomment to activate)
 deb http://apt.puppetlabs.com precise devel
# deb-src http://apt.puppetlabs.com precise devel 
 
4.  Master sunucuyu kuralım.
 $ sudo apt-get install puppetmaster 

Son sürüme yükseltmek için: 
 $ sudo apt-get update
$ sudo puppet resource package puppetmaster ensure=latest

Diğer makinamızı da agent yapmak için aşağıdaki komutu vermemiz yeterli.
 $ sudo apt-get install puppet
 Yine son sürüm için update dedikten sonra:
  $ puppet resource package puppet ensure=latest
Bir sonraki yazımda bu iki makina arasındaki çalışmanın ne şekilde olduğundan bahsedeceğim. 
Esen kalın :)


Flask ile Blog Uygulaması






Önceki yazımda Flask'ın kurulumunu anlatmıştım. Şimdi Flask kullanarak basitçe bir blog nasıl yazılır adım adım anlatmaya çalışacağım.

  $ mkdir flaskr
  $ cd flaskr
  $ vim schema.sql

  Açılan dosya içine şu satırları ekleyelim:

  drop table if exists entries;
  create table entries (
          id integer primary key autoincrement,
          title text not null,
          text text not null
   );

  Kaydedip çıkalım. Database olarak sqlite3 kullanacağız. Yukarıda blog bilgilerimizi ( id, başlık, gövde ) tutacak basit bir tablo oluşturmak için kullanacağımız dosyayı yazdık. id bilgisi primary key dir ve otomatik olarak artar. Devam edelim.

  $ vim flaskr.py

  Açtığımız dosyaya şu satırları ekliyoruz:

  # Gerekli modülleri dahil ettik
  import os
  import sqlite3
  from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash

  # app adında küçük bir uygulama oluşturduk.
  app = Flask(__name__)
  app.config.from_object(__name__)

  # Uygulama için gerekli yapılandırma bilgilerini ekledik.
  app.config.update(dict(
          DATABASE='/tmp/flaskr.db',
          DEBUG=True,
          SECRET_KEY=’development key’,
          USERNAME=’admin’,
          PASSWORD=’default’
  ))
  app.config.from_envvar(’FLASKR_SETTINGS’, silent=True)

# Özel bir veritabanına bağlantı yapmak için    def connect_db():
          rv = sqlite3.connect(app.config[’DATABASE’])
          rv.row_factory = sqlite3.Row
          return rv

# Veritabanı bağlantısı için gerekli kısım.
  def get_db():
  if not hasattr(g, ’sqlite_db’):
          g.sqlite_db = connect_db()
   return g.sqlite_db

  @app.teardown_appcontext
  def close_db(error):
  if hasattr(g, ’sqlite_db’):
          g.sqlite_db.close()

  # Veritabanını başlatacak kısım
  def init_db():
          with app.app_context():
                  db = get_db()
                  with app.open_resource(’schema.sql’, mode=’r’) as f:
                          db.cursor().executescript(f.read())
                  db.commit()

  # Yazılmış olan blog yazılarını ve başlıklarını görüntüleyecek kısım.
  @app.route(’/’)
  def show_entries():
          db = get_db()
          cur = db.execute(’select title, text from entries order by id desc’)
          entries = cur.fetchall()
          return render_template(’show_entries.html’, entries=entries)

  # Yeni bir blog girdisinin veritabanına girişini sağlayan kısım.
  @app.route(’/add’, methods=[’POST’])
  def add_entry():
          if not session.get(’logged_in’):
                  abort(401)
          db = get_db()
          db.execute(’insert into entries (title, text) values (?, ?)’, [request.form[’title’], request.form[’text’]])
          db.commit()
          flash(’New entry was successfully posted’)
          return redirect(url_for(’show_entries’))

  # Giriş yapmayı sağlayan kısım
  @app.route(’/login’, methods=[’GET’, ’POST’])
  def login():
          error = None
          if request.method == ’POST’:
                  if request.form[’username’] != app.config[’USERNAME’]:
                          error = ’Invalid username’
                  elif request.form[’password’] != app.config[’PASSWORD’]:
                          error = ’Invalid password’
                  else:
                          session[’logged_in’] = True
                          flash(’You were logged in’)
                          return redirect(url_for(’show_entries’))
          return render_template(’login.html’, error=error)


  # Çıkış yapmayı sağlayan kısım
  @app.route(’/logout’)
  def logout():
          session.pop(’logged_in’, None)
          flash(’You were logged out’)
          return redirect(url_for(’show_entries’))

  # Uygulamayı başlatan kısım
  if __name__ == ’__main__’:
          app.run()

    Bu dosyayı kaydedip çıkıyoruz. Komut satırında veri tabanınındaki tablomuzun oluşması için şu komutu  veriyoruz:

  $ sqlite3 /tmp/flaskr.db < schema.sql

  Veri tabanını başlatmak için python kabuğunda şu komutları veriyoruz:

  $ python
  >>> from flaskr import init_db
  >>> init_db()


  Şimdi gereken şablonları ekleyelim:

  $ mkdir templates
  $ cd templates
  $ vim layout.html

  Açılan dosyaya şu satırları ekleyelim:

  <!doctype html>
 <title>Flaskr</title>
 <link rel=stylesheet type=text/css href="{{ url_for(’static’, filename=’style.css’) }}">
 <div class=page>
   <h1>Flaskr</h1>
     <div class=metanav>
     {% if not session.logged_in %}
       <a href="{{ url_for(’login’) }}">log in</a>
     {% else %}
       <a href="{{ url_for(’logout’) }}">log out</a>
     {% endif %}
     </div>
     {% for message in get_flashed_messages() %}
       <div class=flash>{{ message }}</div>
     {% endfor %}
     {% block body %}{% endblock %}
   </div>

  Kaydedip çıkalım. Blog girdilerini göstermek için bir şablon ekleyelim

  $ vim show_entries.html

  Açılan dosyaya şu satırları ekleyelim:

  {% extends "layout.html" %}
  {% block body %}
    {% if session.logged_in %}
       <form action="{{ url_for(’add_entry’) }}" method=post class=add-entry>
       <dl>
         <dt>Title:
           <dd><input type=text size=30 name=title>
         <dt>Text:
           <dd><textarea name=text rows=5 cols=40></textarea>
           <dd><input type=submit value=Share>
       </dl> 
     </form>
  {% endif %}
  <ul class=entries>
  {% for entry in entries %}
     <li><h2>{{ entry.title }}</h2>{{ entry.text|safe }}
  {% else %}
     <li><em>Unbelievable. No entries here so far</em>
  {% endfor %}
   </ul>
{% endblock %}

  Kaydedip çıkalım. Şimdi giriş için bir şablon ekleyelim:

  $ vim login.html

  Açılan dosyaya şunları ekleyelim:

  {% extends "layout.html" %}
  {% block body %}
    <h2>Login</h2>
    {% if error %}<p class=error><strong>Error:</strong> {{ error }}{% endif %}
     <form action="{{ url_for(’login’) }}" method=post>
       <dl>
         <dt>Username:
           <dd><input type=text name=username>
        <dt>Password:
          <dd><input type=password name=password>
        <dd><input type=submit value=Login>
      </dl>
    </form>
  {% endblock %}

 Kaydedip çıkalım. Şimdi görünümü iyileştirmek için css dosyası ekleyeceğiz. 

 $ cd ..
 $ mkdir static
 $ cd static
 $ vim style.css

 Açılan dosya içine şunları ekleyelim: 

 body            { font-family: sans-serif; background: #eee; }
 a, h1, h2       { color: #377ba8; }
 h1, h2          { font-family: ’Georgia’, serif; margin: 0; }
 h1              { border-bottom: 2px solid #eee; }
 h2              { font-size: 1.2em; }

 .page           { margin: 2em auto; width: 35em; border: 5px solid #ccc; padding: 0.8em;  background: white; }
 .entries        { list-style: none; margin: 0; padding: 0; }
 .entries li     { margin: 0.8em 1.2em; }
 .entries li h2  { margin-left: -1em; }
 .add-entry      { font-size: 0.9em; border-bottom: 1px solid #ccc; }
 .add-entry dl   { font-weight: bold; }
 .metanav        { text-align: right; font-size: 0.8em; padding: 0.3em; margin-bottom: 1em;  background: #fafafa; }
 .flash          { background: #cee5F5; padding: 0.5em; border: 1px solid #aacbe2; }
 .error          { background: #f0d6d6; padding: 0.5em; }


  Dosyayı kaydedip çıkabiliriz. 


  Şimdi flaskr.py dosyasının olduğu dizine geçelim ve uygulamayı çalıştıralım

  $ cd ..
  $ python flaskr.py

  Komut satırında karşımıza çıkan url yi tarayıcıya yazarak uygulamanın nasıl çalıştığını görebiliriz.


  


Flask Hello World


  Merhabalar

  Bu yaz stajımda kullanacağım web uygulama çatısı Flask ile basit bir örneğin nasıl yapıldığından bahsedeceğim.

  Flask'ın kurulumuyla başlayalım:
   
  Python ile geliştirme yapacaksak "virtualenv" yani sanal geliştirme ortamını kurmamız kolaylık sağlayacaktır.

  $ sudo pip install virtualenv
  $ mkdir myproject
  $ cd myproject
  $ virtualenv venv
  $ . venv/bin/activate
  $ pip install Flask 

  Şu anda bulunduğumuz dizin içinde "flask" adında bir dizin oluşmuş olmalı. O dizinin içindeki bin dizininin yolunu PATH 'e eklememiz gerekiyor.

  $ vim ~/.profile
 
  Açılan dosyanın sonuna şu satırı ekliyoruz ( bin kendi dosya sisteminizde neredeyse onun yolunu yazmalısınız ) :

  export PATH=~/myproject/flask/bin:$PATH

  Yaptığımız değişikliği aktif etmek için şu komutu veriyoruz:

  $ source ~/.profile

  Flask projelerinin dosya yapısı şu şekildedir :

             /hello_world
                   /static
                   /templates

  static            => css ve javascript dosyaları bu dizinin altında olur.
  templates     => içinde de şablon dosyalarımızı tutarız.

  İlk uygulama için bu dizinlere şimdilik ihtiyacımız yok. Şimdi ilk uygulamamıza geçebiliriz. Bunu yaparken uygulamalarımız için myproject dizininden farklı bir dizin seçersek karışıklığı önleyebiliriz.

  $ mkdir hello_world
  $ cd hello_world
  $ vim hello.py
  
  Açtığımız dosya içine şu satırları ekliyoruz:
  
  from flask import Flask
 app = Flask(__name__)
  

@app.route('/')


@app.route('/index')


def index():


    return "Hello World!"





app.run(debug = True)


  Dosyayı kaydedip çıkıyoruz. 

    $ python hello.py

  Bu komutu çalıştırdığımızda eğer bir sorun yoksa şu çıktıyı verecektir:
    
    * Running on http://127.0.0.1:5000/
 
  Çıktıdaki url yi browser'ın adres çubuğuna yazdığımızda ekranda Hello World! yazdığını görebiliriz.
  





17 June 2014

Pardus'a Göç Etmiş Kamu Kurumları


Takip edenlerin bildiği gibi Pardus projesi 2011 yılı sonunda teknolojik ve idari olarak sona erdirilmişti. Tübitak 2012 yılında yine Pardus adıyla  farklı bir proje geliştirmeye başladı. O yıllarda yeni projenin ilk idarecilerinin basına verdiği röportajlardan hatırladığım kadarıyla kamuda yaygın kullanım, ileri teknoloji gibi ilkelerden heyecanla bahsediliyor kulağa çok hoş geliyordu.

Aradan geçen yıllarda proje nereden nereye geldi hiç takip etmedim. Zaten artık gelinen noktada Pardus projesinin ne kadar kallavi bir teknoloji olduğunun/olmadığının bir önemi yok. Önemli olan kamu kurumlarının ve kamu idaresinin Linux ve özgür yazılımları tercih etme konusundaki iradesi. Maalesef  böyle bir irade göremedik. Tıpkı 2012 öncesinde olduğu gibi.

Ben yine de tarihe not düşme açısından BİMER aracılığı ile Tübitak'tan Pardus'a göç eden kurumların listesini istedim, gelen cevap aşağıda;


06.06.2014 tarih ve .... sayılı başvurunuz, BİMER sistemi üzerinden 
Kurumumuza yönlendirilmiş, Kurumumuz  tarafından incelenmiştir.

Pardus aşağıdaki Kamu Kurumlarında kullanılmaktadır:

- Milli Savunma Bakanlığı
- İSKİ
- Jandarma Genel Komutanlığı
- Gaziantep Halk Sağlığı Merkezi

Bu kurumlarda Pardus'a Göç yapmış toplam kullanıcı sayısı 
11 bin civarındadır.

Bilginize sunarız.

Zaten bu konu kamu idaresinin öncelikleri arasında zurnanın son deliği bile olmadığından kısa ve orta vadede pek umutlanmamak ve vatandaşların çocuğunun rızkından arttırıp ödediği vergilerin bir kısmının lisans anahtarları karşılığında ABD bankalarına aktarılmasını içimize sindirmek lazım.