PyQt ile Toplama İşlemi

Anam ağladı şu saate kadar uyumadım. Sonra gittim yürüyüş falan yaptım, hala ayaktayım blog’a yazı yazıyorum. Sonunda Qt ile bir şey yazabildim. Kendi hatalarım yüzünden çok uğraştım ama sonunda başardım. Efendim şimdi kısaca ne yaptık anlatalım. Öncelikle Qt Designer ile tasarımı yaptık. MainWindow penceresine(adı ana pencere zzz) iki lineEdit nesnesi, iki pushButton nesnesi bir de label ekledim. Qt Designer de iken F4 tuşuna basarak sinyal çıkardım sonra dosyayı kaydettim. Ui uzantısıyla kaydediyor tabi bu işimize yaramıyor pyuic4 dosyaadı.ui -o(osmaniyenin o su sıfır değil) dosyadı.py komutuyla dosyamızı py uzantılı bir şekle soktuk. Sonra herhangi bir metin editörüyle açıp düzenlemeye başladık. Öncelike sinyalleri ayarlamak gerek. Sinyal mantığı şu:
obje, sinyal, slot. Slot dediği uygulanacak fonksiyon callback gibi bir şey. self.add ve self.close düzenlemesinin ardından close ve add fonksiyonlarını tanımladım. lineEdit nesnesinden girilen veriyi lineEdit.text() fonksiyonuyla alıyoruz. Bu aldığımız veriyi num1’e aktarmışım göründüğü üzere. Sonra bu num1’i int yani sayı değişkeni olarak alıp int(num1) diğer değişkenle topluyor ardından label nesnesine yazdırmak üzere yolluyoruz. label’a bir şey yazdırmak için label.setText() fonksiyonunu kullanıyoruz. Normalde burda bir “text” yazıldığı için sayı yazmaya çalıştığınızda sorun çıkarıyor, onu da str(result) şeklinde sonucumuzu string’e çevirerek hallediyoruz. Diğer close fonksiyonu sys.exit() ile programı kapıyor anlatılacak bir şey yok. Son olarak app = … diye giden satırları eklememiz gerekiyor ui dosyasını python dosyasına çevirdiğimizde sadece arayüzü çevirmiş oluyoruz, son kodlarla uygulama çalışabilir bir hale geliyor. Uğraştırdı ama hallettik sırada ne var büyüklerimize soracağız.





# -*- coding: utf-8 -*-
#!usr/bin/env python
# -*- coding: utf-8 -*-
#Developed by Ceyhun Alyeşil(ceyhunalyesil@gmail.com)
#http://devador.blogspot.com

from PyQt4 import QtCore, QtGui
import sys

class Ui_MainWindow():
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(267, 236)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(10, 30, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(140, 30, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(110, 140, 46, 14))
self.label.setObjectName("label")
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(50, 80, 75, 24))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(150, 80, 75, 24))
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 267, 19))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.add)
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), self.close)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def close(self):
sys.exit()
def add(self):
num1=self.lineEdit.text()
num2=self.lineEdit_2.text()
result=int(num1)+int(num2)
self.label.setText(str(result))
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "topla", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_2.setText(QtGui.QApplication.translate("MainWindow", "cikis", None, QtGui.QApplication.UnicodeUTF8))

app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)

window.show()
sys.exit(app.exec_())


PCM-4 Göstericiler

//denemelere devam
//bu sefer pointer

#include<stdio.h>

int main()
{
int a;
int*aPtr; /*pointer bu oluyor bak*/

a=8; /*8 değerini atadık*/
aPtr=&a; /*a'nın adresini atadık*/

printf("a'nın adresi %p"
"naPtr nindeğeri %pn", &a, aPtr);

printf("a'nın değeri %d"
"n*aPtr'nin değeri %dn",a,*aPtr);

return 0;
}

Bu yazıda pointer için basitçe bir örnek verdim. Daha karmaşık örneklere ileride geçerim. String konusu var bundan sonra kitapta. O da çok geniş bir konu. Pointerla ikisini birleştirip uzun ama oldukça uzun bir örnek verebiliriz. Bu arada Google Android’e bakıverdim az. Java… çok güzel site kurmuşlar ve irc’de 300 kişi falan oluyor. Moblin, Symbian odalarında 30 40 kişi olduğu düşünülürse ne kadar popüler olduğu ortaya çıkıyor. Keşke Java bilseydim 🙂 Öğrenmeye niyetim yok ama yeter artık dil öğren dil öğren kafam şişti. Uygulama zamanı artık. Java ile yapılanları elbet Python, C, C++ hatta C#’tan birisi ile yapabiliriz herhalde 😀 Bir ara öğrenme hevesi gelmişti şu C konularından önce ama beğenmedim olayını. Geliştirme araçlarını falan.

PCM-3 Diziler

/* bu dizi konusu canımı 
sıkacak */

#include<stdio.h>
#define BOYUT 10

int main()
{
int n[BOYUT]={19,3,15,7,4,2,1,33,5,8};
int a, b;

printf("%s%12s%15sn","Eleman","Değer","Grafik");

for(a=0;a<=BOYUT-1;a++){
printf("%d%13d ",a,n[a]);

for(b=1;b<=n[a];b++)
printf("%c",'*');
printf("n");
}
return 0;
}

Diziler üzerine bir örnek. Fonksiyonları anlıyoruz tamam da o yerleştirme, düzen işleri uğraştırıyor 🙂 KDevelop güzel bir uygulamaymış. Rahat rahat kodladım ve hiç hata yapmadım bu sefer. Bu konudan sonra Pointer konusuna giriş yapacağım. O bölümde diziler geniş bir şekilde kullanılmış, başta biraz garipsedim ama sonra Python’da ki diziler falan geldi aklıma. Mantık benziyor o yüzden sorun yok^^

PCM-2

#include<stdio.h>
int main()
{
int sayici,sayi,toplam;
float ortalama;

toplam=0;
sayici=0;

printf("Sayıyı giriniz(Bitirmek için -1 girin):");
scanf("%d", &sayi);

while(sayi!=-1){
toplam=toplam+sayi;
sayici=sayici+1;
printf("Sayıyı giriniz(Bitirmek için -1 girin):");
scanf("%d", &sayi);
}
if(sayici!=0){
ortalama=(float)toplam/sayici;
printf("ortalaması:%.2f",ortalama);
}
else
printf("sayı girmedinizn");

return 0;
}

Burada girilen sayıların ortalamasını alıyoruz. Güzel bir örnek kodlar uzadıkça yapılan hatalar artıyor keşke C araçlarında da visual stuido da ki gibi otomatik tamamlama olsa. Bu kadar çok hata yapıp nerede ne yapmışım diye aramak zorunda kalmam. Print yazmışım printf yerine yok ” işaretini unutmuşum falan. Zaten gözler bozuk daha da iptal olacak 😀

Pardus ile C Macerası

#include<stdio.h>

int main()
{
int x,y,z,sonuc;
printf("Çarpmak için üç sayı giriniz:");
scanf("%d,%d,%d",&x,&y,&z);
sonuc=x * y * z;
printf("Sonuc=%dn",sonuc);

return 0;
}


Pardus ta ilk C denemem oldu. Önce GCC’yi kurmam gerekti. GVim ile kodları yazdıktan sonra ./a.out yazarak programı çalıştırdım. Kitaptaki örneği birebir kopyaladığımızda farklı sonuçlar çıkıyor. Düz 123 yan yana yazıp çarptırınca büyük rakamlara dönüyor bende scanf’in arasına virgül koydum. Aralarına virgül koyarak yazdığımda düzgün sonucu verdi. Örnekleri teker teker bloga ekleyeceğim. Gittikçe karmaşık örnekler yayınlayacağım. Kitaptaki örnekleri geliştirip farklı deneyimler elde edeceğim.

Ekonomik Kriz ve Yeni Fırsatlar – 2


Bir önceki yazıda ekonomik krize giriş yapmış ardından bunun özgür projeler üzerine etkisinden bahsetmiştik. Bu yazıda ise yeni fırsatlar neler olabilir neler yapılmalıdır onun üzerine duracağız. Sabah saatlerinde ekonomide önlem olarak açıklanan paketlerden beşincisi duyuruldu. Yine vergi indirimleri geldi. İçlerinden bizi ilgilendiren Bilgisayar, Bilişim ve Büro makinalarında alınan verginin %8’e indirilmesi. Bana göre bu oran bile çok. Kabul ediyorum belki dünyanın en pahalı ülkesi değiliz ama en pahalılardan birisi olduğumuzu söyleyebiliriz. En pahalı interneti kullandığımız yönündeki haberlerden sonra biraz araştırma yapmıştım doğru hatırlıyorsam birinci Kazakistan’dı. Ülkemiz ihracatını ne kadar geliştirirse geliştirsin kazancımız düşük oluyor. Özellikle elektronik ürünlerde, elektrikli ev aletlerinde hatta taşıt sektöründe ana parçaları biz üretmediğimiz için sadece ufak bir paya sahip oluyoruz. Yurt dışından gelen parçaları birleştirip satmayla elde edilen kazanç ile ürünün ilk maddesine sahip olup satma arasında fark var.

Küreselleşen dünyada Çin, Hindistan gibi yeni güçlere karşı yüksek vergi oranları ve işçilik ücretleri ile rekabet etmek imkansız. Yüksek nüfusları sayesinde işçilik o kadar ucuzki onlarla rekabet etmek için ya kendi işçilerimizin maaşlarını kesecez ya da üretilen malın kalitesinden vazgeçecez. İki hareketin sonucuda acıtır. Büyük düşünen bir Türkiye kaliteli mallar üretmeli ve işçilerine hak ettikleri yüksek geliri sağlamalıdır. Bunu başarabilmek içinde öncelikle maliyetler kısılmalı ardından gerekli teknik eğitim verilmeli. Şu alınan vergilere bakın, %18 üstüne ÖTV falan… Böyle maliyetler varken küresel aktörler Türkiye ye niye yatırım yapsın? Serbest Ticaret Bölgeleri, Tekno Kentler bir yere kadar…

Kriz acıda olsa zayıf şirketleri götürecek. Yapılan yanlışları düzeltmek zorunda kalan küresel ekonomi yeni bir yapılanmaya gidiyor. Tahminimce düşük-orta kalite ürünlerin üretimi giderek doğuya kayarken yüksek kaliteli ürünleri dünyanın batı kesimi üretecek. Türkiye bu iki kutuplu dünyanın yine tam ortasında yer alacak ama önlem alınmazsa ikisine de katılamayabilir. Teknoloji gerektiren kaliteli ürünleri ortaya çıkarabilmek için teşvikler arttırılmalı. Özgür yazılımlarda bu noktada gittikçe önem kazanacak ama içlerinden sadece en iyi olanları ayakta kalacak. Batı devletlerinin ufak adımlarlada olsa özgür yazılımlara geçtiklerinin haberleri geliyor. Çoğu kurum, göç işlemlerinin maliyetlerini düşünmeden gelecek için özgür yazılımlara geçecek. Bu kurumlar özgür yazılımlara geçmek için bu alanda uzman firmalara ihtiyaç duyacak. Yeni fırsatlar dediğim bu 🙂 Özgür yazılımlara geçtikçe bu alanda ki ihtiyacı karşılamak için yeni firmalar doğacak. Linux nedir bilmeyen, hayatında windowstan başka işletim sistemi kullanmamış firmalar bu ihtiyaçları gidermede yetersiz kalacaktır. Geçiş işlemlerinin tamamlanmasından sonra bu sefer kurumsal destek ihtiyacı doğacak ve bu ihtiyacı gidermek için yine özgür firmalar aranacaktır. Elemanlarını özgür yazılımlar için hazırlamak isteyen firmalar bu konularda onları eğitecek yeni kurumları arayacak! “Linux sertifikası verilir” gibi ilanlara hazır olun.

Kısaca Göç, Destek ve Eğitim başlıklarında yeni fırsatlar ortaya çıkacak diyebilirim. Bunun yanında ülkeler yazılım sektörüne daha fazla yoğunlaşacaktır. Yazıya başlarken direkt ilk maddeyi dışarıdan aldığımız için kazancımızın az olduğundan bahsetmiştim. Yazılım sektöründe ise eğer özgür yazılımları kullanıyorsanız böyle bir gideriniz olmayacaktır. Tamamen kendi ürettiğiniz, dışa bağımlı olmayan modüllerden oluşan yazılımların pazarlaması araba ve buz dolabı satmaktan daha kazançlı olacak. Bu aşamada kaliteli eleman bulmak için eğitim sektörümüzde değişikliklere gidilebilir. Bunun yanında firmaların bilgisayar, elektrik, internet bağlantısı gibi ihtiyaçlarını karşılarken ödedikleri vergiler düşürülerek gerekli olan hammadde üzerinde ki yükler azaltılırsa türk yazılımcıların batıdaki meslektaşları ile kıyasıya bir mücadeleye gireceğinden eminim.

Kendi açımdan özel olarak oyun sektörünede özel olarak ilgi gösterebilirim. Ne kadar kriz olursa olsun, oyunlar oynanmaya devam ediyor. Şimdilik oyun satışlarıyla ilgili bir rapor görmesemde online oyunların tartışıldığı forumlar hala hareketli. Ülkemizde oyun sektörü yeni yeni oluşuyor… Mount & Blade gibi türk yapımı oyunların çoğalması yazılımcılarımız için gerekli tecrübeyi sağlayacaktır. Ondan sonra belki Blizzard’a kafa tutacak oyunlar çıkarabiliriz(zor :D)
Oyun sektörüde başka bir yazının konusu olsun.

Ekonomik Kriz ve Yeni Fırsatlar


Amerikada başlayan ve dünyaya yayılan kriz belki de yeni bir döneme girmemizi sağlayacak. Öncelikle firmaların bu kadar özgür bırakılamayacağı anlaşıldı. Prim, komisyon gibi kimi çıkarlar için firmaların kötü durumlarını gizlediği, bazı şeylerin görmezden gelindiği anlaşıldı. İnsanlar varolmayan paralarıyla çok büyük harcamalar yaptılar ve sıkıştıklarında herşeylerini kaybettiler. Burada tek suçlu kriz değil. Taksitle ev alıp daha taksidini bitirmediği evin senetleriyle oyun oynayan birisi banka batıp işten çıkarılınca emekliliği dahil herşeyi kaybetmişse suçlu olarak sadece banka ile işçisini işten çıkaran firmayı gösteremeyiz. Bunun yanında AIG’de yaşanan saçmalıklardan sonra devletlerin daha sert bir yaklaşım sergilemesinin gerekli olduğuda ortaya çıktı.

Başbakanın beceriksizler batıyor açıklaması kısmen doğru. İş, hesap-kitap bilmeyen kişilerin yönetiminde ki şirketlerin iflas süreçleri bilenlere göre daha çabuk oluyor. Yanlış hatırlamıyorsam Bora Güngören buna benzer bir olayı IT sektörü için örneklendirmişti. Gerçekte işleri yürütmek o kadar zordurki sipariş vermeden önce yaptığınız ufak bir hesap hatası sizi bitirebilir. Esas nokta burada kendi hataları sonucu batanlarla kriz karşısında çaresiz kalanları ayırmakta. Beceriksiz patronlar batabilir ama onların işçilerinin bunda bir suçu yok. İşsizlik fonundan yapılan ödemeler bu insanları bir iki yıl idare eder. Eğer kriz 2009 yılında son bulmazsa(son bulmaya başlamazsa diyelim) bu fondaki paralarda suyunu çekmeye başlayacaktır.

Kriz ve Linux bağlantısını araştırırken gözüme Cédric Godart’ın röpörtajında ki bir söz ilişti,
OLinux: Do you think that economic crisis which also involves open source enterprises will be reflected in Linux and open source news sites?
Cédric Godart: Of course. The Linux market is not mature yet. These are bad times for the whole IT economy. Only a limited number of companies focusing on Linux and Open Source solutions may claim to be profitable. Time will tell.

Bizler sürekli kriz sayesinde lisanslara ödenen bedellerin insanlara fazla geleceğini, bu yüzden özgür yazılım kullanan firmaların sayısının artacağını düşünüyoruz. Oysa kriz özgür yazılımı destekleyen firmaları da(bizde devleti) vuruyor. Düşünün Ubuntu’nun arkasında ki en büyük güç ne? Pardus’a Tübitak’ın desteği olmasa proje ne kadar devam eder? Büyük olduklarını düşündüğümüz dağıtımlar, açık projeler sponsorlarını kaybederlerse neler olabilir? Benzer bir tartışma şurada yapılmış. Wikipedia gibi projelerin finansmanını sağlayan bağışçılar ortadan kalktığı takdirde devam edemeyeceği söylenen birisinin sözleri üzerine uzun uzun konuşulmuş. Her ne kadar insanlar içeriği gönüllü olarak sağlasada küresel krize girdiğimiz şu zamanlarda bu tarz oluşumların hayatlarını sürdürmesi oldukça zorlaşıyor. Yazıya burada ara veriyorum, buna kısa bir giriş diyelim. Daha çok kriz üzerine durdum devamında yeni fırsatlar üzerine bir beyin jimlastiği yapacağım. İşletme derslerine çalışınca böyle yönetim süreçleri hakkında yazasım geliyor.

Bir sonraki yazıda görüşmek dileğiyle… Öptüm 😀

GPS Takip Sistemleri

İki güzel örnek var bu konuda bulabildiğim. Kodları açık olan. Birisi Open GPS Tracker diğeri OpenDMTP. GPS takibi ne işe yarar? Öncelikle bu sistem mobil hizmet sağlayacıları tarafından telefonunuzun yerini belirlemek için kullanılıyor. Buna göre sizlere çeşitli hizmetler sunulabilir. Bunun dışında ticari bir filosu olan kişiler filoların yerini anlık olarak öğrenmek için GPS takip sistemlerini kullanabilir. Bu şekilde hem kaçakçılıkla mücadele edilmiş olunur hem de daha iyi verim sağlamak için değerlendirmeler yapılabilir. Sadece yük taşıma işlerinde değil, örneğin bir yolcu taşıma aracının yeri ve hızı belirlenerek hedefe ne sürede ulaşacağı bulunabilir. Askeri alanda askeri araçlara ve birimlere yerleştirilebilir. Pozisyonları anlık takip edilerek üst yönetimin operasyonlara müdehalesi daha etkin biçimde kullanılabilir. İleri uygulamalarından uzaktan kontrol sistemlerinde kullanılabilir. Takip edilmek istenen hedeflere bu araçlar yerleştirilerek uzaktan yok etme işine girilebilir. Daha da gelişmişini düşünürsek, her vatandaşa özel bir cihaz verilerek bunun içerisinde tüm bilgileri saklanabilir belirli merkezlerde bu veriler düzenli olarak kontrol edilir ve suçla mücadelede önemli bir başarı sağlanabilir. Belki vücuda yerleştirilecek bu tarz cihazlarla suçluların kaçışı önlenebilir. Büyük alışveriş merkezleri metrolar gibi toplu kitlelerin bulunduğu alanların girişlerine bu tarz cihazların kontrolünü sağlayan birimler konarak terör olaylarının önüne geçilebilir.

Yazının hazırlanmasından sonra çeşitli güncellemeler oldu. Yazının devamı niteliğinde ki OpenGTS başlıklı yazımı okuyarak yeniliklerden haberdar olabilirsiniz.

Özgür Oyun Motorları


Panda3D: Python dili kullanılıyor isterseniz C++ da kullanabilirsiniz. İki türlüde işime geliyor hehe. Oldukça iyi bir döküman bölümü var. Disney’de oyunlarında bu motoru kullanmakta.

OGRE: C++ kullanıyor. Anarchy online oyunun yapımında kullanılmış. Hoş bir motor buda.

ika: Python kullanan başka bir motor. 2D oyunlar için ideal olabilir
ClanLib: C++ kullanan bir motor. cross-platform takılabilirsiniz.
Allegro Library: Oyun programlama için diğer bir kütüphane. C++ kullanılıyor
Agar: C++ kullanıyor. 2D, 3D oyun programlamada işinize yarayabilir.
Aleph One: FPS motoru. C++ olması lazım tam bilmiyorum deneyemedim.

İçlerinden Panda3D’yi deneme fırsatım olmuştu Python ile gayet başarılı işler yapılabiliyor, meraklısına ilk tavsiyem o olacak. Tabi öncelikle lisanslara dikkat edin. Açık kaynak oluyor ama hangi şartlarla?