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>



27 Haziran 2014

Posted In: Açık kaynak, bootstrap, flask, Gezegen, linux, Özgür yazılım, ozguryazilim, python

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.

Hamdi ÖZCAN – ozcan.com

25 Haziran 2014

Posted In: 3DES, AES, apache, dsa, lkd, openssl, pki, private key, public key, rsa, sertifika, SSL, teknik, tr, web

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.


  

23 Haziran 2014

Posted In: Açık kaynak, flask, Gezegen, linux, ozguryazilim, python

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.
  



23 Haziran 2014

Posted In: Açık kaynak, flask, Gezegen, linux, Özgür yazılım, python

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.

17 Haziran 2014

Posted In: lkd_gezegen, Özgürlük için, pardus

Bowling Katası

Robert C. Martin (Uncle Bob)‘un hazırladığı bowling oyunu katasının videosunu hazırladım. Zaman buldukça yeni katalar üretmeye ve videolarını hazırlamaya çalışacağım.

Bowling Oyununun Kuralları

Bowling Skor Tablosu

  • Oyunda toplamda 10 frame bulunmaktadır.

  • Her frame de ise 10 tane labutu vurmak için 2 atış hakkı bulunmaktadır.

  • Her frame’de vurulan toplam labut sayısı skoru gösterir.

  • Her frame’in başında eğer ilk atışta 10 adet labut birden vurulursa strike yapılmış olunur ve sonraki iki atışta vurulan labut sayısı kadar bonus skor kazanılır.

  • Her frame’de 10 pin iki atışta vurulursa spare yapılmış olunur ve sonraki atıştaki vurulan labut sayısı kadar bonus kazanılır.

  • 10. frame diğerlerinden farklıdır. Bir sonraki atış olmayacağı için son frame’de strike yapılırsa 2, spare yapılırsa 1 atış hakkı daha kazanılır.

  • Kurallara göre Bowling’de en yüksek skor, 12 strike ile 300’dür.

Üstteki resimde örnek bir skor tablosu gösterilmiştir. Daha detaylı bilgi için Wikipedi‘den bilgi alabilirsiniz.

Video Kod Kata sitesinde de yayınlanmıştır.

Video

9 Haziran 2014

Özgür Yazılım ve Mülkiyet : Bir Düzeltme

Bilim ve Gelecek’teki ilk yazım özgür yazılım üzerineydi. Sonraki yazılarda da doğrudan ya da dolaylı olarak özgür yazılımı tartıştım. Kimi zaman başlangıçta ilgisiz gibi görünen konular özgür yazılımla sonlandı. Bunun birinci nedeni, yazılımın akıllı ev aletlerinden otomobillere, sağlıktan seçim sistemlerine kadar hayatımızın önemli bir parçası haline gelmesi. İkincisi ise toplum ve bilişim teknolojileri arasındaki ilişkiye özgür yazılımın prizmasından baktığımızda bu ilişkinin içerdiği çelişkileri ve eğilimleri daha net görebilmemiz. Bu yazı da geçmiş sayılardaki bir hatamı düzeltmek istediğim bir özgür yazılım yazısı.Bilim ve Gelecek’in 95. sayısında, “Fikri mülkiyet hakları” başlıklı yazıda Richard Stallman’ın (http://www.gnu.org/philosophy/not-ipr.html) fikri mülkiyet hakları hakkındaki görüşünü paylaşmış, Stallman’ı takip ederek mülkiyet kavramının maddi olmayan kaynaklar (yazılım, müzik, görüntü vb) için kullanılamayacağını savunmuştum:

Fikri mülkiyet, dolaylı olarak fikirlerin de fiziksel nesneler gibi mülkiyet ilişkileri kapsamında değerlendirilebileceğini söyler. Oysa enformasyon, maddi nesnelerin aksine kopyalanabilir ve sonsuz kere paylaşılabilir.

Ardından da Hardin’in “Ortaklaşanın Trajedisi” adlı makalesine yer vermiştim. Hardin, bireylerin kamusal malların kullanımı sırasında eylemlerinin sonuçlarını bütünsel olarak değerlendir(e)memesi nedeniyle kamusal malların bir trajediye mahkum olduğunu belirtir. Özel mülkiyet buna benzer söylemlerle meşrulaştırılır. Hatayı da tam burada, “maddi bir nesnenin kullanımı ile enformasyonun kullanımı tamamen farklıdır.” diyerek yaptım. Çünkü böylece, ortaklaşa mülkiyetin sadece sanal dünyaya ait bir olgu olabileceğini üstü kapalı olarak kabul etmiş oluyordum. Oysa birçok yazıda tam tersini söylemek için özgür yazılımı kullanıyordum.

Bilişimsel, fiziksel varlığa sahip olmayan ürünlerin mülkiyet ilişkileri kapsamında değerlendirilemeyeceği görüşü özgür yazılım ve özgür kültür hareketinin sözcülerinin fikri mülkiyet hakkındaki düşüncelerinin temelini oluşturur ve bilişimin ayrıksılığı (information exceptionalism) olarak adlandırılır. Bilişimin ayrıksılığı, maddi olan ile olmayan arasındaki ayrıma dayanır.

EFF’nin (Electronic Frontier Foundation) kurucularından John Barlow’un sanal dünyanın bağımsızlığı bildirgesi ABD’nin 1996’daki Telekom Kanunu’na karşı yazılmıştır ve sanal dünyanın ayrıksılığı iddiasındadır (bkz. https://projects.eff.org/~barlow/Declaration-Final.html). Barlow’a (1994) göre sanal dünya akışlarla tanımlanır. Maddi/fiziksel dünya isimlerden oluşurken, sanal dünya eylem üzerine kuruludur. Dansçı değil, dansın kendisidir.

Barlow’un bu düşüncesi özgür ve açık kaynak kodlu yazılımcılar ve özgür kültür aktivistleri arasında da son derece popülerdir. Ademi merkeziyetçi, kaynakların paylaşımına ve işbirliğine dayalı pratikler, bilginin özel mülkiyet kapsamında değerlendirilemeyeceğine dair bir bilinç de oluşturur.

Bilginin ağlarda özgür akışını savunanların temel tezi sanal dünyada, maddi dünyada olduğu gibi bir kıtlık olmadığı, herhangi bir ürünün sıfıra yakın bir maliyetle çoğaltılabildiğidir. Bunun karşıtını, fikri mülkiyeti, savunanlara göre ise kopyalamanın marjinal maliyeti sıfıra yakın olsa da ilk yaratım sürecinin maliyeti yüksektir. Dolayısıyla yaratıcı yetenekler konusunda bir kıtlık vardır ve bir teşvik olmadan bir fikir ürünü yaratılamaz. Telif hakları (copyright) ve patentler bu kıtlığı aşmak için gereklidir.

Özgür yazılım ve özgür kültür hareketleri, telif haklarını ve patentleri mülkiyet bağlamında tartışmaktan kaçınır. Onlara göre telif hakları (ya da patentler) bir mülkiyet sorunu olmayıp devlet, hak sahipleri ve vatandaşlar arasında bir politika sorunudur. Buna karşı akla gelen ilk eleştiri, mülkiyetin de bir politika olduğudur. Mülkiyet sorunsalı ısrarla reddedilir ya da görmezden gelinir. Fikri mülkiyet kapsamında tartışılması gereken konular özgürlük, insan hakları, düzenleme, politika çerçevesinde değerledirilir. Bu hareketlerin sözcülerinin yazılarında politikanın ne anlama geldiği sorusuna yanıt aramak boşunadır. Çünkü mülkiyet yerine politika kavramının tercih edilmesi detaylı bir analize dayanmaz; tamamen stratejik bir karardır. Doğal bir hak olarak kabul edilen özel mülkiyetin Amerikan toplumundaki yeri düşünüldüğünde bu strateji daha rahat anlaşılabilir. Stallman, patentleri mülkiyet çerçevesinde tartışmaya kalktığımızda patentlere gerçekte karşı olanların bile özel mülkiyet hakkının etkisi altında kalabileceğini belirtir.

Stallman bu açıdan haklıdır. Ancak sanal dünya olarak adlandırılan olgunun son derece maddi temelleri vardır. PC’ler ortaya çıkmasaydı ve bilgisayar fiyatları ucuzlamasaydı, ağ sadece üniversite ve araştırma laboratuvarlarıyla sınırlı kalsaydı, bugünkü gibi bir sanal dünya oluşamayacaktı. Ya da bugün internet altyapısını kontrol eden güçler oldukça bilginin özgür akışı da tehlike altındadır. Ağın fiziksel alt yapısını sağlayanlar bilginin özgür akışını engelleyecek güce de sahiptirler. Fiziksel ve sanal diye iki bağımsız dünya yoktur. Sadece özel mülkiyet çitlerinin henüz belirmediği bir zamanların sanal dünyası vardır.

Mülkiyeti tartışmaya Hardin’in trajedisinden başlayalım.

Ortaklaşa malların bir trajediyle sonuçlanacağı söyleyen Hardin ne kadar haklıdır?

Benkler (2006) ortaklaşa kaynakları iki parametre ile karşılaştırır. Birincisi, bu kaynaklara kimin erişim hakkına sahip olduğudur. İkincisi ise erişimin nasıl düzenlendiğidir. Bu analiz sonucunda aşağıdaki gibi dört bölgeden oluşan bir matris oluşur:

Düzenlenmiş Düzenlenmemiş
Herkese Açık Düzenlenmiş ortak kaynaklar Açık erişimli ortak kaynaklar
Belirli Bir Gruba Açık Sınırlı ortak mülkiyet rejimleri ?

Hardin’in otlak örneğini bu matrise yerleştirecek olsak kuşkusuz açık erişimli ortak kaynaklar hanesine yerleştirmemiz gerekir. Ama gerçek hayatta ortak kullanılan kaynakların kullanımı, kaynakları kullanan toplulukların normlarına ve belirledikleri protokollere, mülkiyet ilişkilerine, göre gerçekleşir. Bu nedenle, özgür yazılım projelerinde gözlemlenebileceği gibi, otlağın ortak kullanımı da bir trajediyle sonlanmayıp toprağın daha verimli kullanımını da sağlayabilir.
Günümüzde birçok insan mülkiyeti özel mülkiyetin sınırlı bakış açısıyla algılamaktadır. Mülkiyeti tartışırken, hangi kaynaklara kimlerin erişim hakkına sahip olduğu, erişim hakkına sahip olanların bu haklarının kapsamı, bu kaynaklardan elde edilen zenginliğin kime ait olduğu, kaynakların alımı, satımı, hakların başkalarına devri, kaynakların geleceği üzerine kimlerin karar verdiği, kararın hangi süreçlerin sonunda oluştuğu ve hangi değerlere referansla alındığı vb soruları sormamız gerekiyor.
Pedersen’e (2010) göre mülkiyetten söz ederken “A, B’ye sahiptir” formülü yeterli değildir. Bu formüle C’yi de katarak, formülü “A, C’ye karşı B’ye sahiptir.” haline getirmemiz gerekir. Buna göre mülkiyet ilişkisinin üç temel ögesi vardır: ilişki kuran özne, ilişki kurulan kaynak ya da nesne, ilişkisel şekil.
İlişki kuran özne yalnızca mülk sahibi kişi ya da grup olan A değil, A+C’dir. A+C, ulus devlet bünyesindeki bir insan topluluğu, kabile topluluğu, bir toplumsal hareket ya da tüm insanlık olabilir. A+C sabit değildir, birbirleriyle ve B ile etkileşimleri sürecinde kendilerini yeniden üretirler.
B, ilişki kurulan nesne, kaynak ya da kaynaklar kümesidir. B, fiziksel bir varlığa sahip olabilir ya da olmayabilir. Ama her zaman insanlar için bir anlam ve değer taşır.
İlişkisel şekil ise A+C’nin B’ye göre olan içsel ilişkilerini ifade eder. İlişkisel şekil, bu ilişkileri belirleyen protokoller ve normlardır. Mülkiyet ilişkilerinin analizinde

  • Bireylerin ya da grupların birbirleriyle ve mülk konusu kaynakla (ya da nesneyle) ilişkisi
  • Sahip olmanın biçimi ve sahip olunan kaynaktan nasıl fayda sağlandığı
  • Bireylerin ve grupların davranışlarını belirleyen hak, görev ve ayrıcalık örüntüleri

dikkate alınmalıdır. Mülkiyet ilişkilerini tartışırken aşağıdaki üç sorunun sorulması gerekmektedir:

  1. Nasıl : Mülkiyet ilişkileri nasıl, hangi değerlere göre gerçekleşmektedir?
  2. Kim : Mülk konusu kaynak/nesne üzerinde karar verici kimdir?
  3. Ne : Mülk konusu nesne/kaynak ile ne yapılabilir?

Nasıl sorusunda öncelikle tartışılan mülkiyetin hangi değer ve normlar (özel çıkarlar, toplumsal çıkarlar, sınıfsal çıkarlar, grupsal çıkarlar vb.) ile meşrulaştırıldığıdır. Bu değer ve normlar, birbirlerinden kesin çizgilerle ayrılmadığı gibi sabit değildir, tarihsel süreç içinde değişir.

Bir nesnenin/kaynağın kullanım hakkı ile onu kontrol hakkı aynı öznede olmak zorunda değildir. Bir park herkesin ziyaretine açık olabilir. Ama park içinde hangi düzenlemelerin yapılacağına karar verenler başkaları olabilir. Bu bağlamda, karar verenin kim olduğu önem kazanır. Karar verenin kararlarının meşru olabilmesi için kararları önceki paragrafta belirtilen değerlerle uyumlu olmalıdır.

Karar vericiler, mülkiyet nesnesi üzerindeki eylemin gerçekleşmesine yardımcı olur ya da onu kısıtlar, diğer insanların ne yapabileceğine karar verirler. Örneğin karar verici boş bir araziyi park haline getirebileceği gibi buraya AVM yapmak da isteyebilir.

genel_mulkiyet

Bir mülkiyet ilişkisini analiz ederken, “A, C’ye karşı B’ye sahiptir” formülünden yola çıkarak nasıl, kim, ne soruları ile mülkiyet ilişkisinin hangi norm ve değerlerle meşrulaştırıldığına, bu değerlere göre karar verenlerin kimliğine ve mülkiyet kapsamında yer alan eylemlerin neler olduğuna yanıt vermemiz gerekir.

Şimdi bu soyut ilişkiyi sırasıyla özel mülkiyette, kapitalist özel mülkiyette ve özgür yazılımda geçerli olan mülkiyette somutlayalım.

Özel Mülkiyet

ozel_mulkiyet

Kullanım ve erişim hakları mülkiyet ilişkisinin temelidir. Mülk sahibi, bahçesindeki elma ağacındaki elmaların hepsini kendine ayırabilir, komşularıyla paylaşabilir ya da ağaçta kurumaya terk edebilir. Yukarıdaki şekildeki eşkenar dörtgen, mülk sahibinin sahip olduğu kaynak üzerinde karar verme hakkına da sahip olduğunu göstermek için kullanılmıştır. Karar ve kullanım hakkına aynı anda sahip olan mülk sahibi bazı komşularına istedikleri zaman bahçesindeki elmaları yiyebileceklerini söylerken de bahçesindeki ağacı keserken de mülk nesnesi üzerindeki karar verme hakkını kullanır. Nesneyi/kaynağı kullanırken ya da onun hakkında karar verirken, bunu kişisel çıkarlarına göre yapar. Kaynak üzerindeki karar hakkı, kişisel çıkarlar toplumca meşru görüldüğü için meşrudur.

İzinsiz girme kuralları, mülk sahibinin alanına izinsiz girişleri sınırlayan normlar ve yasal sınırlamalardır.

Kapitalist Özel Mülkiyet

Kapitalist özel mülkiyet, özel mülkiyetin hafifçe değiştirilmiş halidir. Burada mülk sahibi mülkü üzerinde karar verme hakkının yanında mülk nesnesi ve ondan elde ettikleri üzerinde değişim hakkına da sahiptir. Mülkün pazardaki değişim değeri mülk sahibine kaynaklarını bu yönde kullanma yönünde bir motivasyonda sağlar. Servet etkileri, yani mülk konusu nesne ya da kaynakların değişim sürecine girmesi, metalaşmanın, pazar için üretimin de temelini oluşturur.

Dolayısıyla, “Kullanım ve erişim hakkı”, “Karar hakkı” ve “Servet etkileri” bir bütün olarak, kişisel çıkarlarla hareket eden ve yine bu çıkarlar doğrultusunda meşru görülen kapitalist özel mülkiyeti oluşturur. Pedersen’in (2010) vurguladığı gibi bu ilişkisel yapıda herhangi bir değişiklik yaptığımızda büyük altüst oluşlar yaşanacaktır. Örneğin sadece gayrimenkulde, özel mülkiyeti ortadan kaldırmaksızın, servet etkilerini (değişim hakkı) yasakladığımızı düşünelim. Herkes kendi evinin sahibi olacak ama onu satamayacaktır. Ya da değişim hakkını kaldırmayalım, farklı kısıtlamalar getirelim: Her ailenin bir evi olacak, satın alınan bir beş yıl boyunca tekrar satılamayacak diye bir yasa çıksın.

Bir sonraki bölüme geçmeden önce isterseniz birkaç saniye yukarıda ufak değişikliklerin toplumsal ilişkilerde yaratacağı değişimi (altüst oluşu demek belki daha doğru) hayal edelim!

Özgür Yazılımda Mülkiyet

Özgür olmayan yazılımları tanımlarken, açık kaynak koda karşı özgür yazılımı savunanlar arasında bile, “kapalı kodlu yazılım” kavramını tercih edenler vardır. Ancak kaynak koduna erişim hakkı sınırlı bir haktır. Kaynak koduna erişim ve onu inceleme hakkımız olabilir. Ama bu yazılımı özgür yapmaz. Dolayısıyla her özgür yazılımın kaynak kodları açıktır ama kaynak kodu açık olan her yazılım özgür yazılım değildir. Bu nedenle, örneğin bir Microsoft yazılımını tanımlarken “kapalı kodlu yazılım” yerine “özel mülk yazılım” kavramının tercih edilmesinin daha doğru olacağını düşünüyorum.

Yazılımın değişim sürecindeki tüm özgünlüğüne rağmen yazılım, mülkiyet ilişkileri çerçevesinde değerlendirilebilir. Herhangi bir özel mülk yazılım, yukarıda belirtilen kapitalist özel mülkiyet ilişkisi ile örtüşmektedir. Yazılımın kullanım, erişim ve değişim hakları belirli bir şirkettedir. Şirket doğası gereği kendi çıkarını en fazlalaştırmak isteyecektir. Karar hakkı tamamen şirkete aittir. Şirket, bu yazılımın kullanım hakkını belirli şartlar altında başkalarına satıp bundan gelir elde edecektir. Kullanıcılara sattığı kullanım lisanslarında yazılımın kullanım alanını kısıtlayabilir. Ticari amaçlar için kullanıma izin vermeyip bunun için farklı bir lisansı şart koşabilir.

Ayrıca şirket, kullanım hakkı satışından vazgeçip başka şeylerden (örneğin kişisel bilgiler ve reklamlar) gelir elde etmek için yazılımını ücretsiz olarak dağıtabilir. Hatta maddi çıkarları doğrultusunda yazılımın kaynak kodlarını belirli bir kesimin incelemesi için açabilir. Ancak her iki durumda da yazılımdaki karar hakkı sadece şirkete aittir.

Yazılımda şirketin özel mülkiyetini ihlal girişimlerine karşı ise telif hakkı (copyright) kanunları devreye girer. Şirketin özel mülkiyeti ulusal ve uluslararası anlaşmalarla koruma altına alınır. Bu anlaşmalar, telif hakkının geçerlilik süresi, hangi durumlardaki şirketin özel mülküne erişimin suç kabul edilmeyeceği gibi kuralları içerir.

Özgür yazılım ise kaynakları açık, herkes görebildiği için değil, mülkiyet ilişkilerinin farklılığı nedeniyle özgürdür.

ozgur_mulkiyet

Özgür yazılımda temel değer özel mülk yazılımda olduğu gibi kişisel çıkarlar değil, dayanışmadır. Stallman anılarında 1971’de MIT Yapay Zeka Laboratuvarı’nda çalışmaya başladığı günleri anlatırken programcılar arasındaki dayanışmadan, o zamanlar henüz yazılım için özgür sıfatını kullanmasalar da yazılımı nasıl paylaştıklarından, arkadaşlarında görüp beğendikleri bir kodu nasıl keyiflerince incelediklerinden söz eder. Özel mülk yazılım lisanslarının ortaya çıkışı en başta bu değerlere bir saldırıdır. Stallman yeni yazılım lisanslarının insanlara paylaşım konusunda iki seçenek sunduğundan söz eder: ya yazılımı paylaşarak yasalar karşısında suçlu duruma düşeceksiniz ya da paylaşmayı reddederek arkadaşlık ilişkilerinize zarar vereceksiniz. Stallman, yazılımın paylaşıldığı eski günlere dönmek istemektedir.

Özgür yazılımda, yazılımın kullanım haklarını belirli bir grubun çıkarları doğrultusunda sınırlayabilecek herhangi bir kişi ya da kuruluş yoktur. Bu, telif haklarını (copyright) kullanıp onu copyleft ile olanaksız hale getirerek elde edilir. Geliştirilen herhangi bir yazılım yasalar gereği telif hakları ile korunur. Ama özgür yazılım, copyleft ile bu hakkı tersine çevirir. Yazılımı geliştiren şöyle der: “Telif hakları gereğince yazılımda karar hakkı benimdir. Yazılımın kendisini de kaynak kodunu da dilediğiniz gibi kullanabilirsiniz. Ama yazılımı kendi ihtiyaçlarınızın ötesinde satmak, pazarda değişime sokmak isterseniz benim kurallarıma uyacaksınız.”

Yazılımın kaynak kodunun sonraki yazılımlar için potansiyel bir üretim aracı olmasından yola çıkılarak değişime sınırlama getirilir:“Yazılımın kaynak kodlarını değiştirebilir, ona eklemeler yapıp geliştirebilirsin. Bu geliştirdiğin yazılımı başkalarıyla ücret karşılığı ya da ücretsiz paylaşabilirsin. Ama bir şartım var: Sana verdiğim hakları geliştirdiğin yazılımda başkalarına da vereceksin. ”

Özgür yazılım projelerindeki teknik kararlar ile mülkiyet hakkındaki kararlar tamamen farklı konulardır. Teknik kararlarda farklı mekanizmalar söz konusu olabilir, ama özgür yazılımda mülkiyet kararları copyleft doğrultusunda gerçekleşir. Teknik kararları beğenmeyen birinin aynı kaynak kodunu alıp farklı bir teknik kararla yeni proje başlatma hakkı vardır.

Böylece özgür yazılımlar kartopu gibi büyürken insanlar özgür yazılımı ihtiyaçları doğrultusunda kullanırlar, yetenekleri kadar katkıda bulunurlar. Özgür yazılım, özgür yazılımın dayanışma ve paylaşım değerlerine göre gelişir, bu değerlere paralel toplumsal ilişkiler yaratır. Bu ilişkilerin içinde yer alan topluluğun üyeleri bilinçlidir ve üretim aracına sahip olmanın (kendileri bu şekilde ifade etmese de…) öneminin farkındadır. Özgür yazılım topluluğunun bu sorumluluk ve bilinci Hardin’in trajedisinin yaşanmayacağının garantisidir.

Özgür yazılımların kuralları, telif hakları (copyright) üzerine kurulu olan GPL (Genel Kamu Lisansı) ile sağlanır. Telif hakları geçerli olduğu sürece GPL de geçerlidir, mahkemelerce tanınmıştır.

Bu bağlamda, İsveç Korsan Partisi ile Özgür Yazılım Vakfı arasındaki telif hakları tartışması ilginç ve de öğreticidir. İsveç Korsan Partisi, seçimlerde %7.1 oy olarak İsveç’i Avrupa Parlamentosu’nda 18 kişiyle temsil etme hakkı kazandıktan sonra telif haklarında bir reform önerir. Korsan partisinin önerisine göre telif haklı bir çalışma beş yıl sonra kamu malı haline gelecektir. Özgür yazılım hareketi bu öneriye karşı çıkar. Çünkü beş yıl sonra bir özgür yazılım kaynak kodlarıyla beraber telif hakkından muaf olduğunda özel mülk yazılım geliştiren firmalarca özgür yazılımcıların birikmiş emeğine el konulup, özel mülk haline getirilebilecektir. Fakat özgür yazılım hareketi, özel mülk yazılımlar kaynak koduyla beraber dağıtılmadığı için aynı fırsattan hiçbir zaman yararlanamayacaktır. Özel mülkiyetin kanunları, yazılımdaki kamusal mülkiyetin güvencesi haline gelmiştir. Özel mülk yazılım tamamen ortadan kalkmadığı sürece telif haklarındaki herhangi bir gevşeme özgür yazılıma zarar verebilir.

***

Özgür yazılımı, bir politika olarak değil de mülkiyet ilişkileri bağlamında tartışmanın özgür yazılıma nasıl bir etkisi olabilir? Özgür yazılım hareketi kendini nasıl ifade ederse etsin, özgür yazılımı ister politika isterse mülkiyet olarak görsün, son derece başarılı bir şekilde yazılımda üretim araçlarının kamusal mülkiyetini sağlamıştır. Özel mülkiyeti tartışmak, özellikle Amerikan kamuoyunda yanlış anlaşılmalara neden olabilir. Çünkü özgür yazılım ve özgür kültür yazınına baktığımızda bir yanda özel mülkiyetle ilişkili Amerikan özgürlük ideallerini diğer yanda hiç güzel şeyler çağrıştırmayan, mülkiyetin ve özgürlüklerin devletin kontrolünde olduğu komünizmi görürüz. Bunun aşılması özellikle Amerikalılar için pek kolay değildir. Fakat telif hakları ve patentler, sanal dünya için her zaman bir tehdit olacaktır. Bu tehdidin gücünü maddi dünyadaki kapitalist özel mülkiyet ilişkilerinden aldığını göz önünde bulunursak kapitalist özel mülkiyeti tartışmanın, kapitalist özel mülkiyetin hegemonyasını zayıflatacağı, özgür yazılıma daha rahat bir yaşam alanı sağlayacağı da söylenebilir.

Ama Pedersen’in (2010) belirttiği gibi asıl diğer toplumsal hareketlerin özgür yazılımdan öğreneceği çok şey var. Özgür yazılımın ötesinde, mülkiyet kavramının özgür yazılım bağlamında tartışılması kapitalist özel mülkiyetin tek mülkiyet biçimi olmadığını anlatabilmek, farklı girişimlere cesaret edebilmek açısından yararlı olabilir.

Kaynaklar

Barlow, J. P. (1994). The economy of ideas. Wired, 2(3), 84-88.

Benkler, Y. (2006). The wealth of networks: How social production transforms markets and freedom. Yale University Press.

Pedersen, J. (2010). Introduction: Property, Commoning and the Politics of Free Software. The Commoner, (14), 8-48.

8 Haziran 2014

Posted In: Fikri Mülkiyet, Özgür yazılım, Patent, Telif

Telnet ile SMTP doğrulama ile e-posta gönderiminin test edilmesi

Herhangi bir sunucudan e-posta gönderip gönderemediğinin en temel yöntemi, telnet komutuyla herhangi bir e-posta istemcisinin haberleşmesini taklit etmek. Böylece sorunun (varsa) nerede olduğunu tespit etmek mümkün. Eğer telnet’le e-posta gönderirken sorun yaşamıyorsanız, sorun kullanmak istediğiniz istemci ayarlarında demektir.

İstemciler her zaman anlamlandırabileceğimiz hata mesajları da vermeyebiliyor, telnet ile gönderim, bir sorun varsa hangi noktada olduğunu tespit etmekte de yararlı olabilir.

Eğer karşı sunucuya relay hakkınız varsa, isim/parola girmeden kolaylıkla e-posta gönderebilirsiniz. Aşağıdaki anlatımda “AUTH LOGIN” ile “235 2.7.0 Authentication successful” satırları arasında kalan kısmı toptan pas geçebilirsiniz.

Eğer çoğu durumda olduğu gibi e-posta gönderimi için isim/parola doğrulaması yapmanız gerekiyorsa, bu bilgileri base64 kodlayarak göndermeniz gerekiyor. Bunu aşağıdaki perl satırı ile bu kodlamayı yapabiliriz:

perl -MMIME::Base64 -e 'print encode_base64("icerik");'

Örneğin,

[dfisek@karadut ~]$ perl -MMIME::Base64 -e 'print encode_base64("gonderen@alanadi.com");'
Z29uZGVyZW4uY29t
[dfisek@karadut ~]$ perl -MMIME::Base64 -e 'print encode_base64("parolacim");'
cGFyb2xhY2lt

Şimdi e-posta gönderimini test edebiliriz:

[dfisek@karadut ~]$ telnet eposta.alanadi.com 25
Trying 195.112.152.4...
Connected to 195.112.152.4.
Escape character is '^]'.
220 eposta.alanadi.com ESMTP Postfix
AUTH LOGIN
334 VXNlcm5hbWU6

Burada belirtilen VXNlcm5hbWU6 ifadesi, size base64 kodlanmış olarak kullanıcı adınızı girmenizi istiyor. Girelim biz de (üstte kodladığımız ifadeyle):

Z29uZGVyZW4uY29t
334 UGFzc3dvcmQ6

Bu kez de bize base64 kodlanmış olarak parolamızı sordu. Girelim yine (üstte kodladığımız ifadeyle):

cGFyb2xhY2lt
235 2.7.0 Authentication successful

Parola doğrulama işlemini bitirdik. Artık e-postamızla ilgili sunucuya bilgi verebiliriz:

MAIL FROM: gonderen@alanadi.com
250 2.1.0 Ok
RCPT TO: alici@alanadi.com
250 2.1.0 Ok
DATA
354 End data with .

Bu başlıklar, e-postanın kimden kime gideceğini e-posta sunucusuna söyledi. Biz de e-postanın içeriğini yazmak istediğimizi DATA komutuyla e-posta sunucusuna söyledik.

Önce e-postanın başlıklarını yazıyoruz (küçüktür-büyüktür işaretlerinden önce/sonra gelen boşlukları siliniz):

From: Gonderen Adi < gonderen@alanadi.com >
To: Alici Adi < alici@alanadi.com >
Subject: E-posta gönderim testi

İlk “MAIL FROM” e-posta sunucusuna bilgi verirken, burada kullandığımız ikinci “FROM:” göndermek istediğiniz postanın içinde yer alıyor. Artık e-postanın gövdesini yazabiliriz. Yazdıklarımız bittiğinde bir kez boş satıra enter’a, daha sonra bir kez . yazıp enter’a, son olarak da tekrar boş satıra enter’a basmamız gerekiyor. Böylece e-postanın bittiği anlaşılıyor:

E-postam geldiyse beni iki kere pingle.

.
250 2.0.0 Ok: queued as 384E125B587

E-postamız başarıyla kuyruğa alındı.

Bu aşamalardan herhangi birinde takılıyorsanız, gönderimde tam sorunun nerede olduğunu buldunuz demektir.

8 Haziran 2014

Posted In: Gezegen

Linux Mint için Firefox’un yeni sürümünün kurulması

Firefox 29’u Linux dağıtımına nasıl kurabilirim?

Uzun süredir kullandığım Linux Mint 14 sürümünü bir türlü vakit bulup yeni sürüme geçiş yapamadım. Bir işletim sistemini kullanmaya başladıktan sonra dosyaların kontrolden çıkarak çoğalması ve dağılması ve işlerimin yoğunluğundan ötürü işletim sistemini yeniden kurmayı hep erteliyorum. Sürüm değişikliklerinde güncelleme pek önerilmediği için tekrardan yeni kurulum yapmak gerekiyor.

29 Nisan 2014 tarihinde yayınlanan Firefox’un yeni sürümünü kullanmak istiyordum. Bir süredir bir çok kişi gibi bende Google Chrome’dan biraz şikayetçiyim. Fakat paket yöneticisinde son sürüm Firefox olmadığı için oradan kuramadım. (Belki de uzun süredir sistem güncelleştirmelerini yapmadığım için paket yöneticisinde yeni versiyon gözükmüyordur)

5 basit adımda Firefox 29’u Linux dağıtımına kurabilirsiniz. Aşağıdaki adımları sadece Linux Mint için değil. Ubuntu, Debian, CentOS, Fedora ve diğer tüm Linux dağıtımları için uygulayabilirsiniz.

5 Basit Adımda Firefox 29 kurulumu

1. İndirme

Kullandığınız sisteme göre 64 bit veya 32 bit son versiyon Firefox’un son versiyonunu aşağıdaki bağlantıdan indirebilirsiniz.

www.mozilla.com/firefox/channel/

İndirdiğiniz dosya yüksek ihtimal Başlangıç(Home) klasörünüzde bulunan İndirilenler(Downloads) klasörüne inmiştir.

2. Açma

İndirdiğiniz tar.bz2 uzantılı dosyayı sağ tıklayak “buraya aç” komutu vererek olduğu klasör içine açabilirsiniz. “Firefox” isimli bir klasör olarak açılacak.

Alternatif olarak bu işlemi Terminal penceresi yardımı ile de yapabilirsiniz. Zaten bundan sonra yapacaklarımızı terminal üzerinden yapacağız.

cd ~/Downloads/
tar xjf firefox-29.0.tar.bz2

3. Taşıma

LibreOffice, Google Chrome, Adobe Reader vb. harici olarak kurulan programlar /opt klasörüne yerleşirler.

Eski sürüm bir Firefox hali hazırda sisteminizde kurulu ise, bunu silmek için terminal penceresinde aşağıdaki komutu uyguluyoruz.

sudo rm -r /opt/firefox

Şimdi dosyayı nereye indirdiyseniz “cd” komutu yardımı ile oraya gitmeniz gerekiyor. İndirilenler klasörüne indirdiğinizi varsayıyorum. Bu arada terminal penceresi açtığınızda her zaman bulunduğunuz konum başlangıç klasörü olur. İndirilenler klasörüne girmek için;

cd İndirilenler

yazıp İndirilenler klasörüne giriyorum.

Daha sonra burada açmış olduğum Firefox son sürüm dosyalarını aşağıdaki komut yardımı ile taşıyorum

sudo mv firefox /opt/firefox29

4. Firefox Bağlantılarının düzenlenmesi

Firefox simgesine tıkladığınızda son versiyon Firefox’un açılabilmesi için aşağıdaki komutları uyguluyoruz.

Eski versiyon Firefox bağlantılarını yedeklemek için

sudo mv /usr/bin/firefox /usr/bin/firefox-old

Yeni Firefox sürümü için kısayol bağlantısı oluşturmak için

sudo ln -s /opt/firefox29/firefox /usr/bin/firefox

5. Firefox’u çalıştırma

Firefox’u çalıştırdığınızda Firefox kendisi düzenleme ve güncelleme işlemleri yapacaktır. Bu arada eklentileri gözden geçirip daha hızlı bir tarayıcı kullanmak için kullanmadığınız eklentileri devre dışı bırakabilirsiniz.

6 Haziran 2014

Posted In: linux, linux mint firefox 29 kurulumu, yazılım

Twitter Auto Publish Powered By : XYZScripts.com