25 May 2015

Google Mülakatlarına Hazırlanma Süreci


Geçen yaz Google ik'dan (insan kaynakları) profilinizi linkedin, github ve birkaç listeden inceledik kabul ederseniz başlangıç bir görüşme yapmak isteriz içerikli bir e-posta aldım. 2 gün sonra başlangıç telefon görüşmesini ik ekibinden bir arkadaşla yaptık. Görüşmenin 45-55 dk arası sürmesi bekleniyor, benim bir saati biraz geçmişti. İlk görüşmede kod yazmamı gerektirecek bir şey sormadılar. Veri yapıları, ağ bilgisi, bit düzeyinde işlemler, algoritmalar ve karmaşıklıkları, bash komutları, sistem çağrıları, süreçler hakkında sorular geldi. İlk görüşmede tanışma, ilgi alanlarını öğrenme, hangi işler üzerinde uğraştığın hakkında bilgi edinme gibi kısımlardan da konuşulduğu için teknik değil olarak adlandırıyor ancak bence gayet teknikti :). Görüşme sonunda, ilk adımı geçtiğimi öğrendim.

Daha önce bir iş tecrübem olmadığı için bir alan seçmem gerekiyordu, telefondaki arkadaş Site Reliability System Engineering (SRE) ve Software Engineering olmak üzere 2 pozisyon sundu. Bilgilerin sistem tarafı için daha uygun istersen SRE seç şeklinde öneride bulundu. SRE görüşmelerinde daha başarılı olacağımı düşündüğümden onu seçtim.

Başlangıç görüşmesinden önce çok gerildim, zaten nasıl konuşacağım kısmı ayrı bir olay :). Soruları bitirdikten sonra, görüşmeyi yapan arkadaş diğer adımlar için tavsiyelerde bulundu, sorular üzerinde sesli düşün, eğer ne sorulduğunu anlayamadıysan bilmiyorum deme, anlayana kadar sorman sorun değil, dedi. Çünkü söylediği bir kelimeyi anlayamadığımdan bilmiyorum demiştim, anlamadığımı fark etti ve gtalk'a sorunun bir kısmını yazdı ve cevapladım :).

İkinci görüşmeyi bir mühendisle yine telefon üzerinden yaptık. Kodlama soruları için google doc kullandık. Görüşme yine 45-55 dk arasıydı. Soruların neredeyse hepsi çalıştığım sorulardı ancak düzenli ifadelere çok fazla çalışmaya vaktimi yetiremedim. Görüşmede son soru basit split, join işlemleriyle çözülebilecekken suçluluk psikoljisi ile düzenli ifadelerden çözülmesi gerekiyor sandım :). Çözüme yaklaştım ancak çoğu şeyi göz ardı ettik, ben ifadeleri karıştırdım gibi şeyler oldu. Görüşme sonunda mülakatı yapan arkadaş, bu görüşmenin büyük kısmını harika yaptın dedi. Bir an şok olmamla birlikte havaya uçup geri oturdum :).

Google'ın mülakatlarına hazırlanırken aşağıdaki linklerden yararlandım. Bunlar dışında deneyimler üzerine yazılmış çok fazla blog yazısı bulabilirsiniz. Hepsini okumak belki mümkün olmaz ama çoğunu okuyun gerçekten çok faydalı oluyor. Mühendislerle yaptığım görüşmeler ik'daki arkadaşla yaptığım görüşme kadar eğlenceli geçmedi. İk'da olan arkadaş görüşme sırasında harikasın, çok iyi gibi sürekli destek olarak ve çok sevecen bir şekilde konuşuyordu. Ancak mühendisler süreci soğuk, sadece soru soran ve cevap bekleyen bir şekilde geçiriyorlar. Okuduğum bir blog yazısında telefonda problem olduğu için Skype'a geçmek zorunda kalan bir arkadaş mühendis soğuk ve sıkılmış görünüyordu yazmıştı. Bu yüzden telefondaki soğuk tavırları hiç üzerime alınmadım :), sadece en sonda tebrik eden bir ifade duydum.

Siteler: Geeks For GeeksGlassadorCareerupCracking Code InterviewsSystem DesignDevops Interview Questions.

3. mülakat için yeniden tarih belirledik. Genelde 3 er hafta arayla yaptık görüşmeleri. İlk iki görüşmem iyi geçtiğinden sonuçlarını hemen öğrenmiştim, normalde bir haftayı bulabiliyor. Görüşmelerin arasını çok uzatmak bence iyi değil, sonuna kadar gidebileceğimizi düşünürsek insan bunalabilir. 3 hafta gayet iyi bir süreç. Zaten görüşme 45 dk sürüyor, en fazla kaç soru sorabilir diye görüşmeden önce kendimizi rahatlatmak da bir yöntem :). Birde hazırlanırken süremi bir hafta kadar tanım sorularına çalışarak, bir hafta kodlama sorularına çalışarak sonraki hafta bunları karmaşık tekrar ederek geçirdim.

3. görüşme görüntülü olacaktı ancak ne olduysa yine telefon üzerinden yaptık. Bu görüşmede sorular beklediğim gibi değildi. Temelde bir soru sorup, diğer soruları aynı soru üzerinden türetti. Görüşmenin nasıl geçtiğini anlamadım, soyut şeyler üzerinden benim daha önce deneyememiş olacağım şeyler üzerinden konuştuk. O zamanlar her görüşmenin bitiminde sonucu söylüyorlar sandığımdan bu adımı geçebildim mi? diye sordum, henüz bilmiyorum cevabını aldım :). Bir hafta sonra geçtiğimi öğrendim.

Buradan sonraki adım Google ofisinde yapılması gereken görüşme. Yine ik'daki arkadaş önce aradı sonra aynı bilgileri e-posta ile gönderdi. Birkaç Google pozisyonu önerdi, Dublin'de olanı seçtim, Dublin aynı zamanda Google'ın Avrupa'daki ofislerinin merkezi. Vize işlemleri nedeniyle ve benim gideceğim haftada Dublin'de etkinlikler olduğundan, son görüşmeyi 1,5 ay kadar ertelemek zorunda kaldık :(.

Son mülakat 45'er dakika şeklinde ve 5 oturumdan oluşuyor. Her oturuma 1 ya da 2 mühendis girebiliyor. Son oturumu SRE takımının yöneticisiyle yaptık ^_^.

Son aşama gerçekten çok heyecanlıydı. Uzaktan yapılan görüşmeler sırasında sesin kesilmesi problemi çok oluyor. En sonunda duyamıyorum, sesin kesiliyor dediğimde google doc'a soruyu yazdıkları olmuştu. Yüzyüze görüşmede çok hızlı konuşurlarsa diye sıkıntım vardı ancak öyle olmadı. Google çalışanları konuşma konusunda diğer şirketlere göre çok daha anlayışlı. Oldukça anlaşılır konuşuyorlar.

Konuşma pratiği yapmak için dil kurslarına gitmek faydalı, birde Google SRE ekibinin düzenlediği etkinlikleri youtube'dan çok rahat bulabilirsiniz. Ben onları izlemiştim, hem birkaç anahtar kelime öğrenmemi sağladı hem anlamamı geliştirdi.

Mülakatın yapılmasından bir gece önce Dublin'deydim. Sabah ik'daki arkadaş istersen otelden seni alayım, yürüyerek gayet yakın dedi. Kabul ettim, çok yağmurlu bir sabahta ofise birlikte gittik. Her oturumdan sonra 3-5 dk beklemek gerekebilir, bu sürelerde eğer odada yalnız kalırsam dışarı çıkmamamı ve henüz çalışan olmadığım için ofiste tek gezmememi söyledi.

Son görüşmede soruların çoğunluğu çalıştığım yerlerden çıkmadı. Bu kadar sorulmaz ya dediğim ve ayrıntısına inmediğim şeylerden çıktı. Açıkçası hiç beklememiştim. Daha önce bir yerde de öyle soruları görmedim :(. Basit sorulan sorular da vardı elbette ama geneli değildi. Çok iyi veri yapıları soruları bekliyordum, hiç sormadılar :|.

Ancak sürecin tamamı çok heyecanlı ve cesaretlendiriciydi. Yüzyüze yaptığımız görüşmelerdeki arkadaşlar da çok sevecendi, bir soğukluk yoktu :). Birde yurtdışına ilk seyahatimi Google sayesinde yapıyor olmam da çok mutluluk vericiydi.

Google'ın sizle görüşmek isteriz şeklinde e-posta atması için sadece bir github hesabımız olması bile yeterli. Çünkü onlar da yeni insanlar tanıyıp, onları görüşmelerine hazırlamak istiyorlar.

Üniversiteden "olmadı sanırım .. olduğu kadar :(" şeklinde hissederek mezun olmuştum, bunun üzerine Google görüşmesinin bu kadar ilerlemesi çok iyi oldu, çok da güzel oldu :). Mezuniyetimden sonra 7-8 ay boyunca kadar her şey böyle karmaşık ve heyecanlı bir şekilde ilerlerdi. Bir hafta önce bundan sonrası şöyle olur muhtemelen dediğim şeylerin hiçbiri tutmadı :), şimdi tekrardan her şey düzene girdi. Bundan sonrasında yine Linux çekirdeği üzerinde devam edeceğim. Belki bir gün yine Google ile görüşebiliriz :).

Dublin'de 2 gece kaldım ve çok gezemedim. Bir dahaki sefere daha fazla kalabilirim diye düşünüyorum. Dublin'de çektiğim fotoğraflar için buraya bakabilirsiniz.

17 May 2015

Raspberry Pi’den WhatsApp mesajı atmak


Daha önce Raspberry Pi sunucumdaki sıcaklık uyarıları, IP bilgilerini Pushingbox, PushBullet gibi servislerle gönderdiğimi yazmıştım. Bugün internette gezinirken hhttp://www.instructables.com/id/WhatsApp-on-Raspberry-Pi/ adresindeki amcanın linux cli ile WhatsApp mesajları gönderebildiğini okudum. Hemen denemeliydim, denedim de WhatsApp mesajı göndermek için https://github.com/tgalal/yowsup adresindeki python kütüphanesini kullanacağız. Kütüphaneyi kurabilmek için öncelikle gerekli diğer python kütüphanelerini kuralım. sudo apt-get update && sudo […]

08 May 2015

Metasploit Framework Giriş


Metasploit Framework, güvenlik açıklarının bulunmasını ve bulunan açıkların kullanılmasını sağlayan bir araçtır. Ruby ile sıfırdan tekrar yazılmıştır.(öncesinde Perl ile yazılmış) Kullanılan terimlerin anlamlarını öğrenip birşeyler denemeye başlayınca ne olduğu insanın aklında daha çok şekilleniyor :) 

Terminoloji:

Exploit: Bir sistemin ya da programın zayıflığından faydalanarak sisteme girişi sağlayabilen ya da zarar veren yöntemlerin tamamıdır.

Local Exploit: Oturum açılmış halde olan sistemde bulunan servis veya yazılımların zayıflıklarını sömüren exploit türüdür.

Remote Exploit: Ağ üzerinden uzaktaki sistemin zayıflıklarını sömüren exploit türüdür.

Payload: Hedef sistemde istenilen eylemi gerçekleştiren bileşendir. Exploitten sonra çalışır.

Auxiliary: Modüller için geliştirilen ek programlar, yardımcı araçlardır. Exploit öncesi sistem hakkında bilgi toplama amaçlı kullanılırlar.

MsfConsole, içinde pek çok hazır exploit bulunduran aynı zamanda bu exploitleri yerel ve uzak erişim için yapılandırabilen bir yazılımdır.

Ubuntu'ya Msfconsole kurulumu için buraya bakabilirsiniz.

MsfConsole:


help: Kullanabileceğimiz komutları ve ne işe yaradıklarını görebiliriz.

Komut          Açıklama
banner        MsfConsole açılış ekranını gösterir.
info             Bir veya daha fazla modül hakkında bilgi verir.
irb               İrb scripting modunu getirir.
jobs            Yapılan işleri gösterir ve düzenler.
load            Eklenti yüklenmesi için kullanılır.
loadpath     Belirtilen yoldan istenilen modülü/exploiti yükler.
route           Oturum trafiğinin yönlendirilmesini sağlar.
save            Etkin veriyi kaydeder.
search         Modül ismi veya açıklamalarda arama yapar.
sessions      Aktif oturumları gösterir ve oturum bilgisi verir.
set               Payload seçiminde bir verinin atamasını yapar.
show           Belirtilen modülü veya tüm modlleri listeler.
sleep           Belirtilen zaman zarfında hiçbir işlem yapılmaması gerektiğini belirtir.
use              Modül seçer.
version        Konsol uygulamasının versiyonunu gösterir.

show exploits: MsfConsole platformundaki exploitleri listeler.
use <exploit>: Exploit seçmek için kullanılır.
show targets: Seçilen exploitin hangi sistemleri etkilediğini görmek içn kullanılır.











set targets <hedefno>: Hedefi seçmek için kullanılır. 
show payloads: Msf’de bulunan payloadları listelemek için kullanılır.


info <payload_adi>: İstenilen payload hakkında detaylı bilgi döndürür.
set PAYLOAD <payload_adi>: Payload seçmek için kullanılır.
show options: Yapılacak saldırı için seçeneklerin görülmesinde kullanılır. "Required" sütununda yes ile belirtilmiş olan seçeneklerin ayarlanması gerekir.


set <RHOST, RPORT, LHOST, LPORT>: Required kısmındaki bilgileri girmek için kullanılır.
exploit:  Gerekli tüm yapılandırma bittikten sonra saldırı başlatmak için kullanılır.

Güvenlik yeni yeni ilgimi çeken bir konu. Öğrendikçe daha fazla yazmaya çalışacağım. Kolay gelsin :)


05 May 2015

Kendinize Bir Kötülük Yapın


Kendinize bir kötülük yapın ve yayındaki sitelerinizi sıkıştırıp şöyle bir isimle hemen public_html/ klasörü içine koyunuz; böylece otomatik botların sitenizin yedeğine ve veritabanına ulaşması çok daha kolaylaşır.

Aynı şekilde bu dosyaları ŞİFRESİZ bir backup/ yedek/ arsiv/ klasörü içine de alabilirsiniz.

/domainName.zip
/domainName.tar.gz
/backup.zip
/www.zip
/htdocs.tar.gz
/www.tar.gz
/backup.tar.gz
/htdocs.zip
/public_html.tar.gz
/public_html.zip

Kaynak derseniz, hazırladığımız web sitelerindeki 404 hatalarını özellikle takip ediyorum ve bu şekilde yapılmış bir aktivitesine denk geldim, dikkat çekmek istedim.



30 April 2015

‘Vatandaş Bilimi’ ve Oyun Oynayarak Kansere Çare Bulmak


Bugün elimizdeki cep telefonları on yıl öncesinin bilgisayarlarından çok daha güçlü işlemcilere sahip ve çok daha gelişmiş yazılımlar üzerinde koşmakta. Bu cihazlar üzerinde bugün yapılamayacak çok az şey var. Hepimizin gündelik hayatında elimizden düşürmediğimiz bu cihazlarda kuşkusuz en çok zaman geçirdiğimiz etkinliklerden biri ise oyun oynamak. Çevrenizde; metroda, metrobüste hatta manzaralı bir çay bahçesinde dahi insanların telefon ekranlarına küçük bir dikiz attığınızda insanların hayatlarının rutin bir eylemi olarak bir oyuna bulaştığını ve vakit geçirmek için bu oyunu kullandığını görebilirsiniz. Bu oyun mesaisi aynı zamanda ciddi bir insan gücü de demek… İşte vatandaş bilimi de buradan yola çıkarak bu oyun mesaisi üzerinden taşınabilir cihazlarımızı bilime katkı verebileceğimiz bir araca dönüştürüyor.

Vatandaş Bilimi nedir?

Öncü Vatandaş Bilimi projelerinden Seti@home dünya dışı akıllı yaşamı arıyor.

Öncü Vatandaş Bilimi projelerinden Seti@home dünya dışı akıllı yaşamı arıyor.

Vatandaş Bilimi (Citizen Science) terimi çoğu zaman kıtalar arası işbirliği yapan biliminsanı takımlarını içermekte. Fakat şimdi, internetin gücüyle artık uzman olmayan kişiler de katılıyor.

Vatandaş bilimi birçok farklı kategoriye ayrılmakta. Öncü proje olan SETI@Home milyonlarca katılımcının atıl hesaplama zamanını kullanarak dünyadışı akıllı yaşam araştırmasında kullanmakta. Seti@Home’un açtığı yoldan devam ederek Boinc@Home ile biyolojiden fiziğe birçok alana, Folding@Home ile de tıp alanına atıl hesaplama zamanlarını bağışlamakta. Vatandaş biliminsanları ayrıca Galaxy Zoo gibi gök cisimlerini sınıflandırma çalışmalarında ve hatta doğayla ilgili Great Sunflower Project gibi projelere gönüllü olarak katılmakta. Bunun yanı sıra işin biraz daha mutfağına girerek Fold.it projesiyle bulmaca çözerek ‘Protein Katlama – Protein Folding‘ bile yapmak mümkün.

Oyun ve biyolojinin ilk harmanlandığı Fold.it projesi, onyıldır çözülemeyen HIV ile ilgili bir proteinin 10 gün içinde bir oyuncu tarafından çözülmesiyle kendisinden söz ettirmişti.

İşte buradan çıkan bir fikir ile ‘Vatandaş Bilimi” mobil- yani taşınabilir cihazlara eğlenceli bir şekilde taşınmakta.

Daha fazlasını merak ediyorsanız Uzay, İklim, İnsanlık, Doğa, Biyoloji ve Fizik kategorisinde Vatandaş Bilimi projelerini bir çatı altında toplayıp sunan Zooniverse.org sitesine göz atabilirsiniz.

2013 yılında gerçekleştirilen bir ortaya atılan bir fikir ile ilk defa tıp alanında bir proje oyunlaştırılıp mobil cihazlar üzerinden insanların kanser araştırmalarına katkı verebileceği bir projeye dönüştü. Cancer Research UK, Amazon Web Services, Facebook ve Google geliştiricileri, akademisyen ve bilim adamlarıyla birlikte genetik veriyi dönüştürebilen eğlenceli bir oyun oluşturmak için yola çıktı. Bu süreçte alınan fikirlerle Play To Cure: Genes in Space (Tedavi etmek için oyna: Uzaydaki Genler) oyunu ortaya çıktı. Oyunun yayınlanıp başarılı olması üzerine ise bir diğer oyun olan Reverse the Odds (Odları Geri Döndür) isimli bir oyun daha yayınlandı.

Genes in Space oyunu 2012 yılında Birleşik Krallık’ta gerçekleştirilen geniş kapsamlı bir göğüs kanseri araştırmasını temel almakta ve bu araştırmada elde edilen DNA verilerinin sanal bir madde olan ‘Element Alpha‘ya dönüştürülmesiyle analiz edilecek haritalar oluşturulmakta.

Bir bilgisayar oyunu ile tıbbi veri analizinin ne kadar başarılı yapılabileceği konusunda ise oyun geliştiricileri ve uzman biliminsanları şaşırtıcı bilgiler vermekte [1]. Uzmanlara göre mevcut bilgisayar yazılımları genlerdeki bozulmaları incelemek için yeteri kadar isabetli incelemelerde bulunamıyor ve %10’luk bir ıskalama olmakta. Oyunun arkasındaki bilim konulu detaylı yazılar [2] [3] incelendiğinde bilgisayarların DNA üzerindeki bu izleri incelemekte henüz insan gözü kadar iyi olmadığı ve bu binlerce veri setini incelemenin ise ço büyük bir zamana mal olduğu söylenmekte. İşte bu oyun sayesinde ise oyuncular tarafından hızlıca incelenebilen bu veri setleriyle araştırmaların hızlandığı söylenmekte.

Bu oyunlara temel teşkil eden ilk girişim olan çevrimiçi kanser hücrelerini inceleme platformu olan Cell Slider sitesinde bugüne kadar 2 milyondan fazla slyatın incelendiği düşünülünce, projelerin gerçekten faydalı olduğu görülüyor.

Genes in Space’in başarılı olması üzerine geliştirilip yayınlanan bir diğer oyun olan Reverse the Odds oyunu ise bir bulmaca oyunu. Bu oyunda genetik veriyi analiz etmek yerine mevcut kanserli hücreleri ve bu hücrelerin biyolojik işaretlemeleri (biomarker)  tespit edilmeye çalışılıyor.

Reverse The Odds projesini yöneten Dr. Anne Kiltie, Reverse The Odds oyuncularının hali hazırdaki bilgisayar analizlerinden çok daha hızlı ve %10 daha başarılı olduğunu ve ortalama isabetin de tıpkı Cell Slider gibi mevcut biliminsanlarına yakın olduğunu belirtmekte[4]. Reverse the Odds’da bugüne kadar 3.200.000 civarında görüntü analiz edilmiş ve toplamda 31.000.000 görüntü analiz edilmeyi beklemekte.

Gerçek kanser hücrelerini tespit etseniz de merak etmeyin, gerçek hastalara teşhis koymuyorsunuz. Oyundaki verileri yüzlerce insan analiz ettiği için hata yapmaktan çekinilmemesi gerektiniği söylenmekte.

Candy Crush veya Angry Birds gibi popüler bir oyunu oynayıp vakit öldürmek yerine Vatandaş Bilimi oyunları oynayarak insanlığa katkı vermek daha iyi bir seçenek olarak önümüzde durmakta.

Biraz daha detaylı anlatabilmek için oyunları yakından tanıyalım:

(Belki ileride işe yarar diye oyunların resmi sayfalarını çevirip aktardım)

1- Play to Cure: Genes in Space:

2014 başında yayımlanan Play To Cure: Genes in Space oyunu gerçek genetik verilerin oyuncular tarafından analiz edilmesine üzerine kurulu eğlenceli bir uzay oyunu.

Bilim kahramanı olun

Play to Cure™: Genes in Space, oyuncuların kolektif gücünü kullanarak gerçek genetik verileri analiz etmek ve kanseri daha kısa zamanda alt etmek için geliştirilmiş dünyanın ilk ücretsiz mobil oyunudur.

Oyun

Oyundaki görev sanal bir madde olan Element Alpha’yı toplamaktır. Element Alpha, birçok kanser türüne dayanak oluşturabilecek genetik kanser verisini temsil etmektedir.

Oyunda Bitfrost Şirketi’nin bir elemanı olarak göreviniz değerli ve satılabilir Element Alpha maddesini toplamak ve rütbenizi aşağıdakileri yaparak yükseltmektir:

  • Element Alpha’Nın en yoğun olduğu bölgelere göre rotanızı belirlemek
  • Rotanızı takip edip olabildiğince çok Element Alpha toplamak
  • Element Alpha toplarken ve sonrasında astroidlerden kaçınmak ve ateş ederek asteroidleri yok etmek
  • Geminizin özelliklerini geliştirerek daha güçlü hale getirmek ve daha çok Element Alpha satabilmek.

Genes in Space oyununda görev sanal bir madde olan Element Alpha’yı toplamaktır. Element Alpha, birçok kanser türüne temel teşkil eden genetik kanser verisidir.

 Uygulamayı Apple App Store’dan indirmek için tıklayın

 Uygulamayı Google Play’dan indirmek için tıklayın

Not: bazen bağlantı vb sorunlar nedeniyle boş harita gelmekte, Back (Geri) deyip tekrar Play tuşuna basıp (bazen bir kaç sefer tekrar etmek gerkebilir) deneyebilirsiniz

Oyunun arkasındaki bilim

Veri analizi bilim adamlarına iki anahtar konuda iletilmektedir:

  • Birincisi haritada Element Aplha yoğunluğuna göre çizdiğiniz rota
  • İkincisi uzay geminizle galaksilerarası uçuşunuz esnasında topladığınız Element Alpha miktarı ve konumu

Genes in Space oynayarak biliminsanlarının çok uzun zamanını alacak çok büyük miktarlarda genetik veriyi analiz ediyor olacaksınız ve onlara zaman kazandıracaksınız. Bu veri yeni hayat kurtaran tedavileri geliştirmek için kullanılabilir.

 

DNA Mikroçipi

DNA Mikroçipi

Uzayda rota çizilirken...

Uzayda rota çizilirken…

 

Oyunun arkasındaki bilim hakkında daha fazla okumak için tıklayınız (İngilizce) 

2- Reverse The Odds:

Taşınabilir cihazınızdaki bu bulmaca oyunuyla sihirli bir dünya yaratın, sevimli minion ırkını kurtarın ve biliminsanlarımıza gerçek kanser verisini analiz etmeleri için yardım edin.  

Oyun

Reverse The Odds oyununda, dünyaları düşüşe geçen renkli yaratıklar olan “Odd“lara yardım ediyorsunuz. Mini bulmaca oyunlarını tamamlayarak topraklarını geliştiriyor ve Oddların topraklarını yaşanabilir hallerine geri döndürüyorsunuz.

Reverse the Odds, hikayesi ve bulmacalarıyla eğlenceli bir oyun

Reverse the Odds, hikayesi ve bulmacalarıyla eğlenceli bir oyun

Ancak oyunda sadece Oddlara yardım etmiyorsunuz. Oyuna saniyelerinizi alacak gerçek kanser verisi analizleri ekledik.

Kanser araştırmalarına nasıl yardım ediyor?

Biliminsanlarımız devasa miktarsa veriye sahip, ve bu veri insanlar tarafından analiz edilmeli – bilgisayarlar gerekli desenleri algılamak için yeteri kadar iyi değil.

Reverse The Odds’a veri analizini ekleyerek binlerce oyuncunun biliminsanlarımıza beyin, gırtlak, akciğer ve prostat kanseri gibi farklı kanser türleri hakkında daha fazla bilgi sahibi olmasına yardım edebiliriz.

Araştırmacılarla aynı şekilde analiz ediyorsunuz, fakat sizin gibi çok oyuncu olduğu için veri içerisinde çok daha hızlı ilerleyebiliyoruz ve araştırmacılarımızın değerli zamanından kazanıp kanser hakkındaki ipuçlarını daha erken yakalıyoruz.

Hata yapmaktan korkmayın!

Vatandaş Bilimi olabildiğince kişiyi dahil etmekle ilgili, bu nedenle gördüğünüz hücrelerle hakkında %100 emin olmanıza gerek yok. Bazen araştırmacılar bile farklı fikirlerde olabiliyor. İşte bu nedene yerlerinde destek mekanizmaları var ve biz de bunu yapıyoruz. Sizin gibi bir sürü insan aynı resmi görüyor ve tutarsız analizler için bizim de kontrollerimiz bulunmakta.

Bilim

Gördüğünüz resimler eski hastalar tarafından bağışalanan gerçek tümör dokularının büyütülmüş örnekleridir.  Bu veri hakkındaki basit sorulara yanıt vererek biliminsanlarına kanser hakında daha fazla bilgi sahibi olmaları ve gelecekteki hastalar için en uygun tedavileri etkince reçetelemek için yardım ediyorsunuz.Oyunun arkasındaki bilim hakkında daha fazla okumak için tıklayınız (İngilizce)

Mücadeleye Katılın

3- Cell Slider

Araştırma kanseri öldürüyor, fakat yardımınıza ihtiyacımız var!

Bir bilim kahramanı olun ve Cancer Research UK ve Zoonivers’İn yanında kansere karşı savaşımızda yerinizi alın. Cell Slider patolojik veriyi görselleştirmekte ve kanser hücrelerini tıpkı biliminsanlarının yaptığı gibi tespit etmenize olanak tanımakta. Herkes bunun bir parçası olabilir ve analiz edilen her görüntü gerçekten fark yaratmaktadır!

Birgün kanseri alt edeceğiz. Cell Slider’da yer alarak bunu daha kısa sürede yapabilmemize yardım etmektesiniz.

2,538,888

görüntü hali hazırda analiz edildi!

http://www.cellslider.net/

——————

Kişisel not: Dünya üzerindeki insanların birbirlerini öldürmek için her yıl harcadıkları trilyonlarca doları düşününce bu çabaların nasıl bir karanlık içinde parladığını görüyoruz. Bu kadar parayla dünyada açlık ve hastalıklar elbette yok edilebilir, her zaman söylediğimiz gibi, başka bir dünya mümkün…

 

Bağlantılar:

1- http://www.bbc.com/news/health-26009350
2- http://scienceblog.cancerresearchuk.org/2014/02/04/download-our-revolutionary-mobile-game-to-help-speed-up-cancer-research/

3- http://scienceblog.cancerresearchuk.org/2013/03/01/can-the-power-of-the-public-help-personalise-cancer-treatment/

4- http://www.cancerresearchuk.org/support-us/citizen-science-apps-and-games-from-cancer-research-uk/reverse-the-odds

5- http://www.channel4.com/microsites/reverse-the-odds/app-FAQs.html 

http://www.techtimes.com/articles/3244/20140207/can-video-game-help-find-cure-for-cancer-doctors-say-yes.htm 

* http://www.gamasutra.com/blogs/CharlesLeesCzerkawski/20140206/210183/Play_to_Cure_Genes_in_Space__Development.php

* http://socialtech.org.uk/projects/reverse-the-odds/

* http://www.scientificamerican.com/citizen-science/reverse-the-odds/



29 April 2015

26 April 2015

MacBook Pro “Connection timeout” sorunu


Bugün eski ADSL modemimi test için tekrar networke bağladım. Evdeki tüm kablosuz bağlantı yapabilen cihazlar (1 iPad, 2 mobil telefon, 1 laptop) kablosuz networke bağlanabilirken MacBook Pro (Retina, Late 2013) cihazın bağlanamadığını ve alttaki ekran görüntüsündeki “Connection Timeout” hatası verdiğini farkettim. ADSL modeme kabloyla bağlanarak biraz araştırdım. Bazıları “Wireless Diagnostics” uygulamasını, bazıları yeni bir network […]

Linux Stajı Sonucunda



12 Mart sonunda Outreachy (OPW) kış dönemi stajları sona erdi. Ben bu süreçte bellek yönetiminde, THP (transparent huge page) kodları üzerinde çalıştım. Birlikte çalıştığım danışmanımın istersen bir süre daha birlikte çalışmaya devam edebiliriz demesiyle şimdi hala devam ediyorum :).

Staj sürecinde sadece okunur sayfalar, sıfır içerikli sayfalar (zero page, bellekte henüz eşleme yapılmamış sadece okuma isteği almış ve veri içermeyen sayfa) ve swap cache üzerinde çalıştım. Swapteki veriler için birini stajdayken diğeri stajdan sonra olmak üzere iki yama hazırladım. İkisininde ortak yanı do_swap_page kısmında takılıyor olmaları ^_^. Sistem bazen askıda kalıyor, bazen boot aşamasında bile bir panik oluyor gibi problemleri var hala. Koddaki sayaçların değerini daha iyi görebilmek için tracepoint yazdım. Tracepointi de ayrı bir yama olarak göndereceğiz. Askıda kalma problemleri için en iyi yöntemler ise serial console ya da netconsole kullanmak. Geçen gün Sarah Sharp'ın günlüğüne bakarken burada bir netconsole yazısı gördüm :). Askıda kalma olayı genelde spinlocklarda bir hata yaptıysak oluşuyor.

Outreachy'de, Linux Vakfı kendi stajerlerini 5 dakikalık kısa konuşma yapmak için Linuxcon'a davet ediyor. Ben Dublin'de olana katılacağım, Seattle'da olan biraz fazla uzak. Zaten bu ara hangi etkinliğe gitmek istesem hep Dublin'e denk geliyor, aslında ben mümkün olduğunca başka şehirler seçmeye çalışıyorum :).

Nisan başında lwn.net'te stajımla ilgili bir yazı yayınlayacaktık, yazının taslağı hazır, sanırım swaplerle olan işler bittikten sonra onları da ekleyip yayınlayacağız.

Bu staja alınmam benim için biraz sürpriz gibi oldu. Necdet hocanın hadi Ebru başvursana demesiyle başvurdum ve çok iyi oldu, çok da güzel oldu :).

Mezuniyetimden beri evden çalışıyorum, bu biraz değişik oldu. Muhtemelen bir ay daha evdeyim, sonra bir süre çekirdeğe ara verip başka işlere bakıp, sonrasında tekrar döneceğim :). Çekirdek üzerinde çalışmanın diğer alanlara göre daha fazla dikkat gerektirdiğini düşünüyorum. Çünkü bir yerde hata yaparsam o değişikliği geri almak daha uzun sürüyor, daha fazla şeyi kontrol etmem gerekiyor.

Staj sürecimde işini çok iyi yapan insanlarla birlikte çalıştım. Rik, 12 senedir Linux üzerinde çalışıyor. Bunun ilk duyduğumda bir yutkunma .. :).

Aslında üniversiteye başladığımdan beri hep işini çok iyi yapan, hayran olduğum insanlarla bir aradayım. "Harika insanlarla birlikte çalıştım" diyebilmek, bu hayattaki en güzel şeyler arasında ilk sıralarda yer alır. Çomü'de bilgi işleme gitmeye başladığımdan beri ben de bu sözü söyleyebiliyorum ve iş hayatında da böyle devam eder diye ümit ediyorum :).

24 April 2015

Fortigate cihazlara SSH key ile erişim


FortiGate SSLVPN cihazlarına password girmeden SSH key ile erişim için aşağıdaki adımları yapmak yeterli olacaktır. – Client üzerinde RSA key-pair oluşturun. senna:~$ ssh-keygen -t rsa – FortiGate cihaza admin olarak bağlanın ve user ayarlarını değiştirin. side-door # config system admin side-door (admin) # edit gurcan side-door (gurcan) # set ssh-public-key1 "ssh-rsa PASTE_YOUR_PUBLIC_KEY_HERE gurcanozturk@senna.local"" side-door (gurcan) […]

21 April 2015

Sistem Yönetiminde Güvenlik Odaklılık


Geçenlerde, Linux Akademi‘nin blogunda sistem yönetimi ve güvenlik odaklılık üzerine şöyle bir yazı paylaşmıştım:

Teknolojik gelişmelerdeki hız ve değişim bu ekosistem içerisinde yer alan herkes için alışkanlıkların değiştirilmesini ve bu yeni gelişmelerin yol açtığı yeni iş yapış şekillerine evrilinmesini şart koşuyor. Bu kaidenin ne oranda hayata geçirildiği ise vizyonun şekillenmesi için bir ölçüt teşkil ediyor. Bu yeni dinamikler neticesinde her geçen gün eskinin klasik sistem yönetim anlayışını bir kenara bırakıp yeni metodolojilere daha çok adapte ediyoruz kendimizi.

Hemen herşeyin “manual” yürüdüğü, kapalı ve rutine bağlanan eski iş yapış şekilleri, yeni disiplinlerin türemesi ile daha çok araç, gerecin kullanıldığı ve herşeyi otomatize etmeye dayalı ve insan faktörünü olabildiğince aza indirgeyerek kendi kendini idame ettirebilen, dirençli ve esnek altyapılar kurgulama ve bunları “yönetme” şekline dönüştü. Durum böyle olunca yani herşey daha basitleşmiş gibi görünürken, bu basitliğin arkasını dolduran dinamiklerin daha komplike hale gelmiş olması, eski sistem yönetimi anlayışını yerle bir ederek, daha çok araştırmaya ve mühendisliğe dayalı başka tür bir sistem yönetimi anlayışına evrildi. -Dünya bu yeni yaklaşıma uzun süre önce geçmiş olmasına rağmen-, bizim ülkemizde de bu yaklaşımın etkileri gün geçtikçe daha fazla gözlemlenebilir bir hal alıyor.


Devamini okuyun: Sistem Yönetiminde Güvenlik Odaklılık


Cagri Ersen tarafından Syslogs adresinde yayınlandı. | Permalink | Etiketler:



20 April 2015

wait.h


Birden fazla process ile çalışan kod yazarken bazen wait() / waitpid() sistem çağrılarını kullanmak gerekebilir, bu sistem çağrıları child process yaratan parent process’lerin child’ların bitmelerini beklemek için kullanılır. Örneğin bir child process bir dosyaya yazma yapıyorsa ve parent process daha sonra bu dosyadan okuma yapacaksa önce child’ın tamamen sonlanmasını beklemesi gerekir çünkü child henüz daha dosyaya yazmayı bitirmemişken parent’ın bu dosyadan okuması hatalı sonuçlara yol açabilir.

wait()’in kullanılabilmesi için yazılan kodun en üstüne “#include <sys/wait.h>” satırının eklenmesi gerekir. Ancak bazı kodlarda bu satırın “#include <wait.h>” şeklinde yazıldığını da gördüm. Peki hangisi doğru? diye /usr/include dizini altına bakınırken aslında iki dosyanın da sistemde varolduğunu öğrendim:

$ find /usr -iname 'wait.h'
/usr/include/wait.h
/usr/include/x86_64-linux-gnu/sys/wait.h

Birbirinin sembolik linki olmayan bu iki farklı dosyanın içeriklerine baktığımda ise sys/wait.h olanı içersinde bir .h dosyasından bekleyebileceğim tanımlarla karşılaşmışken ilk wait.h dosyasının içeriğinin güldürecek kadar basit tutulduğunu gördüm:

$ cat /usr/include/wait.h
#include <sys/wait.h>

Muhtemelen BSD, Solaris, Linux vs gibi farklı platformlar arasındaki kod uyumluluğu artırmak için alınmış bir önlem olsa gerek.



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.