Changement de cap …

Vous l’aurez remarqué, il ne se passe plus rien ici depuis quelques temps. Je n’ai pas arrêté de lire (bien au contraire), je vais toujours au cinémas (beaucoup moins malheureusement). C’est juste que je n’ai plus beaucoup de motivations à ça.

Tout a commencé début avril 2011 … J’étais un peu submergé entre de gros projets au travail et le lancement des CocoaHeads. Bref, pas le temps d’écrire … Une fois que j’ai eu de nouveau le temps, c’est la motivation qui n’était plus là.

Mais depuis quelques temps, l’envie d’écrire me reprends. Mais j’ai envie d’écrire tout autre chose ! Pour être clair, j’ai envie de parler de mon job: le développement d’applications mobiles (mais dans un contexte différent … j’y reviendrais plus tard).

L’idée n’est pas de faire des tutoriaux ou de présenter des choses généralistes. Non, je présenterais des idées, des concepts, des outils qui me sont utiles au quotidien. Le rythme de publication ne devrait pas être fréquent. Mais les contenus seront, je l’espère, très complets !

Je suis un peu désolé pour ceux qui avaient l’habitude de lire mes billets sur les bouquins ou films. J’ai longtemps hésité à les laisser en ligne, puis je me dis qu’ils pourraient tout à fait cohabiter dans une catégorie à part. Finalement, j’ai décidé de migrer tout ce qui n’est pas “professionnel” dans un blog archive sur archives.webd.fr. J’ai mis en place des redirections HTTP pour garder la pérennité des liens1. Les articles professionnels, quant à eux, restent ici.

Il y aura aussi, très certainement, des ajustements graphiques sur ce blog !

Bref, c’est reparti :).

CocoaHeads Rennais: la naissance d’un groupe de développeurs Cocoa à Rennes

Sur le bassin rennais, il y a beaucoup d’émulation autours des technologies de l’information. L’arrivée récente de la Cantine Numérique Rennais n’a fait qu’amplifier ce phénomène …

Il y a quelques temps, je me suis rendu compte que nous n’avions pas de CocoaHeads à Rennes … Si CocoaHeads ne vous dis rien: il s’agit simplement d’un groupe de développeurs passionnées (ou simplement enthousiastes) par les technologies Apple (Mac OS X et iOS). Ce groupe se réuni tous les mois afin d’échanger sur des sujets technologiques autour de ces technologies.

Le concept semble très bien marcher à Paris et à Bordeaux (sans compter les multiples entités à l’international) … Alors pourquoi pas à Rennes ?

Nous avons ici un potentiel assez grands de développeurs Objective-C / Cocoa / Cocoa Touch. Alors pourquoi pas nous rassembler, partager, échanger ? Ce serait l’occasion de monter en compétences … Mais pas seulement. CocoaHeads se veut aussi social ! L’occasion, après les présentations, de boire un verre, manger un morceau.

C’est donc certain: il faut lancer les CocoaHeads Rennais ! Mais pour se faire, il faut du monde, du soutien, des participants. Alors si:

  • Vous souhaitez aider en fournissant des locaux (j’ai déjà une piste à ce sujet) ?
  • Vous souhaitez intervenir en tant que présentateur ?
  • Vous souhaitez aider (de n’importe quelle façon que ce soit) ?
  • Vous souhaitez simplement manifester votre enthousiasme ?

Contactez moi: jjy.quere _ arobase _ gmail.com !

Je ne sais pas encore ou et quand la première session aura lieu. Mais plusieurs choses sont certaines:

  • Ce sera gratuit (c’est un principe de base).
  • Ce sera ouvert à tous (du débutants à l’expert).
  • Ce sera convivial.
  • Ce sera intéressant.
  • Ce sera l’occasion de faire naitre une communauté Cocoa Rennaise (voir bretonne).

Alors à très bientôt aux CocoaHeads Rennais !

PS: un espace plus adapté que ce blog verra bientôt le jour pour parler des CocoaHeads Rennais :)

Pourquoi je n’utiliserais pas Google DNS

La semaine dernière, Google annonçait officiellement l’ouverture au public de son nouveau service: Google Public DNS. Il s’agit de proposer à tout internaute un service DNS qui se veut offrir une bien meilleure expérience du net à tout les utilisateurs…

DNS, c’est quoi ?

DNS (pour Domain Name System). Il s’agit du système qui traduit les noms de domaines (webd.fr par exemple) en adresses IP (94.23.202.54 pour webd). En effet, les machines ne communiquent que par des adresses IP.

A moins d’être autiste, il est beaucoup plus simple de retenir des adresses textuelles. En fait, il faut voir DNS comme un annuaire du net. Il met en correspondance des noms de site avec des adresses IP. Là où un annuaire téléphonique met en relation des noms de personnes avec des numéros de téléphone.

Ce service DNS est totalement transparent pour les internautes car cela fait partie des services de base lors de la connexion à tout réseau (que ce soit le réseau de son FAI ou un réseau d’entreprise). Et voilà maintenant que Google lance son propre DNS publique et voudrait faire passer tout le Web par ce service.

Continue reading

Oui, Windows est obligatoire à SUPINFO

Il est rare (en fait c’est la première fois) que je parle de SUPINFO (école où je m’apprête a faire ma seconde année de Master) sur ces pages. Pourquoi commencer aujourd’hui ? Tout simplement parce qu’une rumeur enfle en ce moment au sujet de l’école. Le principal canal de diffusion: Twitter.

L’idée de la rumeur est assez simple (simpliste ?): SUPINFO serait «macqué» avec Microsoft et obligerait tout ses étudiants à utiliser Windows sur leurs ordinateurs personnels. De là, on imagine rapidement le processus d’embrigadement visant à éloigner les étudiants du monde du logiciel libre (les élèves ingénieur d’aujourd’hui sont les décideurs de demain).
Continue reading

Nib2objc: Ou comment convertir un nib en code Objectif-C

L’utilisation d’Interface Builder s’avère très pratique pour les développeurs Cocoa Touch. C’est vrais que c’est génial de pouvoir créer ses interfaces en mode WYSIWYG. Oui mais voilà, cela peut poser quelques problèmes. Outre les cas où l’utilisation du code est nécessaire (pour atteindre la granularité voulue), on peut vouloir renoncer à l’utilisation des nibs pour des raisons de performance.

En effet, dans certains cas l’utilisation des nibs pose de sérieux problèmes de performance. On se retrouve ainsi avec un dur choix: soit on choisit la simplicité (et on utilise Interface Builder), soit on écrit ses interfaces directement dans le code et on gagne en performance. Dans certains cas, l’impact de l’utilisation des nibs sur la performance est quasi nul. La question ne se pose donc pas. Mais parfois, ce n’est pas le cas.
Continue reading

Comparer deux NSDate

Il est souvent utile de comparer deux NSDate dans le temps. Il s’agit de savoir si une date est antérieure ou postérieure à une autre. Le mécanisme offert par Apple pour les comparaisons de NSDate n’est pas des plus pratiques. Il faut utiliser la méthode compare:(NSDate*)date qui retourne un objet de type NSComparisonResult.

Cette méthode est une méthode standard de Foundation. Elle permet, grâce à des résultats de comparaison standardisés d’effectuer un tri sur des objets de façon générique. Oui, mais Apple ne prévoit pas de méthodes un peu plus haut niveau pour les simples comparaisons de dates. Voilà pourquoi j’ai écrit rapidement une addition de la classe NSDate permettant de comparer deux dates intuitivement. Les voici:
Continue reading

Redimensionner une UIImage en étant Threadsafe

Il y a peu, je vous présentais ici même comment redimensionner une UIImage. Je vous replace dans le contexte: Dans certains cas, il peut être utile de redimensionner une UIImage. En effet, même si UIImageView gère très bien le redimensionnement, on peut vouloir exporter une image dans une certaine taille. De même, il n’est pas forcement utile de stocker (en mémoire ou bien en dur) une image de grande taille si c’est pour l’afficher réduite par la suite.

Le code qui était présenté est fonctionnel … Oui, mais un collègue m’a fait remarquer que ce n’était pas le cas en multi-threads. Pourquoi ? Tout simplement parce que quand on fait UIGraphicsBeginImageContext(), on travaille dans un contexte unique. Ainsi, quand on voudra redimensionner deux images en même temps, elles partageront le même contexte. Clairement, ça ne peut pas marcher. D’ailleurs: ça ne marche pas !

Continue reading

Calculer un hash MD5

Pour ceux qui ne la connaissent pas, MD5 est une méthode permettant d’obtenir une empreinte numérique unique d’un message (au sens large du terme: chaine de caractère ou fichier). Cet algorithme a longtemps été utilisé à des fins de sécurité. Au risque de me répéter: n’utilisez pas MD5 à des fins de sécurité ! Cet algorithme est maintenant faible. Plus d’informations sur Wikipedia EN.

MD5 peut être utilisé pour générer une clef “unique” à partir d’une chaine de caractères. Exemple concret: j’ai des objets représentant des rendez-vous qui naviguent un peu partout (SQLite local, serveur de calendrier distant, …). Il me faut à tout moment pouvoir identifier uniquement un rendez-vous. La solution que j’ai choisi est de générer une somme MD5 à partir du titre du rendez-vous, de la date de création et l’UDID (voir Comment récupérer l’UDID). Voici l’implémentation que j’utilise pour générer mes MD5 (dans le cas présent, c’est une addition de NSString):
Continue reading

Décompresser des archives dans des dossiers multiples sous MacOS

J’avais fait pas mal de billets sur ce blog concernant un script de décompression d’archives multiples en rar sous Linux (le dernier ici). L’idée est de porter la processus sur Mac OS. Premier problème: il n’y a pas de commande rar (ni même unrar) par défaut (même avec UnrarX).

Pour corriger cela, il suffit de se rendre sur le site de rarlab et de télécharger la version MacOS X de rar. Une fois le téléchargement décompressé, il suffit de déplacer les exécutables qui vont bien dans /usr/bin. Pour ce faire:

Pour finir, il suffit d’utiliser le script habituellement utilisé sur Linux et c’est bon … Vous le trouverez par là.

Redimensionner une UIImage

Dans certains cas, il peut être utile de redimensionner une UIImage. En effet, même si UIImageView gère très bien le redimensionnement, on peut vouloir exporter une image dans une certaine taille. De même, il n’est pas forcement utile de stocker (en mémoire ou bien en dur) une image de grande taille si c’est pour l’afficher réduite par la suite.

Pour redimensionner une image, c’est plutôt simple ! L’idée est de créer un contexte d’image de la taille souhaitée (ici 40*40 pixels). Dans ce contexte, en dessine l’image à redimensionner dans la taille souhaitée. Il ne reste alors plus qu’à récupérer l’image redimensionnée avec un UIGraphicsGetImageFromCurrentImageContext. Pour finir, on pensera bien à fermer le contexte courant.

Voici le code final: