Skip navigation

Category Archives: Programmation

Articles concernant les langages de programmation.

Je suis un grand amateur de ruby et de rails depuis que j’ai découvert ces technos il y a de ca 2 ans et demi.

Pour mon boulot, j’ai eu besoin de gérer des rôles et permissions entre modèles. Typiquement, on peut imaginer le cas d’un modèle User et d’un modèle Article.

Certains utilisateurs peuvent lire l’article, certains autres peuvent l’éditer, etc.

De nombreuses gems existent pour résoudre ce problème. J’ai moi même utilisé ACL9 qui n’est pas mal dans son genre.

Cependant, je l’ai trouvée trop compliquée et certaines choses manquaient à mes yeux. J’ai donc pris mon courage à deux mains et décidé de coder ma propre gem pour résoudre ce problème.

Ainsi est née rails-canhaz

Voici un exemple de ce que cette gem peut faire :

user = User.find(42)
article = Article.find(1337)

user.can?(:read, article) # Can the user read this article? false for now

user.can(:read, article) # Ok, so the user can read this article
user.can(:edit, article) # He can edit it as well

user.can?(:read, article) # Will be true

user.objects_with_permission(Article, :read) # Will return all the articles w/ read permissions for this user

artice.subjects_with_permission(User, :read) # Will return all the users hat are able to read this article

#You can also remove permissions

user.cannot(:read, article)
view raw gistfile1.rb This Gist brought to you by GitHub.

C’est ma première contribution au monde des gems ruby, je suis donc tout à fait ouvert aux critiques, pull requests, ou commentaires :)

Vous savez surement à quel point chercher un bug dans un gros projet peut être rébarbatif, surtout quand le bug est apparu il y a longtemps, et qu’un nombre considérable de commits se sont passés depuis.

Git offre la possibilité d’optimiser cette recherche via la commande git bisect.

Cette commande permet à git de faire une recherche dichotomique.

C’est parti, simplement « git bisect start« .

Vous devez ensuite indiquer à git un point ou le bug n’était pas présent, puis un point ou le bug était présent.

git co master && git bisect good
git co HEAD~40 && git bisect bad
view raw gistfile1.sh This Gist brought to you by GitHub.

(vous pouvez aussi appeler git bisect good_comit bad_commit)

Un peu comme un plus ou moins, git va alors changer le commit actuel de votre dépôt local (il va prendre le commit au milieu des deux que vous lui avez indiqué), à vous de tester et de lui indiquer si le commit est bon « git bisect good », ou mauvais « git bisect bad »

 

Au bout de quelques étapes, git va débusquer le commit fautif, et il sera aisé de trouver le bug.

Il est possible d’automatiser cette étape avec git bisect run, en lui passant en paramètre un script, qui renverra 0 ou 1 si le commit est bon ou mauvais.

 

Happy gitting!

Pour ceux qui ne sont pas familiers avec le système pédagogique d’Epitech, une piscine est une période intense de cours et d’exercices pour apprendre une nouvelle technologie, nous avons des vidéos et des cours le matin, puis des exercices à rendre pour le lendemain.

Durant ma scolarité j’ai déjà vécu deux piscines (C en première année, et C++ en deuxième), et j’en vis actuellement une troisième (CodeWorker).

Cette piscine est, je trouve, un peu plus light que les précédentes, c’est pourquoi je peux me permettre d’écrire ce petit article entre deux lignes de code.

 

 

Cette piscine a pour thème le parsing et pour support le langage de script codeworker.

Développé par Cedric Lemaire, ce langage de script plutôt souple permet de nombreuses choses, notamment de développer directement depuis une base de BNF.

Voici un exemple de code tiré du tutoriel réalisé par son créateur :

contenu_du_fichier ::=
#continue
#ignore(blanks) [nombre | identifiant | chaine]*
#empty
=> traceLine(« L’analyse a réussi! »);
;
chaine ::= ’ »‘ [~'"']* ’ »‘;

 

Le but de cette piscine d’une semaine est de nous donner les bases pour réaliser un projet baptisé KOOC pour « Kind Of Objective C ».

 

Ce projet consiste à intégrer à l’aide de CodeWorker une couche objet au C (classes, héritage virtuel, etc).

Nous utilisons cnorm, un outil en CodeWorker développé par notre professeur de programmation objet avancée, afin de parser le C et d’obtenir un AST à partir duquel travailler.

Cette piscine est plutôt différente des précédentes, de nombreuses personnes l’ont abandonné car le CodeWorker est un langage plutôt surprenant à première vue, mais il s’avère puissant (quand il ne segfault pas).

Elle n’en reste pas moins intéressante dans sa globalité et nous permettra, grâce au projet KOOC, d’en savoir plus sur le fonctionnement des langages orienté objet :)

Pour ceux qui ne connaissent pas git, il s’agit d’un logiciel de gestion de versions ayant la particularité d’être décentralisé, je vous invite à regarder la page wikipedia, c’est un atout formidable pour les développeurs. (Voir aussi Subversion, Mercurial pour ne citer qu’eux).

Pour les autres, voici une petite astuce qui m’a sauvé une ou deux fois.

Il peut arriver de pusher par erreur des commits, ou de se rendre compte après coup d’un bug.

Plusieurs solutions existent, notamment :

  • Publier d’autres commits pour annuler les changements.
Grâce à la commande « revert » de git, il est possible de publier des commits à effet inverse.
git revert commit1 commit2 … commitn
Cette solution est élégante mais si il y a beaucoup de commits à annuler, le log devient illisible et il n’est pas facile de s’y retrouver.
  • Annuler purement et simplement les commits en forcant un push
La commande push de git permet de faire beaucoup de choses, notamment de forcer le dépot distant à se synchroniser avec le commit qu’on lui donne, soyez prudent car les commits sont ensuite perdus sur le dépôt distant.
git push -f commit_ou_tout_va_bien
Le dernier commit sur le dépôt sera alors « commit_ou_tout_va_bien », les commits ultérieurs seront supprimés.
Happy gitting :)


Hey les geeks!

Un développeur n’est rien sans son éditeur de texte.

Certains préfèrent les éditeurs « old school »: minimalistes mais plein de fonctionnalité (je pense à Emacs, vim, etc), d’autres préfèrent les bonnes usines à gaz qui font le café (netbeans, eclipse).

J’écris rapidement cet article pour vous partager un éditeur de texte qui se situe un peu entre les deux grandes écoles, Sublime Text 2.

Cet éditeur à la croisée des chemins à l’avantage non négligeable d’être multi plateformes, ce qui compense un peu le fait qu’il soit payant (Actuellement en béta publique et gratuit, mais plus pour longtemps).

Bien que fenêtré et comportant pas mal de fonctionnalités, Sublime Text tourne parfaitement bien sans aucun lag.

Ses fonctionnalités principales sont les suivantes:

  • De très jolis thèmes
  • Insertion de snippets
  • Très configurable (via fichier)
  • Des raccourcis intéressants et pratiques (essayer Control + R et Control + P)
  • Un mode « distraction free »

Ce ne sont que quelques unes des fonctionnalités du logiciel, j’espère vous avoir mis l’eau à la bouche, pour le reste, à vous d’essayer et de me dire ce que vous en pensez!