25/05/07

Des morceaux d'AppleScripts... #4

AppleScript

Billets précédents :

  1. Des morceaux d'AppleScripts… #1
  2. Des morceaux d'AppleScripts… #2
  3. Des morceaux d'AppleScripts… #3

test activation UI (Accès universel)

    -- test activation UI (Apple code)
    tell application "System Events"
        if UI elements enabled is false then
            tell application "System Preferences"
                activate
                set current pane to pane "com.apple.preference.universalaccess"
                display dialog "UI element scripting is not enabled. Check \"Enable access for assistive devices\"" buttons {"OK"} default button 1 with icon 2
                return
            end tell
        end if
    end tell
end tell

trouvé sur Gilles Carpentier's Research Web Site : test de l'activation de Accès Universel?… génial, c'est exactement ce que je cherchais.

Chronomètre en AppleScript

property t_command : quoted form of ("import time" & (ASCII character 10) & "print time.time()")
 
set temps_Debut to (do shell script "python -c " & t_command) as real
--
---code
--
set secondes_total to ((((((do shell script "python -c " & t_command) as real) - temps_Debut) * 100) + 0.5) div 1) / 100

trouvé sur les Forums MacBidouille : Chronomètre en AppleScript.
Un moyen efficace de chronométrer la vitesse d'exécution d'un script.

Fonction d'arrondissement à 2 chiffres après la virgule

Dans le billet : Des morceaux d'AppleScripts… #3, il était présentée une fonction d'arrondissement à  2 chiffres aprés la virgule ; en effet, comme le confirme AppleScript 2.1 Help: round : la commande round arrondit un nombre en nombre entier ou le coupe aux unités. Par défaut, round arrondit au nombre entier le plus proche. Vous avez la possibilité d'ajouter un paramètre facultatif afin de préciser d'arrondir à l'entier supérieur, inférieur, en tendant vers zéro ou au nombre le plus proche, or tout ceci ne permet pas, a priori, d'obtenir des décimales derrière la virgule?…
Sauf, si on fait tout simplement ainsi :

(round (3.1415926535 * 100)) / 100

pour obtenir 2 décimales derrière la virgule.

Les avantage étant : conserver le séparateur de décimales naturellement utilisé par le système en fonction des options de localisation ainsi que la simplicité et la légèreté du code. D'autres exemples sont disponibles sur MacScripter : How do I round a number to two decimal places?.

Diverses autres ressources

Ecrire dans un fichiers texte (logs)

on write_to_file(this_data, target_file, append_data)
	try
		set the target_file to the target_file as text
		set the open_target_file to ¬
			open for access file target_file with write permission
		if append_data is false then ¬
			set eof of the open_target_file to 0
		write this_data to the open_target_file starting at eof
		close access the open_target_file
		return true
	on error
		try
			close access file target_file
		end try
		return false
	end try
end write_to_file
 
try
	--replace this line with your statements
on error error_message number error_number
	set this_error to "Error: " & error_number & ". " & ¬
		error_message & return
	-- change the following line to the name and location desired
	set the log_file to ((path to desktop) as text) & "Script Error Log"
	my write_to_file(this_error, log_file, true)
end try

AppleScript Guidebook: Essential Sub-Routines - Writing to File.

commenter (0)

25/05/07

Des machins (en AppleScript) pour Geektool...

Geektool

Dans d'autres billets de ce blog, on pouvait voir que, et comment, Geektool pouvait exécuter des scripts AppleScript. A partir de là, il devient très facile de faire quelques bricoles.

Afficher les X dernières lignes de la Console

Lors de son exécution, le logiciel échange des messages concernant ses activités entre les différentes parties du système. Ces informations sont enregistrées dans les historiques des messages. Console permet de visualiser n'importe quel message échangé entre le système et les applications. (Aide Console)

Pour y accéder avec Geektool, on peut se contenter de demander la lecture du fichier console.log… ouais, mais non, Geektool affichera alors tout le contenu du fichier, et même en jouant sur la taille de la fenêtre, le résultat sera peu satisfaisant et peu esthétique. De plus, il contient une information répétitive et inutile la date du jour, dans 2 types de formats possibles, c'est pourquoi je me suis fait une petit script :

console.scpt

(*    
    console.scpt
    HP <http://blogosx.jupiterii.com>
 
    updated May. 24, 2007
*)
 
property myXlines : 3
 
set uid to do shell script "id -u"
set shortDate to (do shell script "date '+%h %d'" as text) & space
set hippenDate to (do shell script "date '+%Y-%m-%d'" as text) & space
 
on simpleReplace(search, replace, subject)
	local search, replace, subject, ASTID
	set ASTID to text item delimiters
	try
		set text item delimiters to search
		set subject to text items of subject
		set text item delimiters to replace
		set subject to "" & subject
	end try
	set text item delimiters to ASTID
	return subject
end simpleReplace
 
set lastXlines to ((do shell script "tail -n " & myXlines & " /Library/Logs/Console/" & uid & "/console.log") as text)
 
set myConsole to my simpleReplace(shortDate, "", lastXlines)
set myConsole to my simpleReplace(hippenDate, "", myConsole)

Il suffit de modifier la valeur numérique de property myXlines pour ajuster la quantité de messages affichés.

infoSys.scpt

(*    
    infoSys.scpt
    HP <http://blogosx.jupiterii.com>
 
    updated Jul. 18, 2007
*)
 
on bash(cmd)
	try
		do shell script (cmd)
	on error
		"error"
	end try
end bash
 
on run
	set hostname to bash("hostname -s")
	set uptime to bash("uptime | cut -d, -f1 | colrm 1 10")
	set RAM to bash("top -l 1 | awk '/PhysMem/ {print $8}'")
	set ethernet to bash("ifconfig en0 | grep 'inet ' | awk '{print $2}'") --ethernet
	set wifi to bash("ifconfig en1 | grep 'inet ' | awk '{print $2}'")
	set CPU_temp to bash("sysctl -a kern.cpu_temp | awk -F \": \" '/cpu_temp:/ {print $2}'")
	set start_volume to bash("df -h / | tail -1 | awk '{print $5}'")
	set swapfile to bash("/usr/bin/du -hc /var/vm/swap* | grep 'total' | awk '{print $1}'")
	
	set path2public to bash("whoami") & "/Public/"
	set publicfile to bash("/usr/bin/du -hc /Users/" & path2public & "* | grep 'total' | awk '{print $1}'")
	if (publicfile = "0B") then
		set publicfile to "empty"
	else
		set Xfiles to bash("ls /Users/" & path2public & " | wc -l | awk '{print $1}'")
		set wordfile to "files"
		if ((Xfiles as real) is less than or equal to 1) then
			set wordfile to "file"
		end if
		set publicfile to publicfile & space & "(" & Xfiles & space & wordfile & ")"
	end if
	
	set load_average to word 1 of bash("uptime | sed 's/.*load averages: //g' | cut -d, -f2")
	
	--warning 1.00, critical 3.20 (*2 : dual core)
	set load_message to ""
	if (load_average is greater than or equal to 1 * 2) then set load_message to "(warning)"
	if (load_average is greater than or equal to 3.2 * 2) then set load_message to "(critical)"
	
	if wifi = "" then set wifi to "OFF"
	
	set final_output to ¬
		hostname & " : " & ethernet & return ¬
		& "AirPort : " & wifi & return ¬
		& return ¬
		& "Public : " & publicfile & return ¬
		& "Uptime : " & uptime & return ¬
		& "RAM : " & RAM & return ¬
		& "Temp. CPU : " & CPU_temp & "°C" & return ¬
		& "Charge moyenne : " & load_average & space & load_message & return ¬
		& "Utilisation disque : " & start_volume & return ¬
		& "SWAP : " & swapfile
	
	return final_output
end run

Un petit script destiné à afficher diverses informations systèmes (réseau : IP, hostname et occupation du dossier Public ; RAM, CPU, occupation du disque de démarrage, uptime, charge…). L'affichage de la température nécessite l'installation de SpeedIt, un framework de Increw Team.

Utilisation d'Applescript avec GeekTool

Créer un nouveau shell (GeekTool) :

osascript '/path/to/myScript.scpt' | iconv -f utf-8 -t ucs-2-internal

l'utilisation de iconv est facultative et permet l'affichage correct des caractères accentués.

commenter (0)

25/05/07

Polices libres

polices

Un petit billets pour y recenser les polices libres au fur et à mesure…

Dustismo : standard sans-serif font, with italics, bold, bold italics included, présentée dans cette discussion : Dustismo. On peut aussi consulter : Cheapskatefonts.com, ou aussi dans ce dossier fonts.

WebCore Fonts : They are Verdana, Tahoma, Times New Roman, Arial, Trebuchet, Comic Sans, Impact and others : screenshot (4.3. Webcore Fonts) et le lien de téléchargement : webcore-fonts

DejaVu : une des plus connues, avec un wiki assez sympa.

Chopin Script : vu sur dafont.com qui ne permet pas d'effectuer des recherches sur ce thème avec son moteur de recherche interne mais une petite sitesearch Google (ou autre) retourne quelques contributions issues de : Orgdot, Mattt's Fonts ou The Gnome Project.

commenter (0)