Categories
Non classé

Xcode tips

Time to be productive with Xcode!

Define your own shortcuts

If there’s only one thing to remember from this post, that is to define your own keyboard shortcuts. I find that some handy shortcuts are associated with commands that are seldom used. Working with a French keyboard I also need to change some defaults anyway.

So go to Xcode > Settings > Key Bindings and experiment.

Move between subwords

You probably know ⌥← and ⌥→ to move from one word to the other. But did you know ^← and ^→ to move between subwords? Extremy useful with CamelCase symbols.
macOS might already use the same shortcuts to navigate between Spaces of Mission Control (I favorise Xcode).

Missing text commands

I’m desperate with Xcode still missing some commands that are widely available in other text editors. At last, and after begging for 15 years, Xcode 14 can finally duplicate a line (⌘D)! But I still see too many people using their mouse to select a whole line of code.

Look for the TextPlus Xcode extension on the Mac AppStore and install it. Now assign the following keyboard shortcuts:

Copy line^C
Cut line^X
Clear line^⌦
Clear line and Paste^V
Duplicate Line Up⌥⇧↑
Duplicate Line Down⌥⇧↓
Insert Line Above^⌥↑
Insert Line Below^⌥↓
Keyboard shortcuts associated with TextPlus commands

Then you can copy/cut/paste/delete a whole line of code without selecting it. Unfortunately not with ⌘C / ⌘X / ⌘V.

I adopted the same keyboard shortcuts than Visual Studio code to duplicate lines.

Show Document Items

This command is misnamed but you probably already know it. It’s the little menu that pops-up when you click the “Breadcrumb” bar.

Xcode: the Document breadcrumb

First: did you know that you could type to filter it ?

Xcode: Filtering the Document items list

And now is the second trick: the Xcode command which corresponds to this menu is “Show Document Items”. Associate it with a very accessible keyboard shortcut, for example the key on the top left of your keyboard. That will be ⌘` on a US keyboard or ⌘@ on my French keyboard.

Vim mode

You may activate the Editor > Vim mode if you’re that kind of person. There are no Visual or Block modes, which I don’t care much for, but I do miss relative line numbering.

Tests shortcuts

Use ⇧⌘U to build the current test target.

Use ^⌥⇧U to launch the current test class.

Use ^⌥⌘G to relaunch the last test (very useful when writing a test).

Test counterpart

Say you’re editing MyFile.swift. Press ^⌘↑ (Navigate > Jump to Next Counterpart) twice to go to MyFileTests.swift.

Snippets

Create snippets for extracts of code which are frequent, hard to type or hard to remember.

To create a snippet, select some code then Editor > Create code snippet. Use <#placeholder#> where appropriate.

Here are some of my favourite snippets for Swift:

CodeCompletion keyword
guard let self else { return }guards
@testable import MyAppmyapp
/// :inheritdoc:inherit
// MARK: <#mark#>mark
/// :nodoc:nodoc
// swiftlint:disable:this <#rule#>lintdis
// swiftlint:enable <#rule#>linten
[weak self]weaks
My favourite snippets for Swift

Categories
Non classé

dopop

Je me suis lancé depuis quelques semaines dans un nouveau projet. Il s’agit d’une application iPhone qui regroupera plusieurs jeux en rapport avec l’apprentissage du solfège, mais réalisés comme des jeux d’arcade pour ne pas être ennuyeux.

Je vous laisse jeter un œil au site consacré au jeu: dopop.net.

Categories
Non classé

Open Street Map: édition

Comme je vous le disais dans le billet d’introduction à OpenStreetMap, nous disposons aujourd’hui de nombreux outils pour éditer les plans. Aussi, il ne tient qu’à vous de commencer à compléter votre ville. Voyons trois de ces outils.

Il vous faudra un compte

Quel que soit l’outil choisi, il vous faudra créer un compte pour pouvoir éditer les cartes. S’agissant d’un outil collaboratif, vous comprendrez qu’il est nécessaire d’attribuer à chacun ses modifications, ne serait-ce que pour se prémunir des vandales. Vous disposerez également d’un historique de vos modifications et pourrez téléverser les traces GPS sur le site.

L’éditeur intégré à OpenStreetMap

Un tout nouvel éditeur intégré a fait son apparition. L’ancien outil était assez limité (il convenait pour renommer une rue, mais pas guère plus), et utilisait Flash, donc était inaccessible aux appareils mobiles.

Le nouvel éditeur propose les outils de base: ajout de points, de lignes et polygones, et balisage de ces éléments. Comme le fond de carte de Bing apparait pendant l’édition, nous disposons à présent d’un outil qui répond à la plupart des besoins.

Pour l’utiliser, rendez-vous sur la page d’accueil d’OpenStreetMap, et cliquez sur l’onglet Modifier. Un petit tutoriel est même présent pour vous expliquer les principes.

JOSM

Cet outil servira aux cartographes plus avertis. Par exemple, vous pourrez importer les données du cadastre français et changer le type de projection. Il est aussi utile si vous cartographiez massivement, puisqu’il dispose, par exemple, d’outils qui permettent d’importer des photos (pour noter comment s’appellent les rues ou les magasins), puis de synchroniser leur heure avec une trace GPS, ou un fichier audio.

Vous trouverez JOSM ici.  L’outil est écrit en Java, et est lourd. Par ailleurs, il est très mal adapté à la souris du Mac.

Pour finir, il y a un concept à comprendre: pour commencer l’édition, JOSM demande de délimiter une zone, qui ne doit pas être trop grande, de l’ordre de 3 x 3 km.  Il va ensuite charger tous les éléments (points, polygones…) qui se trouvent dans cette zone. On travaille alors hors-ligne, et c’est quand on a fini notre travail que JOSM vérifie qu’il n’y a pas d’incohérences, et qu’on peut enfin envoyer les données à OpenStreetMap.

Go Map!!

Pour finir, une application pour iPhone et surtout iPad, bien fichue et qui présente les outils essentiels. En pratique, travailler avec cette appli me semble plus lent qu’avec un ordinateur de bureau, mais la géolocalisation est bien pratique pour pouvoir éditer les cartes sur place.

Categories
Non classé

Introduction à OpenStreetMap

Qu’est-ce que c’est ?

Pour commencer, mieux vaut vous rendre sur OpenStreetMap.org. Vous y verrez une carte.

Comme vous avez déjà certainement utilisé des services tels que Google Maps, Mappy ou Bing, vous pouvez vous demander ce que celui-ci a de différent: il est collaboratif. Ainsi, ce sont des gens comme vous et moi qui ont saisi les cartes. OSM est donc aux cartes ce que Wikipédia est aux encyclopédies.

Est-ce utilisable ?

Pour être honnête, je dirais que pas encore. Il faut bien comprendre qu’OSM se nourrit des informations saisies par des bénévoles, et donc certaines zones — en particulier denses et urbaines — sont bien renseignées, alors que d’autres ne font apparaître que les grands axes routiers et ferroviaires.

Le projet a démarré en 2004, et le travail accompli est formidable. Le mouvement devrait s’accélérer, parce que, vous le verrez dans les prochains articles, contribuer est aujourd’hui facile. Par ailleurs, de nouvelles sources de données sont apparues. Ainsi, l’ami Crosoft permet à OSM d’utiliser les photos satellites de Bing (j’ai cru comprendre qu’il faisait surtout cela pour ennuyer Google…) et nous pouvons depuis peu utiliser les données du cadastre français.

Pourquoi contribuer ?

J’ai pour ma part deux raisons de contribuer. La première est qu’il s’agit d’un acte citoyen. On a souvent besoin de cartes, que ce soit pour voyager, se rendre chez des amis, préparer un trajet professionnel ou une randonnée. Actuellement, ces données sont détenues par une poignée de sociétés ou d’organismes gouvernementaux qui limitent leur accès pour des raisons stratégiques ou financières.

La seconde raison est qu’il s’agit d’une source de richesse. Ces données libres ouvrent la voie à de nouvelles applications qui ne pourraient pas exister autrement, que ce soit parce que les données ne seraient pas accessibles, ou parce qu’elles seraient trop chères.

Je m’y suis mis il y a quelques jours

Je m’étais intéressé à OSM il y’a quelques années, mais il m’avait semblé qu’y contribuer était trop complexe. Par exemple, il fallait installer un logiciel sur son GPS de voiture pour connaître les routes existantes (créer des traces).

Aujourd’hui, avec le GPS d’un iPhone, on peut tracer sa route et l’envoyer facilement à un ordinateur. On peut aussi prendre des photos géolocalisées pour noter les endroits remarquables.

Nous verrons aussi dans les prochains articles que l’utilisation des outils logiciels est assez simple.

Categories
Non classé

Programmation et cyclisme

Je vois souvent des messages sur les forums des débutants en programmation demandant “Quel est le meilleur langage de programmation ?”

– “le C. C’est la base, tous les langages sont basés dessus”, écrit un premier.

– “il faut apprendre un langage objet, par exemple Java”, explique un deuxième.

– “ces langages sont dépassés, Ruby c’est mieux”, rétorque un troisième.

 

Pour faire un parallèle avec le cyclisme, c’est comme si vous demandiez “Quel est le meilleur vélo ?”

– “le vélo de route. C’est très stable et rouler exige peu d’efforts, c’est génial pour avaler les kilomètres”, dirait un premier.

– “non, le VTT. Ça permet de se rendre vraiment partout, et de contourner les obstacles”, rétorquerait un deuxième.

– “je ne jure que par le vélo de ville”, répondrait un troisième, “ça évite de salir mon pantalon, et je peux le garer facilement”.

– “mais, non, le plus rapide, c’est le vélo de piste”, dirait le dernier.

Vous comprenez bien qu’il n’y a pas de vélo idéal. Si vous deviez conseiller un vélo à quelqu’un qui n’y connait rien, probablement lui recommanderiez-vous un VTC. Un vélo plein de compromis, avec lequel personne n’a jamais gagné de course ! Mais au moins, il pourrait en faire dans la majorité des situations, et sans efforts démesurés.

Pour en revenir à la première discussion, elle se termine généralement par l’arrivée d’un programmeur expérimenté qui demande “ça dépend, un langage pour faire quoi ?”. Comme les vélos, s’il existe tant de langages différents, c’est parce qu’ils répondent à des besoins différents.

Et quel serait le langage VTC ? Quelque chose comme Python, je dirais.

 

 

Categories
Non classé

Faut-il se former soi-même ou par un organisme ?

Lorsqu’on souhaite se mettre à une technologie qu’on ne maîtrise pas encore, il existe deux voies pour se former:

  1. Se former soi-même.
  2. Suivre une formation dispensée par un organisme.

En auto-formation

Au niveau du prix, le calcul est simple:  il s’agit du prix des supports, tels que les livres ou les abonnements à des sites web et autres achats de vidéos. Ça peut même être gratuit.

Pour ce qui est du temps passé, cela est souvent difficile à quantifier, parce qu’il ne se réduit pas  au temps de lecture ou de visionnage: il faudra aussi essayer des choses, et surtout se tromper. Cela prend un temps dingue !

Notez bien que ce mode de formation est tout à fait envisageable; je me suis moi-même formé à iOS de cette manière. D’ailleurs, une formation par une organisme ne peut pas couvrir tous les sujets, et le recours à des livres sera indispensable pour tout sujet un peu pointu.

Passer par un organisme de formation

Le coût

Il n’y a pas de mystère, le coût d’une formation dispensée par un organisme est élevé, parce que l’organisme doit payer le formateur, son personnel, la logistique et ses locaux. En dehors du prix de la formation, le client doit également payer son employé pendant qu’il se forme; il n’est donc pas productif durant la durée de la formation. Des frais annexes, tels que des frais d’hôtel ou de déplacement peuvent aussi s’ajouter.

Cela dit, si l’organisme de formation est conventionné, le fond de formation de l’entreprise pourra prendre à sa charge tout ou partie du prix de la formation. Je m’explique. D’après ce que j’ai compris, toute entreprise ayant des employés doit s’acquitter de la taxe d’apprentissage, mais peut déduire une partie si elle les place dans un fond. De fait, une entreprise a plutôt intérêt à utiliser le fond et former son personnel. Elle ne paie donc pas la formation “plein pot”.

(Soit dit en passant, l’existence de ces fonds explique pourquoi la formation est une activité plutôt lucrative en France. Puisque la formation “ne coûte rien” à l’entreprise, elle n’est pas trop regardante sur les tarifs. Je dirais que c’est aussi ce qui permet d’accueillir les stagiaires dans les meilleures conditions).

Le temps

Le gros avantage de la formation par un organisme se situe au niveau du temps. La formation classique que je donne dure cinq jours, et les stagiaires sont toujours étonnés de sa densité. Ils vont gagner beaucoup de temps parce que:

  • je les mets sur les bons rails dès le départ.
    Les stagiaires arrivent avec un bagage technique et donc des idées pré-conçues. Mon rôle est de leur inculquer la culture de cette technologie, ce qui leur évite d’utiliser des techniques familières mais inefficaces.
  • j’insiste sur ce qui est important.
    Il existe des principes incontournables (pour Cocoa Touch, c’est le MVC et la délégation) que les stagiaire doivent maîtriser. Ignorer ces principes génère des questions qui n’ont pas de raison d’exister.
  • le retour est immédiat.
    Il est normal de se tromper, cela fait partie intégrante de l’apprentissage. Seulement, il n’est pas rentable de rester bloqué sur un point de détail pendant des heures. Le formateur peut fournir rapidement un remède et proposer des alternatives techniques.
  • la formation est cohérente.
    Si les stagiaires sont là pour apprendre une technologie, il est important de faire un lien avec la méthodologie. Dans mes formations, nous cernons d’abord le problème et nous voyons comment implémenter une solution technique. Cet aspect est essentiel pour apporter de l’autonomie au stagiaire. Il s’agit du gros point faible des livres et autres supports, qui donnent des recettes, mais n’expliquent pas comment les imbriquer pour obtenir une application complète.
  • on sort du quotidien.
    Les stagiaires vont disposer d’une semaine rien qu’à eux, débarrassés du mode projet, et des requêtes des clients.

En conclusion

Vous aurez compris que pour moi, faire appel à un organisme de formation est plus avantageux dès lors que le temps est un critère important. Je vois trop de personnes sur les forums qui essaient de se former par eux-mêmes, dans des délais irréalistes, parce qu’on leur a demandé de programmer le prochain Instagram en deux mois !

Une formation fait gagner du temps sur le court terme, en rendant rapidement le salarié opérationnel, et sur le moyen terme, en assurant une certaine qualité du travail, qui n’aura pas trop besoin d’être repris par la suite.
Sur le long terme, une formation ne sera pas suffisante, et il sera de toute façon nécessaire de se documenter et de tester des points particuliers.

 

 

Categories
Non classé

Parallèle entre la conduite et le développement logiciel

Un développeur logiciel chevronné mais qui venait de se mettre au développement sous iOS me demandait —avec quelques craintes — si un débutant avec quelques mois d’expérience pourrait être plus doué que lui.

Avant d’apprendre à conduire une voiture, on pense que la difficulté réside dans la manipulation des commandes: comme il semble compliqué de tourner le volant tout en appuyant sur les pédales et en actionnant le commodo du clignotant ! Voilà qui exige beaucoup de coordination pour ne pas entrer en collision avec les autres véhicules.

Après quelques semaines de conduite, on sait que la difficulté se trouve ailleurs: il s’agit  essentiellement d’anticiper, de comprendre les intentions des autres usagers de la route et d’adapter ses gestes et sa vitesse pour éviter les obstacles et s’insérer dans le trafic.

Un conducteur aguerri qui changerait de type de véhicule — disons qui passerait de la voiture au scooter — serait bien évidemment déboussolé dans un premier temps, ne serait-ce que par l’équilibre, le placement des commandes, et les capacités d’accélération. Mais il s’y ferait rapidement, parce qu’il maîtrise les fondamentaux de la conduite.

Cela pour dire qu’un développeur expérimenté qui se mettrait au développement sous iOS serait désorienté au départ, peut-être par le langage Objective-C, le tactile, les multiples classes ou Xcode. Mais les fondamentaux sont déjà là: savoir gérer la complexité, trouver son chemin dans la documentation, avoir une méthodologie. Il peut s’attendre à être bon en deux ou trois mois.

Un débutant peut parvenir à créer une application et la publier sur l’App Store. Mais certainement pas une application seulement un peu complexe. Il lui manque trop de fondamentaux.

Categories
Non classé

Vidéo du Live Code iOS

BeMyApp a enfin mis en ligne la vidéo du Live Code du 26 juillet. La vidéo se trouve ici.

Categories
Non classé

Quelles versions du système d’exploitation cibler ?

En tant que développeurs, voici une question à laquelle nous sommes confrontés à chaque fois que nous lançons une nouvelle version d’une application: sous quelles versions du système d’exploitation devra-t-elle tourner ?

Accès aux dernières API

Lorsque j’ai lancé PortraiMatic pour Mac, le logiciel exigeait Mac OS 10.4, alors le tout récent système d’Apple. Sur les forums, des développeurs m’ont demandé pour quelle raison technique il ne tournait pas sous 10.3. Après tout, le logiciel était faisable sous 10.3. J’ai répondu par une autre question: “et pourquoi il ne tourne pas sous 10.2 ?”, puis “et pourquoi il ne tourne pas sous 10.1 ?”, et (quitte à être lourd jusqu’au bout) “et pourquoi il ne tourne pas sous 10.0 ?”. Inutile d’aller jusqu’au Système 7, vous avez saisi. Si j’ai tourné cette question en ridicule, c’est parce qu’elle sous-entend que c’est la faisabilité technique qui impose les versions d’OS ciblées. Or, PortraiMatic est sans doute faisable même sous Système 7. Dès lors, la question peut être mieux posée ainsi: “Quelles API utilisées n’existent que sous Mac OS 10.4 ?”. Cette question a une réponse: j’ai utilisé les CGLayers, qui permettent d’afficher rapidement des blocs graphiques. J’aurais bien pu trouver une alternative technique, comme utiliser OpenGL, mais j’avais là un outil facile et rapide à mettre en œuvre. J’ai donc sacrifié la compatibilité pour gagner du temps et simplifier mon code.

D’autres raisons de lâcher la compatibilité

Je n’ai pas de statistiques, mais je peux affirmer sans trop me tromper qu’il y a actuellement un bon pourcentage de Mac sous 10.6, la majorité sous 10.7, quelques-uns sous 10.8. Donc, pour toucher le maximum de clients, il faudrait qu’un logiciel soit compatible avec ces trois versions. Malgré cela, si je lançais une nouvelle application aujourd’hui, elle exigerait 10.8. Voici les raisons.

  • Être compatible n’est pas seulement se limiter aux API d’un OS, mais aussi tester entièrement l’application sous cet OS, et corriger les écarts. Mon expérience est que la compatibilité ascendante est rarement défaillante. Par contre il y a des différences graphiques pour lesquelles il faut compenser, par exemple en décalant un bouton de quelques points. C’est souvent moins beau, et c’est toujours du travail inutile.
  • Il faut nécessairement maintenir des ordinateurs sous toutes les versions de l’OS. D’abord pour tester, mais aussi reproduire les problèmes soulevés par les utilisateurs. Je commence à manquer de place dans mon bureau.
  • Apple ne nous simplifie pas la vie. Ainsi chaque nouvelle version de Xcode peut retirer un vieil SDK; il faut donc passer au SDK plus récent, mais on n’est plus averti de l’absence des méthodes dans le vieil SDK… Apple peut aussi retirer des cibles de compilation; par exemple, Xcode 4 ne peut pas compiler pour PowerPC, je suis obligé d’utiliser Xcode 3.2.5 sous 10.5 et de bidouiller.
  • Et comment fait Apple pour assurer la compatibilité ? Très simple: ils ne font pas ! Ils exigent souvent les dernières versions de Mac OS X pour leur logiciels.
  • Tous les utilisateurs ne se valent pas. Si on faisait des statistiques, on verrait que ceux sous 10.8 passent plus de temps dans le Mac App Store. Ceux qui sont restés sous 10.6 n’y vont probablement jamais. Or, les early adopters sont les plus à même de faire progresser un nouveau logiciel en dialoguant avec le développeur.
  • Pour finir, les statistiques évoluent: dans deux ans, on en sera peut-être à Mac OS 10.10, et 10.8 sera ringard.

Retour d’expérience sur PortraiMatic

Quand j’ai abandonné la compatibilité avec 10.4, je m’attendais à des remous. En fait non ! Peut-être un message ou deux pour me dire que c’était dommage, et même pas de la part de mes premier clients (qui eux avaient déjà changé d’OS).

PortraiMatic est encore compatible avec 10.5, avec grand mal. Toutes les semaines, je reçois un message de quelqu’un qui me demande s’il fonctionne sous 10.5, et je réponds que oui, mais qu’ils ne pourront pas l’acheter, parce qu’il n’est vendu que sur le Mac App Store, qui exige un OS 10.6. La compatibilité n’est assurée que pour les anciens utilisateurs puissent profiter des mises à jour. Mac OS 10.6 ne tourne pas sur un Mac PowerPC, alors mettre à jour l’OS est impossible sans changer d’ordinateur.

La prochaine mise-à-jour exigera Mac OS 10.6. Je n’ai pas le temps de tester sous 10.8, 10.7, 10.6 et 10.5. Il arrive un moment où il faut être réaliste et décider de comment utiliser au mieux les ressources de sa petite société. Rester compatible avec une minorité d’ordinateurs n’est pas un bon investissement de ces ressources.

Categories
Non classé

Live Code iOS: résumé de la soirée

Comme je vous l’avais indiqué, le jeudi 26 juillet avait lieu le premier Live Code iOS, au théâtre Auguste à Paris.

PhotoRenaudSeul

Avec BeMyApp, nous nous étions mis d’accord pour présenter un petit jeu, dont voici le principe:

PrincipeDuJeu

L’écran défile vers la gauche, la balle restant calée à gauche. Toucher l’écran la fait bondir; le but du jeu est de parcourir la plus longue distance en évitant qu’elle ne touche les pics.

Le syndrome du peintre qui refait sa toile

Lorsque j’ai annoncé l’événement, j’ai également expliqué que le programme était déjà codé. Mon objectif d’alors était de bien cerner le problème, d’anticiper les questions techniques, et surtout, de trouver les raccourcis pour que cela ne dure qu’une heure. Parmi les remarques qu’on m’a faites, l’une m’a paru particulièrement juste: “Alors, c’est un peu comme si un peintre avait déjà peint une toile et devait refaire exactement la même en public”. Nous avons donc pris la décision que ce ne serait pas moi qui coderais, mais des gens du public.

PhotoRenaudEtMichael

Je tiens à remercier les trois volontaires pour qui ce fut pour le moins stressant ! Ils se sont bien débrouillé et beaucoup impliqué. Il y eu un vrai moment de flottement, avec un problème difficile à résoudre, faisant intervenir des mathématiques et de l’algorithmique. À cet instant, je me suis demandé si nous y parviendrions, mais c’est le moment où le public fut le plus impliqué!

Finalement, cela a montré le vrai travail de programmeur: il y a parfois des obstacles, mais en s’accrochant on y arrive.

Pari tenu ?

Les objectifs étaient de coder en une heure un jeu jouable et intéressant. Je dois admettre que le pari ne fut techniquement pas tenu. Nous y avons passé 1h30, le jeu est trop facile parce que la balle peut être maintenue en l’air, et il faut relancer le jeu par Xcode en fin de partie.

PhotoFin

Si vous disposez de Xcode, vous pouvez essayer vous-mêmes: Le code source du jeu codé pendant l’événement. Le code source de celui que j’avais préparé.

En conclusion

Le but de ce genre d’événements est de créer un esprit communautaire et d’ouvrir l’esprit à de nouvelles techniques. De ce point de vue, ce fut une réussite, d’autant plus que j’ai eu de bons échos de cette soirée. Un deuxième Live Code sera sans doute organisé à la rentrée.