Le blog
Catégories :
Toutes les catégories
Algorithmique
C++
Cocoa & Objective-C
Général
Nubo
Xcode
Zinc
Abonnement
RSS
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.
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.
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.
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.
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.
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.
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.
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.)
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.
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.
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 !)
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.
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.
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 :
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.
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.
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().
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 !)
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.
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 :