26 Ekim 2016 Çarşamba

Özgür Web Teknolojileri Günleri 2016


Merhabalar,

Linux Kullanıcıları tarafından düzenlenen Özgür Web Günleri 2016, 22-23 Ekim'de Boğaziçi Üniversitesi Güney Kampüsü'ndeydi. Ben de etkinliğin 6.yılında yeniden katıldım. 

Özgür Web Teknolojileri Günleri Nedir?

  • Linux Kullanıcıları Derneği tarafından yılda bir kez düzenlenir.
  • Özgür web teknolojileri ile ilgilenen herkesin buluşma yeridir.
  • Toplumun her kesimine uygun düzeyde, tanıtıcı ve teknik seminerler yapılır.
  • Organizasyonlar, kamu kuruluşları ve özel sektörden ilgili şirketler stand açar, ürün ve hizmetlerini tanıtır.
Özgür yazılım ve web teknolojilerine ilgi duyanlar için oldukça doyurucu bir etkinlikti. Etkinlik programında dinlemek istediğim konular vardı.

Etkinliğin ilk günü sabahtan, "Özgür Web’e İntisap", "Laravel ile Modern Web Geliştirme", "Modern Web Uygulamalarında Özgür Teknolojiler", "Web Dünyasında Uluslararası Özgür Yazılım Fırsatları" seminerlerine katıldım.



Öğle arasında İstanbul'dan ve özgür yazılım camiasından yeni insanlarla tanışıp, keyifli sohbetlere dahil oldum. Henüz öğrenciyken sektörden birileriyle konuşup, öneri almak, kişilerle bağlantı kurmak benim için etkinliğin en yararlı taraflarından biri oldu. Öğleden sonrada dört farklı oturuma katıldım.


 Son 3 senedir katıldığım bu etkinlik bir şeyler keşfetmek, ufkumu genişletmek konusunda bana çok şey kattı. Dolu dolu geçen hafta sonumun yanında, Çanakkale'deyken göremediğim arkadaşlarımı görmek, etkinlikten sonra bile onlarla vakit geçirmek, evimde bir gece uyuyabilmek harikaydı :) (Şebnem Ferah konserini saymıyorum bile \m/). 


31 Temmuz 2016 Pazar

LibreOffice "headless" Modunda Dosyaları Dönüştürme

 

LibreOffice yazılımı komut satırından başlatarak, çeşitli parametreler atayabilirsiniz. Normal biçimde kullanımlarda, komut satırı parametrelerinin kullanımı gerekli değildir. Genellikle deneyimli kullanıcıların tercihidir.

UNIX-benzeri sistemlerde, LibreOffice yazılımını komut satırından başlatmak için aşağıdaki satır yazılır : 

${install}/program/soffice {parametre}}

Buradaki {install} ifadesini LibreOffice yazılımının kuruluş yoluyla değiştirin (örneğin, ~/office)

{parametre} ifadesi gerektiğinde geçerli komut satırı parametrelerinden biri yazılarak kullanılabiliyor. İşte bu parametrelerden biri olan "--headless" uygulamayı kullanıcı arayüzsüz kullanmanızı sağlar.

Diğer parametrelerden biri olan "--convert-to" ise dosyaları yığın olarak dönüştürebiliyor.

**Bu iki parametre birlikte kullandığında ise komut satırında, desteklenen tüm dosya formatlarını yığın olarak dönüştürebiliyor. 

Bunun için temel komut şudur;

soffice                                                             \
   -env:UserInstallation=file:///tmp/LibreOfficeConversion_${USER}" \
   --headless                                                       \
   --infilter=<filter>                                              \
   --convert-to <TargetFileExtension>:<NameOfFilter>                \
   --outdir /path/to/wherever/you/want                              \
     file_to_convert.xxx


-env:UserInstallation : bu parametre zaten potansiyel olarak çalışan bir GUI varsa çakışmasını engelleyecek ve farklı bir ortam kullanıp ek bir örnek sağlayacaktır.

<TargetFileExtension>  : Libreoffice tarafından desteklenen ve dışa aktarılabilen dosya formatları yazılabilir. Örneğin 'pdf', 'docx', 'xlsx'

<NameOfFilter>  : Önceki hedef dosya uzantısı yanı sıra girdi biçimi eşleşmelidir. Örneğin 'calc_pdf_Export', 'writer_pdf_Export'. Filtrelerin listesi şurada.

--infilter=<filter>  : parametresi isteğe bağlı olarak kullanılabilir. Eğer mümkünse girdi filtre türünü zorlar. Örneğin infilter="Calc Office Open XML"

  *.xcu dosyalarında ki girdi filtre isimleri şurada (API isimleri).  Örneğin MS_EXCEL_95.xcu dosyası şu satırı içerir :
                       
                    <node oor:name="MS Excel 95" oor:op="replace">


 
 

12 Temmuz 2016 Salı

.docx ve .odt nedir ?

 

   

 

.docx nedir?


 docx, Microsoft‘un Windows işletim sistemleri içerisinde yer verdiği Word yazılımının yeni nesil dosya uzantısıdır. Microsoft Word 2007 sürümüne kadar Word dosyalarının uzantıları “.doc” şeklinde kayıt edilirken Word’ün 2007 sürümü ve sonrasında kullanılan Word sürümlerinde dosya formatı “.docx” olarak oluşturulmaktadır.

 Belge verilerini tek bir binary dosyasında depolayan .doc dosyalarının aksine, .docx dosyaları Open XML formatı kullanarak oluşturulur, bu format da belgeleri sıkıştırılmış bir zip paketinde ayrı dosyalar ve klasörler olarak depolar.

 Bir .docx dosyasının içinde XML dosyaları ve üç klasör bulunur (docProps , word , ve _rels). Bu klasörler, belge özelliklerini, içeriğini ve dosyalar arasındaki ilişkileri tutar. Bu yapı, belgenin içeriğinin daha fazla erişilebilir olması için tasarlanmıştır.



 DOCX dosyasını açmak için bilgisayarınızda Microsoft Word 2007 veya daha sonraki sürümlerinin bulunması gerekiyor. Eğer bu sürümlerden daha önce yayınlanmış bir Word sürümü kullanıyorsanız DOCX dosyalarını açabilmek ve oluşturabilmek için Microsoft tarafından yayınlanmış olan uyumluluk paketini kurmanız gerekiyor.

 LibreOffice ve OpenOffice başta olmak üzere diğer ofis yazılımlarıyla veya DocX Viewer benzeri yazılımlarla da docx dosyalarını açabilirsiniz.




  .odt nedir? (Open Document Text)


 odt, LibreOffice Writer ve Google Belgeler gibi kelime işlem uygulamaları tarafından kullanılan dosya uzantısıdır.

 OpenDocument ya da tam adıyla OASIS OpenDocument XML biçimi, sayısal ortamda metin, hesap tablosu, çizim ve sunu gibi belgelerinizi saklamaya yarayan bir açık ve özgür belge standardıdır.

 İlk sürümü 3 Mayıs 2006 tarihinde kabul edilen OpenDocument biçimi, çok sayıda kelime işlemci ve ofis yazılımı tarafından desteklenmektedir. Bu belge biçimi LibreOffice, Apache OpenOffice, Calligra, Google Dokümanlar arayüzü, StarOffice ve Lotus Notes ürünleri tarafından da kullanılmaktadır.

 OpenOffice.org 2.0'dan itibaren tüm OpenOffice.org bileşenleri (Writer, Calc, Impress, vb) standart OASIS OpenDocument XML biçimini kullanmaya başladı. Bu sayede üreticiden bağımsız bir şekilde hazırlanan belgeler, herhangi bir editör yardımıyla açılıp incelenebilmektedir.

  Aslında birer XML belgeleri olan OpenDocument dosyaları, kayıpsız ZIP sıkıştırma algoritmasını desteklemektedir. Bir .odt dosyasının içinde XML dosyaları, diğer dosyalar(mimetype) ve iki dizin bulunur (META-INF, Thumbnails).


 *content.xml
   En önemli dosyadır. Belgenin gerçek içeriğini taşır. Temel HTML biçiminde esinlenilmiştir. İçeriği şöyledir:



*styles.xml
  Stil bilgilerini içerir. OpenDocument, biçimlendirme ve düzen için stilleri yoğun kullanır. Stillerin türleri vardır.
  • Paragraph styles
  • Page styles
  • Character styles
  • Frame styles
  • List styles

*meta.xml
    metadata dosya verilerini içerir. Örneğin; Author, "Last modified by", date of last modification. <dc:...> tagının ismi Dublin Core XML standarttan gelir. İçeriği şuna benzer:


*settings.xml
  Yakınlaştırma faktörü ve imleç konumu gibi ayarları içerir. Bunlar içerik veya düzen olmayan özelliklerdir. 

*mimetype (file)
  Belgenin tek satırlık dosyasıdır. Aslında bu dosya uzantısı biçiminin önemsiz olduğunun bir göstergesidir.. Dosya uzantısı orada sadece kullanıcı yararına bulunur.

*Thumbnails (directory)
  Küçük resim için ayrı bir dizindir. Küçük resmin, “thumbnail.png” olarak kaydedilmiş olması gerekir. Dosya kaydedildiğinde, belgenin küçük resim gösterimi varsayılan olarak oluşturulur.

  Belgenin temsili ilk sayfa, ilk tablo vs. olmalıdır. Küçük resimler için gerekli büyüklük 128x128 pixel'dir. Thumbnail Managing Standard (TMS) ına uygunluk sağlamak amacıyla, küçük resmin 8bit olarak kaydedilmiş olması gerekir.

*META-INF (directory)
  OpenDocument pakette yer alan dosyalar hakkında "manifest" adında bir XML dosyası saklanır. Manifest dosyası her zaman "META-INF/manifest.xml" yol adında depolanır. Manifestte saklanan bilgilerin ana parçaları:
  • Paketin içindeki tüm dosyaların bir listesi
  • Paketteki her dosyanın media tipi
  • Eğer paketin içinde saklanan bir dosya şifreli ise, dosyanın şifresini çözmek için gerekli bilgileri saklanır.

*Pictures (directory)
  Belgedeki görüntüler için ayrı bir dizin vardır. Bu dizin OpenDocument belirtimi içinde tanımlı değildir. Bu dizindeki eklenen dosyanın formatına göre, görüntü biçimlerini kullanabilirsiniz. Görüntü verileri rasgele bir biçime sahip olmakla birlikte, SVG ve PNG formatında saklanması tavsiye edilir.
  
 

15 Haziran 2016 Çarşamba

Linux Kernel İçin Yama Hazırlamak




Merhabalar, 

Geçen yıl, henüz 2.sınıftayken Linux Kernel için yamalar hazırladığım bir dönem olmuştu fakat bununla ilgili blog yazmayı atladığımı farkettim ve Türkçe kaynaklarında yetersiz olması sebebiyle kolları sıvadım :)

OPW isimli Gnome'un kadınlar için düzenlediği bir etkinlik var. Yılda iki defa düzenleniyor. Etkinliğin birçok katılımcısı bulunuyor (Linux Kernel, Gnome, Debian, Fedora, Mozilla gibi). Bende o dönemde Linux Kernel projeleri için hazırlandım. 

Linux Kernel projelerinden birine başvurmadan önce çekirdeğe yamalar yollamanız ve öngörülen sayıda yamalarınızın kabul edilmesi gerekiyor.
Opw Kernel sayfasında tüm yapılması gerekenler, okumak için önerilen birkaç kitap var. Burada da Greg Kroah-Hartman ilk yamanın nasıl yapılacağından bahsetmiş. 


Çok fazla kişinin sürekli aynı dosyalar üzerinde değişiklik yapıyor olması durumunda da daha gelişmiş bir biçimde sürüm takip sistemi kullanmam gerekti.
Git uzaktan birlikte çalışmak için oldukça yetenekli bir araç. Bu süreçte zaten bildiğim temel git kullanımının yanında, git'in daha fazla özelliğini kullanmam gerekti.


Temel olarak yama göndermeye kernel.org'dan aldığım çekirdek kodları dizini içerisindeki drivers/staging'den başladım. Çok temel kodlama biçimi düzeltmeleri yapabileceğimiz gibi, daha karmaşık düzeltmeler de yapabiliriz. 

Çalışmaya ilk başladığımda checkpatch.pl, sparse ve coccinelle araçlarını kullanmayı öğrendim. Bunlar statik ve en temel araçlardır. Başlangıç olarak Linux Kernel'a kodlama biçimi düzeltme dışında Sparse ve Coccinelle araçlarını kullanarak katkı verebiliriz. Bu araçlarla drivers/staging altındaki kodları derlediğimizde aldığımız uyarı mesajlarına göre düzeltmeler yapabiliriz.

Sparse aracı ile fonksiyon tiplerinin ya da değişken tiplerinin doğruluğu, gereksiz fonksiyonları kaldırma, tip dönüşüm işlemlerinin doğruluğu gibi uyarıları analiz edebiliriz.

Coccinelle, otomatik olarak analiz yapan ve C kodunu yeniden yazabilen bir araçtır. Kendine özel Smpl (Semantic Patch Languange) ile yazılan anlamsal betiklerden oluşmaktadır. 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ştirebilmesidir.

Yama gönderirken zorlandığım yanlardan birisi de, Linux Kernel ekibi kodlama biçimine oldukça önem veriyor. Bu yüzden aynı yamayı defalarca yeniden sürümlediğim zamanlar oldu. Hatta kodlama biçimini test etmek için yazdıkları bir Perl betiği de var. (Kodlama biçimi düzeltme yamalarını gönderebilmek için bu betiği kullanmalıyız.) 

Hazırlandığım süre boyunca git kullanımı, çekirdek ve derleme hakkında çok şey öğrendim. Teknik bilgiler dışında asıl kazandığım büyük deneyimin, uzaktan yabancı birileri ile çalışmak olduğunu düşünüyorum. 

Yazının geri kalanında bu işin biraz teknik kısmından bahsedeceğim.


Kernel'ı Derleme 

$ sudo apt-get install vim libncurses5-dev gcc make git exuberant-
ctags


$ mkdir -p git/kernels; cd git/kernels

$ git clone -b staging-next
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git


$ cp /boot/config-`uname -r`* .config

$ make -jX

$ sudo make modules_install install

* Bu adımlardan sonra bir takım grub ayarlarını yapmamız gerekiyor.

$ sudo vim /etc/default/grub komutu ile dosya içeriğini açarak, gerekli düzenlemeyi yapıyoruz.
   
  GRUB_HIDDEN_TIMEOUT=0
  GRUB_HIDDEN_TIMEOUT_QUIET=true
  GRUB_TIMEOUT=10 
 
Düzenleme işlemi bitince çalıştırmamız gereken komut ise: 

$ sudo update-grub2

E-mail Ayarları

Linux kernel için yama göndermek istiyorsak, bazı e-mail ayarlarını düzenlemeye ihtiyacımız var.

$ sudo apt-get install git-email

$ vim .gitconfig 


[user]
   name = Your Name
   email = your.email@example.com 

Git ile Yama Hazırlarken Kullandığım Temel Komutlar

$ git add . 

$ git commit -m “İlk commit”

$ git branch -a

$ git checkout -b ilk-yama

İlk Yamayı Göndermek 

$ git diff

$ git add <degisiklik_yapilan_dosya>

$ git commit -s -v 

$ git send-email --annotate HEAD^

Sonraki Yamalar İçin

 *Depo Güncelleme:
     
      $ git fetch staging
      $ git checkout -b staging-fixes-rebase
      $ git rebase staging/staging-next
  
 *Versiyonlama:

      $ git format-patch –subject-prefix="PATCHv2"

  *Eski commitleri görüntülemek
      
      $ git log

 *Commitleri Birleştirmek:
    
     $ git rebase -i commit_id

Sonraki yazımda görüşmek üzere :) 
     
   

3 Mayıs 2016 Salı

LibreOffice Hackfest Ankara 2016



Merhabalar,

Çanakkale'deki LibreOffice için yürütülen çalışmalar geliştirici ekibin de dikkatini çekti ve onların önerisiyle 30 Nisan - 1 Mayıs 2016 tarihlerinde Ankara'da ULAKBİM'in ev sahipliğinde bir hackfest düzenlendi. Etkinliğin iletişim dili İngilizceydi. Etkinliğe katılan LibreOffice geliştiricileri Michael Meeks, Marcus Mohrhard ve Jan-Marek Glogowski oldu.

Etkinlikte ilk gün geliştiricilerin sunumlarını dinledim. LibreOffice kod tabanı, Core class'larının yapısı, problemleri çözme, real world engineering gibi mevcut çalışmalarıma hız kazandıracak konular anlatıldı. Geliştirmede kullanılan araçlardan bahsedildi. Debug denemeleri yaptık.




Sonraki gün ise kodlama yapmaya başladım. Kritik noktaları danışabileceğim geliştiricilerin hemen yanımda olması gün boyunca 5 yama göndermemi sağladı :) Oraya gitmeden önce çalıştığım bug üzerinde işlerimi hızlandıracak yeni bir yol öğrendim. Bunun dışında Michael Meeks yapabileceğimi düşündüğü bir iş önerdi. Hemen üzerinde çalışmaya başladım. Bu işin şimdiye kadar verdiğim katkılardan biraz daha zor olduğunu ama benim üstesinden geleceğimi söyledi. Yakın zamanda bununla ilgili güzel haberler vermek isterim size \o/ . 



İyiki katıldım diyebildiğim çalışmalardan biri oldu. Bu geliştiricilerle çalışma fırsatını yakalayabilmem süperdi. Çok yoğun ve oldukça eğlendiğim bir  etkinlikti. Ayrıca Akademik Bilişim'de Atölyeden tanıdığım arkadaşları da görmek harikaydı. Başta +Necdet hocama, etkinliğe ev sahipliği yapan TÜBİTAK-ULAKBİM'e ve Muhammet Kara, Gökhan Gurbetoğlu'na, çok uzaklardan gelen Michael Meeks, Marcus Mohrhard ve Jan-Marek Glogowski'ye çok teşekkür ederim. 

Etkinlikte bir de badge kazanmışım, onu da şuraya bırakıyorum :)




20 Şubat 2016 Cumartesi

İlk Dönemin Ardından

Merhabalar, dolu dolu geçen bir dönemin ardından bir geniş özet yapayım dedim. Şuan bilgisayar mühendisliği 3.sınıf öğrencisiyim. Önce ki yazılarımda da bahsettiğim üzere bu dönemin başından beri Libreoffice'e katkı veriyorum. Libreoffice dahilinde dönem boyunca bir çok hata avcılığı ve etkinliklere katıldım. Biraz bahsedeyim.

GDG Devfest İstanbul 2015 


 Bu dönem ilk katıldığım etkinlik devfest Istanbul oldu. Google Developer Groups tarafından organize edilen ve yazılım dünyasının prestijli konferanslarından biri olan DevFest, her sene yazılım geliştiricileri bir araya getirmeye devam ediyor. Bu sene bende bir sunum yaptım.

Ben, Gülşah Köse, Kader Tarlan ve Aybüke Özdemir sunumumuzda, Libreoffice'e katkı sürecini ve Çanakkale'de çalıştığımız ekip ile şimdiye kadar neler yaptıklarımızı anlattık. Slaytımıza buradan ulaşabilirsiniz. Bu benim ilk konuşma deneyimim oldu ve oldukça keyif aldım.

 

Balıkesir Özgür Yazılım Özgür Toplum Semineri


+Necdet Yücel Hocam, +aybukeozdemir ve +Gülşah Köse ile birlikte Baubit'in (Balıkesir Üniversitesi Bilişim Topluluğu) misafiri olduk. Seminerin ilk kısmında Necdet Hoca, özgür yazılımın ne olduğunu, özgür olmayan yazılımları kullanarak hangi yolu tercih ettiğimizi, neden özgür yazılımın kullanılması gerektiği anlattı.

İkinci bölümde ise Aybüke ve Gülşah ile birlikte, sene içinde çalıştığımız ekiple Libreoffice nasıl katkı verdiğimizi, hangi araçları kullandığımızı ve şimdiye kadar neler ürettiğimizi anlattık. Yine çok keyif aldığım bir etkinlik oldu. Yeni insanlarla tanışmak, güzel sohbetler etmek oldukça mutluluk vericiydi. Bizi misafir eden Baubit de ekibine teşekkür ederim.




Packathon


Packathon 23 Ocak'ta Bahçeşehir Üniversitesi'nde gerçekleşti. Biz de Kripton'dan kalabalık bir ekiple orada yerimizi aldık. Etkinlik süresince takım olarak ya da tek kişi herkes ortaya bir ürün koymaya çalıştı. Yalnızca takımların oy verebildiği bir uygulama ile gün sonunda en çok oyu alan ilk 3 ekip ödüllendirildi. Etkinlik sonunda 4.olan ekip olduğumuzu öğrendik. Ekip olarak çalışmak oldukça keyif veriyor. Bütün gün Libreoffice için çalıştık. Bir çok yeni bilgi edindim. Çokça eğlendiğim bir gün oldu.

 

Akademik Bilişim 2016 LibreOffice Geliştirme Atölyesi 


18.'si düzenlenen Akademik Bilişim, bu yıl Aydın Adnan Menderes Üniversitesi'nde yapıldı. Konferans öncesinde 4 gün süren 34 farklı konuda eğitim verildi.

Bu eğitimlerden biri de "LibreOffice Geliştirme Atölyesi"ydi. +Gülşah Köse, +Berk Güreken ve  +aybukeozdemir ile birlikte 4 gün boyunca katılımcıların LibreOffice için yama yollama süreçlerine yardımcı olmaya çalıştık. Katılımcıların çoğunluğunu Çanakkale'de birlikte çalıştığımız ekip oluşturuyordu. Eğitim boyunca yolladığımız 14 yama LibreOffice core deposuna alındı. Yeni bir şey üretmek kadar keyif veren bir şey yok. Çok verimli 4 gün geçirdim.

Eğitimlerden sonra gerçekleşen konferanslar ise 3 gün sürdü. Konferans konuları için ayrıntılı incelemeyi buradan yapabilirsiniz. Konferanslar, +Mustafa Akgul Hoca'nın giriş konuşmasıyla başladı. Akgül Hoca, Akademik Bilişim etkinliğinin nasıl başladığını, bu zamana kadar ne kadar yol katedildiğini anlattı.3 gün boyunca farklı oturumlara katıldım. Her birinde yeni bir şey öğrendim. Yoğun ve öğretici 3 gün içinde Kripton ekibi olarak bizim de 3 seminerimiz oldu.



- Kadınlar İçin Özgür Yazılım Fırsatları
- Uluslararası Bir Özgür Yazılım Projesine Dahil Olmak
- Türkiye’de LibreOffice Geliştirme ve Yerelleştirme Çalışmaları

Uluslararası Bir Özgür Yazılım Projesine Dahil Olmak hakkında +Necdet Yücel Hocam ile birlikte konuştuk. Katılım oldukça iyiydi. Etkileşimli olarak soru-cevap şeklinde bir kısımda yaptık en sonunda. Sunuma şuradan ulaşabilirsiniz.

Bölüme başladığımdan beri yaşadığım en yoğun dönemdi. Büyük bir ekiple çalışıyor olmak harika. Süper bir ekibim ve süper bir hocam var. Çalışmalarımı her seferinde arttırmak ilk hedefim oluyor hep. Henüz 3.sınıfın başındayken bu gibi etkinliklere dahil olduğuma çok memnunum. Uğraştığım işi, okulumu, ekibimi çok seviyorum. Dilerim yeni başarı hikayeleriyle dolsun bu blog. Görüşmek üzere :)