Bonnes pratiques C++ (7/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : les chaînes de caractères et la gestion du texte.

Lire la suite…

Bonnes pratiques C++ (6/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : la programmation objet.

Lire la suite…

Bonnes pratiques C++ (5/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : l’architecture logicielle.

Lire la suite…

Bonnes pratiques C++ (4/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd'hui : les tests unitaires et la documentation.

Lire la suite…

Bonnes pratiques C++ (3/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : les compilateurs et les analyseurs de code.

Lire la suite…

Bonnes pratiques C++ (2/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : construire et livrer un projet.

Lire la suite…

Bonnes pratiques C++ (1/n)

Ce billet appartient à une série consacrée aux bonnes pratiques de développement C++. Certains sont toutefois applicables à d'autres langages. Aujourd’hui : l'écriture et la gestion du code source.

Lire la suite…

Du bon usage des types

Même pas une semaine depuis que j’ai publié Zinc et déjà un bug ! Une sombre histoire de fonction qui reçoit un chemin relatif alors qu’elle attend un chemin absolu. La correction ne m’a pris que quelques minutes, mais ça ne serait jamais arrivé au départ si j’avais utilisé des types différents et incompatibles pour les chemins absolus et les chemins relatifs : le compilateur aurait détecté l’erreur dès la compilation. (Le pire est que j’y avais pensé, mais par flemme, je ne l’avais pas fait.)

Lire la suite…

Zinc, un serveur HTTP portatif

Pour des raisons professionnelles, j’ai dû me remettre récemment au C++. Un C++ moderne, fortement typé, organisé en namespaces, qui n’a plus grand chose à voir avec le C et sa permissivité, où tout est géré par RAII plutôt qu’avec les vieux new et delete, etc. Je devais aussi me familiariser avec cmake et les frameworks de tests unitaires courants. Comme on n’apprend jamais aussi bien que par la pratique, je me suis trouvé un petit projet pour mettre tout cela en pratique.

Lire la suite…

Des tests unitaires

S’il y a bien une chose qui a changé dans le monde du développement entre mes débuts et aujourd’hui, ce sont les tests unitaires. Il y a vingt ans, seuls les projets sensibles en implémentaient, et encore pas tous, loin s’en faut, du fait du manque d’outil pour le faire facilement. De nos jours, tous les langages possèdent des bibliothèques de tests unitaires, tous les IDE proposent des facilités pour intégrer l’exécutions de ces tests à la chaine de build, des patterns de code comme l’injection de dépendance permettent de rendre testables des choses qui ne l’étaient pas auparavant, et les équipes sérieuses cherchent à atteindre la meilleure couverture possible.

Lire la suite…

Vers un meilleur code

La vocation principale du code est d’être lu. N’importe qui peut écrire du code qu’une machine comprend. Mais le défi qu’un développeur doit relever quotidiennement est d’écrire du code qu’un autre développeur saura comprendre et maintenir. (Cet autre développeur étant souvent : soi-même deux ans plus tard !)

Lire la suite…

Nubo, un nuage auto-hébergé

Aucune des solutions existantes de partage de fichiers ne me satisfait. Google Drive, Dropbox, iCloud et dans une moindre mesure les solutions open source comme ownCloud, toutes souffrent des mêmes limitations qui les rendent peu adaptées à mon cas d’usage personnel.

Lire la suite…

Ma config bash

Ces derniers temps (changement de boulot, changement de machine personnelle…) j’ai été confronté plusieurs fois à la pénible tâche de devoir configurer une machine neuve selon mes goûts. Comme à chaque fois je cherche pendant une heure ce qu’il faut mettre dans quel fichier pour retrouver ma ligne de commande habituelle, je publie la chose ici une bonne fois pour toute.

Lire la suite…

Petit manuel de typographie

De nos jours, le grand public s’attend à ce que les applications parlent un français correct. L’époque des ordinateurs qui parlaient en style télégraphique est révolue. Plus personne ne veut voir ce genre de boîte :

Lire la suite…

Fonctions de hachage

Avec nos langages modernes qui fournissent dictionnaires et tableaux associatifs nativement, il devient rare d'avoir à implémenter une table de hachage à la main. Cela arrive néanmoins, par exemple quand on doit développer en C/C++, qu'on ne peut pas embarquer Boost et qu'on est comme moi allergique à stdlib. Se pose alors la question de trouver une bonne fonction de hachage.

Lire la suite…

L'objet CADisplayLink

Le SDK iOS permet d'implémenter facilement la plupart des animations qui ont fait le succès de l'iPhone. Mais il arrive parfois, par exemple lorsque l'on développe un élément complètement personnalisé qui doit se comporter à l’écran selon une physique réaliste, de devoir coder une animation entièrement à la main.

Lire la suite…

Nombres aléatoires et biais dû au modulo

La génération de nombres aléatoires est un problème étonnamment complexe. Heureusement, sauf besoin spécifique, le développeur y est rarement confronté directement : la bibliothèque C fournit des générateurs pseudo-aléatoires performants et prêts à l'emploi. Les systèmes basés sur FreeBSD proposent notamment random() et arc4random(), qui sont de très bons remplacements à l'historique et défectueuse fonction rand().

Lire la suite…

Scanner des codes-barres

La librairie de référence pour scanner des codes-barres de toutes sortes, qu'ils soient mono-dimensionnels comme EAN13 ou bidimensionnels comme QR-code ou Datamatrix, est ZXing (prononcer « zebra crossing »). Malheureusement, il s'agit d'un travail développé sous Android dont le portage sur iPhone n'est pas terminé : il manque toute la partie 1D. (De plus, j'ai toujours trouvé cette librairie mal « packagée » et peu commode à intégrer dans un projet, mais c'est un autre sujet !)

Lire la suite…

Un outil pour le versionnage

L'utilitaire agvtool est un petit outil en ligne de commande fourni avec Xcode. Il permet de gérer facilement les numéros de versions embarqués dans votre application. Voyons comment l'utiliser pour automatiser certaines tâches.

Lire la suite…

Service Web et proxys

Beaucoup d'applications mobiles reposent sur des services web. L'intelligence se trouve sur un serveur tandis que l'iPhone sert de simple terminal, pour afficher des informations à l'utilisateur ou lui permettre d'en saisir. Il peut y avoir tout un tas de bonnes raisons à choisir cette architecture :

Lire la suite…