iTunes: Script ausführen bei Song-Wechsel

...

Hallo DarkThougts,


hmm - mich interessierte die Technik, habe mich informiert - eine Lösung gefunden und lege diese Lösung nicht ganz uneigennützig hier ab, falls ich etwas Ähnliches mal selber brauche...

Im Prinzip reiner Egoismus. ;)

Gruß Andi
 
Hallo,

das ist kein Beispiel. Der gezeigte Code ist mehr als fehlerhaft und solltest Du nicht als Referenz verwenden.

Des Weiteren: Warum sollte eine AS Anweisung in einer Cocoa Application auch den Sinn unterstreichen?
Zeit 10.5 gibt es in den meisten Fällen keine Berechtigung dafür.

... und so geht es:

- Projekt anlegen
- ScriptingBridge Framework verlinken

Lesen: http://developer.apple.com/document...e.html#//apple_ref/doc/uid/TP40006104-CH4-SW1

- Instanz erzeugen, die den Dienst verrichtet
- klinke Dich in die Notifications von iTunes ein > reagiere auf die Events

Weswegen stellst du mir fertigen Code zur Verfügung?
Der wertlos ist und mit dem Du kein Resultat erzielen kannst.
Da Du noch keine Zweifel geäußert hast gehe ich davon aus, dass Du aus Bequemlichkeit noch nichts selbst getestet hast.

Nochmals: Ohne lesen wird das nichts.

@Andi:

Für den Code als solches kannst Du nichts, deshalb zur Vorbeugung: Die Kritik geht nicht gegen Dich.

By the way:

Andi geht hin > sucht Dir Code > publizeirt ihn hier ... und Du DarkThoughts warst nicht in der Lage dazu?
Denke mal darüber nach.

Viele Grüße
 
XCode starten -> File -> New Project... -> Application -> AppleScript Application -> Pfad für den Projektordner angeben und den Code in die main.m pasten -> Build an Go...

Dieser Projekttyp ist falsch.
Du möchtest eine Cocoa-Application erzeugen und keine AppleScriptStudio-Application.
Der Verwendungszweck ist ein anderer.

Schöner kann man den Start nicht bekommen...

Become an Xcoder: http://www.cocoalab.com/?q=becomeanxcoder

Sogar in deutsch. ;-)

First things first: It's Xcode, not xCode or XCode or x-code. Remember that now.


Viele Grüße
 
@little_pixel
Und wieder wirfst du mir massenweise Unterstellungen hinterher.
Was ich gemacht habe und was nicht, kannst du nicht wissen.
Auch nicht wieso.
Ich werde nicht näher darauf eingehen.

Meiner Meinung nach solltest du mal dringend (!!!) über deinen Diskussionsstil hier nachdenken.
Mal etwas über den Tellerrand (hier: deine eigene völlig verbohrte Einstellung) zu schauen hat noch niemandem geschadet...
 
Ich finde little_pixel hat schon Recht. Von nichts kommt nichts und den Anfang zum vorgehen hast du ja auch bekommen. Stell dich doch nicht so an, wo sind wir denn hier.
 
Ich muss dich bitten, nicht persönlich zu werden

... und Du wagst es solche Äusserungen zu artikulieren:

Und wieder wirfst du mir massenweise Unterstellungen hinterher.
Was ich gemacht habe und was nicht, kannst du nicht wissen.
Auch nicht wieso.
Ich werde nicht näher darauf eingehen.

Meiner Meinung nach solltest du mal dringend (!!!) über deinen Diskussionsstil hier nachdenken.
Mal etwas über den Tellerrand (hier: deine eigene völlig verbohrte Einstellung) zu schauen hat noch niemandem geschadet...

Jetzt mal Tacheles:

Du hast nichts gemacht! Wo ist Dein Code, wo hackt es bei der Umsetzung?

Es gibt Leute, die stellen Ihren Code aus ideologischen Gründen zur Verfügung (Linux).
Andere, um zu protzen.
Wieder andere, um damit eine Anregung zur Selbsthilfe zu geben, denn ich nehme an, ich müsste mich auch in deinen Code einlesen, gewisse Dinge nachschlagen und meine Changes selbst implementieren.

Deine Worte. Also behalte ihn nicht für Dich, sondern lass Dir helfen.
Publiziere ihn doch hier und jeder kann Dir helfen und davon lernen.

Ah ja, lernen willst Du ja nicht, ich vergass.

... und ja: Ich zweifle an Deiner Aussage Du seist Entwickler gewaltig.

Ich habe Dir jetzt so viele Infos gegeben und von Dir kommt ständig nur das eingeschnappte Zeugs.
Wenn Du Sympathie möchtest, dann solltest Du in die Politik wechseln und nicht in der Wirtschaft tätig werden.

Viele Grüße
 
Richtig, ich habe nichts gemacht.
Muss ich das nun jetzt auch noch begründen?
Wenn's denn sein muss: Hatte noch keine Zeit dafür.

Von mir aus kann der Thread geschlossen werden, ich krieg den Code schon hin wenn's denn sein muss.

@little_pixel
Ich glaube das Problem liegt daran, dass du nicht verstehen kannst oder willst, dass mir die Funktion nicht sooo wichtig ist, dass ich jetzt Stunden darin investiere.
Es gibt ausser Computer auch noch anderes, und wenn du vor einem Vorhaben feststellst, dass es nicht "so einfach" zu bewerkstelligen ist wie du anfänglich gedacht hast, musst du reflektieren, ob es dir die Mühe wert ist.
Auch das gehört dazu.
Wenn du jetzt der Super-Duper-Programmierer bist, der aufgrund seiner Objective C Kenntnisse einfacht mal so schnell Java, PHP oder weiss der Geier was lernt, dann mein Respekt.
Ich bin dazu nicht in der Lage.
Jetzt warte ich auf deine Unterstellung, dass ich deswegen kein "guter" Entwickler bin. :D
 
Wieso entwickelst du wenn du keine Zeit dafür hast bzw auch besseres zu tun hat? Widerspricht sich doch alles schon ein wenig.. Und fürs Entwickeln musstest du dir doch früher oder später doch auch mal irgendwas durchgelesen haben und wieso klappt das dieses mal einfach nicht?
 
@value
Das ist ein Ermessen von Aufwand und Ertrag, nichts anderes.
Meine "Stammsprache" VB.NET und einige andere, die ich nur zu Teilen beherrsche (Perl, PHP, Bash-Scripting, AppleScript) habe ich in den Grundlagen erlernt, weil mir das daraus resultierende "Produkt" den Lernaufwand Wert war.
Für die Funktionalität des "Musiktitel in Colloquy einfügen" ist mir der Zeitaufwand eines ganzen Abends (möglicherweise) nicht Wert, da ich auf die Funktionalität eh nicht angewiesen bin.
Wenn du starken Hunger hast und merkst, dass das Schweinefilet mit Spargel zu lange dauert, überlegst du vielleicht auch, ob du nicht einfach 'ne Dose Ravioli kochst...

Dass ich er erlernen könnte, steht ausser Frage.
Allerdings muss zu diesem Schritt das Verhältnis angemessen sein.
Oder anders ausgedrückt: wollte ich eine tolle Applikation bauen, die vielleicht noch jemandem anders einen Mehrwert bringt als nur mir selbst, würde ich mir das "von Grund auf" Erlernen von Objective C wahrscheinlich durchaus "antun".

Jetzt sagt mir nur, ihr versteht diese Argumente nicht...

@little_pixel
Es liegt mir fern, dich persönlich anzugreifen.
Ich nehme stark an, du siehst das genauso.
Erfahrungsgemäss ist der konstruktive Austausch online massiv schwieriger bzw. eher "Streit-gefährdet" als im Real Life.
In diesem Sinne bitte ich dich um Entschuldigung.
Nichtsdestotrotz finde ich es auch hier notwendig, andere Sichtweisen zumindest zu tolerieren.
 
hier gehts ja ab. ihr solltet aufhören euch gegenseitig "runter" zu machen (mir ist jetzt kein besseres wort eingefallen).
schönen tag noch
 
Es liegt mir fern, dich persönlich anzugreifen.
Ich nehme stark an, du siehst das genauso.
Erfahrungsgemäss ist der konstruktive Austausch online massiv schwieriger bzw. eher "Streit-gefährdet" als im Real Life.
In diesem Sinne bitte ich dich um Entschuldigung.
Nichtsdestotrotz finde ich es auch hier notwendig, andere Sichtweisen zumindest zu tolerieren.

Mir liegt es auch fern! :cake:

... und ich wette, auch wenn Du es jetzt nicht glauben wirst, wenn wir real reden würden, dann würde alles viel viel anders aussehen.
Ich bin noch auf der Suche nach Verstärkung für Freewarentwicklung. ;-)

Viele Grüße
 
Ich glaube dir.
Habe schon viele derartige Diskussionen geführt, alle online.
Das Problem liegt meines Erachtens darin begründet, dass durch die scheinbare Anonymität die Hemmschwelle wesentlich niedriger ist.
Möglichweise lege ich zu viel Wert darauf, dass meine persönlichen Gründe akzeptiert werden und weiche oft genug zu sehr vom Wesentlichen ab.

Sollte das eine Aufforderung sein?
Danke für's Angebot, aber ich muss aus drei Gründen ablehnen:
- Als "Objective C" Anfänger mache ich mich ungerne an ernsthafte Projekte, da ich die nötige Codequalität zumindest anfangs nicht garantieren kann
- Es ist zumindest in der nahen Zukunft nicht abzusehen, dass ich Objective C erlernen werde. Wie bereits mehrfach gesagt, für die Problemstellung dieses Threads ist mir der Aufwand zu hoch, so dass ich lieber die "Looping Apple Script" Variante vorziehe oder ganz auf die Funktion verzichte
- Durch meine berufliche Tätigkeit als Entwickler (ob du mir glaubst oder nicht) habe ich abends meist keine Lust, Entwicklungsprojekte umzusetzen (von kleinen Scripts zum Eigengebrauch ohne jegliche Fehlerbehandlung mal abgesehen)
 
...

Hallo little_pixel,

wäre es bei diesem ganzen Trubel noch möglich zu erklären was jetzt an dem Code falsch ist?

Das AS Projekt habe ich gewählt weil wir uns in einem AppleScript-Unterforum befinden. Mir ist auch klar, dass es von mir "hingewurschtelt" war.
Funktionieren tut es soweit aber, dass der Finder den Songwechsel anzeigt - wahrscheinlich könnte man relativ einfach Colloquy noch überreden das /music zu tippern. (ist nicht elegant weil Colloquy wohl eine "PlugIn-Umgebung" hat)

Mehr war vom TE auch nicht gefordert und ich kann auch nachvollziehen, dass man für so einen "Schnickschnack" nicht viel Zeit aufwenden will oder auch kann. (Wollen != Können)

Andi geht hin > sucht Dir Code...

Das ist absolut nicht richtig!

...falls ich etwas Ähnliches mal selber brauche...

Darum wäre ich auch dankbar wenn Du erklären könntest was Falsch ist.

Ich bin noch auf der Suche nach Verstärkung für Freewarentwicklung.

Da hätte ich gleich eine Idee für einen Daemon der eben bei bestimmten Notifactions ein AppleScript ausführen könnte bzw. den man auch anskripten kann um bestimmte Informationen abzufragen...
iTunes ist bestimmt nicht das einzige Programm welches dieses System benutzt.

Gruß Andi
 
Hallo zusammen,

das erste und trivialste ist eine Klasse wird groß geschrieben.
Etwas anderes ist nicht legitim. Auch keine Kommentare sind nicht tragbar.
Sind aber insofern nur ein "Schönheitsfehler".

http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

• Diese Grundvoraussetzung wurde nicht beachtet. Der Fehler ist leider auch nicht duldsam.

• init > entsteht ein Dangling Pointer > bei Deinem Code nicht, da Du zum Glück Fehler s.o. begannen hast

• Wäre Fehler A nicht, dann fehlt dennoch die Implementierung eines AR-Pools

• Wäre dieser Fehler nicht, dann hättest Du Deinen Dangling Pointer

Wie Du siehst ein Teufelskreis, der da entsteht. Zum Glück eine gute Kombination an Fehlern, die Dein Programm laufen lässt.
Aber Du hast dem "System enorm geschadet". (für diese kleine Applikation)

• init > was passiert, wenn Deine Erstellung des Objektes verweigert wird? (if ist hier Pflicht)

• Der Import von Header-Dateien scheint mir nicht ganz sinnig

• Die Umsetzung in einer Datei widersprich jeglicher Struktur (siehe bitte Beispiele)

• init Methode deklarieren, für? Schönheitsfehler.

... usw. Ich bitte um Verständnis, dass ich keine Schulung geben kann.

Du solltest Deine Info.plist auch mit "Application is agent" erweitern. Ist unschön, wenn das als Applikation läuft.

Ich persönlich schreibe auch erst seit drei Monaten Cocoa. Deshalb weiß ich eigentlich auch nichts ;-)

"DarkThoughts" werte es bitte nicht als Angriff.
Aber Andi, Du hast Dir Gedanken gemacht, Dich belesen, versucht etwas zu bauen und fragst jetzt nach. Da helfe ich sehr gerne weiter.
Ich persönlich finde es toll, wenn man jemandem helfen kann. Aber jemandem etwas hinwerfen und er freut sich, obwohl ihm die Umstände egal sind ist für mich mein Wissen unnütze weitergegeben.
Meines Erachtens habe ich Infos, seit Beginn des Threads, gemessen an der von DarkThoughts erbrachten Leistung kundgetan.
Mit all den Infos wäre er mindestens schon genauso weit wie Du.

Ausserdem habe ich mein Code auch irgendwo publiziert. Wie schon erwähnt.

Ich beobachte die AS-Abteilung immer rege. (obwohl es mich nahezu nicht mehr interessiert)
Fehlt Dir nicht auf: Hallo... ich brauche... kann man... gibt mir jemand...
Dabei gibt es null Eigeninitiative. Wer keine Zeit hat, der soll sein Wunsch in Auftrag geben und dafür bezahlen.
Klar, ich muss nicht dadrauf antworten. Dann gibt man den Leuten die Links + die notwendigen Informationen. Dann sind sie beleidigt, weil sie damit als solches nichts anfangen können.

Naja, herrscht ja wieder Frieden hier :)

Viele Grüße
 
Zuletzt bearbeitet:
Ergänzung:

- wenn Du in ein Hotel gehst, dann checkst Du ein
- Du verbleibst dann für 5 Tage da und nutzt den ganzen Service

Was machst Du nach Ablauf der Zeit? Richtig: auschecken.

Wo macht das Dein "angemeldeter Beobachter"? usw.

Wer erhält jetzt nach dem Schließen Deiner Applikation die Nachricht? Eigentlich ist diese ja noch für den Notification-Center existent und versucht Dir immer noch Nachrichten zuzustellen. Kommen aber nicht an...

Viele Grüße
 
Zuletzt bearbeitet:
Hier die "einfache" Apple-Script-Variante:

Code:
set output_old to null
set output_new to null

repeat while true
	
	tell application "iTunes"
		
		set output_old to artist of current track & " - " & name of current track
		
		if output_old is not equal to output_new then
			
			set output_new to artist of current track & " - " & name of current track
			
			tell application "Colloquy"
				tell every chat room of connection 1 to send message output_new
			end tell
			
		end if
		
	end tell
	
	delay 60
	
end repeat

Ob sich dieses triviale Script wirklich sehr negativ auf CPU & RAM auswirkt werde ich in der Folge etwas tracken.
 
Hallo,

http://h775982.serverkompetenz.net:9080/abstracture_public/projects-en/cronnix

Ist das vielleicht besser?
Ich bevorzuge das für wiederkehrend Aufgaben immens.

Zu Deinem Code:

Du schickst 8 Anfragen zu iTunes für zwei Informationen.
Klar bei diesem kleinen Programm ist das egal.

- current track schickst Du 4 Mal zu iTunes und wartest auf Antwort

"output_new" wird nochmals berechnet?
Warum? Es steht doch bereits in output_old. Übersehe ich da etwas?

Da Du "output_new" nicht zuweist schickst Du zum zweiten Mal "name" und "artist" zu iTunes.
Warum? Vorher vielleicht in einer Variable halten?

Warum erzeugst Du zwei String-Konstanten? Würde Dich bei einem richtigen Programm RAM kosten.
Tut es hier auch, ist aber irrelevant.

Ich meine das wieder nicht böse und Du wirst vielleicht mit "bei diesem Skript ist das doch egal" argumentieren.
Solche "Fehler" sind Anfängerfehler. Das ist aber bei JEDER Sprache, egal welcher, gleich. Das hat zunächst auch nichts mit Optimierung zutun. Vielmehr präzisen und überlegten Code.

Ich möchte nochmals zum Ausdruck bringen, dass ich das wirklich nicht auf Dich als Person beziehe und Deine Kompetenz damit nicht in Frage stellen möchte.
Das sind nur Tipps von > an einen Entwickler.

Ich finde 8 Anfragen für 2 Informationen nicht gerade nice.

Tipp:

Da Du Dir keine Abbruchbedingung gebaut hast, z.B. wenn iTunes geschlossen wird > Apfel + Punkt bricht das ab.

Viele Grüße


Hier mit drei Anfragen an iTunes:
Code:
set output_old to null
set output_new to null

set myTextDel to " - "

repeat while true
	
	try
		
		tell application "iTunes"
			
			-- aktuellen Titel ermitteln
			set theITunesTrack to current track
			
			-- Interpret & Titelname des aktuellen Titels holen
			set theTrackName to name of theITunesTrack
			set theTrackArtist to artist of theITunesTrack
			
			-- Nachrichttext zusammensetzen
			set output_old to theTrackArtist & myTextDel & theTrackName
			
			if (output_old is not equal to output_new) then
				
				-- neue Nachricht
				set output_new to output_old
				
				-- Nachrichtt setzen
				-- tell application "Colloquy" to tell every chat room of connection 1 to send message output_new
				
			end if
			
		end tell
		
	on error
		
		-- Vielleicht "" als Nachricht setzen?
		
	end try
	
	delay 60
	
end repeat
 
Du hast recht, ist genau meine Argumentation.
Quick & Dirty halt.
Bei so kleinen Progrämmchen ist mir egal, wenn es minimal mehr Ressourcen braucht.
Ist ja nur für privat.

Aber: Bei der Arbeit geht das natürlich nicht.
Weiss ich... ;)
 
ich will jetzt ja nicht noch salz in irgendwelche wunden streuen, aber ... ;)

...ich finde diese "ich-weiss-was-aber-sag-es-nicht"-prozeduren hier auch so manches mal etwas ermüdend. man muss ja nicht weiterhelfen, wenn einem der nötige anreiz dazu fehlt. wenn nix kommt, wird sich der themen-autor wohl nochmal rühren müssen.
die frage-stellung und intention war hier doch klar und ehrlich. viel schlimmer finde ich postings in 5 foren, mit prioritäts-vorgabe "wichtig wichtig" und ständiges nachfragen, ob denn nicht doch jemand eine antwort auf eine schlecht gestellte frage hat.
aber selbst dann kommen die themen-autoren auch ohne eine antwort irgendwann mal ins grübeln und liefern dann mehr informationen...

naja, ich will jetzt auch keine grundsatzdiskussion anzetteln, denn genau das ist's ja, was ich so ermüdend finde...
 
Zurück
Oben Unten