17 April 2015

Linux Çekirdeğine Tracepoint Eklemek


Linux kaynak kodunda değişiklik yaptıktan sonra, bunları izlemek için farklı yollar var. Ben henüz çok değişik bir şey kullanmadım. Bu zamana kadar hep printk ile kern.log'a aktarıp, sonra grep, wc, tailsplit gibi komutlarla inceleme yapıyordum. Aslında çok farklı şeyler kullanırım sanmıştım :) ama danışmanım ilk olarak bu yöntemi önerdi.

kern.log'u incelemek sandığım kadar rahat olmuyor, her adımda kodun patlamadığından emin olmalıyım. Bu yüzden bir sürü şey yazdırıyorum, gerçi panik olduğunda otomatik olarak loglara düşüyor ama bazı askıda kalma durumlarında düşmeyedebilir. Birde her testten sonra log dosyasını boşaltıyorum sonra içinden bir şeyler parse etmek zorlaşıyor, sadece 1 test için dosya boyutunun 15M olduğunu hatırlıyorum. kern.log'u boşaltmak için bir yöntem olarak "sudo tee /var/log/kern.log < /dev/null", bunu kullanabiliriz. Hiç boşaltmadan test yapmaya devam ettiğimde dosya boyutu .. ^_^. Elbette inceleme yapılamayacak kadar büyük oluyor diye bir düşüncem yok ama zorlaştırmasak iyi olur.

Uzunca bir süredir yaptığım değişikliklerde beklenmedik sonuçlar görüyorum, aslında beklenmedik sonuçlar görmek elbette en beklendik şey :P, ilk zamanlar test yaparken her testte farklı bir sonuç görürdüm. Danışmanımın emin misin bunu gördüğüne, o zaman şunu da ekle demesine neden olmuşumdur, sonra başka bir testte ben yanlış bakmışım problem o değilmiş şeklinde döndüğüm çok olmuştur :). Ancak bu sefer öyle olmadı, ben uzunca bir süre hep aynı beklenmedik sonucu aldım. Bu durumda oluşabilecek ihtimaller, 1- ben yanlış bakıyorum, 2- pteleri swapten çektiğim halde hala bir şeyler onların swapte gibi loglanmasına neden oluyor, bunun nedeni belleği mantıklı kullanmak ya da tekrar swape gitmesi gerekirse daha az işlem yapmak istemeleri olabilir.

Test yaparken 800M'lık verinin üzerindeki değişimlere bakıyorum, büyük sayfalar 2M olarak tutuluyor. Tek bir büyük sayfa için 512 kere (normal sayfalar 4kB) döngü yapılıyor, benim de her döngüde 15 satıra yakın yazdırdığımı düşünürsek, bu durumda loglarda gözümden bir şey kaçmamıştır demek pek mümkün değil :). İşte tam bu gibi problemler için tracepoint'ler var.  Tracepoint eklediğimiz her fonksiyon için bir kez çalışıyor, aslında değişkenlerin son değerini, kodun sonuna printk ekleyerek de yazdırabiliriz. Ancak bu yöntem boş yere kern.log'u dolduruyor ve kendi testlerimiz için eklediğimiz printk'lar ile birlikte upstream'e yama gönderemeyiz zaten, yani göndermesek iyi olur :). Tracepointler; printk ekledim, eklemeyi unuttum (bir daha derle), upstreame göndermeden önce printk'ları kaldır bir daha derle - test et gibi şeyleri önlüyor. Tracepoint kodu yazıyoruz ve bir kere derliyoruz, sonra eğer o değişkenlerin değerine bakmak istersek perf aracı ile testleri çalıştırıyoruz ve değerleri görüyoruz :).

Tracepoint Nasıl Tanımlanır?

Daha önceden tanımlanmış tracepoint kodlarını inceleyebiliriz. Birde lwn.net'te çok açık anlatan yazılar var. Örneğin vmscan.c'deki birkaç fonksiyon için tracepoint ekleyeceğiz. Bunun için  include/trace/events/'de vmscan.h dosyası oluşturmalıyız. Tracepoint yazmak için yapmamız gerekenler: 1) temel tanımlamaları yapmak, 2) TRACE_EVENT() tanımlamak, 3) TRACE_EVENT içerisinde belirttiğimiz fonksiyonu kaynak kodda çağırmak.

#undef TRACE_SYSTEM
#define TRACE_SYSTEM vmscan

#if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_VMSCAN_H

TRACE_EVENT(....
                             .....
);

#endif /* _TRACE_VMSCAN_H */
#include <trace/define_trace.h>

Şimdi TRACE_EVENT() içeriğini tanımlayalım:
TRACE_EVENT(name, proto, args, struct, assign, print)
name: Kaynak kod içerisinde çağırılacak fonksiyonun adı.
proto: Fonksiyon için prototip.
arg: Fonksiyonun alacağı değişkenler.
struct: Tracepoint içine geçen verilerin depolanması için yapı.
assign: Değişken ataması yapmak için kullanılıyor.
print: Değişkenleri yazdırmak için kullanılıyor.

Yazdırmak istediğimiz değişkenler sadece struct shrinker *shr ve unsigned long lru_pgs değişkenleri olsun:

TRACE_EVENT(mm_shrink_slab_start,
    /* proto */
    TP_PROTO(struct shrinker *shr, unsigned long lru_pgs),
    
    /* arg */
    TP_ARGS(shr, lru_pgs),

   /* struct */
    TP_STRUCT__entry(
        __field(struct shrinker *, shr)
        __field(unsigned long, lru_pgs)
    ),

    /* assign */
    TP_fast_assign(
        __entry->shr = shr;
        __entry->lru_pgs = lru_pgs;
     ),

     /* print */
     TP_printk("shr = %p,  lru_pgs = %ld",
                       __entry->shrink,
                       __entry->lru_pgs)
);

TRACE_EVENT içerisinde mm_shrink_slab_start şeklinde belirttiğimiz fonksiyonu, vmscan.c dosyasından, önüne trace_ ekleyerek bu şekilde çağırıyoruz: trace_mm_shrink_slab_start(shr, lru_pgs); Bu değişkenler için sırasıyla proto, arg, struct ve assing'ı tanımladık. Daha sonrasında print ile yazdırma kısmını ekledik.

vmscan.h dosyasının tüm içeriğine buradan bakabilirsiniz. Dosya içerisinde event_class, define_event gibi tracepoint'leri gruplayarak tekrara düşmeyi önleyen makrolar kullanılmış. Ben henüz bunlara gerek duymadım. Tracepoint kullanmak için yukarıda belirttiğim 3 temel maddeyi yapmak yeterli.

                   http://lwn.net/Articles/379903/


13 April 2015

Half-Life 3 Hakkında Bazı Tahminler


Okuduğum bazı haberlerde Valve’in Half-Life 3’ü kendi oyun konsolunun (Steam Machine) tanıtımını yapabilmek için SteamOS ile aynı anda ilk önce SteamOS’a özel olarak çıkartması, daha sonra bunu takip eden birkaç ay sonra ise Mac ve Windows platformlarına getirmesi olasılığına değiniliyor.

Tux_Freeman_by_EnPsyane

Konuyu takip eden herkes SteamOS işletim sisteminin temellerinde GNU/Linux’un yattığını bilir; yani Half-Life 3’ü ilk önce Ubuntu, Mint gibi Linux kullanıcılarının oynayacak olması anlamına geliyor bu. Bundan on sene önce, bilemedin hadi beş sene önce tüm dünya “Linux’ta oyun oynanmaz” diyip geçerken artık günümüzde dünyada oyuncuların neredeyse GTA5 heyecanıyla beklediği Half-Life 3’ün ilk önce Linux’ta oynanabilecek olması olasılığı gayet sevindirici. Tamam Half-Life 3 çok büyük olasılıkla bir özgür yazılım olmayacaktır ama yine de Linux’un tanınırlığını artırmak için gayet mantıklı bir hamle olacaktır.

“Half-Life 3 mü geliyormuş?” demeyin bu arada; Rockstar’ın GTA5’i duyurduğu ilk günden bu yana PC’ye de getireceği ne kadar belliydiyse HL3’ün şu an geliştirilmekte olduğu ve gelecek bir tarihte oyuncularla buluşacağı da o kadar net, sadece henüz anons etmiyorlar tarihini.

Resim kaynağı: http://enpsyane.deviantart.com/art/Tux-Freeman-14014474



06 April 2015

Sparse Nasıl Kullanılır?


Sparse, Linux çekirdeğine katkı verirken kullanılabilen araçlardan biri. Linus Torvalds tarafından yazılmış statik kod denetleyicisi ve bir süredir de bakımını Josh Tripplett yapıyordu.

Normalde çekirdek derlemesi yaparken almadığımız hataları/uyarıları Sparse'ı etkinleştirerek alabiliriz. Peki Sparse bize ne tür hatalar döndürüyor? Makro kullanımlarındaki yanlışlıklar, tip dönüşüm hataları, static & extern gibi anahtar kelimelerin kullanımlarında yanlışlık varsa ya da bir fonksiyon üretildiği ve hiç kullanılmadığı durumlarda uyarı veriyor.

Kurulum için sparse paketini kurmak yeterli ya da depodan çekerek de kurabiliriz. Temel kullanımı ise şu şekilde: make C=2 drivers/staging/wlan-ng/ 

Sparse'ı kullanabilmek için çekirdek hakkındaki en temel veri tiplerini, makrolarını bilmek gerekiyor. Eğer static, extern ifadelerindeki kullanımları düzeltmek gerekiyorsa o fonksiyonların nerelerde çağrıldığına, hangi başlık dosyasında tanımlandığına bakıp düzeltme yapmak gerekiyor. Ben sparse'ı ilk kullanmaya başladığımda bu yazıyı okumuştum, zaten okumamla birlikte oldu o zaman, beni evden beklerler demem bir olmuştu :). Sparse ile katkı vermeye başladığımda da artık beni evden beklemiyorlar demeyi unutmadım tabi ^_^.

Sparse kullanırken veri gösterimlerindeki hataları da alabiliriz. Eğer driver Makefile dosyasında endian kontrolleri etkinleştirilmediyse, sparse kullanırken  make C=2 CF="-D__CHECK_ENDIAN__"  drivers/staging/wlan-ng/  şeklinde bayrağı aktif etmeliyiz.

Verileri big endian ya da little endian şeklinde göstermek tasarımcıya göre değişen bir şey. Veri biçminde anlaşabilmek için işlemcinin kullandığı yerel biçimden driverın kullandığı biçime dönüş yapmak gerekebiliyor. Bunun için cpu_to_le16(), ya da le16_to_cpu() fonksiyonları var. Bu fonksiyonlar little endian 16 bit olan veriler için. Veri gösterimiyle ilgili fonksiyonlara buradan ulaşabilirsiniz. Birde burada örnek var, gayet yararlı olduğunu düşünüyorum :). Burada temel problem fonksiyonların aldığı değişkenler ya da atama işlemlerinde meydana gelen tip uyumsuzlukları. Bu gibi durumlarda değişkenin tipini değiştirmek ya da dönüştürme işlemini kaldırmak gerekiyor. Ya da driverın özelliklerinden ve kodu inceleyerek, veri aktarımı olurken hangi biçime dönüştürülmesi gerektiğini anlayabiliriz. Ağlarla ilgili olan driverlarda big endian gösteriminin kullanılması gibi.

Couchbase 2.x İçin nagios-plugin-couchbase Güncellemesi


nagios-plugin-couchbase, iki yıl önce Necdet Yücel'in düzenlediği Yakından Eğitim ile ortaya çıktı. Bu projeyi Kaan'ın danışmanlığında geliştirdim. Daha önce kullanmadığım Nagios, Couchbase'i kullanmam ve NoSQL kavramlarını öğrenmem bakımından oldukça faideli bir proje olmuştu :).

Projeye ilk başladığımız zamanlar geliştirimi Couchbase 2.0 üzerinde yapıyordum. Şimdi Couchbase 2.x serisi kararlı halde ve 3.0'ın beta aşamasındalar. Ben de eklentiyi güncelledim ve artık Couchbase 2.x ile uyumlu diyebiliyorum :).

Eklentiye birkaç yama gönderilmişti onları aldım, bir de her güncellemede yeniden .cfg oluşturması uzun sürmesin diye örnek bir dosya ekledim. Bu arada proje aynı zamanda nagios-exchange'de de yer alıyor ^_^.

Bu projeyi geliştirmemi sağlayan Yakından Eğitim ekibine teşekkürler.

05 April 2015

PHP 7 ile Gelen Return Type Declarations


Ekim 2015’te stabil olarak yayınlanması beklenen PHP 7’nin code base’ine return type declarations (geri dönüş bildirimi) merge edildi.

Fonksiyonların yorum satırlarına @return int, @return void yazarak o fonksiyonun hangi tipte veri döndürdüğü belirtilirdi. Ancak bunlar birer yorum satırı olduğu için @return array yazan bir fonksiyondan string dönebiliyordu.

Artık PHP 7 ile doğrudan bir fonksiyonun ne tip veri döndürdüğünü dilin kendisinin de anlayabileceği şekilde belirtebiliyoruz.

Hızlıca bir örnek vermek gerekirse:

function getCity(): string {
    return "Ankara";
}

Örnekte olduğu gibi fonksiyon isminden sonra dönecek olan tipi belirtiyoruz.

Peki bu fonksiyonu şöyle değiştirsek:

function getCity(): string {
    return 06;
}

String döneceğini belirttiğimiz fonksiyon integer bir değer döndürdü.

Sizce bu şekilde çalışacak mı?

İlginç gelebilir ancak çalışacaktır. Çünkü PHP 7 ile artık hayatımıza “weak mode” ve “strict mode” kavramları giriyor.

Tahmin edeceğiniz gibi weak mode bu tarz işlere izin veriyor. Strict mode ise kesinlikle belirtilen kurallara uyulmalı diyor.

Strict mode’u nasıl aktifleştireceğiz?

Kodunuzun <?php satırından hemen sonra

declare(strict_types=1);

yazmanız yeterli. Bu satırı eklemezseniz kodlarınız weak mode’da çalışacaktır.

Şimdi kodu şu şekilde düzenleyip çalıştırmayı deneyelim:

declare(strict_types=1);

function getCity(): string {
    return 06;
}

echo "Merhaba";

Uppss… E yine çalıştı? Yani ekrana Merhaba yazıldı. Ama kodun içinde yerinde bulunan fonksiyon string dönmesi gerekirken integer dönüyor hem de strict mode’dayken!

Neden böyle oldu?

Çünkü getCity() fonksiyonundan dönen değeri henüz bir yerde kullanmadık. Bir başka deyişle getCity() fonksiyonunu henüz çağırmadık.

Yani kodu şöyle düzeltirsek:

declare(strict_types=1);

function getCity(): string {
    return 06;
}

echo "Merhaba";

getCity();

Böyle bir hata alacaksınız:

Fatal error: Return value of getCity() must be of the type string, integer returned in test.php on line 6 in test.php on line 6

Bir Sınıfı Return Type Olarak Belirtmek


declare(strict_types=1);

class Car {
    public $type = "Manual";
}

class Mercedes extends Car {

    public $model = "CLA200";
    public $color = "White";
    public $type = "Automatic";

}

class Property {

    public function getCarDetails(): Car {
        return new Mercedes();
    }

}

$property = new Property();
echo $property->getCarDetails()->type;

getCarDetails() metotunda Car sınıfından bir şey döneceğini belirttik. Mercedes sınıfı da Car sınıfından extend edildiği için çalıştı. Aynı şekilde bir interface‘i de return type olarak belirtebilirsiniz.

Null Bir Şeyler Return Edebiliyor Muyuz?

function getCity(): string {
    return null;
}

getCity();

Bu kodu çalıştırdığınızda şöyle bir hata alacaksınız:

Fatal error: Return value of getCity() must be of the type string, null returned in test.php on line 6 in test.php on line 6

Dikkat ederseniz bu kod strict mode’da dahi değil.

Yapıcı ve Yıkıcı Metotlarda Return Type

__construct, __destruct ve __clone metotlarında return type belirtilemiyor.

Void Return Type Nerelerde?

Void return type henüz yok. Gelişimini şuradan takip edebilirsiniz: https://wiki.php.net/rfc/void_return_type

Not: Yazının başında da belirttiğim gibi PHP 7’nin Ekim 2015’te stabil olması bekleniyor. O zamana kadar return type işlerinde yeni şeyler olabilir (void type gelmesi gibi). Eğer yeni bir şey olursa eklemeye çalışacağım.



31 March 2015

XenServer’da Sanal Sunucuların Görünmemesi


XenServer host sunucudaki elektrik kesintisi yada benzer fiziksel sorunlar sebebiyle, storage üzerindeki sanal makineler kapanmadan bilgisayar resetlenebilir, kapanabilir veya fiziksel arıza yüzüden hiç açılmayabilir. Bu durumda ilgili host bilgisayar kapanmadan önce
üzerinde çalışan sanal makineler Xencenter arayüzünde kaybolur. Haliyle sanal makineyi başka bir host bilgisayara taşımak da mümkün olmaz. Peki bu durumdan nasıl kurtulunur.

Pool üzerindeki bir host bilgisayarın konsoluna bağlandıktan sonra “xe host-list” komutu işletilir. Havuzdaki host makineler listelenir. Düşen host makine tespit edilip id, sonraki komutta kullanılmak üzere alınır.

# xe vm-list resident-on=#Host bilgisayar ID# --multiple

Komutuyla , bu kez host bilgisayar üzerinde kaybolan sanal makinelerin id leri alınır.

# xe vm-reset-powerstate vm=#Sanal Makine ID# force=true

Komutu ile sanal makinelerin power durumları resetlenir. Sanal makineler xencenter’da görünmeye başlar.

Görünen sanal makineler  istenilen host üzerinde başlatılmaya çalışılır, eğer “VDI Not Available” hatası alınıp sanal makineler başlamazlarsa “xe vdi-list komutu” ile tüm sanal makinelerin listesi alınır. Eğer çok sanal makine ve diskler varsa  xe vdi-list > /home/liste.txt liste incelenmek üzere export edilmesi faydalı olur.

Power state leri değiştiği andan itibaren xencenter’da görülmeye başlayan sorunlu sanal makinelerin idleri ile ilişkilendirilmiş vdi(sanal disk) ler liste üzerinden bulunur, idleri alınır.
Sorunlu sanal makine üzerinde birden fazla disk bağlanmış ise her vdi için aşağıdaki komut işletilir.

# /opt/xensource/sm/resetvdis.py single #Vdi ID# --force

Ve sanal makineler başlatılır.

Hazırlayan : Şemseddin AKSOY



28 March 2015

Python Watchdog ile Dizin İzleme


Script real time olarak, arguman verdiğiniz path’i ve alt klasörlerini izleyerek, yeni oluşan yada silinen dosyaları bilgilendirme maili gönderen python scripti. Cron’a ekleyerekte arka planda sürekli çalışmasını sağlayabilirsiniz. Cron kullanımı hakkında bilginiz yok ise, bu yazımı inceleyebilirsiniz.

./check_dir.py /home/gokhan/Desktop

/home/gokhan/Desktop/file-5.22-1.fc22.src.rpm

deleted:
file-5.22-1.fc22.src.rpm

 

#!/usr/bin/env python3.4
__author__ = 'Gokhan MANKARA <*protected email*>'

import time
import sys
import smtplib
import socket
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


class Check(FileSystemEventHandler):

    def send_mail(self, events, files):
        msg = MIMEMultipart()
        msg['From'] = '*protected email*'
        msg['To'] = '*protected email*'
        msg['Subject'] = 'Detected changes in the folder'
        text = "{0}\n\n{1}:\n{2}".format(events.src_path, events.event_type, files)
        msg.attach(MIMEText(text))

        mail_server = smtplib.SMTP('mail.domain.com', 587)
        mail_server.ehlo()
        mail_server.starttls()
        mail_server.login('*protected email*', 'password')

        mail_server.sendmail('*protected email*', '*protected email*', msg.as_string())
        mail_server.quit()

    def process(self, event):
        """
        event.event_type
            'modified' | 'created' | 'moved' | 'deleted'
        event.is_directory
            True | False
        event.src_path
            path/to/observed/file
        """

        files = event.src_path.split('/')[-1:][0]
        self.send_mail(event, files)

    def on_deleted(self, event):
        self.process(event)

    def on_created(self, event):
        self.process(event)

    def on_modified(self, event):
        self.process(event)


def lock(pidfile):
    pid = str(os.getpid())
    if os.path.isfile(pidfile):
        sys.exit()
    else:
        open(pidfile, 'w').write(pid)

if __name__ == '__main__':
    args = sys.argv[1:]
    observer = Observer()
    observer.schedule(Check(), path=args[0] if args else '.', recursive=True)
    observer.start()

    try:
        lock('/tmp/check_dir.pid')
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
        os.unlink('/tmp/check_dir.pid')
    observer.join()

 



24 March 2015

Linux 4 Sürümü İnsanlığın Sonunu Getirir mi?


Linus Torvalds geride bıraktığımız ay Linux 4.0 sürümünü duyurdu. Şu an kernel.org sitesine bakıldığında 22 Mart 2015 tarihinde 4.0-rc5 sürümünün kernel arşivlerine girdiğini de görüyoruz.

“Peki başlık ne alaka?” derseniz, konuyla alakalı olarak aşağıdaki resim dolaşıyor internette:

terminator-linux41

İzlemeyen var mıdır bilmiyorum ama T-800, Terminator film serisinde Arnold Schwarzenegger’ın canlandırdığı katil robotun modeli. Bu ekran görüntüsü hangi Terminator filminden alınmış bilmiyorum ancak görünüşe göre gelecekte (hatta Torvalds’ın 4.0’ı duyurmasıyla korkarım zannettiğimizden daha da yakın bir gelecekte) insan-makine savaşlarında makinelerin işletim sistemi olarak Linux 4.1.15 çekirdeği çalışıyor olacak :)



23 March 2015

NFS sunucu portları nasıl sabitlenir?


11949906771066360341server.svg.hiNFS diğer teknolojilere göre ek yükü az, verimli ve hızlı bir dosya paylaşım protokolü. Fakat bilinen güvenlik açıklarından dolayı güvenlik duvarı arkasında çalıştırılması gerekiyor. Ek tanım yapılmadığında sabit 2, değişken 7 port kullanıyor. Firewall kuralı yazılabilmesi için bu portları sabitleyip iptables kuralını yazalım;

/etc/sysconfig/nfs dosyasına eklenmesi gereken satırlar;

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020
RDMA_PORT=20049

iptables kuralı;

iptables -A INPUT -m multiport --dports 662,111,2049,32769,875,892,2020,20049,32769 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -m multiport --sports 662,111,2049,32769,875,892,2020,20049,32769 -m state --state ESTABLISHED -j ACCEPT


22 March 2015

Sudo Komutlarının Loglanması


Daha önceki yazımda kullanıcıya nasıl sudo yetkisi verilebileceğinden bahsetmiştim. Bu yazıda da sudo yetkisi verdiğiniz kullanıcının uyguladığı komutları nasıl loglayacağımıza bakacağız. Önceki yazıda sudoers dosyasına kullanıcıyı eklemiştik, bu yazıda sudoers.d altına kullanıcıları oluşturacağız.

# vi /etc/sudoers.d/gokhan

gokhan   ALL=(ALL)   NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL
Defaults iolog_dir=/var/log/sudo-io/%{user}

gokhan kullanıcısına şifresiz olarak sudo komutu çalıştırma yetkisi vermiş olduk. iolog_dir dizinini oluşturmamıza gerek yok, default olarak dizin oluşacaktır.

sudo-io dizinine baktığınızda birden fazla dosya oluştuğunu görürsünüz.

.
└── gokhan
    ├── 00
    │   └── 00
    │       ├── 01
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       ├── 02
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       ├── 03
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       ├── 04
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       ├── 05
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       ├── 06
    │       │   ├── log
    │       │   ├── stderr
    │       │   ├── stdin
    │       │   ├── stdout
    │       │   ├── timing
    │       │   ├── ttyin
    │       │   └── ttyout
    │       └── 07
    │           ├── log
    │           ├── stderr
    │           ├── stdin
    │           ├── stdout
    │           ├── timing
    │           ├── ttyin
    │           └── ttyout
    └── seq

Bu dosya çokluğunun içinde kaybolmak yerine aşağıdaki komut ile sudo izni verdiğiniz kullanıcının neler yaptığını görebilirsiniz.

# find /var/log/sudo-io/ -name log -exec cat {} \; | grep "::" -A 2 | awk -F: '$1 ~ /^[0-9]+$/{printf  "%s%s",(NR>1)?"\n":"",$1;next} {printf ";" $0} END{printf "\n"}'

1427012536;/var/log;/usr/bin/yum install
1427014071;/var/log;/bin/cat /etc/passwd
1427011890;/home/gokhan;/usr/bin/yum update
1427014063;/var/log;/bin/cat /etc/shadow
1427010846;/home/gokhan;/bin/ls /var/log/sudo-io/
1427010852;/home/gokhan;/bin/ls /var/log/sudo-io/gokhan
1427010823;/home/gokhan;/usr/bin/yum update
1427010863;/home/gokhan;/bin/cat /var/log/sudo-io/gokhan
1427011064;/home/gokhan;/usr/bin/yum update

 



19 March 2015

Çeviri: Önceki teknolojinin yerini hızlıca alan 3B Yazıcı teknolojisi bir fark yaratır mı?


Önsöz

3 Boyutlu Yazıcılar (İng. 3D Printers) geleneksel üretim araçlarından farklı olarak tasarlanmış bir ürünü çeşitli malzemeler ile sıfırdan oluşturan cihazlar olarak tanımlayabiliriz. Geleneksel modelinde üretim; kalıplar, dökümler, oyma, kaynak, dokuma vb gibi çeşitli farklı teknikler sayısız makine ve eğitimli emek ile gerçekleştirilirken, 3B yazıcıların temsil ettiği yeni üretim modelinde ise bilgisayar tasarımı ve bu tasarımı malzemeyi 3B şekilde yazan/basan/dokuyan bir makine ile üretim gerçekleşmekte.

Türkçemize “printer” her ne kadar “yazıcı” olarak geçmişse de bunun doğru bir karşılık olmadığını düşünüyorum. Yazma eylemi değil, yazılmış bir şeyi basma, baskı eylemi söz konusu. Hatalı olduğunu düşündüğüm bu karşılık 3B yazıcı kavramıyla iyice ortaya çıkmakta. Aşağıdaki metni çevirirken de bunun zorluğunu yaşadım. 3B Baskıcılar daha doğru bir kullanım diye düşünüyorum, ama terimi bu yazıda 3B yazıcılar olarak kullanmaya devam edeceğim, sonra bakarız…

3B yazıcıları belki de duymuş olabilirsiniz, basit el aletlerinden tutun yapay kalp cihazlarına kadar birçok şey bugün bu teknolojilerle yapılmakta. İşte bu yazıda da teknolojinin insan hayatını nasıl değiştirebildiğini bir kez daha göreceğiz.

Yazıyı çevirme amacım bu yazıyı okuduğumda hissettiklerimdi aslında… Kötülüklerin ve kötü insanların hayatımızı çevirdiği ve dünyamızı esir aldığını görmekte ve hissetmekteyken böylesine harika insanların neler yapabildiğini görmek beni çok duygulandırdı, hiçbir katkım veya paydaşlığımın olmadığı bu kişilerin yaptıklarından gurur duydum. Minnetimi de yazıyı Türkçeye çevirerek göstermek istedim.

Buyurun birlikte okuyalım…

***

Önceki teknolojinin yerini hızlıca alan 3B Yazıcı teknolojisi bir fark yaratır mı?*

Onsekiz ay önce Youtube’de hayatımı değiştiren bir video izledim (buradan görebilirsiniz). Güney Afrika’da doğuştan sağ eli olmayan Liam isminde bir oğlan 3B yazıcı ile üretilen bir protez el kullanıyordu ve bu sayede normal ve mutlu bir çocuk olabilmişti.

Gülen yüzü ve kararlılığı benim 3B yazıcılar ve topluluk fonlaması çözümlerinin gücünü anlamamı sağladı. İnsanların hayatlarında bir farklılık yaratmayı amaçlayan yeni oluşan bir gönüllü topluluğu olan e-NABLE‘da çabucak bir gönüllü oldum. Bir çocuğun hayatını 30$ değerinde plastik ve 30$ değerinde donanım ile değiştirme kabiliyeti beni 3B yazıcılar ile üretilen her şeyi sevmeye sürükledi. İşte bu Accucode’da  kıdemli müşteri temsilcisi olmamın nedenlerinden biri.

Liam-300x300Bu hafta Austion, Texas”da SXSW fuarında SX Crate’e katıldım ve nihayet arkadaşım olan bazı gönüllülerle yüzyüze görüşebildim. Hatta Rochaster Teknoloji Enstütüsü’nde araştırmacı ve e-NABLE‘nin kurucularından olan John Schull ile de buluştum. Bir avuç insan ile başlamış proje altı el tasarımı, iki kol tasarımı ve motor ve arduino kontrolüne sahip miyoelektrik kol tasarımıyla 4.400’den fazla kişiye ulaşmış güçlü bir gönüllü topluluğuna dönüştü. Bağışlar ve fedakar gönüllüler sayesinde 900’den fazla el özel olarak tasarlandı, test edildi, değiştirildi, 3B üretildi, montajlandı ve ücretsiz olarak dağıtıldı. (Bağışlar www.enablingthefuture.org/donate adresinden yapılabilir. 50$ değerinde bir bağış bir çocuğa el uzatabilir… Gerçek anlamda…)

Eğer Robert Downey Jr.’nin bir Ironman protez kolonu genç Alex’e sunuşunun hikayesini okuduysanız e-NABLE‘ı hali hazırda görev başında görmüşsünüzdür. Bu kol, Merkez Florida Üniversitesinde mühendislik okuyan doktora öğrencisi ve uzunca bir süredir e-NABLE üyesi olan Albert Manero tarafından kurulan bir gönüllü grup olan Limbitless Solutions tarafından üretildi. (daha fazlası Facebook sayfalarında).

AlexPring

Bu bir çocuğun bir süper kahramandan ilk hediye alışı değildi. 28 Ocak 2015 tarihinde altı genç süper kahraman güçlerini e-NABLE ve Marvel Universe LIVE! ile Dallas, Texas’da birleştirdiler… bizi şeytani Kötü Suçluların yaratacağı mutlak kıyametten korumak için! Oyuncu ekibi alçakgönüllülükleriyle protezleri kendilerine monte ederek ve çocuklara sunarak birkaç saatlerini geçirdiler.

Geçen hafta SXSW şovunda %100 geri dönüşümlü 2 litrelik soda şişelerinden yapılan plastik filament ile üretilen ilk 3B üretimleri gördüm. Bundan böyle arazileri biyolojik olarak çözülemeyen plastikle doldurmak yerine bu çöple çalışan bir protez el veya kol yarabiliriz.

Evet, önceki teknolojinin yerini hızlıca alan 3B Yazıcı teknolojisi bir fark yaratır mı? Geçtiğimiz yıllar içinde 900 çocuğun  ve 4.400’den fazla gönüllünün halihazırda bir fark yarattı.

3B yazıcıların nasıl bir fark yarattığı konusunda daha Accucode’un 3B Bölümü ile iletişim kurarak daha fazla bilgi alabilirsiniz.

*Özgün yazı: Can the disruptive technology of 3D printing make a difference? – http://accucode3d.com/can-the-disruptive-technology-of-3d-printing-make-a-difference/ 

***

Sonsöz

Bilimin ve teknolojinin insan hayatını nasıl daha iyi hale getirebiceğinin güzel bir örneği olan bu yazıyı okuduktan sonra çocukluğumdan beri üzüldüğüm birçok şeyin ileride ortadan kalkacağına yönelik umutlarım güçlendi. Bugün plastik ve küçük elektrik motorlarıyla yapılan bu el organik olmayan maddelerin 3B yazdırılmasıyla üretildi. Yarın ise organik maddeleri örneğin DNA’yı 3B yazıp, hücreler örüp dokular ve organlar üretilebilir. Bu sayede organ ve uzuz eksiklikleri giderilebilir. Bugüne kadar mekanik aksamlarla giderilen engeller gelecekte biyolojik 3B üretimle giderilebilir. Bugün bu çalışmaların öncülerini bilim haberlerinde halihazırda okumaktayız. Dilerim o günler çok yakın olur… Ah bir de görme engelliler… Sanıyorum görme engelli birisine görüş kabiliyetini yeniden kazandırmak dünyanın en mucizevi buluşu olacaktır.

3B yazıcı konusu çok geniş bir konu, ama bir gerçek var ki o da bu teknolojinin insan hayatını çok çabuk değiştireceği. Sadece insan hayatı değil, ekonomimizi de çok etkileyecek bir konu… Gelişmiş sanayi ülkeleriyle gelişmekte hatta geri kalmış ülkeler arasındaki farkı kapatabilir. Baskı kodu ve istenilen ürünü yazabilecek yetenekte bir 3B yazıcı ile dileğiniz her endüstri ürününü üretebilirsiniz. Bu bir araba da olabilir bir silah da… Dediğim gibi çok yönlü ve kesinlikle devrimsel bir konu. Zaten birçok yerde 3. Sanayi Devrimi olarak değerlendirilmekte.

Son olarak, görüldüğü üzere yeni çağın büyük bir teknolojisi ile karşı karşıyayız. Burada özellikle dikkat çekmek istediğim şey üretimin temel faktörü olan sermayenin beşeri sermeyeye karşı kaybediyor oluşudur. İyi mühendislere sahipseniz, o mühendislerin üreteceği sofistike yazılım ve donanım – ki bu 3B yazıcılar makine üretebilen makinelerdir – müthiş kapılar açabilir.

İş dönüp dolaşıp eğitime geliyor… Klasik ve kötü eğitim sistemlerimizden sıyrılıp, düşünebilen, üretebilen ve bu sayede farklılık yaratabilen bir insan kaynağı yetiştirmek her şeyin önünde olmalı.

İlginizi çektiyse, 3D Printing Google+ topluluğunu takip etmek eğlenceli olabilir.

Mutlu günler.



17 March 2015

Gogs


Gogs yeni bulduğum, Gitlab benzeri, Go ile geliştirilmiş, kendi sunucunuza kurabileceğiniz bir git servisidir. İnanılmaz derece kolay kurulumu, private repo desteği ve çok düşük sistem ihtiyaçları, kendisini küçük takımlar için biçilmiş kaftan yapıyor.

Çalışan bir sürümünü: https://try.gogs.io/ adresinden deneyebilirsiniz.

Sistem kaynağı kullanımına tekrar değinecek olursam, gogs şuan $5'lık digitalocean sunucumda, yaklaşık ~30MB bellek kullanıyor. Go ile geliştirilmiş olması, native bir uygulama olarak kurulmasıyla işlemci kullanımı da hayli düşük. Raspberry Pi bile minimum sistem ihtiyaçlarını karşılamaya yetiyor. SQLITE3 desteği de bulunan uygulama, ayrıca bir veritabanı sunucusuna ihtiyaç kalmadan kendi başına çalışabiliyor.

Uygulamanın daha ayrıntılı bir incelemesini ve Gitlab gibi diğer servislerle kıyaslamasını bu blog yazısında bulabilirsiniz.

Reddit'te bahsedildiği üzere, uygulamanın bazı yan etkileri de mevcut. Bunlardan bazıları:

  • Pull request yapılamaması.
  • Code review yapılamaması.
  • Uygulamayı kullanan tüm kullanıcıların, makinenize aynı kullanıcı (genelde git) üzerinden bağlanacak olmaları.
  • Private repoların aslında private olmaması. Depo adını/yolunu bilen biri, deponuzu klonlayabilir. Bu muhtemelen yakında düzeltilecektir.

Bu nedenlerden dolayı, kritik önem taşıyan geliştirme süreçlerinde gogs kullanılması önerilmiyor.

Kurulum

Sürekli kolay kurulumundan bahsettiğim uygulamanın kurulumuna da kısaca değinmek istiyorum. Ayrıntılı kurulum belgelerini gogs websitesinde bulabilirsiniz. Uygulamanın dağıtımlarına github sayfasından ulaşabilirsiniz. Aşağıdaki kurulum, uygulamanın binary olarak sağlanmış kurulumunu ele almaktadır.

sudo adduser --disabled-login --gecos 'Gogs' git
sudo su - git
cd ~
wget https://github.com/gogits/gogs/releases/download/v0.5.13/linux_amd64.zip
unzip linux_amd64.zip
cd gogs
chmod a+x gogs
./gogs web

Bu kadar! Go ile geliştirilmiş olması ve static linklenmiş bir uygulama olması bağımlılık ihtiyacını ortadan kaldırıyor.

Gogs varsayılan olarak, 3000 portunu dinleyecektir. Web tarayıcınızdan, sunucunuzun 3000 portuna bağlanarak kurulumunuzu tamamlayabilirsiniz. Gogs belgelerini okuyarak isterseniz kullanıcı kaydını kapatabilirsiniz. nginx gibi reverse proxy olarak çalışabilen http sunucularıyla da, isterseniz uygulamanızı 80. porta yönlendirebilirsiniz.

Varsayılan index olan gogs landing sayfası yerine, kendi profilinizi göstermek istiyorsanız, yazdığım nginx ayarlarını kullanabilirsiniz:

server {
    listen 80;
    server_name git.onur.im;

    location / {
        proxy_pass http://localhost:3000;
    }

    location ~ ^/$ {
        valid_referers blocked git.onur.im;
        if ($invalid_referer) {
             rewrite .* http://git.onur.im/onur;
        }
        proxy_pass http://localhost:3000;
    }
}


Kadın bilişimci etkinlikleri hakkında


Geçen pazar WomenTechmakers İstanbul etkinliğine katıldım. Yaklaşık 60 kadar kadın bilişimcinin konuştuğu, deneyimlerini ve bilgilerini paylaştığı etkinliğe katılım hayli yüksekti.

Her türlü örgütlülüğü faydalı bulur ve desteklerim. Yakın ilgi alanlarına sahip insanların bir araya gelmesinde hep fayda görürüm. İnsanların elbette kendilerine yakın buldukları gruplarla birlikte olmalarını da aklı başında herkes kabul eder sanırım. Konuya böyle bakınca kadın bilişimci etkinliklerini de gerekli ve faydalı buluyorum. Bu etkinlikten önce de bir çok benzer etkinliğe katılmış ve çokça kadın çalışma arkadaşı buralarda konuşmuş biri olarak katılmadığım bir noktayı yazmak istiyorum.

Toplumun her alanında kadınların hakettikleri yerde olmadıklarını biliyoruz. Sistem kadınları ya ucuz iş gücü olarak kullanmak ya da çocuk doğurup onlara bakan evinin kadını olarak görmek eğiliminde. Benim dinlediğim, konuştuğum kadınların (ve erkeklerin) önemli bir bölümü yaşadıkları sorunu bir sistem sorunu olarak görmüyorlar. Sorunu doğru tespit edemeyince çözümle ilgili de kafalar büyük oranda karışık oluyor tabi. Elbette konuşmalarını ufuk açıcı bulduğum kadınların sayısı da az değil ama bahsettiğim grup da çok kalabalık.

Kadınların aslında bilişim dünyasınında ne kadar iyi işler yapabileceklerini anlatırken konunun biyolojik taraflarına girmeleri ve vay efendim erkekler beyninin şu tarafını şöyle kullanıyormuş, şunları salgılıyormuş gibi söylemlerde bulunmalarını çok garipsiyorum. Bilişim sektörü güç gerektiren bir alan olmadığından (hoş gerektirse ne olacak; 193 kilo kaldıran kadın var) kadınların durumlarına itirazlarını sistemin kendilerine biçtiği rolü kabullenerek yapmaları bir sonuca varmalarını engelliyor bence. Aşağıda bu etkinliğin konuşmacılarından birinin konuşmasını tanıtımı var.


Kadınların yaşadıkları haksızlıklara itirazları sırasında 'biz doğurabiliyoruz ya, bunu mu yapamayacağız' demelerini bir kaç açıdan sakıncalı buluyorum. Bir kere bunu söylemek kadın olmayı anne olmakla özdeşleştirmiş oluyor ve doğurmamayı seçen, henüz doğurmamış olan veya doğuramayacak olanları kendinden görmemiş oluyor. İkinci olarak biyolojik olarak kadın vücuduyla doğmamış ama kendini kadın hissedenleri dışlamış oluyor bu tavır. Zaten birinin sadece doğurabildiği için bilgisayardan anlayabileceğini düşünmesini gerçekten aklım almıyor.

Bir de özgür yazılım dünyasında kadınlara bakış nasıl diye bakalım ve yazıyı uzatmayayım istiyorum. Aşağıdaki ekran görüntüsü kadınları özgür yazılım dünyasına katılmaya teşvik etmek için düzenlenen Outreach Program for Women ana sayfasından. Bakalım sadece kadınlar için düzenlenen bu etkinliğe kimlerin katılabileceği nasıl tarif edilmiş.


İki yaklaşımın farkı yerli ve yabancı olmasında değil elbette. Soruna iki farklı bakış, kadının bile iki farklı tarifi demek oluyor aslında. Cinsiyete, ırka, dine veya başka bir şeye göre ayrımcılığın olmadığı, sadece yaptığınız işin konuşulduğu özgür yazılım dünyasına bekleriz ;)

14 March 2015

Zfsonlinux Ram Kullanımı


Zfsonlinux kurulumunu ve yapılandırmasını önceki yazımda değinmiştim. Bu yazıda da zfs’in tüm sistemdeki boş rami kullanmaması ( yoğun olarak diske yazma işleminin gerçekleşmesi durumunda, sistem swap kullanımına geçebiliyor ) için yapılması gereken düzenlemeden bahsedeceğim.

Modprobe.d altında zfs.conf adında bir dosya oluşturuyoruz. Bu conf dosyasına zfs’in kullanım parametlerini gireceğiz. Bu yazıda zfs’in kullanmasını istediğimi max ram miktarını 8Gb olarak ayarlayacağız.

# vi /etc/modprobe.d/zfs.conf

options zfs zfs_arc_max=8589934592

Ayarların aktif olabilmesi için sistemi yeniden başlatmamız gerekiyor.

# reboot

 Mevcut zfs arc kullanımı

Sistemde mevcut zfs arc durumunu arcstat.py komutu yardımıyla yapabiliriz.

# arcstat.py 1 5
    time  read  miss  miss%  dmis  dm%  pmis  pm%  mmis  mm%  arcsz     c
10:46:52     0     0      0     0    0     0    0     0    0      0  100M
10:46:53     0     0      0     0    0     0    0     0    0      0  100M
10:46:54     0     0      0     0    0     0    0     0    0      0  100M
10:46:55     0     0      0     0    0     0    0     0    0      0  100M
10:46:56     0     0      0     0    0     0    0     0    0      0  100M

arcstat.py nin kullanım parametreleri,

arcstat.py -h
Usage: arcstat [-hvx] [-f fields] [-o file] [-s string] [interval [count]]
        -h : Print this help message
        -v : List all possible field headers and definitions
        -x : Print extended stats
        -f : Specify specific fields to print (see -v)
        -o : Redirect output to the specified file
        -s : Override default field separator with custom character or string

 Konfigurasyonda kullanılabilecek parametreler

zfs.conf dosyasında kullanabileceğimiz parametleri linkten ayrıntılı olarak inceleyebilirsiniz.

 



13 March 2015

Node.js ile Inotify Event’lerini İşlemek


Geçen gün bir feature (özellik) isteği gelmişti. Bir servis sunucuya bağlanıp bir dosya oluşturacak ve içini dolduracak. Kullanıcıya ise bulunduğu web sayfasında sayfayı yenilemeden bu dosyanın oluştuğundan haberdar edilecek ve tabii sonra bu dosyayı kullanıcı görüntüleyecek.

Direkt 5 saniyede bir AJAX yapıp ilgili dosya oluşmuşsa bir div’e dosyanın oluştuğuna dair mesaj basabilirdim aslında. Ancak olayı biraz daha efektif hâle getirmek istedim. Çünkü AJAX istekleri beraberinde bir dizi overhead getirecekti.

Örneğin; İlgili sayfada 10 kişi olsa, 5 saniyede bir file system‘da yeni dosya var mı diye kontrol yapılması gerekecekti. 10 kişi ayrı ayrı 5 saniyede bir backend’e istek atacaktı. Bu da istediğim bir durum değildi.

Bir diğer problem ise dosyaya yapılan yazma işleminin bittiğinden emin olunması gerek.
Örneğin; AJAX isteği attım. İstekte dosyanın varlığını kontrol ettim. Sonra baktım dosya var mı? Var. Ön tarafa haber saldım “dosya oluştuuuu” diye.
Ama o sırada third-party servis dosyaya veri yazma işlemini bitirmedi. Kullanıcı da “e dosya oluştu madem açayım” derse, sçtık. Çünkü eksik veri görüntüleyecek hatta belki de hata alacak. Sonra ayıkla pirincin taşını.

Bu iş için esas olan “dosyaya yazma işlemim bitti” mesajının gerekliliği. E third-party servis sadece dosya oluşturuyor Gidip bu third-party servisin ekstra bir yerlere mesaj yazmasını da sağlayamam (dosyaya yazdım bitti gibisinden). Hadi yazdırdım diyelim, bir de gidip orayı kontrol etmem gerekecek.

vs. vs. Daha buraya yazmadığım tonla senaryo var bu iş için.

Kısaca bana “dosyayı oluşturdum“, “dosyaya yazdım“, “dosyayı sildim” vs. gibi eventler gerekliydi. Bu bilgileri ise Linux‘ta direkt çekirdekte bulunan Inotify eventleri çok güzel sağlıyor. Yani bilgi sağlam yerden geliyor.

Node.js‘te Inotify eventlerini handle edebilen güzel bir kütüphane var (detaylar, kullanım örneği linkte): node-inotify

node-inotify kütüphanesini ise socket.io ile birleştirip kullanırsanız tadından yenmez (Ben socket.io kullanmıştım, ama siz başka bir kütüphane elbette tercih edebilirsiniz). Çünkü bu şekilde ön tarafa bir socket açıp dosya değişikliklerini bu socket üzerinden yollayabilirsiniz.

Scala ve Java’da ise bu işleri Non-blocking I/O (java.nio) paketiyle yapabilirsiniz.



Büyük Sayılar Yasası ve Kumarbazın Yanılgısı


Büyük sayılar yasası, bir rassal değişkenin uzun vadede beklenen değere ulaşacağını söyler. Bunu iki farklı örnekle anlatıp, kumarbazın neden yanıldığını ifade etmeye çalışacağım. Birinci örnek bir zar örneği olsun; bir zarın 6 adet yüzü vardır ve her bir yüzdeki sayının toplamının ortalaması 3.5’tur. Bu durumda teorem bize zarı yeteri kadar attığımız durumda ortalamanın 3.5’a yaklaşacağını söyler (beklenen değer: 3.5). Yani zarı 1 kere, Devamını Oku […]

12 March 2015

FortiGate remote syslog ayarı


FortiGate 100D cihazda remote syslog ayarını bulmaya çalıştınız bulamadınız niye, cünkü web arayüzüne ayarları koymamışlar. Ancak CLI üzerinden erişilebiliyor. Yapmanız gereken SSH ile cihaza bağlanıp aşağıdaki komutları çalıştırmanız. senna: ~ $ ssh admin@sslvpn.acme.com admin@sslvpn.acme.com's password: sslvpn # config log syslogd setting sslvpn (setting) # set status enable sslvpn (setting) # set server syslog.acme.com sslvpn (setting) …

11. BİLMÖK'ün ardından


Bilmök'ü ilk 2010'da +mete bilgin +Metin Akdere ve +Meltem Parmaksız 'ın yaptıkları harika sunumla duymuştum (bu sunum hakkında bakınız +Bahadır Kandemir 'in pek güzel yazısı). O zaman sonraki bilmök'ler için tavsiyeler yazmıştım, neredeyse hepsini hala seneye Urfa'da düzenlenecek bilmök için önerebilirim (nasılsa dinleyen yok istediğini öner diyenlere hak veriyorum).

Bence bilmök'lerin temel sorunu organizasyonu düzenleyen öğrencilerin kendilerini konuşmacı olmaya değer görmemeleri. Üç gün süren etkinlikte konuşan öğrenci sayısı bir elin parmakları kadar bile değildi. Konuşmaların çoğu ders niteliğindeydi. Zaten hepsi bilgisayar mühendisliği öğrencisi olan bu büyük kalabalığı bir salona toplayıp ders gibi sunumlar dinletmek yerine etkileşimli bir etkinlik yapılsa daha iyi olurdu diye düşünüyorum (sanki ne düşündüğünü umursayan mı var derseniz onda da haklısınız).

Etkinliğin ilk gününde özgür yazılım hareketinin başlatıcısı Stallman vardı. Stallman 30 yıl önce dünyaya karşı bir savaş açmış ve bu savaşı kazanmış bir büyük adam olduğunun bilinciyle ve özgüveniyle konuştu. Bu etkinlikten bir hafta önce sabancı üniversitesinde de dinlemiş olmama rağmen tekrar dinlemekten büyük mutluluk duydum. Anlattıkları hep bildiğimiz şeylerdi ama çok sağlam argümanlarla destekleyerek konuştu.



Üçüncü gün bu yıl birlikte çalıştığım arkadaşlarımdan +Gülşah Köse LibreOffice sunumlarını Pebble ile yönetmek için hazırladığı pebble-remote uygulaması özelinden yola çıkarak özgür yazılım dünyasına nasıl dahil olunacağını kendi tecrübeleriyle anlattı. Tam da bilgisayar mühendisliği öğrencileri kongresinde böyle sunumlar olmalı dediğim gibi bir sunum oldu. Başlarda biraz heyecanlı olsa da bilgisayar mühendisliği öğrencisi bir genç kadının neler yapabileceğini göstermesi açısından çok başarılı bir örnek olarak konuştu.



Günün son oturumu ise bilişim sektöründe kadın olmak paneliydi. BMO'nun bir önceki başkanı Gölay Şakiroğulları, +Gülşah Köse ve +Zinnur Yesilyurt 'un konuştukları panel benim bu konuda dinlediğim en başarılı paneldi. Gölay hanım 30 yıllık tecrübesiyle konuşmasını çok ikna edici argümanlara dayandırarak konuştu. Yeni mezun olmasına rağmen Zinnur kadınların sektörde karşılaşılabilecekleri durumlardan bahsetti. Gülşah ağırlıklı olarak özgür yazılım dünyasının sadece kadınlara değil ırka, cinsiyete, dini inanca karşı bir ayrımcılık yapmadığını anlattı.


Bütün katılımcılarla özveriyle ilgilenen yerel organizasyon komitesine tekrar teşekkür ediyorum. Gülşah'a da kendisiyle gurur duyduğumu buradan da yazmış olayım.

11 March 2015

LibreOffice 4 serisinde bizden de bir şeyler var, daha çok olsun!


LibreOffice özgür ofis yazılımı 4 serisi ile birçok yeni özelliğe kavuştu. Bunun yanı sıra kod temizliği, kod denetimi (Coverity scan) ve 60.000 civarı belge ile yapılan sürekli ve yoğun testlerle daha sağlam bir hale geldi, çökme, donma gibi olayları neredeyse yaşamıyorum diyebilirim.

Bildiğiniz gibi OpenOffice.org’u geride bırakarak The Document Foundation çatısının kurulması ve LibreOffice’in yolculuğuna başlaması geliştirme modelinde önemli değişiklikleri de birlikte getirdi. Artık Sun gibi tam zamanlı geliştirici çalıştıran bir şirket arkasında değil. Kod katkısının çoğu dünya çağındaki bağımsız katkıcılar tarafından yapılmakta.

Başladığımız günden bugüne baktığımızda bir Brezilya olmasa da güzel şeyler yaptığımızı görüyorum. Ülkemizdeki kısıtlı insan kaynağı içinde kod katkısı veren kişi sayısının bir elin parmaklarından az olması üzücü ama yapılanlar mutluluk verici. Güzel olanı bence ne biliyor musunuz, arka planda çalışan kodlarla kalmayıp, bu yazıda evet şu arkadaşımız şunu yaptı ve gördüğünüzde onu anabilirsiniz diyebilmek.

Buyurun bakalım neler yapmış bir elin parmaklarından az sayıdaki cengaver LibreOffice geliştiricimiz. (Görselli açıklamaları LibreOffice Sürüm notlarından aynen alıntılıyorum)

1- Gökçen Eraslan – LibreOffice ile sayısal imzalı PDF belgeleri oluşturabileceğiz

Gökçen Eraslan’ın 2012 yılında Google Summer Of Code’un LibreOffice projesinde başladığı (Bknz:LibreOffice’de PDF İmzalamak: Başarılar Gökçen Hocam)  ve temel çerçevesini oluşturduğu PDF imzalama özelliği LibreOffice 4.4 sürümünde eksiklerini de tamamlayarak karşımıza çıkıyor.

Digitally signed PDF export

PDF’s generated by LibreOffice can now be digital signed directly from LibreOffice during the export. It works on Windows, OS X, and Linux, and on Windows, the built-in certificate functionality is used to store your certificates for signing. (Gökçen EraslanGSoC 2012, Markus Wernig – Wilhelm Tux, fund raising, Tor Lillqvist – Collabora)

Selecting a certificate for signing on Windows.

The Digital Signatures tab of the PDF export dialog.

 

2 – Efe Gürkan Yalaman – Uzman Yapılandırma ve Başlangıç Merkezinde Şablonlar

Efe Gürkan Yalaman’da tıpkı Gökçen Eraslan gibi GSoC öğrencilerinden. LibreOffice projesine 2013 ve 2014 yılında kabul edildi ve iki önemli özelliğin geliştirilmesine katkı verdi:

İlki 2013 yılındaki GSoC’dan ve geçtiğimiz yıl yayımlanan LibreOffice 4.2 ile duyurulan Uzman Yapılandırma. Bu mdül ile adı üzerinde LibreOffice uygulamasını ileri düzeyde yapılandırabiliyorsunuz

 

  • An Expert Configuration functionality has been added to the Options tab (Efe Gürkan YALAMAN). This can be disable by setting EnableExpertConfiguration to false in the user’s configuration.

About config page

 

LibreOffice 4.4 sürümünde bu özelliğe Araçlar – Seçenekler – LibreOffice – Gelişmiş yoluyla erişebilirsiniz.

Diğeri ise 2014 yılında katıldığı GSoC projesi olan Başlangıç Merkezinde şablonları görebileceğimiz, düzenleyebileceğimiz Şablonlar modülü oldu.

Start Center

Templates now appear directly in the Start Center and can be picked from there. (Efe Gürkan Yalaman, GSoC 2014; and Jan Holešovský, Collabora)

Templates in the Start Center.

 

 

Sadece bunlar değil, Efe’nin yaptığı ve bizim için önemli olan geliştirmelerden yerelleştirmeyle ilgili para birimimizin YTL’den sonra tekrar TL (TRY)’ye dönmesi ve bu para birimiyle ilgili biçimlendirmeler ve Türk Lirasının Yeni Sembolünün eklenmesi.

3- Gülşah Köse – Sunumlarımızı Pebble saatimizle yönetebiliyoruz.

Gülşah Köse diğer iki geliştirici arkadaşımızın aksine GSoC’a henüz katılmadı, diliyorum bu yıl başvurur. Necdet Yücel hocamızın teşviki ve yönlendirmesiyle LibreOffice Impress’e Android ve iOS kumandalarından sonra Pebble kumandasını da kazandırarak önemli bir işe imza attı. Kendi Pebble’ım ile kullanıyorum :)

PebbleRemote.com adresinden gerekli bilgileri alabileceğiniz bu ‘Havalı – Cool’ uzaktan kumanda katkılarımızı da beklemekte.

Pictures

 

 

Kendim kullanıyorum diye değil, gerçekten havalı bir sunum tecrübesine imkan tanıyor ;)

4- Barış Akkurt – Hakkında iletişim kutusunun iyileştirilmesi

Barış Akkurt LibreOffice 3.5 sürümünde LibreOffice’in Hakkında penceresinin geliştirilmesine kod katkısı veren diğer bir geliştiricimiz.

***

Ülkemizden LibreOffice’e kod katkısı verilmesi gerçekten mutluluk verici, hele bizim gibi son kullanıcıların görüp hissedeceği geliştirmeleri görünce insan iyice ümitleniyor. Ama sayı gördüğünüz gibi çok az, sadece 4…

Açık konuşmak gerekirse, OpenOffice.org mirasçısı bir yazılım olan LibreOffice epeyce silkinip kendi elbisesini giymeye başladı, ama daha alacak çok yol var… Özgür yazılım gönüllüleri ve kod veren kişilerin dahi beğenmediği yanları ortada. Ama ortada olan bir gerçek şu ki, katkı verilmeden bu iyileşmelerin olması mümkün değil.

LibreOffice’in özgür yazılım gönüllülerine ihtiyacı var, ülkemizin ise LibreOffice geliştiricilerine daha çok ihtiyacı var. 

Siz de LibreOffice’e Kod Katkısı Verin

Tabii, bir 'Feza Çağı Televizyonu' geliştirmek değil!

Tabii, bir ‘Feza Çağı Televizyonu’ geliştirmek değil!

Kod okur yazarlığı olan özgür yazılım severler LibreOffice’e vereceği her katkı çok değerli. Aza çoğa bakmamak gerekiyor. Biliyoruz ofis yazılımı sıkıcı olarak görülmekte, ama LibreOffice gerçekten eğlenceli bir proje. İyi insanlar, iyi ortam ve dünya çapında iyi etkinliklerle kendinize ve LibreOffice’e katkı verebilirsiniz.

1- ‘Peki nereden başlamalı?’ diyorsanız aşağıdaki bağlantılara bir göz atmaya ne dersiniz.

Bütün bilgiler burada: LibreOffice Geliştirme wiki sayfası – https://wiki.documentfoundation.org/Development 

Buradan başlayıp konuya ısındığınızda eğlenceli ilk adımlar olan EasyHacks bölümüne gitmenizi öneriliyor. Buradan dişinize göre bir EasyHack bulup çözünce hem LibreOffice üzerindeki kod hakimiyetiniz gelişiyor hem LibreOffice’e kod katkısı veriyorsunuz. Tek başınıza olacağınızı sanmayın, uzman LibreOffice geliştiricileri bu EasyHack’lerde size adım adım yardım da ediyorlar. Böylece ciddi bir tecrübe ve bilgi edinmiş oluyorsunuz. Kazan – Kazandır!

EasyHack‘ler gerçekten ilk adımlar için önemli. Tek varlık sebebi yeni geliştiricilerin gelişimlerine yardımcı olmak, yani sizin için orada bekliyorlar Açıklamalarında göreceğiniz gibi usta bir geliştiricinin çerez çekirdek çitlerken halledebileceği hackler ve siz çözün diye sizi bekliyorlar!

Bizi de unutmayın, ve LibreOffice Türkçe geliştirici listesine üye olun!

1.1- GSoC’a katılın!

Bitmedi, LibreOffice bu yıl da Google Summer of Code’a kabul edildi:
https://wiki.documentfoundation.org/Development/GSoC/2015

Şimdilik GSoC profje fikirleri şurada:
https://wiki.documentfoundation.org/Development/GSoC/Ideas

Aklınızda LibreOffice için bir fikir varsa ‘Ideas’ sayfasına ekleme de yapabilirsiniz. Yeni fikir eklemek için iki hafta gibi bir süre var. Aklıızda çalışmak, yapmak istediğiniz ve GSoC’a yakışır bir proje fikri varsa ekleyin derim

Ha bir de Çılgın Fikirler var ki – en son ESC toplantısında da ordan GSoCa bir şey çıkar mı bilinmez, fikirlerin çoğu çılgın…  https://wiki.documentfoundation.org/Development/Crazy_Ideas

Niyetiniz varsa 27 Mart’a kadar başvurunuzu yapmayı unutmayın!

Başvuru için fikir sahibi olmak adına Efe’nin yazdığı şu iletiye göz atın: http://listarchives.libreoffice.org/tr/gelistirici/msg00005.html 

2- ‘Ya ben daha çok Android falan…’ diyorsanız, LibreOffice’in Android sürümü ve uzaktan kumandasına göz atabilirsiniz.

3- ‘Kod okurum, şiir gibi de yazarım, LibreOffice’i de severim ama uğraşamam işim gücüm çok…’ diyorsanız, bağışlarınızla katkı verebilirsiniz: https://donate.libreoffice.org/tr/

4- ‘Tamam da, ben öğrenciyim/freelance’im az biraz da maddi getirisi var mı?’ derseniz sizi Freedomsponsors.org‘daki LibreOffice sayfasına alalım. Hem özgür yazılıma katkı verebilirsiniz hem de para kazanabilirsiniz. Detalı şurada anlatmışım: Freedomsponsors.org: Destek olun & Harçlık Kazanın

5- ‘Ya biz şirketiz, ihale, hizmet falan’ Bu daha geniş bir konu, kısa tutmak adına TDF’nin ihalelerine bakabilirsiniz;

5.1- Tender To Develop And Incorporate Usability Metrics Collection For LibreOffice (#201502-02)
http://blog.documentfoundation.org/2015/02/24/tender-to-develop-and-incorporate-usability-metrics-collection-for-libreoffice-201502-02/

5.2- Tender To Develop And Incorporate Multi-Language Support For UI And Test Cases Within Moztrap (#201502-01) http://blog.documentfoundation.org/2015/02/10/tender-to-develop-and-incorporate-multi-language-support-for-ui-and-test-cases-within-moztrap-201502-01/

Ayrıca Sertifika programlarına  katılabilirsiniz vs. detayları için benimle irtibat kurabilirsiniz.

PS: Dilimizde biten tüyleri ara ara alıyoruz.

Mutlu günler.



07 March 2015

Internet, Yeni Medya ve Özgürlükler


Yeni Medya Kongresi, Kadir Has Üniversitesi 26 Şubat 2015

Bu konuşmada, ben interneti nasıl anlıyorum, nasıl görüyorum; internet için ne yapmaya çalıştım, çalışıyorum, internet için kalın çizgileri ile ne yapılmalıyı, yeni medya ve özgürlük bağlantısına ağırlık vererek anlatmak istiyorum.

İnternet, Soğuk Savaş günlerinde, Sputnik’in yarattığı şok sonrasında, ABD’nin Bilim ve Teknolojiye yönelmesinin yarattığı ortamda bir proje olarak ortaya çıktı. İnterneti ortaya çıkartan ARPANET projesi, Ordunun Araştırma Ofisince fonlandı. Ama, Internetin ABD Ordusu için, askeri amaçlarla geliştirildiğini söylemek haksızlık olur. Licklider “Galactik Ağ” ile bugünlere yakın bir ağ hayal ediyordu. Bu 1963 de oldu, ArpaNet’in ilk düğümünün kurulması 1969 Eylül, TCP/IP’nin kullanıma girmesi ocak 1983, webin ilk tasarımı 1989, ayağa kalkması ise 1993’de oldu. Bizim İnternete bağlandığımız yılda 1993 idi.

Kanımca, İnternet insanlığın gelişmesinde Sanayi Devrimi boyutlarında bir gelişmeyi temsil etmektedir. Neelie Kroes, AB’nin önceki başkan yardımcısı ve Sayısal Gündem komiseri, NetMonial konuşmasında, interneti toplumu yeniden yapılandırma açısından, elektrik, matbaa ve sanayileşme toplamından daha fazla olduğunu söyledi. İnternet, hepimizin yaşamını köklü olarak değiştirdi. Bazılarımız, internet öncesini hatırlıyor ama genç kuşaklar internetsiz bir yaşamı hiç görmedi. Peki, interneti nasıl algılamalı? Nedir İnternet? Buna herkes muhtemelen farklı bir cevap verecektir. İnsanlık, bilim ve teknolojinin öncülüğünde yeni bir toplum biçimine geçişin sancılarını yaşıyor. Buna genelde, “Bilgi Toplumu” diyoruz. Bilgi hep önemliydi. Niye şimdi “Bilgi Toplumu” diyoruz? Ekonomik kalkınmasının ana motorunun, bilim, teknoloji, ar-ge ve inovasyon olduğu, kısaca “bilgi” bulutunda topladığımız, insan beynin ürünleri olduğunu anladık. Bunun sonucunda tüm ekonomik hayat, hizmetler, kamu yönetimi, eğitim, sağlık, eğlence, örgütlenme, halkla ilişkiler, pazarlama kısaca yaşamın tüm boyutları bir değişim, yeniden yapılanma sürecine girdi. Birey tarihte hiç olmadığı kadar öne çıktı; bireysel gelişme olanakları artı, kendi başına bir merkez oldu; kendi matbaası, radyosu, televizyonu, gazetesi mümkün. Bunu makul ücrete, bazan bedava, hızlı ve kolay, uzman olmadan, yapabiliyor.

Hepimiz internet sayesinde, sınırların fiilen ortadan kalktığı, sosyal ve kültürel açıdan birleşen bir dünyanın parçasıyız. Kitleler soysal ağlar üzerinden birleşmekte, örgütlenmekte, toplumsal, kültürel ve siyasal etkinlikler yapmakta. Dünyayı sarsan politik gelişmelere en azından katalizor olmakta. Dünya üzerinde dağılmış gönüllüler imece benzeri bir yöntemle tüm insanlığın ortak malı ürünler üretmektedir: linux ve özgür yazılım dünyası, wikipedia, açık ders malzemeleri, creative commons lisanslı sanat ve fikir ürünleri gibi. Veriye dayalı paylaşım ekonomisi, akıllı ulaşım sistemleri, büyük veri temelli yeni uygulamalar, mobil uygulamalar, IoT, ağ temelli servislerin uzaktan verilmesi gibi pek çok yeni uygulamalar ortaya çıkmaktadır. Kısaca, devrimsel bir gelişmeyi hep birlikte yaşıyoruz. Gelişmenin ne yönde olacağınızı biraz sezinliyoruz, epey de yanılıyoruz. Bu gelişmeyi bireyler, STK’lar, kurumlar olarak etkileme gücümüz var.

İnternetin işaret ettiği Bilgi Toplumun bireyleri, bağımsız, inisiyatif alabilen, yaratıcı, farklı ve aykırı düşünebilen insanlar olacaktır. Bir başka deyişle, bu tür insanları yetiştiremeyen toplumlar, yarışı kaybedeceklerdir. İnternetin tüm toplumu, kamu yönetimini, iş dünyası, sağlık, eğitim, eğlence vs’yi her gün değiştirdiği ortada. İnsanların, toplum içinde eşit bir yurttaş hatta eşit bir dünya vatandaşı olması için bu teknolojileri çok rahat, kolay ve etkin kullanabilmesi gerekir. Bu hem kendini geliştirebilmek, toplumsal hizmetlerden yararlanabilmek, hem de toplumsal yaşama, özellikle siyasal hayata katılabilmesi için elzem olduğu aşikar. İnternetin dünyaya açılan bir sokak olarak düşünürsek, sokaktan gelecek çeşitli tehditler için güvenlik ve mahremiyetin korunması için ciddi bir okur yazarlık gerekmektedir. Gerekli okur yazarlık seviyesi, dinamik olmalı ve sürekli geliştirilmelidir. Bu okur yazarlık düzeyine bilgi/bilişim/yeni medya okuryazarlığı diyoruz. Bu okur yazarlık düzeyine ulaşamamış insanlar, eşit yurttaş olmak yeteneğini kaybedecek ve geri kalacaktır. İnternete erişim temel bir insan hakkıdır. Bu görüş, hem BM belgelerine hemde Avrupa Belgelerine (Konsey, Parlamento) ve Anayasalara girmeye başlamıştır.

Bu konuda 2 yeni eğilimden bahsedeceğim. ABD’nin önemli Bilgisayar Meslek Örgütü ACM, lise fen kolundan mezunların bir çok bilgisayar dersi alması gerektiğini söylüyor. Bir başka deyişle, Bilişimin temel kavramlarını her yurttaşa öğretmek zorundayız. Bilişim sistemlerini “büyülü tek tuş” sistemi algısından kurtarıp, olanaklarını, limit ve riskleri öğretmeli, ağ, veri tabanı, güvenlik, mahremiyet, etik, estetik, ifade özgürlüğü, hukuk temel kavramlarını öğretmeliyiz. Bunu tarihçiye, iş adamına, tarımcıya, öğretmene, kısaca her yurttaşa anlatmalıyız.

Yeni gelişen ikinci nokta programlamanın herkese öğretilme çabasıdır. Web’in kurucusu Tim Berners-Lee, inovasyon kongresinde herkese program yazmayı önermişti. Poltikacılara programlama öğretmeliyiz ki, doğru düşünmeyi öğrensinler diyor. Programlama öğrenmenin düşünme alışkanlıklarını olumlu etklilediği, bütünsel düşünmeyi geliştirdiği düşünülüyor. Bu bakışın sonunda, ana okulunda pogramlama öğretme, programlama kampları, hacketonları, çalıştayları vs ile bütün dünyada en başta gençleri programlamaya alıştırmak ve sevdirmek yönünde bir çaba söz konusu. Okul öncesi çocuklara da programlama öğretme çabaları var. Türkiye’de bu yönde kampanyalar ve çalıştaylar yapılıyor, bu konuda uzmanlaşan şirketler var.

Türkiye Ne Durumda ? Ne Yapılmalı ?

Kalın cizgilerle bakarsak, iyimser yönde dünya ortalamasını yakaladık, genelde Avupanın gerisindeyiz. Bazı sektörlerde iyiyiz, finans, e-devlet hizmetlerin sunumunda, uyap, vedop gibi bir çok hizmetde ödül aldık. Özgürlük, yasaklar, toplumsal cinsiyet, hukukun üstünlüğü, gelir dağılımı gibi indekslerde cok gerideyiz, yer yer utanılacak konumdayız. Türkiye bir yandan, internet ve temsil ettiği bilişim, ar-ge, inovasyonu teşvik için, e-devlet projeler, örnek vaka haline gelmekte olan fatih projesi için çömertce para harcıyor, rol model olarak Bill Gates, Steve Jobs, Zukerman’ı öne çıkartıyor, öte yandan gerekli ön koşul olan özgürlükler, hukukun üstünlüğü, ifade ve basın özgürlüğü ve adil rekabet koşullarını sağlaması gerektiğini anlayamıyor, algılayamıyor, uygulayamıyor.

-Türkiye İnternetin neyi temsil ettiğini kavrayamadığı için, internetin gelişmesi, toplumsal yarar sağlanması, toplumu bütünleştirmesi, dünya ile rekabetin önemli aracı olarak kaullanmaya odaklanamamış, daha çok tasaruf, ihracatı teşvik gibi parçalara odaklanmaya çalışmıştır. Bu nedenle, bütünsel, tüm paydaşları kapsayan, ortak aklı ortaya çıkaran katılımcı yapılar kuramamış ve ortaya çok parçalı, daha çok marjinal problemlere ve dar çıkarlara odaklanılmış ve sonuçta Türkiye gemisinin rotası Bilgi Toplumuna dönememiştir. Gates, Jobs, Zukerman çıkartmak isteyenler, Twitter, facebook ve Youtube’un kökünü kazımayı hedeflemişlerdir.

Benim eskilerde epey tekrarladığım bir önerimi kısaca izninizle özetlemek istiyorum: 1) strateji, 2) siyasal irade, 3) sorumlu koordinasyon merkezi (bakanlık, müsteşarlık), 4) her yıl gözden geçen eylem planı, 5) TBMM de komisyon, 6) yıllık, herkese açık değerlendirme, geri besleme yapıları (konferans). Bir başka deyişle, işin önemini kavramış bir siyasi liderlikle, tüm paydaşları içeren, tüm toplumu kapsayan, katılımcı, saydam, yönetişimi öne çıkaran yapılar kurmak gerekir. Gerisi gelir. Tekrarlamakta yarar var: özgürlük, hukukun üstünlüğü, aykırı ve farklı görüşlerin yeşereceği bir ortam ön koşul.

Peki, yeni medya okur yazarlığı yelpazesinde Türkiye ne durumda? Ben konu uzmanı değilim. Elimde sunucak bilimsel veriler yok. Deneyimlerimden hareketle bir kaç şey söylemek gerekirse; durum pek parlak değil. Konferanslara bildiri sunan, kurslara katılan, katılmak isteyenler, bilişim sınıfındaki öğrencilere bakınca durum düşündürücü. Hiç grup haberleşmesine katılmamış, açık yönergeyi anlamayan, yönergeyi okumayan, şu adrese yazın denmesine rağmen, o mesajı cevaplayan o kadar çok ki.

Kendi maceram konusunda bir kaç sey söyleyip bitirmek istiyorum. Bilkent’e 1987 Haziranında katıldım. Yurt dışında iken o zamanki İnterneti kullanmıştım. Birkaç ay sonra Bilkent, ODTÜ üzerinden bir terminal ile Bitnet ağı olan TÜVAKA’ya bağlandı, daha sonra kendi makinası üzerinden bağlandı. Bağlantı tüm ülke içinde 9.6Kps, idi. 89 yılında Ege’deki düğüm üzerindeki DOST listesinde niye TCP/IP (İnternet) ağına bağlanmıyoruz tartışması oldu. Ben o tartışmanın aktif katılımcılarından biriydim. 12 nisan 1993’de Türkiye İnternete bağlandığında, herkese çok savunduğum İnterneti anlatmak zorunda hissettim. 1993 Bilişimde bir oturumda, Attila Özgit ve Ufuk Çağlayan’la buluştuk. Ufuk GOSIP hakkında, Attila TR-Net hakkında bende “İnternet: Eğitim ve Araştırma Yeni Olanaklar” başlıklığıyla konuştum. O yıl sonunda DIE’de istatistik Kongresinde İnterneti anlatan bir seminer verdim. Notları özet olarak Cumhuriyet Bilim Teknikte yayınlandı. 94 Şubatında Tubitak’ta Üniversitelere yönelik bir demo yapılmıştı. Benim notlarım gelişmişti. O dağıtıldı. 1994 yılında servis.net.tr çalışmaya başladı (ODTÜ’de). MAM’da benzeri bir servis başladı. Benim notlar, “İnternet: Bilgiye erişimin yeni araç ve olanakları” adıyla yayınlandı. 94 bilişimde “İnterneti Nasıl Geliştiririz?” konulu bir forum/çalıştay yaptık. Pek bir şey çıkmadı. Konuyu bilende azdı. Servis.net.tr ve MAM servisi ya x.25 üzerinden ya da şehirler arası tarifeden ve düşük kapasite modemlerle çalışıyordu.

Tr-net ile TT (PTT) arasındaki İnterneti birlikte büyütme projesi görüşmeler koptu. TT ihaleye çıktı. TUR-NET ortaya çıktı. İhalenin ertesi günü, inet-tr yapıldı. İnet-tr , üniversitelerde ortaya çıkan çatışmaları azaltmak, herkesi bir masa etrafında toplamak ve ortak akıl oluşturmak amacıyla ortaya atıldı. İlk konferans buna odaklandı. İnet-tr’96 yı yeni kurulan Yeditepe’de, ’97 de ODTÜ’de yaptık. Kamuya yönelik ve demokrasi oturumları hep öncelikliydi. İnet-tr’97 de özel bir kamu oturumu yaptık. Başbakanlıkla temas halindeydik, onlara ilk web, mail ve gopher sunucunu ben kurmuştum. 1997 konferansında Internet Üst Kurulu kurulma kararı çıktı. İlk toplantı Ocak 98 de idi. İlk toplantıdan sonra İnternet Haftası kararı çıktı. İnternet günü önerisi, İnternet Haftasına döndü ve 2 hafta olarak uygulanmaya başlandı. Şubat 98 de ise KamuNet konferansı yapıldı.
İnet-tr’98 de ise Akademik Bilişime karar verildi.

Kamunet 1 kere yapılabildi. Bazıları içten bazıları dıştan engellediler. Bu yıl inet-tr’nin 20.sini yapacağız. Akdemik Bilişimin 17.sini yaptık. İnternet Haftasının 18.sini yapacağız.

Bu arada bunlarla içice Özgür Yazılım ve Linux etkinliklerini yaptık. Linux kampını 2010’da başlattık. Akademik Bilişim öncesi 4 günlük kurslarıda 2010 da Urfa Konferansında başlatmıştık.

Tüm bu etkinliklerde interneti toplumun gündemine taşımak, internet kültürünü yaymaya çalışmak, bilgi ve deneyim paylaşım ortamı sunmak, insan gücü yetişmesine katkıda bulunmak, ortak akıl oluşması için çaba harcamak, iyi bir örnek olmak, ve bu konuların tartışılması için bir platform oluşturmak hedeflenmişti. Bu platformları ayakta tutmaya çalıştık. Bunu benimle birlikte hareket eden, destek olan pek çok kişiyle birlikte yaptık. “İnternet Çetesi” sözünü duyanlar, bunun bizim çekirdek kadromuz olan Ufuk, Attila ve Ethem Derman’ı kapsadığını bilir. Ama, pek çok dosttan, internet gönüllüsünden destek aldık.

Peki bundan sonra ne yapmalı? Benim nacizane önerilerim: pozitif yaklaşmak, teslim olmamak ve elden gelen çabayı, olabildiğince örgütlü bir şekilde göstermektir. Bazı daha somut örnek olarak, bu konuların doğru terim ve çerçevede tartışılmasına çaba harcamak, bu konularda ciddi araştırma yapmak ve bunu yayınlamak (bilimsel dergilerle, sınırlı olmamak kaydıyla), interneti etkin bir şekilde kendi işimizi daha iyi yapmak için kullanmak, topluma örnek olmak ve destek isteyen gruplara destek olmaktan bahsedebiliriz. Topluma Entelektüel liderlik etmek akıldan çıkmamaması gereken bir hedef. İnterneti diğer teknolojilerle birlikte kullanmaktan kaçınmamak, clicktavizm den uzak durabilmek önemli.

Ülkede ve dünyada yanlız değiliz. Eşit bir dünya vatandaşı olarak tüm dünya ile empati ve dayanışma içinde olmak gerekir.

İflah olmaz bir iyimser olarak, eski slogınımı tekrarlamama izin verin:

İnternet Yaşamdır !

yenimedya-sunum



06 March 2015

Cocci İle Otomatikleştirilmiş Yama Oluşturma


Yaklaşık 3 hafta önce OPW'nin 10. turu başladı. OPW'yi merak edenler için, buraya bakabilirsiniz.

Yazının geri kalanında Coccinelle ile nasıl betik yazıldığını, yama hazırlarken bu betiğin dosyaya nasıl uygulandığını anlatacağım.

Coccinelle, otomatik olarak analiz yapan ve C kodunu yeniden yazabilen bir araç. Asıl yararı aynı düzeltmeleri her dosya için tek tek yapmak yerine, bir şablon oluşturup onunla birçok dosyayı tek seferde tarayayıp değiştirebilmesi. Desteklediği betik dilleri Python ve OCaml.  (sudo apt-get install coccinelle)

Betik yazarken genel yapı:

@@
degisken_tanımları
@@
Kurallar

İstersek ilk @@ işaretlerini @Betik_Adi@  şeklinde de kullanabiliriz. Bu kullanım uzun betikler yazarken okumayı kolaylaştırır.

Daha sonra kurallarda kullanacağımız değişkenleri tanımlamalıyız. Kural kısmı ise tamamen betik ile ne değiştirmek istediğimize bağlı.

Çok basit bir örnekle başlayalım:
Örnek1:

"foo.c" dosyasındaki C kodumuz şöyle olsun:
int main()
{
    foo();
    g(); 
    foo();
    g();
    foo();
}

Bu dosyadan foo() fonksiyonlarını kaldıralım. "-" ile kaldırılacak, "+" ile eklenecek alanı en genel şekliyle tanımlamalıyız.
foo.cocci dosyası:

@@
@@

- foo();
Betiği uygularken:

$ spatch -sp_file cocci_betigi -in_place uygulanacak_dosya_yolu


spatch yukarıdaki parametreleri ile betik dosyasını uygulayarak değişiklik olan yerleri gösterir.

Örnek2:
Aşağıdaki C kodunda kullanılan _cancel_timer_ex fonksiyonu yerine  del_timer_sync fonksiyonu kullanmak istersek elle tek tek değiştirmek yerine cocci betiği yazabiliriz.

C kodu: drivers/staging/rtl8712/os_intfs.c

Cocci betiği:
@@ expression x; @@

 - _cancel_timer_ex (&x);
+ del_timer_sync (&x);

Çıktı:




 

Örnek3: 
Gereksiz olan parantezleri kaldırmak için betik yazalım.
C kodu:



Cocci betiği:
@@
identifier i;
constant c;
type t;
expression e;
@@

t i =
-(e
+e
<<
-c);
+c;


Çıktı: Farkedildiği gibi değişecek satır(ların) kalıplarına göre tarif yapılıyor. Expression, constant, identifier gibi tipleri kullanırken değiştirmek istediğimiz satırdakilerle örtüştüğünden emin olmalıyız. Ayrıca yazdığımız betiğin, doğru olan satırlarının değiştirmiyor olmasına da dikkat etmeliyiz.

Örnek4:
Yazacağımız betikte Python kullanmak istersek @script:python@ diye belirtmemiz gerekiyor.
C dosyası:
int main () {
        foo(a0);
        bar();
}


Cocci betiği: 
@a@
identifier x;
@@
foo(x);
@script:python b@
x << a.x;
y;
z;
@@
print y
coccinelle.y = x
coccinelle.z = "something"
print y
@c@
identifier b.y;
identifier b.z;
identifier a.x;
@@
- bar();
+ matched_bar(y,z,x);


Çıktı:



Yazdığınız betik kurallara uygun mu, bir hatası var mı diye bakmak için:
$ spatch --parse-cocci deneme.cocci

Bu yazı sadece aklınızda bir fikir oluşması için giriş niteliğinde verilmiş örnekleri içeriyor. Coccinelle ile uğraştıkça daha karmaşık betikler yazılabilir. Daha fazla demo için buraya bakabilirsiniz. Kolay gelsin...


04 March 2015

Sending First Patch To Upstream


Last week, I sent first patch to upstream and it was accepted in mm tree :). I am very happy about that. You can see it here.

Subsystem maintainers are very careful and a lot of people review the codes. Out side of staging directory, and before the internship, my first patch is about y2038 project. When I sent patch for y2038, a lot of developers reviewed and suggested something. I have recently seen the patch here: http://lwn.net/Articles/620870/, it was my first experience :).

Todays, I work with linux kernel mm community, this makes me very excited and happy :).  I gained some experiences in this process and learnt how can I be sure with my changes. This is most important case for coding. When I talked with my mentor, every time I reported different thing :) and said "oh this prevents collapsing pages into a thp!". Because I was testing wrong. Finally I could find what was the problem.

For test results, I look /var/log/kern.log, it is very large file so I split it like that: "split -n 5" and look newly created small files and log time stamps is important. To be sure with my changes print out virtual memory address area for my test programs.

/proc/pid/smaps shows whole vmas for the process. pr_info("vm_start = %04lx\n", vma->vm_start); is enough to see begining address of the vma. Sometimes I need to see which process run this function, I print out current->pid. If I know what happened in every step, I find my faults very easy. I have to do something like that, because other processes will log about their huge pages in kern.log and I shouldn't confuse which process logged the results. To examining kern.log was big scale thing for me.

Before sending patch I need to be careful and check something for my patch. Also keeping focus on the issues is important. Working on kernel needs to pay attention more accorrding to other projects which I got experiences with them when I was student.

After this patch, I will work on zero pages and discover new things :).


Linux Kernel Ekibiyle Staj


Geçtiğimiz yaz haziran sonunda mezun oldum. Mezuniyetten sonra bir işe girip çalışmak, her gün işe gidip gelmek, birkaç ay işim dışında bir şeye bakmamak, sonrasında iş temposuyla birlikte neler yapabileceğime karar vermek gibi bir düşüncem vardı. Ancak tabi ki böyle olmadı :).

Ağustos başında Google İrlanda ofisinden iş görüşmesi için e-posta aldım, benim ile başlangıç bir telefon görüşmesi yapmak istediklerini söylediler. Hemen kabul ettim. İlk üç aşamayı geçtim, son görüşme için Irlanda'ya gittim ancak son görüşmede başarılı olamadım. Sorular beklediğim gibi değildi, internetten çalıştığım gibi de değildi.

Ben evde son görüşmeye hazırlanırken Gnome OPW için başvurular da başlamıştı. Ben daha önce ilk Gnome'un araçlarına sonra da Linux Kernel'a başvurmuştum. Gnome'a katkı verirken katkı vermek için masaüstü bilgisayarınızda ortam oluşturmak zor. En son Fedora 19'un alfa sürümünü kullanmak zorunda kalmam ve alfanın hiç kullanışlı olmaması üzerine katkı vermeyi sonlandırdım :). Aslında jhubild'de kullanabiliriz ama onda ortamı hazırlaması .. bana bir tane geliştiricisi o zamanlar Fedora beta sürümü varken, beta kullanmamı önermişti, beta yine kullanılabilirdi ancak bir sonraki sürüme geçtiklerinde alfa kullanmak zorunda kalmam pek iyi olmadı. Bir de Gnome Continuous var, onu yeni gördüm ama henüz denemedim.

Linux Kernel'a katkı verdiğim sene aslında alınmayı beklemiştim gerçekten ama olmadı. Bu dönem başvuru süresi 2 ay gibi uzundu :), geçen sene 3 hafta gibi bir süreydi. Necdet hoca "Aslında sen başvursan çok şey yaparsın" dedi, ben de başvurdum ve alındım :). Alınmayı gerçekten beklemiyordum ve çok güzel bir sürpriz oldu.

Şimdi Rik van Riel ile birlikte bellek yönetimi üzerinde çalışıyorum. Bellek yönetimi katkı vermeye başlamanın en zor olduğu kısımlardan biri, çünkü çekirdeğin temel fonksiyonlarını içeriyor ve daha karmaşık. Başvurduğunuz projeye göre staj sürecinde ne kadar yama gönderebileceğinizin sayısı da değişiyor. Ben projem zor olduğundan, 4 ayda otuz satır yazabilir miyim derken şimdiden bir yamayı kabul ettiler bile :).

Linux kaynak kodunda bellek yönetimi ile ilgili dizin mm/. Eğer güncel mm dizinini takip etmek istiyorsak da Linus Torvalds'ın kullandığı dalı değil de linux-next'i takip etmek gerekiyor. Yamaları Andrew Morton kabul ediyor ve günlük olarak etiketliyor. Güncel linux-next'i nasıl takip edeceğinizi görmek için buraya bakabilirsiniz.

Anladığım kadarıyla, Linux'ta bellek yönetimi üzerine çoğunlukla Redhat ekibi bakıyor, çünkü birçok sunumu ve belgeyi o ekip hazırlamış. Ben yamaları gönderirken mm dizini bakıcılarına baktığımda genelde @redhat.com alan adlı hesaplar var. Yamaları vger.kernel.org ve  akpm@linux-foundation.org listelerine gönderdiğim için de çok mutluyum. O kadar büyük listelerdeki insanların kodlara bakıyor olması oldukça heyecanlı :).

Üzerinde çalıştığım proje ise, bellek üzerinde 2kB/4kB kadar boyutlarda olabilen sayfaların dışında bir de büyük sayfalar (huge page) var. Onların boyutları ise 2MB/4MB. Peki neden büyük sayfalara ihtiyaç duyuyoruz? Çünkü sayfalar büyük olduğunda sayfa tabloları da büyük oluyor ve bir süreç için verileri bellekten atma/belleğe getirme miktarı azalıyor. Eğer sayfalar 4MB'tan büyük olursa verimsiz oluyor.

Sistemin swap kullanması gerektiğinde büyük sayfalar normal boyutlu sayfalara parçalanıyor (2kB/4kB) ve o şekilde swap alanına yerleştiriliyor. Sorun şu ki; swap alanından belleğe tekrar geri getirilmek istendiğinde büyük sayfa olarak değil, normal boyutlu sayfalar olarak getiriliyorlar bu durumda eski verim sağlanamıyor, aynı zamanda burada izlenmesi gereken bir algoritmaya da karar verilmeli. Çünkü bir süreç swap kullanıyor diyelim, ve swapte olan bir veriye ihtiyaç duyuldu, sadece tek bir verinin bulunduğu sayfa 2kB, ancak bunun yerine 2MB büyük sayfa getirmek her zaman yararlı olmaz. Burada karar verilmesi gereken noktalar var.

Geçtiğimiz dönem kod ve belge okumak üzerine geçti. Bir tane de yama gönderdim. Sadece okunabilir sayfaları büyük sayfalar şeklinde birleştirmek için. Yamayı burada görebilirsiniz.

Bundan sonraki bir süre ise; "daha önce hiç okuma/yazma isteği almamış, henüz fiziksel belleğe eşlenmemiş, sadece sanalda bulunan, bir süre sonra ilk kez okuma izni aldığında fiziksel belleğe eşlenen sayfalar" var, bunlara zero page deniliyor, bunlar üzerinde çalışacağım. Eğer sayfa içerisinde veri yoksa, ilk okuma isteği aldığında çekirdek bunu sıfırlarla dolu bir sayfa olarak üretiyor. Bunları da büyük sayfalara dahil etmek üzere çalışacağım. Aynı zamanda (emin değilim), Documentation dizininde de belgelendirme yapmam gerekecek. Muhtemelen birkaç işim daha var ancak henüz ben bilmiyorum, danışmanımla işleri bitirdikçe yenisini alma şeklinde ilerliyoruz. Henüz başlamadığımız işlerden de şuna bir ara bakarız şeklinde konuşuyoruz.

Staj sürecinde birkaç Türkçe yazı daha yazacağım (yazmadı) :).


03 March 2015

Özgür Yazılımı Richard Stallman'dan Dinlemek


    28 Şubatta Richard Stallman Sabancı Üniversitesine geldi. Biz de kalabalık bir grupla dinlemeye gittik.  Elbette bişeylere ikna olmak için orada değildik.  Bu konuyu çok kez Necdet Yücel'den dinledik. Ama bunu özgür yazılım akımını başlatan adamdan dinlemekte ayrı güzeldi. O konuşurken bi o kadar rahat biz ise acayip heyecanlıydık. :)

    Stallman önce yazılımların neden özgür olması gerektiğine,  özgürlük kavramının hükümet dahil çok kişiyi rahatsız etmesine değindi.  Aslında sadece yazılım tarafında değil sanatta, düşünceyi ifade etmede, hayatta özgürlükten bahsetti. Bunun nasıl sağlanabileceğinden bahsetti. Onu dinlerken insan böyle bir dünyayı hayal edemiyor tabi. Çıkışta Necdet hocayla aramızda geçen diyalog şöyleydi:

- Stallmanın hayalindeki dünya çok güzel ama insan böyle bir dünyayı hayal edemiyor.
+ Bundan 30 yıl öncede özgür yazılım diye bir şeyi de hayal edemiyordu insanlar.

:) (İç ses : Umut var)

    Bir de Linus'a gönderme yapmayı ihmal etmedi tabi. "Linux işletim sistemleri söylemi yanlış." Linux işletim sisteminin sadece çekirdeği. Geri kalan özgür araçlar GNU projesinin ürünleri. Lütfen Linux yenine GNU/Linux kullanalım Stallman'ın hakkını Stallman'a verelim :)

    Bir de Açık Kaynak mevzusundan bahsetti. Açık kaynak diye bir kavram var elbette. Ama bunun Stallman ile bi alakası yok. Açık kaynağın babası falan diye bahsedilmesinden oldukça rahatsız. Tam da bunu yazacakken Stallmanın türkçe viki maddesine bakayım dedim bir de ne göreyim. Her yerde açık kaynak yazıyor. Kolları sıvadım ve özgür yazılım ulan diye değiştirdim :)

    Kısacası Stallman'ı görmüş olmak heyecan ve mutluluk vericiydi. Bu konuşmayı kaçırdıysanız geç kalmış değilsiniz. 6 Mart 2015 te BİLMÖK'te yine konuşacak ve biz de orada olacağız :)



Şimdi de en havalı fotoğrafımı paylaşıyorum :)





02 March 2015

Richard Stallman İstanbul'da


Geçtiğimiz cumartesi Sabancı Üniversitesi'nde gerçekleşen Richard M. Stallman'ın "Telif Hakları ve Toplum" sunumuna katıldım.

Katılımın çok fazla olacağını düşünmüştüm. Hatta bu kalabalıkta oturacak yer bulamam diye biraz endişelenmiştim.  Ama üniversitenin konumundan olsa gerek bir insan seli durumu yoktu. Çanakkale'den yine kalabalık gelmiştik. Necdet Hoca'nın mezun öğrencileri ile birlikte sunumda birbirini tanıyan en büyük gruptuk sanırım.

Stallman, sunumuna özgürlüğü, bir yazılımın neden özgür olması gerektiğini ve özgür yazılımın esaslarının neler olduğunu anlatarak başladı. Kullanılan sistemin insan özgürlüğüne saygı duyması gerektiğini söyledi. Bu sözünü çok sevdim:) Özgür yazılımı hiç bilmeyip ilk kez orada Stallman'dan dinleyen birisi için verdiği örnekler hayatın içinden, somut, net ve açıklayıcıydı. 

Bir işletim sistemi için gerekli olan tüm yazılımlar hazırken (çekirdek hariç) , Linus'un yazdığı çekirdek kullanıldı diye bu işletim sistemine  sadece "Linux" işletim sistemi dememizin doğru olmadığını "GNU/Linux" olarak kullanılması gerektiğini söyledi.
 
Daha sonra açık kaynaklı yazılımlardan ve bunun neden etik olmadığından, sansürlerden, telif haklarından ve lisanslardan bahsetti. Özgür yazılımın felsefesi ile ilgili daha ayrıntılı cevapları buradan bulabilirsiniz.

Konuşma sonunda GNU peluşu açık artırmaya sunuldu.(FSF için) Peluşun sahibi Necdet Hoca oldu :)

Sunumdan sonra Stallman soruları yanıtladı. Verdiği cevaplar da konuşmasında olduğu gibi netti.

Özgür yazılım hareketini başlatan kişiden, özgür yazılımı dinlemek çok çok güzeldi. Bilgi ve Sabancı Üniversitesi'ndeki sunumu kaçırmış olabilirsiniz ama hala katılmak isteyenler için, Ankara Üniversitesi'nde bir konuşması daha olacak. Stallman bir daha ne zaman Türkiye'ye gelir bilinmez. Gidebilecek durumu olanlar için bence kaçırılmaması gereken bir fırsat.

Etkinlikten sonra, bu kalabalık ekiple bolca sohbet etme fırsatım oldu. Benim için yine aşırı keyifli geçen bir gündü :) Görüşmek üzere.