Python App für Sailfish erstellen und bauen

Seit Beginn des Jahres ist Python im Jolla Store erlaubt. Vorher konnte man auch schon über openrepos.net Python Anwendungen veröffentlichen. Da ich selbst schon ein wenig mit Python/PyOtherSide experimentiert habe und auch schon ein kleines Spiel auf Openrepos veröffentlicht habe, wollte ich hier nochmal den Build-Prozess aufschreiben.

Dabei geht es mir im wesentlichen darum die für mich wichtigen Schritte nochmal ausführlicher zu notieren, da ich gemerkt habe, dass es nach ein paar Monaten doch wieder sehr mühsam ist, sich alles zusammenzusuchen. Da dies wahrscheinlich für viele Python-Entwickler auch eine Einstiegshürde darstellt, habe ich mich für eine Veröffentlichung entschieden, vielleicht hat ja jemand noch was davon 😉

Continue reading ‘Python App für Sailfish erstellen und bauen’ »

Python, die bessere Programmiersprache für den Informatikunterricht?

Das Land NRW hat zum nächsten Schuljahr neue Lehrpläne entwickelt und informiert im Moment die Kollegen über die Änderungen. Bei einer Veranstaltung, die ich zum Kernlehrplan Informatik besuchen durfte, wurde bekanntgegeben, dass, beginnend mit der nächsten Einführungsphase, nur noch die Programmiersprache Java für das Zentralabitur genutzt werden solle, da es im Zentralabitur nur noch Aufgaben mit Java-Quellcode geben wird.

Interessanterweise steht im neuen Kernlehrplan nirgendwo, dass ausschließlich Java eingesetzt werden darf. Es ist lediglich von einer „Programmiersprache“ die Rede. Die Rückfrage, ob denn auch andere Sprachen wie z.B. Python eingesetzt werden dürften, wurde zwar nicht verneint. Allerdings wird es nicht empfohlen, da es beim Zentralabitur nur noch Aufgaben mit Java-Quelltext geben wird und Schüler, die eine andere Programmiersprache gelernt hätten ggf. Nachteile bei den Aufgaben dadurch hätten. Das hört sich für mich wie eine stille Festlegung auf Java an, die ich aber ablehne. Ich habe die Befürchtung, dass auf lange Sicht damit Java zur verpflichtenden Sprache festgelegt werden soll.

Da wir an unserer Schule seit diesem Jahr bewusst von Java auf Python umgestiegen sind, möchte ich hier für interessierte Kollegen/innen die Gründe darlegen und ggf. eine Diskussion anstoßen, ob Python nicht auf Dauer die bessere Lehrsprache ist.

Continue reading ‘Python, die bessere Programmiersprache für den Informatikunterricht?’ »

erweitertes SqlQueryModel für QML mit PySide

Ich benötige für QML ein Model, dass Daten von Sql-Abfragen liefert. Da das durchaus umfangreich werden kann, habe ich nach einer Möglichkeit gesucht, beliebige Abfragen, die auch mehr als eine Ergebnisspalte beinhalten, in ein Model zu bekommen und die Ergebnisspalten jeweils als eigene Userrole im Model zu definieren. Grundlage war dieser Link, der das Ganze allerdings in C++ löste. Ich habe es also nach Python übertragen und kann jetzt bequem eine Abfrage an die Sqlite-DB stellen und habe alle Spaltennamen nachher in QML zur Verfügung.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PySide import QtSql, QtGui, QtDeclarative, QtCore

class SqlTest(QtCore.QObject):
    def __init__(self):
        QtCore.QObject.__init__(self)
        db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        db.setDatabaseName(":memory:")
        db.open()
        # create table and put in some data
        query = QtSql.QSqlQuery()
        query.exec_("CREATE TABLE table1 (pkey INTEGER PRIMARY KEY,\
                                                    name TEXT, number INT)")
        query.exec_("INSERT INTO table1 (name,number) values ('Alice',12345)")
        query.exec_("INSERT INTO table1 (name,number) values ('Bob',67890)")
        query.exec_("INSERT INTO table1 (name,number) values ('Carl',133742)")
        # create view
        self.view = QtDeclarative.QDeclarativeView()
        self.context = self.view.rootContext()
        self.pkey = 1
        self.sql_model = SqlQueryModel(self)
        sql_query = "SELECT name, number FROM table1\
                          WHERE table1.pkey={pkey}".format(pkey=self.pkey)
        self.sql_model.setQuery(sql_query)
        self.context.setContextProperty('sqlModel', self.sql_model)
        self.view.setSource("main.qml")
        self.root = self.view.rootObject()
        self.view.show()

        self.root.populate_sql_model.connect(self.populate_sql_model)

    def populate_sql_model(self):
        # cycle through your data, just for demo
        self.pkey = (self.pkey % 3) + 1
        sql_query = "SELECT name, number FROM table1\
                          WHERE table1.pkey={pkey}".format(pkey=self.pkey)
        self.sql_model.setQuery(sql_query)

class SqlQueryModel(QtSql.QSqlQueryModel):
    def __init__(self, parent=None):
        super(SqlQueryModel, self).__init__(parent)

    def setQuery(self, query):
        super(SqlQueryModel, self).clear()
        super(SqlQueryModel, self).setQuery(query)
        self.generateRoleNames()

    def generateRoleNames(self):
        roleNames = super(SqlQueryModel, self).roleNames()
        for i in range(self.record().count()):
            roleNames[QtCore.Qt.UserRole + i + 1] =\
                                            str(self.record().fieldName(i))
        self.setRoleNames(roleNames)

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role < QtCore.Qt.UserRole:
            value = super(SqlQueryModel, self).data(index, role)
        else:
            columnIdx = role - QtCore.Qt.UserRole - 1
            modelIndex = QtCore.QModelIndex(self.index(index.row(),
                                                       columnIdx))
            value = super(SqlQueryModel, self).data(modelIndex,
                                                      QtCore.Qt.DisplayRole)
        return value

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    sql_test = SqlTest()
    app.exec_()

Und der Inhalt der QML-Datei:

 import QtQuick 1.1

Rectangle {
    id: root
    width: 500
    height: 200

    signal populate_sql_model()

    ListView {
         id: list_view
         anchors.fill: parent
         focus: true
         model: sqlModel
         delegate: sqlDelegate
     }

    Component {
         id: sqlDelegate

         Item {
            width: 300; height: 100

            Text {
                 width: parent.width
                 height: parent.heigth
                 id: text_name
                 text: "Name: " + name
                 font.pointSize: 50;
             }
             Text {
                 width: parent.width
                 height: parent.heigth
                 anchors { top: text_name.bottom}
                 text: "Number: " + number
                 font.pointSize: 50;

             }
         }
     }

     Timer {
         interval: 1000; running: true; repeat: true
         onTriggered: populate_sql_model()
     }
}

Zum Testen habe ich einfach einen Timer gesetzt, der im Prinzip nichts anderes macht, als durch die drei Datensätze durchzugehen. So sieht dann das fertige Produkt aus, natürlich erscheint jede Sekunde ein neuer Datensatz 😉

qml

Neues Notebook für die Eltern

Die Eltern wollten ein neues Notebook haben für Surfen, Office und ein paar Spiele. Also aus Gründen der Wirtschaftlichkeit (und meiner Bequemlichkeit) das Acer TravelMate 5760-2314G50Mnsk i3-2310 mit Linux bestellt, da es anscheinend laut den Bewertungen im Netz brauchbar ist für die Anforderungen und den Preis und gut mit Ubuntu zusammenarbeitet.

Continue reading ‘Neues Notebook für die Eltern’ »

Das N950 – ein Rückblick nach 5 Monaten

Viele N900-Benutzer wie ich auch hatten auf die Veröffentlichung des N950 als Nachfolger gewartet, wurden jedoch enttäuscht, da die Entscheidung von Nokia zu WP7 die Weiterentwicklung von Meego beendete. Es wurde sich auf das N9 konzentriert, das wohl laut Nokia das einzige Meego-Smartphone aus dem Hause Nokia bleiben wird. Das N950 erblickte trotzdem das Licht der Welt, allerdings ist es nur wenigen Personen vergönnt, dieses Smartphone benutzen zu dürfen. Nokia startete in der Mitte des Jahres u.a. ein Community Device Program, bei dem 250 Geräte an Community-Mitglieder und Entwickler kostenlos verteilt wurden. Später wurden noch einmal 100 Geräte kostenlos an Entwickler verteilt. Zusätzlich wurden auch an professionelle Entwickler Geräte verteilt, allerdings sind mir da keine Zahlen bekannt. Da ich einer der Glücklichen bin, die so ein Gerät über das Community Device Program bekommen haben, wollte ich euch nach 5 Monaten Benutzung meine Erfahrungen schildern und ein kleines Resume ziehen. Das Review ist natürlich stark von meiner eigenen Meinung geprägt.

Continue reading ‘Das N950 – ein Rückblick nach 5 Monaten’ »

Linux und ich – Weihnachtsgewinnspiel

Normalerweise mache ich bei Gewinnspielen im Netz ja nicht mit, da es dabei in der Regel nur um das Abgreifen von Daten geht, aber beim Gewinnspiel von Linux und ich mache ich mal eine Ausnahme, denn dort mache ich mir um meine Daten keine Sorgen und finde die Preise wirklich ansprechend. Vor allem der Hauptpreis, ein Rechner von Cirrus7, gefällt mir sehr gut. Aber auch alle anderen Preise würde ich sofort nehmen 😉

Hinzu kommt noch, dass man seine Chancen erhöhen kann, wenn man einen Blog-Eintrag macht, was ich hiermit hoffentlich erfolgreich getan habe. 😉

Ansonsten kann ich die Seite von Christoph nur empfehlen, habe schon viele interessante Beiträge dort gefunden.

N900 Programmers Toolbox

Beim N900 gibt es verschiedene Möglichkeiten, mit dem Benutzer zu interagieren.

Da ich immer wieder die ein oder andere Funktion benötige, bin ich dabei alle Möglichkeiten des N900 in ein kleines Programm zu packen, so dass ich eine kleine Toolbox habe, wo ich die ein oder andere Möglichkeit sofort schnell finde.

Vielleicht kann jemand anders damit ja auch was anfangen, so dass man nicht immer danach suchen muss.

Ausprobieren auf eigene Gefahr 😉

Continue reading ‘N900 Programmers Toolbox’ »

Programmieren für das N900 – Teil 2 Erstellen der Oberfläche mit dem Qt-Designer

Nach dem 1. Teil möchte ich nun zeigen, wie man sich für ein Programm eine Oberfläche zusammenstellt. Damit das Programm auch etwas Sinnvolles macht, habe ich mich dazu entschlossen, eine Oberfläche für ein Skript zu gestalten, die das N900 in eine WLAN-Webcam umfunktioniert und das Bild der Kamera ins lokale Netz streamt. Auf dem PC kann man dann mit dem vlc-Player das Bild betrachten.

Continue reading ‘Programmieren für das N900 – Teil 2 Erstellen der Oberfläche mit dem Qt-Designer’ »

Programmieren für das N900 – Teil 1 Vorbereitungen und erstes Programm

Das hier wird eine kleine Reihe, in der ich zeigen möchte, wie man speziell für das N900/Maemo programmieren kann. Die grobe Planung sieht folgende Teile vor:

  1. Vorbereitungen und erstes kleines Programm
  2. Der Qt-Designer
  3. Signals and Slots
  4. ???

Die verwendete Programmiersprache ist dabei Python mit der Oberflächenbibliothek Qt.

Continue reading ‘Programmieren für das N900 – Teil 1 Vorbereitungen und erstes Programm’ »