YunoHost'a Let's Encrypt kullanarak HTTPS desteği eklemek.

YunoHost benim de kullandığım ve insanların kendi sunucularında web servisleri sunmalarını çok kolay hale getiren oldukça güzide bir özgür yazılım çözümü. Kullanalım, kullandıralım. Kullandıralım demişken sağda solda öven, hatta hakkında sunum yapmış biri olarak günümüzde internette mahremiyetin en temel öğelerinden biri olan HTTPS desteğinin YunoHost üzerinde nasıl sağlandığına dair bir belge hazırlamak istedim. İngilizce ve Fransızca olarak şu adreste mevcut yazarken bu kaynaklardan ben de faydalanacağım.

Bu dönemde özellikle de self hosting ile ilgilenen birine HTTPS'in neden önemli olduğunu anlatmak ise ukalalık olur. Ancak ola ki bilmeyen biri okursa diye ufak bir açıklama yapmakta fayda var. HTTPS en basit haliyle sizin kullandığınız servisle aranızdaki web trafiğini şifreleyen bir protokol. Böylece kullanıcı adı ve parolalarınızı, alışveriş yapıyorsanız kredi kartı bilgilerinizi, hatta o web sitede ne yaptığınızı dahi kötü niyetli kişilerden saklamanıza yardımcı olur. Ek olarak bir sitede ne yaptığınız görülemediği için o sitenin kısmi sansüre uygulamasının da önüne geçiyor. Prestij kaybını umursayan ülkeler için caydırıcı olsa da Türkiye'de devlet genelde bunu yapamayınca siteleri komple engelliyor ama teknoloji de bir yere kadar.

Normalde HTTPS desteği sunabilmek için o sunucunun bir sertifikası olması gerekiyor. Bu sertifikayı kendimiz de oluşturabiliriz ancak tarayıcıların bunu güvenli kabul edebilmesi için sertifika otoritesi (CA) adı verilen kurumlar tarafından onaylanması gerekiyor. Bu manuel ve biraz uğraştıran bir süreç. Bunu kolaylaştırıp otomatize etmek için son zamanlarda geliştirilen Let's Encrypt adında şahane bir proje var. Bunu kullanarak YunoHost sunucunuza nasıl HTTPS desteği ekleyebileceğinizi anlatmaya çalışacağım.

Başlamadan önce sisteminizin güncel durumda olduğundan emin olmakta fayda var.
İlk olarak Let's Encrypt yazılımını indirelim.
git clone https://github.com/letsencrypt/letsencrypt
Daha sonra indirdiğimiz klasörün içinde kurulum betiğini çalıştırmamız gerekiyor.
./letsencrypt-auto --help
Kurulumun bir kaç dakikadan fazla sürmemesi lazım.

Let's Encrypt sertifika almaya çalıştığınız alanadının sizde olduğundan emin olmak için sunucunuza bazı dosyalar ekleyip bunlara kendi sunucuları üzerinden ulaşmaya çalışıyor. Bunu yapabilmek için nginx'e bazı ayarlar yapmak gerekiyor. YunoHost'a rastgele bir url girdiğimizde bizi dashboard'a yönlendirdiği için bu url için yönlendirmeyi kapatmamız gerekecek.

Nginx ayar dosyaları /etc/nginx/conf.d/DOMAIN.d/ altında oluyor buraya letsencrypt.conf gibi bir dosya yaratarak aşağıdaki komutları yerleştirmemiz gerekiyor.

location '/.well-known/acme-challenge' {
    default_type "text/plain";
    root        /tmp/letsencrypt-auto;
}

Kontrol için seçtiğimiz /tmp/letsencrypt-auto konumunu mkdir -p /tmp/letsencrypt-auto ile yaratmayı unutmamamız gerekiyor.
Yönlendirmeyi kapatmak içinse /etc/ssowat/conf.json.persistent dosyasının içine { } arasına alttaki bloğu eklemek gerekiyor.

"unprotected_urls" : [
    "DOMAIN/.well-known/acme-challenge"
]

Eğer burada daha önceden eklenmiş bir girdi varsa onun sonuna virgül eklemeyi unutmayın sonuç örneğin şu şekilde olmalı.

{
    "redirected_urls": {
        "ucyediyedi.me/": "ucyediyedi.me/blog/"
    },
    "unprotected_urls" : [
        "ucyediyedi.me/.well-known/acme-challenge"
    ]
}

Şimdi nginx'i tekrar başlatmamız gerekiyor (service nginx restart) ancak sonradan uğraşmamak için başlatmadan önce ayarları nginx -t ile kontrol edebiliriz.

Sonra herhangi bir konumda letsencrypt için bir config dosyası yaratmamız gerekiyor. Mesela bu konum /etc/letsencrypt/conf.ini olsun.

rsa-key-size = 4096

email = yonetici@DOMAIN

text = True
agree-tos = True

authenticator = webroot
webroot-path = /tmp/letsencrypt-auto

Sertifikayı oluşturmak için letsencrypt'i indirdiğimiz klasörde aşağıdaki komutları çalışmamız yeterli.

export DOMAINS="-d yourDomain.tld"
./letsencrypt-auto certonly --config /etc/letsencrypt/conf.ini $DOMAINS

Sertifikamız /etc/letsencrypt/live/ dizinin içinde oluşturuldu. Sertifikamızı başka bir yolla edinseydik onu YunoHost'un istediği bir dizine /etc/yunohost/certs/DOMAIN koymamız yetecekti. Şimdi ise kolaylık olsun diye oluşturduğumuz sertifikanın kısayolunu buraya ekleyeceğiz.

mkdir /etc/yunohost/certs/DOMAIN
cd    /etc/yunohost/certs/DOMAIN
ln -s /etc/letsencrypt/live/DOMAIN/fullchain.pem ./crt.pem
ln -s /etc/letsencrypt/live/DOMAIN/privkey.pem ./key.pem

nginx'i tekrar başlattığımızda sitemizde artık HTTPS desteği olduğunu görebiliriz.

nginx -t
service nginx restart

Let's Encrypt sertifikalarının 90 gün ömürleri var. Yenilerini oluşturmak için düzenli çalışan görevler hazırlayabiliriz. YunoHost aşağıdaki yöntemi önermiş.

  • EMAIL_ALERT_TO ve EMAIL_ALERT_FROM kısımlarınıza kendi eposta adreslerinizi yazın
  • LEBIN kısmındaki adresi letsencrypt'in olduğu dizin ile değiştirin.

Ancak bu komutları çalıştırmadan önce certificateRenewer dosyasında yukarıdaki değişiklikleri yapmanız gerekeceğini unutmayın.

wget  https://raw.githubusercontent.com/alexAubin/letsencrypt_ynh/131a7071faea0f1374faf04784024e7cab69703a/sources/certificateRenewer
chmod +x certificateRenewer
mv       certificateRenewer /etc/cron.weekly

Eğer elle sertifika yaratmak isterseniz aşağıdaki komutu kullanmak isteyebilirsiniz.

/etc/cron.weekly/certificateRenewer

İşlemimiz bu kadar. Umarım faydalı olmuştur.

Underrated Anime Övmece Bölüm 2

Bu yazının ilk bölümüne bu adresten ulaşabilirsiniz.

Bu sefer anlatacağım animelerin sıralarını kontrol ettiğimde ilk 500'de 2 tanesinin (ikisi de 400'lerde), gerisinin de sıralamada daha gerilerde olduğunu fark etttim. İlk yazıda olduğu gibi sıralama herhangi bir beğeni sırasına göre değil de alfabetik olacak.
Not: Yazıları bu animeleri tartışmak için değil de insanlar bu animeleri izlesinler istediğimden yazdığım için sevdiğim tüm yönleriyle burada anlatamadığımı not düşmek isterim.

Flag

Tür: Bilmiyorum (belki Savaş ?) Uzunluk: 13 Bölüm

Flag oldukça özgün bir anime. Herhangi bir türe doğrudan dahil edilebilir mi emin değilim. Hikaye Asya'da hali hazırda iç savaş içerisinde olan kurmaca bir ülke olan Uddiyana'da geçiyor. Bölgede foto-muhabirlik yapmakta olan ana karakterimiz Saeko Shirasu'nun çektiği bir bayrak fotoğrafı viral bir şekilde yayılır ve ülkedeki barış isteğinin bir sembolü haline gelir. Birleşmiş Milletler bu rüzgarı kullanarak meşhur bayrağının altında ateşkes anlaşması imzalatmak niyetindedir. Ancak bayrak çalınır ve ellerinde prototip mecha'lar da olan Birleşmiş Milletler Özel Kuvvetleri (SDC) bayrağı geri almakla görevlendirilir. Bayrağın sembolik değerini arttırmak için en başta bayrağı meşhur eden Shirasu'dan operasyonu kaydetmesi istenir. Diğer ana karakterimiz Shirasu'nun kameraman senpai'i olan Keiichi Akagi ise paralelden bize ülkenin durumunu ve Shirasu SDC ile beraberken olan biteni anlatır.
Animenin en enteresan noktası ise her şeyi bir kameranın lensinden görüyor olmamız, bu genelde Shirasu ve Akagi'nin kameralarıyken, yer yer helikopter ve mecha kameraları oluyor. Ana karakteri pek fazla görememem (hikayeyi genelde onun kamerasından izlediğimiz için) onla bağ kurmamı biraz zorlaştırsa da hikaye anlatımını ilginç ve bu anime için daha güçlü kılıyor. Bir animenin bir savaşı gazetecilerin gözünden anlatması yeterince ilginçken, anlatının bunu propagandaya kaymadan yapabilmesi animeyi daha da güzelleştiriyor. Temposu biraz yavaş ama sıkmıyor. Özellikle fotoğrafçılıkla ilgilenenlere tavsiye ederim.

Haibane Renmei

Tür: Fantastik / Slice of Life Uzunluk: 13 Bölüm

Haibane Renmei'in de kendine has bir anime olduğunu söyleyebilirim. Hikaye etrafı tamamen çok yüksek bir duvarla örülmüş, arada sırada gelen tüccarlar haricinde dış dünyadan izole Grie adlı bir köyde geçiyor. Olayları bu köyde kendi gettolarında yaşayan kanatları ve haleleri olan Haibane adlı bir halkın gözünden izliyoruz. Haibane'ler çeşitli yaşlarda hafızaları olmadan kozalarda doğuyorlar ve isimlerini kozalarda gördükleri rüyalardan alıyorlar. Karakterlerimiz yeni doğan bir Haibane olan Rakka ve etrafındaki diğer Haibanelerden oluşuyor.
Animenin temposu biraz yavaş olsa da anlatımı ve karakterlerin arasındaki iletişim çok başarılı. Ancak izlediğim herhangi bir diziden beklentilerim ondan aldığım zevki etkilediği için bu yazıyı okuyacak diğer insanlara çok ufak bir spoiler karşılığında bir uyarıda bulunmak istiyorum. Anime pek çok şeyi izleyicinin hayal gücüne bırakıyor. O dünyada işlerin nasıl işlediğini anlatıyor ama nedenlerine neredeyse hiç değinmiyor. Animenin finali oldukça başarılı olsa da eğer o dünya ile ilgili daha fazla şey bilmek isteyenleri biraz hayal kırıklığına uğratıyor. Benzer temalı Angel Beats gibi animeden durumu tamamen bilerek ayrılamıyorsunuz. Bunla bir derdiniz yoksa bence Haibane Renmei'i beğeneceksiniz.

Sidonia no Kishi (Knights of Sidonia)

Tür: Space Opera / Mecha Uzunluk: 2 sezon 24 bölüm

Animeleri dizilerle karşılaştırmak genel anlamda pek doğru olmasa da Battlestar Galactica'nın anime versiyonu demeye en yakın serinin Sidonia no Kishi olduğunu söyleyebilirim. Anime, Dünya Gauna denilen uzaylı bir ırk tarafından yok edildikten sonra kalan insanların yaşadığı Sidonia adlı bir uzay gemisinde geçiyor. Hikayeyi de Sidonia'nın savunma gücü olan Gardes pilotları üzerinden izliyoruz. Ana karakterlerimiz, dedesiyle beraber tüm hayatı boyunca geminin ücra bir köşesinde yaşamış ancak dedesi öldükten bir süre sonra yiyecek bulmak için gemiyi ararken yakalarak askere alınan Nagate Tanikaze ve tanıştığı diğer Gardes pilot adayları Shizuka Hoshijiro ve Izana Shinatose'den oluşuyor. İlginç noktalardan biri Shinatose'nin bedeni partnerine göre şekillenen intersex bir insan olması. Bu yeni bir fikir sayılmasa (özellikle Le Guin'in , Left Hand of Darkness'ı yazdığında senenin 1969 olduğunu düşünürsek) da bir animede görmek hoşuma gitti.
Sidonia no Kishi, Battlestar Galactica'nın felsefi, sosyo-politik derinliğine onun yarı sezonu kadar sürede erişmesi mümkün değil ama inşa ettiği evrendeki temaların toplum üzerindeki etkilerine değinmeyi es de geçmiyor. Anime hakkında söylenecek enteresan şeylerden bir tanesi de animasyonun çizim yerine CGI ile yapılmış olması. En başta biraz garipsesem de genel olarak CGI'ı iyi kotarmışlar ve ortaya bu animeye has bir estetik çıkmış. Sidonia no Kishi söylediklerim ve burada anlatamayacağım (River ablamızın dediği gibi "Spoilers") sebeplerden dolayı beni oldukça etkileyen animelerden biri oldu, herkese ve özellikle türün meraklılarına kesinlikle önerebilirim. Ufak bir uyarı, burada önerdiğim diğer animelerin aksine hikaye tamamlanmış değil. İleride 3. bir sezon gelebilir.

So Ra No Wo To (Sound of the Sky)

Tür: Cute girls doing stuff Uzunluk: 12 Bölüm

So Ra No Wo To karakterleri ve teması türünün herhangi bir üyesinden pek farklı olmasa da worldbuilding'i oldukça başarılı bir şekilde yapan ve beni kurduğu dünyanın güzelliği ile şaşırtan bir anime oldu. Hikaye post apokaliptik bir dünyanın üzerinde tekrar inşa edilmiş Helvetia adı verilen bir ülkede geçiyor. Bunu da ufak detaylar üzerinden anlıyoruz, mesela artık Latin alfabesi kullanıp, kanjiden bugün hiyerogliflerden nasıl bahsediyorsak benzer bir şekilde bahsediyorlar, iletişim olanakları kısıtlı olduğu için askerler trampet kullanarak haberleşiyorlar ama ortalıkta mechalar var vs.
Helvetia komşu olan Roma İmparatorluğu ile savaş halinde. Hikaye ateşkes döneminde askere yazılan 15 yaşındaki Kanata Sorami üzerinden anlatılıyor. Kanata savaş döneminde çocukken kendisini kurtaran askerlerden birinin trampetini duymasıyla beraber müziğe aşık oluyor ve büyüyünce onun gibi çalabilmek için askere yazılmaya karar veriyor. Kanata, çölün kenarında bir sınır kasabasının garnizonu olan ama aslında sadece 5 genç kadından (Kanata dahil) oluşan 1121'inci birliğe atanıyor ve burada askeriyeye nazaran daha rahat geçen yaşamlarını izlemeye başlıyoruz. Diğer karakterler ise üste rütbelerin kullanılmasını istemeyecek kadar rahat Teğmen Filicia Heideman, Kanata'nın mentor'u olacak Başçavuş Rio Kazumiya, üssün tamircisi Onbaşı Noel Kannagi ve Kanata'yı rakibi olarak görecek Kureha Suminoya'dan oluşuyor. Anime başta klişe gibi gözükmesine rağmen dünyasını çok güzel kuruyor ve bu kurguyu olay örgüsüne başarıyla dahil ediyor. Bu türle herhangi bir derdi olmayan herkesin beğenebileceğini düşünüyorum.

Biraz da underrated anime öveyim.

Anime ile tanışıklığım 3-4 yıldan öteye gitmese de bir süredir beğenerek takip ettiğim medium'lardan biri oldu. Özellikle kendine has türleri, anlatım tarzı ve trope'larıyla benim için aslında orada olduğunun farkında bile olmadığım bir boşluğu doldurduğunu fark ettim. Yeni seriler seçerken internette takip ettiğim anime topluluklarındaki tavsiyelere ve uyarılara dikkat ediyorum. Ayrıca anime medium'unun da imdb gibi bir kaynağı mevcut ve bunu da aktif olarak kullanmaya çalışıyorum.

Onca insan içerisinde benim meşhur animelerden bahsetmemin bir anlamı olmadığını göz önüne alarak pek bilinmediğini ve hakkının yeterince verilmediğini düşündüğüm (ecnebinin underrated dediği) animelerden bahsetmek istiyorum. Bazen underrated olduğunu düşündüğünüz eserler epey popülerdir ya aynı durum yaşanmasın diye myanimelist'ten kontrol ettim. 2-3 tanesi hariç ilk 1000 içerisinde bile değiller, o geri kalan 2-3 tanesi bile ilk 500 içerisinde değil.

Ola ki hali hazırda anime izlemeyi sevmeyen biri okursa diye bu türü anlamak için anime 101 tadında da o türü hiç izlememiş birinin anlamak için ilk önce izlemesi gerektiğini düşündüğüm tavsiyeler yapmaya çalışacağım. Diziliş ise herhangi bir beğeni sırasına değil alfabetik olacak.

Area no Kishi (Knight in the Area)

Tür: Spor (101: Haikyuu) Uzunluk: 37 Bölüm

Anime izlerken beni epey şaşırtan bir şey özellikle son bir kaç senedir sporla pek alakası olmayan biri olarak spor animelerini epey sevmem oldu. Area no Kishi de bir futbol animesi ve epeydir süren mangasının başından itibaren bir kısmını anlatıyor. Spor animelerinin pek çoğunda olduğu gibi bir lisenin takımını konu alıyor. Hikayeyi abisi Japonya'nın en yetenekli genç oyuncusu adledilen Kakeru Aizawa ve Amerika'dan yeni dönen çocukluk arkadaşı Nana (Seven) Mishima üzerinden izliyoruz.
Burada Seven için bir paragraf açmak istiyorum çünkü spor animelerinin kadın karakterlerine olan yaklaşımı genelde epey sorunluyken burada Seven karakterinin işlenişini beğendim. İzlediğim spor animeleri arasında belki de en iyisi olduğunu söyleyebilirim. Benzer bir şeyi hikayeye sonradan katılacak Mai Murasaki için de söyleyebilirim. Bu ikilinin seri boyunca devam eden ana karakterlerden bağımsız kendi hikaye arc'larına sahip olmaları ise özellikle kadınları konu alan spor animelerinin yokluğunda güzel bir değişiklik olarak hissediliyor.
Area no Kishi başarılı karakterlere sahip, fan service düzeyi kısıtlı olan ve futbolu veya spor animelerini sevenlerin beğenebileceği bir anime.

Giant Killing

Tür: Spor Uzunluk: 26 Bölüm

Giant Killing de bir futbol animesi ve epeydir süren mangasının başından itibaren bir kısmını anlatıyor. Alfabetik sıra sağ olsun iki futbol animesi peş peşe geldi. Giant Killing izlediğim en özel spor animelerinden birisi, öncelikle türdeşlerinden en büyük farkı ise profesyonel bir futbol takımını anlatması.
Animeyi artık eski günlerinden çok uzak, geçen sene ikinci lige düşmekten güç bela kurtulmuş East Tokyo United üzerinden izliyoruz. Hikaye bir türlü istediği başarıyı yakalayamayan ve sürekli teknik direktör değiştiren ETU'nun başına takımın eski yıldızı ve aynı zamanda ana karakterimiz Takeshi Tatsumi'nin getirilmesiyle başlıyor. Oyuncuların ve taraftarın bir kısmı Tatsumi'nin gelişini, onun geçmişte ayrılarak takıma ihanet ettiğini düşünerek istemezken, eski taraftarların bazıları ise kahramanlarının geri dönüşüyle tekrar futbolla ilgilenmeye başlıyorlar. Futbolu yönetimiyle, oyuncularıyla, taraftarlarıyla bir bütün olarak ele alarak anlatıyor olmasını da çok beğendim.
Giant Killing futbola karşı muhteşem bir sevgi gösterisi ve futbol severlerin bence kesinlikle kaçırmaması gereken bir anime.

Girls und Panzer

Tür: Cute girls doing stuff (101: K-On) Uzunluk: 12 Bölüm + Film

Genç kızların hayatlarını ele alan animelerin sayısı epey fazla. Bu Batı menşeili eserlerde pek rastlamadığımız bir durum ve İngilizce'de bunu genel olarak cute girls doing stuff olarak özetliyorlar ve duruma göre farklı farklı türlerde boy gösterebiliyorlar. Bu tarz animeleri izlemek bana çeşitli sebeplerle ilginç geliyor. Yalnız anime medium'unun bu tarzın işlenmesi hususunda karanlık bir tarafı var. Bu tarafın benim suratımda patladığı oldu.
Animemize gelecek olursak Girls und Panzer aslında spor animelerinin trope'larıyla ilerleyen ama bunu gayet enteresan bir şekilde sencha-do denilen takımların İkinci Dünya Savaşı'nda kullanılan tanklarla savaştığı kurmaca bir spor üzerinden yapan bir anime. Absürt ama güzel işlenen bir teması var. Japonları saçma premise'lerden harika işler çıkarabilmeleri ayrıca takdire şayan bir mesele.
Hikayemiz özetle bir sporda başarılı olan ama o spordan bir sebepten soğuyan ana karakterimizin bu sporu yeni bir ortamda, yeni insanlarla tekrar sevmesi. Bu tema ilginizi çekiyorsa meşhur basketbol animesi Kuroko no Basket'i de izleyebilirsiniz (basketbolu ele alışı gerçekçi değil eğer bunu sorun etmeyecekseniz epey güzel).
Animeyi hikayenin en başarılı sencha-do akademisinin sahibinin kızı Miho Nishizumi gözünden izliyoruz. Bahsetiğim gibi ailesinin sencha-do anlayışından hoşlanmayan Miho bu sporun oynanmadığı bir okula gider ancak o okulda o spor o sene tekrar başlayacaktır. Anime Miho'nun okulunun başka okullarla (diğer okulları kullandıkları tankların ülkeleri üzerinden kurmuşlar. Ülke steryotipleri iyi yapılmış, pek sinir bozmuyor.) yaptığı maçlar üzerinden ilerliyor.
Merak edenler için minimal düzeyde şiddet içeriyor, mesela vurulan tankların bir kenarından beyaz bayrak fırlıyor. Anime boyunca zarar gören bir karakter hatırlamıyorum.
Anime aslında tipik bir underdog hikayesi ama karakterlerimizin nasıl kazanabildikleri konusunda ikna edici cevaplarda verebiliyor. Herkese tavsiye edebilirim. İzler de beğenirseniz devam filmini de mutlaka izleyin.

Senjou no Valkyria (Valkyria Chronicles)

Tür: Savaş (101: Legend of Galactic Heroes) Uzunluk: 26

Valkyria Chronicles epey farklı olarak bir oyundan uyarlanmış bir anime. Anime'yi çok beğenince oyununu da bir indirim zamanı aldım. Oyun bir tur tabanlı strateji 2008 için epey başarılı olabilir ama sıra tabanlı strateji konusunda XCOM çıtayı yükselttiğinden dolayı pek beğenemedim. Hikayeyi de anime daha güzel anlattığı için oyunu bence es geçilebilir.
Anime, İmparatorluk ve Federasyon diye iki büyük ülkenin savaşta olduğu 30-40'ların teknolojisine sahip hayali bir Avrupa'da geçiyor. Hikayeyi ise ufak tarafsız bir ülke olan Gallia'da yaşayan Welkin Gunther ve Alicia Melchiott üzerinden izliyoruz. Babası bir savaş kahramanı olan Welkin, askerlikte gözü olmayan doğa düşkünü bir biyoloji öğrencisidir. Alicia ise boş zamanlarında köyünün milis gücünde görev alan bir fırıncıdır. Gallia kaynakları için İmparatorluk tarafından işgal edilir ve tahmin edebileceğiniz üzere işgal Welkin ve Alicia'nın köyünden başlar. Askere yazılan ikilimiz bir kendilerini milis güçlerinin 7. timinin başında Teğmen Gunther ve Çavuş Malchiott olarak bulurlar.
Benim burada çok beğendiğim noktalardan biri savaşı işleyişi oldu. Anime ton olarak çok ciddi değil ama savaş, ırkçılık (Welkin'in aşağı görülen ırktan olan üvey kardeşi üzerinden) gibi sorunları hafife almadan anlatmaya çalışıyor.
Başta söylediğim gibi animeyi ben çok beğenmiştim. Hikayesi güzel, karekterleri başarılı, temasını düzgün ele alıyor. Savaş temasından rahatsız olmuyorsanız kesinlikle tavsiye ederim.

Yazının ikinci bölümüne bu adresten ulaşabilirsiniz.

Beamer ve Latex ile Sunum Hazırlamak

Bir itirafta bulunayım, ofis programlarını pek sevmiyorum. Özellikle her sunum hazırlamaya kalkışım bir noktada Impress ile boğuşmam ile sonuçlanıyor. Bu sebepten ötürü alternatif sunum hazırlama yollarını mümkün oldukça denemeye çalışıyorum. Reveal.js'le sunum yapmışlığım var, impress.js'i kurcaladım ama özel mülk babasını (Prezi) sevmezdim zaten. Latex ile sunum yapanlara da özenmiyor değilim.

Latex'i pratikte pek kullanmışlığım olmasa(bir kere Alternatif Bilişim'in bastırdığı bir broşürü Latex'e geçirmiştim) da çok yabancı olduğum bir dil değil. Ama bir sebepten ötürü Latex'le bir sunum hazırlamaya kalkıştım ve hem kendim hem ilgilenebilecek başkaları için öğrendiklerimi not almak istedim.

Pek çok programlama ortamında Latex için türlü türlü plugin var ancak ben başlangıç olarak bir Latex editörüyle başlamaya karar verdim ve kullandığım DE olan KDE'nin Kile aracını indirdim. İsteyen daha meşhur alternatifi texmaker'ı (ki diğer işletim sistemlerinde de çalışıyor) deneyebilir.

Sunum hazırlamak için gereken paketin ismi "beamer" ama editörü kurarken bağımlılıklarla gelmiş. Debian tabanlı dağıtımlarda ismi "latex-beamer".

Kullanmak için dosyanın başına şunları yazmak yeterli.

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usetheme{default}
\usecolortheme{default}

Burada ikinci komut encodingi utf8 olarak ayarlayarak Türkçe karekter kullanabilmemizi sağlıyor.
Burada üçüncü ve dördüncü komut takdir edersiniz ki temayı seçmenize yarıyor. Temalara bir göz atmak isterseniz şuraya bakabilirisiniz.

Buradan sonra sunuma başlamadan önce başlık bilgilerini vermek gerekiyor. Bunları daha sonra kullanacağız.

\title{Bir şey}
\subtitle{Alt bir şey}
\author{Uğurcan Ergün}

ve en sonunda sunumumuza

\begin{document}
\end{document}

şeklinde başlıyoruz.

Latex Türkçe klavye için biraz eziyet bir dil çok fazla AltGr+Birşey kombinasyonu gerektiyor. Ben US tuş dizimi kullanmakla rahat ettim uyarmadı demeyin.

Bir slayt ise şu şekilde ekleniyor.

\begin{frame}{başlık}{alt başlık}
    % Çaktırmadan yüzde de comment karekteri
\end{frame}

Giriş slaytı için biraz farklı bir şekilde şunu yapıyoruz daha önce yukarıda girdiğimiz bilgileri kullanıyor.

\begin{frame}
    \titlepage
\end{frame}

Bu frame bloklari içerisinde Latex'de geçerli istediğimiz her şeyi yapabiliyoruz.
Örneğin alışık olduğumuz liste usulü sunum için aşağıdaki bloğu kullanabiliriz.

\begin{itemize}
    \item Bir şey
    \item Başka bir şey
\end{itemize}

Bunların numaralı olmasını istersek "itemize" yerine "enumerate" yazmamız yeterli. Ben Impress'te listeye alt eleman eklemeyi çok kullanıyorum. Burada o nested bir "itemize" bloğu ekleyerek yapılıyormuş. Eğer bunları sırayla görüntülemek veya görünlenme sırası ile oynamak istiyorsak aşağıdakini de kullabiliriz.

\begin{itemize}
    \item<1-> Bir şey
    \item<2-> Başka bir şey
\end{itemize}

Sayfada açıklama, teorem vs. göstermek istersek aşağıdakini kullanabiliriz.

\begin{block}{başlık}
\end{block}

Sayfayı sütünlara bölmek istersek aşağıdakini kullanabiliriz.

\begin{columns}
    \column{0.5\textwidth}
    \column{0.5\textwidth}
\end{columns}

"\textwidth" değerini 0.5 verince ekranı ortadan ikiye bölmüş oldum. Üçe bölmek için üç tane 0.3 sütun da kullanabilirdik. Dikkat ederseniz "\begin{column}" gibi bir şey yapmıyoruz dolayısıyla kapanış blokları yok.

Fotoğraf eklemek için

\includegraphics{foto.png} % yeterli
\includegraphics[height=1cm, width=1cm]{foto.png}

Fotoğrafın varsayılan haliyle pek güzel gözükmediği için elle yükseklik, genişlik gibi değerler vermek durumunda kaldım (kolayını bilen bana da anlatsın). Fotoğrafı ekrana ortalamak için "center" bloğu ve eğer altına not eklemek istersek "figure" bloğu kullanabiliriz. Pratikte fotoğraf ekleme şöyle bir şeye denk gelebiliyor.

\begin{figure}
  \begin{center}
    \includegraphics[height=5cm, width=6cm]{foto.png}
      ~\footnote{Figür 1}
  \end{center}
\end{figure}

Latex'in en civcivli yeri matematik desteği. Impress'te matematiksel bir şey göstermek tam bir eziyet bir alt indis ekleyeceğim diye şunu yapmaktan bir yerim çatlıyor.

Format -> Character -> Position sekmesi -> Subscript

Bunu yeterınce yaptıktan sonra o özelliği araç çubuğuna koymak için de menülerde az aranmadım.

Latex'de matematik modunu (fark ettiğim kadarıyla) iki şekilde açabiliyoruz. "equatıon" bloğu veya "$" karekteri.
Alt indis "x_i" veya "x_{ij}"
üs alma "^" Kesir "\frac{x}{y}"
Yunan harfleri "\lambda", "\mu" vs.
Bir iki püf nokta eğer formül bir satırdan fazlaysa "align" bloğu kullanmak gerekiyor. Düz "align" iki satır denklemi 2 farklı denklem gibi algıladığı için "align" diyerek noktalamayı kapatıyor. Bir de matematik modunda boşlukları da escape'lemek gerekiyormuş.

Beamer 101 ile ilgili bunları öğrendim. Biraz verbose olsa da program yazar gibi sunum hazırlamak ofisle boğuşmaktan daha tanıdık. Umarım kullanmayı alışkanlık haline getirebilirim. Öğrenirken faydalı bulduğum birkaç kaynak da şunlar
Epey kapsamli bir user guide, Güzel bir başlangıç sunumu
Detaylıca bir sunum, Matematik ağırlıklı bir sunum, Matematik rehberi

GNU/Linux üzerinde elle ekran çözünürlüğü ayarlamak

Gözleri iyi görmeyen ve laptop ekranlarını 1366x768 üzerinde çözünürlüklerde görmekten zorlanan biri olarak imkanım varsa monitör kullanmayı tercih ediyorum. Ancak özellikle VGA kullanırken yaşadığım bir sorun var ve bunun çözümünü buraya yazmanın faydalı olacağını düşündüm. Bir monitörün desteklediği çözünürlükleri bilgisayara aktarmak VGA kablosunun yaptığı işlerden biri ancak bir şekilde bu veriyi iletemezse bilgisayar default bir çözünürlük listesi belirliyor. Burada genelde en yüksek çözünürlük 1024x768 oluyor. HD monitörleri bu çözünürlükte kullanmak hem bana hem monitöre eziyet.

Ancak bir GNU/Linux dağıtımı üzerinden herhangi bir monitörün çözünürlüğünü değiştirmek mümkün. Bu işlem xorg araçlarıyla yapılabildiği için hangi dağıtımın kullanıldığı önemli değil.

İlk olarak bağlı görüntü aygıtlarını ve çözünürlüklerini şöyle listeleyebiliyoruz.
argonauts@autonomists:~$ xrandr

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected (normal left inverted right x axis y axis)
  1366x768      60.10 +
  1360x768      59.80    59.96  
  1280x720      60.00  
  1024x768      60.00  
  1024x576      60.00  
  960x540       60.00  
  800x600       60.32    56.25  
  864x486       60.00  
  640x480       59.94  
  720x405       60.00  
  680x384       60.00  
  640x360       60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
VGA1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
  1024x768      60.00* 
  800x600       60.32    56.25  
  848x480       60.00  
  640x480       59.94  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Görüldüğü üzere bilgisayarımın VGA çıkışı 1024x768'den yüksek bir çözünürlük desteklemiyor gibi görünüyor. İstediğim bir çözünürlüğü tanımlayabilirim ancak o çözünürlük modeline denen bir formatta olmalı. Bu formatı internet aramasıyla bulmak mümkün ancak elde etmek için kullanbileceğimiz bir komut da var.

argonauts@autonomists:~$ cvt

usage: cvt [-v|--verbose] [-r|--reduced] X Y [refresh]

-v|--verbose : Warn about CVT standard adherance.
-r|--reduced : Create a mode with reduced blanking (default: normal blanking).
    X : Desired horizontal resolution (multiple of 8, required).
    Y : Desired vertical resolution (required).
  refresh : Desired refresh rate (default: 60.0Hz).

Calculates VESA CVT (Coordinated Video Timing) modelines for use with X.

Ben monitörüm için 1920x1080 tanımlamaya çalışıyorum o yüzden aşağıdaki komutu kullanabilirim.

argonauts@autonomists:~$ cvt 1920 1080
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

Bu modeline "1920x1080_60.00" isminde olmak zorunda değil basitlik için "1920x1080" olarak kullanmam da bir sakınca yok.

Bu çözünürlük tanımını şu komutu kullanarak yapabilirim.

argonauts@autonomists:~$ xrandr --newmode "1920x1080"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

Artik bilgisayarın 1920x1080 diye bir çözünürlüğün varlığından haberi olduğuna göre bu çözünürlüğü VGA için kullanılabilir hale getirmek için şu komutu kullanabilirim.

argonauts@autonomists:~$ xrandr --addmode VGA1 "1920x1080"

Şimdi tekrar çözünürlük listesine bakarsak 1920x1080'i orada görebiliriz.

argonauts@autonomists:~$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected (normal left inverted right x axis y axis)
  1366x768      60.10 +
  1360x768      59.80    59.96  
  1280x720      60.00  
  1024x768      60.00  
  1024x576      60.00  
  960x540       60.00  
  800x600       60.32    56.25  
  864x486       60.00  
  640x480       59.94  
  720x405       60.00  
  680x384       60.00  
  640x360       60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
VGA1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
  1024x768      60.00* 
  800x600       60.32    56.25  
  848x480       60.00  
  640x480       59.94  
  1920x1080     59.96  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Ne yazık ki bu çözürlüğü elle tanımladıktan sonra kullandığım DE olan KDE5'in çözünürlük ayarlarında bu seçeneği görmedim. Ama ekran çözünürlüğünü elle şu şekilde ayarlayabiliriz.

argonauts@autonomists:~$ xrandr --output VGA1 --mode "1920x1080"

Bu ayar bu haliyle persist etmiyor. Etmesini sağlamanın bir yolu vardır ama bulmaya çalışmadım. Bu işlemi bir kere yaptıktan sonra şu şekilde bir bash script haline getirmek kolayıma geldi.

xrandr --newmode "1920x1080"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode VGA1 "1920x1080"
xrandr --output VGA1 --mode "1920x1080"

"Bir çözünürlük ayarı için bunları mı yapacağım ? GNU/Linux çok rerörerö" (Özellikle siz Apple fanları) diye söylenmeden önce bunun dandik VGA kabloları için geçerli bir istisna olduğunu unutmayın.

Jsist 2014

Geçtiğimiz haftasonu(27-28 Eylül) webBox tarafından düzenlenen jsist'deydim. Etkinlik Nişantaşı'nda Koç Üniv. Amerikan Hastanesindeydi. Burada daha önce Türkiye'deki kod.io lardan birine gitmiştim. Single-track konferanslar için güzel bir mekan.

Kayıt olduktan sonra kahvaltı için çıktım. Daha ziyade aklımda kulak misafiri olduğum absürt diyaloglarla kaldı.

İlk sunum Mathias Bynens'den JavaScript ♥ Unicode'du. Ünicode'un genel yapısı, js'in bunu işleyişi, yanlış kullanılan encodinglerin nelere sebep olabileceklerine dair epey aydınlatıcıydı. Örneklerin çoğu U+1F4A9 karekteri (pile of poo) üzerinden verildiği için epey boktan muhabbet döndü diyebilirim :D

İkinci sunum Lena Reinhard'dan This is bigger than us: Building a future for Open Source idi. Bu daha javascript bağlamının dışında özgür yazılım/açık kaynağın geleceği/topluluklar/kültür/diversity konularını tartışan bir sunumdu. İyi hazırlanmıştı ve güzel sunuldu ancak pek derine inemediği/inemeyeceği (malum zaman kısıtı) konuya aşina olanlar için pek yeni sayılmazdı. Ancak takip etmemizi önerdiği alternatif mecralar benim sunumdan aldıklarım oldu. Kendisinden bu listeyi isteyince bana sunumu linkini yolladı. Emeğe saygı demek istiyorum, sunum notlarında bahsettiği olaylardan koyduğu resimlere kadar her şeyin referansı vardı ve neredeyse konuşmanın bütün transcripti oradaydı.
Yukarıda söylediğim mecraların listesi

Bunun yanı sıra Ashe Dryden, Julie Pagano, Shanley Kane gibi aktivistlerin gittip hesapları da vardı. Zira bu olaydan beri gittip kullanmadıklarını bildiğim için onları linklemedim.

Üçüncü sunum Armağan Amcalar'dan Scaling Node.js Applications with Redis, RabbitMQ and cote.js idi. Öncelikle bir şeyi scale etmek isterken işlerin back end'de nasıl yürüdüğünü ve temel problemleri biraz özetledi. Buna çözüm olarak dağıtık ve event-driven yapıları önerdi. Bunu node.js ile yapmanın yollarını anlatmaya başladı. Redis'i bir key-value store olarak değil de eventlerini kullanarak uygulamaları scale etmeye çalışması bana ilginç geldi. İkinci metod asenkron mesaj iletimi konusunda rüştünü ispatlamış RabbitMQ yönetilmesi gereken ayrı bir çözüm olması dışında epey başarılı olduğundan bahsetti. Üçüncü çözümü ise kendileri geliştirmişler Cote.js aynı ağda farklı servislerin birbirlerini otomatik bulup haberleşmelerini sağlayan bir framework. Bir uygulamanın farklı servislerinin mesh network'u andıran bir yapı kuruyor olmaları epey havalı. Umarım daha sonraki zamanlarda da adını duymaya devam ederiz.

Öğleden sonraki ilk sunum Üstün Özgür'den Getting Started with ClojureScript'ti fonksiyonel programlamaya ilgi duyan biri olarak cljs'i de duymuştum, özellikle merak ettiğim sunumlardan biriydi. Sunum ne gerek var (rationale) sorusundan başladı, kısaca clojure'ın kendisinden, lispten ve fonksiyonel programlamadan bahsetti. Değindiği noktalar arasında state yönetimi de vardı. Sonra cljs'i anlatmaya başladı. Clojure başka platformlara derleneceği bilinciyle yazıldığı için js ile interop'un kolay olduğunu söyledi ve ardından cljs'in nasıl çalıştığına biraz değindi. Web'de kullanılan Om (React.js kullanıyormuş arka tarafta) kütüphanesini anlattı. Clojure'un core.async teknolojisini anlatmaya zamanı yetmese de epey sağlam bir sunumdu.

Bundan sonra Yaprak Ayazoğlu'nun AngularJS Directives for D3JS: Enhancing the dynamic behavior of data visualization sunumuna ve Serdar Doğruyol'un Realtime MVC with Sails.js sunumuna girdim. Ne yazık ki sunumlar 15-20 dk sürdü ve basit şeylere değindiler, aklımda bu konuşmalarla ilgili pek bir şey kalmadı.

Sean Yu'nun Ember.js Framework sunumu ise firmalarından ve niye ember.js'i tercih ettiklerini anlatarak başladı. İlk önce backbone.js'i incelediklerini ancak backbone üzerine yazmaları gereken kodun fazlalığından dolayı angular veya ember'a yöneldiklerini buradan da ember'ı seçtikleri söyledi. Sonrasında ise ember.js'i nasıl kullandıklarından ve özellikle ember app kit'ten (şu an ember-cli adlı başka bir araç yazıldığı için deprecate olmuş) bahsetti.

İkinci gün Andy Hume'dan Scaling TweetDeck's Frontend ile başladı. Anahtar noktalar şunlardı. İnsanları yönetmek, karmaşıklığı yönetmenin bir parçası bu sebeple code review, iyi dökümantasyon, kod standartları vs. şeyler oldukça önemli. Kullandıkları teknoloji ise FlightJS'miş.

Sonraki sunum Pascal Precht'ten Componentize all the things! idi. Daha ziyade gelecek teknolojilerle ilgiliydi. Sunumda web components kısmını 4 teknoloji üzerinden anlattı HTML templates, shadow dom, custom elements, html imports. Hatta bahsettiği 4 konudan 3'ü şu an sadece WebKit tabanlı tarayıcılarda kullanılabiliyordu. HTML templates içeriği yüklemeden dom üzerinden element tutabilmemizi sağlıyor, epey kullanışlı gibi duruyor. Buna bütün modern browserların desteği varmış. Diğerleri ise yerel domlar oluşturabilme (shadow dom), custom html element yaratabilme ve html import edebilme üzerine. Bunları bir süre daha pek göremeyeceğiz zannediyorum zira WebKit haricinde desteklenmiyorlar. Web'in geleceğine yolculuk modunda epey iyi bir sunumdu.

Üçüncü sunum Mate Nadasdi'den It's never too late to fight your legacy! idi. Legacy kodu yenilemeye çalışırken yapılması gerekenleri daha genel bir formatta tarif etmesi epey faydalı oldu. Bunun yanı sıra kendileri Ustream'de kullandıkları teknolojilerden de bahsetti. Videolar çıktığında izlemenizi veya en azından slaytlara bakmanızı tavsiye ederim.

Öğleden sonra Sebastiano Armeli'den ES6: the future is now vardı. Javascript tarihinden biraz bahsettikten sonra ES6 ile gelecek (2015 ortasında çıkacakmış) özellikleri tanıttı. Js'e modern dillerden alıştığımız pek çok özelliğin gelmesi oldukça güzel. En çok beğenilen sunumlardan biriydi sanıyorum.

Data Visualization with Javascript'i merak ediyordum ancak iptal olmuş.

Murat Çorlu From Website to Webapp: Introducing SAFE adlı bir sunum yaptı. Sahibinden'deki farklı backendlerle çalışmanın front end tarafında çalışmanın çok zor olduğunu ve bunun onlara web sitesini bir uygulama gibi görmeye ittiğini anlattıktan sonra angularjs ile yazdıkları SAFE aracını anlattı.

Altan Yılmaz Mission Front-end adlı bir sunum yaptı. Kendisi sonraki panel için bağlam yaratmak adına ortaya bir takım sorular atmaya çalıştı ancak erken bitirmesi dolayısıyla pek etkili olamadı. Benim tepkilerden gördüğüm insanların verilmeye çalışılan mesajı pek anlamadılar. Ben sunumun amacını öncesinde Altan'dan duymamış olsaydım anlar mıydım bilmiyorum ?

Son panel ise son etkinlik olmasına rağmen epey güzeldi. Özellikle ilgimi çeken şey ise İngiltere Adalet Bakanlığı'nda çalışan Mehmet Duran'ın söyledikleri oldu. İngiliz hükümetinin bütün geliştirmeyi açık bir şekilden github üzerinden yaptığını söyledi. Özellikle halkın parasıyla yapılan bir çalışma halkın olmalı deyince epey alkış aldı. Bütün hükümet sitelerinde kullanıcıyı doğru yerde hissettirmek için benzer tasarımlar, patternler kullanıldığından bahsetti.

En son bütün konuşmaların özetlendiği mini bir tl;dr konuşması oldu. Böyle bir şey ilk defa görüyorum ama epey iyidi.

Konferansta şöyle yaygın bir şey yaşandı gerçi, Türk konuşmacıların pek çoğu sunumlarını çok erken bitirdi. Yabancı bir dilde sunum yapmaya pek alışık olmadıkları için ellerindeki içerik dışında pek doğaçlama yapamadılar diye tahmin ediyorum. Ben de ingilizce bir sunum yapmaya çalışacak olsam akıcı bir şekilde konuşacak kadar hızlı düşünemem sanıyorum. Bunu aşmak için yapabileceklerim arasında konuşmacılardan birinin de yaptığı gibi her slaytta söyleceğim şeyleri planlayarak yazmam olabilirdi sanıyorum.

Etkinlik bazı ufak kusurlara rağmen oldukça güzeldi. webBox'un konferans organizasyonlarını dünya standartlarında yapıyor olması ise kesinlikle takdir-e şayan bir davranış.