How-To

[Rétrospective] Hibernate / SQL : Dans lequel nous optimisons les opérations de recherche

Préambule : Ce billet fait partie d'une rétrospective listant les billets que j'ai produit ou co-produit sur le blog ekito people

Dans le cadre d’un projet basé sur des technos Play Framwork + Spring + Hibernate, j’ai eu le besoin de faire des recherches en base de données avec les contraintes suivantes :

  • Les informations à afficher doivent être formatées différement des objets métiers
  • Les objets métiers sont répartis sur plusieurs entités inter-dépendantes

Lire la suite : [Hibernate / SQL] Dans lequel nous optimisons les opérations de recherche

 

How-To iOS : Changer la couleur du segment sélectionné d'un UISegmentedControl

English Français

Le contexte

Un des usages de l'objet UISegmentedControl peut être celui d'une barre d'onglet pour naviguer entre des vues, ou bien celui d'un sélecteur entre différentes valeur. Dans le cas d'un UISegmentedControl utilisant le style UISegmentedControlStyleBar, le segment sélectionné est juste plus sombre que les segments non sélectionnés. Selon le choix de couleur du contrôle, cette distinction peut être assez difficile à faire (exemple ci-dessous).

Standard behavior for UISegmentedControl

Le but de ce billet est de montrer qu'avec un peu de code, il est tout à fait possible d'obtenir un comportement autre, avec une couleur pour le segment sélectionné tout à fait différente de celle des autres segments (exemple ci-dessous).

Better behavior for UISegmentedControl

Le code

Tout d'abord, vous trouverez en fin de ce billet une archive zip avec un projet XCode contenant le code utilisé pour ce billet. Pour la suite, il faudra tenir compte des éléments suivants :

  • L'objet UISegmentedControl doit être du style UISegmentedControlStyleBar (obligatoire).
  • Un selecteur sur « Value Changed » pointe sur la méthode « -(IBAction)selectSegment:(id)sender » (à adapter selon vos besoins).

Il faut ajouter à la classe dans laquelle vous manipulez l'objet UISegmentedControl une fonction permettant de trier des UIView en fonction de leur coordonnées horizontales :

NSInteger static compareViewsByOrigin(id sp1, id sp2, void *context)
{
    // UISegmentedControl segments use UISegment objects (private API). But we can safely cast them to UIView objects.
    float v1 = ((UIView *)sp1).frame.origin.x;
    float v2 = ((UIView *)sp2).frame.origin.x;
    if (v1 < v2)
        return NSOrderedAscending;
    else if (v1 > v2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}

Puis, dans la méthode « -(IBAction)selectSegment:(id)sender », ajoutez simplement le code suivant :

// Get number of segments
    int numSegments = [betterSegmentedControl.subviews count];
 
    // Reset segment's color (non selected color)
    for( int i = 0; i < numSegments; i++ ) {
        // reset color
        [[betterSegmentedControl.subviews objectAtIndex:i] setTintColor:nil];
        [[betterSegmentedControl.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:200/255.0 green:200/255.0 blue:200/255.0 alpha:1]];
    }
 
    // Sort segments from left to right
    NSArray *sortedViews = [betterSegmentedControl.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];
 
    // Change color of selected segment
    [[sortedViews objectAtIndex:betterSegmentedControl.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:255/255.0 green:0/255.0 blue:0/255.0 alpha:1]];
 
    // Remove all original segments from the control
    for (id view in betterSegmentedControl.subviews) {
        [view removeFromSuperview];
    }
 
    // Append sorted and colored segments to the control
    for (id view in sortedViews) {
        [betterSegmentedControl addSubview:view];
    }

 

iOS How-To : Change color of the selected segment of a UISegmentedControl

English Français

The context

Object UISegmentedControl may be used to act as a tab bar in order to navigate between views, or to act a selector between many choices. In the case of a UISegmentedControl with UISegmentedControlStyleBar style, the selected segment is only darker than the unselected ones. Depending on the control's tint color, the distinction may be difficult to see (example below).

Standard behavior for UISegmentedControl

The goal of this post is to show that with a few code, it's possible to obtain an other behavior, with a selected segment differently colored than the others (example below)

Better behavior for UISegmentedControl

The code

First of all, you'll find at the end of this post a zip archive containing an XCode project with the code used for this post. From now until the end of this post, you'll have to keep the following elements in mind:

  • UISegmentedControl object must use UISegmentedControlStyleBar style (mandatory).
  • A selector on “Value Changed” points on the method “-(IBAction)selectSegment:(id)sender” (adapt to fit your needs).

You have to append to the class where you use UISegmentedControl object a function which sorts UIView by their horizontal coordinates:

NSInteger static compareViewsByOrigin(id sp1, id sp2, void *context)
{
    // UISegmentedControl segments use UISegment objects (private API). But we can safely cast them to UIView objects.
    float v1 = ((UIView *)sp1).frame.origin.x;
    float v2 = ((UIView *)sp2).frame.origin.x;
    if (v1 < v2)
        return NSOrderedAscending;
    else if (v1 > v2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}

Then, append to “-(IBAction)selectSegment:(id)sender” method the following code:

// Get number of segments
    int numSegments = [betterSegmentedControl.subviews count];
 
    // Reset segment's color (non selected color)
    for( int i = 0; i < numSegments; i++ ) {
        // reset color
        [[betterSegmentedControl.subviews objectAtIndex:i] setTintColor:nil];
        [[betterSegmentedControl.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:200/255.0 green:200/255.0 blue:200/255.0 alpha:1]];
    }
 
    // Sort segments from left to right
    NSArray *sortedViews = [betterSegmentedControl.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];
 
    // Change color of selected segment
    [[sortedViews objectAtIndex:betterSegmentedControl.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:255/255.0 green:0/255.0 blue:0/255.0 alpha:1]];
 
    // Remove all original segments from the control
    for (id view in betterSegmentedControl.subviews) {
        [view removeFromSuperview];
    }
 
    // Append sorted and colored segments to the control
    for (id view in sortedViews) {
        [betterSegmentedControl addSubview:view];
    }

And that's all !

 

How-To iOS : Utilisation de Core Data avec iCloud

English Français

Disclaimer

Core Data avec iCloud ne semble pas vraiment mûr. Cet How-To devrait fonctionner, mais vous pourriez rencontrer quelques bizarreries (principalement des erreurs de synchronisation, ou des corruptions du journal de transactions). Vous pouvez jeter un œil au thread suivant (compte iOS Developer obligatoire) pour plus d'information. En attendant, je ne recommande pas d'utiliser cette fonctionnalité dans un environnement de production.

Fin du disclaimer

Une des nouveautés d'iOS 5.0 est iCloud, qui laisse la possibilité (entre autres) de synchroniser des données entre différents appareils sous iOS. Ces données peuvent être des fichiers, mais aussi des enregistrements d'une base Core Data. Les informations pour associer Core Data à iCloud sont assez rares et parcellaires, d'où cet How-to.

Lire la suite...

 

iOS How-To : Using Core Data with iCloud

English Français

Disclaimer

Core Data with iCloud seems not to be really mature. This How-To should work, but you may encounter some oddities (mainly synchronization errors or corrupted transaction log). You may refer to the following thread (iOS Developer account needed) for more information. In the meantime, I do not recommend you to use this feature in a production environment.

End of disclaimer

One of iOS new feature is iCloud, which allow the possibility to synchronize data between different iOS devices. These data may be file, but may also be records from a Core Data database. Examples about how to use Core Data with iCloud are hard to find and often incomplete, that's why I wrote this how-to.

Lire la suite...

 

How-To iOS : Dupliquer les données entre deux versions iOS du Simulateur

English Français

À chaque mise à jour d'XCode, une nouvelle version d'iOS est fournie, remplaçant parfois une qui était déjà présente. Et dans ce cas, les paramètres et données utilisateurs sont réinitialisés. Voici comment reprendre les précédentes données et les appliquer à la nouvelle version.

Lire la suite...

 

iOS How-To : Duplicate settings between two iOS versions of the Simulator

English Français

With each XCode update, a new iOS version is available, sometimes replacing an older one. And in this case, user's settings and data are reseted. Here's the way to transfer these data from a previous iOS version to a new one.

Lire la suite...

 

How-To iOS : Afficher la photo d'un contact

English Français

Afficher la photo d'un contact provenant du carnet d'adresse est une chose relativement aisée au premier abord, mais qui malheureusement se comporte différemment en fonction de la version de l'OS. Voici les points à prendre en compte, et les limites associées.

Lire la suite...

 

iOS How-To : Displaying picture of a contact from address book

English Français

Displaying picture of a contact from the address book is a relatively easy at first, but unfortunately behaves differently depending on the version of the OS. Here's what to consider, and the limitations.

Lire la suite...

 

Tunnel IPv6 Hurricane Electric et Time Capsule

Avec les bornes Time Capsule (mais aussi les AirPort Extreme), il est possible de configurer un accès IPv6 par tunnel (entre autres solutions). Dans le cadre d'un tunnel fourni par Hurricane Electric, j'ai dû batailler quelque temps afin de savoir comment remplir les champs de configuration, les exemples trouvés sur Internet étant (très) peu nombreux et (souvent) contradictoires. Dont acte…

Lire la suite...

 

Java 6 for Mac OS X

English Français

As I use my MacBook as a development platform at work (I'm a computer consultant in a small company), and as I'm specialized in Java development, I have the need on some projects to use Java 6 SDK. Sun does not provide any Java SDK for Mac OS platform, and let Apple to provide its own JVM (based on Sun's one). But Mac OS X was stuck on Java 5 SDK.

Lire la suite...

 

FreeBSD sur MacBook (modèles Core Duo et Core 2 Duo)

English Français

Important (13/05/2008) : Comme je viens de m'acheter un MacBook Pro, ce billet ne sera plus mis à jour. Vous êtes libres de reprendre le contenu dans un Wiki ou autre page web, je serai heureux d'en donner le lien ici.

Comment installer FreeBSD sur un MacBook, en double boot avec Mac OS X (et les problèmes qui en découlent).

FreeBSD sur MacBook

Historique :

  • 01/03/2008 : Mise à jour pour FreeBSD 7.0.
  • 28/05/2007 : Mise à jour au sujet de l'enregistrement du son, autres corrections mineures.
  • 20/05/2007 : Mise à jour pour X.org 7.2.
  • 02/04/2007 : Ajouts pour le modèle Core 2 Duo.
  • 30/03/2007 : Correction d'erreurs, pilote Ethernet FreeBSD, clavier azerty français sous X.org.
  • 29/03/2007 : Comment désinstaller FreeBSD.
  • 04/02/2007 : Clarification sur les périphériques détectés.
  • 01/02/2007 : Pilote son (enfin) fonctionnel.
  • 07/01/2007 : Accélération graphique : plus besoin du patch noyau.
  • 06/12/2006 : Gestion du clavier sous X.org.
  • 18/11/2006 : Pilote du contrôleur audio, pilote du contrôleur Ethernet, accélération matérielle sous X.org, clarification des problèmes de clavier sous X.org, quelques modifications de la mise en forme.
  • 17/11/2006 : Pré-indications sur la gestion du son, pré-indications sur la gestion du contrôleur Ethernet, compléments sur les problèmes d'annulation de l'installation de FreeBSD.

Lire la suite...

 

FreeBSD on MacBook (Core Duo and Core 2 Duo models)

English Français

Important (13/05/2008) : As I've just bought a MacBook Pro, this post won't be updated anymore. You're free to reuse this content into a Wiki or any web page, I'll be happy to give its link from here.

Dual boot FreeBSD / Mac OS X on MacBook how-to (and the related issues).

FreeBSD on MacBook

Changelog:

  • 01/03/2008: Update for FreeBSD 7.0.
  • 28/05/2007: Update about sound recording, some minor changes.
  • 20/05/2007: Update for X.org 7.2.
  • 02/04/2007: Core 2 Duo model related changes.
  • 30/03/2007: Some fixes, FreeBSD Ethernet device driver, X.org French azerty mapping
  • 29/03/2007: How-to uninstall FreeBSD.
  • 04/02/2007: Details on detected devices.
  • 01/02/2007: Sound driver now works.
  • 07/01/2007: 3D acceleration : kernel patch is not needed anymore.
  • 06/12/2006: Keyboard mapping with X.org.
  • 18/11/2006: Sound driver, Ethernet driver, X.org 3D acceleration, details about keyboard problems with X.org, some page setup changes.
  • 17/11/2006: First details on sound management, first details on Ethernet management, new details on FreeBSD uninstall.

Lire la suite...

 

Wii, câble composante et jeux Virtual Console PAL

Quand les nouvelles technologies ne font pas forcement bon ménage avec les anciennes…

Lire la suite...

 

Profils ICC et applications

English Français

Comme j'en avais parlé précédemment lors d'un essai de Capture NX, les fichiers JPEG peuvent contenir un profil ICC intégré, mais les applications les affichant peuvent ne pas savoir en tenir compte, ce qui donne un rendu des couleurs hasardeux quand ce n'est pas complètement faux.

  • 19/08/2007 : Firefox 3.0 alpha 7 gère les profils ICC

Lire la suite...

 

ICC profiles and applications

English Français

As I said in a previous Capture NX test, JPEG files may have integrated ICC profile, but applications which display these files may not know how to use these profiles, which give an hazardous color rendering, when it's not fully false.

  • 19/08/2007: Firefox 3.0 alpha 7 supports ICC profiles

Lire la suite...

 

Tout connaitre sur l'écran de votre ordinateur Apple

English Français

Si vous possédez un ordinateur Apple, et que vous souhaitez connaitre les caractéristiques exactes de la dalle LCD de celui-ci, il suffit de suivre quelques petites étapes.

Lire la suite...

 

Know everything about your Apple computer display

English Français

If you own an Apple computer, and want to know all features of its LCD display, you just have to follow these steps.

Lire la suite...

 

Changer le dictionnaire du correcteur orthographique de Mac OS X

English Français

Si vous devez utiliser plusieurs langues pour vos travaux, vous ne savez pas forcement comment en changer pour le correcteur orthographique sans changer la langue du système en entier.

Lire la suite...

 

Change spell chek dictionary into Mac OS X applications

English Français

I you have to use many languages for your writings, you may not know how to switch from a language to another for built-in spell checker without changing system language.

Lire la suite...

 

- page 1 de 3