FruityFred
  • Facebook
  • Flickr
  • Linkedin
  • Twitter
  • Rss
Restez en contact :)
  • Blog
  • Course à pied
  • Randonnées
  • Recettes
    • Entrées
    • Desserts
    • Plats
  • À propos
    • CV
    • Contact
Rechercher…
Accueil» 2009 » mars

MacHeist : pack de logiciels à prix (très) réduit

Rédigé par FruityFred - 26 mars 2009 - Annonces, Logiciels, Mac
1

MacHeist frappe encore une fois de plus très fort avec son nouveau pack de logiciels (pour Mac) à prix réduit, dont 25% des ventes seront reversés à des associations caritatives. Pour environ 29 € (39$) vous pourrez acquérir pour plus de 450 € de logiciels ! Tous ne vous seront peut-être pas utiles, mais le prix du pack étant inférieur au prix des logiciels vendus séparément, ça peut valoir le coup ! Étant intéressé par Kinemac, SousChef et Espresso, j’en ai fait l’acquisition hier. Et au passage, World of Goo est assez rigolo :-) Je vous laisse découvrir ce pack chez MacHeist.

bundle, MacHeist, promotion

Réalité augmentée

Rédigé par FruityFred - 9 mars 2009 - Amusement
5

Expérience de réalite augmentéeJe viens de vivre une expérience très intéressante (mais non moins troublante), grâce à presse-citron.net (merci Éric) : une expérience de réalité augmentée. C’est une expérience interactive qui procure une incroyable impression d’immersion dans une scène virtuelle en 3D. Tout ce dont vous avez besoin est une feuille de papier A4, une imprimante, une webcam correctement configurée et une version de Flash à jour.

Assez parlé, je vous laisse maintenent vivre cette expérience, développée par General Electric.

expérience, réalité augmentée

Une liste déroulante qui se souvient et qui propose

Rédigé par FruityFred - 6 mars 2009 - Cocoa, Développement, Tutoriels
2

Le but de cet article est de nous familiariser avec le widget NSComboBox. Il existe deux manières de peupler une liste déroulante : à la main dans Interface Builder, ou via l’utilisation d’une source de données. Nous allons ici nous intéresser à la seconde : l’utilisation d’une datasource.

Cet article parle de notions présentées dans ce tutoriel pour Xcode et Interface Builder. N’hésitez pas à aller vous rafraîchir la mémoire !

Dans Interface Builder, ajoutons une Combo Box dans notre vue puis, dans le premier onglet de l’inspecteur, cochons… tiens, il est marrant ce verbe conjugué au présent à la première personne du pluriel ! Hum. Cochons, donc, la case Uses Data Source.

La datasource est un objet de votre choix qui contient les données à afficher dans la liste déroulante. Cet objet retrouve et stocke les données sous la forme qu’il souhaite. Généralement, on a souvent affaire à un NSArray qui pourrait être lu depuis un fichier plist… ou depuis les User Defaults. Bref, la seule contrainte est que cet objet doit implémenter le protocole informel NSComboBoxDataSource :

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)combo;
- (id)comboBox:(NSComboBox *)combo objectValueForItemAtIndex:(NSInteger)index

La première méthode doit retourner le nombre d’éléments qui devront être présents dans la liste déroulante. La seconde retourne l’objet pour un index donné (le message description sera envoyé à cet objet pour l’affichage dans la liste déroulante). Remarquez que ces méthodes acceptent toutes les deux une NSComboBox en argument. Ceci permet de n’utiliser qu’une seule classe pour gérer plusieurs sources de données : en fonction de l’objet combo passé en argument, il est facile de déterminer les données à utiliser.

Dans notre exemple, considérons que l’objet datasource est notre contrôleur principal, déclaré dans Interface Builder. On peut donc utiliser sa méthode awakeFromNib pour initialiser ce qu’on veut. Ici, on va récupérer des données stockées dans les User Defaults :

- (void) loadDataSource {
   // On récupère une instance des User Defaults
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   // On lit les valeurs avec la clé qu'on a choisit (ici : ComboBoxValues)
   // dataSource est un NSArray déclaré dans le fichier header de cette classe
   dataSource = [[defaults arrayForKey:@"ComboBoxValues"]
                           sortedArrayUsingSelector:@selector(compare:)];
   // Au passage, on trie les éléments par ordre alphabétique :-)
}
 
-(void)awakeFromNib {
   // On charge nos données depuis les "préférences" de l'utilisateur
   [self loadDataSource];
}

Ensuite, nous allons implémenter les deux fameuses méthodes du protocole NSComboBoxDataSource qui sont, comme vous le constatez, très complexes :

- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
    return [dataSource count];
}
 
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index {
    return [dataSource objectAtIndex:index];
}

Il nous reste à indiquer à notre NSCombBox la datasource à utiliser. Allons dans Interface Builder, sélectionnons la liste déroulante, activons l’onglet Connections de l’inspecteur puis relions l’entrée dataSource à notre contrôleur.

Très bien, mais il faut encore ajouter les données saisies dans les User Defaults, sinon l’entrée ComboBoxValues (voir la méthode loadDataSource) sera toujours un tableau vide… Et on aurait fait tout ça pour rien ! Il faut d’abord obtenir une instance de notre liste déroulante dans notre contrôleur via l’utilisation des IBOutlet (plus d’informations ici). Ensuite, il faut déterminer le moment où vous l’on souhaite que la valeur soit sauvegardée : lorsque que l’utilisateur termine la saisie dans la liste déroulante ou bien lors d’une autre action (sauvegarde des différents champs d’un formulaire, par exemple). Dans les deux cas, il faut déclarer une IBAction quelque part (plus d’informations ici). Dans cette action, il nous faut ajouter un morceau de code qui ressemble à ceci :

// Récupération de la valeur saisie dans la NSComboBox
// comboBox est un IBOutlet déclaré dans le fichier header (voir plus bas)
NSString *newValue = [comboBox stringValue];
// On vérifie si la valeur n'est pas déjà présente, auquel cas il n'y a
// rien à faire.
if ( [taskNameDataSource containsObject: newValue] == NO ) {
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   // On va ajouter un élément à notre dataSource :
   // pour cela, il nous faut un NSMutableArray (NSArray étant en lecture seule)
   NSMutableArray *mutableDS = [NSMutableArray arrayWithArray: dataSource];
   // On ajoute la nouvelle valeur
   [mutableDS addObject: newValue];
   // On stocke le tout dans les User Defaults
   [defaults setValue: mutableDS forKey: @"ComboBoxValues"];
   // Et on met à jour la liste déroulante pour qu'elle prenne la nouvelle
   // valeur en compte (il y a peut-être mieux à faire ici).
   [self loadDataSource];
}

Enfin, voici un exemple de fichier header pour notre contrôleur principal :

@interface AppController : NSObject {
	IBOutlet NSComboBox* comboBox;
	NSArray *dataSource;
}
 
// Méthodes de gestion de la datasource pour la NSComboBox
- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index;

Une dernière chose : il est possible de voir les préférences d’une application depuis le Terminal, grâce à la commande suivante :


defaults read identifiant.de.votre.application

L’identifiant de votre application doit être unique et on le définit dans Xcode, dans les informations de la target : dans l’arborescence de Xcode, dans la section Targets, faites un clic droit sur votre target puis Get Info et enfin onglet Properties ; le champ à renseigner est… Tah daaah : Identifier. Utilisez un nom comme les packages Java : com.entreprise.application. Attention : les defaults sont généralement synchronisés et enregistrés sur le disque à la fermeture de l’application (ou avant, mais on ne sait pas quand) : il est donc possible de ne pas les voir tout de suite à jour dans le Terminal.

auto-complétion, datasource, liste déroulante, NSComboBox, User Defaults

Savoir si une application est lancée ou pas

Rédigé par FruityFred - 6 mars 2009 - Cocoa, Développement, Tutoriels
1

Pour savoir si une application est lancée ou pas, on peut utiliser les services fournis par la classe NSWorkspace, et notamment sa méthode launchedApplications :

- (BOOL) isAppLaunched: (NSString *) appIdentifier {
   NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications];
   for (NSDictionary *appInfo in apps) {
      NSString *appId = [appInfo objectForKey: @"NSApplicationBundleIdentifier"];
      if ([appId isEqualTo: appIdentifier]) {
         return YES;
      }
   }
   return NO;
}
 
if ( [self isAppLaunched: @"com.apple.iCal"] ) {
   NSLog(@"iCal est lancé !");
}
NSWorkspace

Petite manipulation amusante

Rédigé par FruityFred - 4 mars 2009 - Amusement
5

Ce n’est pas dans mes habitudes de vous faire part de ce genre de moqueries, mais quand même, je dois bien avouer que ça m’a bien fait rire. Inutile de venir me dire que Microsoft c’est bien, qu’ils font de belles choses : cet article n’est pas pour les pro-Microsoft. Et puis, je ne vous croirais pas, de toutes façons. Voilà, c’est dit.

  1. Allez sur le site de Microsoft France et observez rapidement la charte graphique. Passez par microsoft.fr, car par le .com, c’est très difficile d’arriver sur le site français (apparemment, la géolocalisation ou la détection de la langue du navigateur ne marche pas chez eux).
  2. Après avoir fermé les quelques fenêtres intrusives vous obligeant demandant d’installer SilverLight (le Flash à la sauce Microsoft), dans la section À propos du menu principal, cliquez sur Microsoft en France puis observez le changement radical de charte graphique qui, soit dit en passant, me semble bâclée (mais ce n’est que mon avis).
  3. Pour les développeurs qui n’ont pas d’antécédents cardiaques et qui connaissent un peu le HTML et les feuilles de styles CSS, jetez un œil au code source de cette page : on y va à coup de balises br (non fermées), d’attributs border, height, … histoire d’être sûr que ça passe sur les différentes versions de notre très cher Internet Explorer. Il y a pourtant bien une feuille de styles déclarée dans la page, celle-ci, mais bon, hein, ça ne vole pas bien haut. L’outil de validation du W3C indique 49 erreurs pour cette page déclarée en HTML 4.01 transitionnel (ce qui explique finalement les balises br non fermées)… Ç’aurait pu être pire, me direz-vous.
  4. Bref, revenons à nos boutons moutons. Attardons-nous sur le bas de page. Passez votre souris sur le lien Nous contacter et observez l’URL qui semble pertinente (elle contient en effet le mot contact). Si vous suiviez ce lien (mais ne le faites pas), vous vous rendriez compte qu’on change encore une fois de charte graphique… Positionnez votre souris sur le dernier lien, A propos de ce site, et observez l’URL : on a un mélange de français et d’anglais et on retrouve la notion de contact… Cliquez maintenant sur ce lien et observez une nouvelle fois un changement, encore plus radical, de la charte graphique puisqu’on passe maintenant dans les tons gris. Mais le meilleur est à venir, the best is yet to come, comme on dit de l’autre côté de la Manche.
  5. Observez alors ce menu très travaillé en haut de la page et demandez-vous si vous êtes venus là pour consulter votre horoscope… Non ? Ah, dommage, le lien fonctionne… à condition d’avoir bien compris les messages d’avertissements précédents : on vous l’avait demandé, d’installer SilverLight ! Ça y est : on lui a trouvé une utilité à ce machin ! Bon… lisez votre horoscope si vous le souhaitez (et si vous le pouvez…) puis revenez en arrière, s’il vous plaît, car ce n’est pas tout à fait fini.
  6. Donc, passez votre souris sur l’entrée de menu intitulée Plan du site et, tout en faisant preuve d’une extrême habileté, faites glisser votre souris afin de positionner le pointeur sur le lien intitulé Page d’erreur à gauche dans la barre grise juste en dessous. Hé oui, ça ne s’invente pas. Cliquez dessus : le lien remplit parfaitement sa fonction et vous amène sur une page d’erreur.
  7. Au passage, appréciez la mise en page, avec cette magnifique image volontairement séparée en deux parties (peut-être pas sur IE…), et dites-vous que vous êtes sur le site officiel, le site vitrine, de cet éditeur de logiciels.

Microsoft atteint ici une fois de plus le paroxysme du bâclage. L’avantage d’un site web, c’est qu’on peut voir le code source des pages HTML et ainsi en vérifier la qualité. Certes, le HTML est probablement auto-généré par un outil aussi merveilleux qu’ASP.NET, mais ça n’excuse pas tout. Imaginez le code source de leurs produits qui, lui, est invisible aux yeux de tous…

Qu’on se le dise : je n’aime pas les critiques qui ne servent à rien et croyez bien que ça m’a fait mal de mettre des liens vers le site du plus grand éditeur de logiciels au monde. Et je ne dis pas que je peux faire mieux, mais je le pense très sincèrement. Oui, ça arrive à tout le monde, les erreurs, je sais. Elles sont juste parfois trop fréquentes chez certains. Je sais, c’est facile de se moquer de Microsoft. Ouais, très facile… trop facile ! Désolé, je n’ai pas pu m’en empêcher.

PS : pour ceux qui n’osent pas faire cette manipulation, voici des captures d’écrans.

Microsoft, site web pourri

Thématiques

  • Amusement
  • Annonces
  • Coup de gueule
  • Course à pied
  • Demandes
  • Design
  • Développement
    • Cocoa
    • Tutoriels
  • Événements
  • Évolutions du site
  • Excursions
  • iPhone
  • Logiciels
  • Mac
  • Pratique
  • Recettes
    • Desserts
    • Entrées
    • Plats
  • Visites

Nuage de tags

Alsace Apple avis cascade chaussures château Cocoa concert Corse course à pieds crumble cuisine du monde forêt fruit GPS HDR Interface Builder iOS iPhone Islande jeu lac Laiterie légumes Mac Mac OS X minimalisme neige OpenGL Paris plage randonnée rock Strasbourg thème graphique TomTom trail vallée volcan wok WordPress Xcode Écologie Écosse île

Amis

  • /teles
  • A.D.A.N.
  • Bloc-notes de Darathor
  • Blog de Florian
  • Blog de Jeff
  • Blog'ele
  • Graine de kawa
  • Joël et Ophélie
  • NikoHK
  • R2G2
  • WebLife

Méta

  • Connexion
  • Flux RSS des articles
  • RSS des commentaires
  • WordPress.org

Articles récents

  • Récit de mon premier trail : la MAC 6 (25 km, 700 m D+)

    14 avril 2013
  • Tour du Lac de Pierre-Percée

    7 avril 2013
  • Maximalisme

    3 avril 2013
  • Semi-marathon de Paris 2013

    5 mars 2013
  • Vanessa

    27 janvier 2013
  • Fred, le minimalisme, t’en es où ?

    24 janvier 2013

    Derniers commentaires

    • Avatar UtilisateurFruityFred { @ philrunner De rien ! Et bonne route à toi aussi avec tes Skechers ! N'hésite pas à revenir nous dire ce que tu en... } – mai 22, 10:59
    • Avatar Utilisateurphilrunner { merci pour tes commentaires collègue.. je me suis payé une paire de shetchers chez go sport, car je suis intéressé par ce retour aux sources!... } – mai 18, 10:42
    • Avatar UtilisateurFruityFred { Bonjour, Malheureusement, j'avoue ne pas en savoir davantage sur d'éventuels blocages dans certains pays. Et je ne l'ai jamais essayé en dehors de la France...... } – mai 06, 8:09
    • Avatar UtilisateurAudrey Duval { Bonjour, Je suis en Écosse actuellement et la communication Ecosse-France me reviendrait cher ! ayant accès à une connexion wifi, je pensais pouvoir utiliser VIBER... } – mai 06, 12:41
    • Avatar UtilisateurFruityFred { Merci, Izhonu ! J'ai terminé après toi, mais je n'ai vraiment pas souffert : je supporte bien la chaleur et j'étais comme un petit fou... } – avr 16, 11:33
    © FruityFred 2013. Avant de copier une partie de ce site, demandez-moi :)