How to Run Flask Applications with Nginx Using Gunicorn

We have recently bought a VPS for İTÜ24, the online newsletter of Istanbul Technical University. The server is running on Ubuntu Server 12.04 operating system. Due to limited memory resources and performance concerns, we preferred to setup nginx as web server.

Our server will serve several web pages and applications developed in various programming languages, such as PHP, Python, Ruby (on Rails). Currently, we have one Python application, which is using Flask framework.

How we run Flask application with nginx, step by step…
Continue reading “How to Run Flask Applications with Nginx Using Gunicorn”

Resetting Your Linux Password

If you cannot remember your password on a Linux operating system, you can simply reset it within minutes. Here is how to do:

  1. The only thing you need is a bootable Linux Live CD or USB thumb drive. You will also need “sudo” command to achieve this, make sure you have root privileges on your bootable Linux media.
  2. Once you boot into your Live CD/USB, mount the disk partition which Linux is installed on.
  3. There is a (magical) Linux command: chroot. This will allow you to change your root directory to mounted partition. Open terminal and run this command.: (Change “/media/disk” to your mount location.)
    sudo chroot /media/disk
  4. When the prompt changes, run this command, and enter new password: (Change “user” to username whose password to be reset.)
    passwd user

After setting the password, you can now restart the computer (do not forget to remove Live CD/USB), and login using new password.

IMPORTANT NOTICE: PLEASE RESPECT PRIVACY OF OTHERS

İTÜ Laboratuvarlarında Dropbox Kurulumu

Dropbox, dosyalarınızı internet üzerinde barındırarak her yerden erişmenizi sağlayan harika bir bulut depolama hizmeti. İnternet tarayıcısı üzerinden dosya yüklemeniz ve yüklediğiniz dosyalara erişebilmeniz mümkün olmasına rağmen, bazı durumlarda bu seçenek kullanışsız bir işkenceye dönüşebiliyor.

Dropbox’ın istemci yazılımı, belirlediğiniz klasör içinde yaptığınız her değişikliği otomatik olarak ve anında internete gönderiyor. Bu yazılımı İTÜ’deki öğrenci bilgisayar laboratuvarlarındaki tüm bilgisayarlarda kurulu olan Fedora’ya yüklemek mümkün. Fedora’yı kullanmak için bilgisayarı düğmesine 1 saniye süreyle basarak kapatın ve tekrar açtığınızda açılış menüsünden Fedora’yı seçin. Eğer bir Dropbox hesabınız yoksa bu adresten kaydolabilirsiniz.

Dropbox yönetim aracını indirdikten sonra, Fedora menüsünden Terminal’i açın ve aşağıdaki komutu yazıp Enter tuşuna basın:

python Downloads/dropbox.py start -i

İndirme işlemi tamamlandıktan sonra Dropbox istemci yazılımı kurulacak ve çalışacak. Karşılama sihirbazı, hesabınızı yapılandırmanıza yardım edecek.

UYARI: İTÜ hesabınızın 100MB kotası olduğunu ve Dropbox ile kolayca doldurabileceğinizi unutmayın.

Bu “Gönül”e Bu Teşekkür Yetmez

Pardus’ta staj yaparken, camia koordinatörlerimizden Koray (Löker), CeBIT Bilişim Eurasia 2011 için faydalı olabileceğini düşünerek geçmiş yıllarda fuarda edindiğim tecrübeleri paylaşmamı istemişti. Ben de, fuarda görev de alarak daha fazla yardımcı olmayı teklif ettim. Pardus ekibinde fuar organizasyonuyla görevli olan Nihan (Katipoğlu) ile birlikte çalışmalara başladık. Eksik, hatalı yaptığımız işler de oldu ama genel olarak oldukça başarılı bir organizasyondu.

Geçen seneden farklı olarak, daha düzenli bir stand yerleşimi vardı. TÜBİTAK’a ayrılan 100 m2 alan içerisinde Pardus ekibinin yanı sıra AKİS ve MAM‘a ayrılmış alanlar da bulunuyordu. Ek olarak SIGMA R&D ekibinin Pardus yüklü bir bilgisayar ve Kinect algılayıcısı ile geliştirdiği, el hareketleri ile bilgisayarı yönetebilmenizi sağlayan Doğal Arabirim (İng. Natural Interface) isimli projesi de standımıza renk katan bir gösteriydi.

Gönüllülerimiz, Pardus tanıtırken yorulmak nedir bilmeden, 4 gün daha olsa, 4 gün daha anlatırız dediler. Aynı anda birden fazla ziyaretçi ile ilgilenirken, bir yandan da gelemeyenler için Twitter’da ve Özgürlükİçin’de paylaşımlarda bulundular. Hepsi birer süper kahraman ve kocaman bir tebriği sonuna kadar hak ediyorlar.

  • Her saniye, olaylara hakimiyeti ile koordinatör ünvanının hakkını tam anlamıyla veren Nihan Katipoğlu’a
  • Evinde otururken bile, benim stand alanında yapabildiğimden fazlasını yapan görünmez kahraman Mete Bilgin’e
  • Güzel işler yapmak için bir üst sınır olmadığını bana öğreten, eski topluluk yöneticilerimiz Ali Işıngör ve Gizem Belen’e
  • Benim için bir Pardus geliştiricisinden daha çok, bir “abi”, bir arkadaş olan Ekin Meroğlu, Gökmen Göksel, Fatih Arslan ve Akın Ömeroğlu’na
  • Beni kırmayıp ziyaretimize gelen Özgürlükİçin topluluk yöneticisi Zeki ve dünyalar tatlısı eşi Şebnem Bildirici’ye
  • Fuardaki varlığıyla hepimizi güvende hissettiren Uğur Eke’ye
  • Pardus’a katkılarının karşılığı asla ödenemeyecek olan, kısa ziyareti ve uzun sohbetiyle hepimizi keyiflendiren Necdet Yücel’e
  • Kıskanılası havalı işlerle uğraşan Eren Türkay’a
  • Özgür yazılım için mücadelelerine gönüllü olarak da devam eden eski stajyerlerimiz Caner Başaran, Merve Karabulut, Tuncer Çolak, Uğurcan Ergün ve Sinem Oğuz’a
  • Bir ara akıllı tahtayı kendisine hediye etmeyi düşündüğümüz, yorulmadan/dinlenmeden Pardus anlatan İ. Murat Gökbulut’a
  • “2010 yılında tadı damağımızda kaldı” diyerek bu sene de aynı heyecanla gönüllü olan Filiz Günel, Ülgen Sarıkavak, Zeynep Dikici’ye ve çok istiyor olmalarına rağmen çeşitli sebeplerle sadece bir gün aramızda olabilmiş Umut Albayrak, Göktuğ Korkmaz, Hüseyin Özkan ve Fırat Zencirci’ye
  • Bu sene ilk defa gönüllü olan ve tanıştığıma çok memnun olduğum Ebubekir Akgül, M. Sami Gürpınar, Murat Açıkgöz, Murat Savaş, Nesrin Kalender, Samedhan Karameşe’ye

ayrıca orada bulunup gücümüze güç katan, isimlerini anmadan geçemeyeceğim Serdar Dalgıç, Pamir Talazan, Kaan Özdinçer ve Bertan Gündoğdu’ya koordinatörlük görevinde beni yalnız bırakmayıp destek oldukları için hem kendi adıma hem Pardus projesi adına teşekkür ederim. Bu isimlerden bir tanesi bile eksik olsaydı, bu organizasyon bu kadar güzel olamazdı.

Bu “gönül”e bu teşekkür yetmez ama, iyi ki varsınız!

Internship at Pardus

Hi, I’ve started working on Pardus linux distribution as an intern last week. This post is the summary of the first week at the office…

I’ve been supporting Pardus for almost 6 years and being volunteer at the events occasionally. I’ve met most of the developers during these events. However, I had a great opportunity to met the ones who I haven’t met before and the other interns at the meeting in first day.

Other four days of the week, Pardus developers organized some workshops which are useful for interns in these subjects: Python, vi, ÇOMAR, PiSi, Qt, Linux kernel, testing and debugging… We had enough time to practice too.

I have an active developer application request, and I have plans for Package Manager. Since I’m in the same office with its developer, we had chance to brainstorm. Gökmen has also requested me to make some improvements in package details window. That window contains a web page and making improvements is a piece of cake!

While other interns practice what we’ve learned from workshops, I worked on improvements for the details web page. For development, I preferred nginx web server which I use a lot recently. However, I had to make some changes in php package to be able to use it with nginx. I needed to enable FastCGI support, and I had to update libc-client package to do that. After these changes, I’ve managed to build a new php package with php-fpm patch! 😀

Recently, I changed static rating stars with jQuery and Raty plug-in. I’ve also created a new php class to help me with working SQLite database that holds the rating data. It’s almost finished, I just need to implement a log in system for package ratings.

This week on Monday, it became official that my internship project is “improvements on package manager”. Sexy screenshots are coming soon!

Pardus’ta Staj Başlıyor

Bilmeyeniniz için söyleyeyim, TÜBİTAK‘ın desteğiyle geliştirilen Pardus projesinde yaz stajı için kabul edildim. Hatta staja başlayalı bir hafta oluyor. Nasıl geçti, neler yaptık, kısaca özetlemeye çalışayım…

Pardus projesini neredeyse 6 yıldır destekliyorum ve sık sık etkinliklerde de gönüllü oluyorum. Bu etkinlikler boyunca da, geliştiricilerin çoğuyla tanışma fırsatım da oldu. Tanışmakla geçen stajın ilk günü, benim için herkese selam vermekle geçti. Ancak öğleden sonra yaptığımız tanışma toplantısı, tanımadığım geliştiricilerle tanışmak ve diğer stajyer arkadaşlar hakkında bilgi edinmek açısından faydalı oldu.

Haftanın diğer 4 gününde, geliştiriciler tarafından, stajyerlere projelerinde faydalı olabilecek eğitimler verildi. Konu başlıkları şu şekildeydi: Python, vi, ÇOMAR, PiSi, Qt, Linux çekirdeği, hata çözme ve test süreçleri. Eğitimden kalan zamanlarda ise, öğretilenleri pratik yapmamız için kurcalama fırsatımız oldu.

Geliştiricilik başvurumun son aşamasında Paket Yöneticisi’nde yapmayı istediğim değişiklikler vardı. Geliştiricisiyle aynı ofis içerisinde olunca daha rahat fikir alışverişi yapabildik. Böylece planladığım değişiklikleri son haliyle kafamda güzelce şekillendirebildim. Bu konuşmalar sırasında, Gökmen, paket detaylarını gösteren pencere içerisinde de iyileştirmelere ihtiyaç olduğunu söyledi. Pencere içerisinde bir web sayfası gösterildiği için benim için çocuk oyuncağıydı.

Stajın ilk haftası boyunca eğitimlerden kalan zamanlarımı bu konuda çalışarak değerlendirdim. Amaç paket derecelendirme sistemini çalışır hale getirmekti. Çalışırken, son zamanlarda oldukça fazla vakit geçirdiğim ve giderek daha çok sevmeye başladığım nginx web sunucusunu kullanmak istedim. Ancak, Pardus Kurumsal 2’de, php ile kullanabilmek için bazı taklalar attırmak gerekiydu. Öncelikle php’nin, FastCGI desteğiyle derlenmesi gerekiyordu. Bunun için de libc-client paketini de güncellemek gerekti. Değişiklikleri yaptıktan sonra php’yi, php-fpm yamasını da uygulayarak derleyebildim. Birkaç yapılandırma dosyası düzenledikten sonra nginx ile php kullanabiliyordum. 😀

Sonraki günlerde jQuery ve Raty isimli eklentiyi kullanarak, derecelendirme sistemini çalışır hale getirdim. Derecelendirme bilgilerinin tutulduğu SQLite veritabanında işlem yapmayı kolaylaştırmak için küçük bir php sınıfı da tanımladım. Çözülmesi gereken hatalar dışında bitirdim denebilir 🙂

Şu anda, 2. haftanın başlangıcında, geliştiricilerin toplantıdan çıkmasını bekliyoruz. Çıktıklarında proje seçimi yapacağız, heyecan dorukta!

Compaq Armada 110 Running Linux

My roommate has an old computer that belongs to one of his relatives: Compaq Armada 110. It’s operating system was, Windows ME and since he is going to return it after few months we are not supposed to change it. However, he is in love with Linux, and it is really hard to find proper software for daily needs (browsing web, watching movies, reading/editing documents) which runs on Windows ME.

Backing up

We decided to create image of the harddrive, install Linux, and restore image before returning it back. I created disk image with dd command:

dd if=/dev/hda of=/media/externaldisk/backup.img

It took a while, (about 3 hours) so be patient. After we backed up the hard drive, we are free to be “free” 🙂

Verifying backup image

But, I wanted to be sure about the backup is not corrupt. I wanted to try it on a virtual machine using VirtualBox. First, I thought I can run a live Linux, and use dd command to restore it back to an empty virtual drive. But then, I remembered that I’ve read something about converting image files to virtual drives. I searched on Google (you should try, it is amazing!), and reached the command within seconds.

VBoxManage convertdd /media/externaldisk/backup.img /media/externaldisk/backup.vdi

Virtual machine booted up successfully, automatically installed drivers for virtual hardware (except graphics driver). But I didn’t matter for me, because I’m going to restore image to the same computer again, and a successful boot up was all I need to see.

Now, the distro!

Since Armada 110 is ten years old, performance is important. So we had to choose a light desktop environment, like XFCE. xubuntu would be the best choice. I wanted to try latest version (11.04), and started installing. It took 40 minutes, and after a restart, it was ready. Performance? It was too much higher than my expectations.

How to Create Hyperlink DIV Elements

Today, I encountered a problem: making div element a hyperlink. For example:

<a href="http://www.onurguzel.com/"><div>content</div></a>

It works, but SHOULD NOT be used. Because it is against the web law: W3C (X)HTML specifications!

A very basic (and valid) solution:

div a { display: block; height: 100%; }
<div><a href="http://www.onurguzel.com/">content</a></div>

However my case was a little bit more difficult:

<a href="http://www.onurguzel.com/">
	<div id="first">
		<div>some content</div>
		<div>some other content</div>
	</div>
</a>

We already know that is not a valid layout. Because a block element (div) is used in an inline element. If I change layout, a have to insert hyperlink tags (a) in all block elements, and the background of the “first” div element will not be clickable. So here comes the solution:
Continue reading “How to Create Hyperlink DIV Elements”