Post-processing avec Perl d'un site aspiré avec wget

Je préfère souvent faire une copie locale de certaines pages, surtout lorsque le site est ancien ou si l'auteur est un universitaire (élève ou professeur) car on a parfois la désagréable surprise de voir le site disparaître. Et il vaut mieux faire la copie soi-même plutôt que d'essayer de la retrouver parfois en vain sur archive.org.

Pour aspirer un site on peut utiliser le très bon httrack mais le plus souvent un simple appel à wget --mirror -p permet de récupérer la ou les pages voulues ainsi que les ressources associées.

Mais cela ne semble pas fonctionner avec les applets java, ce que j'ai découvert après coup. Perl est le langage tout trouvé pour faire un script de traitement des dites pages, avec l'aide de HTML::TreeBuilder pour parser le html et retrouver les balises <applet> et LWP::Simple pour récupérer les .zip contenant le code. HTML::TreeBuilder permet aussi de modifier le html pour faire pointer l'attribut code vers les fichiers téléchargés. Le script fait aussi une copie de sauvegarde du fichier traité avant de le modifier.

Télécharger le fichier  "getappletsandrewrite.pl"

0 comments

Réactiver les extensions non vérifiées dans Firefox

J'utilise le canal beta de Firefox, et depuis la release 41, les extensions qui n'ont pas été vérifiées par Mozilla ne peuvent plus être utilisées. Exemple avec Bamboo Feed Reader :


Il n'y a pas de bouton permettant de forcer l'activation, même si je sais ce que je fais comme pour les sites avec un certificat auto-signé. Explication détaillée chez Mozilla.
Je déteste les logiciels qui m'empêchent de faire ce que je veux, pour mon bien.

En fait, si on souhaite forcer l'utilisation d'extensions qui ne sont pas (ou pas encore) approuvées, on peut aller modifier la config du navigateur, mais dans about:config : il faut chercher xpinstall.signatures.required et passer le paramètre à false.

En retournant dans la liste des extensions, on voit alors ceci :


Voilà. C'est qui le patron ici ?!

0 comments

Test d'applets Java locales avec Safari / OSX

J'ai perdu récemment toute une soirée à essayer de compiler et tester une applet Java dans Safari sous OSX 10.9.
Une fois de plus, des gens qui nous veulent du bien ont pris soin d'améliorer pour nous la sécurité de Java ce qui se traduit par une absence de résultat lors du chargement de la page html locale. Pas un avertissement, pas une exception, rien. Alors que la même page html lue sur mon laptop WinXP + Chrome fonctionne parfaitement après confirmation de ma confiance dans le chargement du plugin Java.

Maintenant (et, semble-t-il depuis 10.7.3 Lion), il faut désactiver les restrictions de fichier local depuis le menu développeur pour charger l'applet et les confirmations de sécurité afférentes :
  • activer l'affichage du menu développeur si besoin via Préférences / Avancées / Afficher le menu
  • cocher "désactiver les restrictions de fichier local"
Le rafraîchissement de la page html devrait procéder au chargement de l'applet.

0 comments

Hook svn en Perl sous Windows afin d'empêcher les commits sans commentaire

Si comme moi vous avez des utilisateurs de Subversion qui sont des adeptes du commit avec un commentaire vide, vous savez peut-être qu'on peut configurer svn pour rejeter de tels commit et obliger la saisie d'un commentaire.

Lors de l'exécution de commandes svn, on a la possibilité d'utiliser des hooks (des scripts) sur le serveur qui seront lancés automatiquement par svnserve et qui peuvent permettre d'exécuter des tâches liées, ou de tester les commandes utilisées pour les accepter ou les rejeter. Lors de la création d'un dépôt svn par svnadmin, le répertoire "hooks" est garni de modèles qui vous serviront de base pour vos propres hooks. Lors d'un commit, le hook qui permet de tester et éventuellement de refuser le commit est pre-commit.

J'utilise svn en environnement Windows. Malheureusement même avec la version windows les templates créés par svnadmin sont des scripts sh, et les exemples de script pre-commit qu'on peut trouver en ligne sont presque toujours pour GNU/Linux.

J'ai donc écrit un script Perl pour servir de hook pre-commit sur un serveur Windows. Ce script doit être transformé en ficher .bat via pl2bat pour que svnserve soit capable de l'exécuter lors d'un commit.

Télécharger le fichier  "pre-commit.pl"

0 comments

Console2, un terminal windows multi-tabs

Alors que je viens de faire un billet sur l'extension de cmd.exe par Clink, je me devais de faire un autre billet sur un outil qui me sert au quotidien dans mon travail de développeur : Console2.

Une image valant un long discours, voilà à quoi ressemble Console2 :

En résumé :
  • Console2 permet d'avoir plusieurs sessions shell dans la même fenêtre, séparées dans des onglets
  • ce n'est pas un nouvel émulateur de terminal : chaque session passe par une instance de cmd.exe (invisible, mais que l'on peut faire apparaître) qui est hooké dans un onglet
  • Console2 permet de choisir le shell qui sera utilisé : par défaut c'est cmd.exe mais cela peut être Powershell ou le COMSPEC de votre choix
  • avant que je ne découvre Clink, Console2 me permettait déjà de sélectionner du texte simplement à la souris (sans casser les lignes comme cmd.exe en mode bloc) ou de le coller par un raccourci clavier (par défaut, les anciens raccourcis DOS Ctrl-Insert / Shift-insert)
  • projet libre et open-source hébergé sur SourceForge
Associé à Clink, on obtient enfin un terminal à peu près utilisable... tel que GNU/Linux le propose depuis plus de 15 ans. ^_^

Pour les gens qui voudraient en saoir un peu plus sur Console2, vous pouvez aller voir ce billet un peu plus technique de Scott Hanselman.

0 comments

Clink ou comment bashifier cmd.exe

Si vous avez un peu l'habitude d'utiliser bash (ou zsh, ou ...) dans un terminal Linux ou Mac, lorsque vous vous retrouvez dans l'invite de commande Windows (cmd.exe) vous pleurez sur le manque de fonctionnalités et sur l'"ergonomie" du truc :
  • complétion limitée aux noms de fichiers (péniblement depuis XP ou après bricolage avec Windows2000), fonctionnant mal si il n'y a pas un espace avant le nom, et ne sachant pas gérér les chemins avec '/' bien que Windows sache les interpréter
  • pas de possibilité de recherche
  • fonctionnement débile lors de l'accès à une commande dans l'historique (on peut "remonter" pour retrouver une commande mais si on l'utilise il faut "redescendre" pour naviguer dans les dernières commandes)
  • ... pour ne citer que quelques lacunes :^(
Un collègue vient de me faire découvrir un outil génial : clink. Selon son auteur : « Clink combines the native Windows shell cmd.exe with the powerful command line editing features of the GNU Readline library, which provides rich completion, history, and line-editing capabilities. Readline is best known for its use in the well-known Unix shell Bash, the standard shell for Mac OS X and many Linux distributions. »

À la différence d'utiliser le "vrai" bash porté sous Windows (version Cygwin, GnuWin32 ou MinGW / MSYS) clink utilise l'injection de dll pour ajouter des fonctionnalités au cmd.exe du système.

Parmi les points à noter :
  • clink sait étendre cmd.exe en version 32 ou 64bit (2 dll différentes)
  • vous pouvez décider de l'appeler seulement en cours de session ou vous pouvez l'utiliser pour toutes les sessions (clink passe par l'autorun cmd.exe pour se lancer en même temps que cmd.exe)
  • disponible en version "setup" ou "portable"
  • clink ajoute de la complétion pour les appels des outils tiers (git, svn, ...) et cette complétion est scriptée en Lua
  • parmi les nombreuses fonctions d'édition, vous pouvez simplement copier / coller dans le presse-papiers système directement depuis le clavier
  • si vous êtes utilisateur d'Emacs, vous retrouverez plein de commandes de navigation ou d'édition (naviguer entre les mots, inverser des lettres, mettre en capitale / minuscule / majuscule (il semble y avoir aussi un mode d'édition "vi" mais je n'ai pas encore réussi à le faire fonctionner)
  • open-source : hébergé sur GitHub
Clink est un outil que je recommande chaudement ! :^D

0 comments

Autorun pour cmd.exe

Dire que je peste depuis des années contre cmd.exe, l'invite de commandes de Windows complètement stupide qui sait péniblement compléter les commandes depuis Windows2000 et qui persiste à vouloir démarrer les sessions dans le Documents and Settings de l'utilisateur sans possibilité de modifier ce chemin...

La découverte de clink -un excellent outil dont je parle ici- m'a également fait découvrir le paramètre Autorun pour cmd.exe !

Il suffit d'aller dans la base de registre sur la clé HKEY_CURRENT_USER\Software\Microsoft\Command Processor ou HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor et de définir (ajouter si besoin) la valeur Autorun sur une commande de votre choix qui sera exécutée à chaque ouverture de cmd.
Vous pouvez utiliser les 2 clés simultanément. Vous pouvez éventuellement spécifier plusieurs commandes séparées par "&&".

0 comments

Configurer ssh pour utiliser UTF-8 dans les sessions osx distantes

Mon serveur 10.6 est configuré pour utiliser UTF-8, ainsi que mon MacBook.
Lorsque je teste les locales sur chacun des postes dans Terminal.app, je vois ceci :

LANG="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_CTYPE="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_ALL=
Cependant lorsque je me connecte voici ce que retourne locale :

LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
J'ai essayé de forcer LC_LANG dans le .bashrc sans succès.
La documentation de ssh indique que l'ajout de cette ligne dans ~/.ssh/config permet d'envoyer les locales à la connexion distante

SendEnv LANG LC_*

Mais cela reste sans effet sur le serveur 10.6... J'ai fini par trouver cette note sur MacWorld qui donne la solution : il faut indiquer au sshd du serveur d'accepter les locales transmises avec l'ajout de cette ligne dans le /etc/sshd_config :

AcceptEnv LANG LC_*

Et le tour est joué, j'ai enfin UTF-8 lors de mes accès par ssh !

0 comments

Désactiver Spotlight sur une clé USB

Dernièrement je me suis rendu compte que sur un clé USB, Spotlight le service d'indexation de MacOS X consommait une place considérable. On a beau supprimer les données d'indexation lorsque la clé est connectée sur un PC, elles sont reconstruites à chaque branchement sur le Mac.

Je ne sais pas comment désactiver à l'avance l'indexation des supports amovibles, mais je viens de trouver comment demander poliment à Spotlight d'ignorer un lecteur : il suffit de créer un fichier (vide) .metadata_never_index à la racine du disque. La simple commande suivante suffit :

touch /Volumes/nom_du_volumne/.metadata_never_index

0 comments

RosAsm est de retour !

RosAsmRosAsm est un assembleur x86 / win32 qui est original à plus d'un titre :
  • c'est l'oeuvre Open-Source d'un Français, René Tournois a.k.a. Betov, qui a ensuite été entouré d'une petite communauté de développeurs qui ont contribué à améliorer le concept (plutôt dans le style bazar que cathédrale :o)
  • Le compilateur est un outil tout-en-un qui sert en même temps d'IDE, d'éditeur de ressources et dont l'éditeur de code expérimente une navigation intuitive à souris pouvant se passer de scrollbar latérale. Elle est rendue moins nécessaire grâce à l'utilisation d'un arbre des labels et définitions, ainsi que par un découpage du code en "titles" (= sections) accessibles en un clic
  • la syntaxe proche de celle de NASM propose de puissantes macros permettant une écriture du code dans une syntaxe de "haut niveau" (= HLL assembly), ainsi que l'interfaçage de l'API système
  • les exécutables et dlls construits avec RosAsm contiennent leur propre code source (à l'intérieur d'une section du format PE), il est éventuellement possible de le supprimer à l'aide d'un outil dédié)
  • RosAsm est développé avec lui-même : avant RosAsm c'était avec son prédécesseur SpAsm, qui a lui-même été bootstrappé à partir de code 16 bits puis porté en 32 bits avec ASM32, selon son auteur.
Pour l'explication, "RosAsm" vient de ReactOS Assembler : René Tournois destinait initialement cet assembleur pour le système ReactOS mais cela a été abandonné en cours de route. Et "SpAsm" était le Specific Assembler.

Malheureusement, comme cela arrive parfois, le projet a été abandonné et toutes les ressources existantes de tutoriels, d'exemples de code et d'applications (à l'exception de la page d'AsmGges) ont été prématurément supprimés, ainsi que les forums qui permettaient l'interaction des différents contributeurs.

Comme j'ai personnellement conservé la plupart de ce qui a été publié sur RosAsm, et suite à une demande d'un des contributeurs du projet (qui est moins conservateur que moi ;o), je viens de mettre en ligne une archive concernant SpAsm et RosAsm ainsi que du projet de refonte BuAsm (= Bottom-Up Assembler).

Vive RosAsm !

4 comments

Quelle fonte pour coder ?

Un bon ouvrier a de bons outils...

Et pour nous autres développeurs qui passons nos journées devant nos écrans, le choix d'une bonne fonte est crucial pour pouvoir travailler efficacement et confortablement.

Mes critères de choix d'une fonte :
  • largeur fixe (j'en connais qui codent avec une police proportionnelle mais moi je n'y arrive vraiment pas, notamment parce qu'il m'arrive d'ajouter des tableaux ou des petits schémas en ascii-art dans le code)
  • pouvoir distinguer I, L, 1 (en minuscules comme en majuscules) ainsi que O et 0 (et pour lever toute ambiguïté avec le zéro, un point dans le milieu ou une barre sont préférables
Après, pour départager les polices qui remplissent ces critères ça devient une histoire de goût et d'expérience personnels...
Je vais énumérer mon top-4 des meilleurs fontes pour un codeur, dans chaque cas je montre un exemple du même code en 9 et 10 points.
À titre de comparaison, je parle aussi de 2 fontes présentes en standard sur les systèmes Windows mais qui ne remplissent pas les critères énoncés (notamment pour le zéro).
À la fin du billet je donne en plus des liens vers des comparatifs d'autres fontes.

1 - Consolas

De temps en temps il arrive à Microsoft de faire un truc bien, et ici il faut reconnaître que Consolas est une réussite:oP
Cette fonte est très bien faite, agréable au regard. On distingue très biens tous les caractères et l'anti-aliasing de ClearType est impeccablement géré.
Consolas 9 pts Consolas 10 pts
Peu de différences entre 9 et 10 points, seulement un peu plus de hauteur de ligne.
Consolas est présente dans les versions récentes de Windows, et peut sinon se télécharger sur le Microsoft Download Center

2 - ProFont

C'est la fonte que j'ai le plus utilisé après Monaco et avant de découvrir Consolas. Son seul défaut est d'être issue d'une fonte bitmap, aussi la seule taille où elle s'affiche correctement est en 9 pts ce qui peut être rédhibitoire sur un écran avec une grande résolution.
ProFont 9 pts
Tous les caractères sont tout à fait lisibles et le texte est également plus compact verticalement qu'avec Consolas.
ProFont est disponible sur le site de Tobias Jung, avec quelques autres fontes intéressantes.








3 - Monaco

Une fonte de qualité, découverte lorsque j'ai commencé à travailler sur Mac. Elle est plus grosse que les autres présentées ici, aussi pour un affichage équivalent on peut choisir une taille de moins.
Monaco 8 pts
Monaco peut se télécharger sur le site Monospace/Fixed Width Programmer's Fonts.

4 - Ubuntu Monospace

Récemment le projet Ubuntu a décidé de produire une nouvelle famille de fontes libres de qualité : Ubuntu font familly. Elle comporte plusieurs variantes dont Regular, Medium, Bold, mais ici c'est Monospace qui nous intéresse.
Ubuntu mono 9 pts Ubuntu mono 10 pts
Là encore c'est très lisible, et prometteur (cette fonte est encore en cours de développement et au moment où j'écris n'est qu'en version 0.80). Elle a un air de famille avec Monaco, je trouve seulement que l'interligne est un peu trop espacé.

Lucida Console

On a ici une fonte disponible en standard mais qui ne permet pas distinguer facilement les zéros.
Lucida console 9 pts Lucida console 10 pts

Courier New

Ici on a également une fonte familière à tous les utilisateurs de Visual C++. Comme pour Lucida, on n'arrive pas à identifier les zéros d'emblée.
Courier New 9 pts Courier New 10 pts

Quelques sites recensant des fontes utiles pour programmer :

1 comment

PBDumper v0.9.3

Another project that was lacking some upgrade for quite a long time : PBDumper, my experimental Powerbuilder library unpacker.

The project started back in 2008, but was not publicy updated since (though I debugged a more stable version months ago).

This is done now, with the following improvements as the 0.9.3 release :
  • the source code of the objects (when it is present in a pbl) is now exported in UTF-8
  • a lot of the text output is now disabled by default (it is mainly needed when debugging PBDumper itself) but cans be reactivated with the -v command line option
  • PBDumper can export the library content in a dedicated folder named after the library itself
I have some more improvements in my TODO-list, I hope that I will have the time to code them ;op
a sample of PBDumper output

0 comments

Procrastination powa !

Depuis le temps que c'était sur ma TODO-list, ma page de sur PowerBuilder et mes extensions PBNI a enfin été remise à jour !
Ma page sur PB et mes PBNIUn rapide coup d'oeil permet de réaliser que je ne suis pas un expert dans la création de pages web :oP
Cependant dans cette nouvelle version, le contenu a été un peu réorganisé. Je fais un usage un peu plus rationnel des css (maintenant que je sais mieux comment ça fonctionne) et la structure html a été revue, et revalidée par le validateur du w3.org.

Sur le fond, je suis en train de remettre à jour mes extensions PBNI (regex, hash, liste + vecteur, wrapper divers) et je vais tenter de backporter le code qui est maintenant pour PB11.5 vers PB10.5, voir PB9.

À noter : Nicolas Georges a publié un billet montrant un exemple d'usage de pbniregex.

0 comments

10 000 !

Je viens de passer le cap des 10 000 premiers kilomètres (J'en suis à 10 849 exactement) !


C'était l'occasion de faire une révision chez Yamaha, et aussi de changer les gommes. Les Dunlop d'origine (Roadsmart) auront duré environ 10 700 km et la roue arrière était arrivé aux témoins d'usure. Celle de l'avant aurait pu durer peut-être 1000 km de plus, mais autant tout changer. La nouvelle monte est en Michelin PR3 (bi-gommes) et semble très, très bien. :o)



1 comment

Ajouter des tags au moteur wiki / blog d'OSX Server

Le moteur de wiki de Mac OS X Server supporte peu de tags HTML, sans doute pour que son maniement reste simple pour la majorité des utilisateurs. Mais cela devient gênant dès qu'on essaie de modifier certains détails directement avec la fonction « Edit HTML » : le wiki nous laisse saisir du code HTML directement, mais les tags sautent dès que l'on quitte le mode d'édition HTML.

En fait, en dehors d'une poignée de tags <p>, <h>, <a> (et encore pas avec tous ses attributs)... les autres tags sont seulement désactivés. Pour lister des tags (ou des attributs) que l'on souhaite autoriser, il faut éditer (ou ajouter si le fichier n'existe pas) une plist nommée whitelist.plist dans /Library/Application\ Support/Apple/WikiServer/

Je joins à ce billet un exemple de plist que vous pourrez reprendre pour expérimenter vos propres définitions de tags autorisés. L'outil Property List Editor d'Apple est fort utile pour cela, mais un geek digne de ce nom saura se satisfaire de n'importe quel éditeur de texte :o)
Download file "whitelist.plist"

Note : il faut penser à redémarrer le moteur du wiki après la modification de la plist :
sudo serveradmin stop teams
sudo serveradmin start teams
J'ai trouvé cette information initialement sur la page Robert's Tech Notes

0 comments

Ping

En ce moment, pas facile de s'astreindre à tenir le blog à jour. Les idées ne manquent pas, mais le temps...
En fait, simplement pas facile d'être sur l'ordi le soir. Pour le geek que je suis, plutôt inhabituel :op

La cause principale (depuis le 18 février) est là :
XJ6

Encore 2 à 300 km et je vais pouvoir prendre rendez-vous pour la révision des 10 000 km, déjà !
Enfin, avec 85 km (aller) pour aller au boulot, ça va vite d'accumuler les kilomètres.

La seconde raison pour rester loin du clavier, c'est que fin février j'ai suivi la formation PSC1 (Prévention et Secours Civiques - Niveau 1) à l'antenne de la Protection Civile de Rémilly, et que puisque ça m'intéresse de continuer, j'ai commencé à accompagner d'autres secouristes pour tenir des postes de secours. Y en a qui disent que c'est toujours mieux que de glander derrière un clavier ;o)
Orange et Bleu

0 comments

Apple Wiki Server

Cet article tente de regrouper des informations sur la structure et le fonctionnement du Wiki Server de Mac OS X. Vu le peu d'informations que j'ai pu trouver pour le moment, je me dis que cela pourra peut-être resservir à d'autres.

Cela fait une semaine que j'ai commencé à utiliser Mac OS X Server 10.6 « Snow Leopard », et globalement j'en suis plutôt content.

La mise en oeuvre est relativement aisée pour peu qu'on ait un minimum de connaissances sur les serveurs en général (Mac OS X Server réutilise un certain nombre de projets connus du monde « libre » comme Postfix, Dovecot, Apache, BIND, Samba, SpamAssassin, ClamAV, SQLite, CUPS et j'en passe) et Mac en particulier (notamment l'utilisation de l'Open Directory, ou l'emplacement de certains fichiers système à des emplacement inhabituels pour un système BSD). Fort heureusement, j'utilisais déjà une partie des applications pré-citées telles Postfix, CUPS ou Samba sur mon serveur GNU/Linux Debian et j'en suis à mon quatrième Mac « moderne » de l'ère Mac OS X.

Par contre je n'avais jamais tenu de blog. Comme le serveur 10.6 intègre un certain nombre d'outils de collaboration permettant de créer blogs, wikis et calendriers, j'ai décidé de m'y mettre avec l'Apple Wiki Server.

L'éditeur wysiwyg du weblog et du wikiLe weblog made in Apple est assez simple à utiliser.

L'éditeur de pages wysiwyg est facile de prise en main et permet même de visualiser et modifier le code html du document (bien qu'il ne laisse pas modifier n'importe quoi).

Les écrans de paramétrage permettent de choisir un thème graphique parmi une liste prédéfinie (choix de la couleur dominante, avec ou sans bannière).

On a le choix de la visibilité des pages de wiki et weblog (réservé à un cercle privé de personnes identifiées ou accessible au public) ainsi que de la possibilité ou non de laisser des commentaires, éventuellement après modération.

Par contre on ne semble pas pouvoir afficher de calendrier des archives du blog dans une barre latérale, comme c'est courant dans la majorité des blogs que j'ai déjà vu. Mis à par cette dernière limitation, pour moi qui n'ai jamais blogué jusqu'alors l'apparente simplicité du Wiki Server Apple n'est (pour le moment) pas gênante.

En revanche, quand j'ai voulu en savoir plus sur le moteur utilisé, le choix du langage, la structure des templates de page ou l'emplacement des données stockées je n'ai pas trouvé grand chose sur le waste, waste web.

Regardons le serveur de plus près


Apple documente une partie de la disposition des fichiers (pour la partie thèmes, css et sidebars) dans ses manuels Wiki Server Administration (pour 10.6) ou Extending your Wiki Server (pour 10.5) qui sont disponibles sur leur site dans la section Support / Manuals / Servers and Enterprise software.

Je n'avais pas encore trouvé avec quoi fonctionne le moteur wiki / weblog; il semble que ce soit avec python + twisted + sqlite, comme le décrivent ces intéressants articles A web developer’s introduction to the Apple WikiServer : partie 1 et partie 2.

En recoupant ces informations avec l'existant, on peut lister les différents emplacements du code et des données du wiki :

path nature des données Remarques
/Library/Application Support/Apple/WikiServer/Themes fichiers plist, css et png des thèmes les css importent les informations depuis /usr/share/collaboration, sauf wireframe.theme
/usr/share/collaboration/themes/ fichiers plist, css et png des thèmes véritable emplacement des css
/Library/Collaboration/Users/username/weblog/ contenu des entrées du blog un folder par page (avec un nom unique) :
- un fichier plist pour garder certaines informations (auteur, dernier à avoir modifié, ...)
- un fichier html de la dernière version
- une base SQLite qui conserve toutes les révisions
/usr/share/wikid/ moteur python


Outils utiles

  • Les fichiers plist sont des documents xml modifiables avec n'importe quel éditeur texte tel nano, vi ou même TextEdit.app en mode plain text. Apple mentionne dans ses manuels Property List Editor qui fait partie des outils fournis avec XCode, disponible à tout titulaire d'un compte ADC (inscription gratuite). Je suis parvenu à utiliser cet outil sur mon serveur sans installer XCode, en le recopiant depuis mon iMac où XCode est installé, mais ce n'est pas très pratique (nécessite de recopier des frameworks et de corriger des droits). Cela pourrait faire l'objet d'un autre article. Par ailleurs, il est possible d'utiliser une ancienne version qui n'a pas de dépendances envers XCode disponible ici : Property List Editor v.1.2.8
  • Les fichiers db sont des bases SQLite. Il existe un certain nombre d'applications mac permettant d'accéder à une base SQLite. Pour ma part, je recommande SQLite Database Browser.




2 comments

Retrouver l'avatar d'un utilisateur

Je voulais reprendre l'image associée à un utilisateur (telle qu'on la voit dans l'écran de login) pour pouvoir la réutiliser.
Seulement, pas moyen de mettre la main dessus dans ~/Library ou dans /Library.

Une solution semble se trouver dans l'Open Directory, au niveau de l'attribut JPEGPhoto. Un enchaînement de dscl read et de quelques autres quelques commandes permet d'obtenir un fichier utilisable :

dscl . read /Users/user_short_name JPEGPhoto | tail -1 | xxd -r -p > user.jpg


Cette solution est utilisable sur OS X 10.5+. Source de cette astuce

0 comments

Voir tous les fichiers dans le Finder

Au départ le système mac est conçu pour pouvoir être utilisé facilement par un non-informaticien. Il en résulte qu'un tas de choses n'est pas accessible facilement (voir pas accessible du tout) afin d'éviter à l'utilisateur d'aller mettre le bazar là où il n'a rien à faire.

Pour un utilisateur lambda, je comprends. Mais pour quelqu'un comme moi programmeur, administrateur système et geek c'est gênant de ne pas pouvoir aller facilement dans n'importe quel répertoire avec le Finder.

Je connaissais déjà le truc qui consiste à modifier les préférences système du Finder avec la commande default :

defaults write com.apple.Finder AppleShowAllFiles YES

Avant :

Dossiers systèmes cachés
Après :
Dossiers visibles

J'ai trouvé une solution un peu plus élégante sur cette page de MacWorld Show all files in the Finder sous la forme d'un AppleScript permettant de basculer ce paramétrage. Déjà ça évite la saisie d'une commande, ensuite ça permet de facilement annuler le réglage parce que voir tous les fichiers et dossiers - dont le DS_Store ça pollue un peu l'affichage. En bon geek, je l'ai un peu modifié pour qu'il réponde un peu mieux à mes besoins (ne pas donner le résultat en parlant mais avec une petite boîte de dialogue.

Voici le code du script :

(* Toggle the special files and folders like /etc, /usr visibiliy in finder *)
(* idea taken from http://www.macworld.com/article/51830/2006/07/showallfinder.html *)
(* © Sébastien Kirche - 2011 *)

try
	set dotVisible to do shell script "defaults read com.apple.finder AppleShowAllFiles"
on error errorMessage number errorNumber
	set dotVisible to 0
end try
if dotVisible = "0" then
	do shell script "defaults write com.apple.finder AppleShowAllFiles 1"
else
	do shell script "defaults write com.apple.finder AppleShowAllFiles 0"
end if
tell application "Finder" to quit
delay 1
tell application "Finder" to activate
tell me to activate -- let the message be shwn at foreground
if dotVisible = "0" then
	--say "VISIBLE"
	display dialog "Visible" buttons {"OK"}
else
	--say "HIDDEN"
	display dialog "Hidden" buttons {"OK"}
end if

Voici le script sous forme d'application AppleScript :

Download file "ToggleFileVisibilty.app.zip"

3 comments

Quelle distro pour un firewall ?

Il y a déjà plusieurs mois j'ai fait l'acquisition qu'un boîtier Soekris net4801.


net4801 en cours de configuration
Caractéristiques principales :
  • Processeur de classe 586 Geode NSC SC1100 à 266 MHz
  • 128 Mo de ram soudée
  • 1 port CompactFlash pour y mettre le système
  • 1 port IDE UDMA-33 pour disque 2.5"
  • 1 port PCI
  • 3 ports ethernet permettant de monter un firewall à 2 ou 3 pattes
  • 1 port mini-PCI capable de recevoir une carte wifi pour faire un point d'accès wifi, ou une carte accélératrice Soekris vpn1411 dédiée aux calculs de chiffrage pour vpn
  • 1 port série (pour la console, et pour les mises à jour de bios)
  • 1 port USB
  • pas de ventilateur de cpu ou d'alim (la petite alimentation à découpage est externe, sur le cordon secteur) donc complètement silencieux

Depuis 2004 la passerelle était assurée par une ancienne Sun SparcStation20 (qui arrivait sur ses 16 ans de bons et loyaux services) tournant sous GNU/Linux Debian. Vu que la SS20 faisait tourner dhcp, dns, firewall, MTA (Postfix), serveur IMAP, annuaire LDAP, samba avec son seul processeur SuperSparc à 75 MHz (j'en avais ajouté un mais il a cessé de fonctionner il y a 2 ans) le boîtier Soekris me semblait idéal pour assurer la fonction de pare-feu. Comme je n'ai pas de berceau ni de connecteur IDE, les fonctions de courrier et de gestion des utilisateurs seront assurées par un Mac Mini sous Mac OS X Server 10.6 (Snow Leopard).

Seulement quel système pour le firewall ?

Mes recherches m'ont conduit sur cette intéressante synthèse de distributions Linux et BSD pour firewalls. De cette synthèse j'ai pu comparer les systèmes suivants (soit d'après les caractéristiques et copies d'écran sur les sites, soit en jouant sur le site de démonstration lorsqu'il existe ou en virtualisation avec VirtualBox) :
  • m0n0wall (FreeBSD) - c'est celui que je voulais installer initialement. Compact : tient entièrement en RAM (12Mo sur la CF). Je ne l'ai pas retenu car d'autres systèmes m'on paru plus complets (entre autres ZeroShell pour le support Kerberos et la gestion d'utilisateurs par LDAP). Mais il est possible que j'y revienne.
  • pfSense (FreeBSD) - fork de M0n0wall visant une installation sur disque dur pour permettre plus de possibilités qu'un système uniquement en RAM.
  • IPCop (Linux)
  • Voyage Linux supporte explicitement les machines Soekris, PC Engines ainsi que les cartes sur base Atom. 3 versions : Voyage Linux (base), Voyage ONE (VoIP, net tools, mesh) et Voyage MPD (MusicPlayer Daemon)
  • ZeroShell (Linux) - proxy web avec antivirus, wifi AP, OpenVPN client / serveur, QoS, OpenDNS, Kerberos, NIS / LDAP, RADIUS, Captive Portal, accès ssh... Plein de choses intéressantes :)
  • ClearOS (Linux) - dérivé de RedHat et CentOS, anciennement ClarkConnect. Dispo en version libre ou payante avec support (ClearCenter). Trop gourmand pour mon Soekris : 500MHz / 512Mo ram / 1Go de disque recommandés.
  • Endian Firewall Community (Linux) - Existe en version commerciale intégré dans un routeur ou en version libre. Version démo sur le site. L'un des plus complets que j'ai pu essayer, mais je n'ai pas pu l'installer sur la carte CompactFlash : le setup du cd que j'ai utilisé avec VirtualBox ne voit pas l'adaptateur CF<->USB sur l'iMac ou le port PCMCIA sur le laptop. Il faudra que j'essaie avec un adaptateur CF<->IDE mais il semble que les besoins matériels ne soient pas à la portée du Soekris (la doc parle de 500 MHz)
  • OpenWRT (Linux) - au départ un projet de firmware libre pour routeurs Linksys WRT54G mais qui offre une toolchain permettant de compiler un firmware pour de nombreuses machines à base x86, ARM, MIPS...
  • Zentyal (Linux) - un Linux Small Business Server commercial (mais il y a une version basique libre), semble complet mais inadapté pour le Soekris : P4 / 2Go / 80Go.
Il y a aussi un tableau intéressant sur Wikipedia : List of router or firewall distributions.

J'ai choisi de déployer et de tester ZeroShell. Cela changera peut-être par la suite car la configuration du firewall semble un peu limitée (l'interface web semble ne pas permettre de saisir toutes les options possibles d'iptables, et je viens de voir qu'il y a des règles cachées permettant une sécurité minimale dès la mise en route : blocage de tous les ports entrants sauf 80 et 443 (pour l'interface web de configuration) ainsi que 22 (si on active l'accès ssh). Finalement mon idée de départ d'utiliser m0n0wall était peut-être la bonne ?

3 comments