Kategorie: Technik

🐍 + iOS = 💕 – Pythonista is awesome

Die Programmiersprache, in der ich am liebsten Arbeite ist Python. Eigentlich hatte ich mal angefangen Ruby zu lernen, aber dieses Unterfangen habe ich wegen zwei Programmen gekippt. Das eine ist Sublime Text 31. Das zweite ist Pythonista.

Pythonista

Pythonista ist eine IDE fĂŒr Python auf iOS. Das heißt grundsĂ€tzlich erstmal, dass sich in Pythonista Python Scripts schreiben, aber auch ausfĂŒhren lassen. Aber wie es sich fĂŒr eine gute IDE gehört, hört es dabei nicht auf. Ole Moritz hat viele wirklich großartige Features eingebaut, die Python auf iOS richtig einfach machen.

Python 2, 3 und Module

Seit der Version 3.0 kommt Pythonista mit der Möglichkeit Scripts einfach und gezielt mit Python3 oder mit Python (2) zu entwickeln. Mein Default Interpreter ist Python 3.5, aber sollte ich mal Python 2 brauchen, lĂ€sst sich ĂŒber einen long press auf das Play-Symbol einfach Python 2 als Interpreter auswĂ€hlen.

Zu sehen ist das Run-Menu von Pythonista
Das Run-Menu von Pythonista mit Zugriff auf Unittests und andere Interpreter

Pythonista kommt dabei mit der Python Standard Library, eigenen Modulen fĂŒr die Entwicklung auf iOS und folgenden Third Party Modulen:

  • bs4 — BeautifulSoup 4
  • Bottle: Python Web Framework
  • Dropbox for Python
  • evernote
  • faker
  • feedparser — Universal Feed Parser
  • Markdown
  • markdown2 — A fast and complete implementation of Markdown in Python
  • paramiko
  • Python Imaging Library
  • qrcode — Pure python QR Code generator
  • Requests – HTTP for Humans
  • xmltodict

Die Pythonista-eigenen Module sind es aber, die Pythonista so wirklich nĂŒtzlich machen, weil sie die Kommunikation mit iOS ermöglichen. Ich will im Folgenden ein paar beleuchten.

ui

FĂŒr eine wirklich gute Bedienung der eigenen Programm braucht es auf iOS ein besseres User Interface als das CLI. DafĂŒr wird das ui Modul mitgeliefert, welches es sehr einfach ermöglicht graphische User Interfaces zu bauen, die sich so verhalten, wie ich es von iOS GUIs erwarte. Um den Einstieg zu erleichtern gibt es außerdem einen graphischen Editor in dem, Ă€hnlich zu Interface Builder, sich Interfaces zusammen schieben lassen – nur halt per Touch. Über das ui Modul lĂ€sst sich dann die ui.View in das Script laden und mit der Programmlogik verknĂŒpfen.

Damit schafft Pythonista, was ich mir fĂŒr macOS wĂŒnschen wĂŒrde. Native GUI mit Python.

appex

Mit der 3.0 kam außerdem die Pythonista Extension fĂŒr das iOS Share Sheet und das Modul appex (App Extension) dazu. Damit wird es endlich möglich Daten von einer App in Richtung Pythonista weiter zu geben ohne den Umweg ĂŒber das Clipboard, mit all seinen Limitierungen, zu gehen. Das Modul bringt Methoden fĂŒr die ĂŒblichsten Daten mit: Photos, Text, URLs, File Paths, VCards und selbstverstĂ€ndlich die “rohen” Daten.

speech

FĂŒr dieses Modul ist die Online-Dokumentation leider nicht ganz aktuell. Denn auf iOS 10 ist speech nicht mehr nur text-to-speech, sondern auch speech-to-text.

The speech module provides speech synthesis and recogntion functionality on iOS.

Und hier ist es fĂŒr mich echt spannend geworden. Bisher benutze ich die App Just Press Record, mit der per Apple Watch App schnell kurze Audioaufnahmen gemacht werden können. Die App kann direkt den gesprochenen Text transkribieren. Aber leider schmeißt sie den Text nicht einfach in eine separate Text-Datei. Über das Share Share Sheet lĂ€sst sich die Aufnahme oder das Transkript wiederum mit Pythonista teilen. Nun lĂ€sst sich die Spracherkennung in Pythonista machen und/oder der erkannte Text von Pythonista weiterverarbeiten. Text in Datei Speichern, neue Aufgabe im Projekt-Management-Tool mit REST-full API anlegen, Text automatisch Twittern und vieles mehr, kein Problem.

All the checks

Style Police is coming

Hinter dem SchraubenschlĂŒssel Symbol versteckt sich der “Style Check”. Damit wird der eigene Code darauf geprĂŒft ob er dem PEP8 Style Guide entspricht. In den Einstellungen lassen sich teile des Guides deaktivieren.

Besonders gut ist der Style Check fĂŒr mich um leere Zeilen mit Leerzeichen zu entdecken, die fĂŒr das EinrĂŒcken automatisch eingefĂŒgt werden.

Flaky

Im gleichen Menu lÀsst sich auch der Code mit pyflakes auf Syntaxfehler etc. kontrollieren, ohne das Programm laufen zu lassen.

Zu sehen ist das Tool-Menu von Pythonista
Das Tool-Menu mit dem Style-Checker und Analyser

Tests

Mit dem long press auf das “Play” Symbol lassen sich nicht nur Python2 und 3 als Interpreter auswĂ€hlen, sondern auch Tests anstoßen.

Ja, vollkommen richtig: Pythonista kommt mit Unittest-Support. Ihr könnt also test-driven entwickeln. TatsĂ€chlich ist es dabei sogar möglich in Tests zu ĂŒberprĂŒfen, ob die Views on screen sind, welche Subviews sie haben etc. Ziemlich cool wie ich finde.

But there’s more

Today View Widget

Neben den App Extensions bringt Pythonista 3 ab iOS 10 ein Widget fĂŒr die Today View im iOS Notification Center mit. Damit werden kleine Helfer sehr schnell und einfach zugĂ€nglich.

Zu sehen ist ein Pythonista Widget in der Today View
Eines der Pythonista Beispielwidgets, was den aktuellen Inhalt der Zwischenablage anzeigt.

Editorial

Eine zweite App von Ole Moritz ist Editorial, ein mit Python erweiterbarer Text-Editor. Ich selbst benutze die Erweiterungen nicht wirklich, aber damit tun sich viele coole Möglichkeiten auf.

Kommandozeile in der Konsole

Pythonista bringt zwar eine interaktive Konsole mit, aber eine richtige Kommandozeile ist das leider nicht. So ist es, sicherlich den Regeln der Plattform geschuldet, nicht wirklich einfach z.B. third party Module mit git nach zu installieren etc.. DafĂŒr gibt es aber Lösungen wie z.B. stash. Damit bekommt die Konsolen View eine neue Subview in der eine mehr oder weniger vollstĂ€ndige Shell lĂ€uft. Mit all den Vorteilen die so eine Shell mit sich bringt.

Zu sehen ist das Interface von Pythonista in dem die StaSH Shell angezeigt wird
Ein Blick auf die StaSH Shell in Pythonista

Fazit

Pythonista 3 ist momentan fĂŒr 10,99 € im AppStore zu haben. FĂŒr Leute mit iOS GerĂ€ten, die Python (auch auf AnfĂ€ngerInnenniveau) können und außerdem Lust und Ideen haben auf iOS zu programmieren ist Pythonista eine großartige Wahl. Eine vollstĂ€ndig native App wird weiterhin Vorteile gegenĂŒber “Pythonista-Apps” haben, aber Pythonista bietet einen leichten Zugang zum Programmieren und zeigt was Xcode fĂŒr iOS mindestens können mĂŒsste (sollte es je fĂŒr iOS kommen).

A graph from the Apple Health app

Exporting your Health data when you start having much data

Since I have the Apple Watch I collect much more data in the Health App from Apple. A couple of days ago I wanted to get the latest data from the App so I could look what data was collected.

Apple provides a rather simple way to get your data.

The data tab of the health app. The sharing icon is marked with a circle

An alert asking if you really want to export you data. It may take a while.

At the Data tab you can tell the app to export your data. The app will make two XML Files and zip them together. After the zipping the app pulls up a share sheet for this zip archive. This process takes some time. In my case it took several minutes.

A popup stating that your data is being exported.

The iOS share sheet. Run Workflow ist marked with a rectangle.

Usually I sent myself an Email the the archive attached. But this time the archive was to big and the mail server rejected the mail. So I needed another way. I first thought, hey let’s upload the file to my server via Transmit. But for some reason the share sheet does not Transmit as an option. But I saw the share sheet offered that I could run a workflow from the Workflow app.

Turns out with a few steps you can upload this and any other data with Transmit when you setup a workflow.

First you have to create a new workflow.

The "My Workflows" section in the workflow app

In the details of the workflow choose “Action Extension” because that is what we want. Have a look that the workflow accepts Anything as input.

Then tap action.

The new workflow screen in the workflow app. Action Extension and Actions are highlighted.

From the actions categories choose the Sharing item.

The actions list in workflow. The item Sharing is highlighted

From the sharing actions choose Share with Transmit and drag it over into the workflow.

Sharing action list in workflow. The Share with Transmit item is highlighted.

Now tap the gear icon to access the workflow settings.

The sharing workflow. It accepts Anything as input. The gear icon is highlighted.

Here you can change the name and the icon.

The settings of the workflow. Name and Icon are highlighted.

I chose yellow and a truck as the icon.

The icon settings page with the color palette open. Yellow is highlighted. An arrow points at the Glyph tab.

The icon settings with the glyphs tab open. In this tab the objects tab is opened and highlighted. A truck icon is also highlighted.

Now just accept the settings and the workflow is ready.

When you now pull up the share sheet in Health and you tap Run Workflow you can run this workflow.

The workflow selection screen. One of the workflows is the newly created workflow for Transmit.

This workflow will pull up Transmit. Here you can save your health data locally or upload it directly to a server of your choice.

The Transmit screen for local documents. The local tab an the save button are highlighted.

And what did I get?? A zip archive with 8MB, containing 2 XML files; 11MB and 152,7MB.