{"id":521,"date":"2017-05-29T22:33:08","date_gmt":"2017-05-29T20:33:08","guid":{"rendered":"http:\/\/www.gendalus.de\/?p=521"},"modified":"2017-12-06T23:05:56","modified_gmt":"2017-12-06T22:05:56","slug":"%f0%9f%90%8d-ios-%f0%9f%92%95-pythonista-is-awesome","status":"publish","type":"post","link":"https:\/\/www.gendalus.de\/?p=521","title":{"rendered":"\ud83d\udc0d + iOS = \ud83d\udc95 &#8211; Pythonista is awesome"},"content":{"rendered":"<p>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 <a href=\"https:\/\/www.sublimetext.com\/3\">Sublime Text 3<\/a><sup id=\"fnref-1\"><a href=\"1\" rel=\"footnote\">1<\/a><\/sup>. Das zweite ist <a href=\"http:\/\/omz-software.com\/pythonista\/\">Pythonista<\/a>.<\/p>\n<h2>Pythonista<\/h2>\n<p>Pythonista ist eine <span title=\"Integrated development environment\">IDE<\/span> f\u00fcr Python auf iOS. Das hei\u00dft grunds\u00e4tzlich erstmal, dass sich in Pythonista Python Scripts schreiben, aber auch ausf\u00fchren lassen. Aber wie es sich f\u00fcr eine gute IDE geh\u00f6rt, h\u00f6rt es dabei nicht auf. <a href=\"http:\/\/twitter.com\/olemoritz\">Ole Moritz<\/a> hat viele wirklich gro\u00dfartige Features eingebaut, die Python auf iOS richtig einfach machen.<\/p>\n<h2>Python 2, 3 und Module<\/h2>\n<p>Seit der Version 3.0 kommt Pythonista mit der M\u00f6glichkeit 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\u00e4sst sich \u00fcber einen long press auf das Play-Symbol einfach Python 2 als Interpreter ausw\u00e4hlen.<\/p>\n<figure id=\"attachment_517\" aria-describedby=\"caption-attachment-517\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0503.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-517\" src=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0503-300x197.png\" alt=\"Zu sehen ist das Run-Menu von Pythonista\" width=\"300\" height=\"197\" srcset=\"https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0503-300x197.png 300w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0503-768x506.png 768w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0503.png 828w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-517\" class=\"wp-caption-text\">Das Run-Menu von Pythonista mit Zugriff auf Unittests und andere Interpreter<\/figcaption><\/figure>\n<p>Pythonista kommt dabei mit der Python Standard Library, eigenen Modulen f\u00fcr die Entwicklung auf iOS und folgenden Third Party Modulen:<\/p>\n<ul>\n<li>bs4 \u2014 BeautifulSoup 4<\/li>\n<li>Bottle: Python Web Framework<\/li>\n<li>Dropbox for Python<\/li>\n<li>evernote<\/li>\n<li>faker<\/li>\n<li>feedparser \u2014 Universal Feed Parser<\/li>\n<li>Markdown<\/li>\n<li>markdown2 \u2014 A fast and complete implementation of Markdown in Python<\/li>\n<li>paramiko<\/li>\n<li>Python Imaging Library<\/li>\n<li>qrcode \u2014 Pure python QR Code generator<\/li>\n<li>Requests \u2013 HTTP for Humans<\/li>\n<li>xmltodict<\/li>\n<\/ul>\n<p>Die Pythonista-eigenen Module sind es aber, die Pythonista so wirklich n\u00fctzlich machen, weil sie die Kommunikation mit iOS erm\u00f6glichen. Ich will im Folgenden ein paar beleuchten.<\/p>\n<h3>ui<\/h3>\n<p>F\u00fcr eine wirklich gute Bedienung der eigenen Programm braucht es auf iOS ein besseres User Interface als das CLI. Daf\u00fcr wird das <a href=\"http:\/\/omz-software.com\/pythonista\/docs\/ios\/ui.html\">ui Modul<\/a> mitgeliefert, welches es sehr einfach erm\u00f6glicht graphische User Interfaces zu bauen, die sich so verhalten, wie ich es von iOS GUIs erwarte. Um den Einstieg zu erleichtern gibt es au\u00dferdem einen graphischen Editor in dem, \u00e4hnlich zu Interface Builder, sich Interfaces zusammen schieben lassen &#8211; nur halt per Touch. \u00dcber das ui Modul l\u00e4sst sich dann die ui.View in das Script laden und mit der Programmlogik verkn\u00fcpfen.<\/p>\n<p>Damit schafft Pythonista, was ich mir f\u00fcr macOS w\u00fcnschen w\u00fcrde. Native GUI mit Python.<\/p>\n<h3>appex<\/h3>\n<p>Mit der 3.0 kam au\u00dferdem die Pythonista Extension f\u00fcr das iOS Share Sheet und das Modul <a href=\"http:\/\/omz-software.com\/pythonista\/docs\/ios\/appex.html\">appex<\/a> (App Extension) dazu. Damit wird es endlich m\u00f6glich Daten von einer App in Richtung Pythonista weiter zu geben ohne den Umweg \u00fcber das Clipboard, mit all seinen Limitierungen, zu gehen. Das Modul bringt Methoden f\u00fcr die \u00fcblichsten Daten mit: Photos, Text, URLs, File Paths, VCards und selbstverst\u00e4ndlich die &#8222;rohen&#8220; Daten.<\/p>\n<h3>speech<\/h3>\n<p>F\u00fcr dieses Modul ist die <a href=\"http:\/\/omz-software.com\/pythonista\/docs\/ios\/speech.html\">Online-Dokumentation<\/a> leider nicht ganz aktuell. Denn auf iOS 10 ist speech nicht mehr nur text-to-speech, sondern auch speech-to-text.<\/p>\n<blockquote><p>The speech module provides speech synthesis and recogntion functionality on iOS.<\/p><\/blockquote>\n<p>Und hier ist es f\u00fcr mich echt spannend geworden. Bisher benutze ich die App <a href=\"https:\/\/itunes.apple.com\/de\/app\/just-press-record\/id1033342465?mt=8\">Just Press Record<\/a>, mit der per Apple Watch App schnell kurze Audioaufnahmen gemacht werden k\u00f6nnen. Die App kann direkt den gesprochenen Text transkribieren. Aber leider schmei\u00dft sie den Text nicht einfach in eine separate Text-Datei. \u00dcber das Share Share Sheet l\u00e4sst sich die Aufnahme oder das Transkript wiederum mit Pythonista teilen. Nun l\u00e4sst 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.<\/p>\n<h2>All the checks<\/h2>\n<h3>Style Police is coming<\/h3>\n<p>Hinter dem Schraubenschl\u00fcssel Symbol versteckt sich der &#8222;Style Check&#8220;. Damit wird der eigene Code darauf gepr\u00fcft ob er dem <a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0008\/\">PEP8 Style Guide<\/a> entspricht. In den Einstellungen lassen sich teile des Guides deaktivieren.<\/p>\n<p>Besonders gut ist der Style Check f\u00fcr mich um leere Zeilen mit Leerzeichen zu entdecken, die f\u00fcr das Einr\u00fccken automatisch eingef\u00fcgt werden.<\/p>\n<h3>Flaky<\/h3>\n<p>Im gleichen Menu l\u00e4sst sich auch der Code mit <a href=\"https:\/\/pypi.python.org\/pypi\/pyflakes\">pyflakes<\/a> auf Syntaxfehler etc. kontrollieren, ohne das Programm laufen zu lassen.<\/p>\n<figure id=\"attachment_516\" aria-describedby=\"caption-attachment-516\" style=\"width: 250px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0502.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-516\" src=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0502-250x300.png\" alt=\"Zu sehen ist das Tool-Menu von Pythonista\" width=\"250\" height=\"300\" srcset=\"https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0502-250x300.png 250w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0502-768x923.png 768w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0502.png 837w\" sizes=\"(max-width: 250px) 100vw, 250px\" \/><\/a><figcaption id=\"caption-attachment-516\" class=\"wp-caption-text\">Das Tool-Menu mit dem Style-Checker und Analyser<\/figcaption><\/figure>\n<h3>Tests<\/h3>\n<p>Mit dem long press auf das &#8222;Play&#8220; Symbol lassen sich nicht nur Python2 und 3 als Interpreter ausw\u00e4hlen, sondern auch Tests ansto\u00dfen.<\/p>\n<p>Ja, vollkommen richtig: Pythonista kommt mit Unittest-Support. Ihr k\u00f6nnt also <a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-driven_development\">test-driven<\/a> entwickeln. Tats\u00e4chlich ist es dabei sogar m\u00f6glich in Tests zu \u00fcberpr\u00fcfen, ob die Views on screen sind, welche Subviews sie haben etc. Ziemlich cool wie ich finde.<\/p>\n<h2>But there&#8217;s more<\/h2>\n<h3>Today View Widget<\/h3>\n<p>Neben den App Extensions bringt Pythonista 3 ab iOS 10 ein Widget f\u00fcr die Today View im iOS Notification Center mit. Damit werden kleine Helfer sehr schnell und einfach zug\u00e4nglich.<\/p>\n<figure id=\"attachment_519\" aria-describedby=\"caption-attachment-519\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0506.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-519\" src=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0506-300x121.png\" alt=\"Zu sehen ist ein Pythonista Widget in der Today View\" width=\"300\" height=\"121\" srcset=\"https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0506-300x121.png 300w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0506-768x310.png 768w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0506.png 902w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-519\" class=\"wp-caption-text\">Eines der Pythonista Beispielwidgets, was den aktuellen Inhalt der Zwischenablage anzeigt.<\/figcaption><\/figure>\n<h3>Editorial<\/h3>\n<p>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\u00f6glichkeiten auf.<\/p>\n<h3>Kommandozeile in der Konsole<\/h3>\n<p>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\u00fcr gibt es aber L\u00f6sungen wie z.B. <a href=\"https:\/\/github.com\/ywangd\/stash\">stash<\/a>. Damit bekommt die Konsolen View eine neue Subview in der eine mehr oder weniger vollst\u00e4ndige Shell l\u00e4uft. Mit all den Vorteilen die so eine Shell mit sich bringt.<\/p>\n<figure id=\"attachment_518\" aria-describedby=\"caption-attachment-518\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-518\" src=\"http:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505-300x225.png\" alt=\"Zu sehen ist das Interface von Pythonista in dem die StaSH Shell angezeigt wird\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505-300x225.png 300w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505-768x576.png 768w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505-1024x768.png 1024w, https:\/\/www.gendalus.de\/wp-content\/uploads\/2017\/05\/IMG_0505.png 2048w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-518\" class=\"wp-caption-text\">Ein Blick auf die StaSH Shell in Pythonista<\/figcaption><\/figure>\n<h2>Fazit<\/h2>\n<p>Pythonista 3 ist momentan f\u00fcr 10,99 \u20ac im <a href=\"https:\/\/itunes.apple.com\/de\/app\/pythonista-3\/id1085978097?ls=1&amp;mt=8\">AppStore<\/a> zu haben. F\u00fcr Leute mit iOS Ger\u00e4ten, die Python (auch auf Anf\u00e4ngerInnenniveau) k\u00f6nnen und au\u00dferdem Lust und Ideen haben auf iOS zu programmieren ist Pythonista eine gro\u00dfartige Wahl. Eine vollst\u00e4ndig native App wird weiterhin Vorteile gegen\u00fcber &#8222;Pythonista-Apps&#8220; haben, aber Pythonista bietet einen leichten Zugang zum Programmieren und zeigt was Xcode f\u00fcr iOS mindestens k\u00f6nnen m\u00fcsste (sollte es je f\u00fcr iOS kommen).<\/p>\n<div class=\"twoclick_social_bookmarks_post_521 social_share_privacy clearfix 1.6.4 locale-de_DE sprite-de_DE\"><\/div><div class=\"twoclick-js\"><script type=\"text\/javascript\">\/* <![CDATA[ *\/\njQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_521')){$('.twoclick_social_bookmarks_post_521').socialSharePrivacy({\"services\":{\"facebook\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Facebook senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"action\":\"recommend\",\"language\":\"de_DE\"},\"twitter\":{\"reply_to\":\"\",\"tweet_text\":\"%F0%9F%90%8D%20%2B%20iOS%20%3D%20%F0%9F%92%95%20%E2%80%93%20Pythonista%20is%20awesome%20%C2%BB%20gendalus\",\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Twitter senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"language\":\"de\",\"referrer_track\":\"\"},\"gplus\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Google+ senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"referrer_track\":\"\"}},\"txt_help\":\"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \\u00fcbertragen und unter Umst\\u00e4nden auch dort gespeichert. N\\u00e4heres erfahren Sie durch einen Klick auf das <em>i<\\\/em>.\",\"settings_perma\":\"Dauerhaft aktivieren und Daten\\u00fcber-tragung zustimmen:\",\"info_link\":\"http:\\\/\\\/www.heise.de\\\/ct\\\/artikel\\\/2-Klicks-fuer-mehr-Datenschutz-1333879.html\",\"uri\":\"https:\\\/\\\/www.gendalus.de\\\/?p=521\",\"post_id\":521,\"post_title_referrer_track\":\"%F0%9F%90%8D+%2B+iOS+%3D+%F0%9F%92%95+%26%238211%3B+Pythonista+is+awesome\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div>","protected":false},"excerpt":{"rendered":"<div class=\"entry-summary\">\nDie Programmiersprache, in der ich am liebsten Arbeite ist Python. Eigentlich hatte ich mal angefangen Ruby zu lernen, aber dieses&hellip;\n<\/div>\n<div class=\"link-more\"><a href=\"https:\/\/www.gendalus.de\/?p=521\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;\ud83d\udc0d + iOS = \ud83d\udc95 &#8211; Pythonista is awesome&rdquo;<\/span>&hellip;<\/a><\/div>\n","protected":false},"author":2,"featured_media":520,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,100],"tags":[],"class_list":["post-521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-technik","entry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/posts\/521"}],"collection":[{"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=521"}],"version-history":[{"count":9,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/posts\/521\/revisions"}],"predecessor-version":[{"id":565,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/posts\/521\/revisions\/565"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=\/wp\/v2\/media\/520"}],"wp:attachment":[{"href":"https:\/\/www.gendalus.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gendalus.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}