Uninstall Python Package from OS X

I have been using Python 3 on my OS X provided by the installation package from Python.org for some time, and recently I have decided to switch to Python installation from Homebrew for easier management.

In order to uninstall the Python from package, you must remove the files and symbolic links to them.

WARNING: This commands will remove all Python versions installed with packages. Python provided from the system will not be affected.

sudo rm -rf /Library/Frameworks/Python.framework
cd /usr/local/bin
ls -l . | grep '../Library/Frameworks/Python.framework' | awk '{print $9}' | xargs sudo rm

You should also remember to remove the application folder, where x.y is the version number of your installation (ie. 2.7 or 3.4).

sudo rm -rf "/Applications/Python x.y"

AB2015: VirtualBox’a CentOS Kurulumu

Geçen sene olduğu gibi, bu sene de sevgili Ali Erdinç Köroğlu ve Erdem Bayer ile Akademik Bilişim Konferansı öncesi 31 Ocak – 3 Şubat tarihleri arasında 4 gün boyunca Ağ Yönetimine Giriş anlatıyor olacağız. Katılımcıların anlatacaklarımızı kendileri uygulayıp deneyimleyebilmeleri için kişisel bilgisayarlarına CentOS 7 yükleyip gelmelerini bekliyoruz. Katılımcılar bu yazıda anlatılanları adım adım uygulayarak kurulumu gerçekleştirebilirler.

CentOS 7 Minimal sürümünü indirmek için: http://ftp.linux.org.tr/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-Minimal.iso

Bilgisayarınız üzerinde değişiklik yapmadan bir işletim sistemi yükleyebilmenizi sağlayan en pratik yöntem bir sanal bilgisayar kullanmaktır. Sanal bilgisayar, bilgisayarınızdaki işlemci, bellek, ekran kartı gibi kaynakları kullanarak bir bilgisayarmış gibi davranan yazılımlardır. VirtualBox isimli özgür yazılım aracılığıyla kolayca sanal bilgisayarlar oluşturabiliyoruz. VirtualBox’ı kendi internet sitesinden indirebilirsiniz: https://www.virtualbox.org/wiki/Downloads

VirtualBox’ı kurduktan sonra çalıştırın ve “Yeni” butonuna basarak sihirbazı başlatın. Oluşturulacak sanal bilgisayar için adı kısmına “centos” yazın. İşletim sistemi türü otomatik olarak “Linux” ve “Red Hat (64 bit)” olacaktır. Devam butonuna basın.

Bellek boyutu olarak 512 MB yeterli olacaktır. Devam butonuna basarak bir sonraki aşamaya geçin. Bu aşamada “şimdi sanal sabit disk oluştur” seçeneğini seçin ve “Oluştur”a basın. Açılan ekranda “VDI (VirtualBox Disk Kalıbı)” seçeneği ile devam edin ve sonraki ekranda “değişken olarak ayrılan”ı seçin. Disk boyutu olarak 10 GB yeterli olacaktır.

Sanal bilgisayarı oluşturduktan sonra VirtualBox menüsünden “Tercihler”i açın ve “Ağ” sekmesinde yeni bir “Sadece-Anamakine Ağı” ekleyin. Daha sonra tercihleri kapatın ve oluşturduğunuz sanal bilgisayarı seçerek “Ayarlar” penceresini açın. “Ağ” sekmesinde ikinci bağdaştırıcıyı etkinleştirin ve “Sadece-Anamakine Bağdaştırıcısı”na bağlayın. “Ayarlar” penceresini de kapattıktan sonra sanal bilgisayarı “Başlat”ın.

Açılan pencerede indirmiş olduğunuz CentOS-7.0-1406-x86_64-Minimal.iso dosyasını seçip “Başlat”a basın. Klavyenizdeki Enter tuşu ile “Test this media & install CentOS 7″ seçeneğini seçerek kurulumu başlatın. Dil seçimi ekranında listeden Türkçe’yi seçerek devam edin. Kurulumla ilgili çeşitli seçeneklerin olduğu bir ekranla karşılaşacaksınız. Üzerinde ünlem işareti bulunan “Installation Destination” seçeneğini seçip sol üstteki “Done” butonuna basın. “Begin Installation” butonuna tıklayarak kuruluma başlayabilirsiniz.

Kurulum sırasında CentOS sizden sistemin yönetici hesabı için parola belirlemenizi ve bir kullanıcı hesabı oluşturmanızı isteyecektir. “Root password” seçeneğine tıklayarak yönetici hesabı için bir parola belirleyin ve “Done” butonuna basın. Bu parolayı sakın unutmayın! Eğer yeterince karmaşık bir parola belirlemediyseniz “Done” butonuna bir kez daha basmanız gerekecektir. Sonra “User creation” seçeneği ile bir kullanıcı hesabı oluşturun. Username kısmında Türkçe karakter ve boşluk karakteri kullanmamaya çalışın. “Make this user administrator” seçeneğini işaretleyerek kullanıcınıza yönetici haklarını verin ve yine “Done” butonu ile işlemi tamamlayın. Kurulum işlemi bittiğinde sağ alttaki “Finish configuration” butonu ile az önce yaptığınız hesap işlemlerinin de sisteme kaydedilmesini sağlayın ve yeni sanal bilgisayarınızda oturum açmak için “Reboot” butonuna basın.

Eskişehir’de görüşmek üzere!

Temassız Mart

Geçtiğimiz ay, temassız ödeme çözümleri üzerine minik bir araştırma yaptım. Amacım bu çözümlerin Türkiye’deki kullanılabilirliğini ve yaygınlığını incelemekti. Bir ay boyunca banka kartım ile yaptığım her ödemede temassız ödeme seçeneğini özellikle sordum.

1 Mart – 31 Mart tarihleri arasında banka kartım ile 45 ödeme yaptım. Bu ödemelerin sadece 15 tanesinde temassız ödeme seçeneğini kullanabildim. 11 tanesinde işlem yapılan cihazın temassız özelliği yapılandırılmamış olduğundan kullanamadım. Diğerlerinde ise temassız özelliği hiç mevcut değildi.

Market ve gıda zincirlerinde temassız ödeme sistemleri ile karşılaşmanız neredeyse kesin gibi. Üstelik destekleyen tüm POS cihazlarının temassız ödeme için yapılandırılması tamamlanırsa ödemelerinizin %60’ını temassız gerçekleştirmeniz mümkün olabilir.

Bu teknolojinin daha da heyecan verici yanı, NFC destekli akıllı telefonların artması ile birlikte banka kartı (hatta cüzdan) taşıma eziyetinden kurtulabilecek olmanız. Temassız bir gelecek çok da uzakta değil.

Creating an Instance of an Object without Calling Its Constructor in PHP

Today, I stumbled upon an article in a local PHP developers group. It was about creating an instance of an object without calling its constructor (as mentioned in post title).

At first, the idea made no sense to me. Because, constructor method is run every time an object is instantiated, this property is the whole point of writing a constructor. Out of curiosity, I started reading the article. As it turns out, it is really beneficial for testing and mocking purposes. The more interesting thing is the method used to achieve this is simply brilliant.

The trick which originally occurs in PHPUnit source code is as follows:

$object = unserialize(
    sprintf('O:%d:"%s":0:{}', strlen($className), $className)
);

As of PHP 5.4, there is a built-in method for this in ReflectionClass:

$reflection = new ReflectionClass($className);
$object = $reflection->newInstanceWithoutConstructor();

Graphical Visualization of databases with PostgreSQL Autodoc

When it comes to software, database systems are beneficial in many ways. They offer us to keep our data organized and a fast way to access them. However as the number of components in a software project increases, it gets harder to preserve the organized structure. In situations like this, visualizing the scheme helps to understand the structure and the relations between the tables.

PostgreSQL Autodoc provides simple tools for description of the PostgreSQL databases in various formats such as HTML, DocBook, Dia and GraphViz. Continue reading Graphical Visualization of databases with PostgreSQL Autodoc

Sharing Screen Sessions

Recently, I learned a new feature of screen, it is referred as “multi display mode” in the manual. You can attach to a screen session that is not detached and the session is simply shared. In this mode, anything you typed are transferred simultaneously to the other display(s) as well. My mentor from my Google Summer of Code project used this feature to work collaboratively. In order to get in to multi display mode, you need to use “-x” parameter:

screen -x

If there are multiple sessions, you need to provide the session name as well:

screen -x session_name

Quick Guide to D-Bus with Python

Recent weeks, I dealt with D-Bus for my Google Summer of Code project. I was trying to control system services, and systemd has a D-Bus interface. In the beginning, D-Bus seemed a little confusing for me, but I believe I understand it now. In this post I will try to explain it in simple terms and an example.

D-Bus is a interprocess communication tool. It delivers messages to applications. The most confusing thing for me was that taxonomy of D-Bus having several terms such as bus names, objects, paths, methods, signals, properties, interfaces, proxies… But when you learn their meanings, the bigger picture gets more clear.

  • Bus names are applications. They often have well known names in a format similar to namespaces in Java (e.g “com.onurguzel.MyIntergalacticApplication”).
  • Objects are synonymous to the objects in programming languages, and paths are the object instances.
  • Methods are functions that is run on the object, and signals are the broadcasts from the object. Properties are the constants or variables in the object.
  • Interfaces are the types of the object. Thus, some object may support several interfaces. Their format is the same as bus names, but they should not be mixed with each other.
  • Proxies are higher level objects. When a method is invoked on the proxy, it is converted to D-Bus method call message, sent, and reply message is returned. They offer easier operation with D-Bus then manually creating messages, sending them and waiting for a reply.

Since all major Linux distributions use NetworkManager for network connections, I preferred to create this tutorial with it.

import dbus

bus = dbus.SystemBus()

# Warning: Bus names and interfaces are different terms.
# Just because they contain same format or even same data
# does not mean they are the same thing.
# I used these variables to denote the diffrance where bus names and
# interfaces are used.
NM_BUSNAME = 'org.freedesktop.NetworkManager'
NM_IFACE = 'org.freedesktop.NetworkManager'

# Create Python object from /org/freedesktop/NetworkManager instance
# in org.freedesktop.NetworkManager application.
nm = bus.get_object(NM_BUSNAME, '/org/freedesktop/NetworkManager')

# Get list of active connections from the properties
# "Get" method is in "org.freedesktop.DBus.Properties" interface
# It takes the interface name which has the property and name of
# the property as arguments.

connections = nm.Get(NM_BUSNAME, 'ActiveConnections',
                     dbus_interface=dbus.PROPERTIES_IFACE)

# While invoking a method on the object, dbus_interface keyword
# argument is provided to specify which interface has the method.

# Now, lets disconnect. This time we are using the NetworkManager
# interface: "org.freedesktop.NetworkManager"
for path in connections:
    nm.DeactivateConnection(path, dbus_interface=NM_IFACE)

If you have questions about this tutorial, you can ask in the comments section below. For more information about D-Bus, my references:

A Very Delayed Update on My GSoC Status

It has been over a month since summer coding started. Unfortunately, although I am not a procrastinator, I could not perform my best on the project. Besides following news about #OccupyGezi, I have read the Pyramid documentation in the community bonding period. Coding time has also past reading documentations. I spent my time reading and understanding SQLAlchemy and designing the modules for the project in my head.

I have managed to get my focus on my work, two weeks ago. Now, I have several weeks to catch up. The mistakes I’ve made so far:

  • I did not ask my mentor for advices.
  • I got distracted a lot. It was very hard to handle both summer school and summer coding. Because, school has its own assignments, too.
  • Even though I make my commits atomic, instead of pushing them regularly, I kept them local until I finished working on the feature.
  • I did not write any blog posts about my status or what I have done.

I am not proud of this failure or mentioning it here. However, I have learned from my mistakes, and I will not repeat them. You will see more frequent updates on my project status here. Keep following!

Google Summer of Code Heyecanı

Google Summer of Code‘a kabul edilen projelere baktığım an muhteşemdi. Öğrenciler arasında arama yapmak için adımı yazdım ve sayfa “Yükleniyor…” ibaresiyle takılı kaldı. Aramayı tekrar tetiklemek için son harfi silip tekrar yazdım, ama ekrana bakamadım. Gözlerimi kapattım, gerçekten, ve cesaretimi toplayıp açtım. İçinde adım geçen bir sonuç vardı. İnanamadım, o yüzden az önce yaptıklarımı tekrarladım: adımı yazdım, gözlerimi kapattım ve tekrar açtım. Pardus’a stajyer olarak seçildiğimi öğrendiğim andan çok da farklı değildi. Yüzümdeki gülümsemeye engel olamıyordum, heyecandan titriyordum. Hiçbir şeye tepki veremeyecek kadar kilitlenmiştim ve bolca terliyordum. Kendime sürekli nefes almam gerektiğini hatırlatıyordum. Elimi telefona uzatım birkaç dakika önce görüştüğüm annemi tekrar arayıp anlattım. Bu iki buçuk dakikayı hayatım boyunca hatırlayacağım.
Continue reading Google Summer of Code Heyecanı

Passion of Google Summer of Code

It was an epic moment when I was checking the accepted projects for Google Summer of Code. I typed my first name and searched through students. The page stuck “Loading…” I erased the last letter ‘r’, and typed it again to trigger the search once more. I literally closed my eyes, and prayed, and dared to open. There was a result, with my name. I couldn’t believe, so I repeated my last process: typed my name, closed my eyes, and opened again. It was not so much different the moment I was selected for internship at Pardus. I could not stop myself from smiling, and I was shaking, a lot! I was shocked, and constantly reminded myself to breathe. I hit the redial button on my phone, told my mom. I will remember that two and half minutes forever.
Continue reading Passion of Google Summer of Code