-
Microsoft Research TouchStudio
Hab gerade MS TouchStudio (Kostenlos) entdeckt, scheint neu zu sein.
Mit dem Programm lassen sich Scripts erstellen und ausführen, direkt auf dem WP7. Beispielcode um alle Songs in der Musik-DB zu finden, die kürzer als 3min sind:
Code:
action find short songs():Nothing
foreach song in media -> songs do
if song -> duration <180 then
song -> post to wall
Ich konnte bisher nur die Beispielskripte durchschauen, anscheinend hat man Zugriff auf fast alles: Kamera, Mic, Webseiten...
Wer was tolles gebastelt bekommt, kann ja mal den Code hier in den Thread kopieren :)
-
AW: Microsoft Research TouchStudio
Wow, interessant, schau ich mir glecih an :)
Edit: Sach mal was für ne Script-Sprache ist das?? Auf jedenfall interessant... Sehr interessant :)
-
AW: Microsoft Research TouchStudio
Keine Ahnung ^^ Ich denke MS wird noch eine Dokumentation nachliefern, im Moment klicke ich auf gut Glück ein paar Sachen zusammen.
-
AW: Microsoft Research TouchStudio
Hat schon jemand was vernünftiges zusammen bekommen? Habs mir grad ma runtergeladen, aber ich klicke halt auch nur auf gut Glück irgendwas und schau was rauskommt.
-
AW: Microsoft Research TouchStudio
Hmm ich hab einfach die Sachen, die schon da waren, ein wenig aufpoliert und so... Aber sonst selber... Ne
-
AW: Microsoft Research TouchStudio
Hmm...
Ich habe es Runtergeladen....
Ich habe keine ahung von Programmieren, aber ich versuche immer was mit Visual Studio[Habe nen Buch xDD]
& TouchStudio ist echt Gail :D
Ich klicke einfach iwo drauf und Tippe was ein..
Hat wenig sinn xD, aber macht Spaß! Iwann werde ich es auch schaffen hahaha
-
Soll wohl eine eigene Scriptsprache sein. Ich frag mich grad ob man damit echte kleine Apps erstelen kann die man nicht immer über das Programm starten muss und vielleicht sogar irgendwie verbreiten kann (ohne einfach hier den Sourcecode zu posten).
Mit der kostenlosen
PocketPC.ch App von meinem 7 Mozart T8698 aus geschrieben.
-
Nein das wird wohl nie gehen. Wobei .... Mit Multitasking ... Und dann immer diesen Debug-Prozess laufen lassen... Wer weiss =)
Verbreiten geht im Mome t wohl nur über Posten.
-
AW: Microsoft Research TouchStudio
Hallo,
...ein interessanter Punkt zur Anwendung wäre zum Beispiel das Erstellen und Abspeichern von Screenshots.
Dafür ist im TouchStudio die API (Bereich "Phone") entsprechend aufgeführt:
Zitat:
screenshot() : Picture
Takes a screenshot of the phone screen. Tap to close it.
Bilder (und Screenshots) lassen sich entsprechend speichern. Nur wie ein solches Script aus einer Anwendung, deren Screenshot man sichern möchte, starten läßt, habe ich noch nicht so ganz herausgefunden.
Ein weiterer interessanter API-Bereich wäre zum Beispiel "Radio" mit Funktionen wie:
Zitat:
set frequency(frequency : number) : Nothing
Sets the frequency.
Zitat:
set on(on : Boolean) : Nothing
Turns on or off the radio.
=> damit sollten sich sehr schnell eigen-definierte Senderspeicher erstellen lassen.
EDIT:
Die Funktion "set frequency" erfordert die Angabe der Frequenz (UKW in MHz).
In der deutschen Spracheinstellung ist das Komma als Seperator eingestellt. Entsprechend wird auch die aktuelle Frequenz mit der Funktion "frequency" angezeigt. Leider können wir aber nur den Punkt als Seperator in "TouchStudio" eingeben. Auch auf dem (deutschen) Ziffernblock findet sich der Punkt anstelle des Komma.
Das eigentliche Komma (vom Logik-Block) ist als Seperator für die Trennung mehrerer Funktionen vorbelegt und führt bei der Verwendung in den Frequenzen zu Fehlern.
Mit der Sprachumstellung auf Englisch wird der Punkt als Seperator bei Frequenzen verwendet und das Setzen der UKW-Frequenzen funktioniert einwandfrei. Jetzt wird auch der im Ziffernblock als Seperator angebotene Punkt korrekt verwendet.
FAZIT:
In dieser (Beta-)Version werden wir vielleicht an mehreren Stellen mit der Inkompatibilität zur deutschen Spracheinstellung rechnen müssen.
(Analog zu der fehlenden Index-Suche im Zune-Player vor dem NoDo-Update.)
Viel Spaß beim Testen.
P.S.
-
Cool die habe ich gar nicht gesehen. Mit SV wäre das nie zu bewerkstelligen.
-
Hi Leute, mir is mal aufgefallen das es z.b. unter den algorith. Beispielen bei fabonacci und Co. die Meldung "Params" gebracht wird und die Struktur nicht ausführbar ist. Hat einer ne Lösung?
-
Noch ein kleiner Nachtrag von mir, heißt 1. "Need Params (x0)" und zweitens muss wohl x0 belegt werden. Habs mit x0:= [zahl] <- Also ne echte zahl im code probiert, aber funzt net.
-
Liste der Anhänge anzeigen (Anzahl: 1)
Mini Tutorial: Screenshots in TouchStudio
Beispiel: Erstellen von Screenshots innerhalb des TouchStudios:
- Die action "print songs" beinhaltet die drei actions "find songs", "screenshot zeigen" und "screenshot speichern"
- Mit der action "find songs" werden alle Songs gefunden, die kürzer als 90 Minuten dauern.
- Mit der action "screenshot zeigen" werden die Treffer als Ergebnis auf dem Bildschirm ausgegeben.
- Mit der action "screenshot speichern" wird ein Screenshot in "Gespeicherte Bilder" abgespeichert.
Die folgenden "actions" habe ich alle in dem selben "script" erstellt.
Zitat:
action print songs():Nothing
find songss()
screenshot zeigen()
screenshot speichern()
Zitat:
action find songs():Nothing
foreach song in media -> songs do
if song -> duration < 90 then
song -> post to wall
Zitat:
action screenshot zeigen():Nothing
phone -> screenshot -> show
Zitat:
action screenshot speichern():Nothing
phone -> screenshot -> save to library
=> Der Screenshot mit den Treffern meiner Abfrage ist im Ordner "Gespeicherte Bilder" abgelegt worden. Von dort kann er z.B. als eMail-Anhang (jpg) versendet werden.
=> Ergebnis meiner Abfrage:Anhang 66295
Anmerkungen:
..."scripte" sind die "blauen Kacheln" nach Starten des TouchStudios
..."actions" sind die ausführbaren Programmteile (vergleichbar mit "Makros")
...um mehrere "actions" zu kombinieren, müssen diese in dem selben "script" liegen
...kopieren/einfügen/verschieben von "actions" zwischen "scripten" wird anscheinnend noch nicht unterstützt
=> damit sind die "actions" der Beispiel-Scripte in eigenen Scripten nicht direkt zu verwenden, sondern müssen dort erneut eingegeben werden.
EDIT: es lassen sich einzelne Programmzeilen kopieren und wieder einfügen. Allerdings kann dies dazu führen, daß verwendete Variablen ungültig werden und neu deklariert werden müssen.
weitere Fragen:
a) wie können Screenshots in anderen anwendungen erstellt werden?
b) wie können diese "actions" in den "scripten" mit einem Klick ausgeführt werden?
-
zur Frage vom Beispiel aus "Classic algorithms"
@flo6661
Das kann auch nicht gehen ... ;-)
Folgendes:
In dem script "classic algorithms" befinden sich 4 actions:
a) fac 5 b) factorial c) fib 5 d) fibonacci
Allgemein: Die actions innerhalb eines scriptes können miteinander kombiniert werden. Und genau das ist hier der Fall.
Hier => Die action "fab 5" beinhaltet "factorial" und die action "fib 5" beinhaltet "fibonacci"
"fab 5" bzw. "fib 5" enthalten jeweils eine Schleife mit 5 Durchläufen, innerhalb derer die Berechnungsroutine "factorial" bzw. "fibonacci" aufgerufen werden.
Diese Berechnungsroutinen erwarten einen Startwert bei Aufruf. Dieser sogenannte Übergabeparameter wird in den Klammern beim Aufruf der Funktion mitgeteilt.
Dafür liefern diese Berechnungsroutinen auch am Ende einen Rückgabewert an die aufrufende Funktion, die diese dann verwerten/anzeigen kann.
In Deinem Beispiel für "fibonacci" steht
Zitat:
action fibonacci(x0):Number
=> erwartet "x0" (in den Klammern) und gibt zurück "Number" (nach dem Doppelpunkt)
Somit kannst Du z.B. die action "fibonacci" nicht direkt aufrufen, sondern nur aus einer anderen action heraus inklusive des Übergabeparameters, hier also aus der action "fib 5" heraus.
Du könntest die Berechnungsroutine (= action) "fibonacci" auch aus einer anderen action heraus aufrufen, sie muß sich nur in dem gleichen script befinden und beim Aufruf einem Übergabeparameter mitgeben.
Diese erforderlichen Übergabeparameter werden beim Erstellen einer action mit den "params" definiert. In der Liste der actions steht dann "needs params (x0)".
Bei actions ohne erfoderlichen Übergabeparameter steht "runable".
-
AW: Microsoft Research TouchStudio
Erstma vorne weg, Danke! Die actions sind also nichts anderes als Prozeduren/Funktionen (selbst erstellte)? Fange langsam an die Sache zu verstehen. Die Params sind also globale Variablen?
Kannst du mir evtl. auch sagen auf welcher Programmiersprache die Sache beruht? Dann kann ich selber nach gucken und muss nich immer Fragen. :D
THX
-
AW: Microsoft Research TouchStudio
...sorry, keine Ahnung. Das wird wohl eine neu geschaffene "Script-Sprache" von MS sein.
Ich habe mir das heute auch das erste Mal angesehen.
Und das mit dem "selber nachsehen" ist momentan sicher noch ein wenig schwierig, da es noch keine Dokumentation hierzu gibt. (...soll aber noch kommen)
Aktuell bleibt ersteinmal nur "probieren". Das beliebte "try & error" ;)
-
AW: Microsoft Research TouchStudio
Wenn ihr was neues üner Dokumentationen wisst, konataktiert mich bitte :D
Ich hoffe einfach, dass man irgendwann nen GUI gestalten kann. Das wäre für mich wichtig.
-
Mini Tutorial: Aufruf mit Übergabeparameter und Rückgabewert
Ein weiteres Beispiel:
Anzahl der Songs, deren Länge kürzer als eine vom Benutzer vorgegeben Zahl von Minuten ist.
Der Benutzer gibt hierfür die gewünschte Sekundenzahl in einem Eingabefeld ein.
EDIT: Der Benutzer gibt hier die Sekunden und nicht die Minuten ein !!
Der Quellcode funktioniert natürlich trotzdem. :p
Zitat:
action Ergebnis():Nothing
Suche(phone -> number box("Minuten")) -> post to wall
Zitat:
action Suche(minuten):Number
anzahl := 0
foreach song in media -> songs do
.... if song -> duration < minuten then
........ anzahl := anzahl + 1
anzahl
Hier sind zwei actions definiert. "Ergebnis" und "Suche".
"Ergebnis" ist eine ausführbare action.
"Suche" ist in "Ergebnis" integriert und erwartet einen Übergabewert beim Aufruf. Nach Beenden von "Suche" gibt diese einen Zahlenwert an "Ergebnis" zurück.
Die action "Ergebnis" ruft die action "Suche" auf und übergibt bei diesem Aufruf eine Zahl, die sie sich über die Funktion eines Eingabefeldes für den Benutzer holt. Diese Funktion "phone -> number box("Minuten")" übergibt damit die gewünschte Zahl der Minuten zur action "Suche".
Die von der action "Suche" zurückgegebene Zahl (= Anzahl der Treffer) wird dann auf dem Bildschirm angezeigt.
Die action "Suche" erhält bei ihrem Aufruf eine Zahl, die sie in der Variablen "minuten" speichert. Außerdem gibt sie einen Zahlenwert ("Number") an die aufrufende Funktion wieder zurück.
In dem Schleifendurchlauf wird für jeden Titel, der kürzer als die angegebene Minutenzahl ist, die Variable "anzahl" um 1 erhöht.
Zum Schluß wird der Wert der Variablen "anzahl" an die aufrufende Funktion "Ergebnis" zurückgegeben.
-
AW: Microsoft Research TouchStudio
@ahref2
Ich befürchte, daß sich eine GUI nicht wird umsetzen lassen.
Aktuell funktioniert diese Scripteingabe nur wie auf der Konsole.
Scripte lassen sich gar nicht starten, nur actions innerhalb der Scripte.
Actions lassen sich erst nach dem:
1. Starten der Anwendung (TouchStudio)
2. und Wahl "Start Coding"
3. und Auswahl des Scriptes
4. und Auswahl der action
5. und tip auf "run" starten.
=> das sind 5 taps, um eine Funktion auszuführen !!!
Kein Aufruf der actions aus anderen Programmen.
Kein Shortcut auf dem Homescreen, also kein "Anpinnen" einzelner actions.
Damit schränken sich die Anwendungsmöglichkeiten momentan noch sehr ein.
Auf jeden Fall aber steckt hier viel Potential drin. Ich bin gespannt auf die weitere Entwicklung.
-
Vorläufige Zusammenfassung: Microsoft Research TouchStudio in der konkreten Anwendung
Hallo,
...wie sieht es bei Euch aus?
...habt Ihr schon interessante Funktionen ausprobiert?
...hat schon jemand ein Script erstellt, welches er auch nutzt?
Auf Grund der noch fehlenden Dokumentation sind sicher noch mehr Möglichkeiten gegeben als die von mir bisher angetesteten.
Also: wenn jemand schon Ergebnisse hat.... hier posten!!! ;)
===================================================
Suchender und sortierender Zugriff auf Mediendateien (Songs, Artists, Alben, Fotos)
=> nette Spielerei, aber soviele Dateien habe ich nicht in den Medien. Bin dort in Zune genauso schnell mit Suchergebnissen.
Und ganz ehrlich, bisher wäre ich gar nicht auf die Idee gekommen, alle Lieder zu zählen die zwischen 3 und 4 Minuten dauern und deren Interpret im Namen ein "xyz" enthält.
Ist mit diesen Scripten schnell möglich, aber aktuell sehe ich hier für mich noch keinen Anwendungsbereich.
Screenshots:
=> lassen sich innerhalb der Scripte/actions von TouchStudio erstellen und speichern. Aber kein Aufruf von anderen Anwendungen aus.
Damit schränkt sich der (sinnvolle) Bereich z.B. auf die "Sicherung" von (Such-)Ergebnissen und Verläufen der actions ein.
Radiofunktionen steuern:
=> ein/aus schalten und Status abrufen funktionieren. Die Eingabe von Frequenzen scheitert aktuell noch an der fehlerhaften Einbindung der deutschen Sprachversion. (Komma als Seperator erwartet, Punkt aber wird vom TouchStudio gesetzt)
Doch selbst wenn über diesen Weg z.B. eigene "Festsender" zu erstellen wären, so ist der Aufruf dieser actions doch immer noch deutlich umständlicher (= 5 taps), als wenn ich das Radio direkt bediene.
Kontaktfunktionen:
=> bei den bisherigen Versuchen, aus den gespeicherten Kontakten eMail-Adressen oder Telefonnummern zu extrahieren, bin ich zu keinem Ergebnis gekommen.
Der suchende/filternde Zugriff auf die gespeicherten Kontakte scheint nicht implementiert zu sein.
Allgemein:
Die freigegebenen APIs scheinen sich auf die Bereiche Multimedia (Songs/Alben, Fotos, Sprachaufnahme, Videoaufnahme, Radio) und das Aufrufen des eMail-Clients zu beschränken.
===================================================
(nahe) Zukunft ?:
Wenn mit den nächsten Releases aktuelle Probleme (dt. Sprachversion) behoben werden sollten und weitere unterstützte Schnittstellen sowie neue Funktionen (z.B. einzelne actions als "shortcut" auf den homescreen zu pinnen) dazukämen, könnte das TouchStudio noch interessant werden.
Als Beispiel eine "action" als "Live-Tile" auf dem Startschirm, welches von dort mit einem tap ausgeführt wird (ohne sichtbares Starten des TouchStudios, quasi "im Hintergrund", inklusive automatischem Beenden) und sofort das Ergebnis in diesem Live-Tile anzeigt.
Konkretes Beispiel 1: Radio-Festsender, der sich mit tap auf Live-Tile starten läßt und anschließend im Live-Tile die aktuelle Empfangsstärke anzeigt.
Konkretes Beispiel 2: Radiostart per tap auf Live-Tile mit Abfragebox nach Sendernummer und anschließender Anzeige des aktuell spielenden Sendernamens im Live-Tile.
-
AW: Microsoft Research TouchStudio
Also das mit dem Live tile wäre wohl SEHR aufwendig zu programmieren... entweder für uns oder für MS...
-
Liste der Anhänge anzeigen (Anzahl: 1)
Mini Tutorial: Beispiel (1) Musik-Scanner
Beispiel "Musik-Scanner":
(Dieses Script besteht nur aus der einen action "scan".)
Scanprogramm, welches alle Songs für eine vom Benutzer gewählte Zeit (in Sekunden) anspielt.
Beim Start des Scriptes wird vom Benutzer die gewünschte Anspieldauer in Sekunden erfragt.
Anschließend werden die gewählte Zeit (Sekunden) pro Titel und die Gesamtanzahl der Titel ausgegeben. Während das Script läuft, wird der aktuelle Titel bzw. dessen Index-Nummer angezeigt.
Da TouchStudio nicht den Lockscreen deaktivieren kann, stoppt/pausiert das Script beim Bildschirmschoner und der Player spielt das aktuelle Lied weiter (ohne Zeitbegrenzung).
Wer den gesamten Scanvorgang über eine längere Zeit durchlaufen möchte, sollte zuvor in den Einstellungen den Bildschirmschoner deaktivieren.
Code:
action scan():Nothing
x:= 0
wait:=phone -> number box("Wie viel Sekunden soll das Lied angespielt werden?")
wait -> post to wall
"Sekunden pro Titel" -> post to wall
" " -> post to wall
titel:= media -> songs -> count
titel -> post to wall
"Titel gesamt" -> post to wall
" " -> post to wall
"Aktueller Titel:" -> post to wall
for 0 < i < titel do
player -> play(media -> songs -> get(i))
x:= i + 1
x -> post to wall
phone -> sleep(wait)
Wie man(n) an dem beigefügten Screenshot erkennt, habe ich insgesamt 51 Songs auf dem Handy und eine Anspielzeit von 10 Sekunden gewählt. Der Screenshot wurde während des 5. Songs angefertigt.
Anhang 66438
Bei einfügen der folgenden Zeile in der "for-Schleife" wird dann zusätzlich der Titel des aktuell angespielten Songs angezeigt:
Code:
media -> songs -> get(i) -> name -> post to wall
-
Mini Tutorial: Beispiel (2) einfacher (Kurzzeit-)Wecker mit mp3
Beispiel "Wecker"
(Auch dieses Script besteht aus nur einer action "wecker".)
Es ein wenig schwierig, hier den Code lesbar und nachvollziehbar darzustellen. Hoffe es hilft dem einen oder anderen trotzdem. :cool:
Bei diesem kleinen Programm haben wir zwei ineinander verschachtelte "if...then...else" Bedingungen.
Erste Abfrage, ob in Stunden geweckt werden soll, wenn nicht, dann Abfrage, ob in Minuten geweckt werden soll; wenn auch nicht, beenden des Programms.
Vorab kann der Benutzer noch die Nummer (=Index) des gewünschten Weckliedes eingeben.
Während der Laufzeit wird die verbleibende Anzahl von Sekunden angezeigt.
Auch hier gilt: der Lockscreen darf sich nicht aktivieren, ansonsten stoppt das Script.
Viel Spaß beim probieren.
Code:
action wecker():Nothing
s := 0
titel := phone -> number box("Titelnummer")
if phone -> confirmation box("fuer Minuten bitte Abbrechen","Stunden") then
h := phone -> number box ("Stunden")
s := h * 60 * 60
else
if phone -> confirmation box("zum Beenden bitte Abbrechen","Minuten") then
m := phone -> number box ("Minuten")
s := m * 60
else
engine -> stop
x := s
for 0 < i < s do
phone -> sleep(1)
x := x - 1
print := "verbleibende Sekunden: "
print -> concat(x) -> post to wall
player -> play(media -> songs -> get(titel))
-
Hi Leute. Erstma danke für die Tutorials. Hat einer einen Befehl parat wie ich den Bildschirm löschen bzw. von Zeichen befreien kann? (Wie nach dem Start eines Scriptes). Bei T.P. war das ja z.b. "Cls", also ne Idee?thx
-
AW: Bildschirm löschen ähnlich der Funktion "cls"
...nein, sorry, ich habe bisher noch keine ähnliche Funktion ausfindig machen können.
Auch die Idee, ein Bild per "post to wall" auf die executive-wall zu senden bringt nichts, da das Bild nur unten angefügt wird.
Die "wall" scrollt noch nicht einmal selbstständig. Schade.
-
Liste der Anhänge anzeigen (Anzahl: 1)
Mini Tutorial: Beispiel (3) Erweiterter Kurz- und Langzeit-Wecker
Beispiel: Wecker bzw Timer
Dieses Script enthält mehrere actions. Alle actions müssen sich in dem selben Script befinden.
Durch die Aufteilung in mehrere actions und das Auslagern wiederholt benötigter Routinen bleibt das Programm etwas übersichtlicher beim "tippen".
Außerdem lassen sich so z.B. Design- und Layouteinstellung zentral für alle Funktionen einstellen.
Die Funktionen "getZeit()" und "strZeit()" haben einen Übergabeparameter mit drei zulässigen Werten:
1 = Stunden
2 = Minuten
3 = Sekunden
Neben der hier beschriebenen action "TimerMinuten" habe ich noch "TimerStunden" und "TimerSekunden" erstellt. Diese greifen ebenso auf die hier beschriebenen actions zu. Beim Aufrufen werden nur die entsprechenden Übergabeparameter verwendet.
Beim Aufrufen der action "getLied" kann eine 0 oder eine 1 übergeben werden.
Bei einer 0 erscheint eine Eingabeaufforderung, in der der Benutzer die Nummer des gewünschten Liedes einträgt.
Bei einer 1 wird das Lied per Zufall aus den auf dem Handy vorhandenen Songs ausgewählt.
(...dies ist in dem nachfolgenden Beispiel der Fall)
Wenn die noch verbleibende Zeit größer als eine Stunde ist, erfolgt die Ausgabe auf die "executive wall" (= Bildschirm) Stundenweise.
Anschließend alle 5 Minuten, ab 5 Minuten Restzeit minütlich und in der letzten Minute alle 10 Sekunden.
So behält man(n) den Überblick und der Bildschirm wird auch bei längeren Laufzeiten nicht zu schnell "vollgemüllt".
Auch hier gilt: das Handy darf über die gesamte Laufzeit keinen Lockscreen aktivieren. Ansonsten pausiert das "Weckerporgramm". :p
Ganz allgemein läßt sich sagen, daß solche Anwendungen schon das "schnelle Eingeben" von Programmen übersteigen.
Und da weder das Kopieren ganzer actions noch das Sichern bzw. Versenden per eMail unterstüzt werden, haben wir hier einen gewaltigen Arbeitsaufwand in einem unsicheren Umfeld.
(...jaja, wenn ich mein vorzeitiges Nodo-Update per Hardreset und neu Flashen zurücksetzen muß, sind alle Scripte unwiederbringlich verloren...)
Code:
action TimerMinuten():Nothing
lied := getLied(1)
sec := getZeit(2)
strLied(lied) -> post to wall
strZeit(2) -> concat(sec/60) -> post to wall
strLinie() -> post to wall
while sec > 3600 do
getRest(sec) -> post to wall
phone -> slepp(3600)
sec := sec - 3600
while sec > 300 do
getRest(sec) -> post to wall
phone -> slepp(300)
sec := sec - 300
while sec > 60 do
getRest(sec) -> post to wall
phone -> slepp(60)
sec := sec - 60
for 0 < i < sec do
getRest(sec) -> post to wall
phone -> slepp(10)
i := i + 10
sec := sec - 10
player -> play(media -> songs -> get(lied))
Code:
action getLied(typ):Number
if typ = 0 then
b := phone -> number box("Lied")
else
b := math -> rand(media -> songs -> count)
b
Code:
action getZeit(typ):Number
b := 0
if typ = 1 then
b := phone -> number box("Stunden")
b := b * 3600
else
if typ = 2 then
b := phone -> number box("Minuten")
b := b * 60
else
if typ = 3 then
b := phone -> number box("Sekunden")
else
engine -> stop
b
Code:
action getRest(sec):String
str := "leer"
if sec > 3600 then
str1 := "Stunden: "
str := str1 -> concat(math -> floor(sec/3600))
else
if sec > 60 then
str2 := "Minuten: "
str := str2 -> concat(math -> floor(sec/60))
else
str3 := "Sekunden: "
str := str3 -> concat(sec)
str
Code:
action strLied(lied):String
str := "Song: " -> concat(media -> songs -> get(lied) -> name)
str
Code:
action strZeit(typ):String
if typ = 1 then
str := "Stunden: "
else
if typ = 2 then
str := "Minuten: "
else
if typ = 3 then
str := "Sekunden: "
else
str := "Fehler"
str
Code:
action strLinie():String
str := "=================="
str
Anhang 66493
-
AW: Microsoft Research TouchStudio
Wow, jrahe!
Ich glaube du solltest deinen Kenntnis-Stauts mindesten eins hinauftun!
Super, wirklich! Wobei ich das mit dem getZeit nicht 100 Prozentig verstehe...
-
AW: Microsoft Research TouchStudio
Hallo ahref2, (ahref2 => AEG)
...kurz zu Deinen drei Punkten
a) Live-Tiles
b) die action "getZeit"
c) mein Kenntnis-Status
a) Live-Tiles für TouchStudio
Die Live-Tiles waren von mir ja nur als "Wunsch" geäußert, um eine deutliche Steigerung des Nutzwertes zu erhalten. Ob und in wie weit dies für die Programmierer schwierigg sein könnte, weiß ich nicht.
Auf jeden Fall bietet Microsoft eine API für Tiles an. Jedes (?) Programm läßt sich ja als Tile auf den Startbildschirm legen. In den meisten Fällen allerdings nur in der obersten Ebene. Ich kann z.B. "Musik-Hub" als Tile nutzen, nicht aber einzelne Songs oder Alben. Beim "Kontakte-Hub" können wir auch eine Ebene tiefer als Tile nutzen, nämlich einzelne Kontakte. Nicht aber z.B. gezielte Nummern eines Kontaktes für eine Sofortwahl. Auch beim "Office-Hub" können wir sowohl diesen als Tile nutzen als auch eine Ebene tiefer einzelne Dokumente/OneNote-Notizen.
=> für TouchStudio hätte ich gerne Tiles zwei Ebenen tiefer (Programmstart -> Script -> action), um einzelne actions sofort ausführen zu können.
=> alternativ hätte ich gerne Tiles eine Ebene tiefer (= Script) mit der gleichzeitigen Option, Scripte mit einer definierten "Haupt-action" (z.B. main) sofort starten zu können.
Auch für Live-Tiles bietet Microsoft Unterstützung an. Programme wie z.B. "WeatherDuck" nutzen diese auch. Und wenn die Informationen auf dem Live-Tile nur beim Aufruf des Programms oder in diesem Fall einer action aktualisiert werden, wäre das vollkommen ausreichend.
Auch hier sollte sich der Programmieraufwand für die Profis von MS Research in Grenzen halten. ;)
b) Die action "getZeit" in meinem Beispielprogramm wird von dem "Haupt-Programm" action TimerMinuten() aufgerufen. Bei diesem Aufruf wird in Klammern der Wert 2 übergeben, der in der action "getZeit" der Variablen "typ" zugewiesen wird. Damit kann eine Differenzierung erfolgen, ob der Benutzer in der Eingabeaufforderung phone -> number box(""..."") Stunden, Minuten oder Sekunden eingeben soll.
(typ=1 steht für Stunden, typ=2 steht für Minuten, typ=3 steht für Sekunden)
Der so abgefragte Wert wird dann der Variablen b zugewiesen und entsprechend des typs wieder in Sekunden umgerechnet, so daß der Rückgabewert b immer in Sekunden erfolgt.
Für den Fall eines ungültigen Übergabewertes (nicht 1,2 oder 3) wird das Programm beendet mit engine -> stop.
Diese action "getZeit" nutze ich auch von anderen "Hauptprogrammen" wie z.B. einem Kurzzeit-Timer, der von dem Benutzer nur die gewünschte Sekundenzahl abgefragt wissen möchte. Hier wird die action "getZeit" dann mit dem Übergabewert 3 aufgerufen.
Analog dazu bei einem Langzeit-Timer, wo der Benutzer die Anzahl der Stunden eingeben soll, erfolgt der Aufruf mit dem Übergabewert 1.
In allen Fällen liefert die action "getZeit" einen Wert in Form einer Zahl = Sekunden zurück. Mit diesen Sekunden können die aufrufenden Programme dann entsprechend weiter rechnen.
c) meinen Kenntnisstand sehe ich relativ. In Bezug auf das neue Windows Phone 7 bin ich sicher ein "normaler Anwender". Wenn in einigen Bereichen die Kenntnisse darüber hinaus gehen, so habe ich z.B. Defizite in allem, was mit "social networking" zusammenhängt.
Somit habe ich nach der Device "keep it simple" einfache Angaben erstellt.
Was sonst sollte ich z.B. angeben bei dem von mir genutzten Betriebssystem? :confused:
Hier der Versuch einer kurzen Beschreibung:
Zitat:
Auf meinem Rechner (VIA Epia 1 GHz / 1 GB RAM) läuft komplett lüfterlos und lautlos (keine bewegliche Teile, keine HD, kein Laufwerk) das gesamte Betriebssystem inkl. 2 Datenpartitionen auf einem 8 GB USB-Stick.
Die beiden Datenpartitionen (2 GB Daten für temporäre Speicherung, 1,5 GB für permanentes online-Backup inkl. Versionierung) sind auf dem USB-Stick nicht gesondert schreibgeschützt, dafür besteht aber außerhalb des Systems keinerlei Zugriffsmöglichkeit. (USB-Stick erscheint physikalisch als 4 GB-Stick)
Auf der 4 GB Systempartition ist ein "nLite Windows XP Prof. SP3 partly embedded EWF protected" installiert. In dieser Version können keinerlei Änderungen am System vorgenommen werden, es ist komplett schreibgeschützt. Das gesamte System wird virtuell in den Arbeitsspeicher geladen und arbeitet nur dort. Bei einem Neustart "grüßt täglich das Murmeltier" = alles unverändert.
Das System ist sauschnell, relativ sicher und wenig anfällig gegen Viren oder "zumüllen" beim Antesten neuer Programme.
Da erschienen mir die Angaben "Windows XP" und "normaler Anwender" am ehesten verständlich, oder ???
Gruß Jörg
-
A)
Das war eher darauf abgezielt, dass es wohl seehrschwer waere fuer ein einzlnes Skript ein eigenes Live tile zu machen.
B)
Achso... Jetzt versteh ich :D
C)
Du hast sehr viel gemacht, ohne irgendwelche Dokumentationen, das hat mich beeindruckt :D
-
"Grund"-Dokumentation Microsoft Research TouchStudio
Hallo ahref2,
...im Prinzip sind alle strukturierten Programmiersprachen gleich aufgebaut.
...und eine gewisse "Grund"Dokumentation bzw. Hilfe ist ja gegeben:
a) beim Start des TouchStudios auf "Help", dort sind auf der dritten Seite "api" alle Funktionen inkl. Kurzbeschreibung aufgelistet
b) beim Arbeiten mit dem Editor werden immer nur zulässige Funktionen angezeigt
c) als weitere Hilfe werden im Editor in einer kleinen Zeile zwischen Code und Eingabeblock die Angaben über zulässige/erforderliche Parameter u.ä. dargestellt
d) Fehlerkorrektur durch Debugger (z.B. rot dargestellte ungültige Variablen nach copy & paste von Programmzeilen in andere action)
e) automatische Korrektur aller Elemente innerhalb des gleichen Scriptes/action (z.B. bei Umbenennungen)
Und im übrigen warten wir jetzt nicht nur auf die Dokumentation, sondern auch auf die Implementierung der 1500 neu freizugebeden apis (z.B. auf Kontakte und Kalender) ;)
s.a. Bericht und Video
Cooles Beispiel für die Grafik-Programmierung ist hier zu finden:
Video Demonstration der Entwickler von TouchStudio
-
Liste der Anhänge anzeigen (Anzahl: 4)
Mini Tutorial: Beispiel (4) Fun App "Text auf Foto"
Hallo,
...hier als nächste Testanwendung eine neudeutsch "fun-app", mit der mehrfach gedrehter farbiger Text auf ein Bild projiziert wird, welches anschließend unter "Gespeicherte Bilder" wiederzufinden ist. Viel Spaß beim Probieren. :p
Die Applikation greift auf die Kamera zu, wartet, bis ein Bild erstellt worden ist, und fragt dann den gewünschten Text und die erforderlichen Parameter ab, um das Ergebnis anschließend in "Gespeicherte Bilder" zu sichern.
Mit dieser Anwendung ließen sich auch nach leichter Modifikation Fotografien mit eingeblendetem aktuellem Datum erstellen oder allen gespeicherten Aufnahmen per Serienscript ein Wasserzeichen resp. Copyright einfügen. Der Phantasie sind keine Grenzen gesetzt (...außer den gesperrten Apis durch MS. Aber auch das wird sich mit dem nächsten update hoffentlich ändern).
(...inspiriert wurde dies durch das Video des MS Research Teams)
ACHTUNG: Auf Grund der unvollständigen Implementierung der deutschen Sprachversion können keine Werte zwischen 0 und 1 eingegeben werden resp. werden diese falsch interprtiert.
Im Falle der Funktion "sleep" führt dies bei einem Wert von 0, also "sleep(0)", zu einem Einfrieren des Gerätes.
Alle Werte außer 0 sin zulässig. Werte kleiner als 1 werden als 1 interpretiert.
Das Script besteht aus insgesamt 6 actions:
1.) main => startet das Programm und ruft die anderen actions auf
2.) getColor => gibt die vom Benutzer gewünschte Textfarbe zurück
3.) getFontSize => gibt die Schriftgröße in Abhängigkeit von der Buchstabenanzahl zurück
4.) strDrehen => gibt den Abfragetext, wie oft der Text gedreht werden soll
5.) strFarbe => gibt den Abfragetext, welche Farbe gewünscht wird
6.) strText => gibt den Abfragetext, welcher Text auf dem Bild erscheinen soll
In der action "getFontSize" hat sich für die Schriftgröße der Wert "2800/Anzahl der Buchstaben" als relativ ausgewogen und Bildfüllend erwiesen.
In der action "getColor" habe ich mit einem flag gearbeitet, um die "if...then...else"-Abfragen nach dem übergebenen z-Wert auf zwei Bereiche aufteilen zu können. Dies war notwendig auf Grund des eingeschränkten Platzes auf dem Editor-Bildschirm.
Code:
action main():Nothing
senses -> snap camera picture
pic := senses -> camera picture
pic -> post to wall
text := phone -> string box (strText())
drehen := phone -> number box(strDrehen())
farbe := phone -> number box(strFarbe())
font := getFontSize(text)
i := 0
x := 5
while i < x * drehen do
pic -> draw text(i, i, text, font, i, getColor(farbe))
phone -> sleep(1)
i := i + x
phone -> screenshot -> save to library
Code:
action getColor(z):Color
x := z
flag := 0
if x = 1 then
color := colors -> red
flag := 1
else
if x = 2 then
color := colors -> blue
flag := 1
else
if x = 3 then
color := colors -> yellow
flag := 1
else
if x = 4 then
color := colors -> green
flag := 1
if flag = 0 then
if x = 5 then
color := colors -> white
else
if x = 6 then
color := colors -> grey
else
if x = 7 then
color := colors -> black
else
color := colors -> rand
color
Code:
action getFontSize(text):Number
x := text -> count
size := math -> floor(2800/x)
size
Code:
action strDrehen():String
str := "Wie oft soll der Text gedreht werden?
Bitte eine Zahl zwischen 0 und 9 eingeben."
str
Code:
action strFarbe():String
str := "Wählen Sie eine Farbe.
1= Rot 2= Blau 3= Gelb 4= Grün
5= Weiß 6= Grau 7= Schwarz
0 oder jede andere Zahl = Zufall"
str
Code:
action strText():String
str := "Welcher Text soll auf dem Bild erscheinen?"
str
Die vier folgenden Bilder sind als Beispiele mit dieser kleinen Anwendung erstellt worden:
(...wie gesagt, die Schriftgröße ist von dem Programm automatisch nach Anzahl der Buchstaben gewählt worden)
Anhang 66541 Anhang 66542 Anhang 66543 Anhang 66544
P.S.: Wenn ich die Ergebnisse so sehe, kann mann(n) mit dieser Anwendung direkt ein Kunstprojekt starten.
Dazu bietet sich folgender Kulturtip an:
Hamburg: 11. Lange Nacht der Museen: 16. April 2011
Lange Nacht der Museen, Hamburg 2011
Sorry, das war zwar OT, mußte aber sein ;)
-
Liste der Anhänge anzeigen (Anzahl: 1)
Mini Tutorial: Beispiel (5) "Datum auf Foto"
Hier als "seriöse" Anwendung noch ein kleines Script, mit dem sich z.B. zu Dokumentationszwecken Fotos mit sofort eingeblendetem Datum erstellen lassen, die dann im Ordner "Gespeicherte Bilder" abgelegt werden.
Natürlich läßt sich anstelle des Datums oder auch zusätzlich jeder beliebige andere Text einfügen.
Dieses Script besteht aus einer einzigen action "fotoDatum"
Code:
action fotoDatum():Nothing
senses -> snap camera picture
pic := senses -> camera picture
pic -> post to wall
pic -> draw text(10,10, phone -> now, 60, 0, colors -> white)
phone -> sleep(1)
phone -> screenshot -> save to library
Dieses kleine Script läßt sich innerhalb von 2-3 Minuten eingeben (...mit Übung noch schneller).
Fast alles wird nur durch "antippen" zusammengestellt.
(Erstellen von Scripten ist z.B. sehr gut in diesem Video von MS Research zu sehen)
Wichtig hier sind die Werte in "pic -> draw text(...)"
Die beiden ersten Werte geben die Position des Textes auf dem Bild an.
Dann folgt der Text, in diesem Fall mit der Funktion "phone -> now" das aktuelle Datum + Zeit
Es folgen die Schriftgröße, die Drehung des Textes in Grad und schließlich die Farbe.
Als Ergebnis mit den obigen Einstellungen sehen die Bilder folgendermaßen aus:
Anhang 66549
-
Liste der Anhänge anzeigen (Anzahl: 1)
Mini Tutorial: Beispiel (6) "Copyright auf Foto" in hoher Qualität
Bisher habe ich die Ergebnisse aus TouchStudio als Screenshots gespeichert.
Hier jetzt noch ein kleines Script, mit dem Text auf Fotos in der Originalauflösung eingetragen wird.
Über dieses Script lassen sich z.B. alle Fotos mit individuellen Informationen versehen.
In dem folgenden Beispiel lasse ich in der oberen Ecke einen Copyright-Vermerk eintragen.
Die Anwendung nimmt zunächst das Foto auf und speichert es in "Gespeicherte Bilder" ab. Dieses Original bleibt erhalten. Es wird von der Anwendung erneut geöffnet und der gewünschte Text eingetragen. Anschließend wird dieses wieder abgespeichert.
Wir erhalten also immer eine unveränderte Originalaufnahme und eine individuell modifizierte Aufnahme.
Auch dieses Script besteht aus nur einer action "fotoDatumGross"
Für dieses Script mache ich mir die Eigenschaft von Windows Phone 7 zu Nutze, alle Fotos nach Erstellungsdatum zu indizieren. Dies bedeutet, daß die zuletzt gespeicherte Aufnahme den höchsten Index erhält.
Da der Index aber bei 0 anstelle von 1 beginnt, muß für die Auswahl des letzten Fotos mit der Funktion "get(index)" die Anzahl der Fotos minus 1 genommen werden.
Für die Verarbeitung der einzelnen Schritte braucht das Handy etwas Zeit, darum sind die Schritte "phone -> sleep(1)" eingefügt.
z.B. muß die Original-Aufnahme erst korrekt abgespeichert sein, bevor per Index darauf zugegriffen werden kann.
Code:
action fotoDatumGross():Nothing
senses -> snap camera picture
pic := senses -> camera picture
pic -> save to library
phone -> sleep(1)
x := media -> pictures -> count
pic1 := media -> pictures -> get(x-1)
pic1 -> draw text(20, 20, "c by XYZ 2011", 40, 0, colors -> black)
phone -> sleep(1)
pic1 -> post to wall
phone -> sleep(1)
pic1 -> save to library
Alternativ läßt sich hier z.B. auch das Jahr dynamich einfügen anstelle einer statischen Angabe.
Die Zeile für "pic1 -> draw text()" könnte dann so aussehen
Code:
pic1 -> draw text(20, 20, "c by Name " -> concat(phone -> now -> year), 40, 0, colors -> black)
Das hier beigefügte Foto habe ich auf 25% der Originalgröße reduziert. In der oberen linken Ecke ist der dezente Copyright-Vermerk zu sehen.
Anhang 66550
-
AW: Microsoft Research TouchStudio
Zitat:
Zitat von
jrahe
Auf jeden Fall bietet Microsoft eine API für Tiles an. Jedes (?) Programm läßt sich ja als Tile auf den Startbildschirm legen. In den meisten Fällen allerdings nur in der obersten Ebene. Ich kann z.B. "Musik-Hub" als Tile nutzen, nicht aber einzelne Songs oder Alben.
Nur mal eben als Berichtigung, auch Alben und Songs lassen sich als Tile auf den Startscreen ziehen.
Ansonsten aber echt coole erste "Apps", bin gespannt was hier noch alles gebastelt wird :)
-
...sorry, meine voreilige Formulierung. :)
Beim Musik-Hub lassen sich u.a. Alben, Künstler, einzelne Songs, Playlisten und Radiosender in beliebiger Anzahl auf den Startschirm pinnen. Sicherlich geht noch mehr... Das spricht auf jeden Fall für die Machbarkeit von (Live)Tiles für Scripte/actions des TouchStudios. :D
-
AW: Microsoft Research TouchStudio
Ich bin da weiterhin skeptisch ;)
Aber wir werden sehen, was die Zukunft bringt.
-
AW: Microsoft Research TouchStudio
Hallo!
Nachdem ich hier nun seit fast einem halben Jahr mitlese, habe ich mich jetzt registriert und versuche gleich mal etwas beizutragen...
Diese Funktion macht 2 Bilder, die dann "überlagert" angezeigt (und gespeichert) werden:
Code:
action TwoPics() : Nothing
senses -> snap camera picture
pic := media -> create picture(senses -> camera picture -> width, senses -> camera picture -> height)
pic -> blend(senses -> camera picture, 0, 0, 1)
senses -> snap camera picture
a := 50 / 100
pic -> blend(senses -> camera picture, 0, 0, a)
phone -> sleep(1)
pic -> post to wall
phone -> sleep(1)
pic -> save to library
Wichtig ist die Zeile "a := 50 / 100": Da weder "0,5" noch "0.5" funktioniert, muss "5 / 10" oder "50 / 100" benutzt werden.
Das ist dann auch gleich die Lösung für das Setzen der Radiofrequenz, was auch schon als Problem angesprochen wurde.
-
AW: Microsoft Research TouchStudio
Hallo moroli,
...zunächst einmal Herzlich Willkommen hier im Forum.
Und dann: ENDLICH ein weiterer Teilnehmer, der hier seinen Code präsentiert. :p
(...dachte schon, ich sei der einzige, den es interessiere)
Freue mich schon auf die nächsten Beiträge.... :p
Der Tip mit dem workaround 50/100 anstelle der 0,5 resp. 0.5 ist SUPER. :top:
(...hätte ich auch drauf kommen können...)
Gruß Jörg
-
Workaround für fehlerhafte deutsche Spracheinstellung bei Dezimaltrennzeichen
Den "workaround" von moroli habe ich jetzt folgendermaßen umgesetzt:
Ich habe zwei kleine actions erstellt, die einen Wert erhalten und dessen Zehntel resp. Hunderstel zurückgeben.
Diese sind sinnvoll, wenn man(n) öfters Dezimalwerte in seienen Scripten verwenden muß/möchte.
Da in TouchStudio wohl keine "globalen Variablen" möglich sind, müssen diese beiden actions in jedes Script kopiert werden, in dem Dezimalwerte benötigt werden.
Code:
action d(x):Number
x/10
Code:
action h(x):Number
x/100
Somit können z.B. Funktionen verwendet werden wie:
"phone -> sleep(d(2))" anstelle von "phone -> sleep(0,2)"
"radio -> set frequency(88 + d(9))" anstelle von "radio -> set frequency (88,9)"
"phone -> vibrate(h(2))" anstelle von "phone -> vibrate(0,02)"
-
AW: Microsoft Research TouchStudio
Script zur Nutzung der ZDF-Mediathek
Hintergrund: Die "NoFlash"-Version der ZDF-Mediathek enthält Links zu Videodateien für Windows Media Player und Quicktime. Allerdings werden die mov-Dateien nicht abgespielt mit dem Hinweis, dass von WP7 nicht unterstützt, und bei den asx-Dateien passiert (zumindest bei mir) gar nix. Allerdings enthalten die asx-Dateien einen Link zu einer wmv-Datei, die ja abgespielt werden könnte, wenn man denn nur an den Link rankommt - und hier kommt nun mein Script ins Spiel:
Code:
web -> browse("http://www.zdf.de/ZDFmediathek/suche?flash=off")
L := phone -> string box("URL")
phone -> sleep(1)
a := web -> download(L)
xx := a -> to upper -> index of("< REF HREF", 0)
x := a -> index of("\"", xx) + 1
y := a -> index of("\" />", x) - x
if y < 0 then
y := a -> index of("\"/>", x) - x
b := a -> substring(x, y)
phone -> sleep(1)
web -> media link(b) -> post to wall
Anmerkungen zur Eingabe: Der Backslash (\) vor dem Anführungszeichen (") bei den Befehlen "index of(...)" braucht nicht eingegeben zu werden. Ich habe z.B. nur ein Anführungszeichen (") als Text eingegeben und heraus kommt automatisch "\"" (Escape-Zeichen werden also automatisch gesetzt).
Vorgehensweise:
(1) Script starten
(2) es öffnet sich der Webbrowser mit der ZDF-Mediathek
(3) nun ein Video(!) suchen/auswählen
(4) Bei den Links zu den Videodateien (unterhalb dem Text "Windows Media Player") längere Zeit auf "Abspielen" drücken, bis sich das Kontextmenü öffnet, dort dann "Link kopieren" wählen
(5) So oft die Zurück-Taste drücken, bis sich der Browser schließt und das Script wieder fortgesetzt wird (Achtung: nicht zu oft drücken, sonst wird das Script abgebrochen; es dauert evtl. etwas bis das Script wieder anläuft)
(6) Es öffnet sich ein Eingabefeld "URL": Dort mittels dem "Einfügen-Icon" (Update sei Dank) den zuvor kopierten Link einfügen und mittels Button "done" bestätigen
(7) Nun sollte das Video auf der "Wall" angezeigt werden und kann mittels Button "play" gestartet werden ;)