Java : résoudre la portée de break et continue dans des boucles imbriquées

Considérons ce bout de code :

// Première boucle
while (true) {
	// Deuxième boucle
	while (true) {
		break;
	}
}


Ici, le break interrompera la 2ème boucle. En effet, continue et break s’appliquent sur la boucle “immédiatement au dessus”.

Comment faire si on veut modifier la portée de break pour qu’il agisse sur la première boucle ?

La solution réside dans la pose d’étiquettes à la déclaration des boucles :

// Première boucle
first: while (true) {
	// Deuxième boucle
	second: while (true) {
		break first;
	}
}

Shopizz : l’idée

Qu’est-ce que Shopizz ?

Shopizz est une solution gratuite et innovante de gestion de listes de courses.

Ce que Shopizz fait :

  • Vous assister pendant la création de vos listes de courses
  • Vous aider à faire vos courses
  • Répartir vos articles entre différents magasins
  • Vous proposer des promotions, bons plans pour optimiser vos courses
  • Partager vos listes de courses avec vos amis
  • Faire vos courses à plusieurs dans des magasins différents sur la même liste
  • Reporter les produits non trouvés dans d’autres listes
  • Vous proposer des statistiques sur vos achats

Ce que Shopizz ne fait pas :

  • Gérer vos tâches personnelles
  • Vous proposer des fonctionnalités payantes

À son lancement, Shopizz sera disponible sur internet et sur smartphones Android. À terme, la solution sera étendue à un maximum de plateformes. L’application mobile sera centrée sur la réalisation des courses tandis que l’application web aura pour vocation d’accompagner l’utilisateur dans l’édition de ses listes de courses.

Qu’est-ce que Shopizz a de plus que les autres?

Si vous avez déjà cherché une solution de gestion de listes vous vous êtes sans doute rendu compte qu’elles sont légion. Il en existe de très bonnes — et reconnues comme telles — comme Remember The Milk, Ta-da lists, … ainsi que des spécialisées dans les listes de courses mais bien que là aussi elles soient quelquefois très bien réalisées, aucune n’exploite réellement leur potentiel — ou se perdent en chemin. Mais ces applications en font soit trop soit pas assez. Certaines en font trop en proposant de scanner le code-barre des articles, de les prendre en photo, d’enregistrer leur prix,… c’est très amusant mais au final l’utilisateur perd son temps et l’application ne remplit plus sa mission d’origine, se perdant en fioritures. À contrario, je pense qu’il faut être complet dans la gestion des listes de courses, rien de plus. L’utilisateur doit pouvoir éditer ses listes depuis son PC au travail, dans son canapé avec sa tablette et dans les transports en utilisant son smartphone.

Dans le prochain article je parlerais des différentes étapes de la création du projet puis j’exposerais le business model sur lequel repose Shopizz — ok, c’est la dixième fois que j’écris “Shopizz” (véridic) je vais essayer de me calmer.

Shopizz = Shopping + Easy

Voilà qu’une idée se manifeste — elles sont incontrôlables! — il y a quelques mois et que j’y songe de plus en plus. Tellement que je me persuade de me lancer tout entier dedans. Ce projet je viens à l’instant de lui trouver un nom : Shopizz (au début je lui donnait deux ‘p’ mais je ne vais pas non plus doubler toutes les consonnes!).

Pour faire rapide (l’article suivant se chargera des détails), ce projet se décompose essentiellement en une application pour smartphone (pour commencer Android) et un site web dynamique. L’idée est d’avoir des listes de courses intelligentes accessible via son smartphone au magasin. L’utilisateur pourra alors répartir ses achats entre plusieurs enseignes — par exemple, il retrouvera dans la liste de courses d’une grande enseigne ce qu’il n’a pas trouvé chez le hard-discounter, de manière assistée —, les articles seront automatiquement répartis en plusieurs catégories, des statistiques pourront être consultées, des articles sponsorisés seront mis en avant, … Bref, on peut tout imaginer !

J’ai recherché des applications mobiles de ce genre — très peu d’ailleurs ne font que des listes de courses — mais aucune ne va aussi loin que ça. Certaines proposent quelques fonctionnalités intéressantes mais il n’existe pas à ma connaissance de projet couvrant plusieurs smartphones synchronisés via un site web (il y a bien Remember The Milk entre autres mais ce n’est pas spécifique aux listes de courses). D’ailleurs, pourquoi un site web ? Les applications mobiles ne suffisent pas? Eh bien non, je ne pense pas. L’intérêt est de préparer sa liste de courses en utilisant une interface jolie, agréable et où les manipulations sur les articles et les listes sont faciles à effectuer.

Bref, ce projet n’est pour l’instant qu’une idée mais ça avance…

Dans le cadre du cours libre “Monter son business plan” du cinquième semestre de licence auquel je suis inscrit, je doit présenter un business plan lors du dernier TD (la semaine prochaine). J’ai évidemment choisi de le faire sur ce projet. Ça va me permettre dans un premier temps de réellement creuser l’idée, le projet, le business model possible mais aussi d’avoir un avis extérieur dessus.

Le prochain article présentera l’idée dans son intégralité.

C’est la vie…

Un court article pour présenter mon délire mental du soir : un petit jeu de la vie en Javascript. Pour le départ j’ai pris le fameux “U” (à l’envers) qui mène à la tête de clown (l’animation s’arrête à l’itération 110 pour admirer le chef d’oeuvre).

Cliquez sur le cadre pour démarrer ou mettre en pause l’animation.

Vous pouvez télécharger ici la librairie utilisée et ici l’implémentation du jeu de la vie (v2).

L’avenir c’est quoi ?

Qui sait dans quelle direction l’informatique ira d’ici 15 ans ? Il y a 30 ans, l’informatique a connu un essor incroyable, une évolution d’une rapidité exponentielle. Ce constat nous confronte à la même situation que l’aérospatiale dans les années 70.

Je m’explique; si vous demandiez à un occidental à cette époque comment il voyait l’an 2000, il vous aurait dit que des villes existeraient sur la lune, que l’homme aurait colonisé son système solaire ou toute autre histoire digne d’un roman de science fiction — 2001 l’odyssée de l’espace d’Arthur C. Clarke en est une illustration parfaite. Pour en revenir à l’informatique, le matériel a tellement évolué entre 1970 et 1980 qu’on pouvait s’attendre à se faire servir son petit déjeuner par son cook-cyborg acheté au supermarché du coin dès 1990 ! Personne n’avait pensé qu’après avoir miniaturisé tous les composants de nos ordinateurs et poussé le matériel jusqu’à ses limites il ne nous resterait plus que le logiciel !

Le matériel n’évolue plus depuis facilement 5 ans pour le “grand public”. La course au MHz (puis au GHz) est terminée. Désormais on multiplie les coeurs, augmente la cache et grave plus finement. Autant dire qu’on nous vend du vent — c’est beau non ? AMD qui avait déstabilisé Intel il y a quelques années avec notamment l’Athlon est maintenant à l’agonie. Résultat : Intel est le seul sur le marché et distille au compte goutte des pseudo-innovations.

Bref, tout ça pour dire que le matériel n’évolue plus, c’est désormais acquis. Par contre, il change de forme. On arrive aujourd’hui à faire fonctionner des processeurs de téléphones portables à 1Ghz (n’oubliez jamais votre chargeur en déplacement) ! On peut donc légitimement se demander si les terminaux mobiles ne seraient pas “l’avenir” de l’informatique. C’est un secteur où il y a une vraie concurrence (pour le moment) de la part des constructeurs et des assembleurs. Les OS sont eux aussi en constante évolution, iOS et Android sont clairement les leaders de cette bataille mais ils ne sont pas les seuls. Samsung, qui continue a utiliser Android sur la plupart de ses mobiles a lancé Bada, un OS en C++ (qui me laisse très perplexe personnellement), Microsoft est revenu dans la course avec Windows Phone 7 (sans commentaires compte tenu de l’échec qu’a toujours connu Microsoft sur mobile), etc…

Outre les mobiles, l’arrivée de la table Surface de Microsoft avait été remarquée il y a 3 ans mais je crois que les utilisateurs de celle-ci peuvent se compter sur les doigts de ma main gauche. — Ayant consulté il y a quelques secondes l’article wikipédia correspondant à cette table, je suis resté sans voix lorque j’ai lu cette phrase dans la section “Solutions alternatives”, je vous en partage donc les bienfaits humoristiques : “Une solution entièrement gratuite est proposée sous Linux avec Multi-Pointer X, et une solution multiplateforme nommé Festival est en cours de développement. Il suffit alors de créer soi-même un écran, à l’aide d’un verre Plexiglas, d’un rétroprojecteur, d’une Webcam et d’un grand Calque.”.

Enfin, les tablettes — c’est un peu comme si une table Surface avait eu un enfant illégitime avec un smartphone — telles que l’iPad ou les produits du français Archos sont des produits très intéressants. Ils sont complètement inutiles puisque trop grand pour être utilisés dans la rue (pas tout à fait vrai pour Archos puisqu’ils proposent plusieurs modèles) et trop petit pour être utilisés chez soi — c’est un peu vrai non ? — mais ont un succès incroyable. On pourrait donc voir en guise de prochaine étape des ordinateurs portables entièrement tactiles et ultra légers. Je connais d’ailleurs des partisans de l’ordinateur ou du clavier “tactiles” ou encore mieux, d’un deuxième écran tactile qui remplacerait complètement la surface “clavier + touchpad”. Notre ami à la pomme, M. Jobs, a donné son point de vue sur le sujet lors de la dernière keynote d’Apple alors qu’il présentait quelques fonctions de son prochain OS : “Cela fait de très jolies démos, mais dans la pratique, les écrans tactiles verticaux ne sont pas ergonomiques”.

Bon, je ne sais toujours pas vers où il faut regarder pour savoir dans quelle direction l’informatique ira dans les prochaines années mais j’ai toutefois appris quelque chose : Apple peut vendre des millions d’iPad qui ne servent à rien mais elle ne peut rien contre la loi de la gravité !

Désolé mais le tout linux c’est pas pour demain

Je ne comprendrais jamais ceux que j’appelle les “linuxiens extrêmes”, qui rejettent en bloc tout ce qui n’est pas libre. Il faudrait leur dire que le libre n’est pas tout. Qui attend aujourd’hui des innovations d’une distribution Linux libre ?

Etant en école d’ingénieur, j’ai la chance de disposer d’un ordinateur portable que l’on me prête tout au long de mon cursus. Il est fourni avec deux systèmes d’exploitations préinstallés : Ubuntu et Windows. Ce choix est, à prioris, totalement justifié  : Ubuntu est la distributions Linux la plus utilisée dans l’enseignement en France (de par sa facilité d’utilisation c’est certainement le moyen le plus facile de s’introduire à Linux) et Windows est le système d’exploitation — ça n’a échappé à personne — le plus utilisé à travers le monde puisqu’il est présent sur plus de 90% de nos ordinateurs.

Croyez le ou non mais 30% des étudiants suppriment purement et simplement la partition Windows (croisant les doigts pour que les programmes Windows qu’il faudra utiliser durant l’année tourneront sous Wine), certains allant même jusqu’à installer des versions de Linux 100% libres (pas de Flash, pas de décodeur MP3, …).

Je suis tout à fait conscient des problèmes que pose la vente liée d’une licence Windows avec la plupart des ordinateurs neufs, le débat ne se situe pas là. Le fait est que la majorité des entreprises utilisent les technologies propriétaires Microsoft et donc qu’elles en paient les licences au prix fort. Peut-on réellement croire que si ces entreprises ne s’y retrouvaient pas au final elles continueraient bêtement à dépenser des dizaines de milliers d’euros en licences ?

Oui, Microsoft a introduit ses systèmes d’exploitation de manière “abusive” dans nos ordinateurs mais que pouvons nous faire ? On peut soit rejeter en bloc M$ — comme on le lis souvent sur les forums — soit s’adapter, faire des choix rationnels. Je suis le premier à préférer développer sous une distribution Linux avec des langages et frameworks libres et gratuits mais le fait est que lorsqu’un particulier ou une TPE commande un “petit” programme sous Windows on a intérêt à le développer en utilisant une technologie Microsoft comme Visual Basic plutôt que de partir de rien en C++ / framework graphique.

Finalement, ce que ces linuxiens extrêmes ne comprennent pas c’est tout simplement le métier d’ingénieur. L’ingénieur est celui qui doit — entre autre — utiliser la bonne technologie pour le bon projet. En entreprise, celui qui se refusera à utiliser des technologies Windows là où il le devrait ne le fera pas deux fois. Qu’il soit employé — puisqu’on le remerciera — ou son propre patron — puisqu’il perdra de l’argent.

Finalement, le libre est devenu bien plus dangereux que le mal qu’il est censé combattre. On se retrouve avec une configuration de “mal” contre le “bien” où les choix effectués ne sont plus rationnels mais en fonction des convictions.

Ce que je peux dire pour conclure c’est qu’il est évident que ces Linuxiens vont tout droit dans le mur que leur impose leur doctrine, mais le bon côté des choses c’est qu’ils y vont ensemble …

Mon premier widget pour Dashboard (Mac OSX)

Le 27 mai 2010 mon tout premier Mac arrivait à la maison … quel moment :-D !

Une des choses qui me fascinait sous Mac OS c’était la facilité incroyable avec laquelle un développeur web banal — sans aucune connaissance poussée particulière — qui connait les bases de JavaScript peut concevoir un widget pour Dashboard.

En effet, je me suis souvent intéressé à ces widgets — ou gadgets en version francisée — dans le temps où j’étais un “linuxien” — ou encore “Mac user qui s’ignore”.  J’utilisais une distribution OpenSUSE dotée d’un bureau KDE 4 qui utilise un système d’interface utilisateur nommé Plasma. Cette interface gère des widgets — alias Plasmoïdes — directement sur le bureau KDE qui sont d’ailleurs assez bien pensés de base, même si les finitions sont quelques fois oubliées.

Quoi qu’il en soit, j’étais ravi de pouvoir créer mes propres widgets jusqu’à ce que je me rende compte de l’ampleur de la tâche…

Pour développer un simple widget sous KDE, il vous faut maîtriser C++ ou Python, le framework graphique Qt ainsi bien entendu que le framework de Plasma. Après quelques minutes de tâtonnement, j’ai considéré que le rapport travail / résultat était incroyablement démotivant !

Cette frustration de côté, j’ai repris une vie normale jusqu’au jour où j’ai vu mon ami Nima bidouiller un widget du nom de “StickyNote” sur son Mac. Je m’étais émerveillé de la simplicité du code pour un tel résultat !

Et donc pour en revenir au début, lorsque j’ai reçu mon Mac, je me suis empressé de me lancer :-) !

Il me fallait une idée … et elle n’a pas tardée à me venir !

Quelques heures de bus plus tard :

Ce widget vous affiche de manière agréable — du moins je l’espère — le temps restant de charge / décharge de votre batterie.

Vous pouvez le télécharger ici pour ceux qui ont un Mac !

Dites moi ce que vous en pensez, n’hésitez pas à me critiquer !