07.01.08
Posted in Programmation at 0:10 par denis
Allez savoir pourquoi ca arrive toujours au plus mauvais moment… Allez d’ailleurs savoir pourquoi, mais Git a décidé ce soir de me faire une petite crasse… En plein boulot, voila-t-il pas que la sale bête se met à me traiter de « Pas un git repositoire », alors que j’essayais gentiment de faire mon commit du soir ( très important pour un bon sommeil, notez bien ).
Au premier coup d’oeil pourtant, tout va bien: le répetoire .git est bien là. Mais git-fsck n’est pas d’accord. Et il le fait savoir, comme son ami commit 30 secondes plus tôt:
fatal: Not a git repository
Voila qui est bien facheux… D’ailleurs un petit coup de strace sur la commande a tôt fait de révéler l’infamie responsable de tout ca: on a amputé mon gentil répo de ses fichiers .git/HEAD et carrément de tout le contenu de .git/refs ! Allez savoir quel terroriste est reponsable de ca, serait-ce l’infame XFS ? Un bug dans Git ?
Peu importe, le mal est fait, maintenant, faut récupérer. Alors voyons ce qu’il nous reste. Pas grand chose en fait: en gros, il reste surtout .git/log, .git/objects et .git/packed-refs. Premier « ouf » sonore: mes objets sont encore la, reste à récupérer les références, et pour ca, j’ai encore du bol: il me reste le log.
Primo, voyons le fichier .git/log/HEAD. Il contient en fait tout l’historique du pointeur HEAD pour cette copie de travail. La dernière ligne contient une référence au HEAD d’avant le crash. Dans mon cas, elle ressemble à ça:
edc483686bfcf0d889233eb03128424daa46f351 0cb4c60700197427926856a71a389bf6cba0221e Denis Wernert <deniswernert@nymphadora> 1214865337 +0200 checkout: moving from master to wip
Notez la seconde somme SHA1 de la ligne, 0cb4c60700197427926856a71a389bf6cba0221e, c’est elle, la référence qu’on cherche. On va la coller dans le fichier .git/HEAD, ce sera déjà ça.
C’est déjà pas mal, mais ca ne suffit pas, il faut encore re-créer .git/refs. Notez que .git/log contient un répertoire refs, contenant lui-même un répertoire heads. Pour chaque fichier contenu dans .git/log/refs/heads, on va créer un fichier dans .git/refs/heads du même nom, et pour chacun, on procedera comme pour le fichier HEAD ci dessus, c’est à dire qu’on va recopier la seconde somme SHA1 de la dernière ligne, pour la placer dans le fichier de destination.
Et la, ca va mieux.
Les branches sont de retour, et git-status veut bien me parler à nouveau. Notez que pour l’instant, ma référence à HEAD est absolue, et de fait, git ne reconnait pas ma branche courante. Une fois certain d’avoir tout retrouvé et après avoir sauvé mes modifs locales dans un patch, je peux écrire
ref: refs/heads/wip
dans mon HEAD, ou bien tout simplement faire un
git checkout wip
pour remettre le pointeur sur la branche.
Et voila, le répo est revenu et enfin dans de bonnes dispositions. Dans ce cas ci, on pourra bien dire que la « hackabilité » de Git m’a été bien utile…
Permalink
06.10.08
Posted in Langages, Programmation, Web at 23:31 par denis
Dans la série à n’en plus finir des « langages qui permettent de faire du Javascript sans se prendre la tête à faire du Javascript parce que le Javascript c’est vraiment trop dégueu ( et c’est vrai ) », voici un autre concurrent, à l’approche un peu plus originale, puisqu’il vous propose d’écrire du Javascript en… Javascript.
Enfin pas tout à fait, puisque Mascara propose de faire un petit bond en avant, et d’écrire dès aujourd’hui en Ecmascript 4, la prochaine norme Ecmascript qui devrait en réconcilier plus d’un avec le vilain petit canard des langages. Et c’est mieux, pour preuve, il vous sera possible d’écrire ceci:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // Tiens, une variable typee ??
var i : int = 1 ;
// Généricité
var messages = Vector. ;
messages[1] = "hello" ;
messages[2] = "world" ;
// Héritage
class Foo {
var message : String ;
function Foo( msg : String ) {
this.message = msg ;
}
function talk() {
alert( this.message ) ;
}
}
class HelloWorld extends Foo {
function HelloWorld: Foo( "Hello, World" ) {}
} |
Voila qui donne déjà bien plus envie de faire du JS… L’auteur indique cependant que le support n’est pas encore complet. Ca va quand même nous aider à attendre Tamarin
Permalink
09.24.07
Posted in Langages, Programmation at 22:00 par denis
LinuxFr attire une nouvelle fois notre attention sur le langage Lisaac, développé pas loin de chez nous du tout…
Je n’ai pas vraiment eu le temps de me plonger dedans, mais vu la participation du fondateur de SmartEiffel, ca ne peut pas être mauvais…
A voir…
Permalink
03.11.07
Posted in Kobalt, Programmation at 18:07 par denis
J’ai toujours été fan de Prototype, une libraries bien écrite, concise, efficace. J’ai également jeté un oeil à jQuery et Mootools, ainsi qu’a presque toutes les librairies Javascript qui trainent sur le net. Il y a de très bonnes idées, mais un paradigme m’a toujours manqué: celui de la programmation par contrat.
Pourtant, je n’ai que trop souvent vu du code Javascript planter pour cause justement de non-vérification d’un contrat. Des erreurs qui auraient pu être évitées, au prix d’une petite conditionnelle en début ou en fin d’action.
Bien évidemment, borner son code d’expressions conditionnelles est toujours pénible, couteux en temps et en effort.
Kobalt a été créé dans le but de fournir un environnement simple et efficace pour l’application de la programmation par contrat en JavaScript. La libraries fournit des méthodes toutes prêtes pour vérifier des contrats sur les types, les propriétés et les méthodes, des itérateurs limités par des gardes, des fonctions cadres, ainsi que quelques fonctions de convenance.
Pour l’instant, il n’y a aucun support ni pour les fonctionnalités Ajax ni pour des fonctionnalités visuelles, cela est cependant prévu pour les prochaines versions.
La librairie est relativement légère: 9Ko en version non-compressée, préambule de la licence CeCILL compris, et à peine 5,5Ko une fois compressée par les bons soins de jsjuicer.
La version actuelle ne doit pas être considérée comme finie, c’est plus une preview, une mise en bouche. N’hésitez cependant pas à me faire part de vos commentaires.
Le code est mis à disposition sous license CeCILL.
Téléchargements:
Permalink