CamL
Les codes qui sont ici n'ont pas vocation à être utilisés tels quels, mais plutôt à vous montrer comment faire telle ou telle chose en CamL (ex : fonctions dans une fonction, ...)
- Nombres complexes
- Classes spéciale : un module, avec mot clé "struct" (même pas vue dans le tutoriel), qui gère les nombres complexes.
- Construction d'un type
- Un exemple simple qui illustre la construction d'un type.
- Fonctions basiques sur les listes
- Beaucoup de fonctions de la bibliothèque "List" implémentées. Idéal pour apprendre à travailler sur les listes proprement. Essayez de refaire ces fonctions vous même !
- Les Piles
- Implémentation d'une structure de pile. Idem entraînez-vous à implémenter vous-même cette structure.
- Tris de tableaux
- Divers tris sur les tableaux.
- Tri par tas
- Une implémentation du tri par tas
- Tris sur les listes
- Divers tris sur les listes
Prologin
Vous trouverez ici les codes que j'ai envoyé sur Prologin. De même, pour vous entraîner, essayer de résoudre les exercices vous même. C'est seulement si vous n'y arrivez pas que vous devriez jeter un oeil à mes codes, pour comprendre non pas l'algorithmique derrière, mais comment implémenter un algorithme en CamL.
Tout en bas des fichiers sont implémentées les entrées, souvent délicates pour les débutants (comment lire un tableau en entrée, puis une chaîne, puis 2 entiers, ...).
C++
- (1) Fichier Wav
- Le meilleur moyen pour comprendre comment l'ordinateur joue un son, c'est de coder soi-même un fichier, et de voir ce que ça donne ! Ce code source C++ génére un .wav qui fonctionne, et vous pouvez vous amuser à faire varier certaines choses dans le code pour comprendre.
- (2) calcul formel
- Une très belle illustration de la puissance des classes et de la programmation orientée objet. Une utilisation concrète des classes virtuelles, et des arbres dans le but de calculer des expressions du type "2 + 3 * 4 + sin(3.14/2)" et même du type "sum(i^2, i, 1, x)" (somme des carrés des x premiers entiers)
Java
- (1) interface par coordonnées et
(1) interface par layouts

- Code du tutoriel java de quelques lignes pour réaliser de petites interfaces avec Java, en plaçant les contrôles précisément (positionnement par coordonnées) ou avec des Layout.
- (2) Projet Crypto
- Ce code tente de décoder un texte, sans accents ni ponctuation, crypté à l'aide d'une permutation des lettres de l'alphabet. Le texte peut avoir des noms propres. (d'après un Article de S.Lucks)
- (3) Projet Wiener
- Ce code tente de décrypter une clé RSA grâce au développement en fractions continues. (d'après un Article de Wiener) Il marche très bien dans le cas où les facteurs n'ont pas la même taille (cela optimisait le décodage des cartes bleues dans les distributeurs de billets).
- (2) Rubik's Cube

- Le cube qu'il y a dans mes pages Rubik's Cube, donc 3D + gestionnaire de la souris pour orienter le cube + Thread, le tout sous forme d'applet.
- (2) Horloge

- Une applet dessinant une horloge ; donc utilisation du dessin et des Threads.
- (3) Détection de contours

- Détection de contours basée sur l'article
N. Xu, R. Bansal, N. Ajuja: Object segmentation using graph cuts based active contours, CVPR 2003.
Il s'agit de dire qu'une image est un graphe où chaque pixel est un sommet et les arêtes correspondent aux voisins de ces pixels, avec un poids
élevé lorsque le niveau de gris est similaire, faible si c'est très différent. On fixe alors la source comme l'intérieur d'une zone,
le puits comme l'extérieur, et on cherche la coupe minimale de ce problème de flot.
Algorithmiquement : utilisation des threads, algorithme de Ford Fulkerson, min-cut, gestion des images en Java, algorithme de Bresenham pour relier 2 pixels par une ligne, ...
(3) Détection de contours (Applet) (fonctionnalités réduites mais code élagué) - (3) Triangulation (Applet)

- La triangulation se fait ici par insertion, et l'algorithme est assez "maison", c'est à dire que soit le point est dans un triangle et alors on le raccorde aux 3 sommets, soit il est hors de l'enveloppe convexe et il faut chercher les "tangentes". A chaque insertion d'un segment on cherche s'il faut le "fliper" (cf wikipedia), et quand il y a un flip on teste récursivement s'il faut fliper les voisins. Le diagramme de Voronoï se fait étonnament assez simplement, une fois que la triangulation est calculée. Quand le point inséré est dans l'enveloppe convexe, on cherche dans quel triangle l'insérer avec "l'arbre des anciens triangles", que l'on a sauvegardé. Un petit travail supplémentaire qui alourdit le code plus qu'il ne le fait gagner en vitesse semble t'il.
AppleScript
Voici tout d'abord une liste de tutoriels assez complets sur AppleScript, mais aussi assez longs.
- Les bases
- Ni trop peu, mais un peu trop. Mais très bien pour débuter et comprendre le fonctionnement d'AppleScript.
- Les baaaaases
- Pdf du même accabit que celui juste au dessus, en plus long et plus détaillé et avec plus d'exemples.
- Guide des Objets AppleScript
- Détaille beaucoup d'objets (graphiques, cette fois) et leurs propriétés, avec des exemples. Très utile.
AppleScript est un langage somme toute assez limité en vitesse (cf mon programme pour apprendre le japonais, qui met 1 minute à chercher un mot dans une liste de 3000 mots...) et donc autant passer à Objective C si c'est pour faire une application. Par contre AppleScript est un langage de script agréable qui nous évite de passer par le terminal et de faire des scripts en bash (surtout que le bash du Mac est pourri). Je m'en sers par exemple quand je télécharge 100 chansons de Claude François, et qu'elles sont numérotées 01 - Si j'avais un marteau, 02 - ..., 03 - ... alors que moi j'aime bien avoir Claude François - Si j'avais un marteau, Claude François - ..., Au lieu de renommer à la main 100 fichiers je lance un petit script !
Les gens chez Apple ont vraiment pensé à tout avec AppleScript : Faites tell app "iTunes" to pause, et... ça marche. Dingue non ? On se rend compte que la programmation Mac est quand même simple de ce coté. (Alors qu'on en ch*e en VB pour faire faire un truc à un logiciel de notre ordinateur).
- (2) Exemple d'utilisation de l'interface builder et des objets
- Ça montre comment écrire dans un label, savoir quand il y a un clic, ... Bref j'aurais vraiment aimé l'avoir quand j'ai débuté, parce qu'il n'y a pas beaucoup d'exemples sur le Net. (peut-être parce que tout le monde ne s'arrête pas plus d'un mois sur ce langage ? ^^)
- (1) Calcul de PGCD
- Demande 2 nombres à l'utilisateur et calcule le pgcd. C'est juste un script, il n'y a pas d'interface, mais ça montre la structure d'un script, et qui plus est quand il y a une interface, derrière c'est quand même un script, donc... il faut savoir le faire.
- (1) iCal et (1) iCal2
- Lis les événements qu'il y a dans iCal, de 2 manières : la première en automatisant/maîtrisant iCal, la seconde en lisant les fichiers de la bibliothèque.
- (1) renomme les Fichiers
- Renomme les fichiers d'un dossier selon la syntaxe que vous voulez. (cf l'exemple sur Claude François)
- (3) Apprentissage du japonais

- Un gros, disons les choses comme elles sont, programme pour apprendre le japonais. Il faut déjà savoir lire au moins les hiragana (ひらがな) et les katakana カタカナ. Il y a 3000 mots environ fournis avec le programme, qui vous teste dessus selon 3 manières. Téléchargez l'application (Mac).
- (1) imprimer des pages web
- Vous fournissez une liste d'URL de pages web que vous vouez imprimer, et le script va les ouvrir une par une et appeler un petit script automator qui va vous imprimer tout ça.
Widgets Mac
Je rappelle qu'un widget est comme une page web : c'est du code non compilé, ce qui fait que les widgets que vous téléchargez ici sont prêts à l'emploi ET éditables (pour voir comment ils sont faits).
- iCalendar

- Le Widget iCal est pourri parce qu'il ne colore par les dates où il y a des événements, ce qui est un peu dommage. Le mien le fait, et il est synchronisé sur l'application iCal. Utilise l'objet Canvas pour créer un joli fond dégradé, et un script AppleScript pour savoir ce qu'il y a dans vos événements iCal.
iPhone
Une application iPhone ressemble de très près à une application Cocoa / Objective-C (pour Mac), donc les choses que vous voyez ici peuvent facilement être reprises pour être mises sur ordinateur, ce que j'ai d'ailleurs fait pour Wormwar et BrainGame. Il y a aussi une page spécialement dédiée à mes applications iPhone.
Pour l'histoire, ces jeux sur iPhone représentent un peu mes premiers pas en programmation Cocoa donc certaines techniques que j'utilise ne sont pas un modèle du genre, mais il y a des choses bonnes à prendre pour les débutants, j'en suis sûr + beaucoup de petits snippets comme afficher une image png, jouer un .wav, utiliser un timer qui bippe toutes les secondes, ... (quasiment toutes les applications utilisent ces choses)
- (1) Brain Game

- Un petit jeu où l'ordinateur invente une mélodie, et où il vous la fait apprendre : 4 carrés rouge, vert, jaune, bleu qui clignotent suivant cette mélodie, et vous devez la réciter. Utilise les timers, la sauvegarde des préférences (meilleur score, ...), le redessin/rafraîchissement de l'écran, les sons, ...
- (1) Be Happy

- Un programme qui ne fait rien à part dire que votre iPhone est protégé contre les virus. Joli et inutile. Petite source d'une dizaine de lignes qui n'utilise juste les NSTimer.
- (1) Wormwar

- Le jeu du serpent, où il y a une petite intelligence artificielle programmée. Vous devez tuer les serpents de l'ordinateur qui essayent aussi de vous tuer. Utilise principalement les timers et le redessin de l'écran ([ setNeedsDisplay:YES] d'une NSView) et le toucher de l'écran.
- (1) Twizzer

- Un jeu un peu pourri en soi, mais qui envoi des informations à Internet et qui affiche une page web. En fait j'ai une page de highscores, et quand vous jouez au jeu, il envoie votre score à cette page web, ce qui est essentiellement le but technique non avoué de ce jeu.
Cocoa / Objective-C
- (1) Memory Game

- Le même jeu que sur iPhone avec en plus la sauvegarde des préférences (meilleur score, partie avec mort subite ou non, ...), ouvrir une fenêtre "modale" (celle des préférences), ...
- (1) Wormwar

- Le même jeu que sur iPhone avec en plus la possibilité de jouer à 2 joueurs en un contre un ou bien à deux contre l'ordinateur.
- (1) Puissance 4

- Le jeu bien connu, contre l'ordinateur ou à deux. En 2D ou en 3D ! (grille 4 * 4 * 4 pour faire des nœuds au cerveau !)

- Cabri Géométrie

- Utilisation concrète de ces outils qui simplifient la vie d'un programmeur Cocoa : l'UndoManager pour gérer automatiquement l'action Undo, sérialisation (= sauvegarde simple d'un objet, ...). Il y a aussi une utilisation massive et élégante des classes et de l'héritage.
Exécutables Mac
- Memory Game

- Le même jeu que sur iPhone.
- Wormwar

- Le même jeu que sur iPhone avec en plus la possibilité de jouer à 2 joueurs en un contre un ou bien à deux contre l'ordinateur.
- Cabri Géométrie

- Permet de construire des figures géométriques compliquées, comme en maths, à partir de "contraintes". Ex : un triangle, le cercle circonsrit, un point sur ce cercle, la tangente à ce point, la droite perpendiculaire à la tangente et passant par un des sommets du triangle, ...
- Japonais

- Petit programme pour vous tester sur quelques 2000 mots de japonais. Identique à l'entraînement en ligne. La source de ce programme AppleScript (Studio) est ici.
- (1) Puissance 4

- Le jeu bien connu, contre l'ordinateur ou à deux. Vous pouvez aussi y jouer en version 3D !

Exécutables PC
- BlackJack
- Un petit jeu de blackjack que j'ai fait en VB (vous pouvez télécharger la source ici, qui est sur cette page de toute manière), pas franchement excitant il faut bien l'avouer
- Screen saver
- Un cow boy qui tire aléatoirement sur la photo de quelqu'un, et qui rigole quand il touche la cible (mouvante). Attention, c'est un .scr, ce
qui signifie que c'est un Screen Saver. En d'autres termes, si la souris est dessus ou si vous appuyez sur une touche pendant le déroulement du
programme, celui-ci s'arrête. Lancez le en cliquant dessus, puis en faisant Entrée. La souris doit être dans l'un des coins de votre écran avant.
Téléchargez la source (sur cette page de toute façon) pour faire de même avec vos propres photos,
ça produit toujours son petit effet.
Remarque : Un .scr est en fait un .exe où l'on a remplacé l'extension. A vous de coder le fait que si l'on appuie sur une touche ou si l'on bouge la souris le programme s'arrête. - Twizzer

- Vraiment un bon petit jeu que j'ai fait, assez rigolo, surtout si vous jouez avec quelqu'un qui a toujours du mal à coordonner ses mouvements. La source est disponible ici, c'est à dire aussi sur cette page.
- Worms

- Encore la version exécutable de ma source du même nom. Un serpent à 32 directions, qui se joue à seul ou à deux.
- Wormwar

- Idem. Le jeu est vraiment vraiment bien, sincèrement. C'est un serpent qui doit tuer les autres, on peut toucher les murs, tout ce qu'il faut c'est ne pas être bloqué. Il se joue seul contre l'ordinateur ou à 2. source. (PS j'ai aussi reprogrammé ce jeu sur iPhone et sur Mac)


votre site est fort intéressant. Je suis vraiment débutant et ne m'y connait pas tellement en script.
Pouvez-vous me dire s'il serait possible d'effectuer, via un script bien entendu, un renommage de fichiers par rapport à une liste/tableau ?
en l'occurrence, j'ai un dossier de codes barre qui sont nommé par leur numéros respectifs de code barre, et je voudrais les renommer par leur référence de produit. Je suis sûr que cela est possible,mais le langage codé demeure du chinois pour moi... Pouvez-vous m'aider ?
Merci d'avance. Bien à vous.
antoine.jacquin@hotmail.fr