20
Kas
Merhaba arkadaslar, bugun Daron hocanin tweetini okuduktan sonra acaba xml formatinda cv nasil yazilir diye merak ettim ve biraz olsun arastirdim. Bu arastirmalarim sirasinda AB ce ve dunya uzerinde kabul goren bir CV sistemi oldugunu gordum. Simdi sizlere bundan bahsedecegim. kariyer.net gibi sitelerde doldurdugumuz cv ler isverenlerce cok dikkate alinmayabiliyor maalesef(Bakiniz Daron Yondem`in tweeti) Iste bu yuzden kendi cv mizi yazmamiz gerekiyor. Bunun icinde dunyaca kabul gormus bir seyden yararlanmak guzel olur diye dusundum. Simdi siteden bir alinti yapiyorum:)


Europass Özgeçmiş (CV)

Nedir?

Europass'ı kullanmak isteyen herkes Europass Özgeçmişi doldurarak başlayabilir. Europass Özgeçmiş (CV) becerilerinizi ve yeterliliklerinizi görülür hale getirmenizi sağlar. Bu döküman ile kişisel bilgilerinizi, iş deneyimlerinizi, eğitim öğretim bilgilerinizi ve kişisel becerilerinizi belirli bir formatta oluşturabilirsiniz. Bu döküman formatı AB ülkelerinde de aynı olduğu için kendinizi işverenlere en etkin şekilde tanıtmanıza olanak sağlar.
Europass Özgeçmiş (CV) 2002 yılında çıkarılan Avrupa Özgeçmişinin (CV) yerini alır.

Europass CV'nin Kullanımı


Europass Özgeçmişi (CV) kullanmak için üç seçeneğiniz vardır;


-Europass CV'nizi Online Olarak Oluşturun


Yukarıdaki linke tıkladıktan sonra karşınıza çıkacak sayfada sağ üst köşeden dil seçeneğini yaptıktan sonra, gerekli talimatları takip ederek CV’nizi oluşturabilirsiniz. CV’nizin tamamlanmış halini daha sonra elektronik olarak (e-posta ile veya indirerek) edinebilirsiniz.


-Europass CV belgelerini indirin


(boş şablon, talimatlar,farklı dillerde doldurulmuş örnekler ve Europass kapak sayfası). Bu bilgileri daha sonra bilgisayarınızda CV’nizi oluştururken kullanacaksınız.

-Europass CV'nizi Güncelleyin (XML/XML+PDF)


Eğer daha önceden CV'nizi yukardaki "Europass CV'nizi Online Olarak Oluşturun" linkinden oluşturmuş ve XML/XML+PDF formatlarında kayıt etmiş iseniz, bu CV'nizi ,bu linki kullanarak yükleyebilir ve verilerinizi güncelleyebilirsiniz.
Kişisel verileriniz otomatik olarak sisteme girilecektir.

18
Ağu
Bugün halihazırda tamamlamış olduğum kod üzerinde bir kaç iyileştirme yaptım. README, AUTHORS ve COPYING dosyalarını düzenledim.

Yaptığım iyileştirmeler, eğer yapılandırma dosyasında değer atanmamış ise varsayılan değerleri kullanacak. Başlangıçta eğer sistemde guest_name isminde bir kullanıcı var ise modülü çalıştırmayacak, guest_group isminde bir grup yok ise bunu oluşturacak ve en önemlilerinden birisi ise ev dizinini bağlarken noexec özelliği ile bağlamak.

noexec bize önemli derecede güvenlik sağlıyor. Bu özellik sayesinde kullanıcı bağlandığı ev dizini içerisinde ikilik dosya çalıştıramayacak. Aynı zamanda da kendisi de ikilik dosya yazıp bunu çalıştıramayacak.

Varsayılan değerleri kullanma kısmını da, yapılandırma dosyasını okurken bir hata oluşursa except bloğuna geçip aktarıyor ve hata ayıklama (debug) modunda ekrana dosya okunamadı diye hata veriyor ya da değerleri okurken boş çıkar ise onun varsayılan değerlerini aktarıyorum.

Kullanıcının varlığını ise pwd.getpwnam() ile sorguluyorum. Bunu try-except bloğu içerisinde yapıyorum. try içerisinde bu başarılı olur ise geriye başarısız diye değer döndürüyor, eğer başarısız olur ise except bloğuna geçiyor ve burada da hiç bir şey yapmadan normal koda devam ediyor.

Grubun varlığını da grp.getgrnam() ile sorguluyorum. Yok ise yine hata ayıklama modunda ekrana grup bulunamadı, grup oluşturulacak yazıyor ve grubu "groupadd %s" % guest_group ile oluşturuyorum.

Ayrıca daha önceden /etc/pam.d/ içerisindeki dosyalardaki control yerine uzun uzun yazılar yazıyorduk. Sadece sufficient yazmak yeterli şu an. Daha önceden de yazdığım yazıda bunu düzelteceğim.

Bahadır'ın aklındaki bir proje olan /etc/pam.d/ içerisindeki yapılandırma dosyalarını düzenleme projesini biraz araştırdım ve bunu Ubuntu'da yapmakta olan birileri olduğunu öğrendim.

İstek ise şu adreste: https://blueprints.launchpad.net/ubuntu/+spec/pam-config-framework

Ayrıca 2003 yılında da http://www.mail-archive.com/debian-wnpp@lists.debian.org/msg18384.html adresinde belirtildiği gibi istenmiş fakat zaman aşımından kapanmış.

Ubuntu'daki bu projeyi hazırlayan arkadaşa eposta yolladım. Bana bu paketin Ubuntu ve Debian için pam içerisine koyduklarını söyledi. Bunu biraz daha araştırıp Pardus'a uygulanabilirliğini araştırmayı düşünüyorum.

Sırada bir de PiSi paketi yapmak var. Daha önceden almaya karar verip paketini yaptığım paketleri düzenleyip ve yeni alacağım paketleri belirleyip bunlar üzerine çalışmalar yapacağım.

Yani Pardus 2010 Yaz Stajı, benim için tam hızıyla, zevkli, heyecanlı, öğretici yani her şeyiyle çok güzel devam ediyor.
NOT: Bu güvenlik açığını başka şekilde hallettiğim için buradaki control kısmına sadece sufficient yazmam yeterli oldu. Ama yine de aşağıdaki yazıyı bırakıyorum.


Biraz önce yazdığım yazıdaki kodu kontrol ederken akıl almaz bir güvenlik açığı ile karşı karşıya geldiğimi öğrendim. Açık şu: Sistemdeki herhangi bir kullanıcı parola yazmadan giriş yapabiliyor. Bunun sebebi yazdığım metot her türlü SUCCESS döndürmesi. Bunun yerine hata döndürse bu sefer başka sorunlar ortaya çıkacak.

Bu şekilde aklıma /etc/pam.d/ nin içerisinde bir şeyleri değiştirmek geldi. man pam.d yaparak kolları sıvadım. Ve çözüm:

auth [user_unknown=ok success=done new_authtok_reqd=done default=ignore] pam_python.so guestlogin.py

İkinci yazdığımız sufficient yerine bunları yazıyorum. Şu an daha iyi durumda.

Şimdilik aklıma gelen düzeltme yapılması gereken yerlerden birisi de bu durumda her bilinmeyen/kayıtlı olmayan kullanıcı için SUCCESS döndürmesi. Bunun kontrolünü python betiğinin içerisinde uygulamam gerekiyor.
Hazırlamakta olduğum guestlogin projesinde şimdilik giriş yapılabiliyor ve /home/ dizininin altında guestX şeklinde bir dizini ev dizini olarak gösteriyordu.

Geçici ve parolasız girilen bir hesap için fazlasıyla tehlikeliydi. Bunun için tmpfs ve mktemp komutlarını araştırdım. Tabi bir de kullanıcıyı ev dizini olmadan oluşturmaya baktım.

Öncelikle ev dizini olmadan kullanıcı oluşturmak gayet kolay. Komutumuz:

adduser -M kullanici_adi

şeklinde. -M ev dizini olmadan yarat anlamına geliyor.

mktemp komutu ile /tmp/ dizini içerisinde rasgele bir klasör oluşturuyoruz. Bunu da

mktemp -td guestX.XXXXXX ile yapıyoruz. Buradaki guestX bildiğimiz gibi misafir kullanıcıya vermiş olduğum geçici kullanıcı adı. Noktadan sonraki 6 tane X ise rasgele oluşturacak 6 rakam-harf karışımına denk geliyor. Yani oluşturulan dizin /tmp/guest6.6jHx4f gibi bir şey oluyor.

Buraya kolay bir şekilde gelmiştim fakat önümde biraz araştırmam gereken bir konu vardı. mktemp komutu o XXXXXX leri doldurup stdout a gönderiyordu bunu. Bunu da benim bir şekilde bir değişkene atayıp o dizini tmpfs ile bağlayıp bir de o kullanıcıya atayıp ev dizini yapmam gerekiyordu. Geliştiricilerden Serdar'ın yardımıyla birlikte python ile bunu yapmak için subprocess'leri araştırdım.

Dosyanın başına import subprocess yaptıktan sonra :

procOutput = subprocess.Popen(["mktemp -td %s.XXXXXX" % username], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
homeDir = procOutput.communicate()[0][:-1]

satırları ile çözüme ulaştım. Burda yaptığım iş tam olarak alt bir süreç başlatmak. yanına yazdığım diğer argümanlar sayesinde stdout ve stderr'i okuyabilecektim.

bu Popen fonksiyonunun geri dönüş değerini bir değişkene atadıktan sonra communicate() fonksiyonu ile bakabiliyordum. Aslında bu bile sonucu bir değişkene atamak için yeterliydi fakat sonuç şu şekildeydi:

('/tmp/guest5.d6E3gh\n', None)

bu haliyle benim işimi görmüyordu. Bunun de küçük bir düzenleme yaptım. İlk baştaki lazım olduğu için communicate() den sonra [0] ı kullandım. O değişkenin içinde de en son karakter \n olduğu için [:-1] ile en son karakteri attım. Sonuç olarak elimde sadece

/tmp/guest5.d6E3gh

kaldı ve bu benim için yeterli bir bilgiydi. Bunu homeDir değişkenine atadıktan sonra bunu tmpfs ile bağladım. Bunu da:

os.system("mount -t tmpfs -o mode=700 none %s" % homeDir)

ile sağladım. Sırada ise kullanıcıyı oluşturma, bu dizini kullanıcıya verme ve onun ev dizini haline getirmek vardı. Kullanıcının sistem tarafından verilmiş adını (guestX olan) username değişkenine daha önceden attığım için aşağıdaki komutlar bunlar için yeterli oldu.

os.system("useradd -M %s 2>> /var/log/guestacc.log" % username)
os.system("chown %s:%s %s" % (username, username, homeDir))
os.system("usermod -d %s %s" % (homeDir, username))

Burda dikkatinizi çeken bir şey de 2>> olmalı. Normalde >> komutu ile stdout'u başka bir dosyaya yönlendirebiliyoruz ama stderr yine ekrana düşüyor. stderr'in dosyaya yazılması için 2>> ekliyoruz.

Başlangıç ayarlarını bu şekilde halletmiştim bir de çıkışta da bu dizini umount edip, kullanıcıyı ve ev dizinini sistemden silmem gerekiyordu. İlk olarak /etc/pam.d/system-auth dosyası üzerinde kullanıcı çıkış yaparkan bir metotun çalışması için bir ekleme yapmam gerekiyordu. Bu da:

session sufficient pam_python.so guestlogin.py

satırı idi. Bu satırı:

session required pam_unix.so

satırının hemen üstüne ekledim. Bu satırı eklediğimde ek olarak:

pam_sm_open_session

ve

pam_sm_close_session

metotları çalışıyordu. Benim işime yarayan ise close_session metotuydu.

Bu metot içinden kullanıcı adını pamh.get_user(None) ile aldım fakat burada os.environ['HOME'] komutu işe yaramıyordu. Bunun için de :

homeDir = os.path.expanduser("~%s" % username)

komutunu çözüm olarak buldum.

Diğer umount işlemlerini de normal bir şekilde devam ettirdim. Ve kod daha iyi bir durumdaydı.

Şimdilik yapmam gerekenlerden biri /tmp/ nin içersinde öyle bir dizin olsa bile mktemp komutu guestX.XXXXXX dizinini oluşturmayıp ona bağlamamı sağlıyorsa bu bir güvenlik açığı olur. Bunun bir araştırmasını yapıp, gerekirse oraya bir kontrol koymak olacak.
15
Ağu

Pardus’un 2010 yılı staj programının 2. dönemi 2 Ağustos’ta başladı. Pardus Gezegeni staj dönemlerinde pek bir sessiz oluyor ama svn deposundaki hareketlerden UEKAE’deki ofiste stajını sürdüren arkadaşların çalıştığını görebiliyoruz. 2. dönem stajını ArtistanbulPR’da yapacak talihliler de Orçun ve benim.

Görevimiz Özgürlükİçin’in Tema bölümünü yenilemek ve büyük pay da Orçun’a ait. Kendisi 2 haftadır üzerinde çalışıyor ve oldukça güzel bir iş çıkarıyor. Onun işi tamamlamasıyla beraber Tema bölümüne RESTful bir API ekleyeceğiz. Aslında bu API’i Özgürlükİçin 3.0′ın yapılacak listesine eklemiştim fakat yeni Tema uygulamamızın Pardus’un masaüstü hizmetleri ile iletişimini sağlayan KNewStuff (eski adıyla GHNS) özelliği için yazmamız gerekiyor.

Orçun benden daha sık blog yazdığı için kendisini şuradan takip edebilirsiniz. Blog yazma konusunda darısı stajını UEKAE’deki ofiste yapan arkadaşların başına diyerek danışmanlarına ve kendilerine taş atarak bitireyim..

23
Tem

Pardus’un 2010 yılı ilk dönem stajyerlerinden stajını ofisimizde yapan arkadaşlarımız Engin Manap ve Ufuk Uzun stajlarını başarı ile tamamladılar. Başarı ile tamamlamak ne demek bilmiyorum ama klasik bir giriş yapmak adetini bozmak istemedim.

4 hafta boyunca ofisimizde bizlerle birlikte çalıştılar, yeni bir programlama dili öğrendiler ve o dil ile yazılmış bir framework kullanarak Özgürlükİçin kullanıcılarının fikirlerini Pardus projesine ulaştırmakla yükümlü Beyin uygulamasını yenilediler.

Aslında sadece yenilemediler, bir çok eksiğini düzeltip yeni özellikler eklediler. Bu esnada bol bol eğlenip Pardus ve özgür yazılım üzerine sohbetler ettik. Ne yalan söyleyeyim benim bir stajyerden beklentilerimi karşılamakla kalmayıp fazlasını yaparak staj ve stajyerler hakkındaki önyargılarımı fazlasıyla kırdılar.

Geçtiğimiz günlerde beyin2 adını verdikleri django uygulaması Özgürlükİçin’deki selefi ile değiştirildi ve kullanıcılara sunuldu. Kullanıcılardan gelen tepkilere bakılırsa ortaya çıkan uygulamayı tek beğenen bizler değiliz :)

Kendi ağızlarından stajlarını UEKAE yerine Artistanbul ofisinde yaptıkları için kendilerini şanslı hissettiklerini de duyduğumuza göre yazımızın dilekler kısmına geçebiliriz ;)

UEKAE’deki Pardus ofisinde ve Artistanbul ofisinde stajını tamamlayan arkadaşlarımıza kariyerlerinde başarılar diliyor, Pardus ve özgür yazılım dolu geçirdikleri bu kısa süreli yakınlaşmanın uzun sürmesini istiyoruz.

Önümüzdeki haftalarda Artistanbul ofisinde çalışacak ikinci dönem stajyerlerinin hangi konu üzerinde çalışacaklarını ve neler yapacaklarını da yazarım :)

18
Tem

Adım adım neler yaptık anlatacağım demiştim, blog yazma konusunda istikrarsız olduğumu bildiğinizden inanmamışsınızdır tahminen. Yarı dönem değerlendirme formuna birkaç paragraf yazarken bile araya türlü türlü aktiviteler sokarak “yazma” işinden kaytaran ben, artık “macroblogger” olduğuma göre oturum adam gibi bir değerlendirme yazısı yazmak zorunda oluyorum değil mi? Evet, buyrun:

GSoC koordinatörü (yine) Renan hızlı, temiz ve sessiz bir iş çıkararak 3. kez yaz stajına kabul edilmemizi sağladı. Biz onu kod yazıyor ya da birileriyle yazışıyor sanıyorduk, meğer teklif metni yazıyormuş gizli gizli. Yaz döneminin büyük bir kısmında ofis dışında olmayı planlayan (ilk aylarda iş, sonraki aylarda tatil için) bir geliştirici olarak bu sene de GSoC danışmanlığı yapmayacağını düşünen ve yanılan bendeniz, 2. kez danışman olarak buldum kendimi. Danışman olduğum Jain Basil‘in ilgisi ve proje gözden geçirmenin en az kod yazmak kadar eğlenceli gelmeye başlaması, 2 aya yakın zamanı keyifli geçirmemi sağladı.

Proje, ev dizinindeki (şimdilik sadece KDE) ayar dosyalarındaki değişiklikleri takip etme, değişiklikleri yedekleyebilme, paylaşabilme ve geri alabilme için gerekli altyapının hazırlanmasını ve arayüzlerin yazılmasını kapsıyor. Detaylar için Jain Basil’in günlüğüne göz atabilirsiniz. “Bir ayar değiştirdim ama neredeydi unuttum, nereden geri alıyorduk bunu?” diyenler için kurtarıcı olacağından eminim.

Jain başvuruda bulunmadan, kodlamaya başlamadan önce yapılması gereken herşeyi yapmış, bunu başvuru mektubunda göstermiş ve başvuruları değerlendiren geliştiricilerin “E sadece kod yazmak kalmış, seçelim bu arkadaşı” demesini sağlamıştı. Aktif geliştirme süreci boyunca Jain iyi bir geliştirici olduğunu gösterdi, takvime uydu ve ilk dönemde geçer notu aldı.

SVN kayıtlarını ve Jain’in İngilizce günlüğünü takip etmeyenler için yaptıkları hakkında bir özet şöyle:

  • ~/.kde dizinini kullarak bir yerel GIT deposu oluşturan bir servis yazdı.
  • Dizindeki her değişikliği KDirWatch ile takip etme ve değişiklikleri GIT deposuna gönderme desteği ekledi.
  • Değişiklikleri görme ve geri almak için gerekli kitaplık metodlarını yazdı.
  • 2. dönem geliştireceği arayüz için örnek bir tasarımı depoya gönderdi.

SVN kayıtlarına, kodlara, geliştirici günlüğüne ya da yukarıdaki özete bakarak “ne var bunda, ben de yaparım bunu” diyenlerdenseniz, sizi bir sonraki sene yapılacak olan yaz stajına bekleriz. Proje geliştirmek zor değil. Enerjiniz, hevesiniz, zamanınız ve bu işi yapmak için tutkunuz varsa bu ekipte size de yer var. Selamlar.

16
Tem

UEKAE’deki 2010 stajının ilk dönemi bugün sona erdi. Barış Akkurt, Mehmet Burak Aktürk, Doruk Altan, Caner Başaran, Deniz Gürsel, Eda Okur, Neslihan Şirin Saygılı ve Gökhan Göktürk stajlarını yıldızlı pekiyi ile tamamladı. Özgürlükİçin’in yeni fikir arayüzünü -UEKAE’den çok uzaklarda- Cihangir’deki Artİstanbul ofisinde geliştiren Ufuk Uzun ve Engin Manap bizimle fazla vakit geçiremeseler ve fotoğrafta yer alamasalar da, UEKAE’yi ziyarete geldikleri 2 gün boyunca yaptığımız Django sohbetlerinde “yıldızlı pekiyi”yi hakettiklerini gösterdiler.

Ayrıntıları yazmak, staj koordinatörü Renan‘ın hakkı. Geçen sene stajyerdi, bu sene staj koordinatörü oldu; hallerinden en iyi anlayan geliştirici olduğundan belki, bu görevi en iyi şekilde yerine getirdi. Üşenmeden hazırladığı “Pardus Yaz Stajı” kitapçığı ve tanıtım sunumu bazı geliştiricileri “bizim zamanımızda neredeydin Renan” diye sitem ettirdi, o kadar iyi oldu.

Başlıktaki cümle bugün ofisten ayrılmadan evvel, tatile çıkanlara ve geliştirici adaylarımıza güle güle derken çıkıverdi ağzımdan. Pek sevdim, her staj dönemi (ve belki Pardus eğitimi) sonrası bol bol kullacağım bir laf olacak sanırım.

Görüşmek üzere.

22
Haz

Artık ofisimizde 2 yeni arkadaşımız var, Engin Manap ve Ufuk Uzun. Kendileri 2010 yılının ilk dönem Pardus Stajerleri.

Benim danışmanlığımda Özgürlükİçin’e kağıt kesikleri arabirimi yazacaklar. Kağıt kesikleri en basit manasıyla dağıtımda bulunan fakat engelleyici özellikte olmayan küçük ve genellikle kozmetik hatalara deniyor. Kullanıcılarda kafa karışıklığı yaratan yazım hataları ya da hatalı, anlaşılabilir olmayan çevirilerden tutun da varlığıyla küçük işlemleri kolayca halletmeye yarayacak ve kolayca entegre edilebilecek özelliklere kadar her türlü hata bu sınıfa dahil.

İlk günümüzü Ubuntu’nun bu işi nasıl yaptığı ve Özgürlükİçin altyapısında kullandığımız Django çatısı üzerine sohbet ederek geçirdik. Planımızı ilk haftanın sonunda ellerimizi kirletip kod yazacak şekilde yaptık. Tahminlerimize göre 2. haftanın başında deneme yayını ve sonunda da nihai yayına geçebileceğiz.

Gözünüzü Özgürlükİçin’den ayırmayın ;)

4
May

Şimdi kemerlerinizi bağlayın ve masalarınızı kapatın, kısa ve hızlı bir yolculuğa çıkıyoruz.

Beklenen an geldi. 255 stajyer adayı arasından 20 stajyerimizi günler ve saatler süren oylama sürecinden sonra nihayet seçtik.

Kimler seçildi?

Ad Soyad Okul
Adil Güneş AKBAŞ Yeditepe Üniversitesi
Ahmet AYGÜN İstanbul Kültür Üniversitesi
Alper TOKGÖZ İzmir Ekonomi Üniversitesi
Barış AKKURT İstanbul Teknik Üniversitesi
Caner BAŞARAN Mersin Üniversitesi
Deniz GÜRSEL İstanbul Bilgi Üniversitesi
Doruk ALTAN İstanbul Ticaret Üniversitesi
Doruk Destan SARPKAYA Yeditepe Üniversitesi
Eda OKUR Boğaziçi Üniversitesi
Engin MANAP Çanakkale 18 Mart Üniversitesi
Gökhan GÖKTÜRK Sabancı Üniversitesi
Gökhan YILMAZ İzmir Ekonomi Üniversitesi
Halid ALTUNER Fatih Üniversitesi
Hakan UYSAL Hacettepe Üniversitesi
Mehmet Burak AKTÜRK İstanbul Ticaret Üniversitesi
Mesutcan KURT Çanakkale 18 Mart Üniversitesi
Neslihan Şirin SAYGILI İstanbul Teknik Üniversitesi
Orçun AVŞAR Çanakkale 18 Mart Üniversitesi
Ufuk UZUN Sakarya Üniversitesi
Utku ULUŞAHİN Başkent Üniversitesi

Stajyerleri nasıl seçtik?

Oylamalar, stajyer alım sürecini hızlandırmak için yazdığım bir stajyer oylama arayüzünde gerçekleşti. Arayüzde bilgileriniz, cv’niz ve kodlarınız incelendi ve altlarındaki forum tadında ortama yorumlar yapıldı ve puanlarınız verildi. En yüksek puanı alan ilk 20 aday staja katılmaya hak kazanmış oldu. İkinci 20 aday ise gelememe ihtimali olanların yedekleri olarak kaydedildi.

Hangi kriterlere göre stajyer seçtik?

Oylama sürecinde en çok dikkat ettiğimiz kriterler şunlardı:

  • Bildiğiniz programlama dilleri
  • Yaptığınız okul ve okul dışı projeler
  • Bildiğiniz programlama dillerinin seviyesini gösteren ve projelerinizin ispatı olan kod örnekleri
  • İş/Staj tecrübeleriniz
  • Başarılarınız

Oylama sürecinde dikkat ettiğimiz diğer özellikler:

  • Pardus’la veya genel olarak Linux ile daha önceden ilgilendiğinizi gösteren kanıtlar: Blog, makale, çeviri, kod.. vb.
  • Pardus’a olan katkılarınız: Yama, çeviri, hata girdisi, seminer.. vb.
  • Özellikle Python bilgisi. Ayrıca Qt, C, C++ bilgisi
  • Genel olarak Pardus teknolojilerinden ne kadar haberdar olduğunuzu gösteren ipuçları: Çomar, Müdür, Pisi.. vb.

İstatistik mi dediniz?

Tek bir adayın doldurduğu formu gözden geçirmek, cv’sini derinlemesine incelemek ve kod gönderenlerin kodlarını tek tek açıp inceleyip anlamaya çalışmak her geliştirici için ortalama 15 dakika sürdü.

Yani bütün öğrencileri oylamak, her geliştirici için yaklaşık:

255 * 15 = 3825 dakika

3825 / 60 = 63.75 saat

sürdü.

63.75 saati de geliştirici sayımızla çarparsanız sanırım toplamda ne kadar emek verdiğimizi kestirebilirsiniz.

Hangi üniversiteden kaç kişi başvurdu?

Bu sene en çok İstanbul Teknik Üniversitesi’nden başvuru aldık. Geçen senelerin başvuru şampiyonu Kocaeli Üniversitesi bu sene ikinci sıraya düştü. Aşağıda üniversitelerin istatistiğini görebilirsiniz. Açılan pencerede sağ tıklayıp resmi görüntüle derseniz daha rahat okunan bir boyutu açılacaktır. Diğer üniversitelerden de önümüzdeki senelerde katılım bekliyoruz. Tanıtım, gezi ve şenliklerimizin bunda etkili olacağını düşünüyorum.

Üniversite Grafiği

Kadın – Erkek Oranı

Geçen yıllarda başvuran kadın sayısı %10 iken bu sene %20′lere çıkmış durumdayız. Gurur verici bir gelişme. Computing Research Association‘ın yaptığı bir araştırmada, dünyada bilgisayar bilimleriyle uğraşan kadınların sayısının 1980′lerde %40 iken günümüzde %20 lere düştüğü tespit edilmiş (Ben buna Britney Spears Effect diyorum). Dünya’da %20 lerdeyken stajyerlerimiz arasında %10 idi ve şu anda  %20, yani Dünya normlarına yetiştik. Umarım daha iyi bir tablo da görürüz ileriki senelerde. Belirtmekte fayda var: kabul edilen öğrenciler arasında bu oran ne yazık ki %15 e düşüyor.

Cinsiyet Grafiği

Kaç kişi kod gönderdi?

Yaptıkları projeleri ispatlayabilen adaylar oyalamada nispeten daha başarılı oldular. Kod göndermeyenlerin bir kısmının okul ödevlerini göndermekten çekindiklerini düşünüyorum. Aslında biz kod gönderin derken yazdığınız herhangi bir kodu kastediyoruz. Yani okul ödevleriniz de buna dahil. Kod görmek istememizin amacı hem yaptığınız projeleri incelemek (hem de gerçekten yazıp yazmadığınızı anlamak) ve kod yazım tekniğinizin ne aşamada olduğunu görmek. Örneğin kullandığınız kitaplıkları, algoritmaları, sınıfları, metotları ve yazım stilinizi incelemek ne kadar çabuk adapte olabileceğinizi ve hangi aşamada olduğunuzu az çok ortaya çıkarıyor. Bu noktada önemli bir uyarı yapmak istiyorum; staj yaptığınız diğer şirketlere ait kodu gönderirken lütfen dikkatli olun, kodu olabildiğince kırpmaya çalışın. Şirkete özel bilgileri ve gizlilik anlaşması yaptığınız kodları göndermeyin.

Adaylar için Python ve Qt bilmek çok büyük bir artı oldu. Pardus’ta geliştirilen projelerin çok büyük bir kısmının Python ile yazıldığını hatırlatayım (Kaptan, YALI, Network Manager, Display Settings, Packet Manager, PiSi, Müdür, Servis Plasmoid’i…). Python’a başlamak için hep bu kaynağı öneriyoruz.

Söylemekte fayda var; seneye bütün adaylara kod gönderme zorunluluğu getirmeyi planlıyoruz. Başvurmayı planlayanlar şimdiden ufak tefek çalışmalarını bir kenarda biriktirebilir.

Kod Grafiği

Kaç kişi blog yazıyor?

Öğrendiklerini zaman buldukça başkalarıyla paylaşan öğrencilerin bizi daha çok etkilediğini söyleyebilirim. Blog yazmaya çalışın ve bilgilerinizi başkalarıyla paylaşın. Blog istatistiğimiz de şöyle:

Blog Grafiği

Sorunlar?

Her işte olduğu gibi bu işte de bizi yavaşlatan en önemli şeyler özensiz doldurulmuş formlar, belirli bir formata uyulmadan hazırlanmış cv’ler ve bir sürü proje yazdığını iddia edip bunları ispatlayabilecek bir kod örneği göndermeyenler idi.

Böyle adayların hemen hemen hepsini Google’da arayarak çok fazla zaman kaybettiğimizi düşünüyorum. Arama sebebimiz ise; kendini yeterince iyi ifade edememiş öğrenciler olabileceğini düşündüğümüzdendi. Bir el de biz atalım dedik, yaptıkları işleri ve kim olduklarını küçük çapta araştırdık. Ama bu yalnızca bu sene için geçerli hatırlatayım.

Seneye çok daha geniş bir form ve zorlu sorular sizleri bekliyor olacak.

Seçilemedim şimdi ne yapmalıyım?

Stajyer olarak seçilemeyenlerin üzüleceği hiçbir şey yok. Hala Pardus’a katkı verebilirsiniz.

  • Pardus ekibi ile iletişime geçin. Neler yapabileceğinizi sorun ama önce şunları yaptığınıza emin olun:
  • İlgilendiğiniz Pardus e-posta listelerine üye olun (yakında e-posta listelerinin ne işe yaradığını anlatan bir yazı yayımlayacağım)
  • Pardus’ta karşılaştığınız her hata için hata girdisi ekleyin.
  • Çözebileceğinizi düşündüğünüz hatalar için yama hazırlayın ve yamayı bize gönderin. (Bu süreci anlatacağım bir yazı da yazacağım)
  • Bol bol döküman okuyun (Linux, Operating Systems, Python, Qt ve bulabildiğiniz Pardus dökümanları)
  • Pardus üzerinde program yazmaya çalışın. (Pardus üzerinde Python ve Qt kullanarak nasıl yazılım geliştireceğinizi anlatan bir yazı dizisi hazırlayacağım)
  • Pardus geliştiricilerinin blog’larını takip edin
  • Özgürlükİçin sitesini takip edin
  • irc.freenode.net üzerinden #pardus kanalına girerek diğer kullanıcılarla etkileşime geçin. (Freenode bütün dünyada açık kaynaklı uygulamalar geliştiren organizasyonların iletişim için kullandığı bir IRC sunucusudur. bkz. http://freenode.net)
  • Pardus’u diğer kullanıcılara tanıtın

Ayrıca:

Kendinize mutlaka bir CV hazırlayın. (Mümkünse nasıl CV hazırlanır üzerine biraz araştırma yaparak)

Unutmayın Pardus’a katkı vermek kendinize de katkı vermektir. Bu yolda öğreneceğiniz bilgiler kariyeriniz için paha biçilemez olacaktır ayrıca açık kaynaklı projelere yaptığınız her katkıyı CV’nize gururla yazabilirsiniz.

Bitti mi?

Şimdilik yazı burada sona eriyor. Yukarıda belirttiğim gibi sıradan bir Pardus kullanıcısından, Pardus geliştiriciliğine giden yolu anlatan yazı dizileri hazırlayacağım.

Staja katılmaya hak kazanan herkesi tebrik ediyorum.

Harika bir yaz bizi bekliyor olacak.

Yaptıklarını ispatlayabilenler tabi ki daha başarılı oldular oylama sırasında. Seneye bütün adaylara kod gönderme zorunluğu koymayı düşünüyoruz.
13
Mar

Bu yazı, staj başvurusunda bulunmak isteyenler ve Özgürlük İçin Podcast'teki staj ipuçları bölümü sonrası gözü korkanlar için. Staj başvurusunda bulunmak istemiyorsanız, Öİ Podcast'i dinlemediyseniz ya da gözünüz korkmadıysa bu yazısı okumayabilirsiniz :)

Geçen sene, staj duyuruları sonrası "Programcılar CV'leri Nasıl Okur?" başlıklı bir karikatürden bahsetmiş, başvuru yapanların nelere dikkat etmesi gerektiğini göstermeye çalışmıştım. Bugün yayınlanan Podcast'i dinlerken, karikatürün gereğinden fazla ciddiye alınabileceğini fark ettim. Sevgili Seda (Akay) ve Gizem (Belen), karikatürdeki "işletim sistemi ya da derleyici yazdıysanız puan kazanırsınız" derken, duyduklarım beni bile ürküttü. Geçen sene o karikatürü günlüğümde yayınlamam ve Gizem'e "geçen sene gönderdiğim karikatürde güzel tavsiyeler var" demem o kadar da iyi bir fikir değildi sanırım.

İşletim sistemi ya da derleyici yazmadıysanız, 3+ programlama dili bilmiyorsanız, bilgisayar kulübüne başkanlık yapmadıysanız, yarışma kazanmadıysanız korkmayın. Benim çizmediğim bir karikatür bu, bazı maddelerini çok beğendiğim için eklemiştim günlüğüme. Okunmasını tavsiye ederim (hâlâ), ama çok fazla da ciddiye almayın. "Pardus'a staja girmek, TÜBİTAK sınavını geçmekten zor" diye söylenmeyin, yok öyle bir şey :)

Ek: Karikatürü, Podcast'e konu olsun ve ziyaretçi sayım artsın diye yayınladığıma dair iddialar asılsızdır :)

29
Eyl

Not: Bu bir yazı dizisidir. 1′inci, 2′inci ve 3′üncü hafta yaptıklarımı okumak isteyebilirsiniz

  • 16.gün: Subprocess ile synergy süreçini başlatıktan sonra, subprocessin metotlarından biri olan “pid” ile sürecin pid numarasını alıp, “kill” metodu ile süreci öldürebiliyorduk. Fakat bu bende çalışmıyordu. Bugün o yüzden biraz bununla uğraştım, problem günlerdir vardı aslında fakat ben hep sonraya ertelemiştim. Sonra Python’un listelerine bir e-posta attım ve bu konuyu belirtmiştim, kendileri de benim daha önce denediğim yöntemlerden bahsetmişti. Yani sorun başka bir yerdeydi. Sonra anladım ki synergy’i -f ibaresi ile çalıştırmam gerekiyormuş, diğer türlü daemon olarak çalışacak ve arka planda öldürdüğümde bile kalıntıları kalacaktı. Bunu anladıktan sonra birde subprocess’i kullanmayı da bırakıp doğrudan QProcess kullanmaya başladım. Kullanmamın sebebi ise madem PyQt kullanıyorum, Qt ilgili fonksiyonlar kullanayım bir bütünlük olsun demiştim(subprocess mi QProcess mi sorusunu tam cevap bulamadım yine de). Bunun dışında konsol’da çıkan synergy çıktılarını(stdout) da parse etmeye çalıştım. Düzenli ifadeler bilgim yeterli değildi, Faik abi sonra kolay bir yol gösterdi. Bu sayede doğrudan çıktıdan synergy’inin bağlanıp bağlanmadığını görebiliyordum. Bunları da libnotify’e bağladım. Yani bağlantı olduğunda sistem çekmecesinden bilgilendirme balonu çıkacaktı.
  • 17.gün: Tüm gün setup.py ile uğraşmışım, fakat sonuç alamadım. Sinirlenmişim baya :)
  • 18.gün: Setup.py dosyasını halletim, kolaymış fakat ben bilmediğimden değişik şeylere bakmışım. Setup.py ile kolay bir şekilde .tar.gz yani kaynak kod paketleri oluşturabiliyordum. Sonra pspec.xml dosyası da hazırlamışım. Ardından sistem’de pisi ile kurulunca çalışıp çalışmadığını test ediyordum, her seferinde de pspec.xml’deki dosya kısmını değiştirmem gerekiyordu(kaynak değişti için sha1sum da değişiyordu). Bu yüzden Emre’nin kendi isteklerine göre yazdığı bir betiği kendi isteklerime göre değiştirdim. Kendisi kaynak’tan paket oluşturuyor, ssh ile sunucuma yolluyor, sha1sum oluşturuyor, sonra bu sha1sum’u pspec.xml’e ekliyor, pisi paketini inşa etmeye başlıyor, pisi paketinin içeriğini lspisi ile gösteriyor sonrasında ise kurmak isteyip istemediğimi bana soruyor. İşleri otomatik bir yola sokuyor yani.
  • 19.gün: Birden fazla sunucu aynı istemci’ye istek yolladığında istekler kendi arasında çakışıyordu. Sadece biri bilgilendirme balonu ile gözüküyordu. Bu sorun ile baya uğraştım, kod’u bu yönde ciddi bir şekilde değiştim ve sonunda halletmiştim. Bununla beraber notifier.py dosyasını da değiştirdim. Günün sonuna doğru da Işıl ve Gökçen ile yüksek lisan, lisan, üniversite’deki olaylar, ileride ne yapabiliriz gibi konular hakkında konuştuk, keyifli bir sohbeti açıkçası.

  • 20.gün: Bugün biraz serbest geçmişti, işleri ağırdan aldım biraz galiba. Yine de daha önce eklemek istediğim otomatik tanımlama özelliğini eklemiştim. Google Suggest’de arama yaparken anlık ileti ile size özel aramaları gösteriyordu. Bu tarz bir şey, bizde ise sunucu liste’sindeki sunucuları anlık ileti şeklinde bize gösteriyordu. Şirketinizde 20-30′dan fazla bilgisayar varsa bir bilgisayarın ismini liste’den seçmek zor olacak bu yüzden ismini biliyorsanız ilk harflerini yazarak doğrudan sunucuya ulaşmanızı sağlayabilir. Bunun ardından uygulamayı yine bir kaç test ettim ve gözüme çarpan ufak hataları düzeltim. Sonrasında ise README, AUTHORS gibi dosyaları oluşturdum. Birde setup.py’deki hataları da düzelttim. Tüm bunlar bittikten sonra uygulamayı Kde-apps.org‘a ekledim ve 0.1 sürümü olarak çıktığını açıkladım.

    Sonrasında ise herkes vedalaştı ve stajımız resmi olarak bitmişti(herkese tekrardan çok teşekkür ederim). Güzel bir zaman geçirmenin mutluluğu ile odamın yolunu tutmuştum.

27
Eyl

Not: Bu bir yazı dizisidir. 1′inci ve 2′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 11.gün : Kod temizlemesi ile başladım. Proje’ye başlarken aniden giriş yaparak başladığım için modüler,fonksiyonlar hepsi birbirine girmişti. Kod’ları biraz daha düzgün bir hale getirdikten sonra, avahi’nin yolladığı verileri parse etmeye başladım. Daha önce sadece sunucu’yu alıyordum. Fakat artık seçtiğimiz bilgisayarın pozisyonu da yolluyorum. Fakat yollarken verilerde hata oluşuyor. Verileri sadece “string” türünde yollayabiliyorum. O yüzden kolay edilebilecek bir şekilde yollamaya çalıştım. Öğlenden sonra Faik abi gelip bir bakmıştı, avahi ile yollanan verilerde sorun çıktığını neden olduğunu da bilmediğimi anlattım, sonra kendisi ile bunu bir şekilde çözmeye başardık. Bunun dışında subprocess ile oluşturduğum süreçleri, uygulama kapatırken öldürmem gerekiyordu. Oluşan süreçlerin pid numalarını bir şekilde alma ve öldürme işlemlerine baktım kısaca. Günün sonuna doğru ise avahi ile yolladığım verileri parse etme fonksiyonu ile geçirdim
  • 12.gün: Sinerji’nin kullanabilir sürümü çıktı. Avahi ile yollanan verileri parse edebiliyorum artık. Ayrıca QSystemTray de ekledim, yani artık Sinerji bir tray uygulaması ve doğrudan sistem erişilebilinecek. Ayrıca arayüz’deki iki tane radio butonun da sildik. Sunucudan yollanan istekler bundan sonra istemcisinin arayüzüne yansımayacak, onun yerine oluşturduğum QSystemTray’ın kendi metodu olan showMessage() ile gösterilecek. Yani kısaca bir balon çıkacak ve ona tıkladığımızda kabul etmiş olacağız.
  • 13.gün ve 14.gün: Bu günleri günlüğüme tek bir yazı olarak yazmışım. İki gündür tray işi ile uğraşıyormuşum. showMessage() metodu yerine DBus’un kendi bilgilendirme balonlarını kullanacağız. Çünkü Qt’nin balonlarına buton ekleyemiyoruz, DBus’un kendi balonlarına ise buton ekleyebiliriz, böylelikle istemci tarafında çıkan balonlar’da “kabul” ve “iptal” gibi buton çıkacak ayrıca. Sunucu tarafı synergy’i başlatıktan sonra, diğer bilgisayarda arka planda çalışan _sinerji._tcp arama servisi bizim sunucuyu bulacak. Sonra da bu balon çıkacak. O yüzden belirli aralıklarda sinerji servisi araması lazım uygulama. Bunu da QTimer ile halletmişim. Kendisi belirli aralıklarda _sinerji._tcp servisini arıyor. Uygulama bitmiş(böyle demişim :)). Yarın Faik abi’ye gösterip, projenin bittiğini söyleme niyetim olmuş. (Fakat bitmediğini sonraki gün anlayacağım)
  • 15.gün: Faik abi’ye gösterim ve kendisi ile yaklaşık 7-8 tane yapılması gereken iş bulduk(uygulama bitmemiş yanı :)). İlk önce uygulamadaki bazı hataları düzeltim. Neler olduğunu yazmamışım günlüğüme. Ardından “Disconnect” adında bir QDialog oluşturmuşum. Yani bir tane bilgilendirme arayüzü. Örneğin istemci, sunucun yolladığı isteği kabul ettikten sonra ne durumda olduğunu kullanıcıyı bildirmesi lazımdı. Arayüzün kaybolup, onun yerine sistem çekmecesindeki simgeye tıkladığımızda bu bilgilendirme arayüzü çıkması gerekiyordu. QDialog yerine ilk başta QMessageBox kullandım, fakat onun sinyal yollamadığını, bu yüzden kullanıcının tıkladığı butonları belirli fonksiyonlara bağlayamayacağımı öğrendiğim için günün sonuna doğru QDialog ile yeni bir arayüz oluşturdum.
25
Eyl

Not: Bu bir yazı dizisidir. 1′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 6.gün: Bugün avahi ile hem servis oluşturma hem de servise arama işiyle uğraştım. Sonrasında ise arama ve bulma işlemlerini halletikten sonra bunları birer fonksiyon haline getirdim. Böylelikle istediğim her servis için ayrı ayrı modül yazmak zorunda kalmadım. Bunun dışında PyQt4 kullandığım için DBusGmainLoop yerine DbusQtMainLoop kullanmam gerektiğini öğrendim. İnternet’te bu konuda pek bilgi bulamamıştım, fakat sonra Google Codesearch’de bir şeyler buldum ve entegre etmeye başarmıştım.(Blog’a da bir yazı yazmışım bu aralar)
  • 7.gün: Bugün tüm gün createsynergy.py adlı modülü oluşturma ile uğraşmışım. Bu biraz kafamı kurcalıyordu nasıl yaparım ederim diye. Synergy’nin ayarların kaydedildiği bir dosya var ve biz Synergy’i çalıştırdığımızda bu dosyadan verileri okuyarak başlıyor. Sinerji’de ise ayarladıktan sonra bu dosya oluşması lazım ki Synergy bu dosyayı okusun. İlk başlarda zor gelmişti, yapamamıştım. Hatta o gün bu konuda mesai bitimine kadar da bir şey yapamadığımı hatırlıyorum. Akşam odamda düşünürken birden dank etti ve yazmaya başlamıştım ve bitirmiştim.
  • 8.gün: synergy.conf dosyasını oluşturmayı yapabiliyordum. Fakat parse etmeyi bilmiyordum. Yani parse işini halleden modülü yazmamıştım. Onu da bugün bitirdim. Kullanıcı sinerji’yi çalıştırdığında ilk önce bu dosya’yı okuyarak daha önceki ayarları arayüze yansıtacak. Yani her zaman her seferinde aynı işleri yapmaktan kurtaracaktı. Bunun dışında _sinerji._tcp servisini oluşturma ve bulma koduyla ilgilendim. Henüz bilmediğim bir nedenle iki tane servisi ayna arattığımda uygulama çöküyordu. Ya da aynı anda arama ve bulma yapınca da çöküyordu. Bunun nedenini bulamamıştım bugün(Sonraki günler çözüme ulaştım ama)
  • 9.gün: Günlüğümde bu gün için 2-3 satırlık çok kısa bir şey yazmışım. Hala aynı anda arama ve bulma işi ile uğraşıyormuşum bu gün. Fakat henüz çözememişim olayı. Birde sinerji.py yani bizim ana betiğimizdeki avahi ile olan kısımları ayırıp modül olarak ayrı bir dosya olarak yazmışım. Galiba bir iş bitmeden başka bir işe başlayamıyorum. 2 gündür uğraştım bu konu üzerinde.
  • 10.gün: Bugün 2 gündür uğraştığım çökme problemini çözmüşüm. Sorun DBusQtMainLoop olayının her seferinde çalışmasından kaynaklanıyormuş. Ben bu çalıştırma işini avahi’deki arama ve oluşturma fonksiyonların başına koymuştum. Fakat sadece bir kere çalıştırmam yeterliymiş. Bunu main() altına koyduktan sonra sorunsuz bir şekilde iki tane aramayı aynı anda çalıştırmaya başardım. Yani artık hem _workstation._tcp hem de _sinerji._tcp servislerini ağ’da arayabiliyordum. Ayrıca bunun dışında artık sunucu’yu başlatıktan sonra, verileri yollamaya da başardım. Yani oluşturduğum _sinerji._tcp servisi ile verileri de yollayabiliyordum. Birde son olarak os.system yerine subprocess kullanmaya başladım. Normalde os.system ile bash üzerinden istediğimiz komutları çalıştırabiliyorduk. Fakat sonra Gökçen bunun iyi bir fikir olmadığını söyledi bana. Çünkü kullanıcı ayarlarda “rm -rf /” gibi bir isim girebilir ve biz bunu çalıştırabiliriz. Subprocess’de bu olay yok, ön tanımlı olarak bash kapalı geliyor. Kendi içinde çalıştırıyor.