9 Aralık 2014 Salı

Etkinlik Dolu Haftasonu (Özgür Web Günleri 2014, Devfest İstanbul 2014)

Herkese merhaba, geçtiğimiz haftasonu İstanbulda gerçekleşen 2 etkinliğe katıldım. 

İlki cuma ve cumartesi günü olan Özgür Web Teknolojileri Günleri. Diğeri de cumartesi günü gerçekleşen Devfest İstanbul. Birazcık gözlemlerimden ve sunumlardan bahsetmek isiyorum. 

Özgür Web Günlerine cuma günü katılmama rağmen beklediğimden kalabalıktı. Tahmin edeceğiniz gibi Çanakkale'den yine kalabalık bir ekiple gittik. (Necdet Yücel, Gülşah Köse, Esra Altıntaş, Sedat Ak, Hilal Çetinkaya, Yeliz Taneroğlu, Dilek Üzülmez, Natavan Mirzayeva)
Etkinlik Mustafa Akgül'ün konuşmasıyla başladı. Akgül Hoca, eskiden bu zamana etkinliklerin nasıl başlayıp ilerlediğinden, Türkiye'ye internetin gelişinden ve durumunun nasıl geliştiğinden, LKD'nin nasıl başladığından bahsetti. 

Sonrasında Necdet Yücel'in "Yenilikçi Web Teknolojilerini Nasıl Lisanslamalıyız?" sunumunu dinledim. Necdet Hoca, özgür yazılım ile açık kaynak arasındaki farklardan, özgür yazılımın felsefe olarak bize ne anlattığından, lisansların öneminden ve çeşitlerinden bahsetti.
 
Öğleden sonra Gülşah Köse'nin " Supervisor için merkezi yönetim arayüzü" sunumu vardı. Bize, stajında kendi yazdığı CESİ'nin neler yapabildiğini anlattı. :)

Etkinliğin son sunumlarından Puppet Sertifika Yönetimi'ni de ben anlattım. Stajda yaptığım işten, Puppet'ın nasıl çalıştığından, puppet sertifikalarından bahsettim:) Sunum slaytlarına buradan ulaşabilirsiniz. 

Sunumlar dışında yeni özgür yazılım insanlarını tanımak, uzun zamandır görmediklerim ile sohbet etmek çok güzeldi. İkinci günü de eminim aşırı harika olmuştur :)

Ayrıca etkinlikten sonra çoğu Çomü'den mezun Necdet hocanın öğrencisi olan kalabalık bir grupla sohbet etme fısatımız oldu. Katılmayanlara ne anlatsam boş olacak. Anlayamazsınız :)

Cumartesi günkü Devfest etkinliğine de katılım çok çok fazlaydı. Bazıları Türkçe, bazıları İngilizce gerçekleşen sunumlar 4 paralel salonda yapıldı. Öğleden sonra katılmama rağmen  kendimden beklemediğim kadar sunum dinledim. Ağırlıklı olarak web uygulamaları hakkında sunumlar vardı. 

Bir de yakından quadcopter görme fırsatım oldu :)

Benim için çok yoğun ve eğlenceli geçen bir haftasonuydu. Yeniden görüşmek üzere, hoşçakalın :)

22 Kasım 2014 Cumartesi

Bazı Temel Terimler

Bu yazımda, veritabanı yönetim sistemleri dersinde yapacağımız proje ödevi için sıkça kullandığımız, kullanacağımız temel kavramladan bahsedeceğim.

URI(uniform resource identifier): Yani nizami kaynak belirteci, bir kaynağı ya da veriyi isimlendirmek için kullanılan bir standarttır. Aynı zamanda kaynağı nitelendirir.  Kısaca "adres" veya "link" olarak adlanadırabileceğimiz her türlü gösterimin mutlak syntax'ında neler olabilir, olamaz bunu belirleyen karakter düzeyindeki standartın adıdır.

URL(Uniform Resource Locator): İnternet'te bir kaynağa (belge veya resim gibi) rastgelen, standart bir formata uygun bir karakter dizgisidir.

HTML5: HTML(Hyper Text Markup Language)'nin 5. sürümüdür. HTML4 her ne kadar yeterli gibi gözükse de CSS ile yazılan fazladan kodlar hatalara sebep oluyordu ve bunu önlemek için HTML5 geliştirildi. CSS ile olan uyum sorunu düzeltildi ve beraberinde getirdiği yeni etiketler ile hem içerik ve görsele hem de arama motorlarına büyük kolaylıklar sağladı.

CSS (Cascading Style Sheets): HTML'e ek olarak metin ve format biçimlendirme alanında fazladan olanaklar sunan bir Web teknolojisidir. İnternet sayfaları için genelgeçer şablonlar hazırlama olanağı verdiği gibi, bağımsız olarak harflerin stilini, yani renk, yazı tipi, büyüklük gibi özelliklerini değiştirmek için de kullanılabilir. Bu tekniğin en önemli özelliği kullanımındaki esnekliktir.

JS: JavaScript, Brendan Eich tarafından geliştirilen (önceleri Mocha daha sonra LiveScript olarak adlandırılan) başlangıçta sadece istemci taraflı (client-side) yorumlanan bir betik dilidir C dilinin tarayıcılara uyarlanmış hâli diyebiliriz. Web sayfalarında dinamik içerik sağlamak ya da kullanıcıyla iletişim kurmak için kullanılmaktadır.

Web Server: Hosting işlemini İnternet protokolü üzerinden sunan bir sunucudur. Hosting, Web sayfalarını İnternet'te yayınlamak için gerekli alanın kiralanmasıdır. Diğer bir ifade ile hosting, bir Web sitesinde yayınlanmak istenen sayfaların, resimlerin veya dokümanların İnternet kullanıcıları tarafından erişebileceği bir bilgisayarda tutulmasıdır.

ODBC(Open Database Connectivity): Birbirinden farklı veritabanlarına standart metotlarla bağlantı yapmanızı sağlar. Bir nevi veritabanları ve uygulamalar arasında bir köprü görevi görürler.

JDBC(Java Database Connectivity): Java ile ilişkisel bir veritabanına erişmek ve verisel işlemler yapmak için program-veritabanı arasında köprü işini yapar.

ADO.NET(ActiveX Data Objects.NET): Microsoft tarafından sunulan, veritabanı ile uygulamalarımız arasında köprü görevini görmektedir. ADO.NET ile uygulama tarafımızda veritabanımıza bağlanabilir, verilerimizi buradan listeleyebilir, güncelleyebilir, veri ekleyebilir veya silebiliriz. ADO.NET ile SQL sorguları, komutlarını uygulama tarafımızda kullanabiliriz.

ORM(Object Relational Mapping): İlişkisel veritabanı (RDBMS) ile nesneye yönelik programlamanın (OOP) arasındaki ilişkiyi kuran ve ilişkisel veritabanındaki bilgileri yönetmek için, nesne modellerini kullanan bir tekniktirBasit bir ifadeyle kullanılan nesneleri(object) veritabanındaki tabloya bağlayıp veritabanı bağlantılarını(alışveriş) yapar. ORM tekniği belli bir programlama diline bağlı değildir ve her OOP dilinde yazılabilir/kullanılabilir.

Entity Framework: .NET platformu için geliştirilmiş olan ORM frameworklerinden biridir.

Hibernate: Java platformunda yazılmış bir ORM (Object/Relational Mapping) aracıdır.

Biz projemizde Django çatısını ve ide olarak PyCharm kullanıyoruz. 

Django python dilini kullanarak web siteleri geliştirebileceğiniz bir web frameworkudur. Python ile web sitesi yazmak için birden fazla web frameworku mevcutt, en yaygın olanı djangodur. 

Django  MVC yapısını kullanır. MVC yapısından bahsedecek olursak , django'da çoğu zaman MVT yapısı olarak da geçer. 

M(Model) bizi karışık sql komutlarından kurtaran ORM yapısını kullanan kısım burasıdır. Kendine has basit bir class yapısı ile veritabanı tablolarımızı oluşturmamızı sağlar. 

V(View), aslında veritabanından hangi verileri çekmek istediğimizi belirlediğimiz alan. Tamamen python kodları kullanılır.

T(Template) ise view dan alınan verileri verdiğimiz html alanıdır. Django'da templates diye bir klasör gelmez bunu kendimiz oluşturmalıyız. Sonra settings.py dosyasında template'lerin hangi klasörün altında tuttulduğunu göstermeliyiz. Böylece viewdan sadece html dosyasının adını yazdığımızda direk bu klasörün altında arama gerçekleşir. 



4 Ekim 2014 Cumartesi

Pebble Uygulamam: Magic Button

Pebble maceram geçen dönem başlamıştı. +Gülşah Köse  ile bir watchface üzerine çalışmıştık. (Textwatch-tr) Bu konu hakkında da kısa bir yazı yazmıştım.

Pebble'ı kurcaladıkça ve kullandıkça, birçok telefon uygulaması için "Bunun da bi pebble uygulaması olsa, bildirimleri gelse iyi olur." diye düşünülüyor. 

Necdet hocanın önerisi ile bu sitenin bir pebble uygulamasını yazmaya başladım. Android ve İOS için de çok çeşitli uygulamaları yazılmış. Başlangıçta ilgimi çok çekmeyen ama öğrenmek için yapacağım bir iş gibi gelmişti. Ama ortaya birşeyler çıktıkça daha bir hevesle çalıştım.

Uygulamayı tanıtacak olursam, adı üstünde çok sihirli bir buton :) Ne kadar ters giden durum varsa saniyeler içinde düzeltebilir. Sınav notunuz kötü geldiyse, trafikte mahsur kaldıysanız, sevgiliniz ile kavga ettiyseniz, elektriğe yine zam geldiyse ve daha birçok kötü sorunun çözümü için bir tuş uzağınızda bir uygulama var artık. Daha güzel haberler vermek dileğiyle :)

(uygulama linki)
(kaynak kod)


29 Temmuz 2014 Salı

Yaz Stajım-2

Merhaba, bu yıl stajımı Metglobal'in sistem yönetimi bölümünde yaptım. Uğraştığım işten ve bana kazandırdıklarından kısaca bahsedeyim istiyorum.

Şirketin Amazon'da baya sunucusu var. Kullandıkları araçlardan biri de Puppet. Ne olduğu hakkında burada bir yazım var. Puppet'a eklenen yeni bir sertifika çeşidi "Policy-Base Autosigning". Öncekinden farkı da, makinalar arası imza gerçekleşmeden önce, yazılan sorgu çalışıp, sonucuna göre işlem yapılıyor. Kısaca daha fazla güvenli diyebiliriz.

Benim yaptığım iş ise imzalanmak için master'a gelen sertifikayı  çözüp, bazı bilgileri çekerek Python ile sorgulamaktı. Örneğin, imzalanmak için gelen sertifikadaki instance_id şirketin sunucularından birine mi ait, ya da hostname'leri, common_name'leri uyumlu mu gibi.. Sorgu yazma daha kısa süren kısımdı. Puppet nasıl çalışıyor, sertifika yönetimi nasıl oluyor, master makinada talimatlar nasıl yazılıyor kısımlarını deneyip test etmem daha çok zamanımı aldı.

Sertifika kodunu çözerken OpenSSL'i, sorguları yaparken AWS arayüzü için kullanılan Boto'yu öğrendim. Son olarak, imza gerçekleşmediğinde uyarı olarak mail ve log yazma kısmı ekledim. Mail atma kısmında da smtplib kütüphanesiyle uğraştım.

Bu teknik deneyim dışında, birlikte çalıştığım ekibi çok sevdim. Emre'ye, Aydan'a, Barış'a, Kubilay'a ve Eray'a ve Simge'ye buradan teşekkür edeyim. Geçirdiğim 4 hafta yoğun olduğu kadar çok da eğlenceliydi :)


Son olarak Kubilay'ın yorumu ile yazımı bitireyim: "Tanrıığm çok tatlışız değil miğğ !!"  :):)







22 Temmuz 2014 Salı

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 Temmuz 2014 Pazartesi

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..


15 Temmuz 2014 Salı

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 :)

 
  

4 Temmuz 2014 Cuma

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 :)

1 Temmuz 2014 Salı

Virtualbox - Aynı IP Sorunu

Merhaba, bugün başıma gelen sorunun çözümünü öğrenince sizlerle paylaşmak istedim :)
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 :)

23 Haziran 2014 Pazartesi

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ğimizi 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 :)

16 Mayıs 2014 Cuma

PebbleTextWatch-tr

Pebble smartwatch, Kickstarter'da duyrulduktan sonra beklenenin üzerinde destek alıp hayata geçirilen bir proje.

Bu akıllı saat; telefon(İOS - Android), tablet ya da bilgisayarınız ile bluetooth üzerinden eşleştirilerek çalışıyor. Gelen bildirimleri anında görme imkanının yanında, telefondaki uygulamalara saatten müdahale de edilebiliyor, gelen aramalara cevap verilebiliyor. +Gülşah Pebble ile ilgili daha önce bikaç yazı yazmıştı. Buradan ulaşabilirsiniz.

Pebble için uygulama ve watchface geliştirilebiliyor. Bir uygulama bir de watchface marketi mevcut. Her geçen gün yeni şeyler ekleniyor:) Biz de bir süredir Gülşah ile watchface geliştirmek üzerine çalışıyoruz.

Bu işe PebbleTextWatch diye bir watchface'in Türkçe halini yapalım diye başladık, tahmin edersiniz ki Türkçe halini yapınca bitmedi. Yeni bir teknoloji ile çalışmak gerçekten çok heyecan verici. Biz de yeni özellikler eklemeye başladık. 

Son çıkardığımız 2. versiyonunda, pil göstergesi var. Ayrıca bluetooth bağlantısı koptuğunda saat kullanıcıyı uyarıyor:) Hala da birşeyler eklemeye devam ediyoruz. Pebble kullanıcısıysanız artık markette PebbleTextWatch-tr adında Türkçe bir watchface de olduğunu bilin :)

Daha da güzel haberler vermek dileğiyle...



6 Mayıs 2014 Salı

DevFest Student 2014

3 Mayıs'ta Anadolu Üniversitesi'nde gerçekleşen Devfest Student etkinliğine okulumuzdan +Necdet Yücel, +Gülşah Köse, +Ebru Akagunduz ile birlikte katıldık. Oturumlar 2 salonda paralel olarak gerçekleşti. Konuşmacıların hepsi üniversite öğrencilerinden oluşuyordu. Her konuşmacı ilgi duyduğu, üzerinde çalıştığı konular ile ilgili sunum yaptı.


 Ebru, Ruby ile GTK3 kullanımından ve nasıl işler yaptığından bahsetti. 

Gülşah ile etkinliğin son konuşmacılarıydık. Linux çekirdeğine nasıl katkı verileceğini ve OPW sürecini anlattık. Sunuma buradan ulaşabilirsiniz.

 Gözlemlediğim kadarıyla katılımcılar oturumları ilgiyle dinlediler. Ancak etkinlik haftasonu olduğu için fazla bir kalabalık yoktu.



Konuşmamız bitince bizi Necdet hocanın eski öğrencisi +serhat ersel karşıladı. Bize Eskişehir'de görülmesi gereken yerlerden Sazova Parkı'nı , Porsuk Çayı'nı gezdirdi. 

 

Otobüs saatimize kadar bol bol sohbet ettik. Her zaman olduğu gibi çok keyifli geçen bir etkinlikti:)

29 Nisan 2014 Salı

Muğla 2. Özgür Yazılım Çalıştayı

Bu yıl ikincisi gerçekleşen etkinlik +Enis hoca ve öğrencileri tarafından Muğla Sıtkı Koçman Üniversitesi'nde düzenlendi. 

Orada bulunma nedenimiz; birçok üniversiteli akranımın, okul dersleri haricinde kendilerini geliştirebilmeleri için neler yapılacağını görmelerini sağlamaktı.

Konuşmalar +Necdet hocanın özgür yazılım ve olanakları sunumu ile başladı. Sunumda özgür yazılım ile neler yapılabileceği hakkında ipuçları vardı :) 

Sonraki konuşmada birkaç ay sonra mezun olacak olan +Ebru, geçirdiği 4 yılda neler yaptığından bahsetti ve yeni başlayanlar için tavsiyelerde bulundu.  

Daha sonra +Gülşah ile birlikte çekirdeğe katkı sürecinde nasıl bir süreç geçirdiğimizden ve kullandığımız araçlardan bahsettik. Sunuma buradan ulaşabilirsiniz.

Son konuşma ise +Doruk Fişek'in özgür yazılım dünyasında iş fırsatları ile ilgiliydi. Bu sunumda da iş görüşmelerinin nasıl olması gerektiği ile ilgili ipuçları vardı.

Konuşma aralarında yeni arkadaşlar tanımak ve kısa sohbetler etmek çok eğlenceliydi. Ayrıca yaptığımız bu sunum bana biraz daha deneyim kazandırdı :)


Etkinlikten sonra Muğla'da biraz daha kaldık. Esra bizi evinde misafir etti. İkinci gün okulumuzdan mezun olan Aydan, Simge ve Merve de bize katıldılar. Çok eğlendik :) 

Enis hoca ve Umut abi(Esra'nın abisi) sayesinde Muğla'nın harika yerlerini görme fırsatımız oldu.

Son olarak Esra'nın annesinin sarmalarından bahsetmeden geçemem. Gülay teyzenin ellerine sağlık sarmalar harikaydı :)

Benim için çok güzel geçen bir haftasonuydu. Çalışmalara, okula az da olsa ara vermek, nefes almak baya iyi geldi.  Esen kalın :)

17 Nisan 2014 Perşembe

OPW(Outreach Program for Women) Başvuru Süreci

OPW, Gnome'un kadınlar için düzenlediği bir etkinlik. Yaz ve kış dönemi şeklinde yılda iki defa düzenleniyor ve kadınların katılması için 18 yaş sınırı dışında bir sınırlaması yok. Etkinliğin birçok katılımcısı var.(Linux Kernel, Gnome, Debian, Fedora, Mozilla gibi) Aslında bu etkinliğe Gsoc gibi de diyebiliriz. Projeler için başvuruluyor. Seçilenler proje mentoru ile belirli bir süre çalışıyor. Projeyi tamamladıklarında 5000$ ödül alıyorlar.

Ben ve okul arkadaşlarım +Gülşah Köse, +Ebru Akagunduz ve +Tuğçe Şirin OPW yaz döneminde, Linux Kernel projeleri için hazırlandık.

Linux Kernel projelerinden birine başvurmadan önce çekirdeğe yama yollamamız ve en az bir yamamızın kabul edilmesi gerekiyor. Katılımcılara iki hafta yama yollama süresi tanınıyor. Yaması kabul edilenlere ayrıca bir mail atılıyor ve projelere başvurabiliyoruz. Kesin rakamını bilmesem de  her birimizin 30 dan fazla yamasının kabul edildiğini biliyorum :)

Opw Kernel sayfasında ilk yamayı nasıl yollamamız gerektiği anlatılmış. Ayrıca Fosdem2010'da Greg Kroah-Hartman bununla ilgili bir sunum da yapmış.

İlk başlayanlar için, kod biçimi düzeltmeleri yapmaları öneriliyor. Kernel ekibi, kod yazım biçimine oldukça özen gösteriyor. Yolladığınız yamada bir boşluk fazla olduğunda bile yamayı düzeltip yeniden yollamamız gerekebiliyor. Ekip, yazım biçimini test etmek için Perl ile bir betik yazmış ve bu betik ile hatalar, uyarılar bulunarak düzeltilip yama yollanabiliyor.

Kod biçim hataları dışında, TODO dosyalarındaki istenilenler de yapılabiliyor. Buradaki işler, kod biçimi düzeltmeye göre daha ağır, aşağı seviye tabi. Ayrıca benim daha kullanmadığım Sparse ve Coccinelle araçlarını kullanarak da hata düzeltilip katkı verilebiliyor.

Hazırlandığım süre boyunca git kullanımı, çekirdek ve derleme hakkında çok şey  öğrendim. Teknik bilgiler dışında asıl kazandığım büyük deneyimin, uzaktan yabancı birileri ile çalışmak olduğunu düşünüyorum. İlk Opw deneyimim olduğu için bu süreçte geçen zamanın bir kısmını öğrenme ile geçirdim. Bir sonraki opw hazırlığının yama yollama konusunda daha da verimli geçeceğini tahmin ediyorum :)

Bundan birkaç ay öncesine kadar çekirdeğe katkı verebileceğim aklımın ucundan geçmezdi. Desteği için +Necdet hocama ayrıca teşekkür ederim. Gerçekten yapmak isteyip, yeterli zaman ayrıldığında herşey yapılabilir.

Esen kalın :)


 (Yazının orjinalini burada yayınlandım.)

5 Mart 2014 Çarşamba

DevFest Women İstanbul 2014

DevFest Women, bu yıl 2 Mart'ta Bahçeşehir Üniversitesi'nde yapıldı. Etkinlik bilişim ile uğraşan kadınları bir araya getirmek, bu sektörde kadınların neler yaptığını ve yapabileceğini göstermek amacıyla düzenlendi. Konferanslara dileyici olarak erkekler de katılabiliyordu ama çalışma atölyesi sadece kadınlar içindi.

Biz de Çanakkale'den her zamanki gibi büyük bir kalabalık ile İstanbul'a gittik. Cumartesi günü okulumuzdan mezun kriptonlularla bolca sohbet etme fırsatım oldu. Ayrıca +Necdet hocadan isimlerini çokça duyduğum bir türlü göremediğim +sule toker , Cem Sönmez ve Figen Bozkurt ile tanıştım. Fazla konuşma fırsatı bulamasam da o kısa sohbetin ardından çok canayakın olduklarını söyleyebilirim. :)



Etkinlikte bu yıl mezun olacak  +Ebru Akagunduz   ve okulumuzdan mezun +Aydan Taşdemir konuşma yaptılar.

Ebru, Galatasaray Üniversitesi'nden Tülin İzer ile Linux Çekirdeği'ne nasıl katkı verilir konusunu anlattı.  İlgimi çeken bir konuydu. Sunum da gayet güzeldi :)

Aydan ise, supervisord neymiş ne değilmiş bundan bahsetti. İlk defa duyduğum için yeni şeyler öğrendiğim bir sunum oldu. Aydan'ın sunumdaki davranışları, hitap şekli, rahat olması ve kendine güveni; ileride yapacağım sunumlarda nasıl hareket etmem gerektiği konusunda fikir verdi.

Bu iki sunum dışında bir de Google Glass ile tanışma sunumuna katıldım. Ayrıca bir stantta kendiniz de Google Glass'ı deneyebiliyordunuz. Daha yolun çok
başında olduğunu düşünüyorum.

Bir stantta da 3D yazıcıları tanıtıyorlardı.  +Faruk Uzun'a bana hediye ettiği bu 3D yazıcının ürünü anahtarık için teşekkür ediyorum :)

Benim için yine dolu dolu geçen, sevdiklerim  ile görüştüğüm, yeni kişilerle tanıştığım ve yeni çok şey öğrendiğim bir etkinlikti. İyi ki de katılmışız :)

11 Şubat 2014 Salı

Fosdem 2014

Fosdem, Avrupa'da gerçekleşen en büyük özgür yazılım etkinliği. Bu yıl 1-2 Şubat tarihlerinde Brüksel (ULB kampüsü), farklı ülkelerden gelen çok sayıda katılımcıya ev sahipliği yaptı.

 
İki gün boyunca 400'den fazla sunum yapıldı. Bence her katılımcı ilgisine göre bir konu rahatlıkla bulabilirdi. Programı incelerseniz yelpazenin çok geniş olduğunu görebilirsiniz.:)

Ben de iki gün boyunca 13 kadar sunuma katıldım. Ayrı ayrı girdiğim tüm sunumlardan bahsetmeyeyim. Ama bu iki gün boyunca öğrenip denemek istediğim çok uygulama olduğunu söyleyebilirim.



İlk gün en çok "MySQL" salonundaki "ProxySQL" sunumunu ve "Configuration Management" salonundaki "Docker'a Giriş" sunumlarını sevdim. Bir de "Open Document Editors" salonunda "WebODF" diye bir uygulamanın varlığından haberim oldu. Bunu da denemenizi öneririm.:) İkinci gün ise "NoSQL" salonuna girdikten sonra 'diğer sunumu da dinleyeyim' derken etkinliği bitirmişim. Tüm sunumlar videoya alındı, siz de buradan izleyebilirsiniz. 

Etkinlikte hoşuma giden bir konu da, sunum sonunda anlatılan konu ne ise bir demosunun çalıştırılması, yani nasıl kullanıldığının gösterilmesiydi. Bu katılımcıları daha çok denemeye teşvik ediyor bence.  

Dikkatimi çeken bir konu da, sunum bitiminde katılımcıların akıllarına ne takılsa sormalarıydı. Anlatıcı açısından bakarsak geri dönüş yapılması çok hoş. Üklemizde katıldığım etkinliklerde çok az rastladığım için bunu da yazmak istedim.

Biraz da Brüksel'den bahsedeyim. Hava genellike kapalı, bizim iç karartıcı dediğimiz türden. Mevsim gereği dondurucu soğuğa rağmen akşamları az da olsa gezme fırsatı buldum. 

Şehirde ulaşım metro ve tramvay ile sağlanıyor. Genel bir düzen var. Gördüğüm kadarıyla insanlar birbirlerine karşı son derece saygılı ve güler yüzlü. Ülkemizle kıyaslarsak özellikle trafikte yayalar daha öncelikli. Yaya geçidinde arabaların geçmesini beklerken, onların beni beklemesi alışılmadıktı.





Burası Grand Place, Brüksel'in ana meydanı olarak biliniyor ve en çok turistle karşılaşacağınız yer.  Kraliyet Sarayı, Belediye Sarayı bu meydanda bulunuyor.


Bir de Atomium'a gidebildim. Burası Brüksel’de düzenlenen dünya fuarı için inşa edilmiş. Bir demir kristalinin 165 milyar kez büyütülmüş haliymiş. Özellikle gece ışıklandırılmış hali çok göz alıcıydı.

İlk kez yurtdışına çıkıp böyle bir etkinliğe katıldım.Benim için büyük bir tecrübe oldu. Başta +Necdet  hocam olmak üzere emeği geçen herkese teşekkür ederim.


27 Ocak 2014 Pazartesi

Linux Çekirdeği Derlemek

Merhabalar, bu yazımda kısaca bilgisayar açılırken neler olduğundan ve linux çekirdeğinin nasıl derlendiğinden bahsedeceğim.

Bilgisayar açılırken işletim sisteminin; sabit disk, CD-Rom, disket sürücü, USB bellek, ağ kartı gibi cihazları tanıması gerekir. Bilgisayarlarının çoğunda bu disk bağlama işini BIOS yapıyor. BIOS(Basic Input-Output System) bir yonga üzerinde ROM şeklinde yer alan bir yazılımdır.

İlk olarak Bios, çekirdeği ve /dev/initrd'nin içeriğini belleğe yükler. Çekirdek çalışmaya başlayınca /dev/initrd'nin içeriğini /dev/ram0 altına kopyalayıp, /dev/initrd tarafından kullanılan belleği serbest bırakır. 

Başlangıç kök dosya sistemi (/dev/ram0) üzerinde /sbin/init çağrısı (açılış çağrısı) yapılır ve diski bağlanmış olur ve kullandığımız işletim sisteminin arayüzüyle karşılaşırız.

Görüldüğü gibi çekirdek, bilgisayar üzerinde önemli görevleri olan temel bir elemandır. 

1) Yapmamız gereken ilk iş bir kernel sürümü indirmek. (buradan indirebilirsiniz ya da konsoldan "wget link" komutu ile kernel sürümü çekebilirsiniz.) (Kendi kernel sürümünüzü de "uname -r" komutu ile öğrenebilirsiniz.) Ben son stable sürümü indirdim.(3.13)

2) İndirdiğimiz sürümü /usr/src dizini altında "#unxz linux-3.13.tar.xz" ve "#tar xfv linux-3.13.tar" ile açalım ve açılan bu dosyanın içine girelim ("cd linux-3.13")

3) "#make menuconfig" komutunu verelim. Karşımıza aşağıdaki gibi bir ekran çıkacaktır. (bu komutu kullanmak için "#apt-get install libncurses5-dev" diyerek paketi kurmalıyız.)


Bu ekrandan çekirdeğe dahil etmek(*), hariç tutmak() ya da modül olarak bağlamak(<M>) istediğimiz uygulamaları seçebiliriz. Fazlasıyla seçim ekranı ve o ekranın da alt ekranları mevcut. Bence burada boş zaman buldukça incelenip öğrenilecek çok şey var. 

"menuconfig" gibi "#make config" komutu da kullanılabilir. Ancak "#make config" komutu text tabanlı olduğu için, bu komut ile menuconfig'de gördüğünüz tüm seçenekleri daha uğraştırıcı şekilde seçmek durumunda kalırsınız. 

Bu seçimlerden sonra .config diye bir yapılandırma dosyası oluşturmuş oluyoruz. Bulunduğunuz dizinde "#ls -a" deyip oluşan yapılandırma dosyasının oluştuğunu kontrol edebilirsiniz. "#vim .config" komutu ile baktığınızda ise uzunca bir dosya olduğunu görürsünüz. Bu dosya az önceki seçimleriniz ile oluşturuluyor.

4) "#make-kpkg clean" ve "#make-kpkg kernel_image  kernel_headers --initrd" komutları ile derleme işlemini başlatabilirsiniz.

Derleme bitttiğinde kernel paketi oluşmuş olacak. 

5) "#dpkg -i header image" deyip çekirdeği kurmuş olacağız.

Bilgisayarı yeniden başlatıp derlediğiniz kernel'i seçerek, indirdiğiniz sürümü kullanabilirsiniz. Kontrol etmek için yine konsoldan "uname -r" komutunu verebilirsiniz.

Görüşmek üzere..