08/07/07

Définir l'encodage des caractères avec Emacs

Emacs

Passablement déçu par Smultron, que j'ai du mal à comprendre certaines fois ; je me suis tourné vers Emacs pour justement éviter certains soucis triviaux, comme par exemple ceux inhérents à l'encodage des caractères… reste qu'il y a une petite astuce à connaître pour "forcer l'encodage" avec Emacs : Emacs et les jeux de caractères, cette page est très instructive, didactique et claire.

En résumé, il est possible d'ajouter dans le contenu du buffer des instructions spéciales pour permettre à emacs de choisir le bon encodage pour chaque fichier. Emacs, pour sélectionner l'encodage, recherche, dans la première ligne du fichier, la présence de chaînes de la forme suivante :

-*- coding: utf-8 -*-

Pour ne pas interférer avec le contenu du document, ces instructions peuvent apparaître dans des commentaires adaptés au contenu du document… selon si il s'agit, par exemple, de CSS, d'un fichier PHP, ou HTML, etc.

commenter (0)

08/07/07

AppleScript Météo-France pour GeekTool

AppleScript (météo pour GeekTool)

Un AppleScript destiné à parser les cartes de prévisions météorologiques départementales, sur le site de Meteo France.

Le script utilise la commande curl deux fois successivement, une première fois pour récupérer le code source de la page HTML, et, une deuxième fois pour récupérer l'image GIF et la télécharger vers le dossier renseigné par la propriété myfolder. C'est d'ailleurs le seul résultat (utile) de ce script que de finalement télécharger une image.

weather.scpt

(*    
    weather.scpt
    HP <http://blogosx.jupiterii.com>
 
    updated Jul. 18, 2007
*)
 
property dpt : "75"
property myfolder : "/Users/path/to/folder"
property line2parse : "7"
--debug
property debug : false
 
on run
	if debug is true then
		set scriptname to string2get("/", (POSIX path of (path to me)) as string, "last")
		set begin to timestamp("begin of " & scriptname) & return
	end if
	
	set page to "http://www.meteofrance.com/FR/mameteo/prevDept_iframe.jsp?LIEUID=DEPT" & dpt
	set m to curl4content(page, "<img src=\"/img/picto/cte/moy/")
	
	if first word of m is not "curlbug" then
		try
			--parse the result of curl4content
			set m to string2get(return, m, line2parse)
			set m to string2get("<img src=\"", m, 2)
			set m to string2get("\"", m, 1)
			
			--wURL is partially based on 'page' variable (declared above)
			set wURL to "http://" & (string2get("/", page, 3)) & m
			
			--remove old pic and curl the new one (no string returned if property debug is false)
			return rm2curl(myfolder, wURL)
		on error bug
			beep
			--error displayed with some useful information
			return timestamp(((POSIX path of (path to me)) as string) & space & bug)
		end try
	else
		return timestamp(((POSIX path of (path to me)) as string) & space & m)
		return
	end if
end run
 
--functions
 
on curl4content(page, delim)
	try
		if delim is not "" then
			return do shell script "curl " & page & " | grep " & quoted form of delim
		else
			return do shell script "curl " & page
		end if
	on error bug
		beep
		return "curlbug:" & return & bug
	end try
end curl4content
 
on replaceString(theText, oldString, newString)
	set text item delimiters to oldString
	set tempList to every text item of theText
	set text item delimiters to newString
	set theText to the tempList as string
	set text item delimiters to ""
	return theText
end replaceString
 
on string2get(delim, istring, pos)
	set text item delimiters to delim
	set temp to every text item of istring
	set text item delimiters to ""
	if pos is "last" then
		return ((last item) of temp)
	else if pos is "first" then
		return ((first item) of temp)
	else
		return ((item pos) of temp)
	end if
end string2get
 
on rm2curl(myfolder, wURL)
	global begin, scriptname
	try
		--remove old pic (try because no verification before)
		do shell script "rm " & quoted form of ((myfolder) & "/weather.gif")
	end try
	do shell script "curl " & quoted form of wURL & " >" & quoted form of ((myfolder) & "/weather.gif")
	if debug is true then
		return (begin) & timestamp("end of " & scriptname)
	end if
end rm2curl
 
on timestamp(output)
	return (do shell script "date '+%d/%m/%y'") & space & (time string of (current date)) & " : " & output
end timestamp

La propriété line2parse doit être renseignée après avoir lu le code source de la page pour y repérer l'emplacement de la localité pour laquelle on veut obtenir la météo, dépendamment de sa position dans le code source ; il faut, alors, compter manuellement les occurrences de cette chaîne : <img src="/img/picto/cte/moy/ (par exemple).

Le résultat est : le téléchargement de l'image correspondant aux prévisions à 08h, 14h ou 20h ; selon l'heure à laquelle le script s'exécute.

Si le (mini)mode débug est activé (property debug : true), la date et l'heure de démarrage et de fin de l'exécution du script peuvent être affichés si tout se passe bien ; sinon on a l'affichage de l'erreur rencontrée, et ce, que debug soit activé ou non. Pour l'utilisation avec Geektool, prévoir un emplacement, au cas où… on peut s'aider de property debug : true pour obtenir une sortie même si le script se déroule sans erreur ; pour avoir ainsi tout loisir de régler les dimensions de la zone de texte, la couleur et la police de caractères, etc.

Utilisation avec GeekTool

Cet AppleScript est destiné à être utilisé avec GeekTool, qui permettra d'une part d'exécuter le script à intervalles réguliers et d'autre part d'afficher l'image obtenue. Il faudra donc configurer GeekTool pour qu'il exécute le script :

osascript /path/to/weather.scpt

et pour qu'il affiche l'image.

Qualités, défauts (surtout), éventuels développements (???)

Les 3 variables les plus nécessaires à la configuration du script sont donc déclarées sous forme de propriétés et placées au début du script (dpt, myfolder, line2parse). Au pire des cas, une petite imprécision lors du renseignement de la propriété line2parse ne doit pas être réellement gênant en comparaison de ce que l'on doit pouvoir obtenir comme précision en utilisant, par exemple, weather.com ; ceci dit, une meilleur utilisation de grep pourrait peut être améliorer ce défaut en évitant de devoir compter les lignes en se basant plutôt sur le nom de la localité… pour le moment, je n'ai pas réussi à faire mieux.

Les images de meteofrance.com ne sont pas trop moches et, de plus, elles sont bien détourées, ce qui n'est pas le cas d'autres sites.

La rapidité d'exécution du script est satisfaisante (de l'ordre de la seconde). Je regrette cependant de ne pas avoir réussi, avec une seule commande curl (la première) associée à grep, à réussir un meilleur parsage et ainsi récupérer plus d'information, comme la température et le reste de cette chaîne texte. Peut-être pour une prochaine fois, en réglant aussi le souci décrit en 1er paragraphe… pour pourquoi pas, faire un petit script utilisant le système de notifications Growl ?

commenter (0)

08/07/07

Histoire d'un Switch (6 mois plus tard)

Macintosh

Après le premier billet intitulé Histoire d'un Switch (introduction) [11/01/07], peut-être que quelques développements seraient bienvenus ; je pense m'y atteler dans ce billet.

Tout étant d'une facilité déconcertante (voire enfantine), ou presque, sous Mac OS X, il est évident qu'il ne faut sûrement pas 6 mois pour faire le tour des fonctionnalités basiques, de l'interface simpliste et de ses grands principes… je ne m'étendrai donc pas sur la facilité d'installation des logiciels "courants" (Adium, Firefox, Vienna, Smultron, etc), sur le drag-and-drop qui facilite tant de chose et dont l'utilisation peut même être parfois assez surprenante, sur Exposé, et toutes ces choses qui en définitive différencient profondément et durablement Mac OS X de toute autre interface.

en cours de rédaction

commenter (0)

08/07/07

Bourne Shell

UNIX

Un "petit" billet, parce que j'ai plein d'onglets Firefox ouverts depuis quelques jours, aussi vais je stocker ici ce que j'ai trouvé au lieu d'encombrer mes marques-pages.

Le billet sera probablement réagencé et mis à jour dans les jours à venir.

Les shells UNIX : Le Bourne Shell : avec un très bon paragraphe consacré aux tests, une page très complète. Autre page, très complète : shell bash (avec support de cours). Ou encore : Guide avancé d'écriture des scripts Bash.

Guide avancé d'écriture des scripts Bash et ici : StartupScripts MailScanner un exemple assez "complexe" et volumineux ; autre exemple (en Shell Script) : mkRPMS.sh shell script.

Un lecture plus légère, sous l'angle de la vulgarisation : Dev-shell script - Lea Linux. Autre lecture légère, plutôt "culturelle" : Le Shell ou les shells ? L'univers culturel du shell.

A lire aussi : lf216, UNIX Basics: Programmation Shell, sans oublier les commandes fondamentales de Linux et, dans le même genre, Basic Command Line Tasks.

commenter (0)